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
我正在尝试将两个 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