半加器
** 輸入 A/B,輸出和 S,輸出 C 為進位。
**
** 輸入 A = 0,B = 0,0+0 = 0,所以 S = 0,C = 0;
**
** 輸入 A = 0,B = 1,0+1 = 1,所以 S = 1,C = 0;**
** 輸入 A = 1,B = 0,1+0 = 1,所以 S = 1,C = 0;**
** 輸入 A = 1,B = 1,1+1 = 10(二進制加法,進 1),**
** 所以 S = 0,C = 1;**
S = A ^ B // 輸出加法結(jié)果
C = A & B // 輸出進位結(jié)果
(1)根據(jù)真值表編寫
按照半加器和全加器的真值表寫出輸出端的邏輯表達式,對半加器,輸出的進位端是量輸入的“與”,輸出的計算結(jié)果是量輸入的異或;對全加器,也按照邏輯表達式做。
//半加器模塊
module adder_half(
input a,
input b,
output reg sum,
output reg cout
);
//這里的always @(*)搭配里面的“=”阻塞賦值符號
//實現(xiàn)的效果和 assign sum = a ^ b; assign cout = a & b;是一樣的
always @(*)
begin
sum = a ^ b;
cout = a & b;
end
endmodule
全加器
當(dāng)多位數(shù)相加時,半加器可用于最低位求和,并給出進位數(shù)。第二位的相加有兩個待加數(shù)和,還有一個來自前面低位送來的進位數(shù)。這三個數(shù)相加,得出本位和數(shù)(全加和數(shù))和進位數(shù),這種就是“全加”。
真值表:
使用與門、或門和異或門搭建電路:
根據(jù)真值表編程,門級描述:
// 全加器
module all_adder(cout,sum,a,b,cin);
input a,b,cin;
output sum,cout;
assign sum = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
全加器編程其他思路
直接描述功能,加法直接得到低位的和、高位的進位。
這種方式描述簡單,易于擴展,但是底層具體的實現(xiàn)方式比較抽象。
// 1 位全加器
module full_add1(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
assign {cout,sum} = a+b+cin; // 位拼接,直接描述功能
endmodule
擴展,4 位全加器,運算不需要改變,只需要更改位寬:
module add4(cout,sum,a,b,cin);
input[3:0] a,b;
input cin;
output[3:0] sum;
output cout;
assign {cout,sum}=a+b+cin;
endmodule
半減器
輸入:被減數(shù) A,減數(shù) B
輸出:差 S,借位 Cout
(1)0 - 0 = 0,不需要借位,所以 S = 0,Cout = 0;
(2)0 - 1 = 1,需要借位,所以 S = 1,Cout = 1;
(3)1 - 1 = 0,不需要借位,所以 S = 0,Cout = 0;
(4)1 - 0 = 0,不需要借位,所以 S = 1,Cout = 0;
通過觀察(或者卡諾圖化簡),可以得出
S = A ^ B;
Cout = (~A) & B;
全減器
輸入:被減數(shù) A,減數(shù) B,低位向高位的借位 Cin
輸出:差 S,借位 Cout
這里需要注意:需要計算的是 A - B - Cin
(1) 0 - 0 - 0 = 0,不需要借位,所以 S = 0,Cout = 0;
(2) 0 - 1 - 0 = 1,需要借位,所以 S = 1,Cout = 1;
(3) 1 - 1 - 0 = 0,不需要借位,所以 S = 0,Cout = 0;
(4) 1 - 0 - 0 = 1,不需要借位,所以 S = 1,Cout = 0;
(5) 0 - 0 - 1 = 1,需要借位,所以 S = 1,Cout = 1;
(6) 0 - 1 - 1 = 0,需要借位,所以 S = 0,Cout = 1;
(7) 1 - 1 - 1 = 1,需要借位,所以 S = 1,Cout = 1;
(8) 1 - 0 - 1 = 0,不需要借位,所以 S = 0,Cout = 0;
對 Cout,不容易觀察其表達式,使用卡諾圖化簡:
S = A ^ B ^ Cin
Cout = (~A) & ( B ^ Cin ) + B & Cin
-
門電路
+關(guān)注
關(guān)注
7文章
199瀏覽量
40100 -
全加器
+關(guān)注
關(guān)注
10文章
61瀏覽量
28424 -
半加器
+關(guān)注
關(guān)注
1文章
29瀏覽量
8766 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8204
發(fā)布評論請先 登錄
相關(guān)推薦
評論