配套課程數(shù)字邏輯設(shè)計(jì)lec7狀態(tài)機(jī)_第1頁
配套課程數(shù)字邏輯設(shè)計(jì)lec7狀態(tài)機(jī)_第2頁
配套課程數(shù)字邏輯設(shè)計(jì)lec7狀態(tài)機(jī)_第3頁
配套課程數(shù)字邏輯設(shè)計(jì)lec7狀態(tài)機(jī)_第4頁
配套課程數(shù)字邏輯設(shè)計(jì)lec7狀態(tài)機(jī)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

狀態(tài)機(jī)設(shè)計(jì)戰(zhàn)略發(fā)展中心技術(shù)部2015-3-2

版本管理修改記錄審核記錄版本號.作者描述修改日期v0.1陳和炯創(chuàng)建2015-3-2版本號.職務(wù)簽名修改日期大綱FSM概述Mealy與Moore型狀態(tài)機(jī)有限狀態(tài)機(jī)的Verilog描述狀態(tài)編碼方式小結(jié)有限狀態(tài)機(jī)概述概述有限狀態(tài)機(jī)(finite-statemachine,FSM),簡稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。它是一組觸發(fā)器的輸出狀態(tài)隨著時(shí)鐘和輸入信號按照一定的規(guī)律變化的一種機(jī)制或過程。任何時(shí)序電路都可以表示為有限狀態(tài)機(jī),有限狀態(tài)機(jī)是實(shí)現(xiàn)高可靠邏輯控制的重要途徑,是大型數(shù)字系統(tǒng)設(shè)計(jì)中的重要組成部分,尤其是進(jìn)行復(fù)雜的時(shí)序邏輯電路的實(shí)現(xiàn)。本章將采用VerilogHDL對有限狀態(tài)機(jī)的設(shè)計(jì)進(jìn)行介紹。有限狀態(tài)機(jī)概述FSM的結(jié)構(gòu)下圖表示的是數(shù)字電路設(shè)計(jì)中常用的時(shí)鐘同步狀態(tài)機(jī)的結(jié)構(gòu)。其中狀態(tài)寄存器是由一組觸發(fā)器組成,用來記憶狀態(tài)機(jī)當(dāng)前所處的狀態(tài);組合邏輯F控制狀態(tài)是否改變、以及怎樣改變;組合邏輯G控制狀態(tài)機(jī)的輸出大綱FSM概述Mealy與Moore型狀態(tài)機(jī)有限狀態(tài)機(jī)的Verilog描述狀態(tài)編碼方式小結(jié)Moore型狀態(tài)機(jī)FSM分類FSM根據(jù)輸出信號與當(dāng)前狀態(tài)以及輸入信號的關(guān)系分為:Moore型狀態(tài)機(jī)和Mealy型狀態(tài)機(jī),前者也被稱為摩爾型狀態(tài)機(jī),后者被稱為米勒型狀態(tài)機(jī)Moore型狀態(tài)機(jī)Moore型狀態(tài)機(jī)的輸出只與當(dāng)前的狀態(tài)有關(guān),也就是當(dāng)前的狀態(tài)決定輸出,而與此時(shí)的輸入無關(guān),輸入只決定狀態(tài)機(jī)的狀態(tài)改變,不影響電路最終的信號輸出。Mealy型狀態(tài)機(jī)Mealy型狀態(tài)機(jī)Mealy型狀態(tài)機(jī)的輸出不僅與當(dāng)前的狀態(tài)有關(guān),還與當(dāng)前的輸入信號有關(guān),即當(dāng)前的輸入信號和當(dāng)前的狀態(tài)共同決定輸出。通常我們在輸出邏輯G后面再加一組觸發(fā)器,讓G所有的輸出信號在下一個(gè)時(shí)鐘跳變沿時(shí)同時(shí)存入寄存器組,即完全同步地輸出。對于Mealy型狀態(tài)機(jī),輸出同步不僅會帶來運(yùn)行性能的提升,還會增加系統(tǒng)的穩(wěn)定性:防止輸出信號出現(xiàn)毛刺,防止組合回路的產(chǎn)生。Mealy與Moore型狀態(tài)機(jī)Mealy與Moore型狀態(tài)機(jī)區(qū)別很明顯,這兩種電路結(jié)構(gòu)除了在輸出部分有些不同外,其他地方都是相同的。也是由于輸出不同,導(dǎo)致Mealy型是異步狀態(tài)機(jī),而Moore型是同步狀態(tài)機(jī)。在實(shí)際設(shè)計(jì)工作中,其實(shí)大部分狀態(tài)機(jī)都是屬于Mealy狀態(tài)機(jī)。因?yàn)闋顟B(tài)機(jī)的輸出中或多或少有幾個(gè)屬于Mealy類型的輸出。由于Mealy型狀態(tài)機(jī)輸出進(jìn)行了同步輸出,因此Moore型FSM的輸出邏輯相對于Mealy型FSM的輸出邏輯簡單了許多,僅僅是對狀態(tài)寄存器進(jìn)行譯碼的組合邏輯。大綱FSM概述Mealy與Moore型狀態(tài)機(jī)有限狀態(tài)機(jī)的Verilog描述狀態(tài)編碼方式小結(jié)FSM的Verilog描述有限狀態(tài)機(jī)的描述方法在VerilogHDL中可以用許多方法來描述有限狀態(tài)機(jī),最常用的方法是用always語句和case語句。根據(jù)always塊的使用情況可以分成一段式,兩段式,三段式等。接下來將通過一系列示例來介紹這些方法。狀態(tài)轉(zhuǎn)移圖:一般情況下,為更直觀的考慮狀態(tài)機(jī)的功能,會首先畫出狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖。狀態(tài)轉(zhuǎn)移圖右圖所示的狀態(tài)轉(zhuǎn)移圖表示了一個(gè)4狀態(tài)的有限狀態(tài)機(jī),其輸入是A和Reset,輸出是K2和K1。當(dāng)條件滿足時(shí),狀態(tài)轉(zhuǎn)移到箭頭所示方向。說明:“A/K1=0”表示當(dāng)A為真時(shí),K1=0,且狀態(tài)轉(zhuǎn)移接下來將給出不同方式的Verilog代碼StartIdleClearStopA/K1=0!A/K2=0,K1=0!A/K2=0,K1=1A/K2=1!AA!AA例1:一段式編碼modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[1:0]state;parameter Idle =2'b00, Start =2'b01, Stop =2'b10, Clear =2'b11;always@(posedgeClock)

