天天看點

加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)

一、半加器和全加器

加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)

二、行波進位加法器

加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)

三、超前進位加法器(Carry-Lookahead Adder,CLA)

https://www.jianshu.com/p/6ce9cad8b467

加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)
加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)
加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)
加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)

四、流水線加法器

源檔案:

`timescale 1ns / 1ps
module adder_pipeline2(
input clk,
input [7:0]a,
input [7:0]b,
input cin,
output reg[7:0]sum,
output reg cout
    );
    
reg [3:0]tem_a;
reg [3:0]tem_b;
reg [3:0]sum1;
reg cout1;
[email protected](posedge clk)//第一級流水線
 begin
{cout1,sum1}<=a[3:0]+b[3:0]+cin;
end

[email protected](posedge clk)//将輸入寄存一拍
 begin
tem_a<=a[7:4];
tem_b<=b[7:4];
end

[email protected](posedge clk)//第二級流水線
{cout,sum}<={{1'b0,tem_a}+{1'b0,tem_b}+cout1,sum1};
endmodule
           

測試檔案: 

`timescale 1ns / 1ps
module tb_adder2pipeline;
reg clk;
reg [7:0]a;
reg [7:0]b;
reg cin;
wire [7:0]sum;
wire cout;
initial
clk=0;
always #10clk=~clk;

[email protected](posedge clk)begin
a<={$random}%255;
b<=2+{$random}%250;
cin<={$random}%2;
end

adder_pipeline2 u_adder(
.clk(clk),
.a(a),
.b(b),
.cin(cin),
.cout(cout),
.sum(sum)
);
endmodule
           

仿真波形:

兩級流水線,加法器的和延遲兩個周期輸出結果。

加法器的實作(半加器,全加器,行波進位加法器,超前進位加法器,流水線加法器)

繼續閱讀