Okay, it's been a busy week and next it's just getting busier. I don't have the time to sit and work out how to massage the Bezier code into something compatible with FreeBasic or HDL, so I'm going with the ellipse code:

`Sub drawEllipse(ByVal x0 As Integer, ByVal y0 As Integer, ByVal x1 As Integer, ByVal y1 As Integer, ByVal colour as Integer, ByVal filled As Boolean = FALSE)`

Dim As Integer a = Abs(x1-x0), b = Abs(y1-y0), b1, x : Rem values of diameter

Dim As Integer dx = 4*(1-a)*b*b, dy = 4*(b1+1)*a*a : Rem error increment

Dim As Integer errd = dx + dy + b1 * a * a, e2 : Rem error of 1.step

b1 = b And 1

if (x0 > x1) then

x0 = x1

x1 = x1 + a : Rem if called with swapped points

End If

if (y0 > y1) Then

y0 = y1 : Rem .. exchange them

End If

y0 = y0 + (b + 1) / 2

y1 = y0 - b1 : Rem starting pixel

a = a*(8*a)

b1 = 8*b*b

While (x0 <= x1)

draw_pixel(x1, y0, colour) : Rem I. Quadrant

draw_pixel(x0, y0, colour) : Rem II. Quadrant

draw_pixel(x0, y1, colour) : Rem III. Quadrant

draw_pixel(x1, y1, colour) : Rem IV. Quadrant

If (filled) Then

For x=x0 to x1

draw_pixel (x, y0, colour)

draw_pixel (x, y1, colour)

Next x

EndIf

e2 = 2*errd

If (e2 <= dy) Then

y0 = y0 + 1

y1 = y1 - 1

dy = dy + a

errd = errd + dy : rem y Step

End If

If (e2 >= dx Or 2*errd > dy) Then

x0 = x0 + 1

x1 = x1 - 1

dx = dx + b1

errd = errd + dx : rem x Step

End If

Wend

While (y0 - y1 < b) : Rem too early stop of flat ellipses a=1

draw_pixel(x0 - 1, y0, colour) : Rem -> finish tip of Ellipse

y0 = y0 + 1

draw_pixel(x1 + 1, y0, colour)

draw_pixel(x0 - 1, y1, colour)

y1 = y1 - 1

draw_pixel(x1 + 1, y1, colour)

Wend

End Sub

It works fine in FreeBasic, so if you have no objections I'll start translating this into Verilog as a separate function, though it's likely to take a while due to work.

I've also attached my first version of the schematic for the Cyclone V GPU card for comment if anyone is interested.