1. 程式人生 > >【 FPGA 】狀態機,FPGA的靈魂

【 FPGA 】狀態機,FPGA的靈魂

有關狀態機的文章,事實上已經寫過很多了,可是即使如此,真的懂了嗎?真的能熟練應用嗎?未必吧。這篇博文來源是《FPGA之道》,認真下看去收貨頗豐!

借這個主題來梳理下狀態機:

狀態機簡介

狀態機是FPGA設計中一種非常重要、非常根基的設計思想,堪稱FPGA的靈魂,貫穿FPGA設計的始終。

簡單地說,狀態機就是一副描繪著狀態變遷的狀態轉移圖,它體現著系統對外界事件的反應和行為。

FPGA中的狀態機是指有限狀態機,簡稱為FSM,是指狀態節點數和輸入、輸出範圍皆有限的狀態機。需要說明的是,雖然有限狀態機的狀態節點和輸入、輸出皆為有限的,但這並不意味著它僅能進行有限次的處理,這是因為有限狀態機可以形成閉環系統,所以可以用有限個狀態處理無限的事件,從而到達化有限為無窮的境界。

例如,宇宙中物資的三種最基本的狀態:固態,液態和氣態,它們之間的狀態轉移圖如下:

從上圖可以看出,雖然該狀態機僅有三個狀態,輸入(六個觸發條件)、輸出(狀態本身即為輸出)也是有限的,但是它卻永遠不會結束,因為宇宙中的物理轉換永遠也不會停止。。。至少可預見的未來不會停止。


狀態機的組成六要素:

(1)狀態集合:

狀態集合是組成狀態機的必備要素,該集合裡包含了狀態機所能達到的所有狀態,例如上例中的{固態,液態,氣態}。

(2)初態:

初態是狀態機的第二必備要素,它是整個狀態機開始工作的起點。它的功能類似於一個參考系,它為狀態機的其他狀態提供參考與標準。

例如上例中,任何一個狀態都可以作為初態。

(3)終態

終態是狀態機的結束狀態,即若狀態機達到終態,它的使命也將完成,不再工作。

與初態不同,終態不是狀態機的必備要素,大部分執行在FPGA上的狀態機是沒有終態的,因為它們都需要用有限的狀態來處理無限的事件。

(4)輸入符號集

輸入符號集是驅動狀態機進行狀態轉換的主要因素,不過狀態機的狀態轉換其實並不一定需要外界的事件觸發,因此,輸入符號集也不是組成狀態機的必備要素,但是大部分執行在FPGA上的狀態機是需要輸入符號集的,至少大多數情況下,需要一個復位訊號來讓FPGA進入初態。

例如,上例中的輸入符號集為{氣化,液化,凝華,昇華,凝固,融化}。

(5)輸出符號集

輸出符號集是狀態機傳遞給外界的反饋,不過與輸入符號集不同,輸出符號集是組成狀態機的一個必備要素,因為一個對外界毫無影響、或者在外界看來毫無變化的狀態機是沒有必要存在的。

例如上例中的輸出符號集可以是{溫度變化,體積變化,狀態變化}

(6)狀態轉移函式

狀態轉移函式決定了狀態機的行為,它是狀態機的必備要素之一,也是狀態機最重要的一個組成因素。狀態轉移函式的表現形式可以由很多種,例如帶有說明的有向箭頭,狀態轉移表格等。


狀態機的工作四要素

狀態機在工作的時候,出於對狀態機內在因果關係的考慮,將狀態機的工作狀態劃分為四個要素:現態,輸入,輸出和次態。其中,現態和輸入是因,輸出和次態是果。

(1)現態

現態指狀態機當前所處的狀態。

(2)輸入

輸入一般指外部事件,當一個外部事件發生後,狀態機便會根據狀態轉移函式發生響應的狀態跳轉,或者狀態機將會更新自己的輸出情況。

通常在FPGA中,根據輸入訊號是非同步的還是同步的,又可以將狀態機分為非同步狀態機和同步狀態機,不過鑑於穩定性的考慮,以後提到和FPGA相關的狀態機都是同步狀態機。而對於非同步訊號,要先同步化後再送至狀態機。

(3)輸出

輸出是由現態或者現態和輸入共同決定的。輸出符號集是必需的,但是具體到某一狀態或者某一輸入觸發事件,輸出並不是必需的,有時候帶來的僅僅是狀態遷移而已。

(4)次態

次態是根據現態,輸入以及狀態轉移函式所得到的,狀態機將要跳轉至的新狀態。次態是相對於現態而言的,一旦狀態遷移完成,次態便變成了新的現態。

這篇博文暫時到此,下篇博文,關於狀態機的模型介紹。