四级流水线的8bit加法器
0赞
发表于 8/24/2013 2:00:00 PM
阅读(2810)
以流水线实现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个数据位。
