1.1目录
(1)目录
(2)题目要求
(3)相关原理
(4)代码
1.2 题目要求
Assume that you have two 8-bit 2's complement numbers, a[7:0] and b[7:0]. These numbers are added to produce s[7:0]. Also compute whether a (signed) overflow has occurred.
翻译:两个8位的带符号的补码相加产生s这个和,在相加的时候看是否溢出,(相加溢出的意思就是相加后s[7:0]无法表示和,即相加产生了进位8位二进制数表示不了,需要9位表示)用overflow来对是否溢出进行标志。
1.3 相关原理
因为两个8位的数带符号其最高位代表正负(1为负0为正),可能在相加的时候溢出的情况就是两种,a和b是同为负数或者同为正数。因为如果a和b一正一负,它俩的补码相加是不可能溢出的。
然而a和b同号只是可能溢出的情况,不代表必定溢出。只有当a和b同号且相加后的和(s),s的符号位(就是s[7])发生变化时才会是发生溢出了。(1)当a和b同为负数(即是a[7]和b[7]为1时)时,s[7]为[0]时发生相加溢出了。(2)当a和b同为正数(即是a[7]和b[7]为0时)时,s[7]为1时发生相加溢出了。
module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
); //
// assign s = ...
// assign overflow = ...
assign s=a+b;
assign overflow=(a[7] & b[7] & (!s[7])) | ((!a[7]) & (!b[7]) & (s[7]));
endmodule