2011-11-17 249 views
4

假设我有一个这样的乘数代码,组合硬件乘法的Verilog

 module multiply(
     output [63:0] result, 
     input [31:0] a, 
     input [31:0] b 
    ); 

     assign result = a * b; 

     endmodule 

这就产生了很多门。

应该使用哪种优选的方法来实现组合乘法器?

回答

5

硬件乘法器很大,你只需要忍受它!

随着输入位宽度变大,乘数会变大。因此,如果您不需要其中一个操作数的完整32位,那么将这个尺寸减小到最小将减小产生的硬件的尺寸。

如果你乘以一个固定的数字,我认为编译器可以做一些优化来限制硬件的大小。或者,您可以对固定号码使用不同的编码方案,如CSD,这将减少乘法器中的加法器数量,进一步缩小其面积。

如果您需要大量的乘法器并且有一个快速的时钟,也许您可​​以重复使用单个硬件乘法器进行许多计算。这意味着编写一些控制/流水线逻辑来调度您的乘法,并且您可能需要一些内存,但它可以为您节省整体空间。在这种情况下,你会设计一个迷你DSP数据通路。

3

如果你可以放弃组合要求,你可以用加法器和进行乘法运算,如果速度不是一个大问题,并且你可以在多个时钟上处理操作数。一些低功耗/低成本/小面积处理器在它们的ISA中没有专用乘法指令,或者乘法指令被前端指令解码器转换为加法运算,进而增加microcode操作。

如果您要使用此方法,则必须为数据hand-shake创建附加信号,因为在输入稳定后1个周期内输出不再有效。