作者 主题:适用于8位计算机的FPGA VGA控制器 (Read 94029 times)

0位成员和4位客人正在查看此主题。

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下方面bodog#2200: 2020年11月29日,晚上11:39:36»
那么,关于这个项目,我想知道:为什么不实现一个软核,比如一个RISC-V CPU,它可以处理所有图形呢?这样,Z80只需要将代码和数据移动到GPU中's ram(此处可以使用DMA),并且"graphic CPU"可以更舒适,更高效地用C编程。
软核是否会每秒渲染1.25亿个新像素(任何线角/形状)并且仅吃掉大约1k逻辑元素&适用于软件和硬件的1k内存&寄存器和fifo,包括带旋转的阻击器功能&上/下尺寸/刻度采样&具有像素覆盖/碰撞检测功能的半透明功能,可适应不同的源位平面深度到不同的目标位平面深度?

因为这就是我们现在所拥有的,包括添加椭圆。
__________
布赖恩·HG。
 

在线的 滴滴

  • 经常贡献者
  • **
  • 职位:307
  • 国家: b
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2201: 2020年11月30日,上午09:40:59»
 

在线的 名义动物

  • 超级贡献者
  • ***
  • 帖子:2365
  • 国家: 科幻
    • 我的主页和电子邮件地址
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2202: 2020年11月30日,上午10:45:52»
半透明
这是如何运作的?
有两种机制:具有恒定的不透明度的副本,将目标与目标上的副本混合在一起;并使用Alpha通道(每个像素的第四部分)进行复制,除了对每个像素使用Alpha通道不透明度之外,其他操作都相同。

数学运算通常是通过缩放(与最高位对齐)每个颜色分量,然后乘以新像素图的不透明度,乘以目标像素的不透明度,再将两者相加,然后将最高有效位用于目标来实现的。 有时,像素图像素颜色值的分量会与其不透明度通道值预乘("预乘的颜色分量"),尽管这会影响动态范围,从而产生稍差的视觉效果。

例如,混合两个8位颜色分量 c0c1,不透明度 a 介于0(保持 c0)和256(使用 c1) 你用
    c =((256- a)·c0 + a·c1) >> 8
这在 a 也只有8位。在这种情况下,无论是实际值 a 使用的是 (a' + (a' >> 7)),或者其中一个像素图(原始图或副本图)没有真正的完全透明性。

如您所见,可以并行完成六个乘法和六个加法,它们构成了所涉及的大部分计算。 (根据所涉及的位深,也有一些位移,但是那是's minor.) 它非常适合FPGA或专用逻辑。
« 上次编辑:2020年11月30日,上午10:48:54 »
 
以下用户对此帖子表示感谢: 滴滴

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2203: 2020年11月30日,下午12:17:16»
是的。 您拥有的是一个经过修改的Linegen,它使2条圆弧生成了变量X&Y. 而且,如果我们不费吹灰之力地看两个45度分段/一半,就可以将这两个循环代码变成一个循环代码,用一个选择开关调用两次,将每个45度画成一半。 然后,对于输出,我们将使4x'drawpixels' into 1 'drawpixel'并调用例程4次,每次都有一个开关选择输出这4个象限中的1个。

对于填充标志,我们已经将该程序编程为我们的Verilog代码,当前我们在其中填充三角形和框。 我们需要椭圆做的就是逐行生成弧的外边缘,或者以一种可以看到y坐标移动的方式生成。 同样,如您所知,已经进行了编码。

好的,我现在可以使用完整的椭圆函数。  It takes X,Y 椭圆中心的坐标,并且 a & b X轴和Y轴尺寸以及常规值 颜色填充 attributes.

在转换为HDL之前,我是否需要优化此代码,或者您对减少Verilogification流程的一个循环是否有意见?  ???
 

在线的 阿斯米

  • 超级贡献者
  • ***
  • 职位:1671
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2204: 2020年11月30日,下午02:58:38»
那么,关于这个项目,我想知道:为什么不实现一个软核,比如一个RISC-V CPU,它可以处理所有图形呢?这样,Z80只需要将代码和数据移动到GPU中's ram(此处可以使用DMA),并且"graphic CPU"可以更舒适,更高效地用C编程。
视频卡是并行系统,而CPU是串行系统。你可以'在不损失很多性能的情况下,彼此替换。
我的博客 - 万物电子
DIY Spartan-7 FPGA开发板,适合初学者: //www.villagehousevacs.com/forum/fpga/custom-spartan-7-board-for-beginners/
 
以下用户对此帖子表示感谢: 滴滴

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2205: 2020年11月30日,下午06:01:20»
半透明

这是如何运作的?
对不起,没有什么改正。 在几何单位中,我们只有透明度。
要渲染每个像素,几何单元'的像素编写器执行'read-modify-write'每个写入的像素。 这样可以确定像素冲突,决定是在顶部写入1个像素还是另一个像素,并在不同的位平面格式之间进行转换,所有这些操作均由像素'pixel-writer' module.

在当前'MAGGIE'图层系统,由于我们使用16位ARGB色彩系统,4位alpha半透明+ 12位RGB,因此当前在图层之间具有半透明性。 每个像素的结果函数是如下的精确公式:'Nominal Animal' described. 当使用更大的新CycloneV FPGA添加DDR内存时,我们可以选择引入'Alpha blend' in our 'pixel-writer'与真彩色模式一样的模块<16位彩色屏幕无法计算或预先确定要选择的输出调色板。

MAGGIE系统允许这样做,因为它's的输出覆盖是在通过调色板后计算的,其中每层的解码颜色输出始终为16 / 32bits &我们能够混合生成的颜色以提供真实的颜色输出。

« 上次编辑:2020年11月30日,6:12:22 pm作者BrianHG »
__________
布赖恩·HG。
 
以下用户对此帖子表示感谢: 滴滴

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2206: 2020年12月1日,上午10:10:25»
是的。 您拥有的是一个经过修改的Linegen,它使2条圆弧生成了变量X&Y. 而且,如果我们不费吹灰之力地看两个45度分段/一半,就可以将这两个循环代码变成一个循环代码,用一个选择开关调用两次,将每个45度画成一半。 然后,对于输出,我们将使4x'drawpixels' into 1 'drawpixel'并调用例程4次,每次都有一个开关选择输出这4个象限中的1个。

对于填充标志,我们已经将该程序编程为我们的Verilog代码,当前我们在其中填充三角形和框。 我们需要椭圆做的就是逐行生成弧的外边缘,或者以一种可以看到y坐标移动的方式生成。 同样,如您所知,已经进行了编码。

好的,我现在可以使用完整的椭圆函数。  It takes X,Y 椭圆中心的坐标,并且 a & b X轴和Y轴尺寸以及常规值 颜色填充 attributes.

在转换为HDL之前,我是否需要优化此代码,或者您对减少Verilogification流程的一个循环是否有意见?  ???

那么,优化现有代码还是利用Verilogification破解?

代码: [选择]
Sub drawCircle(ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer, ByVal colour as Integer, ByVal filled As Boolean = FALSE)

Dim As Integer x,y,sigma,xd
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2

x = 0
y = b
sigma = 2*b2+a2*(1-2*b)
   While (b2*x <= a2*y)
      draw_pixel(xc+x, yc+y, colour) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, colour) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, colour) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, colour) : Rem   IV. Quadrant
     