if(!Reset)begin state<=Idle;K2 <=0;K1 <=0;

end

else

case(state) Idle:if(A)beginstate<=Start;K1<=0;

end

elsestate<=Idle; Start:if(!A)state<=Stop;

elsestate<=Start; Stop:if(A)begin

state<=Clear;K2<=1;

end

else

begin

state<=Stop;

end例1:一段式編碼該例子是一個(gè)一段式的有限狀態(tài)機(jī),它的狀態(tài)轉(zhuǎn)移,輸出等操作都在一個(gè)always塊中描述的。這種一段式的描述不清晰簡介,不易于維護(hù),不易于附加時(shí)序約束,使綜合器和布局布線器難于優(yōu)化。因此對設(shè)計(jì)要求較高的不推薦使用此描述方法。 Clear:if(!A)begin state <=Idle; K1 <=1; K2 <=0;

end

else

begin state <=Clear;

end

default:state <=2'bxx;endcaseendmodule例2:二段式編碼modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[1:0]cstate,nstate;parameterIdle=2'b00, Start=2'b01, Stop=2'b10, Clear=2'b11;always@(posedgeClock)

if(!Reset)begin cstate<=Idle; K2 <=0;K1 <=0;

end

elsecstate<=nstate;always@(cstateorA)

case(cstate) Idle:if(A)begin nstate=Start; K1=0;

end

elsenstate=Idle; Start:if(!A) nstate=Stop;

elsenstate=Start; Stop:if(A)begin

nstate=Clear;K2=1;

end

elsenstate=Stop; 例2:二段式編碼兩段式FSM的核心是:一個(gè)always模塊采用同步時(shí)序描述狀態(tài)轉(zhuǎn)移;另一個(gè)模塊采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律。需要注意的是這個(gè)同步時(shí)序模塊的賦值采用非阻塞賦值“<=”。組合邏輯模塊的賦值要采用阻塞賦值“=”。Clear:if(!A)begin nstate=Idle; K1 =1;K2=0;

end

elsenstate=Clear;default:nstate=2'bxx;endcaseendmodule例3:三段式編碼modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[1:0]cstate,nstate;parameter Idle =2'b00, Start =2'b01, Stop =2'b10, Clear =2'b11;always@(posedgeClock)

if(!Reset)begin cstate<=Idle; K2<=0;K1<=0;

endelsecstate<=nstate;always@(cstateorA)

case(cstate) Idle:if(A)nstate=Start;

elsenstate=Idle; Start:if(!A) nstate=Stop;

elsenstate=Start;

Stop:if(A)

nstate=Clear;

elsenstate=Stop; Clear:if(!A) nstate=Idle;

elsenstate=Clear;default:nstate=2'bxx;

