王兆東,劉向軍
(華北電力大學電氣與電子工程學院,北京102206)
序列檢測電路的設計是時序邏輯電路設計中的內容之一,它一直是學生學習數字電路中的難點。同步米里型序列檢測電路設計是國內外許多教材文獻中反復引用的一個例子[1-3],但本人在學習過程中發現該例題存在沒有檢測到序列時就輸出了檢測到信號的錯誤輸出,系統工作出現不正常的問題。在文獻[4]中,認為輸出波形存在問題的原因是狀態化簡后的電路有可能不能正常工作了,這種說法有待商榷,因為,電路正常運行時,電路處于有效狀態,一定能滿足狀態轉換,與狀態化簡無關,而只有在無效狀態下輸入X時出現錯誤運行與化簡有關系。在文獻[5]中,為確保系統正常工作,在所設計電路的基礎上,輸出增加一個延遲環節,使電路等到輸入改為下一位輸入數據時才輸出,是解決輸出錯誤的方法之一,但是,這并沒有找到問題的根源,因為問題發生在輸入與時鐘不同步,以及無效態的次態任意,常常會引起輸出錯誤,并且調整過程缺乏規律,還需在輸入解決根本問題。
本文分析了米里型序列檢測電路存在的主要問題,給出了確保電路正常工作的有效方法。
同步米里型序列檢測電路設計的一般步驟包括以下幾部分[6]:首先根據設計要求,分析邏輯功能,獲得原始狀態轉換圖,進行狀態化簡,得出最簡的狀態轉換圖;為每個狀態分配代碼(狀態編碼),畫出編碼后的狀態轉換圖;選定觸發器的類型和個數,列寫帶有驅動端的狀態轉換表;利用卡諾圖化簡求出驅動方程和輸出方程;檢查能否自啟動,不能自啟動應修改設計,最后畫出邏輯電路圖。
設計一個時序邏輯電路目標是完成指定的邏輯功能,如果運行出現錯誤,那么設計不合理,需要對電路進行修正。
多年來國內外許多教材長期反復引用的一個例子是設計一個同步米里型時序邏輯電路實現串行數據檢測,當連續輸入3個或3個以上1時輸出為1,否則輸出為0。
按照時序邏輯電路的設計方法,文獻[1]中的例5 ~例9,取S0=00,S1=01,S2=11,選用上升沿觸發D觸發器實現,對觸發器的每個驅動端和整個邏輯電路的輸出進行卡諾圖化簡后,得到驅動方程和輸出方程:

最后,根據驅動方程和輸出方程,得到邏輯電路圖如圖1所示。

圖1 111序列檢測的邏輯電路圖
文獻[1]中檢查了電路能夠自啟動,其完整的狀態圖如圖2所示。

圖2 完整的狀態轉換圖
2.1.1 存在的問題
對于上述電路的輸出進行分析,結果表明,當初狀態是10,且X為1時,代入輸出方程,輸出為1。電路輸出1表明接受到了3個和3個以上的1,顯然,無效的狀態為初狀態,接收到一個1時就輸出了1,不符合題意,它沒有任何含義。
2.1.2 解決方法
在不應該輸出1的時候輸出了1,究其原因是狀態轉換表中將無效狀態對應的輸出設為了任意,這樣的處理不符合題意,在卡諾圖化簡時利用了這個任意項,所以有了一個錯誤的輸出,需要修正。
與其設計完再修正,不如在設計中,就應該按照題意設置,確定無效態對應的輸出為0。修正方法是修改狀態裝換表,將現狀態10對應的輸出改為0。
此時,輸出的表達式為:

輸入的序列X一般有電平碼和脈沖碼兩種形式,如果電平碼與時鐘同步,已知111序列檢測中的輸入波形對應的輸出波形如圖3所示,輸出波形正常,符合題意。

圖3 X輸入為電平序列且與時鐘同步時的波形分析
但是,在有些情況下是不能正常工作的,檢測到兩個1時就輸出了1。
2.2.1 存在的問題
(1)X輸入為電平碼與時鐘不同步
當X輸入為電平碼與時鐘不同步時,其波形分析如圖4所示,輸出波形在連續輸入兩個1則錯誤地輸出了1,與題意不符。

圖4 X輸入為電平序列且與時鐘不同步時的波形分析
(2)X輸入為脈沖碼
當輸入X為脈沖碼時,分析其波形如圖5所示。在連續輸入兩個1之后同樣產生了錯誤的輸出1,與題意不符。

