狀態(tài)機的寫法
有限狀態(tài)機FSM思想廣泛應用于硬件控制電路設計,也是軟件上常用的一種處理方法(軟件上稱為FMM有限消息機)。它把復雜的控制邏輯分解成有限個穩(wěn)定狀態(tài),在每個狀態(tài)上判斷事件,變連續(xù)處理為離散數(shù)字處理,符合計算機的工作特點。
有限狀態(tài)機的工作原理如圖所示,發(fā)生事件(event)后,根據(jù)當前狀態(tài)(cur_state),決定執(zhí)行的動作(action),并設置下一個狀態(tài)號(nxt_state)。

圖 ?有限狀態(tài)機工作原理
下圖為一個狀態(tài)機實例的狀態(tài)轉移圖,它的含義是:
在s0狀態(tài),如果發(fā)生e0事件,那么就執(zhí)行a0動作,并保持狀態(tài)不變;
如果發(fā)生e1事件,那么就執(zhí)行a1動作,并將狀態(tài)轉移到s1態(tài);
如果發(fā)生e2事件,那么就執(zhí)行a2動作,并將狀態(tài)轉移到s2態(tài);
在s1狀態(tài),如果發(fā)生e2事件,那么就執(zhí)行a2動作,并將狀態(tài)轉移到s2態(tài);
在s2狀態(tài),如果發(fā)生e0事件,那么就執(zhí)行a0動作,并將狀態(tài)轉移到s0態(tài)。

圖0一個有限狀態(tài)機實例
有限狀態(tài)機不僅能夠用狀態(tài)轉移圖表示,還可以用二維的表格代表。一般將當前狀態(tài)號寫在橫行上,將事件寫在縱列上,如表1所示。其中“--”表示空(不執(zhí)行動作,也不進行狀態(tài)轉移),“an/sn”表示執(zhí)行動作an,同時將下一狀態(tài)設置為sn。下表和圖0表示的含義是完全相同的。
表 ? 圖2狀態(tài)機實例的二維表格表示(動作/下一狀態(tài))

時序邏輯電路的數(shù)學模型是有限狀態(tài)機(FiniteStateMachine)。時序邏輯電路的設計通常用觸發(fā)器來實現(xiàn),狀態(tài)機越復雜,設計過程也越復雜。利用MSI(Medium-ScaleIntegration)也可以實現(xiàn)復雜狀態(tài)機,雖然設計過程比利用觸發(fā)器實現(xiàn)要復雜,但電路相對簡單。在數(shù)字邏輯系統(tǒng)中,計數(shù)器是基本部件之一。集成計數(shù)器芯片類型很多,文中主要討論使用MSI同步計數(shù)器74LS161進行復雜狀態(tài)機的設計。
74LS161功能介紹
74LS161的引腳排列和邏輯功能如圖1所示。各引出端的邏輯功能如下。1腳為清零端/RD,低電平有效。2腳為時鐘脈沖輸入端CP,上升沿有效(CP↑)。3~6腳為數(shù)據(jù)輸入端A0~A3,可預置任意四位二進制數(shù)。7腳和10腳分別為計數(shù)控制端EP和ET,當其中有一腳為低電平時計數(shù)器保持狀態(tài)不變,當均為高電平時為計數(shù)狀態(tài)。9腳為同步并行置數(shù)控制端/LD,低電平有效。11~14腳為數(shù)據(jù)輸出端QQ30~。15腳為進位輸出端RCO,高電平有效。

圖1 ? 四位同步二進制計數(shù)器74LS161
(a)引線排列圖;(b)邏輯功能圖
設計過程
計數(shù)器的狀態(tài)轉換一般為順序轉換,電路也很成熟,例如S1→S2、S4→S5等。在實現(xiàn)模M的計數(shù)器時,一般也是利用連續(xù)狀態(tài)進行順序轉換。但如要實現(xiàn)復雜狀態(tài)機,則需要充分了解計數(shù)器的特性,利用置零端和置數(shù)端,完成非順序狀態(tài)轉換,例如S1→S0、S4→S6等,從而實現(xiàn)復雜狀態(tài)機。下面討論對計數(shù)器74LS161的功能進行擴展,實現(xiàn)非順序狀態(tài)轉換(圖2)。計數(shù)器狀態(tài)與符號的對照見表1.

表1 ?計數(shù)器狀態(tài)與符號的對照表
圖2中,74LS161(0)片和74LS161(1)片的初始狀態(tài)均設為0,兩片在CP脈沖到來時同時開始計數(shù),當(1)片循環(huán)至狀態(tài)S4時,會給(0)片一個置位信號,當?shù)?個CP脈沖到來時,(0)片被置位狀態(tài)S7.之后,一直到第9個CP脈沖到來前,由于(1)片Q2端始終為1,故(0)片始終保持狀態(tài)S7.當?shù)?個CP脈沖到來時,(1)片和(0)片的狀態(tài)分別為S9和S8,此時,(1)片得到(0)片Q3端的置位信號,當下一個CP脈沖到來時,(1)片和(0)片的狀態(tài)分別為S4和S9.在第10個CP脈沖作用下,(1)片和(0)片的狀態(tài)分別為S4和S9.在第11個CP脈沖作用下,(1)片和(0)片的狀態(tài)分別為S4和S7,如此往復。這樣,兩片74LS161(1)片和(0)片并行輸出狀態(tài)變化為01000111→01010111→01100111→01110111→10000111→10011000→01001001→01000111,7種狀態(tài)非順序的轉換。

圖2 ?非順序狀態(tài)轉換電路
如實現(xiàn)非順序更多狀態(tài)的轉換,就需要使用更多MSI芯片,圖3為使用三個74LS161芯片實現(xiàn)的復雜狀態(tài)機。在圖3中,三個芯片的初始狀態(tài)均設為0,并且在CP脈沖到來時同時開始計數(shù),當?shù)?個CP脈沖到來后,實現(xiàn)有效狀態(tài)循環(huán)000001001001→000001001010→000001001011→000001001100→000001001101→000001001110→000001001111→000001000000→000001010001→000001100010→000001110011→000010000100→000110010101→001010100110→001110110111→010011000111→000011011000→000001001001,為17種非順序狀態(tài)的轉換??梢姡瑢崿F(xiàn)越復雜的狀態(tài)機,轉換的非順序狀態(tài)越多,電路越復雜。

圖3 ?復雜狀態(tài)機電路圖
可能出現(xiàn)的問題
在實際的電路中,由于使用多個集成電路,可能會出現(xiàn)置0不可靠的情況,這是由多個觸發(fā)器的負載不同,置0時間也不完全相同引起的,此時需要在以上電路設計中做一些改進。另外,MSI與負載門電路的連接等問題,可以通過增加上拉電阻、接地電阻及電平轉換等措施解決。
電子發(fā)燒友App
















































評論