我试图乘以两个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?
请帮助我,我错了哪一部分,我该怎么办。非常感谢你问候
艾萨克
答案 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