清霜一梦

signed add

0
阅读(1608)

哎,作为一个xx貌似我只会盗用别人的code。这个还是“copy”真OO 无双大师的手笔写的

 1 //date:2013/6/15 2 //designer :pengxiaoen 3 //function:signed number add 4  5 module signed_add ( 6                    clock,reset, 7                          p_i,n_i, 8                          sum_o 9                          );10 input clock,reset;11 input [3:0] p_i;12 input [2:0] n_i;13 output[3:0] sum_o;14 15 reg [4:0] sum_reg;16 always @ (posedge clock or negedge reset)17 if(!reset)18   sum_reg <= 5'd0;19 else 20   sum_reg <= {p_i[3],p_i} + {{2{n_i[2]}},n_i};21   22 assign sum_o = (~sum_reg[4] & sum_reg[3]) ? 4'b0111 :  // + overflow23                (sum_reg[4] & ~sum_reg[3]) ? 4'b1000 :  // - overflow24                      sum_reg [3:0] ;25                      26 endmodule

这个code值得学习的 地方是这个overflow,大家知道在硬件中使用加法实现减法,除法和乘法。那么在signed运算时,这个时候不免要多留个心眼了。本code中给出了一个检测方法,图片
+overflow 表示 sum 超出了正上限
-overflow 表示 sum 超出了负下限