如何設計一個穩定可靠的狀態機

2021-01-07 電子產品世界

隨著大規模和超大規模FPGA/CPLD器件的誕生和發展,以HDL(硬體描述語言)為工具、FPGA/CPLD器件為載體的EDA技術的應用越來越廣泛.從小型電子系統到大規模SOC(Systemonachip)設計,已經無處不在.在FPGA/CPLD設計中,狀態機是最典型、應用最廣泛的時序電路模塊,如何設計一個穩定可靠的狀態機是我們必須面對的問題.

本文引用地址:http://www.eepw.com.cn/article/148786.htm

  1、狀態機的特點和常見問題

  標準狀態機分為摩爾(Moore)狀態機和米立(Mealy)狀態機兩類.Moore狀態機的輸出僅與當前狀態值有關,且只在時鐘邊沿到來時才會有狀態變化.Mealy狀態機的輸出不僅與當前狀態值有關,而且與當前輸入值有關,這一特點使其控制和輸出更加靈活,但同時也增加了設計複雜程度.其原理如圖1所示.

  


  根據圖1所示,很容易理解狀態機的結構.但是為什麼要使用狀態機而不使用一般時序電路呢?這是因為它具有一些一般時序電路無法比擬的優點.

  用VHDL描述的狀態機結構分明,易讀,易懂,易排錯;

  相對其它時序電路而言,狀態機更加穩定,運行模式類似於CPU,易於實現順序控制等.

  用VHDL語言描述狀態機屬於一種高層次建模,結果經常出現一些出乎設計者意外的情況:

  在兩個狀態轉換時,出現過渡狀態.

  在運行過程中,進入非法狀態.

  在一種器件上綜合出理想結果,移植到另一器件上時,不能得到與之相符的結果.

  狀態機能夠穩定工作,但佔用邏輯資源過多.

  在針對FPGA器件綜合時,這種情況出現的可能性更大.我們必須慎重設計狀態機,分析狀態機內在結構,在Moore狀態機中輸出信號是當前狀態值的解碼,當狀態寄存器的狀態值穩定時,輸出也隨之穩定了.經綜合器綜合後一般生成以觸發器為核心的狀態寄存電路,其穩定性由此決定.如果CLOCK信號的上升沿到達各觸發器的時間嚴格一致的話,狀態值也會嚴格按照設計要求在規定的狀態值之間轉換.然而這只是一種理想情況,實際CPLD/FPGA器件一般無法滿足這種苛刻的時序要求,特別是在布線後這些觸發器相距較遠時,CLOCK到達各觸發器的延時往往有一些差異.這種差異將直接導致狀態機在狀態轉換時產生過渡狀態,當這種延時進一步加大時,將有可能導致狀態機進入非法狀態.這就是Moore狀態機的失效機理.對於Mealy狀態機而言,由於其任何時刻的輸出與輸入有關,這種情況就更常見了.

  2 狀態機設計方案比較

  2.1 採用枚舉數據類型定義狀態值

  在設計中定義狀態機的狀態值為枚舉數據類型,綜合器一般把它表示為二進位數的序列,綜合後生成以觸發器為核心的狀態寄存電路,寄存器用量會減少,其綜合效率和電路速度將會在一定程度上得到提高.

  例1 定義狀態值為枚舉類型的狀態機VHDL程序.

  library ieee;

  use ieee.std_logic_1164 all;

  entity example is

  port(clk:in std_logic;

  mach_input:in std_logic;

  mach_outputs:out std_logic_vector(0 to 1));

  end example;

  architecture behave of example is

  type states is(st0,st1,st2,st3); --定義states為枚舉類型

  signal current_state,next_state:states;

  begin

  state_change:process(clk) --狀態改變進程

  begin

