清霜一梦

四级流水线的8bit加法器

0
阅读(1512)
以流水线实现8bit 加法器。
//date : 2013/8/23
//designer :pengxiaoen
//function :

module pipeline (
                 clock ,reset ,
                      ina,inb,cin,
                      sum,cout
                      );
input clock ,reset;
input [7:0] ina ,inb ;
input cin;
output [7:0] sum ;
output cout ;

reg [7:0] tempa,tempb,sum;
reg tempci,firstco,secondco,thirdco,cout;
reg [1:0] firsts,thirda,thirdb;
reg [3:0] seconda,secondb,seconds;
reg [5:0] firsta,firstb,thirds;

always @ (posedge clock or negedge reset)
if(!reset)
    begin 
         tempa <= 0;
          tempb <= 0;
          tempci<= 0;
     end 
else begin
         tempa <= ina;
           tempb <= inb;
           tempci<= cin;    
     end 

//------------------------------1---------------------------      
always @(posedge clock)
begin
    {firstco , firsts} <= tempa[1:0] + tempb[1:0] + tempci;
     firsta <= tempa[7:2];
     firstb <= tempb[7:2]; 
end 

//-----------------------------2-----------------------------
always @(posedge clock )
begin
    {secondco,seconds} <= {firsta[1:0]+firstb[1:0] + firstco, firsts};
     seconda <= firsta[5:2];
     secondb <= firstb[5:2]; 
end 

//--------------------------------3---------------------------
always @ (posedge clock )
begin
    {thirdco,thirds} <= {seconda[1:0] + secondb[1:0] + secondco , seconds};
     thirda <= seconda[3:2];
     thirdb <= secondb[3:2];
end 

//--------------------------------4-------------------------------
always @ (posedge clock )
begin 
    {cout ,sum} <= {thirda[1:0]+thirdb[1:0]+thirdco,thirds};
end 

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个数据位。