我对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不知道符号位在哪里并将所有内容翻译为正数,我该怎么做以获得正确的输出?
答案 0 :(得分:1)
您很可能将A,B和R声明为无符号变量。如果您将它们声明为已签名,您将看到正确的结果。
reg signed [31:0] A, B, R;
如果您只想以签名格式查看结果,可以执行
$display("time= %t A= %0d B= %0d : R= %0d",$time, A, B, $signed(R));