基于Xilinx Spartan-6 FPGA加速纹理映射的实现
设计可将Spartan 6与一对RS485收发器相连接,为DMX512提供支持。该协议可用于进行舞台上的灯光控制,能够让器件将周边的灯光与可视效果进行同步。在此,整个DMX512信号发送系统也是采用FPGA来实现的,而外部组件基本都是模拟组件。
此外,为了能与常用的控制器和传感器进行交互,我们的系统还支持MIDI。我们的设计实现与DMX512类似,只有模拟外部组件。我们还支持以太网(仅使用一颗PHY芯片)、音频(通过通用的AC97编解码器)以及PAL、SECAM和NTSC击JJ式视频输入。
这些外设大多数都能从FPGA获取时钟,而FPGA则使用其数字时钟管理器(DCM)从统一的50MHz时钟源将必要的频率进行综合。我们的电路板上只有两个额外的晶振,而且为进一步减少成本,正在考虑在将来的PCB版本中使用更多FPGA生成的时钟将其更换。
何谓纹理映射?
在所有Milkymist器件的FPGA必须执行的数据处理任务中,纹理映射是密集程度最高的。纹理映射是OpenGL及DirectX等已加速3D API的一种通用计算机图形运算,通常用于在屏幕上绘制带纹理的3D多边形。此外,其还能扭曲图像(见图3),而且我们也常将其用于此目的。
通用的图形处理单元在三角形上执行纹理映射,并且将更加复杂的多边形分解为一系列的三角形。输入到算法中的是待填充的三角形3个顶点的2D位置(也可能是原始3D坐标的投影),以及这3个顶点的2D纹理坐标。之后,该算法再逐像素绘制有纹理的三角形,方法是为每个像素线性地内插纹理坐标,然后复制这些坐标处的纹理像素(也称为纹理元素)。
通过简单地改变各顶点的位置或者每个顶点的纹理坐标的位置,纹理映射能够实现缩放、旋转或者比例尺变化等图像处理运算。但常见的问题是线性内插的结果并非整数,这就意味着应该在四个相邻的像素(见图4)中对纹理进行采样。在这种情况下,为了实现更理想的渲染,应读取四个像素,并将其色彩值进行平均(根据比例取不同的权重),这个流程被称为双线性滤波。我们的应用需要双线性滤波来实现理想的可视结果。
纹理映射,是一个计算强度大以及所需存储器非常密集的进程,这从性能的角度即决定了软件实现的不可行,在需要双线性滤波的时候尤为如此。
FPGA实现
预计用于读取帧缓冲器的存储器延迟将成为性能制约因素。我们没有采用高级预获取技术等复杂且资源密集的技术来降低存储延迟,而是简单地采用直接映射的像素元素高速缓存,不仅简单而且还能快速命中。另外,在设计纹理映射单元其余部分的时候,还需要注意让存储器读取延迟成为唯一的制约因素。
采用这种高速缓存可实现高达90%的命中率,以每个周期命中一次,每9个周期失的一次计算,存储器的平均存取时间为1.8个周期。采用80MHz的系统时钟,则此类高速缓存的每秒吞吐能力为44M像素,足以满足我们的应用所需。
为确保存储器存取时间是唯一的制约因素,我们在设计系统其余部分时,使之能够支持每个时钟周期大约一个输出像素的处理能力。与之相对应,算法的实现以占用空间为主(硬件组件很少或者根本没有基于时间的资源共享),但不要求复制资源密集的大型硬件单元。以空间为主的实现所用面积比时间共享的大,但更简单明了,需要的多路复用器数量越少,也能够更好地避免走线拥塞,从而更加简便地实现FPGA的时序收敛。为此,我们为纹理映射算法选择了深度流水线实现。
流水线的头几级用于从存储器中获取低带宽的顶点信息,然后使用某种Bresenham算法的变体计算内插纹理坐标与目标坐标。我们通过采用行为Verilog HDL来实现这些级,随后使用免费的XST综合器(1SE WebPACK设计套件的组成部分)进行处理以生成经优化的网表。地址生成器能够充分利用Spartan—6 FPGA的DSP48A1 Slice提供的硬件乘法器,高效率地计算与内插坐标对应的纹理帧缓冲器中的存储器地址。XST综合器能够根据HDL源代码中乘法运算符自动推导硬件乘法器,从而使其使用方法既简单又方便。
若要从存储器中获取纹理元素数据,则会变得更加复杂。在每个时钟周期,我们都需要从高速缓存中获取4个不同的像素。准备4个不同的高速缓存没有必要,因为双线性滤波器的不同通道通常使用来自同一高速缓存线路的数据。因此我们需要一个4端口SRAM,但这看似在FPGA中比较困难。
幸运的是,Spartan-6 FPGA中真正的双端口SRAM可提供理想的解决方案。我们通过使用两个原始的双端口SRAM复制数据,以适当的代价实现了4端口SRAM。在正常运行状态下(命中),每个端口为一个通道服务。在失的后重新填充
Spartan-6 Xilinx ASIC FPGA 相关文章:
- 骨灰级音响发烧友如何打造随身DAC兼耳扩?(02-09)
- 6 FPGA LX9 MicroBoard成为学习FPGA的另一低成本方法(02-10)
- Xilinx Kintex UltraScale 一半尺寸的 PCI Express 平台 (HTG-K816)(06-15)
- Xilinx全新参考设计提供业界首个单芯片400G解决方案(02-12)
- Xilinx用于工业自动化的机器视觉解决方案(11-30)
- Xilinx多协议机器视觉摄像机参考设计(12-01)