verilog中的组合硬件乘法

e19*_*001 4 hardware verilog synthesis

假设我有这样的乘数代码,

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

        assign result = a * b;

      endmodule
Run Code Online (Sandbox Code Playgroud)

这会产生很多门.

应该使用什么更好的方法来实现组合乘法器?

Mar*_*rty 5

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

随着输入位宽变大,乘法器将变大.因此,如果您不需要其中一个操作数的完整32位,则将此大小减小到最小将减小所得硬件的大小.

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

如果您需要大量乘法器并具有快速时钟,那么您可以重复使用单个硬件乘法器进行多次计算.这意味着编写一些控制/流水线逻辑来安排你的乘法,你可能需要一些内存,但它可以节省整个区域.在这种情况下,您将设计一个mini-DSP数据路径.