簡述狀態(tài)機的本質和適應的邏輯設計場合
狀態(tài)機的本質就是對具有邏輯順序或時序規(guī)律事件的一種描述方法。這個論斷的最重要的兩個詞就是“邏輯順序”和“時序規(guī)律”,這兩點就是狀態(tài)機所要描述的核心和強項,換言之,所有具有邏輯順序和時序規(guī)律的事情都適合用狀態(tài)機描述。對于邏輯電路而言,小到一個簡單的時序邏輯,大到復雜的微處理器,都適合用狀態(tài)機方法進行描述。
狀態(tài)機的基本要素有哪些
它們是:狀態(tài)、輸出和輸入。
狀態(tài):也叫狀態(tài)變量。在邏輯設計中,使用狀態(tài)劃分邏輯順序和時序規(guī)律。比如,設計偽隨機碼發(fā)生器時,可以用移位寄存器序列作為狀態(tài);在設計電機控制電路時,可以以電機的不同轉速作為狀態(tài);在設計通信系統(tǒng)時,可以用信號的狀態(tài)作為狀態(tài)變量等。
輸出:輸出指在某一個狀態(tài)時特定發(fā)生的事件。如設計電機控制電路中,如果電機轉速過高,則輸出為轉速過高報警,也可以伴隨減速指令或降溫措施等。
輸入:指狀態(tài)機中進入每個狀態(tài)的條件,有的狀態(tài)機沒有輸入條件,其中的狀態(tài)轉移較為簡單,有的狀態(tài)機有輸入條件,當某個輸入條件存在時才能轉移到相應的狀態(tài)。根據狀態(tài)機的輸出是否與輸入條件相關,可將狀態(tài)機分為兩大類:摩爾(Moore)型狀態(tài)機和米勒(Mealy)型狀態(tài)機。
摩爾狀態(tài)機:摩爾狀態(tài)機的輸出僅僅依賴于當前狀態(tài),而與輸入條件無關。米勒型狀態(tài)機:米勒型狀態(tài)機的輸出不僅依賴于當前狀態(tài),而且取決于該狀態(tài)的輸入條件。
兩段式、三段式FSM描述方法的基本結構如何
狀態(tài)機描述時關鍵是要描述清楚幾個狀態(tài)機的要素,即如何進行狀態(tài)轉移,每個狀態(tài)的輸出是什么,狀態(tài)轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式。
一段式:整個狀態(tài)機寫到一個always模塊里面,在該模塊中既描述狀態(tài)轉移,又描述狀態(tài)的輸入和輸出。二段式:用兩個always模塊來描述狀態(tài)機,其中一個always模塊采用同步時序描述狀態(tài)轉移;另一個模塊采用組合邏輯判斷狀態(tài)轉移條件,描述狀態(tài)轉移規(guī)律以及輸出。三段式:在兩個always模塊描述方法基礎上,使用三個always模塊,一個always模塊采用同步時序描述狀態(tài)轉移,一個always采用組合邏輯判斷狀態(tài)轉移條件,描述狀態(tài)轉移規(guī)律,另一個always模塊描述狀態(tài)輸出(可以用組合電路輸出,也可以時序電路輸出)。
一般而言,推薦的FSM 描述方法是后兩種。FSM和其他設計一樣,最好使用同步時序方式設計,以提高設計的穩(wěn)定性,消除毛刺。狀態(tài)機實現(xiàn)后,一般來說,狀態(tài)轉移部分是同步時序電路而狀態(tài)的轉移條件的判斷是組合邏輯。
FSM描述何時使用阻塞賦值,何時使用非阻塞賦值
為了避免不必要的競爭冒險,不論是做兩段式還是三段式FSM 描述時,必須遵循時序邏輯always模塊使用非阻塞賦值“<=”,即當前狀態(tài)向下一狀態(tài)時序轉移,和寄存FSM 輸出等時序always模塊中都要使用非阻塞賦值;而組合邏輯always模塊使用阻塞賦值“=”,即狀態(tài)轉移條件判斷,組合邏輯輸出等always模塊中都要使用阻塞賦值。
一般非阻塞賦值用于時序邏輯,而阻塞賦值用于組合邏輯;非阻塞賦值語句是并行執(zhí)行的,等到一個時鐘完成后才完成賦值,而阻塞賦值是順序執(zhí)行的,下一條賦值語句要等到上一條賦值語句完成后才能賦值,并且阻塞賦值是立即完成的。
三段式FSM描述的兩個case結構中判斷表達式與當前狀態(tài)和下一個狀態(tài)寄存器的對應關系如何
使用一段式建模FSM 的寄存器輸出的時候,必須要綜合考慮現(xiàn)態(tài)在何種狀態(tài)轉移條件下會進入哪些次態(tài),然后在每個現(xiàn)態(tài)的case分支下分別描述每個次態(tài)的輸出,這顯然不符合思維習慣;而三段式建模描述FSM 的狀態(tài)機輸出時,只需指定case敏感表為次態(tài)寄存器,然后直接在每個次態(tài)的case分支中描述該狀態(tài)的輸出即可,根本不用考慮狀態(tài)轉移條件。