If (filled) Then
      For xd=xc-x to xc+x
draw_pixel (xd, yc+y, colour)
draw_pixel (xd, yc-y, colour)
      Next xd
EndIf

If (sigma>= 0) Then
sigma += fa2*(1-y)
y=y-1
EndIf
sigma = sigma + b2*(4*x+6)
x=x+1
   Wend
   
   x=a
   y=0
   sigma = 2*a2+b2*(1-2*a)
   While (a2*y <= b2*x)
      draw_pixel(xc+x, yc+y, colour) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, colour) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, colour) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, colour) : Rem   IV. Quadrant

If (filled) Then
      For xd=xc-x to xc+x
draw_pixel (xd, yc+y, colour)
draw_pixel (xd, yc-y, colour)
      Next xd
EndIf

If (sigma>= 0) Then
sigma += fb2*(1-x)
x=x-1
EndIf
sigma = sigma + a2*(4*y+6)
y=y+1
   Wend
 
End Sub
 

在线的 阿斯米

  • 超级贡献者
  • ***
  • 职位:1671
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2207: 2020年12月1日,下午04:18:22»
该公司成立于1993年,其V1000基于类似Mips的CPU,可访问所有视频内存。 v1000是一个25 MHz的RISC CPU,具有32 * 32的单周期乘法,占据了芯片的绝大部分!所有操作均以固定的逗号在32位整数中执行,并且还有一个用于计算近似反值的单周期指令(即,两笔近似整数除法)和通常的RISC指令集。
现代GPU是大型SIMD机器,这意味着单个指令序列被调度为1000条's个相同的内核,这些内核由非常高的延迟(但馈入)但带宽巨大的GDDR6 / 6X内存提供。这就是他们每秒可多次输出830万个4K像素并处理100个像素的原因'渲染每一帧时,数以百万计的三角形。
除非您使用带有HBM2 DRAM的超大型且快速的存储设备(否则==昂贵且非常耗电),否则无法在FPGA内部复制该方法,否则您将无法获得令人印象深刻的结果。如果您使用运行在933 MHz的64位DDR3内存总线和类似160T Kintex-7的设备,则可能有1M三角形和1080p分辨率,因为您很幸运能够在其中容纳100个内核。
我的博客 - 万物电子
DIY Spartan-7 FPGA开发板,适合初学者: //www.villagehousevacs.com/forum/fpga/custom-spartan-7-board-for-beginners/
 
以下用户对此帖子表示感谢: 滴滴

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2208: 2020年12月3日,下午09:25:19»
那么,优化现有代码还是利用Verilogification破解?

代码: [选择]
Sub drawCircle(ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer, ByVal colour as Integer, ByVal filled As Boolean = FALSE)

Dim As Integer x,y,sigma,xd
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2

