天天看點

三段式狀态機設計狀态機設計需滿足的幾個要求:

狀态機設計需滿足的幾個要求:

1. 三段式要求

有限狀态機采用三段式風格,即三個always塊描述狀态機.

第一個組合邏輯always塊用來描述下一狀态的轉移(next state logic)  

     第二個時序邏輯always塊用來描述目前狀态.(current state) 寄存器的複位和變化.       

     第三個always塊用來描述輸出.(output logic)  組合or時序 均可.       
           

優點:書寫清晰,組合與時序分離設計,易于綜合,且在一定程度上避免了狀态轉移和輸出等組合邏輯中的毛刺.

2. 狀态機狀态信号命名方法

目前狀态命名為current_state,下一狀态命名為next_state.
           

主要目的是為了提高狀态機的可讀性,為分析邏輯功 能提供友善,也可以是cstate or nstate.

3.編碼方式

準則:使用參數指派狀态
  兩種常用的編碼方式:二進制編碼及獨熱碼編碼
  二進制編碼占用的位數少,但其狀态跳變需要額外的譯碼電路,這樣的編碼方式會對狀态機的運作速度有所限制,可以滿足一般的設計要求。
  獨熱碼編碼,以n bit表示n個 狀态,這樣編碼的譯碼部分可以做到最簡,工作頻率可以做到較高,相對于二進制而言,需要更多的位。
           

建議使用的獨熱碼,電路的速度和可靠性有顯著的提高,但注意:存在多餘的狀态,就有一些不可到達的狀态,需要在case語句的最後,加default分支,以確定能回到IDLE狀态。

4.狀态機設計的注意事項

設計的狀态跳轉條件是否充分
    狀态跳轉條件都不滿足的情況下,狀态機如何工作
    未定義的狀态應如何設計
    狀态機跳轉設計中,是否受外部信号的影響
           

5.三段式的寫法

組合邏輯always塊:(負責狀态的跳轉)、

  always@(current_state or else signal)(敏感清單中存放對狀态跳轉有影響的信号)

     begin
     next_state=x;    (初始化,使得系統複位進入正确的狀态)

     case(current_state)
     s1: if(.....)
 next_state=s2
     .
     .
     .......
     endcase
     end

    時序邏輯always塊:
        always@(posedge clk or negedge rst)
         if(!rst)
         current_state<=IDLE;
         else
         current_state<=next_state;

  描述輸出的always塊可以是組合的也可以是時序的;
           

6.典型的序列檢測狀态機寫法:

三段式狀态機設計狀态機設計需滿足的幾個要求:

IMG_0141.JPG

作者:喜歡蘿莉的逗逼青年

連結:https://www.jianshu.com/p/5eee434ab24d

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

繼續閱讀