## 壹、 狀態機介紹 ### 一、Moore Machine 在 Moore Machine 中,每個狀態有一個特定的輸出。這種輸出完全取決於當前的狀態,與當前的輸入無關。因此,只要我們知道了機器的狀態,我們就可以確定它的輸出。這使得 Moore Machine 非常容易預測和控制。  Moore Machine 的一個關鍵特性是其穩定性。由於輸出只依賴於當前狀態,因此即使輸入發生變化,只要狀態沒有改變,輸出也將保持不變。這避免了在快速變化的輸入情況下可能出現的不確定性或不穩定性。 然而,Moore Machine 也有其局限性。其中一個是它可能需要更多的狀態來表示相同的行為。例如,如果某個行為取決於前一個輸入,一個 Moore Machine 可能需要為每種可能的輸入創建一個新的狀態,而一個依賴於當前輸入的 Mealy Machine 則不需要。 ### 二、Mealy Machine 相對於 Moore Machine,Mealy Machine 的輸出不僅依賴於當前的內部狀 態,也取決於當前的輸入。  這種結構讓 Mealy Machine 在某些情況下可以使用較少的狀態就能完成相同的功能,因為它可以直接參考當前的輸入來決定輸出,而不需要增加額外的狀態來記憶過去的輸入。結果就是可能有更少的狀態數量。 然而,Mealy Machine 也有其挑戰。由於輸出可能在每個時鐘週期的任何時間改變(取決於輸入的變化),輸出可能會出現所謂的"抖動"。這種情況在需要穩定輸出的系統中可能會導致問題。 儘管有這些考慮因素,Mealy Machine 仍然是現代數位系統設計中的一個強大工具。它們可以讓設計師以更少的狀態實現同樣的功能,這可以節省硬體資源並簡化設計。 ## 貳、Moore Machine ### 一、狀態圖  ### 二、狀態表 |當狀狀態 |輸入 |下一個狀態|當前輸出 | | - | - | - | - | |IDLE (00) |0 |IDLE (00) |0 | |IDLE (00) |1 |S0 (01) |0 | |S0 (01) |0 |IDLE (00) |0 | |S0 (01) |1 |S1 (10) |0 | |S1 (10) |0 |IDLE (00) |1 | |S1 (10) |1 |S1 (10) |1 | ## 參、Moore Machine 結果分析 ### 一、當前狀態 **00**,下一個狀態 **00** 當前狀態為 0 時,因為 data\_i 為 0 所以不會轉換狀態  ### 二、當前狀態 **00**,下一個狀態 **01** 當前狀態為 0 時,因為 data\_i 為 1 所以將狀態轉換成 1,而輸出維持 0  ### 三、當前狀態 **01**,下一個狀態 **00** 當前狀態為 01 時,因為 data\_i 為 0,所以將狀態轉換成 00  ### 四、當前狀態 **01**,下一個狀態 **10** 當前狀態為 01 時,因為 data\_i 為 1 所以將狀態轉換成 10,當狀態轉換成 10 後,輸出 data\_o 為 1,結果正確  ### 五、當前狀態 **10**,下一個狀態 **00** 當前狀態為 10 時,因為 data\_i 為 0 所以將狀態轉換成 00,結果正確  ### 六、當前狀態 **10**,下一個狀態 **10** 當前狀態為 10 時,因為 data\_i 為 1 所以不會轉換狀態,結果正確  ### 七、合成後面積  ## 肆、Mealy Machine 狀態 ### 一、狀態圖  ### 二、狀態表 |當前狀態** |輸入** |下一個狀態|當前輸出** | | - | - | - | - | |IDLE (0) |0 |IDLE (0) |0 | |IDLE (0) |1 |S0 (1) |0 | |S0 (1) |0 |IDLE (0) |0 | |S0 (1) |1 |S0 (1) |1 | ## 伍、Mealy Machine 結果分析 ### 一、當前狀態為 **0**,輸入為 **0**,下一個狀態為 **0** 當前狀態為 0,因為 data\_i 為 0,所以不會轉換狀態,結果正確  ### 二、當前狀態為 **0**,輸入為 **1**,下一個狀態為 **1** 當前狀態為 0,因為 data\_i 為 1,所以下一個狀態為 1,結果正確  ### 三、當前狀態為 **1**,輸入為 **0**,下一個狀態為 **0** 當前狀態為 1,因為 data\_i 為 0,所以下一個狀態為 0,結果正確  ### 四、當前狀態為 **1**,輸入為 **1**,下一個狀態為 **1** 當前狀態為 1,因為 data\_i 為 1,所以不會轉換狀態,結果正確  ### 五、合成後面積  ## 陸、**Moore Machine** 與 **Mealy Machine** 比較 ### 一、波型比較 因為 Mealy Machine 的輸出會由當前狀態與輸入共同決定,所以我們可以知道他可以相較於 Moore Machine 有著更少的狀態,同時又可以用更少的 clock 週期來輸出結果,為了驗證結果是否符合預期,接著用波型來佐證。 從波型上來看,可以很明顯看到因為 Mealy Machine 比 Moore Machine 還要少一個狀態,所以輸出可以提前 Moore Machine 一個 clock 週期,因此驗證成功。  ### 二、優缺點分析 ||Moore Machine |Mealy Machine | | :- | - | - | |優點 |<p>1. 設計簡單,易於理解和實現 </p><p>2. 輸出只依賴於當前狀態,使 其在同步系統中工作良好 </p><p>3. 只有狀態會決定輸出,對於 某些應用更具預測性。 </p>|<p>1. 所需要的 clock 數量可能較少 可以節省硬體資</p><p>2.可以節省硬體資源。</p><p>3. 能夠實現更複雜的行為,因為 輸出依賴於狀態和輸入。 </p>| |缺點 |<p>1. 需要更多的狀態來實現相同的功能,會增加硬體成本</p><p>2. 週期可能較多,因為輸出必 須等到下一個時鐘週期。 </p>|<p>1. 設計可能更複雜,因為輸出取 決於狀態和輸入。 </p><p>2. 因為輸入也會決定輸出,會造 成電路的不穩定。 </p>| ## 柒、結論 Moore Machine 的主要優點在於設計相對簡單以及和可預測性。由於輸出只依賴於當前狀態,所以在設計和理解方面相對較容易。另外,Moore Machine 的輸出只在狀態變化時變化,這使得它們在同步系統中可以更加穩定。然而,這種方法的缺點是可能需要更多的狀態來實現特定的功能,導致硬體成本的上升,並且由於輸出必須等待下一個時鐘週期,因此會需要較多的 clock 週期。 另一方面,Mealy Machine 可以用更短的 clcok 週期輸出結果,因為輸出可以在輸入變化時立即變化,且由於狀態較少,可以節省硬體資源,同時因為輸出依賴於狀態和輸入,所以可以實現更複雜的行為,不過缺點則是會增加電路的不穩定性。 以上兩種狀態機各有優缺點,選擇使用哪一種狀態機需要根據實際上的設計需求。例如需要快速反應或最小化硬體資源,那麼 Mealy Machine 可能是更好的選擇。反之如果需要電路更加穩定,或減少設計的複雜性,那麼 Moore Machine 可能是更好的選擇。因此如何選擇一個適合的狀態機來實現電路是一件非常重要的事。 ## 捌、參考資料 [Untitled Document (saihs.edu.tw) ](http://content.saihs.edu.tw/chapter_htm/chapter9/9c/c_03.htm) [小狐狸事務所: 邏輯設計筆記序向篇 : Finite State Machine (有限狀態機) (yhhuang1966.blogspot.com) ](http://yhhuang1966.blogspot.com/2019/06/finite-state-machine.html) [(原創) 有限狀態機 FSM coding style 整理 (SOC) (Verilog) - 真 OO 无双 - 博客园 (cnblogs.com) ](https://www.cnblogs.com/oomusou/archive/2011/06/05/fsm_coding_style.html) [FPGA 學習之有限狀態機講解,什麼是 Moore 與 Mealy 狀態機? - 每日頭 條 (kknews.cc) ](https://kknews.cc/zh-tw/code/9gz88zb.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up