本文描述了有限狀態(tài)機(jī)的基礎(chǔ)知識,并展示了在 Verilog 硬件描述語言中實(shí)現(xiàn)它們的實(shí)用方法。
有限狀態(tài)機(jī),簡稱 FSM,是硬件和軟件系統(tǒng)中最普遍的操作模型之一。幾乎每個(gè)有用的數(shù)字系統(tǒng)都可以定義為有限狀態(tài)機(jī),因此最好盡可能多地了解這種有用的系統(tǒng)模式。
數(shù)字電路中的有限狀態(tài)機(jī)
有限狀態(tài)機(jī)有多種描述方式,但最流行的兩種是狀態(tài)圖和狀態(tài)表。兩種表示的示例如圖 1 所示。
圖 1.顯示為狀態(tài)圖和狀態(tài)表的 FSM。左上角的圖例顯示了狀態(tài)變量 A 和 B,以及輸入 x 和輸出 y。
請注意,這個(gè) FSM 有一個(gè)輸入信號 x 和一個(gè)輸出信號 y,這使它成為一個(gè)Mealy 狀態(tài)機(jī)。此 FSM 可以通過數(shù)字設(shè)計(jì)課程中教授的傳統(tǒng)方法來實(shí)現(xiàn),該方法圍繞為實(shí)現(xiàn)狀態(tài)變量的觸發(fā)器生成激勵(lì)邏輯。該邏輯是根據(jù)所選觸發(fā)器類型的激勵(lì)表設(shè)計(jì)的,即 SR、D、JK 或 T。
當(dāng)我們將此技術(shù)應(yīng)用于圖 1 中的 FSM 時(shí),我們會(huì)得到以下實(shí)現(xiàn)的某個(gè)版本。
圖 2.使用 JK 觸發(fā)器的示例 FSM 的實(shí)現(xiàn)。
有關(guān)狀態(tài)機(jī)的更多信息,您可能需要閱讀 David Williams的文章在 VHDL 中實(shí)現(xiàn)有限狀態(tài)機(jī)。
Verilog 如何提供幫助
那么,如果您想在 Verilog 中實(shí)現(xiàn)如圖 1 所示的狀態(tài)機(jī),該怎么做呢?Verilog 應(yīng)該在設(shè)計(jì)過程的哪個(gè)階段接管?
雖然可以 手動(dòng)設(shè)計(jì)整個(gè)系統(tǒng),一直到圖 2 中的示意圖,然后用 Verilog 編寫代碼,但這并不是解決問題的最流行的方法。更糟糕的方法是描述原理圖中的每個(gè)門,包括構(gòu)成觸發(fā)器的門!如果您在門級別描述所有內(nèi)容,您的系統(tǒng)可能會(huì) 以某種方式工作,但這沒有給編譯器留下空間來優(yōu)化您的設(shè)計(jì)以滿足您的實(shí)際 需求,這可能更關(guān)注時(shí)序和功率,而不僅僅是正確性。
請記住:使用硬件描述語言的原因是為了利用您將使用的綜合編譯器,并且像任何編譯器一樣,您給予它的自由度越大,您就越有可能產(chǎn)生最佳實(shí)現(xiàn)。
所以一個(gè)聰明的起點(diǎn)是狀態(tài)表。您只需指示 Verilog 機(jī)器在每個(gè)狀態(tài)下應(yīng)該做什么,而不是使用哪個(gè)門或觸發(fā)器。
在 Verilog 中,狀態(tài)機(jī)的一個(gè)出色構(gòu)造是Case 語句。每個(gè)案例的主體都應(yīng)該檢查狀態(tài)變量及其期望的行為。下面的一段代碼展示了這個(gè)結(jié)構(gòu)。
case (state)
STATE_0: // Code for State 0
STATE_1: // Code for State 1
// ...
STATE_N: // Code for State N
endcase
因此,通過我們的示例,這是圖 1 所示狀態(tài)機(jī)的實(shí)現(xiàn)。請注意,輸出 y 是一個(gè)組合函數(shù)。
module MyFSM(
input clk,
input x,
output y);
reg [1:0] state;
assign y = state[1] & state[0] & x;
always @ (negedge clk)
case (state)
2'b00: state <= x?2'b01:2'b00;
2'b01: state <= x?2'b10:2'b00;
2'b10: state <= x?2'b11:2'b00;
2'b11: state <= 2'b00;
endcase
endmodule
-
Verilog
+關(guān)注
關(guān)注
28文章
1365瀏覽量
111692 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
493瀏覽量
28041
發(fā)布評論請先 登錄
Verilog狀態(tài)機(jī)+設(shè)計(jì)實(shí)例

有限狀態(tài)機(jī)有什么類型?
基于有限狀態(tài)機(jī)在LIN總線開發(fā)中的應(yīng)用

有限狀態(tài)機(jī)_FSM_的實(shí)現(xiàn)
有限狀態(tài)機(jī)FSM在PLD中的實(shí)現(xiàn)分析
有限狀態(tài)機(jī)的建模與優(yōu)化設(shè)計(jì)
VHDL有限狀態(tài)機(jī)設(shè)計(jì)-ST
初學(xué)者對有限狀態(tài)機(jī)(FSM)的設(shè)計(jì)的認(rèn)識

如何使用FPGA實(shí)現(xiàn)序列檢測有限狀態(tài)機(jī)

基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī)介紹
如何以面向?qū)ο蟮乃枷朐O(shè)計(jì)有限狀態(tài)機(jī)

基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī)介紹
FPGA有限狀態(tài)機(jī)編寫如何選擇狀態(tài)編碼?
一個(gè)基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī)

評論