verilog 狀態機設計

2021-08-18 03:22:04 字數 1792 閱讀 8763

一,狀態機的基本概念:

硬體設計講究並行設計的思想,雖然用verilog描述的電路大都是並行實現的,但是對於實際的工程應用,往往需要讓硬體來實現一些具有一定順序的工作,這就要用到狀態機的思想,什麼是狀態機呢?簡單的說,就是通過不同的狀態遷移來完成一些特定的順序邏輯,硬體的並行性決定了用verilog描述的硬體實現都是並行執行的,那麼如果希望分多個事件完成乙個任務,怎麼辦?也許可以用多個使能訊號來銜接多個不同的模組,但是這樣做多少顯得有些繁瑣,狀態機的提出就會大大簡化這一工作。

下面舉乙個sram控制的例子來說明狀態機,如圖所示,它表示了乙個sram控制狀態的變化。

首先,在系統復位訊號rst_n(復位有效)後,進入idle狀態,每當rst_n=0(復位有效)時,都會保持在idle狀態,當rst_n=1(復位完成),如果wr_req=1就進入wr_s1狀態,如果rd_req=1就會進入rd_s1的狀態,否則保持idle狀態不變,相應的,只要滿足一定條件或者有時不需要任何條件,系統會在這些固定的狀態間進行切換,這樣做的好處在於每當需要操作sram時,其他模組只要發出乙個wr_req或者rd_req訊號(置高),系統就會進入相應狀態並根據不同狀態對sram的控制匯流排,位址匯流排和資料匯流排進行賦值。

構成狀態機的基本要素是狀態機的輸入,輸出和狀態,輸入就是一些引發狀態變化的條件,比如上圖中wr_req和rd_req的變化會引發狀態的遷移,那麼他們就是輸入,輸出就是狀態變化後引起的變化,圖中的控制匯流排,位址匯流排和資料匯流排的輸出值就是由狀態變化決定的,狀態就是idle,wr_s1,wr_s2等,它們一般由一些邏輯來表示。

狀態機根據其狀態變化是否與輸入條件相關分為兩類,即moore型狀態機和mealy型狀態機,moore型狀態機的狀態變化僅僅和當前狀態有關,而與輸入條件無關,mealy型狀態機的狀態變化不僅與當前狀態有關,還取決於當前的輸入條件。

二:幾種不同狀態機的寫法

1,一段式狀態機

2:兩段式狀態機

還有三段式狀態機:

從上面的例項來看,一段式狀態機似乎是一鍋端,把所有邏輯(包括輸入,輸出,狀態)都在乙個always裡解決了,這種寫法看上去好像很簡潔,但是往往不利於維護,這種寫法不太推薦,但是在一些簡單的狀態機中還是可以使用的,兩段式狀態機是一種常用的寫法,他把時序邏輯和組合邏輯劃分開來,時序邏輯裡進行當前邏輯和下一邏輯的切換,組合邏輯裡實現各個輸入輸出及狀態判斷,這種寫法相對容易維護,不過組合邏輯輸出較容易出現毛刺等常見問題。三段式狀態機的寫法是一種比較推薦的寫法,**容易維護,時序邏輯的輸出解決了兩段式寫法中組合邏輯的毛刺問題,但是從資源消耗上來講,三段式消耗的資源會多一些,另外,三段式輸入從輸入到輸出比一段式會延遲乙個時鐘週期。三段式狀態機將時序邏輯和組合邏輯分開,狀態和輸出分開,清晰容易理解。

FPGA狀態機設計

一 狀態機應用設計 一 狀態機基本概念 1.狀態機的描述方法 狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行狀態轉移,每個狀態的輸出是什麼,狀態轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式 1 一段式 整個狀態機寫到乙個always模組裡面,在該模組中既描述狀態轉移,又描述...

基於proteus的狀態機設計

參考資料 理論上說,任何乙個需要周而復始的執行一系列任務 例如cpu中按順序從儲存器取出指令 再執行指令 的時序系統都可以用狀態機 state machine 模型來描述。時序系統的執行週期可以描述為乙個預定順序的時間週期序列,每個週期都對應狀態機中乙個指定的狀態。狀態機在每個週期中產生特定的操作,...

Verilog 狀態機寫法

狀態機是時序電路的 所有時序電路都能通過狀態機實現。以前寫程式時喜歡用一段式狀態機,現在流行用三段式。好象三段時也沒多大優點。在cpld中暫存器較少,個人感覺用一段式也可以,主要是省資源。時序電路的狀態是乙個狀態變數集合,這些狀態變數在任意時刻的值都包含了為確定電路的未來行為而必需考慮的所有歷史資訊...