狀態機的常見問題


狀態機的常見問題

一、狀態機的常見問題

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

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

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

順序碼:使用二進制序列

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

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

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

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

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

設計狀態機的基本原則:

給輸出分配默認值,放置產生鎖存器;

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

多個狀態需要使用某個計算邏輯,采用調用形式。

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

五、小結

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


免責聲明!

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



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