相關焦點

  • 如何在FPGA中實現狀態機
    FPGA常常用於執行基於序列和控制的行動,比如實現一個簡單的通信協議。對於設計人員來說,滿足這些行動和序列要求的最佳方法則是使用狀態機。狀 態機是在數量有限的狀態之間進行轉換的邏輯結構。一個狀態機在某個特定的時間點只處於一種狀態。
  • LabVIEW設計模型——狀態機
    狀態機是在工程應用中使用最多的設計模型。使用狀態機,我們可以很容易的實現程序流程圖中的判斷、分支。 狀態機是由一系列的狀態構成的,其中包括一個「初始化」狀態,和一個「停止」狀態。
  • 基於UART以狀態機的形式實現LIN通信
    LIN協議分析和狀態機的設計有限狀態機是由一組狀態、一個起始狀態、輸入以及將輸入與當前狀態轉換為下一個狀態的轉換函數所組成,它是一個特殊的有向圖,包括一些狀態節點和連接這些狀態的有向弧。對特定的狀態機而言,首先要建立一些有效的狀態,然後設計相應的算法完成狀態的轉換。
  • 硬體描述語言Verilog HDL設計進階之: 典型實例-狀態機應用
    本文引用地址:http://www.eepw.com.cn/article/201706/348829.htm4.6典型實例6:狀態機應用4.6.1實例的內容及目標1.實例的主要內容狀態機設計是HDL設計裡面的精華,幾乎所有的設計裡面都或多或少地使用了狀態機的思想。
  • 利用74LS161實現複雜狀態機
    > 有限狀態機FSM思想廣泛應用於硬體控制電路設計,也是軟體上常用的一種處理方法(軟體上稱為FMM有限消息機)。它把複雜的控制邏輯分解成有限個穩定狀態,在每個狀態上判斷事件,變連續處理為離散數字處理,符合計算機的工作特點。 有限狀態機的工作原理如圖所示,發生事件(event)後,根據當前狀態(cur_state),決定執行的動作(action),並設置下一個狀態號(nxt_state)。
  • 單片機之狀態機淺談
    說到單片機編程,不得不說到狀態機,狀態機做為軟體編程的主要架構已經在各種語言中應用,當然包括C語言,在一個思路清晰而且高效的程序中,必然有狀態機的身影浮現。靈活的應用狀態機不僅是程序更高效,而且可讀性和擴展性也很好。狀態無處不在,狀態中有狀態,只要掌握了這種思維,讓它成為您編程中的一種習慣,相信您會受益匪淺。
  • LabVIEW程序設計模式(二)—基本狀態機模式
    狀態機是一種最為經典的程序設計模式,在LabVIEW 7.1(含)之前它幾乎統治了大部分的LabVIEW主程序。最基本的狀態機結構如圖 1所示。狀態是狀態機運行的經脈,在開始使用狀態機模式撰寫程序時需要將應用分為若干個狀態。
  • 運用狀態機提高嵌入式軟體效率
    有限狀態機中有許多變量,例如,與動作(actions)轉換(Mealy機)或狀態(摩爾機)關聯的動作,多重起始狀態,基於沒有輸入符號的轉換或指定符號和狀態(非定有限狀態機)的多個轉換、指派給接收狀態(識別者)的一個或多個狀態。有限狀態機多應用於硬體時序電路設計。 有限狀態機也可以應用到嵌入式軟體設計中。在進行嵌入式軟體設計時,通常的做法是按照信息流程進行順序編程。
  • 零基礎學FPGA(七)淺談狀態機
    今天我們來寫狀態機。本文引用地址:http://www.eepw.com.cn/article/267960.htm  關於狀態機呢,想必大家應該都接觸過,通俗的講就是數電裡我們學的狀態轉換圖。
  • 狀態機重新優化業務流程
    有限狀態機(FSM:finite-state machine )或有限狀態機(FSA:finite-state automaton)、有限自動機或簡單的狀態機是計算的數學模型。它是一個抽象的機器,在任何給定的時間內都可以處於有限個狀態中的一個。FSM可以根據一些外部輸入從一個狀態更改為另一個狀態;從一個狀態更改為另一個狀態稱為轉換。
  • 由淺入深,讓你全面了解狀態機模式的應用原理
    一、狀態機基本知識一般狀態機由三個元素組成:狀態、事件、反應。而反應在boost startchart包括轉移、動作等。一個狀態可以對應一個或者多個反應。當前狀態收到事件後,執行反應,然後轉變為新的狀態。該流程會使用下圖的方式來表示。狀態機通常都需要有歷史狀態,可以用來恢復,它分為淺歷史和深歷史兩類。
  • 什麼是狀態機編程?一種耐用的編程方法(附代碼)
    狀態機編程理解什麼是狀態機?以作業系統中的任務調度為例來說明什麼是狀態機。在作業系統的任務調度中經常見到狀態機,其作用是根據任務的狀態和當前資源條件來改變任務的狀態。作業系統任務狀態狀態機編程示例以下代碼是一個狀態機編程的示例:
  • 不懂狀態機怎麼能讀懂中間件的LifeCycle?
    一個簡單的狀態機在Java技術棧中,很多中間件使用了LifeCycle設計模式組織項目結構,如Tomcat,Jetty,Spring等。要搞清楚LifeCycle模式首先需要能看懂狀態機。事實上,狀態機就是當滿足某種條件時,改變為指定狀態,也是很好理解的。
  • 如何設計一個可生產製造,作用安全可靠的pcb線路板
    打開APP 如何設計一個可生產製造,作用安全可靠的pcb線路板 YeLongCu 發表於 2020-11-27 11:52:55
  • 有限狀態機的FPGA設計
    有限狀態機是一種常見的電路,由於時序電路和組合電路組成,設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。Mealy狀態機的狀態轉變不僅和當前狀態有關,而且和各輸入信號有關;Moore狀態機的轉變只和當前狀態有關。
  • 初學者對有限狀態機(FSM)的設計的認識
    設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。(Mealy型:狀態的轉變不僅和當前狀態有關,而且跟各輸入信號有關;Moore型:狀態的轉變只和當前狀態有關)。從實現電路功能來講,任何一種都可以實現同樣的功能。
  • FPGA工程師:如何在FPGA中實現狀態機?
    FPGA常常用於執行基於序列和控制的行動,比如實現一個簡單的通信協議。對於設計人員來說,滿足這些行動和序列要求的最佳方法則是使用狀態機。狀態機是在數量有限的狀態之間進行轉換的邏輯結構。一個狀態機在某個特定的時間點只處於一種狀態。但在一系列觸發器的觸發下,將在不同狀態間進行轉換。
  • Profibus-DP主站通信平臺的設計方案
    一個DP系統既可以是一個單主站結構,也可以是一個多主站結構,本文涉及的是多主站結構。多主站結構使用混合的總線訪問控制機制,主站之間採取令牌控制方式;令牌在主站之間傳遞,擁有令牌的主站擁有總線訪問控制權;主站與從站之間採取主從的控制方式。
  • 如何繪畫狀態機來描述業務的變化
    因為技術會反覆的問,有幾種狀態啊,怎麼轉移啊,啥時候轉移啊,什麼時候截止狀態啊,系統根據什麼條件判斷狀態啊……一、為什麼需要使用狀態機?講個親身的例子,去年我設計電商系統的訂單模塊,就犯過類似的問題。一開始參照淘寶的訂單系統,將訂單設計為待付款、已付款、已發貨、已完成,已關閉等5個狀態。上線後很快就發現有問題。
  • 什麼是「狀態機」?為什麼大家都說萬能的狀態機?
    在第一次聽到狀態機這個詞的時候,相信我們都有相同的疑問:什麼是狀態機?用來幹嘛的?我們先來看一下有關狀態機的定義:「狀態機由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。