2.8 FSM之Moore和Mealy part1
看過上幾篇文章的那個例子,其實在學術上被分類Moore(摩爾,)形FSM。還有一種就叫做Mealy形FSM。如果對計算機理論感興趣的話兩類FSM的數學定義請參照Wiki這里就不拿出來了~
大家可以看到,上一個路燈的例子中,輸出僅僅依賴于當前狀態。這也就是Moore機的特征而所謂Mealy形FSM就是輸出不僅僅依賴于當前狀態,還依賴于當前的輸入。(為此Mealy機也被用作密碼機)具體什么意思呢,看例子。
?需求:
我們想設計一個特征字符識別的機器。要求是識別特征字符串 1101 。也就是說如果在一大串字符中連續從左至右出現1101的話就輸出1,如果沒有的話就輸出0.為了方便,理想的規定,每個時鐘周期,該機器檢測1個bit。
實現:
我們用Moore和Mealy兩種方式來實現。首先我們來看我們熟悉的Moore吧。
1.這里 “狀態” 大家會感覺到有些抽象,是的。不過其實狀態的定義和上一個例子是一樣的。
我們的1101就相當于上個例子里的交通燈感應器。輸入1進入某個狀態,輸入0進入下一個狀態。。。等等。輸出當然就是0或1咯。這里直接給出狀態圖:
。看著有點懵?別怕,首先要試著用已經學過的知識去解釋它。如果實在不行的話看我的分析。(提醒:看分析的人能學到這部分的知識,但是不看分析經過自己努力的人會培養自己舉一反三的能力和附帶的知識,而不看分析一下就明白的人就是智商比較高的。大家屬于哪一類~)
=================================(天才分割線)=======================================
分析:這里我們用了5個狀態。而1101這個字符串就像上面說的,和路燈感應器一樣,把FSM放入下一個狀態。首先我們Reset也就是輸出為0(圓圈中的數字代表輸出)。之后我們可能碰到0或1兩種字符。如果當前檢測到1,則FSM從S0進入S1狀態。如果是0的話返回S0.為神馬返回S0而不是定義一個新的S2狀態?因為Reset狀態根本就不可能檢測到完整的1101字符串也就是下一個無論輸入什么字符都不會進入檢測1101的狀態(例如 當前是0,下一個字符可能是0或1,也就是00或01,而這兩種組合都不是1101的開頭字符,注意需求中的字符順序!)。同理,繼續分析下去,當機器幸運的運行到S4狀態的時候輸出為1也就是機器找到了一個1101字符串,而機器繼續運行下去我們下一個字符當然是1或0,若是0的話自然返回Reset的S0狀態,周而復始。那么當輸入為1的時候為什么跳入S2?-----和剛剛說過的一樣,進入S4狀態之前的輸入必須為1,而進入S4狀態之后的輸入如果為1的話,不就正好是1101的前兩個bit么(11)。而如果進入S2狀態之后,下一個輸入為0的話我們就有了連續的前三位110,而輸入一次1的話我們有111,兩次1的話我們有1111,n次就有n個1,但是我們總取后兩個1(換句話說總取第n-1和第n位的1),我們總處在檢測到1101的前兩位的狀態也就是一直處于S2狀態。 剩下的自己做練習吧~。
2.下一個part我們來設計這個Moore機
轉載于:https://blog.51cto.com/physic/1332170
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的2.8 FSM之Moore和Mealy part1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象实验一(类与对象)
- 下一篇: SQL的优化和注意事项