作为赛灵思的现场工师,我常常问这样的问题:我们是否能够提供一款其功能可满足客户所有独特设计要求的DSP 内核。有时候内核会太大,太小或者不够快。有时,我们会开发一款能确切满足客户需求的内核,并迅速以 CORE Generator 商标推出。不过即便在这种情况下,客户仍然想要一套特定的 DSP 功能,而且刻不容缓。在这些情况下,我常常建议他们使用我们器件中的插值查找表来定制他们的 DSP功能。 查找表 (LUT) 实质上是一个存储元件,能够根据任何给定的输入状态组合,“查找”输出,以确保每个输入都有确切的输出。采用 LUT 来实现DSP 功能具有一些重大优势:
•您可用诸如 MATLAB® 或 Simulink® 等高抽象层编程语言改变 LUT 内容。
•您可以设计一项 DSP 功能来运行那些采用离散逻辑运算将极度困难的数学函数,比如 y=log(x)、y=exp(x)、y=1/x、
y=sin(x) 等。
•LUT 还可轻松执行在可配置逻辑块 (CLB) 芯片,以及嵌入式乘法单元或 DSP48 可编程乘法累加 (MAC) 单元方面可能要求过多 FPGA 资源的复杂数学函数。 不过,以这种方式使用 LUT 当然也会存在一些弊端。当您使用 LUT 来实现 DSP 功能时,您必须使用块 RAM (BRAM)元件。若执行函数 y=sqrt (x) (其中x 表示16 位输入,y 表示18 位输出),每个变量则需要约64 个 18KB BRAM 单元。如果,比如说,您的目标是实现小型化 Spartan® 器件,或者您有太多的运算需要执行,无法为每个变量省出64 个 BRAM 单元,建议您放弃这种需要如此大量 BRAM 单元的方法,从系统架构的角度来看,这种方法代价太大。 插值 LUT 方法不仅具有 LUT 方法在实现 DSP 功能时所带来的各种优势,而且无需使用太多 BRAM 单元。采用
这种方法,您可以使用来自容量较小的 LUT (比如,1000字 LUT)的连续输出,线性地对其内插,以模拟更大容量的LUT。这样,您就可以实现比1000 字 LUT 更高的数值分辨率。此外,通过这种方法,仅需1 个 BRAM、1 个嵌入式乘法器(或DSP48),以及少数几个 CLB 芯片便可实施控制逻辑,因此 LUT 的使用成本变得更加合理化。而且,从信噪比的角度来看,其数值精度也是非常让人满意...... |