x = 0
y = b
sigma = 2*b2+a2*(1-2*b)
   While (b2*x <= a2*y)
      draw_pixel(xc+x, yc+y, colour) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, colour) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, colour) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, colour) : Rem   IV. Quadrant
     
If (filled) Then
      For xd=xc-x to xc+x
draw_pixel (xd, yc+y, colour)
draw_pixel (xd, yc-y, colour)
      Next xd
EndIf

If (sigma>= 0) Then
sigma += fa2*(1-y)
y=y-1
EndIf
sigma = sigma + b2*(4*x+6)
x=x+1
   Wend
   
   x=a
   y=0
   sigma = 2*a2+b2*(1-2*a)
   While (a2*y <= b2*x)
      draw_pixel(xc+x, yc+y, colour) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, colour) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, colour) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, colour) : Rem   IV. Quadrant

If (filled) Then
      For xd=xc-x to xc+x
draw_pixel (xd, yc+y, colour)
draw_pixel (xd, yc-y, colour)
      Next xd
EndIf

If (sigma>= 0) Then
sigma += fb2*(1-x)
x=x-1
EndIf
sigma = sigma + a2*(4*y+6)
y=y+1
   Wend
 
End Sub

好吧,首先,暂时摆脱填充的废话,并记住我们一次只会输出一个象限,第一步是测试代码...

代码: [选择]
Sub draw_ellipse (ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer)

Dim As Integer x,y,sigma,xd
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2
        Dim As Integer cr,cg,cb


cr=255:cg=0:cb=0

x = 0
y = b
sigma = 2*b2+a2*(1-2*b)
   While (b2*x <= a2*y)
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
     

If (sigma>= 0) Then
sigma += fa2*(1-y)
y=y-1
EndIf
sigma = sigma + b2*(4*x+6)
x=x+1
   Wend




cr=0:cg=255:cb=0
   
   x=a
   y=0
   sigma = 2*a2+b2*(1-2*a)
   While (a2*y <= b2*x)
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant


If (sigma>= 0) Then
sigma += fb2*(1-x)
x=x-1
EndIf
sigma = sigma + a2*(4*y+6)
y=y+1
   Wend

End Sub

I'在.zip中附加了基本代码和.exe。
只需移动鼠标即可操纵椭圆。
我使用了2种颜色,第一个45度绘制时为红色,第二个绘制时为绿色。
 (按ESC键退出...)
 (抱歉,如果X&Y radius are both 0)

看看椭圆非常狭窄时会发生什么。
是的,在我们开始对其进行HDL处理之前,该代码还需要1件东西。
« 上次编辑:2020年12月3日,9:38:03 pm by BrianHG »
__________
布赖恩·HG。
 
以下用户对此帖子表示感谢: Nockieboy

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2209: 2020年12月4日,上午12:05:08»
好的,这里是修复程序。
需要的是两件事。
1. 如果当前45度平面上的椭圆半径为0,则绘制一条直线。
2. 如果在绘制当前45度平面上的椭圆曲线后仍存在余数,则IE't reached the '0'轴,完成渲染线。

请参阅代码和随附的示例:
代码: [选择]
Sub draw_ellipse (ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer)

Dim As Integer x,y,sigma,xd
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2
        Dim As Integer cr,cg,cb


cr=255:cg=0:cb=0

x = 0
y = b
sigma = 2*b2+a2*(1-2*b)
   While ((b2*x <= a2*y) and b>0)
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
     

If (sigma>= 0) Then
sigma += fa2*(1-y)
y=y-1
EndIf
sigma = sigma + b2*(4*x+6)
x=x+1
   Wend

REM Finish line if Y hasn't landed on 0
if y<=1 then
  y=0
    for x=x to a
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
    next x
endif


cr=0:cg=255:cb=0
   
   x=a
   y=0
   sigma = 2*a2+b2*(1-2*a)
   While ((a2*y <= b2*x) and a>0)
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant


If (sigma>= 0) Then
sigma += fb2*(1-x)
x=x-1
EndIf
sigma = sigma + a2*(4*y+6)
y=y+1
   Wend

REM Finish line if X hasn't landed on 0
if x<=1 then
  x=0
    for y=y to b
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
    next y
endif

End Sub

下一步;如果您看上面的代码,它会做两次相同的事情,除了X&Y, A&B are swapped.
基本上,在制作HDL之前,我们要'45 degree'一次将其作为内部函数使用(因为我们正在对逻辑门进行硬编码,因此仅对数学进行一次编码),同时将两种不同的启动条件送入函数并交换结果。
« 上次编辑:2020年12月4日,上午12:30:52 by BrianHG »
__________
布赖恩·HG。
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2210: 2020年12月4日,上午10:27:34»
嗯...我可以'找出解决弧形绘制功能第二遍的最佳方法。 我需要将x和y交换为圆弧计算,但是对于draw_pixel调用,我需要将它们保持不变。  I can'找出一个简单的方法来做到这一点,而又避免丑陋的黑客入侵。下面的代码使用drawArc绘制第一个弧,但是第二条弧仍以旧的方式绘制。 有没有比在函数中添加布尔参数并具有两组draw_pixel调用(其中x和y交换的调用)更好的使drawArc对两个弧均有效的方法?

