




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章
同步狀態(tài)機(jī)設(shè)計(jì)9/23/20231周曉波北京交通大學(xué)電子信息學(xué)院
xbzhou@51683626內(nèi)容提要9/23/202329.1狀態(tài)機(jī)的結(jié)構(gòu)9.2
Mealy狀態(tài)機(jī)和Moore狀態(tài)機(jī)9.3描述可綜合的狀態(tài)機(jī)9.1
狀態(tài)機(jī)的結(jié)構(gòu)9/23/20233有限狀態(tài)機(jī)(FSM)設(shè)計(jì)是時(shí)序電路設(shè)計(jì)
中很常用的方式控制模塊case,if-else9.1
狀態(tài)機(jī)的結(jié)構(gòu)9/24/20234組合邏輯和時(shí)序邏輯的組合寄存器用于存貯狀態(tài)組合電路用于狀態(tài)譯碼和產(chǎn)生輸出信號(hào)狀態(tài)機(jī)的下一個(gè)狀態(tài)不僅和輸入信號(hào)相關(guān),而且和當(dāng)前狀態(tài)相關(guān)同步時(shí)序表示方法:狀態(tài)圖、狀態(tài)表、流程圖狀態(tài)機(jī)邏輯表達(dá)式9/24/20235下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));狀態(tài)圖表示StateNext_Statein/outin/out9/24/20236內(nèi)容提要9/24/202379.1狀態(tài)機(jī)的結(jié)構(gòu)9.2
Mealy狀態(tài)機(jī)和Moore狀態(tài)機(jī)9.3描述可綜合的狀態(tài)機(jī)狀態(tài)機(jī)分類9/24/20238Mealy狀態(tài)機(jī)Moore狀態(tài)機(jī)Moore狀態(tài)機(jī)輸出信號(hào)=G(當(dāng)前狀態(tài));G9/24/20239FMealy狀態(tài)機(jī)G9/24/202310F輸出信號(hào)=G(當(dāng)前狀態(tài),當(dāng)前輸入);內(nèi)容提要9/24/2023119.1狀態(tài)機(jī)的結(jié)構(gòu)9.2
Mealy狀態(tài)機(jī)和Moore狀態(tài)機(jī)9.3描述可綜合的狀態(tài)機(jī)可綜合的狀態(tài)機(jī)設(shè)計(jì)9/24/202312最常用:alwayscase狀態(tài)轉(zhuǎn)移圖Idle9/24/202313StartStopClearA/G=0!AA/F=1!Reset
/F=0G=0!Reset
/F=0G=0!Reset
|
!A/F=0
G=1狀態(tài)轉(zhuǎn)移圖!Reset
/F=0G=0狀態(tài)轉(zhuǎn)移圖9/24/202314上面的狀態(tài)轉(zhuǎn)移圖表示了一個(gè)四狀態(tài)的有限狀態(tài)機(jī),它的同步時(shí)鐘是Clock,輸入
信號(hào)是A和Reset,輸出信號(hào)是F和G。狀態(tài)的轉(zhuǎn)移只能在同步時(shí)鐘(Clock)的上升沿時(shí)發(fā)生,往哪個(gè)狀態(tài)的轉(zhuǎn)移則取決于目前所在的狀態(tài)和輸入的信號(hào)(Reset
和
A)。Verilog
HDL中,狀態(tài)必須明確賦值,通
常使用參數(shù)(parameters)或宏定義(define)語(yǔ)句加上賦值語(yǔ)句來(lái)實(shí)現(xiàn)。使用參數(shù)(parameters)語(yǔ)句賦狀態(tài)值見(jiàn)下例:9/24/202315//把current
state設(shè)置9/24/202316parameter state1
=
2
'h1, state2
=
2
'h2;...current_state
=
state2;成2'h2...使用宏定義(define)語(yǔ)句賦狀態(tài)值見(jiàn)下例:`define
state1 2'h1`define
state2 2'h2...current_state
=
`state2;
//把current
state設(shè)置成
2
'h29.3.1
用可綜合的Verilog模塊設(shè)計(jì)狀態(tài)機(jī)的典型辦法9/24/202317module fsm
(Clock,
Reset,
A, F,
G);input
Clock,
Reset,A;output
F,G;reg
F,G;reg
[1:0]
state
;parameter
Idle =
2’b00,Start
=
2’b01,Stop
=2’b10,Clear
=
2’b11;例1always
@(posedge
Clock)if(!Reset)beginstate
<=
Idle; F<=0;
G<=0;endelsecase
(state)idle:
beginif
(A)
beginstate
<=
Start;G<=0;endelse state
<=
idle;endstart:
beginif
(!A)
state
<=
Stop;else
state
<=
start;end9/24/202318Stop:
beginif
(A)
beginstate
<=
Clear;F
<=
1;endelse state
<=
Stop;endClear:
beginif
(!A)
beginstate
<=Idle;F<=0;
G<=1;endelse state
<=
Clear;endendcaseendmodule狀態(tài)編碼9/2狀態(tài)編碼二進(jìn)制Grayone-hotstate000000000000001state100100100000010state201001100000100state301101000001000state410011000010000state510110000100000state6110101010000004/2023state711111110000000199.3.2
獨(dú)熱碼表示狀態(tài)的狀態(tài)機(jī)module fsm
(Clock,
Reset,
A, F,
G);input
Clock,
Reset,
A;output
F,G;reg
F,G;reg
[3:0]
state
;parameter9/24/202320IdleStartStopClear=
4’b1000,=
4’b0100,=
4’b0010,=
4’b0001;例29.3.2
獨(dú)熱碼表示狀態(tài)的狀態(tài)機(jī)9/24/202321[例2]與[例1]的主要不同點(diǎn)是狀態(tài)編碼,[例2]采用了獨(dú)熱編碼,而[例1]則采用Gray碼,究竟采用哪一種編碼好要看具體情況而定。對(duì)于
用FPGA實(shí)現(xiàn)的有限狀態(tài)機(jī)建議采用獨(dú)熱碼,因?yàn)殡m然采用獨(dú)熱編碼多用了兩個(gè)觸發(fā)器,但所用組合電路可省下許多,因而使電路的速度和可靠性有顯著提高,而總的單元數(shù)并無(wú)顯著增加。采用了獨(dú)熱編碼后有了多余的狀態(tài),就有一些不可到達(dá)的狀態(tài),為此在CASE語(yǔ)句的
最后需要增加default分支項(xiàng),以確保多余狀態(tài)能回到Idle狀態(tài)。我們還可以再用另一種風(fēng)格的VerilogHDL模型來(lái)表示同一個(gè)有限狀態(tài),在這個(gè)模型中,我們分別用沿觸發(fā)的always
語(yǔ)句和電平敏感的always語(yǔ)句把狀態(tài)機(jī)的觸發(fā)器部分和組合邏輯部分分成兩部分來(lái)描述。9/24/202322module fsm
(Clock,
Reset,
A, F,
G);input
Clock,
Reset,A;output
F,G;reg
[1:0]
state,
Nextstate;parameter
Idle =
2’b00, Start
=
2’b01,Stop
=
2’b10,
Clear
=
2’b11;always
@(posedge
Clock)beginif(!Reset)beginstate
<=
Idle;endelsestate
<=
Nextstate;end9/24/202323always
@(
state
or
A
)beginF=0;G=0;if
(state
==
Idle)beginif
(A)Nextstate
=
Start;elsebegin
Nextstate
=
Idle;G=1;endendelseif
(state
==
Start)if
(!A)Nextstate
=
Stop;elseNextstate
=
Start;elseif
(state
==
Stop)if
(A)Nextstate
=
Clear;elseNextstate
=
Stop;elseif
(state
==
Clear)beginif
(!A)Nextstate
=
Idle;elseNextstate
=
Clear;F=1;endelseNextstate=
Idle;endendmodule
黃色是我加的,懷疑老師寫錯(cuò)了例39/24/2023249.3.3由輸出指定的碼
表示狀態(tài)的狀態(tài)機(jī)9/24/202325輸出直接指定為狀態(tài)碼狀態(tài)碼指定與狀態(tài)機(jī)控制的輸出聯(lián)系起來(lái)狀態(tài)變化=>輸出適用于高速狀態(tài)機(jī)設(shè)計(jì)9.3.3
由輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)9/24/202326前面的例子當(dāng)狀態(tài)轉(zhuǎn)移到clear時(shí),輸出G=1當(dāng)狀態(tài)轉(zhuǎn)移到idle時(shí),輸出F=1因此,G=state[3];F=state[0];9.3.3
由輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)assign
G=state[3];assign
F=state[0];parameter//G_
i_
j_
F//9/24/202327Zero=4’b0_0_0_0,Idle=4’b0_0_0_0,start=4’b0_0_0_0,stop=4’b0_0_0_0,clear=4’b0_0_0_0,例4上面四個(gè)例子是同一個(gè)狀態(tài)機(jī)的四種不
同的Verilog
HDL模型,它們都是可綜合的,在設(shè)計(jì)復(fù)雜程度不同的狀態(tài)機(jī)時(shí)有它們各自的優(yōu)勢(shì)。如用不同的綜合器對(duì)這四個(gè)例子進(jìn)行綜合,綜合出的邏輯電路可能會(huì)有些不同,但邏輯功能是相同的。9/24/2023284.3.4
多輸出狀態(tài)機(jī)9/24/202329把狀態(tài)的變化與輸出信號(hào)的控制分成兩部分來(lái)考慮;還常常把每一個(gè)輸出信號(hào)
寫成一個(gè)獨(dú)立的always模塊來(lái)考慮。有限狀態(tài)機(jī)設(shè)計(jì)的一般步驟9/24/202330邏輯抽象,得出狀態(tài)轉(zhuǎn)換圖狀態(tài)化簡(jiǎn)狀態(tài)分配選定觸發(fā)器的類型并求出狀態(tài)方程、驅(qū)動(dòng)方程和輸出方程按照方程得出邏輯圖狀態(tài)機(jī)設(shè)計(jì)的一般原則9/24/202331狀態(tài)機(jī)的編碼one-hot消耗觸發(fā)器多,組合邏輯少:FPGAgray消耗觸發(fā)器少,組合邏輯多:CPLD三段式狀態(tài)機(jī)三段式狀態(tài)機(jī)
三段式建模描述FSM的狀態(tài)機(jī)輸出時(shí),只需
指定case敏感表為次態(tài)寄存器,然后直接在每個(gè)次態(tài)的case分支中描述該狀態(tài)的輸出即可,不用考慮狀態(tài)轉(zhuǎn)移條件。
三段式描述方法雖然代碼結(jié)構(gòu)復(fù)雜了一些,
但是換來(lái)的優(yōu)勢(shì)是使FSM做到了同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定與毛刺的隱患,而且更利于時(shí)序路徑分組,一般來(lái)說(shuō)在
FPGA/CPLD等可編程邏輯器件上的綜合與布局布線效果更佳。9/24/202332三段式狀態(tài)機(jī)9/24/202333示列如下://第一個(gè)進(jìn)程,同步時(shí)序always模塊,格式化描
述次態(tài)寄存器遷移到現(xiàn)態(tài)寄存器always
@
(posedge
clk
or
negedge
rst_n) //異步復(fù)位if(!rst_n)current_state
<=
IDLE;elsecurrent_state
<=
next_state;//注意,使用的是非
阻塞賦值三段式狀態(tài)機(jī)9/24/202334//第二個(gè)進(jìn)程,組合邏輯always模塊,描述狀態(tài)
轉(zhuǎn)移條件判斷//電平觸發(fā)always
@
(current_state)begincase(current_state)S1:if(...)next_state
=
S2; //阻塞賦值...endcaseend三段式狀態(tài)機(jī)9/24/202335//第三個(gè)進(jìn)程,同步時(shí)序always模塊,格式化描述次態(tài)寄存器輸出always
@
(posedge
clk
or
negedge
rst_n)...//初始化
case(next_state)S1:out1
<=1‘b1; //注意是非阻塞邏輯
S2:out2
<=1'b1;//default的作用是免除綜合工具綜合出鎖存器。default:...endcaseend用Verilog
HDL語(yǔ)言設(shè)計(jì)可綜合的狀態(tài)機(jī)的指導(dǎo)原則9/24/202336因?yàn)榇蠖鄶?shù)FPGA內(nèi)部的觸發(fā)器數(shù)目相當(dāng)
多,又加上獨(dú)熱碼狀態(tài)機(jī)(one
hot
statemachine)的譯碼邏輯最為簡(jiǎn)單,所以在設(shè)計(jì)采用FPGA實(shí)現(xiàn)的狀態(tài)機(jī)時(shí)往往采用獨(dú)熱碼狀態(tài)機(jī)(即每個(gè)狀態(tài)只有一個(gè)寄存器置位的狀態(tài)機(jī))。用Verilog
HDL語(yǔ)言設(shè)計(jì)可綜合的狀態(tài)機(jī)
的指導(dǎo)原則9/24/202337建議采用case,casex,或casez語(yǔ)句來(lái)建立狀態(tài)機(jī)
的模型,因?yàn)檫@些語(yǔ)句表達(dá)清晰明了,可以方便地從當(dāng)前狀態(tài)分支轉(zhuǎn)向下一個(gè)狀態(tài)并設(shè)置輸出。不要忘記寫上case語(yǔ)句的最后一個(gè)分支
default,并將狀態(tài)變量設(shè)為'bx,這就等于告知綜合器:case語(yǔ)句已經(jīng)指定了所有的狀態(tài),這樣綜合器就可以刪除不需要的譯碼電路,使生成的電路簡(jiǎn)潔,并與設(shè)計(jì)要求一致。用Verilog
HDL語(yǔ)言設(shè)計(jì)可綜合的狀態(tài)機(jī)的指導(dǎo)原則9/24/202338狀態(tài)機(jī)應(yīng)該有一個(gè)異步或同步復(fù)位端,以便在通電時(shí)將硬件電路復(fù)位到有效狀態(tài),也可以在操作中將硬件電路復(fù)位(大多數(shù)FPGA結(jié)構(gòu)都允許使用異步復(fù)位端)。同步設(shè)計(jì)(一個(gè)時(shí)鐘沿觸發(fā))狀態(tài)機(jī)的置位與復(fù)位狀態(tài)機(jī)的異步置位與復(fù)位狀態(tài)機(jī)的同步置位與復(fù)位9/24/202339狀態(tài)機(jī)的異步置位與復(fù)位9/24/202340異步置位與復(fù)位是與時(shí)鐘無(wú)關(guān)的.列入always塊的事件控制括號(hào)內(nèi)就能觸
發(fā)always塊的執(zhí)行事件控制語(yǔ)法@(
<沿關(guān)鍵詞時(shí)鐘信號(hào)or沿關(guān)鍵詞復(fù)位信號(hào)or沿關(guān)鍵詞置位信號(hào)>
)狀態(tài)機(jī)的異步置位與復(fù)位9/24/202341事件控制實(shí)例1)異步、高電平有效的置位(時(shí)鐘的上升沿) @(posedge
clk
or
posedge
set)2)異步低電平有效的復(fù)位(時(shí)鐘的上升沿) @(posedge
clk
or
negedge
reset)3)異步低電平有效的置位和高電平有效的復(fù)位(時(shí)鐘的上升沿)@(
posedge
clk
or
negedge
set
or
posedge
reset)狀態(tài)機(jī)的異步置位與復(fù)位4)帶異步高電平有效的置位與復(fù)位的always塊樣板always
@(posedge
clk
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校特色部管理制度
- 學(xué)校飲水機(jī)管理制度
- 學(xué)生科內(nèi)勤管理制度
- 安全不放心管理制度
- 安全績(jī)效獎(jiǎng)管理制度
- 安檢運(yùn)營(yíng)與管理制度
- 安裝科安全管理制度
- 定制品定價(jià)管理制度
- 實(shí)行周計(jì)劃管理制度
- 寵物驢日常管理制度
- DB61∕T 1914-2024 煤礦安全風(fēng)險(xiǎn)分級(jí)管控和隱患排查治理 雙重預(yù)防機(jī)制建設(shè)與運(yùn)行規(guī)范
- 行政事業(yè)單位內(nèi)部控制工作中存在的問(wèn)題與遇到的困難
- 人工智能在醫(yī)療器械中的應(yīng)用-全面剖析
- 智慧農(nóng)旅綜合體項(xiàng)目可行性研究報(bào)告(參考范文)
- 四川2024年11月四川南充市人民政府辦公室遴選(考調(diào))工作人員3人國(guó)家公務(wù)員考試消息筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2025年云南省保山市隆陽(yáng)區(qū)小升初模擬數(shù)學(xué)測(cè)試卷含解析
- 2024年鄭州市公安機(jī)關(guān)招聘警務(wù)輔助人員筆試真題
- 火災(zāi)解封申請(qǐng)書(shū)
- 2025年江蘇鹽城市燕舞集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 對(duì)發(fā)生爆炸及發(fā)現(xiàn)可疑爆炸物品事件的防范與處理預(yù)案
- 整體施工勞務(wù)服務(wù)方案
評(píng)論
0/150
提交評(píng)論