第五章 第五章 第五章
第五章 同步序向邏輯 同步序向邏輯 同步序向邏輯 同步序向邏輯
5-1 序向電路 序向電路 序向電路 序向電路
同步時脈序向電路
5-2 閂鎖器
SR閂鎖器 閂鎖器 閂鎖器( 閂鎖器 ( ( (SR Latch) ) ) ):由 由 由 由NOR閘所構 閘所構 閘所構 閘所構 成之 成之
成之 成之 SR閂鎖器 閂鎖器 閂鎖器 閂鎖器
由 NAND 閘所構成之 SR 閂鎖器
具有控制輸入之 SR 閂鎖器
D 型閂鎖器 型閂鎖器 型閂鎖器 型閂鎖器 (D Latch)
閂鎖器之符號圖
5-3 正反器
閂鎖器和正反器之時脈響應
邊緣觸發 邊緣觸發 邊緣觸發
邊緣觸發 D 型正反器 型正反器 型正反器 型正反器( ( ( ( Edge- Triggered D Flip-Flop ) ) ) )
D型主僕正反器
D 型正緣觸發正反器
D 型邊緣觸發正反器之符號圖
JK 正反器
圖5-12(a)之D輸入端之電路方程式為 Q
K Q J
D = ′ + ′
T型正反器 : 屬互補式之正反器
圖5-13(b) T型正反器之D輸入端表示式為 Q
T Q T Q T
D = ⊕ = ′ + ′
特性表
表5-1 正反器的特性表
Q(t+1) J k
JK正反器
正反器之特性表
0 重置為0 1 設置為1 0
1
Q(t+1) D
D型正反器
Q(t) 狀態未改變 Q’(t) 補數輸出 0
1
Q(t+1) T
T型正反器
特性方程式
D型正反器之特性方程式為
JK正反器之特性方程式為
T型正反器之特性方程式為
D t
Q ( + ) 1 =
Q K Q J t
Q ( + ) 1 = ′ + ′
Q K Q J t
Q ( + ) 1 = ′ + ′
Q T Q T Q T
t
Q ( + ) 1 = ⊕ = ′ + ′
直接輸入 直接輸入 直接輸入
直接輸入
:用來強制正反器變成特殊狀態且與時脈無關 用來強制正反器變成特殊狀態且與時脈無關 用來強制正反器變成特殊狀態且與時脈無關 用來強制正反器變成特殊狀態且與時脈無關
1l包括
包括 包括 包括
(a)
預先設置 預先設置 預先設置 預先設置
(PRESET)或直接輸入 或直接輸入 或直接輸入 或直接輸入
(direct set) (b)清除 清除 清除 清除
(clear)或直接重置 或直接重置 或直接重置 或直接重置
(direct reset)圖 圖
圖 圖5-15是由兩個 是由兩個 是由兩個 是由兩個D型正反器及邏輯閘所構 型正反器及邏輯閘所構 型正反器及邏輯閘所構 型正反器及邏輯閘所構 成之時控序向電路
成之時控序向電路
成之時控序向電路
成之時控序向電路
5-4 時控序向電路分析
狀態方程式:
圖5-15電路之狀態方程式為
或表示為
[ ( ) ( ) ] ( ) )
(
) ( ) ( ) 1 (
) ( ) ( ) ( ) ( ) 1 (
t x t B t A t y
t x t A t
B
t x t B t x t A t
A
+ ′
=
= ′ +
+
= +
x B A y
x A t
B
Bx Ax t
A
+ ′
=
= ′ +
+
= +
) (
) 1 (
) 1 (
狀態表
圖5-15的狀態表
0 0 1 0 1 0 1 0 0 0
0 1 0 0 1 1 0 0 1 0 0 0 1 0 0
1 0 1 0 1 0 1 0 0
0 0 0 1 0 1 1 0 1 0 1 1 1 1
y A B
x A B
輸出輸出 輸出輸出 次一狀態次一狀態次一狀態
次一狀態 輸入輸入輸入
輸入 目前狀態目前狀態
目前狀態目前狀態
另一種形式的狀態表
表5-3 狀態表的第二種形式
0 0 0 0 0
1 1 1 01
11 10 10 00
00 00 00 00
01 10 11
y y
AB AB
AB
輸出輸出 輸出輸出 x=0 x=1 次一狀態次一狀態
次一狀態次一狀態 x=0 x=1 目前狀態目前狀態
目前狀態目前狀態
狀態圖
表5-3的結果可用狀態圖表示 如圖5-16
正反器輸入方程式或稱為輸入函數
,係採用正反器的輸 入符號代表輸入方程式的變數而下標則表示正反器輸出 的名稱
舉例而言, 敘述一個具有輸入x和y的OR 閘連 接到正反器的輸入D, 而它的輸出標示為Q, 其 輸入方程式表示為
圖5-15電路之輸入方程式及輸出方程式 可表示為
y x D
Q= +
x B A
y
x A D
Bx Ax
D
B A
+ ′
=
= ′
+
=
) (
圖 5-17 具有 D 型正反器的序向電路
D 型正反器的分析
圖5-17之輸入及輸出方程式為
因為對D型正反器而言, 其次一狀態與輸
輸入D相同
y x A t
A
y x A D
A⊕
⊕
= +
⊕
⊕
= ) 1 (
JK 正反器的分析
一個使用JK或T正反器的序向電路,其次 態值可由下列程序獲得:
1 、用現態和輸入變數的觀點決定正反器
圖 5-18 具 JK 正反器之序向電路
圖 5-18 之輸入及狀態方程式
如圖 如圖5-18所示 如圖 如圖 所示 所示 所示。 。 。 。電路的輸 電路的輸 電路的輸 電路的輸 入方程式為
入方程式為 入方程式為 入方程式為
正反器的特性程式可 正反器的特性程式可 正反器的特性程式可 正反器的特性程式可 藉由將 藉由將
藉由將 藉由將A , , ,B , B B取代 B 取代 取代 取代Q Q Q Q 的名稱而得
的名稱而得 的名稱而得 的名稱而得
將 將 將 將JJJJ
A A A A, K , K , K , K
AAAA代入則 代入則A 代入則 代入則 A A的 A 的 的 的 狀態方程式為 狀態方程式為 狀態方程式為
狀態方程式為: : : : x
A x A x A K
x J
x B K
B J
B B
A A
⊕
′ =
′ +
=
= ′
= ′
=
B K B J t
B
A K A J t
A
+ ′
= ′ +
+ ′
= ′ +
) 1 (
) 1 (
x B A ABx x
B B x A B x t
B
Ax B A B A A x B A B t
A
′ + ′
′ +
= ′
⊕ ′
′ +
= ′ +
′ +
′ +
′ = + ′
= ′ +
) ( )
1 (
) ( )
1
(
圖 圖 圖
圖5-18電路之狀態圖 電路之狀態圖 電路之狀態圖 電路之狀態圖
表 5-4 圖 5-18 電路之狀態表
表5-4
J
AK
AJ
BK
BA B x
A B
0 0 1 0 0 1
0 0 0
正反器輸入 次一狀態
輸入 目前狀態
圖 5-20 由 T 型正反器構成之序向電路
T 型正反器分析
T型正反器之特性方程式為
圖5-20之輸入及輸出方程式為
而其次態值可由狀態方程式獲得 Q
T Q T Q T t
Q ( + ) 1 = ⊕ = ′ + ′ Bx
T
A= T
B= x
AB y =
B x t
B
Bx A x A B A A Bx A
Bx t
A
⊕
= +
+ ′ + ′
= ′ + ′
= ′ +
) 1 (
)
(
)
(
)
1
(
表 5-5 圖 5-20 序向電路之狀態表
A B
y
x A B
0 0 0 0 0 0 1 1 0 0
0 1 0 1 1 0 1 0 1 1 1 1 0 0 0
1 0 1 0 1 0 1 0 0
0 0 0 1 0 1 1 0 1 0 1 1 1 1
輸出 次一狀態
輸入 目前狀態
** 密利和莫爾模型 密利和莫爾模型 密利和莫爾模型 密利和莫爾模型
在密利模型裡,輸出值是現態和輸入兩 者的函數;但在莫爾模型中,其輸出值 僅是現態的函數。討論上述模型時,有 些書籍會稱這兩種序向電路為有限狀態 機器(finite state machine,縮寫為
FSM),屬密利模型的序向電路被稱為
5-5 序向電路的硬體描述語言
動作模式 動作模式( 動作模式 動作模式 ( (behavioral modeling) ( ) ) ):
在Verilog HDL中,有兩種動作敘述:
initial和always。Initial動作在時間t=0開 始執行,always動作則是重複地執行直 到模擬完成為止。
在一個模組中,可使用關鍵字initial和 always來宣告動作,伴隨在一個敘述
(statement)或一個區塊(block)敘述 前後的關鍵字為begin和end。
一個initial敘述只執行一次,它在模擬開始時 動作並且在所有敘述執行完成後結束。
以下是兩種產生任意運作時脈(free-running clock)的可能方式,
initial initial initial initial initial initial initial initial
begin begin begin begin begin begin begin begin
clock=1’b0; clock=1’b0;
repeat repeat repeat repeat(30) #300
$finish
$finish
$finish
$finish;
#10 clock= ~ clock; end end end end
end end end end always always always always
#10 clock= ~
clock;
//Description of D latch(see Fig.5-6)
module module module
module D-latch(Q,D,control);
output output output
output Q;
input input input
input D,control;
reg reg reg reg Q;
always always always
always @(control or or or or D)
if if if
if (control)Q=D; //same as:ifififif
( control ==1)
endmodule endmodule endmodule endmodule
HDL 範例 範例 範例 範例 5-1
HDL 範例 範例 範例 範例 5-2
//D flip-flop
modulemodulemodulemodule D-FF(Q , D , CLK);
outputoutputoutputoutput Q;
input input input input D , CLK;
reg reg reg reg Q;
alwaysalwaysalwaysalways @@@@(posedgeposedgeposedgeposedge CLK)
Q=D;
endmoduleendmoduleendmoduleendmodule
// D flip-flop with asynchronous reset.
HDL 範例 範例 範例 範例 5-3
//T flip-flop from D flip-flop and gates
modulemodule TFF(Q ,T ,CLK , RST);modulemodule
outputoutput Q;outputoutput
input input T ,CLK , RST;input input
wire wire DT;wire wire
assign assign DT = Q ^ T assign assign
//Instantiate the D flip-flop
DFF TF1(Q ,DT ,CLK , RST);
EndmoduleEndmoduleEndmoduleEndmodule
//JK flip-flop from D flip-flop and gates
modulemodule JKFF(Q , J, K, CLK, RST);modulemodule
outputoutput Q;outputoutput
input input J, K, CLK, RST;input input
wire wire JK;wire wire
assign assign JK=(J & ~Q)∣(~K & Q)assign assign
HDL 範例 範例 範例 範例 5-3:
//Instantiate the D flip-flop
DFF JK1(Q ,JK ,CLK , RST);
endmodule endmoduleendmodule endmodule // D flip-flop module modulemodule
module DFF(Q , D, CLK, RST);
output outputoutput output Q;
input input input
input D, CLK, RST;
reg reg reg reg Q;
always @ always @always @
always @((((posedgeposedgeposedgeposedge CLK or negedgenegedgenegedgenegedge RST)))) ifififif(~RST)Q = 1’b0 ;
else elseelse
else Q = D;
endmodule endmoduleendmodule endmodule
HDL 範例 範例 範例 範例 5-4:
////////Functional description of JK flipFunctional description of JK flipFunctional description of JK flip----flop Functional description of JK flipflop flop flop
module JKmodule JK----FFmodule JKmodule JKFFFF(FF(((J ,K ,CLK , Q ,J ,K ,CLK , Q , QnotJ ,K ,CLK , Q ,J ,K ,CLK , Q ,QnotQnot );Qnot);););
output Qoutput Q ,Qnotoutput Qoutput Q,Qnot,Qnot;,Qnot;;;
input J , K, CLKinput J , K, CLK;input J , K, CLKinput J , K, CLK;;;
reg reg Qreg reg QQ;Q;;;
assign assign Qnotassign assign QnotQnot =~ QQnot=~ Q=~ Q;=~ Q;;;
always @always @(always @always @(((posedge CLK posedge CLK posedge CLK posedge CLK ))))
casecasecasecase(((({J,K}{J,K}){J,K}{J,K})))
2222’b00b00b00b00::::Q=QQ=Q;Q=QQ=Q;;;
2222’b01b01b01b01::::Q=1Q=1’b0Q=1Q=1 b0b0b0;;;;
2222’b10b10b10b10::::Q=1Q=1’b1Q=1Q=1 b1b1b1;;;;
2222’b11b11b11b11::::Q=~QQ=~Q;Q=~QQ=~Q;;;
endcaseendcaseendcaseendcase
endmoduleendmoduleendmoduleendmodule
HDL 範例 範例 範例 範例 5-5:
/ / Mealy state diagram (Fig.5-16)
modulemodulemodulemodule Mealy-mdl(x , y, CLK, RST);
input input input input x , CLK, RST;
output output output output y;
reg reg reg reg y;
regregregreg [ 1: 0 ] Prstate, Nxtstate;
parameterparameterparameterparameter S0 =2’b00, S1 =2’b01, S2 =2’b10, S3 =2’b11;
HDL 範例 範例 範例 範例 5-5~:
S0S0S0S0::::ifififif((((xxxx))))NxtstateNxtstateNxtstateNxtstate = S1= S1= S1;= S1;;;
elseelseelseelse NxtstateNxtstateNxtstate = S0Nxtstate= S0= S0= S0;;;;
S1S1S1S1::::ifififif((((xxxx))))NxtstateNxtstateNxtstateNxtstate = S3= S3= S3;= S3;;;
elseelseelseelse NxtstateNxtstateNxtstate = S0Nxtstate= S0= S0= S0;;;;
S2S2S2S2::::ifififif((((~x~x~x~x))))Nxtstate = S0Nxtstate = S0;Nxtstate = S0Nxtstate = S0;;;
elseelse Nxtstateelseelse NxtstateNxtstate = S2Nxtstate= S2= S2= S2;;;;
S3S3S3S3::::ifififif((((~x~x~x~x))))Nxtstate = S2Nxtstate = S2;Nxtstate = S2Nxtstate = S2;;;
elseelse Nxtstateelseelse NxtstateNxtstate = S0Nxtstate= S0= S0= S0;;;;
endcaseendcaseendcaseendcase
always @ always @ always @ always @ ((((Prstate or xPrstate or xPrstate or xPrstate or x)))) / /Evaluate output/ /Evaluate output/ /Evaluate output/ /Evaluate output
casecasecasecase((((PrstatePrstatePrstatePrstate))))
S0S0:S0S0:::y=0y=0y=0y=0;;;;
S1S1:S1S1:::ifififif((((xxxx))))y=1y=1y=1y=1’b0b0b0;b0;;;else y = 1else y = 1’b1else y = 1else y = 1b1b1;b1;;;
S2S2:S2S2:::ifififif((((xxxx))))y=1y=1y=1y=1’b0b0b0;b0;;;else y = 1else y = 1’b1else y = 1else y = 1b1b1;b1;;;
S3S3:S3S3:::ifififif((((xxxx))))y=1y=1y=1y=1’b0b0b0;b0;;;else y = 1else y = 1’b1else y = 1else y = 1b1b1;b1;;;
endcaseendcaseendcaseendcase
endmoduleendmoduleendmoduleendmodule
HDL 範例 範例 範例 範例 5-6:
/ / Moore state diagram (Fig. 5-19)
module Moore-mdl(x , AB, CLK, RST);
input x , CLK, RST;
output [ 1:0 ]AB;
reg [ 1:0 ] state;
parameter S0 =2’b00, S1 =2’b01, S2 =2’b10, S3 =2’b11;
if(~RST)state = S0; / / Initialize to state S0
always @ (posedge CLK or negedge RST)
else
case(state)
S0:if(x) state = S1;else state = S0;
S1:if(x) state = S2;else state = S3;
S2:if(~x)state = S3;else state = S2;
S3:if(~x)state = S0;else state = S3;
endcase
assign AB = state / / output of flip-flops
endmodule
HDL 範例 範例 範例 範例 5-7:
/ / Structural description of sequential circuit
/ /See fig. 5-20(a)
modulemodule Tcircuit(x , y, A, B, CLK, RST);modulemodule
input input x , CLK, RST;input input
outoutoutout y, A, B;outoutoutout
wirewire TA, TB;wirewire
/ /Flip-flop input equations
assign assign TB = x,assign assign
TA = x & B;
/ /Output equation
assignassign y = A & B;assignassign
/ / Instantiate T flip-flops
T_FF BF (B, TB, CLK, RST);
T_FF AF (A, TA, CLK, RST);
endmoduleendmoduleendmoduleendmodule
HDL 範例 範例 範例 範例 5-7~:
/ /T flip-flop
module module T_FF(Q, T, CLK, RST)module module
outputoutputoutputoutput Q;
input input input input T, CLK, RST;
regregregreg Q;
always always always always @ (posedgeposedgeposedgeposedge CLK orororor negedgenegedgenegedge RST)negedge
ifififif(~RST)Q = 1’b0;
else else Q= Q ^ Telse else
HDL 範例 範例 範例 範例 5-7~~:
initialinitialinitialinitial
beginbeginbeginbegin
RST = 0RST = 0RST = 0RST = 0;;;;
CLK = 0CLK = 0CLK = 0CLK = 0;;;;
#5 RST = 0#5 RST = 0;#5 RST = 0#5 RST = 0;;;
repeat repeat repeat repeat ((((16161616))))
#5 CLK = ~CLK#5 CLK = ~CLK;#5 CLK = ~CLK#5 CLK = ~CLK;;;
endendendend
initialinitialinitialinitial
beginbeginbeginbegin
x = 0x = 0;x = 0x = 0;;;
#15 x = 1#15 x = 1;#15 x = 1#15 x = 1;;;
repeat repeat (repeat repeat (((8888))))
#10 x = ~x#10 x = ~x;#10 x = ~x#10 x = ~x;;;
end end end end
end module
圖 5-21 HDL 範例 5-7 的模擬輸出
5-6 狀態簡化與指定
圖5-22 狀態圖
表5-6 圖5-22狀態圖之狀態表
0 0 X=1 b
d X = 1
0 0 a
c a
b
X=0 X = 0
輸出 次一狀態
目前
狀態
由表5-6可知狀態 g及e為相等狀態,
故圖5-22可簡化為5個狀態,如圖5-23所示
狀態表簡化
由圖5-23可推得表5-7
0 0 0 1 1 1 X=1 b
d d f f f X = 1
0 0 0 0 0 0 a
c a e a e a
b c d e f
X=0 X = 0
輸出 次一狀態
目前
狀態
表5-8簡化後之狀態表
0 0 0 1 1 X=1 b
d d d d X = 1
0 0 0 0 0 a
c a e a a
b c d e
X=0 X = 0
輸出 次一狀態
目前 狀態
表5-9 三種可能的二進位狀態指定
One-shot 葛雷碼
二進位
00001 00010 000
001 000
001 a
b
第三種指定 第二種指定
第一種指定 目前
狀態
表5-10 將第一種狀態指定用於簡化後
之狀態表
0 0 0 1 1 x=1 001
011 011 011 011
x=1 x=0 x=0
0 0 0 0 0 000
010 000 100 000 000
001 010 011 100
輸出 次一狀態
目前 狀態
5-7 設計程序
同步序向電路的設計程序可摘要如下列步驟
:
1、從文字敘述及所需要的操作規格,獲得電
路的狀態圖。
2、如果需要,簡化狀態數量。
3、指定狀態的二元值。
4、獲得二元編碼的狀態表。
5、選擇欲使用的正反器型式。
6、推導出已簡化的輸入方程式及輸出方程
式。
7、繪製邏輯圖。
設計一個電路可偵測出一串位元中有
三個或更多個連續的1出現
圖5-24 順序偵測器之狀態圖
表5-11 順序偵測器之狀態表
y A B
x A B
0 0 0 0
0 0 0
1 0 0
0 0
輸出 次一狀態
輸入 目前狀態
為設計此偵測器電路,選擇兩個D正反 器來描述四個狀態,而且它們的輸出分 別為A與B。有一個輸入x及一個輸出y。
將表5-11化簡如下:
正反器的輸入方程式可直接由A與B的次 態行獲得,並可表示成最小項的和為
簡化後之方程式為
AB y
x B Ax D
Bx Ax D
B A
=
+ ′
= +
=
∑
∑
∑
=
=
= +
=
= +
) 7 , 6 ( ) , , (
) 7 , 5 , 1 ( ) , , ( )
1 (
) 7 , 5 , 3 ( ) , , ( )
1 (
x B A y
x B A D t
B
x B A D t
A
B A
圖 5-26 順序偵測器之邏輯圖
激勵表 激勵表 激勵表
激勵表( ( ( ( Excitation Tables ) ) ) )
在設計程序中,我們通常知道從現態到
次態的轉變,並且希望能找到造成如此
轉變的正反器輸入條件。有鑑於此,對
表 5-12 正反器之激勵表
JK正反器之激勵表 T正反器之激勵表
0 x 1 x x 1 x 0 0
1 0 1 0
0 1 1
J K Q(t+1)
Q(t)
0 1 1 0 0
1 0 1 0
0 1 1
T Q(t+1) Q(t)
表 5-13 狀態表及 JK 正反器之輸入
J
AK
AJ
BK
BA B x
A B
0 x 0 x 0 x 1 x 1 x x 1 0 x x 0 x 0 0 x x 0 1 x x 0 x 0 x 1 x 1 0 0
0 1 1 0 0 1 1 0 1 1 1 1 0 0 0
1 0 1 0 1 0 1 0 0
0 0 0 1 0 1 1 0 1 0 1 1 1 1
正反器輸入 次一狀態
輸入 目前狀態