注意X1和X0是这个小容量LUT的相邻地址,它们之间只隔了一个最低有效位。由于这个小容量LUT的地址空间为nb 位,那么该LSB的值为2-nb。
图2 System Generator for DSP中的小容量LUT图
图3 System Generator for DSP的线性内插图
内插步骤见图3。“Reinterpret”模块在不改变二进制表示法的情况下,可改变dx=x-x0信号。其重置了二进制小数点(从UFix_6_0到UFix_6_6格式),并输出nx-nb位二进制数的一个分数,从而计算出 (x-x0)/2-nb 的值。 从硬件角度来看,这些模块什么都不占用。总的来说(且根据我们通过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在许多方面更加出色。 |