狀態機的常見問題

2022-09-02 19:15:09 字數 1242 閱讀 6427

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

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

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

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

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

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

設計狀態機的基本原則:

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

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

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

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

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

狀態機 狀態機0

近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...

python 狀態機 Python 狀態機

class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...

狀態機小記

工作上有個功能模組用到了類似狀態機的東東,於是上網科普了一番。狀態機是由一系列輸入驅動,然後系統由其中一種狀態轉換為另一種狀態並產生某種輸出,這樣子的乙個系統叫做狀態機。狀態機分為兩種,一種是輸出只和系統狀態有關,叫做摩爾狀態機,另一種是輸出和輸入以及系統狀態都相關,叫做公尺莉狀態機。有關輸入 狀態...