引言
加法器是非常重要的,它不僅是其它復(fù)雜算術(shù)運算的基礎(chǔ),也是 CPU 中 ALU 的核心部件(全加器)。兩個二進制數(shù)之間的算術(shù)邏輯運算例如加減乘除,在數(shù)字計算機中都是化為若干步加法操作進行的,因此,學(xué)好數(shù)字電路,從學(xué)好加法器開始。
加法器分為半加器和全加器。全加器和半加器相比也就多了那么一個相加的進位輸入,全加器就是三位相加,半加器就是二位相加。例如,我們在做加法運算的時候,總是需要進行低位進位的判斷,從而再進行下一位的計算,這就是全加器的由來。詳細的也可以參考百度百科。
一、半加器的 Verilog 代碼實現(xiàn)和 RTL 電路實現(xiàn)
module Half_Adder(
input wire a, // 加數(shù)
input wire b, // 加數(shù)
output reg sum, // 和
output reg cout // 進位輸出
);
// 行為描述
always @(a or b) begin
sum = a ^ b; // 實踐證明,這里 <= 和 = 的結(jié)果都一樣;都是純粹的組合邏輯;
cout = a & b;
end
// 數(shù)據(jù)流描述
// assign sum = a ^ b;
// assign cout = a & b;
// 門級描述
// and(cout,a,b);
// xor(sum,a,b);
endmodule
基于多種方式描述的一個全加器電路的 RTL 電路圖如下所示:
半加器的 RTL 電路實現(xiàn)
二、全加器的 Verilog 代碼實現(xiàn)和 RTL 電路實現(xiàn)
module Full_Adder(
input wire a, // 加數(shù)
input wire b, // 加數(shù)
input wire cin,// 進位輸入
output reg sum, // 和
output reg cout // 進位輸出
);
// 行為描述
always @(a or b or cin) begin
{cout,sum} <= a + b + cin;
end
// 行為描述
// always @(a or b or cin) begin
// sum = a ^ b ^ cin; // 實踐證明,這里 <= 和 = 的結(jié)果都一樣;都是純粹的組合邏輯;
// cout = a & b | b & cin | a & cin;
// end
// 數(shù)據(jù)流描述
// assign {cout,sum} = a + b + cin;
endmodule
這里,“{}” 符號表示的是 “拼接位”,即先計算 a 與 b 的值,當(dāng) a 與 b 為 “0” 和 “1” 時,它們之和為 1,那么就是{01},對應(yīng) cout 和 sum ;當(dāng) a 與 b 為 “1” 和 “1” 時,它們之和為 2,那么就是轉(zhuǎn)換為二進制就是{10},同樣對應(yīng) cout 和 sum 等等。
基于多種方式描述的一個全加器電路的 RTL 電路圖如下所示:
全加器的 RTL 電路實現(xiàn)
-
加法器
+關(guān)注
關(guān)注
6文章
183瀏覽量
30059 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59665 -
半加器
+關(guān)注
關(guān)注
1文章
29瀏覽量
8766 -
Verilog設(shè)計
+關(guān)注
關(guān)注
0文章
20瀏覽量
6509 -
全加器電路
+關(guān)注
關(guān)注
0文章
3瀏覽量
1622
發(fā)布評論請先 登錄
相關(guān)推薦
評論