淺談FPGA有限狀態機



狀態機幾乎可以實現一切時序電路。

有限狀態機(FiniteStateMachine, FSM),根據狀態機的輸出是否與輸入有關,可分為Moore型狀態機和Mealy型狀態機。Moore型狀態機輸出僅僅與現態有關和Mealy型狀態機不僅與現態有關,也與輸入有關,所以會受到輸入的干擾,可能會產生毛刺(Glith)的現象,所以我們通常使用的是Moore型狀態機。

狀態機的編碼,二進制編碼(Binary),格雷碼編碼(Gray-code),獨熱碼(One-hot)。不同的編碼方式是防止在狀態轉移中發生突變,使得狀態轉移更為穩定,系統更加可靠,但是通常情況下我們直接采用的是二進制進行編碼,除非系統對穩定性和狀態編碼有特殊要求。

狀態機的描述,一段式、二段式、三段式。

一段式狀態機,將組合邏輯和時序邏輯混合在一起,這樣的寫法對於邏輯簡單的狀態機來說還是可以使用的,但是對於復雜的邏輯就不推薦了,如果狀態復雜也會容易出錯,而且一個always塊中信號太多也不利於維護和修改。

兩段式狀態機也是一種常用的寫法,它把組合邏輯和時序邏輯區分出來,第一段負責狀態的轉移,第二段是組合邏輯賦值,但是這種寫法的缺點是,組合邏輯較容易產生毛刺等常見問題。

三段式狀態機就可以較好的解決一段二段的不足,我也是比較推薦的寫法,第一段采用時序邏輯負責狀態轉移,第二段組合邏輯負責數據賦值,第三段時序邏輯負責輸出,代碼層次清晰,容易維護,時序邏輯的輸出解決了兩段式寫法中組合邏輯的毛刺問題。但是資源消耗會多一些,此外,三段式從輸入到輸出會比一段式和二段式延遲一個時鍾周期。在書寫狀態機的時候,一定要事先設計好狀態轉移圖,將所有的狀態都考慮到,避免狀態進入死循環,或者跳到偏離態。


版權所有權歸卿萃科技 杭州FPGA事業部,轉載請注明出處

作者:杭州卿萃科技ALIFPGA

原文地址:杭州卿萃科技FPGA極客空間 微信公眾號


掃描二維碼關注杭州卿萃科技FPGA極客空間


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM