小贴士&优化加法器硬件的技巧

时间:2017-06-19 20:23:32

标签: verilog xilinx hdl synthesis

设计:单个数据接收模块接受一个数据试验,由连续对齐的8位样本组成。该模块将N个这些试验加在一起(通过在试验中加入N个样本,形成连续排列的总和样本,构成单个求和试验),然后将最终的试验总和发送到下一个模块进行进一步处理。

图。 1:试验1 [SAMPLE1-1,SAMPLE1-2,SAMPLE 1-3 ......] +试验2 [SAMPLE2-1,SAMPLE2-2,SAMPLE 2-3 ......] = Summed Trial [(SAMPLE1-1 + SAMPLE2-1),(SAMPLE1-2 + SAMPLE2-2),(SAMPLE1-3 + SAMPLE2-3),...]

目前在我的RTL中,我在生成块中使用for循环语句来实例化添加样本所需的加法器数量(我自己设计并仅使用简单的' +'操作)跨越试验,让综合工具(Vivado)决定使用原语。

我正在寻找使用最少的CLB和逻辑资源来执行此添加的技术,无论是通过RTL中的优化,直接实例化原语还是其他。任何建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

合成工具,包括XST(Xilinx合成技术),使用非常有效的算法来实现算术运算,但这并不意味着这些工具是无与伦比的。

我们有一个很好的概念叫做#34;列压缩"总和N个数字。它适用于FPGA和ASIC。存在非常着名的压缩算法,其最初的目标是乘法器电路中的部分乘积的求和。他们是华莱士树"和" Dadda Tree"。 Here是一项关于乘数的研究,看起来是公开的。

然而,大多数半/全加器用于ASIC上的列压缩,应在FPGA上考虑查找表(LUT)。可以通过实例化LUT原语来构造树。 Xilinx 7系列FPGA有一本手册here,可以在其中找到VHDL和Verilog中的实例化示例。

FPGA上有一个棘手的部分。由于在切片之间存在进位链以实现快速加法器,因此在大多数情况下,LUT树效率不高。

与低级设计相反,+运算符的二叉树可能是最简单的方法,通常性能也不差。