第 9 章 非同步序向式邏輯
Asynchronous Sequential Logic
內容
9-1 簡介
9-2 分析步驟
9-3 具有latch的電路
9-4 設計的步驟
9-5 狀態和流程表的簡化
9-6 沒有競跑的狀態設定
9-7 雜訊
9-8 設計範例
習題
2
9-1 簡介
序向式電路是由輸入、輸出和內部狀態等一 連串的時間序列所定義。
– 同步的序向式電路中,內部狀態的變化對應到同 步的時間脈波。
– 非同步的序向式電路不使用時脈,內部狀態的變 化則發生在輸入變數改變時。
非同步序向式電路通常由組合式電路加上回 授所組成。
圖
9-1非同步序向式電路的方塊圖
9-1 簡介
非同步序向式電路中的目前狀態和次一狀態 變數習慣上分別稱為二次變數(secondary variables)和激勵變數(excitation variables)
基本模式(fundamental mode)的操作假設電 路在穩態時一次只有一個輸入信號改變。
– 為了確保正確的動作,非同步序向式電路必須在 輸入變成另外一個新的值之前達到穩態。因為連 線和邏輯閘電路的延遲,令兩個以上的輸入變數 準確地在同一時刻改變,不能有不知道哪一個先 後的不確定性
9-2 分析步驟
非同步序向式電路的分析包括獲得描述內部 狀態序列的表或圖,以及用輸入變數變化表 示的輸出函數。
在本章節中,觀察具有回授路徑但是沒有正 反器的非同步序向式電路的行為。沒有時脈 的正反器稱為鎖閂(latch)
電路分析的開始將激勵變數當成輸出並將二 次變數當成輸入,然後導出以輸入和二次變 數為函數的激勵變數之布氏代數式。
4
圖
9-2非同步序向式電路的範例
圖中清楚地看到兩條從OR閘輸出回到AND閘輸 入的回授迴圈。此電路包括一個輸入變數x和兩 個內部狀態。內部狀態有兩個激勵變數Y1和Y2, 以及兩個二次變數y1和y2。
圖
9-3圖
9-2電路的卡諾圖和轉換表
轉換表
有時為了方便將內部狀態和輸入值結合 在一起,稱之為電路的全狀態(total state)。
– 圖9-3(c)的電路具有四個穩定的全狀態—
y1y2x = 000,011,110和101—以及四個不穩定 的全狀態—001,010,111和100。
9-2 分析步驟
從非同步序向式電路得到轉換表的步驟如下:
– 1. 求出電路中所有的回授迴圈,
– 2. 每個回授路徑的輸出標示變數Yi,對應的輸入標 示成yi,其中i = 1,2,…,k,在此k為電路中回授迴圈 的編號,
– 3. 導出所有Y的布式函數,Y為外界輸入和y的函 數,
– 4. 用y變數為列、外界輸入為行,在卡諾圖上畫出 Y函數,
– 5. 將所有的圖結合成一個表,在每個方格中顯示Y
= Y1Y2…Yk的值,
6
流程表
在非同步序向式電路的設計中,狀態直接用 文字符號命名比較方便,不需要參照它們的 二進位值,這種表格稱為流程表。
因為每一列中只有一個穩定狀態,圖9-4(a)的 表被稱為原始流程表(primitive flow table)。
每個狀態必須設定一個獨特的二進位值。這 樣的設定將流程表轉變成轉換表
圖
9-4流程表的範例
圖9-5 圖9-4(b)流程表定義之電路的推導過程
競跑現象
當兩個或兩個以上的二進位狀態變數因為輸 入變數的變化而改變其值時,非同步序向式 電路中會存在競跑現象。
如果電路最後的穩定狀態和狀態變數改變的 次序無關,這樣的競跑現象稱為沒有危機的 競跑(noncritical race)。
如果電路依照狀態改變的順序有可能終止在 兩個或兩個以上的穩態,此種稱為危機的競 跑(critical race)。
正確的操作之下,應當避免危機的競跑現
8
圖
9-6沒有危機競跑的範例
圖
9-7危機的競跑範例
循環
適當地設定狀態變數的二進位值可以避 免競跑現象。
導引電路經過中繼的擁有獨一無二之狀 態變數變化的非穩態也可以避免競跑現 象。當電路經過一串獨一無二之非穩態 序列時,稱之為循環(cycle)。
圖
9-8循環的範例
10
穩定性考量
因為非同步序向式電路中存在回授連 結,必須小心確保電路不會變成不穩 定,不穩定的情形會讓電路在非穩態之 間震盪。轉換表的分析方法可以有效地 偵測不穩定情形的發生。
圖
9-9不穩定電路的範例
9-3 具有 latch 的電路
本章節中,要運用前一章節介紹的技巧 分析SR閂的動作,然後將展示利用SR閂 實現非同步序向式電路的步驟。
SR閂是具有兩個輸入S和R以及兩個交互 耦合的NOR邏輯閘或兩個交互耦合的 NAND邏輯閘形成的數位電路。
圖
9-10 NOR邏輯閘的
SR閂
12
圖
9-11具有
NAND閘的
SR閂
圖
9-12具有
SR閂的電路範例
圖
9-13圖
9-12電路的轉換表
具有
SR閂的非同步序向式電路的分析步驟
分析具有SR閂的非同步序向式電路的步驟總結如下:
– 1. 每個閂的輸出標示為Yi,如果有外部回授路徑則標示為 yi,其中i = 1, 2, …, k。
– 2. 導出每個閂的輸入Si和Ri的布氏函數。
– 3. 檢查每個NOR閂是否SR = 0,或者每個NAND閂是否 = 0。
如果此一條件無法滿足,則電路有可能無法正常操作。
– 4. 計算出每個NOR閂的,或是每個NAND閂的。
– 5. 建立一個以y為列且以x輸入為行的圖。
– 6. 在圖上畫出Y = Y1Y2‥Yk的值。
– 7. 在Y = y的地方圈出所有的穩定狀態,所得的圖就是轉換 表。
14
閂的激勵表
在分析和定義閂的動作時,SR閂的轉換 表非常有用。在二次變數y和輸入S與R 已知的時候,它指明激勵變數Y。在實 現的過程中,會用到電路的轉換表以求 出S和R的值。基於此原因,對於從y到Y 的每一種可能的轉換,我們需要一個表 列出所要的輸入S和R,這種表就稱為激 勵表。
圖
9-14從轉換表導出具有閂的電路
閂的實現法
從一個已知的轉換表實現一個具有SR閂的電 路的一般步驟可以總結如下:
– 1. 已知一個定義出激勵函數Y = Y1Y2‥Yk的轉換 表,導出一對對Si和Ri的圖,其中i = 1, 2, …, k。利 用圖9-14(b)閂的激勵表指定的條件可以完成。
– 2. 導出每個Si和Ri簡化的布氏函數,必須注意在相 同的全及項格子裡,不能讓Si和Ri等於1。
– 3. 利用k個閂以及產生S和R布氏函數所需的邏輯閘 畫出邏輯圖。對NOR閂而言,利用步驟2得到的S 和R布氏函數;對NAND閂而言,利用步驟2得到 函數的補數值。
圖
9-15消除彈跳的電路
消除彈跳的電路用來去除因接觸彈跳而產生的一 連串脈波,同時產生從0到1或從1到0單一平滑的
16
9-4 設計的步驟
非同步序向式電路的設計步驟如下:由 設計的規格得到原始的流程表,將流程 表簡化至最少的狀態,然後設定狀態的 二進位值以得到轉換表。從轉換表導出 一個具有回授的組合式電路或者一個具 有SR閂的電路邏輯圖。
設計範例
想要設計一個具有兩個輸入G(gate閘控)和 D(data資料)以及一個輸出Q的閘控閂電 路。當G等於1時,在輸入D出現的二進位資料 會轉移至輸出Q,只要G = 1,Q的輸出跟隨著 D的輸入。當G變成0,在轉換的那一刻輸入D 出現的資料會維持在輸出Q。閘控的閂是一種 記憶元件,當G = 1時,接受D的值,且在G變 成0之後維持此值。一旦G = 0,改變D並無法 改變輸出Q的值。
圖
9-16原始流程表
圖
9-17原始流程表的簡化
18
圖
9-18閘控閂的轉換表和輸出圖
圖
9-19閘控閂的邏輯圖
圖
9-19具有
SR閂的電路
圖
9-21設定輸出值給不穩態
20
設計步驟總結
1. 由已知的設計規格求得原始流程表。這是設計中最艱 難的部分,因為需要運用慣例和經驗才能正確的解譯 問題的規格。
2. 合併原始流程表中的列數以簡化流程表。9-5節已說明 合併流程表列數正式的步驟。
3. 簡化流程表中每一列設定二進位的狀態變數以得到轉 換表。9-6節已說明免除任何危機競跑可能性的狀態 設定步驟。
4. 設定不穩態橫線的輸出值以求得輸出圖。這個步驟已 在前面解釋過。
5. 簡化激勵變數和輸出變數的布氏函數,同時畫出9-2 節所示的邏輯圖。可以利用9-3節中以及9-7節末所示 的SR閂畫出邏輯圖。
9-5 狀態和流程表的簡化
5-6節中已說明一個完全定義的狀態表之狀態 簡化的演算法則,我們將複習這個演算法並 且運用在隱含表的狀態簡化方法。
完全定義狀態表的狀態簡化步驟是基於狀態 表中兩個狀態如果全等可以合併成一個狀態 的演算法。
如果對任一可能的輸入,兩個狀態正好輸出 相同且變成相同的次一狀態或是全等的次一 狀態,則這兩個狀態是全等的。
表
9-4要簡化的狀態表
目前 次一狀態 輸出
狀態 x=0 x=0 x=0 x=0
a d b 0 0
b e a 0 0
c g f 0 1
d a d 1 0
e a d 1 0
f c b 0 0
g a e 1 0
圖
9-22隱含表
22
表
9-5簡化後的狀態表
目 前
次一狀態 輸出
狀 態
x=0 x=0 x=0 x=0
a d a 0 0
c d f 0 1
d a d 1 0
f c a 0 0
流程表的合併
為了求得合適的相容群組以合併流程表 之程序可以分成三個步驟:
– 1. 利用隱含表求出所有相容的狀態對 – 2. 利用合併表找出最大的相容對
– 3. 求出包含所有狀態之相容對的最小集合
然後利用相容對的最小集合來合併流程 表的列數。
圖
9-23流程表和隱含表
圖
9-24合併圖
24
圖
9-25選擇一個相容對的集合
9-6 沒有競跑的狀態設定
一旦導出非同步序向式電路的簡化流程表,
設計工作的下一個步驟是設定二進位變數給 每個穩態。這樣的設定結果將流程表轉變成 對等的轉換表。選擇適當的二進位狀態設定 最主要的目的是要避免危機競跑。
當流程表中有狀態轉換發生時,任一時刻只 有一個變數改變的二進位狀態設定可以避免 危機競跑。要完成這項工作,必須讓兩者之 間有轉換發生的狀態是相鄰的設定。如果兩 個二進位值只相差一個變數,則稱之為相鄰 的。
圖
9-26三列的流程表範例
圖
9-27有額外列的流程表
26
圖
9-28轉換表
圖
9-29四列的流程表範例
圖
9-30選擇流程表的額外列
圖
9-31修正後的流程表之狀態設定
28
圖
9-32複數列設定法
9-7 雜訊
有一種稱為雜訊(hazard)的現象會讓電路誤 動作。因為不同的路徑有不同的傳播延遲,
雜訊是不想要的切換暫態,會出現在電路的 輸出端。雜訊也出現在組合式電路中,他們 會導致暫時錯誤的輸出值。當這種情形出現 在非同步序向式電路時,會導致轉換到錯誤 的穩態。因此需要檢驗可能的雜訊,並且求 出他們是否會造成錯誤的動作。然後採取必 要的步驟刪除這些影響。
圖
9-33具有雜訊的電路
第一種情形稱為靜態1雜訊(static1-hazard),第二 種情形稱為靜態0雜訊(static 0-hazard)。第三種雜 訊稱為動態雜訊(dynamic hazard)
圖
9-34雜訊的形式
30
圖
9-35展示雜訊和如何移除的圖形
圖
9-36沒有雜訊的電路
圖
9-37非同步序向式電路中的雜訊
圖
9-38閂的實現方法
32
9-8 設計範例
現在要檢驗非同步序向式電路完整的設計範 例,這個範例可以當成其他類似電路設計時 的參考。我們將遵循列在9-4節最後的步驟展 示設計的方法,複述如下:
1. 描述設計的規格
2. 導出原始流程表
3. 合併列數以簡化流程表
4. 完成沒有競跑的二進位狀態設定
5. 求得轉換表和輸出圖
6. 運用SR閂求得邏輯圖
設計規格
想要設計一個負緣觸發的T型正反器。
此電路有兩個輸入,T(切換toggle)和 C(時脈clock),以及一個輸出Q。如 果T=1且時脈C從1變成0(負緣觸發),
則輸出狀態取補數。除此之外,在任何 其他的輸入情況,輸出維持不變。雖然 此電路可以在時脈式序向電路中當成正 反器,但是此正反器(其他所有的正反 器亦然)的內部設計是非同步的問題。
圖
9-39原始流程表
圖
9-40隱含表
34
圖
9-41合併圖
圖
9-42簡化後的流程表
圖
9-43轉換圖
圖
9-44轉換表和輸出圖
36
圖
9-45閂的輸入圖
圖
9-46負緣觸發
T正反器的邏輯圖
習題圖 P9-2
習題圖 P9-5
38
習題圖 P9-6
習題圖 P9-9
習題圖 P9-14
習題圖 P9-15
40