狀態機的常見問題
阿新 • • 發佈:2020-09-10
狀態機的常見問題
一、狀態機的常見問題
標準的狀態機包括摩爾狀態機和米勒狀態機:摩爾狀態機的輸出只與當前狀態有關,而米勒狀態機則和輸入和狀態都有關。狀態機能夠穩定工作,但是佔用資源過多。在摩爾狀態機中的時鐘偏斜可能會導致狀態轉換時會出現過渡狀態(狀態轉化出現時序問題),米勒狀態機由於輸出非同步,更加容易出現時序問題。
二、選擇狀態機的編碼方式
(1)狀態機的定義
//使用邏輯向量定義狀態 signal current_state: std_logic_vector(1 downto 0); signal next_state: std_logic_vector(1 downto 0); //定義方法二type mystate is (st0,std1,std2,std3); signal current_state,next_state:mystate; //定義方法三 constant std0: std_logic_vector(1 downto 0): ="00"; constant std1: std_logic_vector(1 downto 0): ="01"; constant std2: std_logic_vector(1 downto 0): ="10"; constant std3: std_logic_vector(1 downto 0): ="11"; signal current_state,next_state:std_logic_vectro(1 downto 0);
(2)編碼方式
順序碼:使用二進位制序列
格雷碼:二進位制數每次只改變一位
讀熱碼:為狀態機中每個狀態分配一個觸發器,只有當前設定為有效,其他設定均無效。
三、合理選擇單程序和多程序來設計狀態機
單程序使用的不多,主要是可讀性較差。單程序狀態機一般需要在組合邏輯輸出後加上一級時序邏輯快取。多程序中,雙程序的輸出描述和某個狀態描述混合在一起。三程序中,可以分為組合邏輯輸出和時序邏輯輸出兩種情況。不推薦組合邏輯輸出,容易和狀態轉移的組合邏輯產生毛刺問題。一般使用時序邏輯輸出比較好·。
四、設計工具能夠實現的狀態機
設計狀態機的基本原則:
給輸出分配預設值,放置產生鎖存器;
狀態的狀態邏輯和輸出邏輯分立;
多個狀態需要使用某個計算邏輯,採用呼叫形式。
使用簡單的復位邏輯實現狀態機的上位狀態。
五、小結
狀態機需要考慮狀態轉化和邏輯輸出,分別設計後可以有效提高資料的可讀性和設計的穩定性。具體的操作還是需要在實際的操作中實現。