零基礎學FPGA(七)淺談狀態機

2021-01-07 電子產品世界

  今天我們來寫狀態機。

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

  關於狀態機呢,想必大家應該都接觸過,通俗的講就是數電裡我們學的狀態轉換圖。狀態機分為兩中類型,一種叫Mealy型,一種叫Moore型。前者就是說時序邏輯的輸出不僅取決於當前的狀態,還取決於輸入,而後者就是時序邏輯的輸出僅僅取決於當前的狀態。下面兩個圖分別表示兩種不同的狀態機。

  

 

  

 

  下面我們就通過代碼來寫一下狀態機,以下面的狀態轉換圖為例

  

 

  首先,是一種典型的狀態機寫法,這種寫法我們稱為一段時狀態機,用於一些簡單的設計是可以的,但如果是複雜的狀態機,不建議大家用這種寫法。

  //***********************************************************

  //可綜合的狀態機設計的典型方法

  //實現典型的狀態機設計

  //**********************************************

  module fsm (clk,rst_n,A,k1,k2,State);

  input clk;

  input rst_n;

  input A;

  output k1,k2;

  output [1:0] State;

  reg k1;

  reg k2;

  reg [1:0] State; //當前狀態寄存器

  parameter Idle = 2'b00,

  Start = 2'b01,

  Stop = 2'b10,

  Clear = 2'b11; //編碼 ,注意,只有在最後一句用分號,其他地方用逗號

  always @(posedge clk or negedge rst_n)

  if(!rst_n)

  begin

  State <= Idle;

  k1 <=1'b0;

  k2 <=1'b0;

  end

  else case (State) //狀態判斷與組合邏輯賦值

  Idle :if(A) begin

  State <= Start;

  k1 <= 0;

  end

  else begin

  State <= Idle;

  k1 <= 0;

  k2 <= 0;

  end

  Start :if(!A) State <= Stop;

  else State <= Start;

  Stop :if(A) begin

  State <=Clear;

  k2 <= 1;

  end

  else State <= Stop;

  Clear :if(!A) begin

  State <= Clear;

  k2 <= 0;

  k1 <= 1;

  end

  else State <= Clear;

  default : State <= 2'bxx; //告訴綜合器 case語句已經指定了所有狀態,這樣綜合器就會刪除不需要的解碼電路,使生成的電路簡單

  endcase

  endmodule

fpga相關文章:fpga是什麼


