signed add
0赞
发表于 6/15/2013 1:46:36 PM
阅读(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 超出了负下限
