米利型與摩爾型狀態機的差異:輸出、時序、狀態數、HDL寫法比較

狀態機由記住目前狀態的暫存器、決定下一個狀態的組合電路,以及決定輸出的組合電路組成。米利型與摩爾型的差別在於輸出由什麼決定。米利型的輸出由目前的狀態與目前的輸入兩者決定,輸入的變化會在同一個週期內出現在輸出。摩爾型的輸出只由目前的狀態決定,輸入的變化要等時脈改變狀態後才出現在輸出,因此反應慢一個週期。米利型的特點是狀態少、反應快,摩爾型的特點是輸出穩定、時序容易預測。

項目米利型摩爾型
決定輸出的因素目前的狀態與目前的輸入只有目前的狀態
狀態轉移圖中輸出的寫法以「輸入/輸出」的形式寫在轉移的箭頭上與狀態名稱一起寫在狀態的圓圈內
對輸入的反應輸入改變時,不等時脈就在同一個週期內改變輸出下一個時脈改變狀態後輸出才改變,比米利型慢一個週期
狀態數(可重疊偵測「101」的例子)3個狀態(尚未符合、符合到1、符合到10)4個狀態(另外需要表示輸出1的「偵測到101」狀態)
狀態數(一般)實現相同功能時,與摩爾型相同或較少需要依進入轉移的輸出拆分米利型的狀態,容易變多
突波與雜訊輸入的突波或雜訊會經過組合電路直接出現在輸出輸入的雜訊不會傳到輸出。若以讓輸出直接取自狀態暫存器位元的方式編碼,也能消除輸出的突波
時序路徑從輸入到輸出由組合電路相連,包含前後電路的路徑變長。米利型彼此相接時可能形成組合迴路輸出只由時脈邊緣之後的狀態決定,路徑被暫存器切開,時序容易分析
HDL的寫法在決定輸出的組合電路區塊中,除了狀態也參照輸入輸出的式子只參照狀態(例如用case敘述依狀態決定輸出)。也常由暫存器輸出
適合的用途希望對輸入毫無週期延遲地回應的控制、想減少狀態數時需要乾淨輸出的控制訊號(送到其他時脈域的電路或晶片外的訊號等)、希望時序容易預測時

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

米利型
適合想在同一個週期回應輸入,或想減少狀態數時。輸入要先與時脈同步化,輸出則以相同時脈的正反器接收等方式,用在短暫突波不會造成問題的地方。若用正反器重新取樣輸出,突波雖會消失,但時序會與摩爾型一樣慢一個週期。
摩爾型
適合重視輸出穩定性與時序可預測性時。輸入的雜訊不會傳到輸出,因此容易用於重要的控制訊號與送到外部的訊號。選擇時要考慮反應慢一個週期,以及狀態容易變多這兩點。實際設計中,常會依輸出分別採用米利型與摩爾型,或將兩者組合。

常見問題

「慢一個週期」具體來說是什麼意思?

以偵測「101」的電路來看,米利型在「符合到10」的狀態下,於輸入變成1的那個週期內就把輸出設為1。摩爾型則要在時脈邊緣取入這個1、移到「偵測到101」的狀態後,輸出才變成1,因此輸出為1是在下一個週期。兩者偵測相同的輸入序列,但摩爾型的輸出比米利型往後偏移一個週期。

米利型與摩爾型可以互相轉換嗎?

可以。把米利型的狀態依進入該狀態之轉移的輸出拆開,成為摩爾型的狀態,就能得到相同的輸入輸出關係,但狀態可能增加,輸出也會慢一個週期出現。反過來,把摩爾型各狀態的輸出改寫為進入該狀態之轉移的輸出,就成為米利型,輸出會提早一個週期出現,有時也能合併狀態。

在HDL描述中,是米利型還是摩爾型由哪裡決定?

由決定輸出的式子決定。分成更新狀態暫存器的區塊,以及決定下一個狀態與輸出的組合電路區塊來寫時,若輸出的式子含有輸入就是米利型,只由狀態決定就是摩爾型。在組合電路區塊中,要在所有條件下都對輸出賦值,避免產生非預期閂鎖。

摩爾型的輸出就不會有突波嗎?

