signed add

哎,作为一个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 :  // + overflow
23                (sum_reg[4] & ~sum_reg[3]) ? 4'b1000 :  // - overflow
24                      sum_reg [3:0] ;
25                      
26 endmodule 

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

原文地址:https://www.cnblogs.com/sepeng/p/3137913.html