代码: [选择]
Sub draw_ellipse (ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer)

   Dim As Integer x,y,sigma,xd
   Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2
   Dim As Integer cr,cg,cb

   cr=255:cg=0:cb=0
   x=0
   y=b
   drawArc (x, y, a, b, xc, yc, cr, cg, cb) *****  First call to drawArc, second call needs to be 'drawArc (y, x, b, a, xc, yc, cr, cg, cb)
                                            *****  but part of drawArc needs x & y not to be flipped (draw_pixel calls)
   cr=0:cg=255:cb=0   
   x=a
   y=0
   sigma = 2*a2+b2*(1-2*a)
   While ((a2*y <= b2*x) and a>0)
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant

      If (sigma>= 0) Then
         sigma += fb2*(1-x)
         x=x-1
      EndIf
      sigma = sigma + a2*(4*y+6)
      y=y+1
   Wend

   Rem Finish line if X hasn't landed on 0
   If x<=1 Then
      x=0
      For y=y to b
         draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
         draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
         draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
         draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
      Next y
   EndIf

End Sub

Sub drawArc (ByVal x As Integer, ByVal y As Integer, ByVal a As Integer, ByVal b As Integer, ByVal xc As Integer, ByVal yc As Integer, ByVal cr As Integer, ByVal cg As Integer, ByVal cb As Integer)

   Dim As Integer sigma
   Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2

   sigma = 2*b2+a2*(1-2*b)
   While ((b2*x <= a2*y) and b>0)
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant

      If (sigma>= 0) Then
         sigma += fa2*(1-y)
         y=y-1
      EndIf
      sigma = sigma + b2*(4*x+6)
      x=x+1
   Wend

   REM Finish line if y hasn't landed on 0
   If y<=1 Then
      y=0
      For x=x to a
         draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
         draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
         draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
         draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
      Next x
   EndIf

End Sub
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2211: 2020年12月4日,下午04:11:34»
为了完整起见,在这里'我的hacky(但有效)椭圆函数:

代码: [选择]
Sub draw_ellipse (ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer)

Dim As Integer x,y,sigma,xd
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2
   Dim As Integer cr,cg,cb

cr=255:cg=0:cb=0
x = 0
y = b
drawArc(FALSE,x,y,a,b,xc,yc,cr,cg,cb)

cr=0:cg=255:cb=0   
   x=a
   y=0
   drawArc(TRUE,y,x,b,a,xc,yc,cr,cg,cb)


End Sub

Sub drawArc (ByVal inv As Boolean, ByVal x As Integer, ByVal y As Integer, ByVal a As Integer, ByVal b As Integer, ByVal xc As Integer, ByVal yc As Integer, ByVal cr As Integer, ByVal cg As Integer, ByVal cb As Integer)

Dim As Integer sigma
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2

sigma = 2*b2+a2*(1-2*b)
   While ((b2*x <= a2*y) and b>0)
   
    If (inv) Then
      draw_pixel(xc+y, yc+x, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-y, yc+x, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+y, yc-x, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-y, yc-x, cr, cg, cb) : Rem   IV. Quadrant
    Else
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
    EndIf

If (sigma>= 0) Then
sigma += fa2*(1-y)
y=y-1
EndIf
sigma = sigma + b2*(4*x+6)
x=x+1
   Wend

REM Finish Line if y hasn't landed on 0
If y<=1 Then
  y = 0
    For x=x to a
      If (inv) Then
      draw_pixel(xc+y, yc+x, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-y, yc+x, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+y, yc-x, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-y, yc-x, cr, cg, cb) : Rem   IV. Quadrant
      Else
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
      EndIf
    下一页 x
EndIf

End Sub
« 上次编辑:2020年12月4日,下午04:13:51 by nockieboy »
 

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2212: 2020年12月8日,上午01:15:30»
为了完整起见,在这里'我的hacky(但有效)椭圆函数:

代码: [选择]
Sub draw_ellipse (ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer)

Dim As Integer x,y,sigma,xd
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2
   Dim As Integer cr,cg,cb

cr=255:cg=0:cb=0
x = 0
y = b
drawArc(FALSE,x,y,a,b,xc,yc,cr,cg,cb)

cr=0:cg=255:cb=0   
   x=a
   y=0
   drawArc(TRUE,y,x,b,a,xc,yc,cr,cg,cb)


End Sub

Sub drawArc (ByVal inv As Boolean, ByVal x As Integer, ByVal y As Integer, ByVal a As Integer, ByVal b As Integer, ByVal xc As Integer, ByVal yc As Integer, ByVal cr As Integer, ByVal cg As Integer, ByVal cb As Integer)

Dim As Integer sigma
Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2

sigma = 2*b2+a2*(1-2*b)
   While ((b2*x <= a2*y) and b>0)
   
    If (inv) Then
      draw_pixel(xc+y, yc+x, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-y, yc+x, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+y, yc-x, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-y, yc-x, cr, cg, cb) : Rem   IV. Quadrant
    Else
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
    EndIf