輸入的變化與雜訊不會傳到輸出,但若有由狀態產生輸出的組合電路,在狀態改變的瞬間多個位元同時變化,仍可能產生突波。採用讓輸出直接取自狀態暫存器位元的編碼,或以正反器重新取樣輸出,就能得到沒有突波的輸出。

理解度檢測

米利型(Mealy)狀態機的特徵,下列何者正確?

  1. A輸出只由目前的狀態決定,即使輸入改變,輸出也要到下一個時脈才會改變
  2. B輸出由目前的狀態與輸入兩者決定,因此輸入的變化會在同一個週期內反映到輸出
  3. C是不具狀態的組合電路
查看答案與解析

正確答案:B. 輸出由目前的狀態與輸入兩者決定,因此輸入的變化會在同一個週期內反映到輸出

在米利型中,輸出的邏輯除了目前的狀態之外也會看輸入,所以輸入一改變,輸出不必等待時脈就會改變,能早1個週期反應。狀態的數量也可能較少。另一方面,由於從輸入到輸出的組合電路路徑相連,輸入的雜訊會反映到輸出,時序路徑也會變長。也會將輸出以正反器重新接收後再使用。

輸出僅由目前狀態決定的序向電路(狀態機)類型是哪一個?

  1. A米利型
  2. B摩爾型
  3. C哈佛型
查看答案與解析

正確答案:B. 摩爾型

摩爾型的輸出僅由目前狀態決定,米利型的輸出則由狀態與輸入兩者決定。摩爾型的輸出只在時脈邊緣之後才改變,輸入的變化與突波不會直接傳到輸出,因此穩定,時序也容易預測,但對輸入的反應會慢1個時脈,且狀態數容易增加。米利型可減少狀態數並能立即回應輸入,但輸入的變化會直接傳到輸出。實際設計中會將兩者組合使用。

以HDL撰寫的狀態機(state machine)的基本架構,下列何者正確?

  1. A只有記憶狀態的記憶體,不使用邏輯電路
  2. B只有決定輸出的電路,不記憶狀態
  3. C記憶目前狀態的暫存器、決定下一個狀態的組合電路、決定輸出的組合電路
查看答案與解析

正確答案:C. 記憶目前狀態的暫存器、決定下一個狀態的組合電路、決定輸出的組合電路

狀態機將目前的狀態記憶在正反器的暫存器中,由目前的狀態與輸入以組合電路決定下一個狀態,並在時脈邊緣更新狀態。輸出則由目前的狀態(與輸入)以組合電路決定。通訊程序的控制、自動販賣機、紅綠燈的控制等,許多依程序動作的電路都是寫成狀態機。

  1. 在狀態機的狀態編碼中,獨熱編碼(one-hot)的特徵,下列何者正確?
  2. 在具有3個狀態的狀態機中,記憶狀態所需的正反器數量的組合,下列何者正確(二進位編碼/獨熱編碼)?
  3. 下列哪一項是對序向電路的正確說明?

前往硬體描述語言與驗證的練習題

相關名詞的解說

米利型(Mealy machine)
輸出由目前狀態與輸入兩者決定的狀態機。輸入的變化在同一週期就會反映在輸出,但輸入的雜訊也容易傳到輸出。輸出僅由狀態決定的是摩爾型。
循序電路
以正反器等記憶狀態,輸出由輸入與過去狀態兩者共同決定的邏輯電路。例如計數器、暫存器等。
組合電路
輸出僅由當下輸入決定的邏輯電路。例如加法器、多工器、解碼器等。
正反器
保存 1 位元資訊的循序電路基本元件。D 型會在時脈的邊緣擷取輸入。
突波(Glitch)
因各訊號路徑的延遲差異等,而在輸出上瞬間出現的多餘脈衝。在組合電路中也稱為危障(hazard),在 DA 轉換器中則於代碼切換時產生。
獨熱編碼(One-hot encoding)
為狀態機的每個狀態分配一個正反器,且始終只有一個為 1 的編碼。邏輯簡單、容易較快,常用於 FPGA。
組合迴路(Combinational loop)
組合電路的輸出不經過正反器就回到自己輸入的結構。會振盪或使值無法確定,也無法做時序分析,所以應避免。
非預期閂鎖(Unintended latch)
在原本想寫成組合電路的描述中,因某些條件下沒有對輸出賦值,使邏輯合成產生出保持值之閂鎖的情形。

相關的比較