You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:35:22