If (sigma>= 0) Then
sigma += fa2*(1-y)
y=y-1
EndIf
sigma = sigma + b2*(4*x+6)
x=x+1
   Wend

REM Finish Line if y hasn't landed on 0
If y<=1 Then
  y = 0
    For x=x to a
      If (inv) Then
      draw_pixel(xc+y, yc+x, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-y, yc+x, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+y, yc-x, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-y, yc-x, cr, cg, cb) : Rem   IV. Quadrant
      Else
      draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
      draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
      draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
      draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
      EndIf
    下一页 x
EndIf

End Sub
好吧,研究你的正确'flip'并移动(红色部分):

   x=0
   y=b
   drawArc(FALSE,x,y,a,b,xc,yc,cr,cg,cb)



   x=a
   y=0
   drawArc(TRUE,y,x,b,a,xc,yc,cr,cg,cb)

在绘制弧内。

这应该消除(红色填充):
   Dim As Integer x,y,sigma,xd
   Dim As Integer a2 = a * a,b2 = b * b,fa2 = 4 * a2,fb2 = 4 * b2
   Dim As Integer cr,cg,cb

就在您代码的顶部。
接下来,一次输出1并添加到'Sub drawArc(ByVal inv As Boolean,...'另一个标志叫做'Quadrant'从0到3。  Then call the 'drawArc(FALSE,[象限]' and 'drawArc(TRUE,[象限]'生成4次椭圆。

在Verilog中,模块一次只能输出1个象限/一组坐标。 从Z80调用椭圆时,将调用Draw-Ellipse 4次以绘制4个角。 这将允许您在调用具有相同中心坐标的4时渲染椭圆,或者移动XY中心坐标以制作带有圆角的矩形框。

不用担心填充,线填充在绘制椭圆生成器外部运行。
__________
布赖恩·HG。
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2213: 2020年12月8日,上午10:32:44»
在Verilog中,模块一次只能输出1个象限/一组坐标。 从Z80调用椭圆时,将调用Draw-Ellipse 4次以绘制4个角。 这将允许您在调用具有相同中心坐标的4时渲染椭圆,或者移动XY中心坐标以制作带有圆角的矩形框。

为了在矩形上具有圆角边缘,我'我是否需要将椭圆或圆弧旋转45度?

这里's what I'完成-一切正常:

代码: [选择]
Sub draw_ellipse (ByVal xc As integer, ByVal yc As Integer, ByVal a As integer, ByVal b As Integer)
   
   Dim As Integer cr, cg, cb=0, quad
   
    For quad=0 To 3
        cr=0:cg=255
        drawArc (TRUE, quad, a, b, xc, yc, cr, cg, cb)
        cr=255:cg=0
        drawArc (FALSE, quad, a, b, xc, yc, cr, cg, cb)
    Next quad
   
End Sub

Sub drawArc (ByVal inv As Boolean, ByVal quadrant As Integer, ByVal af As Integer, ByVal bf As Integer, ByVal xc As Integer, ByVal yc As Integer, ByVal cr As Integer, ByVal cg As Integer, ByVal cb As Integer)
   
    Dim As Integer sigma, x=0, y, a, b, a2, b2, fa2, fb2
   
    If (inv) Then
        a=bf
        b=af
    Else
        a=af
        b=bf
    EndIf
   
    a2 = a*a
    b2 = b*b
    fa2 = 4*a2
    fb2 = 4*b2
    y=b
   
    sigma = 2*b2+a2*(1-2*b)
    While ((b2*x <= a2*y) and b>0)
   
        Select Case quadrant
            Case 0
                If (inv) Then
                    draw_pixel(xc+y, yc+x, cr, cg, cb) : Rem   I. Quadrant
                Else
                    draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
                EndIf
            Case 1
                If (inv) Then
                    draw_pixel(xc-y, yc+x, cr, cg, cb) : Rem  II. Quadrant
                Else
                    draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem  II. Quadrant
                EndIf
            Case 2
                If (inv) Then
                    draw_pixel(xc+y, yc-x, cr, cg, cb) : Rem III. Quadrant
                Else
                    draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem III. Quadrant
                EndIf
            Case 3
                If (inv) Then
                    draw_pixel(xc-y, yc-x, cr, cg, cb) : Rem  IV. Quadrant
                Else
                    draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem  IV. Quadrant
                EndIf
            Case Else
                Return
        End Select
   
        If (sigma>= 0) Then
            sigma += fa2*(1-y)
            y=y-1
        EndIf
        sigma = sigma + b2*(4*x+6)
        x=x+1
       
    Wend

   REM终点线(如果有)'t landed on 0
    If y<=1 Then
        y=0
        For x=x to a
        If (inv) Then
              draw_pixel(xc+y, yc+x, cr, cg, cb) : Rem   I. Quadrant
              draw_pixel(xc-y, yc+x, cr, cg, cb) : Rem   II. Quadrant
              draw_pixel(xc+y, yc-x, cr, cg, cb) : Rem   III. Quadrant
              draw_pixel(xc-y, yc-x, cr, cg, cb) : Rem   IV. Quadrant
        Else
              draw_pixel(xc+x, yc+y, cr, cg, cb) : Rem   I. Quadrant
              draw_pixel(xc-x, yc+y, cr, cg, cb) : Rem   II. Quadrant
              draw_pixel(xc+x, yc-y, cr, cg, cb) : Rem   III. Quadrant
              draw_pixel(xc-x, yc-y, cr, cg, cb) : Rem   IV. Quadrant
        EndIf
        Next x
    EndIf
   
