[英]combinatorial hardware multiplication in verilog
假设我有这样的乘数代码,
module multiply(
output [63:0] result,
input [31:0] a,
input [31:0] b
);
assign result = a * b;
endmodule
这会产生很多门。
应该使用什么更好的方法来实现组合乘法器?
硬件乘数很大,你只需要忍受它!
随着输入位宽变大,乘法器将变大。 因此,如果您不需要其中一个操作数的完整32位,则将此大小减小到最小将减小所得硬件的大小。
如果你乘以一个固定的数字,我认为编译器可以进行一些优化来限制硬件的大小。 或者您可以对固定数量使用不同的编码方案,例如CSD ,这将减少乘法器中的加法器数量,从而进一步减小其面积。
如果您需要大量乘法器并具有快速时钟,那么您可以重复使用单个硬件乘法器进行多次计算。 这意味着编写一些控制/流水线逻辑来安排你的乘法,你可能需要一些内存,但它可以节省整个区域。 在这种情况下,您将设计一个mini-DSP数据路径。
由verilog乘数生成可能是非最优的。 在改进乘数和加法器方面有很多研究。 这是一个相当普遍和良好的add / mul生成器之一: http : //www.aoki.ecei.tohoku.ac.jp/arith/mg/algorithm.html
此页面包含许多add / mul low-lewel实现的描述
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.