圖5 X輸入為脈沖序列的波形分析
2.2.2 解決方法
米里型電路的輸出不僅與狀態有關,還與輸入有關,輸出不一定與時鐘同步,但是隨時會受到輸入的影響。分析兩種情況,原因是輸入的X與時鐘不同步,如果能把任意的輸入都調整到與時鐘同步,就可實現如圖3的波形分析,輸出就會符合題意要求。
為了使X與時鐘同步,在X加入檢測電路時先加一延遲環節,如D[7]觸發器,從而保證輸出的正確,改進后的電路如圖6所示。

圖6 改進電路
(1)X輸入為電平碼調整后與時鐘同步
在圖6所示的改進電路中,可將圖4中的電平碼X加延遲后調整為X',波形如圖7所示。

圖7 電平序列加延遲后的序列X'
(2)X輸入為脈沖碼調整后與時鐘同步
在圖6所示的改進電路中,可將圖5中的脈沖碼加延遲后調整為X',波形如圖8所示。

圖8 脈沖碼經延遲后的序列X'
輸入序列經整理后的為X',使序列與時鐘達到同步,那么所設計的電路可實現如圖3所示的波形分析,完成111序列檢測,消除了不應該輸出1卻輸出了1的現象。
對于含有無效狀態的時序邏輯電路,假如電路由于某種原因進入無效狀態,在有限個時鐘脈沖作用下最終能到有效的循環狀態中,則稱該電路具有自啟動能力[8]。
2.3.1 存在問題
由圖2可知,設計的電路圖能夠自啟動,在卡諾圖化簡時任意態的使用恰好使狀態轉換符合題意。但是,同樣是111序列檢測,設計方法相同,只是按照S0=00,S1=01,S2=10進行狀態編碼,那么對所設計的電路進行自啟動檢查,將得到如圖9所示的狀態轉換圖。由圖9可知,雖然能夠自啟動,但是狀態轉換并不符合題意,不能描述原始狀態表所描述的功能。比如,當輸入序列11110110111序列時,輸出應該為00110000001,如果從無效狀態開始,則會輸出11110000001,顯然輸出不符合要求,經歷2個時鐘后電路工作正常。文獻[1]中101序列檢測的設計結果,也存在這個問題,當輸入序列10101011101時,輸出應該為00100010001,但是如果從無效狀態開始,則會輸出10001000001,序列檢測經歷6個時鐘后才能正常,沒有規律可循。

圖9 按S0=00,S1=01,S2=10編碼所設計電路對應的狀態轉換圖
2.3.2 解決方法
有此現象的原因,是無效狀態的次態不合理,是狀態轉換表的無效狀態對應任意次態引起的。所以,電路雖然能自啟動,但是也應該修正其驅動方程。狀態編碼為S0=00,S1=01,S2=10的111序列檢測電路的設計中,無效狀態的次態不應該選擇任意,當輸入0時,次態應設為S0;當輸入1時,次態應設為S1,修正其驅動方程,進而修正所設計的電路。還以輸入11110110111序列為例,假設初態為無效態11,則能夠輸出00110000001,符合題意。
此例說明,時序邏輯電路的設計在狀態轉換表的分析中不能一律把無效狀態的次態看成任意,在設計中應該根據題意確定次態,既能保證了電路能自啟動,又能使狀態轉換不會出現錯誤。
在米里型同步時序邏輯電路的設計中,電路的輸出不應該有任意項,只有規定的序列下輸出才為1,可直接獲得輸出的表達式,不需要卡諾圖化簡,也不需要修正;當輸入與時鐘不同步或脈沖序列時,在輸入端加延遲環節,調整輸入與時鐘同步,保證了輸出的正確;無效態的次態任意,常常會引起輸出錯誤,并且調整過程缺乏規律,所以,本文建議其次態應該根據題意確定而不是任意態。此方法,在同步米里型時序邏輯電路的設計中有通用性。
[1]李月喬.數字電子技術基礎[M].北京:中國電力出版社出版,2002:268-295
[2]閻石.數字電子技術基礎[M].4版.北京:高等教育出版社,1997:286-290
[3]康華光.數字電子技術基礎[M].4版.北京:高等教育出版社,1997:286-290
[4]龍勝春.米里電路設計的狀態化簡問題[J].電氣電子教學學報,2002,24(4):52-53
[5]陳云洽.串行數據檢測器的設計[J].電氣電子教學學報,2006,28(2):110-113
[6]徐勇謙,萬延.時序邏輯電路設計方法[J].科技創新導報,2008(10):61-62
[7]張富彬,HO Ching-yen,彭思龍.靜態時序分析及其在IC設計中的應用[J].電子器件,2006,29(4):1330-1333
[8]任俊原.基于次卡諾圖的JK激勵函數最小化方法及時序邏輯電路自啟動設計[J].浙江大學學報(理學版),2010,37(4):425-427