基于Karatsuba算法的Verilog有符号数乘法实现异常问题
基于Karatsuba算法的定点数乘法器负数运算错误问题
我用Verilog实现了基于Karatsuba算法的二进制定点数乘法器,无符号数运算时结果正常,但当其中一个输入为负数时,输出结果错误。举个例子:
- 输入a=1010011111000000(对应十进制-88.25)、b=0001010001000000(对应十进制20.25)
- 预期输出为11111001000001001111000000000000(对应十进制-1787.0625)
- 实际运算结果和预期不符
该实现采用定点数逻辑:输入为16位(包含8位小数),输出为32位(包含16位小数),相关代码如下:
module karatsuba( input signed [15:0] a, input signed [15:0] b, output signed [31:0] out ); reg [15:0] ac,bd; reg [31:0] t1; reg [31:0]t2; reg [24:0] psum; initial begin assign ac = a[15:8]*b[15:8]; assign bd = a[7:0]*b[7:0]; assign t2= bd; assign t1={ac,16'b0000000000000000}; assign psum = {(a[15:8]+a[7:0])*(b[15:8]+b[7:0])-ac-bd,8'b00000000}; end assign out= t1+psum+t2; endmodule module karatsuba_tb(); reg signed [15:0]a,b; wire signed [31:0]out; karatsuba uut(.a(a),.b(b),.out(out)); initial begin a=16'b0101100001000000; b=16'b0001010001000000; end endmodule
测试过程中的相关截图显示实际输出与预期结果不一致。
内容的提问来源于stack exchange,提问作者mohammed zeeshan
相关产品推荐
相关产品推荐

