verilog乘法结果为零?

verilog multiplication results is zero?

我正在尝试将两个 32 位有符号小数相乘(1 个符号位,8 个整数位,23 个小数位)

第一个是

32'b0_00000001_00000000000000000000000 // 1.00

第二个是

32'b0_00000100_00000000000000000000000 // 4.00

当我喜欢这个的时候

输出有符号[31:0] a;

分配 a = 32'b0_00000001_00000000000000000000000 * 32'b0_00000100_00000000000000000000000;

结果为零?为什么不是 4?

请帮助我我错在哪里以及我应该怎么做。非常感谢

问候

以撒

因为您试图将 64 位值分配给 32 位线,Verilog 将截断该值,仅保留结果的低 32 位,即零。

为了得到正确的结果,您可以这样做:

module mult;
  reg [31:0] a = 32'b0_00000001_00000000000000000000000;  // 1.0
  reg [31:0] b = 32'b0_00000100_00000000000000000000000;  // 4.0

  reg [63:0] t;
  reg [31:0] c;

  initial begin
    t = a * b;
    c = t[54:23];

    $display ("%b",c);
    $finish;
  end  
endmodule