一、什麼是有限狀態機
有限狀態機(簡稱狀態機)相當於乙個控制器,它將一項功能的完成分解為若干步,每一步對應於二進位制的乙個狀態,通過預先設計的順序在各狀態之間進行轉換,狀態轉換的過程就是實現邏輯功能的過程。
二、為什麼使用狀態機
使用狀態機有以下好處:
1、有限狀態機克服了純硬體數字系統順序方式控制不靈活的缺點。
2、設計方案相對固定,結構模式簡單,可定義符號化列舉型別的狀態。
3、狀態機的hdl描述層次分明,結構清晰,易讀易懂。
4、狀態機容易構成效能良好的同步時序邏輯模組。
5、在高速運算和控制方面,狀態機更有其巨大的優勢。基於有限狀態機技術設計的控制器其工作速度大大優於cpu。
6、就可靠性而言,狀態機的優勢也是十分明顯的。基於有限狀態機技術設計的控制器其可靠性也優於cpu
三、狀態機的一般結構
fsm用來解決一般時序邏輯電路問題,包括
1、同步/非同步時序邏輯
2、狀態暫存器
–當前狀態(現態)暫存器
3、組合邏輯電路
–下一狀態(次態)組合邏輯
–輸出組合邏輯
四、常用的狀態機
3、mealy 狀態機example
4、moore 狀態機example
五、狀態機常用編碼
1、二進位制編碼。是用n位二進位制數,表示m個工作狀態,當然必須滿足2n大於等於m。
2、獨熱碼編碼方案。用n位二進位制數表示n個狀態,每一位編碼對應乙個觸發器,狀態機中的每個狀態都由其中乙個觸發器的狀態來表示。
parameter idle = 4』b1000,
start = 4』b0100,
stop = 4』b0010,
clear = 4』b0001;
3、gray-code。每次狀態跳轉只有1bit發生變化。
二進位制編碼、gray-code 編碼使用最少的觸發器,較多的組合邏輯。而one-hot編碼反之。由於cpld 更多的提供組合邏輯資源,而fpga 更多的提供觸發器資源,所以cpld多使用gray-code,而fpga多使用one-hot 編碼。另一方面,對於小型設計使用gray-code和binary 編碼更有效,而大型狀態機使用one-hot 更高效。
六、fsm 描述風格
用verilog 語言描述有限狀態機可使用多種風格,不同的風格會極大地影響電路效能。通常有3種描述方式:一段式、二段式和三段式。
一段式fsm把組合邏輯和時序邏輯用同乙個時序always塊描述,其輸出是暫存器輸出,**刺。但是這種方式會產生多餘的觸發器,**難於修改和除錯,應該盡量避免使用。
二段式fsm大多用於描述mealy狀態機和組合輸出的moore狀態機,時序always塊描述當前狀態邏輯,組合邏輯always塊描述次態邏輯並給輸出賦值。這種方式結構清晰,綜合後的面積和時間效能好。但組合邏輯輸出往往會有毛刺,當輸出向量作為時鐘訊號時,這些毛刺會對電路產生致命的影響。
三段式fsm大多用於同步mealy狀態機,兩個時序always塊分別用來描述現態邏輯和對輸出賦值,組合always塊用於產生下一狀態。這種方式的狀態機也是暫存器輸出,輸出**刺,並且**比單always塊清晰易讀,但是面積大於二段式fsm。隨著晶元資源和速度的提高,目前這種方式得到了廣泛應用,但資源有限的話推薦二段式fsm。
狀態機設計是fpga設計中常用的設計,希望對fpga初學者有所幫助。
verilog 三段式狀態機的技巧
三段式 多,但是有時鐘同步,延時少,組合邏輯跟時序邏輯分開並行出錯少。1 同步狀態轉移 2 當前狀態判斷接下來的狀態 3 動作輸出 如果程式複雜可以不止三個always always 後常接case case必須有default 對於fpga常用 狀態數較少,獨熱碼編碼 或者格雷碼 獨熱碼編碼 pa...
Moor Mealy FMS及三段式狀態機寫法
示例有限狀態機 finite state machine,fsm 包含幾個要素 輸入 狀態 狀態轉移條件 輸出。這裡討論的兩種狀態機區別在於輸出的產生 二段式 有兩個always block 狀態切換用時序邏輯描述 次態判斷和輸出用組合邏輯描述。這種寫法條理清晰,但輸出由組合邏輯描述因此可能存在競爭...
verilog三段式狀態機伸手就拿湊合用版
最近在做fpga邏輯實現資料幀頭拼接分包時剛接觸狀態機,隨便記一點目前的入門理解。一段二段不用就沒管了,直接無腦三段式。首先,三段式狀態機是因為 從外部看上去分成三塊,分別描述狀態機的切換狀態時間,切換狀態條件,不同狀態下的操作。直接上模板,管你聽沒聽懂,套就完了!step1 變數定義 如下面例子中...