一、半加器和全加器
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csATUE5EMRpWZ0IlMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxgDO1MzNzUTMxIzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、行波進位加法器
三、超前進位加法器(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
仿真波形:
兩級流水線,加法器的和延遲兩個周期輸出結果。