第五章同步序向邏輯 5- 序向電路 同步時脈序向電路
5-2 閂鎖器 SR 閂鎖器 (SR Latch): 由 NOR 閘所構成之 SR 閂鎖器 由 NAND 閘所構成之 SR 閂鎖器 2
具有控制輸入之 SR 閂鎖器 D 型閂鎖器 (D Latch) 3
閂鎖器之符號圖 5-3 正反器 閂鎖器和正反器之時脈響應 4
邊緣觸發 D 型正反器 (Edge- Triggered D Flip-Flop) D 型主僕正反器 D 型正緣觸發正反器 5
D 型邊緣觸發正反器之符號圖 JK 正反器 圖 5-2(a) 之 D 輸入端之電路方程式為 D = JQ + K Q 6
T 型正反器 : 屬互補式之正反器 圖 5-3(b)T 型正反器之 D 輸入端表示式為 D = T Q = TQ + T Q 特性表 表 5- 正反器的特性表 J k JK 正反器 Q(t+) Q(t) 狀態未改變 重置為 設置為 Q (t) 補數輸出 7
正反器之特性表 D 型正反器 D Q(t+) T T 型正反器 Q(t+) 重置為 設置為 Q(t) 狀態未改變 Q (t) 補數輸出 特性方程式 D 型正反器之特性方程式為 Q ( t + ) = D Q ( t + ) = JQ + K Q JK 正反器之特性方程式為 Q ( t + ) = JQ + K Q T 型正反器之特性方程式為 Q ( t + ) = T Q = TQ + T Q 8
直接輸入 : 用來強制正反器變成特殊狀態且與時脈無關 l 包括 (a) 預先設置 (PRESET) 或直接輸入 (direct set) (b) 清除 (clear) 或直接重置 (direct reset) 圖 5-5 是由兩個 D 型正反器及邏輯閘所構成之時控序向電路 9
5-4 時控序向電路分析 狀態方程式 : 圖 5-5 電路之狀態方程式為 A( t + ) = A( t) x( t) + B( t) x( t) B( t + ) = A ( t) x( t) y( t) = [ A( t) + B( t) ] x ( t) 或表示為 A( t + ) = Ax + Bx B( t + ) = A x y = ( A + B) x 狀態表 圖 5-5 的狀態表 目前狀態 A B 輸入 x 次一狀態 A B 輸出 y
另一種形式的狀態表 表 5-3 狀態表的第二種形式 目前狀態 AB 次一狀態 x= x= AB AB 輸出 x= x= y y 狀態圖 表 5-3 的結果可用狀態圖表示如圖 5-6
正反器輸入方程式或稱為輸入函數, 係採用正反器的輸入符號代表輸入方程式的變數而下標則表示正反器輸出的名稱 舉例而言, 敘述一個具有輸入 x 和 y 的 OR 閘連接到正反器的輸入 D, 而它的輸出標示為 Q, 其輸入方程式表示為 D Q = x + 圖 5-5 電路之輸入方程式及輸出方程式可表示為 D = Ax + Bx D y A B = = ( A y A x + B ) x 圖 5-7 具有 D 型正反器的序向電路 2
D 型正反器的分析 圖 5-7 之輸入及輸出方程式為 D A = A x y A( t + ) = A x y 因為對 D 型正反器而言, 其次一狀態與輸 輸入 D 相同 JK 正反器的分析 一個使用 JK 或 T 正反器的序向電路, 其次態值可由下列程序獲得 : 用現態和輸入變數的觀點決定正反器 的輸入方程式 2 列出每一個輸入方程式的二元值 3 使用相對應的正反器特性表決定狀態 表中的次態值 3
圖 5-8 具 JK 正反器之序向電路 圖 5-8 之輸入及狀態方程式 如圖 5-8 所示 電路的輸入方程式為 J K J K A B A B = B = Bx = x = A x + Ax = A x 正反器的特性程式可藉由將 A,B 取代 Q 的名稱而得 A( t + ) = JA + K A B( t + ) = JB + K B 將 J A, K A 代入則 A 的狀態方程式為 : A( t + ) = BA + ( Bx ) A = A B + AB + Ax B( t + ) = x B + ( A x) B = B x + ABx+ A Bx 4
圖 5-8 電路之狀態圖 表 5-4 圖 5-8 電路之狀態表 表 5-4 目前狀態輸入次一狀態正反器輸入 A B x A B J A K A J B K B 5
圖 5-2 由 T 型正反器構成之序向電路 T 型正反器分析 T 型正反器之特性方程式為 Q ( t + ) = T Q = T Q+ TQ 圖 5-2 之輸入及輸出方程式為 T A = Bx T B = x y = AB 而其次態值可由狀態方程式獲得 A( t + ) = ( Bx) A+ ( Bx) A = AB + Ax + ABx B( t + ) = x B 6
表 5-5 圖 5-2 序向電路之狀態表 目前狀態 輸入 次一狀態 輸出 A B x A B y ** 密利和莫爾模型 在密利模型裡, 輸出值是現態和輸入兩者的函數 ; 但在莫爾模型中, 其輸出值僅是現態的函數 討論上述模型時, 有些書籍會稱這兩種序向電路為有限狀態機器 (finite state machine, 縮寫為 FSM), 屬密利模型的序向電路被稱為密利 FSM 或密利機, 屬莫爾模型的序向電路被稱為莫爾 FSM 或莫爾機 圖 5-5 為密利機範例 圖 5-8 及圖 5-2 則為莫耳機範例 7
5-5 序向電路的硬體描述語言 動作模式 (behavioral modeling): 在 Verilog HDL 中, 有兩種動作敘述 : initial 和 always Initial 動作在時間 t= 開始執行,always 動作則是重複地執行直到模擬完成為止 在一個模組中, 可使用關鍵字 initial 和 always 來宣告動作, 伴隨在一個敘述 (statement) 或一個區塊 (block) 敘述前後的關鍵字為 begin 和 end 一個 initial 敘述只執行一次, 它在模擬開始時動作並且在所有敘述執行完成後結束 以下是兩種產生任意運作時脈 (free-running clock) 的可能方式, initial initial begin begin clock= b; clock= b; repeat(3) #3 $finish; # clock= ~ clock; end end always # clock= ~ clock; 8
HDL 範例 5- //Description of D latch(see Fig.5-6) module D-latch(Q,D,control); output Q; input D,control; reg Q; always @(control or D) if (control)q=d; //same as:if (control ==) endmodule HDL 範例 5-2 //D flip-flop module D-FF(Q, D, CLK); output Q; input D, CLK; reg Q; always @(posedge CLK) Q=D; endmodule // D flip-flop with asynchronous reset. module DFF(Q, D, CLK, RST); output Q; input D, CLK,RST; reg Q; always @(posedge CLK or negedge RST) if(~rst)q= b ; //same as:if if(rst ==) else Q=D; endmodule 9
HDL 範例 5-3 //T flip-flop from D flip-flop and gates module TFF(Q,T,CLK, RST); output Q; input T,CLK, RST; wire DT; assign DT = Q ^ T //Instantiate the D flip-flop DFF TF(Q,DT,CLK, RST); Endmodule //JK flip-flop from D flip-flop and gates module JKFF(Q, J, K, CLK, RST); output Q; input J, K, CLK, RST; wire JK; assign JK=(J & ~Q) (~K & Q) HDL 範例 5-3: //Instantiate the D flip-flop DFF JK(Q,JK,CLK, RST); endmodule // D flip-flop module DFF(Q, D, CLK, RST); output Q; input D, CLK, RST; reg Q; always @(posedge CLK or negedge RST) if(~rst)q = b ; else Q = D; endmodule 2
HDL 範例 5-4: //Functional description of JK flip-flop flop module JK-FF FF(J,K,CLK, Q, Qnot ); output Q,Qnot; input J, K, CLK; reg Q; assign Qnot =~ Q; always @(posedge CLK ) case({j,k} {J,K}) 2 b b:q=q Q=Q; 2 b b:q= Q= b b; 2 b b:q= Q= b b; 2 b b:q=~q Q=~Q; endcase endmodule HDL 範例 5-5: / / Mealy state diagram (Fig.5-6) module Mealy-mdl(x, y, CLK, RST); input x, CLK, RST; output y; reg y; reg [ : ] Prstate, Nxtstate; parameter S =2 b, S =2 b, S2 =2 b, S3 =2 b; always @ (posedge CLK or negedge RST) if(~rst)prstate = S; / / Initialize to state S else Prstate = Nxtstate; / /Clock operations always @ (Prstate or x) / /Determine next state case(prstate) 2
HDL 範例 5-5~: S:if if(x) Nxtstate = S; else Nxtstate = S; S:if if(x) Nxtstate = S3; else Nxtstate = S; S2:if if(~x ~x)nxtstate = S; else Nxtstate = S2; S3:if if(~x ~x)nxtstate = S2; else Nxtstate = S; endcase always @ (Prstate or x) x / /Evaluate output case(prstate Prstate) S:y= y=; S:if if(x)y= y= b b; else y = b b; S2:if if(x)y= y= b b; else y = b b; S3:if if(x)y= y= b b; else y = b b; endcase endmodule HDL 範例 5-6: / / Moore state diagram (Fig. 5-9) module Moore-mdl(x, AB, CLK, RST); input x, CLK, RST; output [ : ]AB; reg [ : ] state; parameter S =2 b, S =2 b, S2 =2 b, S3 =2 b; if(~rst)state = S; / / Initialize to state S always @ (posedge CLK or negedge RST) else case(state) S:if(x) state = S;else state = S; S:if(x) state = S2;else state = S3; S2:if(~x)state = S3;else state = S2; S3:if(~x)state = S;else state = S3; endcase assign AB = state endmodule / / output of flip-flops 22
HDL 範例 5-7: / / Structural description of sequential circuit / /See fig. 5-2(a) module Tcircuit(x, y, A, B, CLK, RST); input x, CLK, RST; outout y, A, B; wire TA, TB; / /Flip-flop input equations assign TB = x, TA = x & B; / /Output equation assign y = A & B; / / Instantiate T flip-flops T_FF BF (B, TB, CLK, RST); T_FF AF (A, TA, CLK, RST); endmodule HDL 範例 5-7~: / /T flip-flop module T_FF(Q, T, CLK, RST) output Q; input T, CLK, RST; reg Q; always @ (posedge CLK or negedge RST) if(~rst)q = b; else Q= Q ^ T endmodule / /Stimulus for testing sequential circuit module testtcircuit; reg x, CLK, RST; / /inputs for circuit wire y, A, B; / /output from circuit Tcircuit TC (x, y, A, B, CLK, RST); / /instantiate circuit 23
HDL 範例 5-7~~: initial begin RST = ; CLK = ; #5 RST = ; repeat (6 6) #5 CLK = ~CLK; end initial begin x = ; #5 x = ; repeat (8) # x = ~x; end end module 圖 5-2 HDL 範例 5-7 的模擬輸出 24
5-6 狀態簡化與指定 圖 5-22 狀態圖 表 5-6 圖 5-22 狀態圖之狀態表 目前狀態 a b c d e f g 次一狀態 X = X = a b c d a d e f a f g f a f 輸出 X= X= 25
由表 5-6 可知狀態 g 及 e 為相等狀態, 故圖 5-22 可簡化為 5 個狀態, 如圖 5-23 所示 狀態表簡化 由圖 5-23 可推得表 5-7 目前狀態 a b c d e f 次一狀態 X = X = a b c d a d e f a f e f 輸出 X= X= 26
表 5-8 簡化後之狀態表 目前狀態 a b c d e 次一狀態 X = X = a b c d a d e d a d 輸出 X= X= 表 5-9 三種可能的二進位狀態指定 目前 第一種指定 第二種指定 第三種指定 狀態 二進位 葛雷碼 One-shot a b c d e 27
表 5- 將第一種狀態指定用於簡化後 之狀態表 目前狀態 次一狀態 輸出 x= x= x= x= 5-7 設計程序 同步序向電路的設計程序可摘要如下列步驟 : 從文字敘述及所需要的操作規格, 獲得電 路的狀態圖 2 如果需要, 簡化狀態數量 3 指定狀態的二元值 4 獲得二元編碼的狀態表 5 選擇欲使用的正反器型式 6 推導出已簡化的輸入方程式及輸出方程式 7 繪製邏輯圖 28
設計一個電路可偵測出一串位元中有 三個或更多個連續的 出現 圖 5-24 順序偵測器之狀態圖 表 5- 順序偵測器之狀態表 目前狀態 輸入 次一狀態 輸出 A B x A B y 29
為設計此偵測器電路, 選擇兩個 D 正反器來描述四個狀態, 而且它們的輸出分別為 A 與 B 有一個輸入 x 及一個輸出 y 將表 5- 化簡如下 : 正反器的輸入方程式可直接由 A 與 B 的次態行獲得, 並可表示成最小項的和為 A( t + ) = D B( t + ) = D y( A, B, x) = 簡化後之方程式為 D D A B = Ax + Bx = Ax + B x y = AB A B ( A, B, x) = ( A, B, x) = (6,7) (3,5,7) (,5,7) 3
圖 5-26 順序偵測器之邏輯圖 激勵表 (Excitation Tables) 在設計程序中, 我們通常知道從現態到 次態的轉變, 並且希望能找到造成如此 轉變的正反器輸入條件 有鑑於此, 對 一已知的狀態改變, 我們需要用一個表 來列出必要的輸入條件, 這樣的表稱之 為激勵表 3
表 5-2 正反器之激勵表 JK 正反器之激勵表 T 正反器之激勵表 Q(t) Q(t+) J K Q(t) Q(t+) T x x x x 表 5-3 狀態表及 JK 正反器之輸入 目前狀態 輸入 次一狀態 正反器輸入 A B x A B J A K A J B K B x x x x x x x x x x x x x x x x 32
圖 5-27 J 與 K 輸入方程式的卡諾圖化簡 圖 5-28 使用 JK 正反器之序向電路邏輯圖 33
使用 T 正反器設計 3 位元二進位計數器 表 5-4 3 位元二進位計數器之狀態表 目前狀態次一狀態正反器輸入 A 2 A A A 2 A A T A2 T A T A 34
圖 5-3 3 位元二進位計數器之卡諾圖 圖 5-3 3 位元二進位計數器之邏輯圖 35