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