verilog乘法结果为零?

时间:2016-11-13 09:43:21

标签: verilog

我试图乘以两个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?

请帮助我,我错了哪一部分,我该怎么办。非常感谢你

问候

艾萨克

1 个答案:

答案 0 :(得分:0)

因为您试图将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