iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 15
0
自我挑戰組

Verilog 從放棄到有趣系列 第 15

[Day15]有限狀態機1/2

  • 分享至 

  • twitterImage
  •  

今天要來介紹 有限狀態機(Finite State Machine) 簡稱FSM,為什麼要介紹這個呢,因為FSM在verilog扮演一個非常重要的角色,當你在寫verilog時,且是一個較為複雜的電路時,你要如何去控制每個always block裡面的行為,或許你可以設很多的flag,哪個flag觸發就做指定的行為,但這樣或許就會造成程式的可讀性降低,或者是當電路有bug時,就比較不好發現bug在哪,所以在寫較為複雜的電路時,大多人都會用FSM來控制電路行為,在哪一個狀態該做哪些事情,其他狀態就保持不變,一來可讀性增加,二來降低電路的複雜性,所以把FSM推薦給大家,那接下來先來介紹一下什麼是FSM.

首先來看一下FSM程式的模型

always @(posedge clk)begin
  if(reset)
    FSM_STATE <= IDLE;
  Else
    FSM_STATE <= FSM_STATE_NEXT;
end

always@(*)begin
  case(FSM_STATE)
    IDLE:
      if(in_valid) FSM_STATE_NEXT = CALCULATE;
      else      FSM_STATE_NEXT = IDLE;
    CALCUALTE:
      if(done) FSM_STATE_NEXT = COMPLETE;
      else    FSM_STATE_NEXT = CALCULATE;
    COMPLETE:
      FSM_STATE_NEXT = IDLE;  
    default:FSM_STATE_NEXT = IDLE;
  endcase
end

https://ithelp.ithome.com.tw/upload/images/20171226/20107543qjdmC6GEo3.png

大概解釋一下,以上面的FSM來說會在電路reset的時候從IDLE這個state開始,然後等待input訊號進來,如果沒有input訊號的話就會一直停在IDLE,一旦有input訊號進來,就跳到CALCULATE state,等待電路運算完之後就會跳到COMPLETE做輸出,輸出完就能回到IDLE等待下筆input進來,大致上是這樣.

以上面這個簡單的範例大概能看出FSM的許多優點,讓程式表達非常明確,哪一個state該做什麼事情,明天會舉一個簡單的應用在加深各位多FSM的印象,那今天就先到這裡囉,謝謝各位.


上一篇
[Day14]nonblocking
下一篇
[Day16]有限狀態機2/2
系列文
Verilog 從放棄到有趣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言