【 FPGA 】狀態機的模型之Mealy型狀態機
上篇博文講了:Moore型狀態機,這篇博文和上篇博文思路一致,如果讀懂了上篇博文,這篇博文就很容易理解了。
如果一個狀態機的輸出是由現態和輸入共同決定的,那麼它就是一個Mealy型的狀態機。而按照驅動輸出的數位電路特性,又將Mealy型狀態機細分為Mealy 1型、Mealy 2型、Mealy 3型,詳細介紹如下:
(1)Mealy 1型
Mealy 1型狀態機的原理框圖如下圖1所示:
上上圖可以看出,對於Mealy 1型狀態機來說,由於次態和輸出均由現態和輸入通過組合邏輯共同決定,因此可以將狀態轉移部分和輸出生成部分合併成一個部分,兼併產生狀態機的次態和輸出。
當下一次時鐘有效沿到來時,現態暫存器完成重新整理,次態成為了新的現態,而新的現態和新的輸入共同作用產生新的次態和新的輸出,如此往復。
與Moore1型狀態機類似,Mealy 1型狀態機的輸出也是直接通過組合邏輯產生的,若想通過新增輸出暫存器來獲得寄存輸出,經過輸出暫存器寄存後的輸出其實對應的是狀態機上一個狀態與輸入。
(2)Mealy 2型
Mealy 1型狀態機的缺點也是寄存後的輸出並不對應此時的現態,因此,通過對Mealy 1型狀態機的原理結構圖進行一些簡單的修改,可得
Mealy 2型狀態機的原理結構框圖,如下圖2:
從上圖可以看出,Mealy 2型狀態機重新將狀態轉移部分和輸出生成部分分開,並做成級聯的形式(Mealy 1型中二者其實是並聯),所以輸出生成部分便由次態和輸入共同作用產生次態對應的輸出。這樣一來,由於次態和次態決定的輸出在同一個時鐘週期內變得有效,那麼在下一次時鐘有效邊沿到來時,現態暫存器和輸出暫存器將會同時進行更新,至此,次態變成新的現態,次態決定的輸出變成新的輸出。因此,Mealy 2型狀態機中經過暫存器後的輸出是對應於當前狀態的。
(3)Mealy 3型
與Moore型狀態機類似,Mealy 1型和Mealy 2型狀態機也各有其優缺點。它們的本質區別仍在於“由狀態產生輸出”這部分的組合邏輯所處的位置。如果像Mealy 1型那樣,將該部分邏輯和次態產生邏輯並聯,那麼該組合邏輯的時延將會影響到後續電路的工作;反之,如果像Mealy 2型那樣,將該部分邏輯和次態產生邏輯串聯,那麼該組合邏輯的時間延遲將會影響到狀態機自身的工作。因此,為了將Mealy 1型和Mealy 2型狀態機的缺點最小化、優點最大化,便有了Mealy 3型狀態機,它的原理結構框圖如下圖3:
現實中的狀態機,輸出往往不止一個,通過上圖也可以看出,Mealy 3型狀態機就是將那些適合用組合邏輯的輸出採用Mealy 1型的方式來處理,而將那些適合使用暫存器的輸出採用Mealy 2型的方式處理,因此,Mealy 3型狀態機又稱為混合型Mealy 狀態機。
最後需要注意的是,至於到底什麼樣的輸出適合採用組合的形式,什麼樣的輸出適合採用寄存的形式,需要根據具體的功能需求來確定,這點與上篇博文的討論不同。因為Mealy 1和Mealy 2型狀態機在功能上並不完全等價,這是由於Mealy型狀態機的輸出除了和當前狀態有關,還與輸入有關。
對於同樣的輸入序列,Moore 1、2型狀態機的狀態變遷都是一樣的,因此它們的輸出也是完全一致的;但是對於同樣的輸入序列,Mealy 1,2型狀態機的狀態變遷雖然一樣,但是Mealy 2型的輸出實際上是由當前的狀態和上一次的輸入得出的,這與Mealy 1型的輸出是由當前的狀態和當前的輸入得出的不同。故Mealy 1,2之間不可隨意替換。