FPGA 狀態機的模型之Moore型狀態機

2021-09-02 05:00:19 字數 2618 閱讀 4549

上篇博文:狀態機,fpga的靈魂,說到了狀態機的基礎知識,講到了狀態機的組成六要素,工作四要素。

這篇博文來講狀態機的模型之moore狀態機,從標題也能看出,狀態機的知識並沒有結束,後面還會提到mealy型狀態機。

根據狀態機的輸出與其現態、輸入之間的關係,可將fpga中的狀態機抽象為三種基本模型——moore、mealy和mix,即摩爾型,公尺利型和混合型。

如果乙個狀態機的輸出僅由現態決定,那麼它就是乙個moore型的狀態機。按照驅動輸出的數位電路特徵,又將moore型狀態機細分為moore 1 型,moore 2 型和moore 3型。詳細介紹如下:

(1)moore 1型

如下圖1為moore 1型的原理結構框圖:

從上圖可以看出,moore 1型狀態機的結構可以劃分為兩大部分,狀態轉移部分和輸出生成部分。

上圖的左半部分為狀態轉移部分,輸入和現態(現態暫存器的輸出)通過組合邏輯,共同作用產生了次態,當下一次時鐘有效邊沿到來的時候,現態暫存器發生更新,剛才產生的次態即成為了新的現態,而新的現態和新的輸入共同作用產生新的次態,如此往復。

輸出生成部分如上圖右半部分所示,現態(現態暫存器的輸出)直接通過組合邏輯產生當前的輸出(這點也是moore狀態機和mealy狀態最顯著的區別。)有時候,我們不希望將這部分組合邏輯的延遲影響到後續模組的處理,那麼可以仿照上圖通過新增輸出暫存器來解決這個問題,但是需要特別注意的一點是,由於輸出暫存器的更新需要等到下一次時鐘的有效邊沿,因此,經過輸出暫存器寄存後的輸出其實對應的是上乙個狀態。

(2)moore 2 型

moore 1 型狀態機的缺點是寄存後的輸出並不對應於此時的現態,這可能為後續模組的一些處理帶來不便和延遲;除此之外,如果不通過輸出暫存器輸出,組合邏輯中存在著競爭,使得輸出即使僅為1bit位寬,有可能會發生險象,如果後續模組是對電平敏感的,便會導致錯誤發生,因此通過對moore 1型狀態機的原理結構框圖進行一些簡單地修改,可得moore 2型狀態機的原理結構框圖,如下圖2:

同樣,moore 2型狀態機的結構也可以分為兩部分, 一部分是狀態狀態部分,位於上圖的左邊,另一部分是輸出生成部分,位於上圖的右邊。

對比moore 1型狀態機,可以發現不同點僅僅為輸出生成部分的輸入端由之前的現態(現態暫存器的輸出)變為了次態(有現態和輸入通過組合邏輯產生)。

這樣一來,由於次態和次態決定的輸出在同乙個時鐘週期內變得有效,那麼在下一次時鐘有效沿到來時,現態暫存器和輸出暫存器將會同時進行更新,至此,次態變為新的現態,次態決定的輸出變成新的輸出。因此,moore 2 型狀態機中經過寄存後的輸出是對應於當前狀態的。

(3)moore 3型

相比於moore 1型,moore 2型狀態機也有其自身的缺點,那就是產生輸出的組合邏輯延遲較大,因為它相當於moore 1型狀態機中產生次態的組合邏輯和產生輸出的組合邏輯的級聯,而這點便會限制狀態機本身的時鐘工作頻率。由此,可見moore 1型和moore 2型狀態機各有優缺點。

仔細觀察moore1和moore2 型狀態機的原理結構框圖,可以發現,它們的本質區別就是「由狀態產生輸出」這部分的組合邏輯所處的位置。如果像moore 1型那樣,將該部分邏輯至於現態暫存器之後,那麼該組合邏輯的時間延遲會影響到後續電路的工作;反之,如果像moore2型那樣,將該部分邏輯置於次態產生邏輯之後,那麼該組合邏輯的時間延遲會影響到狀態機自身的工作。因此,將moore 1和moore 2型狀態機的缺點最小化,優點最大化,便有了moore3型狀態機,它的原理結構框圖如下:

現實中,狀態機的輸出往往不止乙個,通過上圖可以看出,moore3型狀態機就是將那些適合使用組合邏輯的輸出採用moore1型的方式來處理,而將那些適合使用暫存器的輸出採用moore2型的方式來處理,因此moore3型狀態機也叫混合型moore狀態機。

那到底什麼樣的輸出適合採用組合的形式,而什麼樣的輸出適合採用寄存的形式呢?如果後續模組為電平敏感的,那麼自然應該選擇寄存形式的輸出,不過fpga中一般應該為全同步邏輯設計,所以絕大多數情況下,狀態機的前級輸入、后級輸出及其本身是工作在乙個時鐘域內的,此時,假設由現態,輸入產生次態的組合邏輯時間延遲為t1,有狀態產生輸出的組合邏輯的時間延遲為t2,而後續使用該輸出的電路中,又會在輸出訊號到達下乙個暫存器前引入時間延遲最大為t3的組合邏輯。

那麼根據短板效應,如果t1 + t2 <= t2 + t3,則該輸出採用moore2型的寄存方式處理可能提公升整個系統的效能;反之,該輸出採用moore1型的組合方式處理可以提公升整個系統的效能。

當然了,上述方法僅僅是從理論上去理解如何進行輸出形式選擇,其實並不可能嚴格地參考使用,因為布局佈線的不同對t1、t2和t3的取值影響很大,因此實際中都是憑經驗或者大概估計一下各個組合邏輯的複雜度和級聯情況,然後大概估算後作出選擇,而更多的時候,是需要根據後續時序分析報告中的結果,來對狀態機的輸出形式進行調整。

FPGA 狀態機的模型之Mealy型狀態機

上篇博文講了 moore型狀態機,這篇博文和上篇博文思路一致,如果讀懂了上篇博文,這篇博文就很容易理解了。如果乙個狀態機的輸出是由現態和輸入共同決定的,那麼它就是乙個mealy型的狀態機。而按照驅動輸出的數位電路特性,又將mealy型狀態機細分為mealy 1型 mealy 2型 mealy 3型,...

FPGA 狀態機,FPGA的靈魂

有關狀態機的文章,事實上已經寫過很多了,可是即使如此,真的懂了嗎?真的能熟練應用嗎?未必吧。這篇博文 是 fpga之道 認真下看去收貨頗豐!借這個主題來梳理下狀態機 狀態機是fpga設計中一種非常重要 非常根基的設計思想,堪稱fpga的靈魂,貫穿fpga設計的始終。簡單地說,狀態機就是一副描繪著狀態...

FPGA 常用 狀態機

1,單always塊結構 一段式 always posedge clk begin case fsm st0 begin out0 輸出 if case0 fsm st1 狀態轉移 endst1 begin out1 輸出 if case0 fsm st2 狀態轉移 end default endc...