1. 程式人生 > 實用技巧 >狀態機的常見問題

狀態機的常見問題

狀態機的常見問題

一、狀態機的常見問題

標準的狀態機包括摩爾狀態機和米勒狀態機:摩爾狀態機的輸出只與當前狀態有關,而米勒狀態機則和輸入和狀態都有關。狀態機能夠穩定工作,但是佔用資源過多。在摩爾狀態機中的時鐘偏斜可能會導致狀態轉換時會出現過渡狀態(狀態轉化出現時序問題),米勒狀態機由於輸出非同步,更加容易出現時序問題。

二、選擇狀態機的編碼方式

(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)編碼方式

順序碼:使用二進位制序列

格雷碼:二進位制數每次只改變一位

讀熱碼:為狀態機中每個狀態分配一個觸發器,只有當前設定為有效,其他設定均無效。

三、合理選擇單程序和多程序來設計狀態機

單程序使用的不多,主要是可讀性較差。單程序狀態機一般需要在組合邏輯輸出後加上一級時序邏輯快取。多程序中,雙程序的輸出描述和某個狀態描述混合在一起。三程序中,可以分為組合邏輯輸出和時序邏輯輸出兩種情況。不推薦組合邏輯輸出,容易和狀態轉移的組合邏輯產生毛刺問題。一般使用時序邏輯輸出比較好·。

四、設計工具能夠實現的狀態機

設計狀態機的基本原則:

給輸出分配預設值,放置產生鎖存器;

狀態的狀態邏輯和輸出邏輯分立;

多個狀態需要使用某個計算邏輯,採用呼叫形式。

使用簡單的復位邏輯實現狀態機的上位狀態。

五、小結

狀態機需要考慮狀態轉化和邏輯輸出,分別設計後可以有效提高資料的可讀性和設計的穩定性。具體的操作還是需要在實際的操作中實現。