FPGA中的狀態機

FPGA中的狀態機


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

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

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

FPGA中的狀態機

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

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

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

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

FPGA中的狀態機

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


分享到:


相關文章: