有符号数加减溢出位问题
8位有符号数溢出有两种情况:一是正正相加,产生正溢出; 负负相减,产生负溢出。
负数相减(补码相加)产生正数,判断溢出
a[7] && b[7] && ~s[7]:
正数相加产生一个负数,判断溢出
~a[7] && ~b[7] && s[7]:
代码
module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
);
assign s = a + b;
assign overflow = ( a[7] && b[7] && ~s[7] ) || (~a[7] && ~b[7] && s[7]);
endmodule