End Sub

在下面的zip文件中附加了geoarc.bas和已编译的.exe。 试图从函数参数中删除x和y并标准化drawArc函数的输入会引起一些头疼的事情,但最后我进行了研究。 ::)
« 上次编辑:2020年12月8日,上午11:10:11 by nockieboy »
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2214: 2020年12月8日,上午11:03:29 »
所以这是前一天到来的-今天展开看一下。 QFN周围的那些0403'看起来不像我想的那样糟糕'd be.  Guess I'只需轻轻地给一组焊盘上锡,将电阻器/电容固定到这些焊盘上,然后将另一面焊接到它们的焊盘上,就像我对所有其他焊盘进行焊接一样,但要多加注意。

在YouTube上观看了一些视频,以了解如何最好地焊接QFN。  That'对我来说将是第一个,但我'我有10个QFN和10个板子,所以我'm hoping I'在第十节之前就可以掌握了。  :o  In fairness, doesn'看起来不太硬-助焊剂,轻轻地垫上锡,清洁并助焊剂,将QFN弹出,并尝试使用热风枪尽最大可能遵循某种焊接方式。 我猜较薄的PCB将更快地预热,但是我'我需要注意不要使其过热。

对于后面的人来说,C11和R18是0805组件,靠近卡顶部通孔的电阻和电容网络是0603,而QFN封装周围的组件是0402。 下方的切割垫有1厘米的盒子。
 

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2215: 2020年12月8日,下午07:52:04»
好的PCB。 仅放置100ohm并联终结器和0.1uf电容。 请勿放置双50ohm终结器。
__________
布赖恩·HG。
 
以下用户对此帖子表示感谢: Nockieboy

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2216: 2020年12月8日,下午07:55:12»
在Verilog中,模块一次只能输出1个象限/一组坐标。 从Z80调用椭圆时,将调用Draw-Ellipse 4次以绘制4个角。 这将允许您在调用具有相同中心坐标的4时渲染椭圆,或者移动XY中心坐标以制作带有圆角的矩形框。

为了在矩形上具有圆角边缘,我'我是否需要将椭圆或圆弧旋转45度?

这里's what I'完成-一切正常:

想一会儿。   有4个象限正在绘制。 因此,椭圆的4个边。
问题1:如果只调用4个中的1个,会发生什么(即结果形状如何)?
问题2:如果您更改Xc / Yc并每次都调用一个不同的4中的1,会发生什么?

I'll ignore the 'REM终点线(如果有)'t landed on 0'绘制了四个象限。 我们将在verilog中修复此问题...

好的,现在,将函数转换为verilog。 我们将使该函数看起来/具有与当前相同的IO和控件'line_generator.sv'. 除此之外,我们将添加一个2位输入,称为'Quadrant'当锁存时,哪个锁存要输出/渲染的象限'RUN' is asserted.

基本上是复制& rename the 'line_generator.sv' into a 'ellipse_generator.sv'并添加一个新的2位输入,称为'Quadrant'.

至于'geometry_xy_plotter.sv',我们将生成一个'line_select_mux'该模块将解决  'line_generator.sv' or 'ellipse_generator.sv'进入第一个水流的地方'line_generator.sv'它将根据所调用的图形操作码在2个之间进行选择。

« 上次编辑:2020年12月8日,9:32:46 pm by BrianHG »
__________
布赖恩·HG。
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2217: 2020年12月9日,下午03:27:56»
想一会儿。   有4个象限正在绘制。 因此,椭圆的4个边。
问题1:如果只调用4个中的1个,会发生什么(即结果形状如何)?
问题2:如果您更改Xc / Yc并每次都调用一个不同的4中的1,会发生什么?

啊,那是'当我问这个问题时,不要直想。  ;)

好的,现在,将函数转换为verilog。 我们将使该函数看起来/具有与当前相同的IO和控件'line_generator.sv'. 除此之外,我们将添加一个2位输入,称为'Quadrant'当锁存时,哪个锁存要输出/渲染的象限'RUN' is asserted.

基本上是复制& rename the 'line_generator.sv' into a 'ellipse_generator.sv'并添加一个新的2位输入,称为'Quadrant'.

全部完成-见附件。 我打算继续尝试将FreeBasic转换为HDL,但是不要'我们需要输入'invert' as well?

We'重新要做乘法。  Can'不看就回想起(并且可以't目前),如果我们'我之前已经做过-那'我会推断出一些额外的逻辑'我猜,所以我没有'不想急着前进并把一切都弄错了,而不必等着看你的所作所为've got in mind next. :)

至于'geometry_xy_plotter.sv',我们将生成一个'line_select_mux'该模块将解决  'line_generator.sv' or 'ellipse_generator.sv'进入第一个水流的地方'line_generator.sv'它将根据所调用的图形操作码在2个之间进行选择。

是否需要一个单独的模块? 本来以为只是放到geometry_xy_plotter.sv中会很方便,除非您'是否有计划在其他地方重复使用?
« 上次编辑:2020年12月9日,下午04:41:19 by nockieboy »
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2218: 2020年12月10日,下午05:47:06»
今天就开始构建DVI测试仪。 我做了三次尝试使QFN以某种方式焊接到PCB'我隐约满意-可能仍然不满意'焊接正确,但据我所知,在所有触点上看起来都很好,所以我'组装了其余的电路板。  That'当我发现0402s aren时'那个坏,只是该死的'即使我在连接时尽量不要沉积太多焊锡,这真的很难'米使用0.5mm焊料。

不过,像我一样,我不得不停下脚步've realised I'我犯了一个错误-我没有't订购任何0402 12.4K电阻器。 | O  This means I'我没有R3,我猜那板子赢了't work.  That'可能会延迟获得这些电阻器的时间,我猜'我只需要硬着头皮,与Mouser达成另一项大命令来否定他们的P&P收费,否则'我要花大约20美元才能买到100个这样的电阻器...  :-\
 

在线的 阿斯米

  • 超级贡献者
  • ***
  • 职位:1671
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2219: 2020年12月10日,晚上08:52:58»
不过,像我一样,我不得不停下脚步've realised I'我犯了一个错误-我没有't订购任何0402 12.4K电阻器。 | O  This means I'我没有R3,我猜那板子赢了't work.  That'可能会延迟获得这些电阻器的时间,我猜'我只需要硬着头皮,与Mouser达成另一项大命令来否定他们的P&P收费,否则'我要花大约20美元才能买到100个这样的电阻器...  :-\
大学教师'不用担心-我们所有人偶尔都会发生这种情况 :-[ 特别是对于项目的REV 1。
大学教师'您有没有当地的在线零售商'对运送小订单收取可笑的费用吗?这些零件不会急于到达,因为您仍然没有代码,只需将其插入韩元即可。'什么也别做(好,除了确保赢了'当您第一次连接电源并打开电源时,请让它冒烟 :D )。我只是去LCSC并订购所有无源零件的卷轴(它们中的大多数都是超便宜的,即使是名牌产品也是如此),然后让它们通过e-packet或类似的东西慢船,同时您要处理HDL代码以启动并运行这些东西。您将在以后的项目中找到这些零件的用途。
同时,我建议您下载HDMI规范-在此处填写简短表格后,可以免费下载1.3a版: //www.hdmi.org/requestform/clickrequestasync?docId=16 这个版本足以满足您的需求,因此请略过它以熟悉事物在更高层次上的工作方式。大学教师'现在暂时不详细介绍,只需基本的熟悉就足够了。您会发现与VGA有很多相似之处,区别主要在于消隐间隔期间发生的情况-'传输所有辅助信息(例如流信息包,音频和/或其他东西)时(对于VGA或DVI,'只是一堆虚无)。
« 上次编辑:2020年12月10日,10:11:32 pm by asmi »
我的博客 - 万物电子
DIY Spartan-7 FPGA开发板,适合初学者: //www.villagehousevacs.com/forum/fpga/custom-spartan-7-board-for-beginners/
 
以下用户对此帖子表示感谢: Nockieboy

离线 马里什

  • 超级贡献者
  • ***
  • 帖子:4014
  • 国家: RO
  • .
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2220: 2020年12月10日,晚上09:07:01»

不过,像我一样,我不得不停下脚步've realised I'我犯了一个错误-我没有't订购任何0402 12.4K电阻器。 |

您只需要堆叠2-3个电阻器...并联电阻器... ex 68k + 15k即可为您提供12.3k ,39 + 39 + 33给您12.26,等等,47 + 47 + 27 = 12.56...。
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2221: 2020年12月10日,晚上10:11:54»

不过,像我一样,我不得不停下脚步've realised I'我犯了一个错误-我没有't订购任何0402 12.4K电阻器。 |

您只需要堆叠2-3个电阻器...并联电阻器... ex 68k + 15k即可为您提供12.3k ,39 + 39 + 33给您12.26,等等,47 + 47 + 27 = 12.56...。

我只是不't可以选择任何尺寸的电阻(可能是通孔除外)组成该值,更不用说0402'刚刚开始使用。

大学教师'您有没有当地的在线零售商'对运送小订单收取可笑的费用吗?这些零件不会急于到货,因为您仍然有相应的代码,只需将其插入韩元'什么也别做(好,除了确保赢了'当您第一次连接电源并打开电源时,请让它冒烟 :D )。我只是去LCSC并订购所有无源零件的卷轴(它们中的大多数都是超便宜的,即使是名牌产品也是如此),然后让它们通过e-packet或类似的东西慢船,同时您要处理HDL代码以启动并运行这些东西。您将在以后的项目中找到这些零件的用途。

不是,不是 他们似乎都为运输定价'free'阻止人们下小订单的门槛。 廉价和小数量零件的唯一真正供应商是中国分销商,而我试图让自己成为他们的中间人。可能必须要例外,尤其是在时间有限的情况下'正如您正确指出的那样,这是一个问题。  ;)
 