endcase例3:三段式編碼三段式描述采用了三個(gè)always塊來完成,相對于兩段式這個(gè)always塊用于描述狀態(tài)轉(zhuǎn)移條件判斷;另一個(gè)always塊用于描述寄存器輸出。雖然代碼結(jié)構(gòu)復(fù)雜了一些,但是換來的優(yōu)勢是:使FSM做到了同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定與毛刺的隱患,而且更利于時(shí)序路徑分組。一般來說在FPGA/CPLD等可編程邏輯器件上的綜合與布局布線效果更佳。這種描述風(fēng)格比較適合大型的狀態(tài)機(jī),查錯(cuò)和修改比較容易。always@(posedgeClock)

if(!Reset)begin K2=0; K1=0;

end

else

begin

if((nstate==Clear)

&!A) K1=1;

elseK1=0;

if((nstate==Stop)&A) K2=1;

elseK2=0;

end

endmoduleMealy型狀態(tài)機(jī)描述Mealy型狀態(tài)機(jī)描述在前面所列出的例1、例2和例3均是Mealy型狀態(tài)機(jī),因?yàn)樗鼈兊妮敵鲂盘朘1、K2的值不僅與當(dāng)前狀態(tài)state或cstate有關(guān),還與輸入信號A有關(guān)。因?yàn)檩斎胄盘柨梢灾苯佑绊戄敵鲂盘?,不依賴與時(shí)鐘的同步,所以它屬于異步時(shí)序電路。以例3為例,可以很容易看出K2、K1最終輸出不僅取決于當(dāng)前狀態(tài)cstate有關(guān),還與輸入信號A有關(guān)always@(posedgeClock)

if(!Reset)begin K2=0; K1=0;

end elsebegin if((nstate==Clear)&!A)

K1=1; elseK1=0;

elsebegin

if((nstate==Clear)&!A) K1=1;

elseK1=0;

endMoore型狀態(tài)機(jī)描述Moore型狀態(tài)機(jī)描述根據(jù)Moore型狀態(tài)機(jī)的定義可知,輸出信號僅為當(dāng)前狀態(tài)的函數(shù),與輸入信號無關(guān)。輸入信號對輸出信號的影響,只能通過時(shí)鐘信號到來時(shí)輸入信號去改變當(dāng)前狀態(tài)的值,再由當(dāng)前狀態(tài)去改變輸出。因此輸出信號的改變與時(shí)鐘同步,屬于同步時(shí)序電路。仍然以例3為例,我們只需要把最后一個(gè)always塊的敏感信號表修改為如下形式即可(這樣也修改了此狀態(tài)機(jī)的功能)always@(cstate)begin

if(cstate==Clear)K1=1;

elseK1=0;

if(cstate==Stop)K2=1;

elseK2=0;end大綱FSM概述Mealy與Moore型狀態(tài)機(jī)有限狀態(tài)機(jī)的Verilog描述狀態(tài)編碼方式小結(jié)狀態(tài)編碼方式常用編碼方式在Verilog中編碼方式有很多種,如二進(jìn)制碼、余三碼、獨(dú)熱碼等,用戶還可以自定義的任意編碼方式。最常用的編碼方式有二進(jìn)制編碼(Binary)、格雷碼(Gray-code)編碼和獨(dú)熱碼(One-hot)編碼。二進(jìn)制編碼:也可稱連續(xù)編碼,也就是碼元值的大小是連續(xù)變化的。如:S0=3'd0,S1=3'd1,S2=3'd2,S3=3'd3....格雷碼:格雷碼的相鄰碼元值間只有一位是不同的。如:S0=3'b000,S1=3'b001,S2=3'b011,S3=3'b010....獨(dú)熱碼:獨(dú)熱碼值的每個(gè)碼元值只有一位是‘1’,其他位都是‘0’。如:S0=3'b001,S1=3'b010,S2=3'b100狀態(tài)編碼方式常用狀態(tài)編碼比較二進(jìn)制編碼、格雷碼編碼使用最少的觸發(fā)器,消耗較多的組合邏輯,而獨(dú)熱碼編碼反之。獨(dú)熱碼編碼的最大優(yōu)勢在于狀態(tài)比較時(shí)僅僅需要比較一個(gè)位,從一定程度上簡化了譯碼邏輯。雖然在需要表示同樣的狀態(tài)數(shù)時(shí),獨(dú)熱編碼占用較多的位,也就是消耗較多的觸發(fā)器,但這些額外觸發(fā)器占用的面積可與譯碼電路省下來的面積相抵消。在CPLD中,由于器件擁有較多地組合邏輯資源,所以CPLD多使用二進(jìn)制編碼或格雷碼,而FPGA更多地提供觸發(fā)器資源,所以在FPGA中多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論