新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 零基礎(chǔ)學(xué)FPGA(七)淺談狀態(tài)機

零基礎(chǔ)學(xué)FPGA(七)淺談狀態(tài)機

—— 零基礎(chǔ)學(xué)FPGA(八)淺談狀態(tài)機
作者: 時間:2015-01-10 來源:網(wǎng)絡(luò) 收藏

  今天我們來寫。

本文引用地址:http://butianyuan.cn/article/267960.htm

  關(guān)于呢,想必大家應(yīng)該都接觸過,通俗的講就是數(shù)電里我們學(xué)的狀態(tài)轉(zhuǎn)換圖。分為兩中類型,一種叫型,一種叫型。前者就是說時序邏輯的輸出不僅取決于當(dāng)前的狀態(tài),還取決于輸入,而后者就是時序邏輯的輸出僅僅取決于當(dāng)前的狀態(tài)。下面兩個圖分別表示兩種不同的狀態(tài)機。

  

360桌面截圖20140601211319.jpg

 

  

360桌面截圖20140601211344.jpg

 

  下面我們就通過代碼來寫一下狀態(tài)機,以下面的狀態(tài)轉(zhuǎn)換圖為例

  

360桌面截圖20140601205828.jpg

 

  首先,是一種典型的狀態(tài)機寫法,這種寫法我們稱為一段時狀態(tài)機,用于一些簡單的設(shè)計是可以的,但如果是復(fù)雜的狀態(tài)機,不建議大家用這種寫法。

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

  //可綜合的狀態(tài)機設(shè)計的典型方法

  //實現(xiàn)典型的狀態(tài)機設(shè)計

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

  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; //當(dāng)前狀態(tài)寄存器

  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) //狀態(tài)判斷與組合邏輯賦值

  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語句已經(jīng)指定了所有狀態(tài),這樣綜合器就會刪除不需要的譯碼電路,使生成的電路簡單

  endcase

  endmodule

fpga相關(guān)文章:fpga是什么



上一頁 1 2 下一頁

關(guān)鍵詞: FPGA 狀態(tài)機 Mealy Moore

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