以流水线实现8bit 加法器。
//date : 2013/8/23
//designer :pengxiaoen
//function : module pipeline (
clock ,reset ,
ina,inb,cin,
sum,cout
);
input clock ,reset;
input [:] ina ,inb ;
input cin;
output [:] sum ;
output cout ; reg [:] tempa,tempb,sum;
reg tempci,firstco,secondco,thirdco,cout;
reg [:] firsts,thirda,thirdb;
reg [:] seconda,secondb,seconds;
reg [:] firsta,firstb,thirds; always @ (posedge clock or negedge reset)
if(!reset)
begin
tempa <= ;
tempb <= ;
tempci<= ;
end
else begin
tempa <= ina;
tempb <= inb;
tempci<= cin;
end //------------------------------1---------------------------
always @(posedge clock)
begin
{firstco , firsts} <= tempa[:] + tempb[:] + tempci;
firsta <= tempa[:];
firstb <= tempb[:];
end //-----------------------------2-----------------------------
always @(posedge clock )
begin
{secondco,seconds} <= {firsta[:]+firstb[:] + firstco, firsts};
seconda <= firsta[:];
secondb <= firstb[:];
end //--------------------------------3---------------------------
always @ (posedge clock )
begin
{thirdco,thirds} <= {seconda[:] + secondb[:] + secondco , seconds};
thirda <= seconda[:];
thirdb <= secondb[:];
end //--------------------------------4-------------------------------
always @ (posedge clock )
begin
{cout ,sum} <= {thirda[:]+thirdb[:]+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个数据位。