紀(jì)勇
摘要:對(duì)于數(shù)字邏輯工程師來(lái)說(shuō),設(shè)計(jì)一個(gè)同步有限狀態(tài)機(jī)(FSM)是一項(xiàng)很常見的任務(wù)。該論文討論了若干關(guān)于設(shè)計(jì)有限狀態(tài)機(jī)方面的問(wèn)題,包括用于狀態(tài)分配的狀態(tài)編碼方法,狀態(tài)機(jī)的輸入輸出等等。
關(guān)鍵詞:有限狀態(tài)機(jī);狀態(tài)編碼;狀態(tài)分配
中圖分類號(hào):TP399文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)24-5897-02
Design Technology of State Machine Based on Verilog and VHDL
JI Yong
(Yangzhou Polytechnic Institute, Yangzhou 225127, China)
Abstract: Designing a synchronousfinite state machine (FSM) is a common task for a digital logic engineer. This paper will discuss a vari? ety of issues regarding FSM design, including status coding method for status assignment, input and output of state machine.
Key words: FSM; state coding; state assignment
通常情況下設(shè)計(jì)一個(gè)狀態(tài)機(jī)最重要的決策是使用什么狀態(tài)編碼。一個(gè)不恰當(dāng)?shù)倪x擇會(huì)導(dǎo)致狀態(tài)機(jī)使用太多的邏輯或者運(yùn)行太慢,甚至這兩種壞結(jié)果都會(huì)出現(xiàn)?,F(xiàn)在已經(jīng)開發(fā)出了很多能夠選擇優(yōu)化的狀態(tài)編碼的工具和技術(shù)。這些方法一般都使用了最少的狀態(tài)位或者采取諸如PLA的兩層邏輯實(shí)現(xiàn)。下面將進(jìn)行詳細(xì)討論。
3.1高級(jí)編碼的狀態(tài)分配
一個(gè)高級(jí)編碼的狀態(tài)分配對(duì)于狀態(tài)向量來(lái)說(shuō)只使用很少的觸發(fā)器,同時(shí)需要一個(gè)附加的邏輯來(lái)完成狀態(tài)的編碼和譯碼。
3.1.1一位熱碼編碼
在一位熱碼方式的編碼中,一位狀態(tài)向量表示一個(gè)給定的狀態(tài)。所有其他的狀態(tài)位都為零,因此如果有N個(gè)狀態(tài)就要有N個(gè)狀態(tài)觸發(fā)器。因?yàn)闋顟B(tài)位本身就直接可以用來(lái)指示狀態(tài)機(jī)是否處于一個(gè)特定的狀態(tài),所以狀態(tài)的譯碼是非常簡(jiǎn)單的,也不需要附加的邏輯。使用一位熱碼設(shè)計(jì)技術(shù)具有很多優(yōu)勢(shì):
1)一位熱碼通常運(yùn)行的更快。速度與狀態(tài)的數(shù)量無(wú)關(guān),而是僅僅取決于轉(zhuǎn)換到特定狀態(tài)的數(shù)量。當(dāng)增加了更多的狀態(tài)后,高級(jí)編碼的狀態(tài)機(jī)的速度會(huì)明顯變慢。
2)無(wú)需考慮尋找“最佳的”狀態(tài)編碼的問(wèn)題。當(dāng)修改狀態(tài)機(jī)的設(shè)計(jì)時(shí),這一點(diǎn)具有特別的益處的。因?yàn)楫?dāng)你增加了一些狀態(tài)或者改變了其他一些東西時(shí),一種被認(rèn)為是最佳的設(shè)計(jì)可能就不再是最好的了。而一位編碼對(duì)于任何狀態(tài)機(jī)都可以說(shuō)是最佳的。
3)很容易用硬件描述代碼來(lái)設(shè)計(jì)一位熱碼狀態(tài)機(jī),能夠在沒(méi)有狀態(tài)編碼表的情況下直接根據(jù)狀態(tài)圖編寫。
4)易于修改。當(dāng)增加或者刪除狀態(tài)或者改變激勵(lì)方程時(shí),對(duì)狀態(tài)機(jī)的修改可以在不影響其余部分的情況下完成。
5)相對(duì)于高級(jí)編碼狀態(tài)機(jī),通常不需要占用大量的布線區(qū)域。
6)通過(guò)靜態(tài)時(shí)序分析可以很容易的找出關(guān)鍵路徑。
7)易于調(diào)試。很容易發(fā)現(xiàn)虛假的狀態(tài)變遷,當(dāng)前顯示的狀態(tài)也沒(méi)有很大的意義。
3.1.2準(zhǔn)一位熱碼編碼
如果狀態(tài)機(jī)具有兩組幾乎功能相同的狀態(tài)時(shí)(例如對(duì)同一個(gè)設(shè)備進(jìn)行讀操作和寫操作),就可以使用準(zhǔn)一位熱碼,用一個(gè)標(biāo)志或者一位狀態(tài)位來(lái)指示當(dāng)前有限狀態(tài)機(jī)在哪個(gè)狀態(tài)組里,剩下的狀態(tài)位就是一位熱碼的編碼。這樣對(duì)一個(gè)給定的狀態(tài)進(jìn)行譯碼時(shí)我們就必須檢測(cè)兩個(gè)狀態(tài)位。這種方法擁有純一位熱碼的大部分優(yōu)點(diǎn),但是需要少量的邏輯。不過(guò)需要注意的是雖然標(biāo)志位在技術(shù)上是狀態(tài)向量的組成部分,但最好把標(biāo)志觸發(fā)輸出引腳看成狀態(tài)機(jī)的另一個(gè)輸入。
另一種準(zhǔn)一位熱碼的編碼方法對(duì)初始狀態(tài)使用全零或者“無(wú)熱碼”的編碼。因?yàn)樗械挠|發(fā)器已經(jīng)置零,所以這種編碼使得狀態(tài)機(jī)容易進(jìn)入復(fù)位狀態(tài)。這一點(diǎn)在需要同步復(fù)位的情況下特別有用。
的)。即使在你編寫的代碼中僅僅使用了你確定什么時(shí)候有效的信號(hào),因?yàn)樵O(shè)計(jì)編譯器會(huì)進(jìn)行邏輯優(yōu)化,這種改變會(huì)導(dǎo)致瞬態(tài)干擾。唯一的防止這個(gè)問(wèn)題的方法是帶有使能輸入信號(hào)門電路。這個(gè)使能信號(hào)通常是對(duì)狀態(tài)向量進(jìn)行簡(jiǎn)單的譯碼。只有使能為真時(shí),門電路的輸出才是非零,這樣就不會(huì)出現(xiàn)不確定的情況。門電路的輸出用來(lái)取代有限狀態(tài)機(jī)中的輸入信號(hào)。
有限狀態(tài)機(jī)是重要的邏輯設(shè)計(jì)方法,通過(guò)狀態(tài)轉(zhuǎn)移圖可以將復(fù)雜的控制時(shí)序分解為狀態(tài)之間的轉(zhuǎn)換關(guān)系,并通過(guò)硬件描述語(yǔ)言,使硬件電路設(shè)計(jì)軟件化,提高了EDA設(shè)計(jì)的靈活性和可靠性。該文所討論的有限狀態(tài)機(jī)的設(shè)計(jì)思想具有一定的通用性,有助于在實(shí)踐中快速完成狀態(tài)機(jī)的設(shè)計(jì)。