verilog减法的十进制输出错误

verilog减法的十进制输出错误,verilog,Verilog,我对verilog真的很陌生…我在verilog中编写了一个加法器-减法器,子弧仅在a大于B时工作,如果结果是负数,它将给我错误的十进制输出,请参阅测试台的结果: time= 0 A= 0 B= 0 : R= 0 time= 100 A= 1 B= 0 : R= 1 time= 110 A= 24512 B= 3 : R= 24509 time= 120 A= 262141 B= 10 : R= 262131 time= 130 A= 14 B= 81 : R=4294967229 time=

我对verilog真的很陌生…我在verilog中编写了一个加法器-减法器,子弧仅在a大于B时工作,如果结果是负数,它将给我错误的十进制输出,请参阅测试台的结果:

time= 0 A= 0 B= 0 : R= 0
time= 100 A= 1 B= 0 : R= 1
time= 110 A= 24512 B= 3 : R= 24509
time= 120 A= 262141 B= 10 : R= 262131
time= 130 A= 14 B= 81 : R=4294967229
time= 140 A= 15 B= 34 : R=4294967277

似乎verilog不知道符号位在哪里,并将所有内容转换为正数,我应该怎么做才能获得正确的输出?

您很可能已将a、B和R声明为无符号变量。如果您将它们声明为已签名,您将看到正确的结果

reg signed [31:0] A, B, R;
如果您只想看到签名格式的结果,可以这样做

$display("time= %t A= %0d B= %0d : R= %0d",$time, A, B, $signed(R));

如果看不到你的Verilog,你很难知道你的Verilog有什么问题……给我们看看你的
$display
或类似的语句。它看起来像是有符号与无符号表示的明显对比。