天天看點

fpga設計思想(二):有限狀态機

今天聊一聊有限狀态機的知識,也許你會覺得這個很枯燥,直接拿來用就好了,但是我要說的是:隻有有了紮實的理論基礎才會有fpga設計思想,想想自己能夠編寫一個大型的代碼嗎?如果不能,那就是我們還沒有學會fpga真正的設計思想。fpga程式設計确實很難,隻有紮實的基礎,再加多的訓練才會擁有fpga設計思想這個技能。好了,廢話不多說了,現在開始:

1、有限狀态機FSM:簡單的說,就是通過不同的狀态遷移來完成一些特定的順序邏輯。硬體的并行性決定了用verilog描述的硬體實作都是并行執行的,那麼如果希望分多個時間完成一個任務,是以就提出了有限狀态機的思想。用于描述各種複雜的時序行為。

它的基礎為有限自動機FA,有它延伸出來的理論模型有:序列機SM,線性序列機LSM,以及算法機ASM還有ASMD。實際工程中這幾種或單獨或組合應用,是以又是廣義的将上述所有的狀态統稱為FSM。用于FSM的規劃工具以狀态轉移圖STG和算法流程圖ASMc應用最多,在LSM情況下,也可以用SMF表規劃。

2、摩爾機(Moor)、米利機(Mealy)

(1)當電路的輸出僅僅與狀态S有關時,所描述的模型R=F(s)成為摩爾型狀态機;

fpga設計思想(二):有限狀态機

ST表示左側狀态轉移組合邏輯的邏輯函數,REG則表示中間時鐘沿采樣的狀态寄存器的邏輯函數,Moor表示右側輸出組合邏輯的邏輯函數。

Moor機狀态的輸出根據輸入和目前狀态決定,它的輸出被存儲在狀态寄存器中,而其右側的輸出組合邏輯,僅根據目前的狀态決定輸出。

(2)當電路的輸出不僅與時間有關,也與目前的輸入信号有關時,成為米利型狀态機。

fpga設計思想(二):有限狀态機

由上圖知米利機(mealy)和摩爾(Moor)不同之處在與,Mealy不僅與目前狀态有關,也取決于目前輸入信号。許多具有複雜狀态的狀态機都是米利機。

有限狀态機的三種編碼方式:一段式(FSM-1s),兩段式(FSM-2s),三段式(FSM-3s)。無論選哪一種都可以描述摩爾機也可以用以描述米利機。

3、閉節點(CN)、開節點(ON)

(1)下圖最左側的組合邏輯和中間的寄存器的結合,為一種典型的同步結構,成為時鐘節點,如下圖所示:

fpga設計思想(二):有限狀态機

時鐘節點的輸出output是基于時鐘clock翻轉的,是以說output是時鐘clock的同步信号。

(2)一個模型可能是由若幹個具有相同時鐘的節點組成(單時鐘域),或是由多個不同的時鐘域組成。單獨的行為代碼通常描述的是一個單獨的節點。這種節點描述代碼,可以是一個完整的時鐘節點,即包括組合邏輯和寄存器,也可以是一個不完整的時鐘節點,即前級節點描述僅包含組合邏輯而寄存器部分放在後級的單節點描述中。為了加以區分,我們将前者稱為 閉節點(CN)描述,後者稱為 開節點(ON)描述。

fpga設計思想(二):有限狀态機

子產品1和子產品2均為閉節點,即其單節點描述代碼中,已包含組合邏輯和寄存器,而這些寄存器使用同一個時鐘。

fpga設計思想(二):有限狀态機

由上圖結構可知,子產品1是組合邏輯輸出,由後級的子產品2提供寄存器,以形成完整的時鐘節點,是以子產品A為開節點,子產品B不僅描述了本級完整的一個時鐘節點,同時提供了對前級信号的同步捕獲。

(3)在verilog中若信号敏感表中有時鐘沿,則為CN描述,綜合後的電路必有寄存器參與輸出,反之則為ON描述,綜合後結果為組合邏輯。

(4)FSM三段式描述中就分别使用了開節點描述和閉節點描述。

4、FSM三段式:

(1)一段式中包含了狀态轉移邏輯,狀态寄存器邏輯和輸出邏輯,由于是閉節點CN描述,是以增加了輸出端寄存器。

(2)兩段式描述将理論模型中的狀态寄存器用一個單獨的行為與描述,而将轉移組合邏輯和輸出組合邏輯寫入另一個行為語句,輸出組合邏輯直接将output輸出。因而在兩段式描述中,第一段為狀态寄存器的捕獲,為一個閉節點CN描述,而第二段為開節點ON描述,當在高速或同步系統中使用兩段式輸出信号時,需要在下遊插入寄存器,以構成同步。

(3)三段式中第一段仍然為閉節點CN輸出,第二段為開節點ON,第三段輸出為閉節點CN輸出。這樣輸出秦昊outputs就成為了一個同步信号。

(4)從同步系統的角度來看,一段式和三段式都為閉節點輸出,兩段式為開節點輸出。三種描述(S1,S2,S3)都有存在的必要,在小規模低速的FSM設計中,可以考慮使用一段式,在大規模低速系統中,建議使用三段式,在大規模高速系統中,最好使用兩段式。