在线的 阿斯米

  • 超级贡献者
  • ***
  • 职位:1671
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2222: 2020年12月10日,晚上10:41:06»
不是,不是 他们似乎都为运输定价'free'阻止人们下小订单的门槛。 廉价和小数量零件的唯一真正供应商是中国分销商,而我试图让自己成为他们的中间人。可能必须要例外,尤其是在时间有限的情况下'正如您正确指出的那样,这是一个问题。  ;)
看着法纳尔: //uk.farnell.com/help-delivery-information 他们显示40英镑以上的免费送货,听起来很棒。在这里,我们在Digikey和Mouser处都有100美元的免费送货门槛。
我的博客 - 万物电子
DIY Spartan-7 FPGA开发板,适合初学者: //www.villagehousevacs.com/forum/fpga/custom-spartan-7-board-for-beginners/
 

离线 Nockieboy

  • 超级贡献者
  • ***
  • 帖子:1248
  • 国家: 英国
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2223: 2020年12月11日,上午11:50:48»
不是,不是 他们似乎都为运输定价'free'阻止人们下小订单的门槛。 廉价和小数量零件的唯一真正供应商是中国分销商,而我试图让自己成为他们的中间人。可能必须要例外,尤其是在时间有限的情况下'正如您正确指出的那样,这是一个问题。  ;)
看着法纳尔: //uk.farnell.com/help-delivery-information 他们显示40英镑以上的免费送货,听起来很棒。在这里,我们在Digikey和Mouser处都有100美元的免费送货门槛。

是的,Mouser也是这样做的-40英镑的免运费门槛是相同的。 只是令人烦恼的是,我必须订购40英镑以上的订单才能获得所需的有效0.011p电阻。 ;)

阅读数据表后,看来我可能还是不需要它-以下是从数据表中直接摘录的内容:

7.2模拟电流基准
REXT引脚(引脚6)是一个模拟电流检测端口,用于为差分输出OUT_Dx提供准确的电流基准。为了获得最佳的输出电压摆幅精度,建议在该端子和GND之间连接一个12.4 kohm电阻(容差为1%)。

如果不使用外部12.4 kohm 1%电阻,则该引脚可以直接连接到GND或VDD(0 ohm)。在上述任何一种情况下,输出均可正常工作,但在下列参数的电压和温度范围内精度会降低:输出电平(VOL),差分输出电压摆幅以及上升和下降时间精度。


它没有'只能指定降低了多少精度,但是如果板卡和HDL能够按预期工作,它应该可以正常工作,而无论我最终从哪里订购,我都在等待12.4K电阻器。
 

离线 布莱恩·HG

  • 超级贡献者
  • ***
  • 帖子:5027
  • 国家: 钙
bodog:用于8位计算机的FPGA VGA控制器
« 在以下bodog#2224: 2020年12月11日,晚上11:54:48»
不是,不是 他们似乎都为运输定价'free'阻止人们下小订单的门槛。 廉价和小数量零件的唯一真正供应商是中国分销商,而我试图让自己成为他们的中间人。可能必须要例外,尤其是在时间有限的情况下'正如您正确指出的那样,这是一个问题。  ;)
看着法纳尔: //uk.farnell.com/help-delivery-information 他们显示40英镑以上的免费送货,听起来很棒。在这里,我们在Digikey和Mouser处都有100美元的免费送货门槛。

是的,Mouser也是这样做的-40英镑的免运费门槛是相同的。 只是令人烦恼的是,我必须订购40英镑以上的订单才能获得所需的有效0.011p电阻。 ;)

阅读数据表后,看来我可能还是不需要它-以下是从数据表中直接摘录的内容:

7.2模拟电流基准
REXT引脚(引脚6)是一个模拟电流检测端口,用于为差分输出OUT_Dx提供准确的电流基准。为了获得最佳的输出电压摆幅精度,建议在该端子和GND之间连接一个12.4 kohm电阻(容差为1%)。

如果不使用外部12.4 kohm 1%电阻,则该引脚可以直接连接到GND或VDD(0 ohm)。在上述任何一种情况下,输出均可正常工作,但在下列参数的电压和温度范围内精度会降低:输出电平(VOL),差分输出电压摆幅以及上升和下降时间精度。


它没有'只能指定降低了多少精度,但是如果板卡和HDL能够按预期工作,它应该可以正常工作,而无论我最终从哪里订购,我都在等待12.4K电阻器。
我会说,唐'暂时不要订购12.4k。 只需插入一个10k电阻。  Let's see what happens. 当需要再次下订单时,请保存12.4k。

这个周末我将有时间帮助您解决椭圆问题。  It shouldn'太难了,因为我们在其他任何地方都做过这种类型的编码。 而且,在verilog中相乘只是一个' * '. 明天我将进一步研究编码。
__________
布赖恩·HG。
 
以下用户对此帖子表示感谢: Nockieboy


分享我

掘客  Facebook  SlashDot  可口的  Technorati  推特  谷歌  雅虎
中频