1
第四章 第四章 第四章 第四章
組合邏輯
4-1 組合電路 組合電路 組合電路 組合電路
2
4-3 設計步驟 設計步驟 設計步驟 設計步驟
組合電路的設計
1.由電路的敘述,決定所需的輸入與輸出 的個數並且對每一個輸入與輸出安排一 個變數符號。
2.導出真值表並定義輸入與輸出間的關 係。
3.對每一個輸出求出以輸入變數為函數之 簡化的布林函數。
4.畫出邏輯圖並且證明設計的正確性。
BCD碼到超 碼到超 碼到超3碼轉換器 碼到超 碼轉換器 碼轉換器 碼轉換器
3
BCD BCD BCD
BCD到超到超到超3333碼卡諾圖到超 碼卡諾圖碼卡諾圖碼卡諾圖
BCD BCD BCD
BCD到超到超到超3333碼電路圖到超 碼電路圖碼電路圖碼電路圖
4
4-4 二進位加法器 二進位加法器 二進位加法器 二進位加法器---減法器 減法器 減法器 減法器
半加法器(half adder)
1 1
1 1
1 0
0 1
1 0
1 0
0 0
0 0
C S
y x
y x y x
S = ′ + ′ C =xy
半加法器 半加法器 半加法器 半加法器
電路
5
全加法器 全加法器 全加法器 全加法器
真值表
1 1
1 1 1
0 1
0 1 1
0 1
1 0 1
1 0
0 0 1
0 1
1 1 0
1 0
0 1 0
1 0
1 0 0
0 0
0 0 0
S C
z y x
z y x z y x
S = ′ ′ + ′ ′ xyz z
y x ′ ′+ +
xz yz xy
C = + +
全加法器 全加法器 全加法器 全加法器
卡諾圖
6
全加法器 全加法器 全加法器 全加法器
電路
二進位加法器 二進位加法器 二進位加法器 二進位加法器
=1011
A B=0011
=1110 S
7
進位傳播 進位傳播 進位傳播 進位傳播
進位產生
Gi進位傳播
Pii i
i A B
P = ⊕
i i
i AB
G =
i i
i P C
S = ⊕
i i i
i G PC
C+1 = +
進位遞迴產生器
進位遞迴產生器
進位遞迴產生器
進位遞迴產生器
8
具有進位遞迴的 具有進位遞迴的 具有進位遞迴的
具有進位遞迴的4位元加法器 位元加法器 位元加法器 位元加法器
二進位減法器 二進位減法器 二進位減法器 二進位減法器
4位元加法器---減法器
9
4-5 十進位加法 十進位加法 十進位加法 十進位加法/器 器 器 器
BCD加法器的推導
BCD加法器電路加法器電路加法器電路加法器電路
10
4-6 二進位乘法器 二進位乘法器 二進位乘法器 二進位乘法器
2位元乘2位元
4444位元乘位元乘位元乘位元乘3333位元之二進位乘法器位元之二進位乘法器位元之二進位乘法器位元之二進位乘法器
11
4-7 大小比較器 大小比較器 大小比較器 大小比較器
0 1 2 3A AA A
A=
0 1 2 3B BB B
B= xi = AiBi + Ai′Bi′
0 1 2
) 3
(A=B =x x x x
0 0 1 2 3 1 1 2 3 2 2 3 3
) 3
(A>B = A B′ +x A B′ +x x AB′+x x x A B′
0 0 1 2 3 1 1 2 3 2 2 3 3
) 3
(A<B = A′B +x A′B +x x A′B +x x x A′B
4位元大小比較器 位元大小比較器 位元大小比較器 位元大小比較器
12
4-8 解碼器 解碼器 解碼器 解碼器
具有致能輸入之 具有致能輸入之 具有致能輸入之
具有致能輸入之2對 對 對4線解碼器 對 線解碼器 線解碼器 線解碼器
13
利用 利用
利用 利用3333x8 x8 x8 x8解碼器建立 解碼器建立 解碼器建立4444x16 解碼器建立 x16 x16 x16解碼器 解碼器 解碼器 解碼器
利用解碼器實現組合邏輯電路 利用解碼器實現組合邏輯電路 利用解碼器實現組合邏輯電路 利用解碼器實現組合邏輯電路
∑
∑
=
=
) 7 , 6 , 5 , 3 ( ) , , (
) 7 , 4 , 2 , 1 ( ) , , (
z y x C
z y x S
14
4-9 編碼器 編碼器 編碼器 編碼器
7 6 5 4
7 6 3 2
7 5 3 1
D D D D x
D D D D y
D D D D z
+ + +
=
+ + +
=
+ + +
=
優先權編碼器之真值表
優先權編碼器之真值表
優先權編碼器之真值表
優先權編碼器之真值表
15
優先權編碼器卡諾圖 優先權編碼器卡諾圖 優先權編碼器卡諾圖 優先權編碼器卡諾圖
4輸入優先權編碼器 輸入優先權編碼器 輸入優先權編碼器 輸入優先權編碼器
3 2 1 0
2 1 3
3 2
D D D D V
D D D y
D D x
+ + +
= + ′
= +
=
16
4-10 多工器 多工器 多工器 多工器(Multiplexers)
4對 對 對1線 對 線 線 線 多工器 多工器 多工器 多工器
17
四重 四重 四重
四重2對 對 對1線 對 線 線 線 多工器 多工器 多工器 多工器
利用多工器實現布林函數 利用多工器實現布林函數 利用多工器實現布林函數 利用多工器實現布林函數
=∑(1,2,6,7) )
, , (x y z F
18
利用多工器實現一個 利用多工器實現一個 利用多工器實現一個
利用多工器實現一個4444輸入函數 輸入函數 輸入函數 輸入函數
=∑(1,3,4,11,12,13,14,15) )
, , ,
(A B C D F
三態閘 三態閘
三態閘 三態閘
19
利用三態閘構成多工器 利用三態閘構成多工器 利用三態閘構成多工器 利用三態閘構成多工器
4-11 組合電路的硬體描述語言 組合電路的硬體描述語言 組合電路的硬體描述語言 組合電路的硬體描述語言
閘階層模型閘階層模型閘階層模型閘階層模型
關鍵字 andandand 、nandand nandnand 、ornand ororor 、nornornornor 、xorxorxorxor 、xnorxnorxnor 、xnor not
notnot
not 、bufbufbufbuf
20
HDL HDL HDL
HDL 範例範例範例範例 4444----1111 (2
(2 (2
(2對對對對4444線解碼器的閘階層描述線解碼器的閘階層描述線解碼器的閘階層描述線解碼器的閘階層描述))))
//Gate-level description of a 2-to-4-line decoder //Figure 4-19
module decoder_gl (A,B,E,D);
input A,B,E;
output [0:3]D;
wire Anot,Bnot,Enot;
not
n1 (Anot,A), n2 (Bnot,B),
HDL HDL HDL
HDL 範例範例範例範例 4444----1111 (2(2
(2(2對對對對4444線解碼器的閘階層描述線解碼器的閘階層描述線解碼器的閘階層描述線解碼器的閘階層描述))))
n3 (Enot,E);
nand
n4 (D[0],Anot,Bnot,Enot), n5 (D[1],Anot,B,Enot), n6 (D[2],A,Bnot,Enot), n7 (D[3],A,B,Enot);
endmodule
21
HDL HDL HDL
HDL 範例範例範例範例 4444----2222 (4
(4 (4
(4位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述))))
//Gate-level hierarchical description of 4-bit adder // Description of half adder (see Fig 4-5b)
module halfadder (S,C,x,y);
input x,y;
output S,C;
//Instantiate primitive gates xor (S,x,y);
and (C,x,y);
HDL HDL HDL
HDL 範例範例範例範例 4444----2222 (4(4
(4(4位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述))))
endmodule
//Description of full adder (see Fig 4-8) module fulladder (S,C,x,y,z);
input x,y,z;
output S,C;
wire S1,D1,D2;
//Outputs of first XOR and two AND gates //Instantiate the halfadder
halfadder HA1 (S1,D1,x,y),
22
HDL HDL HDL
HDL 範例範例範例範例 4444----2222 (4
(4 (4
(4位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述))))
HA2 (S,D2,S1,z);
or g1(C,D2,D1);
endmodule
//Description of 4-bit adder (see Fig 4-9)
module _4bit_adder (S,C4,A,B,C0);input [3:0] A,B;
input C0;
HDL HDL HDL
HDL 範例範例範例範例 4444----2222 (4(4
(4(4位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述位元加法器之底部向上層次化描述))))
output [3:0] S;
output C4;
wire C1,C2,C3; //Intermediate carries //Instantiate the fulladder
fulladder FA0 (S[0],C1,A[0],B[0],C0), FA1 (S[1],C2,A[1],B[1],C1), FA2 (S[2],C3,A[2],B[2],C2), FA3 (S[3],C4,A[3],B[3],C3);
endmodule
23
三態閘 三態閘 三態閘 三態閘
bufif1 (OUT, A, control);
notif0 (Y, B, enable);
具有三態緩衝器之 具有三態緩衝器之 具有三態緩衝器之
具有三態緩衝器之2222對對對對1111線多工器線多工器線多工器線多工器
module muxtri (A, B, select, OUT);
input A, B, select;
output OUT;
tri OUT;
bufif1 (OUT, A, select);
bufif0 (OUT, B, select);
endmodule
24
資料流程模型 資料流程模型 資料流程模型 資料流程模型
Verilog HDL運算子
HDL HDL HDL
HDL 範例範例範例範例 4444----3333 (2(2
(2(2對對對對4444線解碼器的線解碼器的線解碼器的線解碼器的資料流程資料流程資料流程資料流程描述描述描述描述))))
//Dataflow description of a 2-to-4-line decoder //See Fig.4-19
module decoder_df (A,B,E,D);
input A,B,E;
output [0:3] D;
assign D[0] = ~(~A & ~B & ~E), D[1] = ~(~A & B & ~E), D[2] = ~(A & ~B & ~E), D[3] = ~(A & B & ~E);
endmodule
25
HDL HDL HDL
HDL 範例範例範例範例 4444----4444 (4
(4 (4
(4位元加法器之資料流程描述位元加法器之資料流程描述位元加法器之資料流程描述位元加法器之資料流程描述))))
//Dataflow description of 4-bit adder
module binary_adder (A,B,Cin,SUM,Cout);
input [3:0] A,B;
input Cin;
output [3:0] SUM;
output Cout;
assign {Cout,SUM} = A + B + Cin;
endmodule
HDL HDL HDL
HDL 範例範例範例範例 4444----5555
((((大小比較器之資料流程描述大小比較器之資料流程描述大小比較器之資料流程描述))))大小比較器之資料流程描述
//Dataflow description of a 4-bit comparator.
module magcomp (A,B,ALTB,AGTB,AEQB);
input [3:0] A,B;
output ALTB,AGTB,AEQB;
assign ALTB = (A < B), AGTB = (A > B), AEQB = (A = = B);
endmodule
26
HDL HDL
HDL HDL 範例範例範例範例 4444----6666
(2 (2 (2
(2對對對對1111線多工器使用條件式運算子描述線多工器使用條件式運算子描述線多工器使用條件式運算子描述線多工器使用條件式運算子描述))))
//Dataflow description of 2-to-1-line multiplexer module mux2x1_df (A,B,select,OUT);
input A,B,select;
output OUT;
assign OUT = select ? A : B;
endmodule
行為模型 行為模型 行為模型 行為模型
HDL 範例 4-7
(2對1線多工器使用條件式運算子描述) //Behavioral description of 2-to-1-line multiplexer module
module module
module mux2x1_bh(A,B,select,OUT);
input inputinput
input A,B,select;
output outputoutput
output OUT;
reg regreg
reg OUT;
always alwaysalways
always @ (select ororor A oror ororor B) if
if if
if (select == 1) OUT = A;
elseelse
elseelse OUT = B;
endmodule endmodule endmodule endmodule
27
HDL HDL HDL
HDL 範例範例範例範例 4444----8888 (4
(4 (4
(4對對對對1111線多工器之行為描述線多工器之行為描述線多工器之行為描述線多工器之行為描述))))
//Behavioral description of 4-to-1- line multiplexer //Describes the function table of Fig. 4-25(b).
module mux4x1_bh (i0,i1,i2,i3,select,y);
input i0,i1,i2,i3;
input [1:0] select;
output y;
reg y;
HDL HDL HDL
HDL 範例範例範例範例 4444----8888 (4(4
(4(4對對對對1111線多工器之行為描述線多工器之行為描述線多工器之行為描述線多工器之行為描述))))
always @ (i0 or i1 or i2 or i3 or select) case (select)
2'b00: y = i0;
2'b01: y = i1;
2'b10: y = i2;
2'b11: y = i3;
endcase endmodule
28
測試平台 測試平台 測試平台 測試平台
一個模擬模組是具有下列形式的HDL程式
module modulemodule
module 測試名稱。
宣告特有的regregreg和wirereg wirewirewire識別字。
在測試下例示設計模組。
利用initialinitialinitial及alwaysinitial alwaysalwaysalways敘述產生模擬。
顯示輸出響應。
endmodule endmoduleendmodule endmodule。
系統功能 系統功能 系統功能 系統功能
$display--顯示具有 end-of-line return之
變數或字串的一次值。
$write—與 $display相同,但是沒有到
下一行。
$monitor—當在模擬期間值改變時及
顯示變數。
$time--顯示模擬時間。
$finish--結束模擬。
29
模擬與設計的交互模組 模擬與設計的交互模組 模擬與設計的交互模組 模擬與設計的交互模組
HDL HDL HDL
HDL 範例範例範例範例 4444----9999
((((測試範例測試範例測試範例4444----6666所描述的測試範例 所描述的所描述的2222對所描述的 對對對1111多工器多工器多工器多工器))))
//Stimulus for mux2x1_df.
module testmux;
reg TA,TB,TS; //inputs for mux wire Y; //output from mux
mux2x1_df mx (TA,TB,TS,Y);
// instantiate mux
initial30
HDL HDL HDL
HDL 範例範例範例範例 4444----9999
((((測試範例測試範例測試範例4444----6666所描述的測試範例 所描述的所描述的2222對所描述的 對對對1111多工器多工器多工器多工器))))
begin
TS = 1; TA = 0; TB = 1;
#10 TA = 1; TB = 0;
#10 TS = 0;
#10 TA = 0; TB = 1;
end
HDL HDL HDL
HDL 範例範例範例範例 4444----9999
((((測試範例測試範例測試範例4444----6666所描述的測試範例 所描述的所描述的2222對所描述的 對對對1111多工器多工器多工器多工器))))
initial
$monitor("select = %b A = %b B = %b
OUT = %b time = %0d",
TS, TA, TB, Y, $time);
endmodule
31
HDL HDL HDL
HDL 範例範例範例範例 4444----9999
((((測試範例測試範例測試範例4444----6666所描述的測試範例 所描述的所描述的2222對所描述的 對對對1111多工器多工器多工器多工器))))
//Dataflow description of 2-to-1-line multiplexer //from Example 4-6
module mux2x1_df (A,B,select,OUT);
input A,B,select;
output OUT;
assign OUT = select ? A : B;
endmodule
HDL HDL HDL
HDL 範例範例範例範例 4444----9999
((((測試範例測試範例測試範例4444----6666所描述的測試範例 所描述的所描述的2222對所描述的 對對對1111多工器多工器多工器多工器))))
Simulatiom log:
select = 1 A=0 B=1 OUT=0 time=0
select = 1 A=1 B=0 OUT=1 time=10
select = 0 A=1 B=0 OUT=0 time=20
select = 0 A=0 B=1 OUT=1 time=30
32
HDL HDL HDL
HDL 範例範例範例範例 4444----10101010
((((全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述))))全加法器之多階電路的閘階層描述
//Gate-level description of circuit of Fig. 4-2
module analysis (A,B,C,F1,F2);input A,B,C;
output F1,F2;
wire
T1,T2,T3,F2not,E1,E2,E3;
or g1 (T1,A,B,C);
and g2 (T2,A,B,C);
HDL HDL HDL
HDL 範例範例範例範例 4444----10101010
((((全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述))))全加法器之多階電路的閘階層描述
and g3 (E1,A,B);
and g4 (E2,A,C);
and g5 (E3,B,C);
or g6 (F2,E1,E2,E3);
not g7 (F2not,F2);
and g8 (T3,T1,F2not);
or g9 (F1,T2,T3);
endmodule
33
HDL HDL HDL
HDL 範例範例範例範例 4444----10101010
((((全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述))))全加法器之多階電路的閘階層描述
//Stimulus to analyze the circuit
module test_circuit;reg [2:0]D;
wire F1,F2;
analysis fig42(D[2],D[1],D[0],F1,F2);
initial begin
HDL HDL HDL
HDL 範例範例範例範例 4444----10101010
((((全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述))))全加法器之多階電路的閘階層描述
D = 3'b000;
repeat(7)
#10 D = D + 1'b1;
end initial
$monitor ("ABC = %b F1 = %b F2 =%b ", D, F1, F2);
endmodule
34
HDL HDL HDL
HDL 範例範例範例範例 4444----10101010
((((全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述全加法器之多階電路的閘階層描述))))全加法器之多階電路的閘階層描述
Simulation log:
ABC=000 F1=0 F2=0 ABC=001 F1=1 F2=0 ABC=010 F1=1 F2=0 ABC=011 F1=0 F2=1 ABC=100 F1=1 F2=0 ABC=101 F1=0 F2=1 ABC=110 F1=0 F2=1 ABC=111 F1=1 F2=1