清霜一梦

四级流水线的8bit加法器

0
阅读(1480)
以流水线实现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个数据位。


Baidu
map