以流水线实现8bit 加法器。
1 //date : 2013/8/23 2 //designer :pengxiaoen 3 //function : 4 5 module pipeline ( 6 clock ,reset , 7 ina,inb,cin, 8 sum,cout 9 ); 10 input clock ,reset; 11 input [7:0] ina ,inb ; 12 input cin; 13 output [7:0] sum ; 14 output cout ; 15 16 reg [7:0] tempa,tempb,sum; 17 reg tempci,firstco,secondco,thirdco,cout; 18 reg [1:0] firsts,thirda,thirdb; 19 reg [3:0] seconda,secondb,seconds; 20 reg [5:0] firsta,firstb,thirds; 21 22 always @ (posedge clock or negedge reset) 23 if(!reset) 24 begin 25 tempa <= 0; 26 tempb <= 0; 27 tempci<= 0; 28 end 29 else begin 30 tempa <= ina; 31 tempb <= inb; 32 tempci<= cin; 33 end 34 35 //------------------------------1--------------------------- 36 always @(posedge clock) 37 begin 38 {firstco , firsts} <= tempa[1:0] + tempb[1:0] + tempci; 39 firsta <= tempa[7:2]; 40 firstb <= tempb[7:2]; 41 end 42 43 //-----------------------------2----------------------------- 44 always @(posedge clock ) 45 begin 46 {secondco,seconds} <= {firsta[1:0]+firstb[1:0] + firstco, firsts}; 47 seconda <= firsta[5:2]; 48 secondb <= firstb[5:2]; 49 end 50 51 //--------------------------------3--------------------------- 52 always @ (posedge clock ) 53 begin 54 {thirdco,thirds} <= {seconda[1:0] + secondb[1:0] + secondco , seconds}; 55 thirda <= seconda[3:2]; 56 thirdb <= secondb[3:2]; 57 end 58 59 //--------------------------------4------------------------------- 60 always @ (posedge clock ) 61 begin 62 {cout ,sum} <= {thirda[1:0]+thirdb[1:0]+thirdco,thirds}; 63 end 64 65 endmodule
流水线的优缺点我就不多说。主要说明一下这个程序里面的注意点。
第一个always 里 对输入数据的后第0—1个bit进行相加。得到结果是 3 个bit。其中一个进位位,2个数据位
第二个alwasys 里对输入数据的后第2—3个bit进行相加。得到的结果是5个bit,其中一个进位位,4个数据位。
第三个alwasys 里对输入数据的后第4—5个bit进行相加。得到的结果是7个bit,其中一个进位位,6个数据位。
第四个alwasys 里对输入数据的后第6—7个bit进行相加。得到的结果是9个bit,其中一个进位位,8个数据位。