加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 簡(jiǎn)述狀態(tài)機(jī)的本質(zhì)和適應(yīng)的邏輯設(shè)計(jì)場(chǎng)合
    • 狀態(tài)機(jī)的基本要素有哪些
    • 兩段式、三段式FSM描述方法的基本結(jié)構(gòu)如何
    • FSM描述何時(shí)使用阻塞賦值,何時(shí)使用非阻塞賦值
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

筆記 | 什么是狀態(tài)機(jī)

2023/01/12
1801
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

簡(jiǎn)述狀態(tài)機(jī)的本質(zhì)和適應(yīng)的邏輯設(shè)計(jì)場(chǎng)合

狀態(tài)機(jī)的本質(zhì)就是對(duì)具有邏輯順序或時(shí)序規(guī)律事件的一種描述方法。這個(gè)論斷的最重要的兩個(gè)詞就是“邏輯順序”和“時(shí)序規(guī)律”,這兩點(diǎn)就是狀態(tài)機(jī)所要描述的核心和強(qiáng)項(xiàng),換言之,所有具有邏輯順序和時(shí)序規(guī)律的事情都適合用狀態(tài)機(jī)描述。對(duì)于邏輯電路而言,小到一個(gè)簡(jiǎn)單的時(shí)序邏輯,大到復(fù)雜的微處理器,都適合用狀態(tài)機(jī)方法進(jìn)行描述。

狀態(tài)機(jī)的基本要素有哪些

它們是:狀態(tài)、輸出和輸入。

狀態(tài):也叫狀態(tài)變量。在邏輯設(shè)計(jì)中,使用狀態(tài)劃分邏輯順序和時(shí)序規(guī)律。比如,設(shè)計(jì)偽隨機(jī)碼發(fā)生器時(shí),可以用移位寄存器序列作為狀態(tài);在設(shè)計(jì)電機(jī)控制電路時(shí),可以以電機(jī)的不同轉(zhuǎn)速作為狀態(tài);在設(shè)計(jì)通信系統(tǒng)時(shí),可以用信號(hào)的狀態(tài)作為狀態(tài)變量等。

輸出:輸出指在某一個(gè)狀態(tài)時(shí)特定發(fā)生的事件。如設(shè)計(jì)電機(jī)控制電路中,如果電機(jī)轉(zhuǎn)速過(guò)高,則輸出為轉(zhuǎn)速過(guò)高報(bào)警,也可以伴隨減速指令或降溫措施等。

輸入:指狀態(tài)機(jī)中進(jìn)入每個(gè)狀態(tài)的條件,有的狀態(tài)機(jī)沒(méi)有輸入條件,其中的狀態(tài)轉(zhuǎn)移較為簡(jiǎn)單,有的狀態(tài)機(jī)有輸入條件,當(dāng)某個(gè)輸入條件存在時(shí)才能轉(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),而與輸入條件無(wú)關(guān)。米勒型狀態(tài)機(jī):米勒型狀態(tài)機(jī)的輸出不僅依賴于當(dāng)前狀態(tài),而且取決于該狀態(tài)的輸入條件。

兩段式、三段式FSM描述方法的基本結(jié)構(gòu)如何

狀態(tài)機(jī)描述時(shí)關(guān)鍵是要描述清楚幾個(gè)狀態(tài)機(jī)的要素,即如何進(jìn)行狀態(tài)轉(zhuǎn)移,每個(gè)狀態(tài)的輸出是什么,狀態(tài)轉(zhuǎn)移的條件等。具體描述時(shí)方法各種各樣,最常見(jiàn)的有三種描述方式。

一段式:整個(gè)狀態(tài)機(jī)寫(xiě)到一個(gè)always模塊里面,在該模塊中既描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入和輸出。二段式:用兩個(gè)always模塊來(lái)描述狀態(tài)機(jī),其中一個(gè)always模塊采用同步時(shí)序描述狀態(tài)轉(zhuǎn)移;另一個(gè)模塊采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律以及輸出。三段式:在兩個(gè)always模塊描述方法基礎(chǔ)上,使用三個(gè)always模塊,一個(gè)always模塊采用同步時(shí)序描述狀態(tài)轉(zhuǎn)移,一個(gè)always采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律,另一個(gè)always模塊描述狀態(tài)輸出(可以用組合電路輸出,也可以時(shí)序電路輸出)。

一般而言,推薦的FSM 描述方法是后兩種。FSM和其他設(shè)計(jì)一樣,最好使用同步時(shí)序方式設(shè)計(jì),以提高設(shè)計(jì)的穩(wěn)定性,消除毛刺。狀態(tài)機(jī)實(shí)現(xiàn)后,一般來(lái)說(shuō),狀態(tài)轉(zhuǎn)移部分是同步時(shí)序電路而狀態(tài)的轉(zhuǎn)移條件的判斷是組合邏輯。

FSM描述何時(shí)使用阻塞賦值,何時(shí)使用非阻塞賦值

為了避免不必要的競(jìng)爭(zhēng)冒險(xiǎn),不論是做兩段式還是三段式FSM 描述時(shí),必須遵循時(shí)序邏輯always模塊使用非阻塞賦值“<=”,即當(dāng)前狀態(tài)向下一狀態(tài)時(shí)序轉(zhuǎn)移,和寄存FSM 輸出等時(shí)序always模塊中都要使用非阻塞賦值;而組合邏輯always模塊使用阻塞賦值“=”,即狀態(tài)轉(zhuǎn)移條件判斷,組合邏輯輸出等always模塊中都要使用阻塞賦值。

一般非阻塞賦值用于時(shí)序邏輯,而阻塞賦值用于組合邏輯;非阻塞賦值語(yǔ)句是并行執(zhí)行的,等到一個(gè)時(shí)鐘完成后才完成賦值,而阻塞賦值是順序執(zhí)行的,下一條賦值語(yǔ)句要等到上一條賦值語(yǔ)句完成后才能賦值,并且阻塞賦值是立即完成的。

三段式FSM描述的兩個(gè)case結(jié)構(gòu)中判斷表達(dá)式與當(dāng)前狀態(tài)和下一個(gè)狀態(tài)寄存器的對(duì)應(yīng)關(guān)系如何

使用一段式建模FSM 的寄存器輸出的時(shí)候,必須要綜合考慮現(xiàn)態(tài)在何種狀態(tài)轉(zhuǎn)移條件下會(huì)進(jìn)入哪些次態(tài),然后在每個(gè)現(xiàn)態(tài)的case分支下分別描述每個(gè)次態(tài)的輸出,這顯然不符合思維習(xí)慣;而三段式建模描述FSM 的狀態(tài)機(jī)輸出時(shí),只需指定case敏感表為次態(tài)寄存器,然后直接在每個(gè)次態(tài)的case分支中描述該狀態(tài)的輸出即可,根本不用考慮狀態(tài)轉(zhuǎn)移條件。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

前華為海思工程師;與非網(wǎng)2022年度影響力創(chuàng)作者;IC技術(shù)圈成員。

微信公眾號(hào)