图 1. System Generator for DSP中插值查找表顶层方框图
图2显示了1000字小容量LUT通过双端口RAM模块的部署步骤。由于该模块系只读存储器,布尔常数模块We_const强制将写入归零。信号 X0和X0+1则用作ROM表上后续的两个地址。Data_const模块的零常数定义了任何ROM字的大小(即本例中的ny)。
图2 System Generator for DSP中的小容量LUT图
下面的公式显示了以x0为x的最高有效位的情况下,如何在两个已知点(x0,y0)和(x1,y1)之间插入坐标为(x,y)的点:
图3 System Generator for DSP的线性内插图
从硬件角度来看,这些模块什么都不占用。总的来说(且根据我们通过ILUT方法应用的函数类型),如果y1=0且y0=0,我们可以强制y1- y0=1,这样我们就可以得到1/2-nb而不是0。我们采用Mux、Rational、Constant和Constant1模块来执行这项工作。剩下的Mult、Add和Sub模块则执行线性内插公式。在本例中,我强制Mult模块的输出信号为17位分辨率,而非理论上要求的23位,因为总体数值精度对本试验来说已经足够。此外,由于y-sqrt(x) 函数呈单调递增,因此所有结果都无符号。换句话说,不同的函数需要对数据类型进行不同的精心调整,但不会与图3所示的原理相去甚远。
假定我们以Spartan-3E 1200(fg320-4)为目标器件,现使用ISE设计套件和System Generator for DSP 10.1 SP3版工具对其进行布局和布线,结果其所占用的FPGA资源的总体情况如下:
该设计完全流水线作业,可以在任何一个时钟周期提供新的输出。时延为10个时钟周期,最大数据速率达194.70MSPS(每秒百万采样数)。从数值精度来说,对1000或2000字ILUT而言,参考浮点结果与System Generator for DSP定点输出的量化误差之间的比值,即信噪比分别为 71.94dB或77.95dB。
除ILUT外,我们还可应用赛灵思System Generator for DSP提供的Reference Math Blockset(参考数学模块组)中的CORDIC SQRT模块。在本例中,总时延为37个时钟周期,最大数据速率达115.18 MSPS,区域资源占用为940片触发器,总共有885个四输入LUT,560个占用的芯片以及两个MULT 18x18嵌入式乘法器。信噪比为40.64dB。这些结果显示CORDIC是实施定点数学运算的理想方法,但ILUT在许多方面更加出色。