狀態機是一種抽象的邏輯模型。我們先從一個問題入手談談狀態機的抽象過程。
例:串行輸入一個二進制bit序列,先輸入的爲高位,實時檢測其表示的二進制數是否能被三整除。
我們可以用一個表格來分析一下這個問題:
現在狀態 |
輸入1後的下一個狀態 |
輸入0後的下一個狀態 |
狀態s0 數據a,能被3整除 |
2*a+1,被3除餘1 |
2*a,被3整除 |
狀態s1 數據a,被3除餘1 |
2*a+1,被3整除 |
2*a,被3除餘2 |
狀態s2 數據a,被3除餘2 |
2*a+1,被3除餘2 |
2*a,被3除餘1 |
進一步,我們把它寫成簡介的狀態轉換表:
input 1 | input 0 | |
S0 | S1 | S0 |
S1 | S0 | S2 |
S2 | S2 | S1 |
對應的,繪製狀態轉換圖:
有了這樣一個狀態轉換圖,該問題也就迎刃而解。
狀態機抽象建模,有三個要素需要分析,一是狀態的定義,二是狀態跳轉條件,三是輸入與輸出。
狀態的定義是最爲關鍵的,狀態是控制流程中的節點,問題的複雜度決定了狀態的多少。狀態間具有互斥性,既同一時刻,狀態機僅可能具有一個狀態。
狀態跳轉往往由輸入決定,這反映狀態機響應外部事件。當然,也會有自動跳轉的不穩定太,描述時序上的自動控制。
根據輸出的決定因素,狀態機可分爲兩類,
第一類,若輸出只和狀態有關而與輸入無關,則稱爲Moore狀態機
第二類,輸出不僅和狀態有關而且和輸入有關係,則稱爲Mealy狀態機
上例中,輸出指示序列數據是否能被3整除,僅由狀態決定,因此是Moore機。
從上例中,我們可以看出,使用狀態機模型抽象問題,首先需要用狀態的語言描述問題,定義出有限個不同的狀態,這是抽象解決問題最關鍵的一步;其次,需要分析出狀態的轉換關係,既狀態跳轉條件;最後,將輸出與狀態及輸入關聯起來。
在數字邏輯中,狀態機模型應用的最爲廣泛,從簡單的跑馬燈,到複雜的CPU,核心部分都是狀態機電路。數字電路實現狀態機由組合電路和時序電路兩部分構成。一般來講,時序電路里的寄存器結構鎖存狀態信息,組合電路實現狀態轉換的邏輯判定。