相關焦點

  • 如何在FPGA中實現狀態機
    對於設計人員來說,滿足這些行動和序列要求的最佳方法則是使用狀態機。狀 態機是在數量有限的狀態之間進行轉換的邏輯結構。一個狀態機在某個特定的時間點只處於一種狀態。但在一系列觸發器的觸發下,將在不同狀態間進行轉換。本文引用地址:http://www.eepw.com.cn/article/266770.htm  理論上講,狀態機可以分為Moore狀態機和Mealy狀態機兩大類。
  • 單片機之狀態機淺談
    說到單片機編程,不得不說到狀態機,狀態機做為軟體編程的主要架構已經在各種語言中應用,當然包括C語言,在一個思路清晰而且高效的程序中,必然有狀態機的身影浮現。靈活的應用狀態機不僅是程序更高效,而且可讀性和擴展性也很好。狀態無處不在,狀態中有狀態,只要掌握了這種思維,讓它成為您編程中的一種習慣,相信您會受益匪淺。
  • 基於FPGA與有限狀態機的高精度測角系統的設計與實
    本文通過有限狀態機FSM,對原始信號進行四倍頻採樣控制,狀態機外加的一路高速同步時鐘信號作為狀態機的驅動時鐘信號,從而有效濾掉抖動幹擾。有限狀態機FSM(Finite State Machine)是一種時序電路,是數字系統中實現高效率可靠性邏輯控制的重要方法。標準狀態機可分為摩爾型Moore和米利型Mealy兩種類型。
  • 一種近距雷達目標檢測信號處理的FPGA實現
    對於一個複雜的數字系統,往往要用狀態機嵌套來完成系統信號流向和狀態的控制、轉換,使系統按照預先設定的邏輯流程工作。近距雷達目標檢測信號處理機頂層由主狀態機控制,主狀態機響應雷達系統的指令,完成對各個分狀態機的調度;數據採集預處理、FFT、坐標系轉換和CFAR檢測這四個分狀態機又分別控制各自的下層子狀態機動作,從而完成數據的採集、模數轉換、時域預處理、頻譜分析、坐標系轉換、目標譜線識別和CFRA檢測等一系列處理任務。
  • LabVIEW設計模型——狀態機
    狀態機是在工程應用中使用最多的設計模型。使用狀態機,我們可以很容易的實現程序流程圖中的判斷、分支。 狀態機是由一系列的狀態構成的,其中包括一個「初始化」狀態,和一個「停止」狀態。
  • 如何設計一個穩定可靠的狀態機
    隨著大規模和超大規模FPGA/CPLD器件的誕生和發展,以HDL(硬體描述語言)為工具、FPGA/CPLD器件為載體的EDA技術的應用越來越廣泛.從小型電子系統到大規模SOC(Systemonachip)設計,已經無處不在.在FPGA/CPLD設計中,狀態機是最典型、應用最廣泛的時序電路模塊,如何設計一個穩定可靠的狀態機是我們必須面對的問題.
  • 運用狀態機提高嵌入式軟體效率
    如果合理運用狀態機機制開發系統軟體,就可以讓MCU進行多任務的分時處理。本文引用地址:http://www.eepw.com.cn/article/152440.htm1 建立有限狀態機的模型 其實在平時的程序設計中,開發人員已經不知不覺地使用了狀態機,如按鍵狀態轉換、菜單顯示狀態的轉換等。但是,很少有系統會使用狀態機進行多任務處理。
  • FPGA工程師:如何在FPGA中實現狀態機?
    對於設計人員來說,滿足這些行動和序列要求的最佳方法則是使用狀態機。狀態機是在數量有限的狀態之間進行轉換的邏輯結構。一個狀態機在某個特定的時間點只處於一種狀態。但在一系列觸發器的觸發下,將在不同狀態間進行轉換。
  • 狀態機重新優化業務流程
    有限狀態機(FSM:finite-state machine )或有限狀態機(FSA:finite-state automaton)、有限自動機或簡單的狀態機是計算的數學模型。它是一個抽象的機器,在任何給定的時間內都可以處於有限個狀態中的一個。FSM可以根據一些外部輸入從一個狀態更改為另一個狀態;從一個狀態更改為另一個狀態稱為轉換。
  • 由淺入深,讓你全面了解狀態機模式的應用原理
    工作中應用到了狀態機,學習過程中發現,如果狀態機使用得當,那麼就會事半功倍。中間也陸陸續續學習研究了狀態機的相關知識。所以,在這裡做個總結,同時也分享出來。本文首先簡單介紹狀態機的基本知識(建議找專門專業的介紹狀態機的書籍進行學習),然後基於十字轉門的例子,以遷移表的方式來實現有限狀態機的功能,接著再介紹經典的狀態機模式,最後重點介紹boost startchart的相關知識點,boost startchart是boost實現的狀態機庫,它幾乎支持了所有的UML中狀態機的特性,主要學習的途徑就是官網提供的指南,該指南信息量很大,但是學習起來有點費勁
  • 什麼是狀態機編程?一種耐用的編程方法(附代碼)
    狀態機編程理解什麼是狀態機?以作業系統中的任務調度為例來說明什麼是狀態機。在作業系統的任務調度中經常見到狀態機,其作用是根據任務的狀態和當前資源條件來改變任務的狀態。作業系統任務狀態狀態機編程示例以下代碼是一個狀態機編程的示例:
  • 什麼是「狀態機」?為什麼大家都說萬能的狀態機?
    在第一次聽到狀態機這個詞的時候,相信我們都有相同的疑問:什麼是狀態機?用來幹嘛的?我們先來看一下有關狀態機的定義:「狀態機由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。
  • 《生命遊戲》FPGA實例評測:有限狀態機用哪種編碼更好?
    儘管如此,下面我決定在三種不同的開發工具和三種不同的狀態機對這三種編碼的結果進行比較。接下來的三個實驗說明了確定哪種編碼適合給定FPGA的過程。 被測系統對於此實驗,我想大量實例化一個狀態機,以放大使用二進位,格雷和獨熱編碼時所得硬體的差異。
  • 硬體描述語言Verilog HDL設計進階之: 典型實例-狀態機應用
    本文引用地址:http://www.eepw.com.cn/article/201706/348829.htm4.6典型實例6:狀態機應用4.6.1實例的內容及目標1.實例的主要內容狀態機設計是HDL設計裡面的精華,幾乎所有的設計裡面都或多或少地使用了狀態機的思想。
  • 有限狀態機的FPGA設計
    有限狀態機是一種常見的電路,由於時序電路和組合電路組成,設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。Mealy狀態機的狀態轉變不僅和當前狀態有關,而且和各輸入信號有關;Moore狀態機的轉變只和當前狀態有關。
  • LabVIEW程序設計模式(二)—基本狀態機模式
    狀態機是一種最為經典的程序設計模式,在LabVIEW 7.1(含)之前它幾乎統治了大部分的LabVIEW主程序。最基本的狀態機結構如圖 1所示。狀態是狀態機運行的經脈,在開始使用狀態機模式撰寫程序時需要將應用分為若干個狀態。
  • 利用74LS161實現複雜狀態機
    打開APP 利用74LS161實現複雜狀態機 發表於 2018-01-18 09:00:02 狀態機的寫法
  • 不懂狀態機怎麼能讀懂中間件的LifeCycle?
    要搞清楚LifeCycle模式首先需要能看懂狀態機。事實上,狀態機就是當滿足某種條件時,改變為指定狀態,也是很好理解的。這裡,我假設有如下的狀態機視圖上圖中,我假設是一個組件的狀態機圖。當組件啟動時,首先進入WAITING狀態,如果發送完成SYN包,則進入SYN_SEND狀態;如果調用了setStoped()方法,則改變為STOPED狀態。
  • 基於UART以狀態機的形式實現LIN通信
    LIN協議分析和狀態機的設計有限狀態機是由一組狀態、一個起始狀態、輸入以及將輸入與當前狀態轉換為下一個狀態的轉換函數所組成,它是一個特殊的有向圖,包括一些狀態節點和連接這些狀態的有向弧。對特定的狀態機而言,首先要建立一些有效的狀態,然後設計相應的算法完成狀態的轉換。
  • 電動汽車動力總成解讀|狀態機
    導語:狀態機,代表了電驅動系統運行的不同狀態或者工作模式,電驅動系統控制器(Inverter)與整車控制器(VCU)狀態機的匹配就好比找對象,既要性格、三觀相匹配,也要有相似的生活方式和行為邏輯。文本從電驅動系統的多種工作模式角度,對電動汽車點火啟動、運轉、熄火停車背後的故事做了簡要介紹。本文分為以下三部分展開:1. 什麼是狀態機?2.