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.