版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章有限狀態(tài)機(jī)9.1概述有限狀態(tài)機(jī)主要功能是用來實(shí)現(xiàn)一個(gè)數(shù)字電路設(shè)計(jì)中的控制部分,它與CPU的功能相似。狀態(tài)機(jī)優(yōu)于CPU的地方:1、CPU在實(shí)現(xiàn)控制功能的過程中,需要很多的操作指令步驟和硬件操作單元(如ALU);而有限狀態(tài)機(jī)中,控制狀態(tài)存儲(chǔ)在多個(gè)觸發(fā)器中,表示狀態(tài)轉(zhuǎn)移和控制功能的代碼存儲(chǔ)在門級(jí)網(wǎng)絡(luò)中。2、有限狀態(tài)機(jī)邏輯通常十分適用于可編程邏輯器件。通過恰當(dāng)?shù)腣HDL描述和EDA工具的綜合,一般可以生成性能極優(yōu)的有限狀態(tài)機(jī),使其在執(zhí)行時(shí)間、運(yùn)行速度和占用資源等方面優(yōu)于由CPU實(shí)現(xiàn)的設(shè)計(jì)方案。有限狀態(tài)機(jī)分為兩類:Moore型----輸出信號(hào)僅與當(dāng)前狀態(tài)有關(guān)Mealy型----輸出信號(hào)不僅與當(dāng)前狀態(tài)有關(guān),還與所有的輸入信號(hào)有關(guān)9.2有限狀態(tài)機(jī)的基本描述為了使綜合工具可以將一個(gè)完整的VHDL源代碼識(shí)別為有限狀態(tài)機(jī),必須還要遵循一定的描述規(guī)則規(guī)定,一個(gè)有限狀態(tài)機(jī)的描述應(yīng)該包括以下內(nèi)容:◆至少包括一個(gè)狀態(tài)信號(hào),它們用來指定有限狀態(tài)機(jī)狀態(tài)。◆狀態(tài)轉(zhuǎn)移指定和輸出指定,它們對(duì)應(yīng)于控制步的轉(zhuǎn)移條件?!魰r(shí)鐘信號(hào),它是用來進(jìn)行同步的。◆同步或異步復(fù)位信號(hào)。只要遵循了上面的描述規(guī)則,我們編寫的VHDL源代碼都是合法的。9.2.1描述方法☆三進(jìn)程描述
1.狀態(tài)邏輯描述;2.狀態(tài)寄存器描述;3.輸出邏輯描述?!铍p進(jìn)程描述1.一個(gè)進(jìn)程描述三個(gè)中的任何兩個(gè);2.另外一個(gè)用一個(gè)進(jìn)程☆單進(jìn)程描述狀態(tài)邏輯,狀態(tài)寄存器,輸出邏輯描述用一個(gè)進(jìn)程。有限狀態(tài)機(jī)的描述列表描述方式進(jìn)程描述功能三進(jìn)程描述方式進(jìn)程1:描述次態(tài)邏輯;進(jìn)程2:描述狀態(tài)寄存器;進(jìn)程3:描述輸出邏輯。雙進(jìn)程描述方式形式1進(jìn)程1:描述次態(tài)邏輯、輸出邏輯;進(jìn)程2:描述狀態(tài)寄存器。形式2進(jìn)程1:描述次態(tài)邏輯、狀態(tài)寄存器;進(jìn)程2:描述輸出邏輯。形式3進(jìn)程1:描述狀態(tài)寄存器、輸出邏輯;進(jìn)程2:描述次態(tài)邏輯。單進(jìn)程描述方式進(jìn)程1:描述次態(tài)邏輯、狀態(tài)寄存器和輸出邏輯。利用三進(jìn)程描述方法和雙進(jìn)程描述方式的形式來描述有限狀態(tài)機(jī)時(shí),可以把有限狀態(tài)的組合邏輯部分和時(shí)序邏輯部分分開,這樣有利于有限狀態(tài)機(jī)的組合邏輯部分和時(shí)序邏輯部分進(jìn)行測(cè)試。不同的描述方式對(duì)于綜合的結(jié)果影響很大,一般來說,三進(jìn)程描述方式和雙進(jìn)程描述方式中的形式和單進(jìn)程描述方式的綜合結(jié)果是比較好的,而雙進(jìn)程描述方式中的形式2和形式3并不常用。9.2.2一個(gè)MOORE型有限狀態(tài)機(jī)的描述現(xiàn)要求設(shè)計(jì)一個(gè)存儲(chǔ)控制器,它能夠根據(jù)微處理器的讀周期或者寫周期,分別對(duì)存儲(chǔ)器輸出寫使能信號(hào)WE和讀使能信號(hào)RE。該控制器的輸入信號(hào)有三個(gè):微處理的準(zhǔn)備就緒信號(hào)READY,微處理的讀寫信號(hào)READ—WRITE和時(shí)鐘信號(hào)CLK。工作過程:
READY有效(或上電復(fù)位時(shí))
控制器開始工作并在下一個(gè)時(shí)鐘周期到來時(shí)判斷本次工作是讀M還是寫M(READ-WRITE有效為讀,無效時(shí)為寫)
控制器的輸出寫使能信號(hào)WE在操作中有效,而讀寫使能信號(hào)RE在讀操作中有效。
讀寫完畢后READY標(biāo)態(tài)本次處理任務(wù)完成,回到空閑狀態(tài)。設(shè)計(jì)步驟:1.根據(jù)有限狀態(tài)機(jī)與控制器的對(duì)應(yīng)關(guān)系。首先根據(jù)控制器的控制步來確定有限狀態(tài)機(jī)的狀態(tài)?!艨臻e狀態(tài)IDLE◆判斷狀態(tài)DECISION◆讀狀態(tài)READ◆寫狀態(tài)WRITE2.根據(jù)狀態(tài)畫出狀態(tài)轉(zhuǎn)移圖。狀態(tài)轉(zhuǎn)移圖是一個(gè)非常重要的概念,它表明了有限狀態(tài)機(jī)的狀態(tài)和轉(zhuǎn)移條件,有了狀態(tài)轉(zhuǎn)移圖就可以很容易地寫出有限狀態(tài)機(jī)的VHDL描述。idledecisionreadwriteready/readreadreadread_write/read_write/ready/ready3.狀態(tài)機(jī)的輸出邏輯所處狀態(tài)reweidle01decision00read10write014.用VHDL語言進(jìn)行描述(1)三進(jìn)程描述方式Libraryieee;Useieee.std_logic_1164.all;Entitystore_controllerisport(ready:instd_logic;
clk:instd_logic;read_write:instd_logic;we,re:outstd_loigc);Endstore_controller;Architecturestate_machineofstore_controlleristypestate_typeis(idle,decision,read,write);signalpresent_state,next_state:state_type;Begin
nextstate_logic:process(prestent_state,ready,read_write)begin
casepresent_stateiswhenidle=>if(ready=‘1’)thennext_state<=decision;elsenext_state<=idle;endif;
whendecision=>if(read_write=‘1’)thennext_state<=read;elsenext_state<=write;endif;whenread=>if(ready=‘1’)thennext_state<=idle;elsenext_state<=read;endif;whenwrite=>if(ready=‘1’)thennext_state<=idle;elsenext_state<=write;endif;Endcase;Endprocess;State_rigister:Process(clk)beginif(clk’eventandclk=‘1’)thenpresent_state<=next_state;endif;Endprocess;Output_logic:process(present_state)begincasepresent_stateiswhenidle=>we<=‘0’;re<=‘0’;whendecision=>we<=‘0’;re<=‘0’;whenread=>we<=‘0’;re<=‘1’;whenwrite=>we<=‘1’;re<=‘0’;endcase;endprocess;Endstate_machine;從上面的描述中,可以總結(jié)出用VHDL描述有限狀態(tài)機(jī)的步驟:1.用定義的狀態(tài)類型去定義信號(hào),狀態(tài)類型為可枚舉類型;2.在進(jìn)程中描述有限狀態(tài)轉(zhuǎn)移,由于狀態(tài)是當(dāng)前狀態(tài)和輸入信號(hào)的函數(shù),所以將它們作為進(jìn)程的敏感信號(hào)。3.在進(jìn)程中描述狀態(tài)寄存器的邏輯,狀態(tài)寄存器功能是將狀態(tài)轉(zhuǎn)化為現(xiàn)代。由于轉(zhuǎn)化時(shí)在時(shí)鐘邊,感想時(shí)鐘應(yīng)為敏感量。4.在進(jìn)程中描述輸出邏輯,由于輸出邏輯是根據(jù)當(dāng)前狀態(tài)給輸出信號(hào)進(jìn)行賦值,所以進(jìn)程的敏感信號(hào)是當(dāng)前狀態(tài)信號(hào)。(2)雙進(jìn)程描述方式第一種形式最好,原因是該描述用兩個(gè)進(jìn)程組合邏輯和時(shí)序邏輯分開。將三進(jìn)程描述方式中的NEXTSTATE-LOGIC和OUTPUT-LOGIC合成一個(gè)進(jìn)程STATE-TRANSFEN的的雙進(jìn)程描述方式的VHDL描述。這種方式比三進(jìn)程描述方式要簡(jiǎn)單得多,VHDL源代碼也要短一些,這樣就會(huì)使摸擬過程速度加快,而對(duì)綜合結(jié)果卻沒有什么影響,因此一般情況下,我們常采用這種雙進(jìn)程描述方式。下面用雙進(jìn)程方式描述存儲(chǔ)控制器的VHDL程序。Libraryieee;Useieee.std_logic_1164.all;Entitystore_controllerisport(ready:instd_logic;clk:instd_logic;read_write:instd_logic;we,re:outstd_loigc);Endstore_controller;Architecturestate_machineofstore_controlleristypestate_typeis(idle,decision,read,write);signalpresent_state,next_state:state_type;BeginState_transfer:process(prestent_state,ready,read_write)begincasepresent_stateiswhenidle=>we<=‘0’;re<=‘0’if(ready=‘1’)thennext_state<=decision;elsenext_state<=idle;endif;whendecision=>we<=‘0’;re<=‘0’if(read_write=‘1’)thennext_state<=read;elsenext_state<=write;endif;whenread=>we<=‘0’;re<=‘1’if(ready=‘1’)thennext_state<=idle;elsenext_state<=read;endif;whenwrite=>we<=‘1’;re<=‘0’if(read_write=‘1’)thennext_state<=idle;elsenext_state<=write;endif;endcase;Endprocess;State_rigister:Process(clk)beginif(clk’eventandclk=‘1’)thenpresent_state<=next_state;endif;Endprocess;Endstate_machine;三進(jìn)程描述方式是把次態(tài)邏輯,狀態(tài)寄存器和輸出邏輯方在一個(gè)進(jìn)程中,那么這個(gè)進(jìn)程的敏感信號(hào)量應(yīng)該是時(shí)鐘clk。9.3有限狀態(tài)機(jī)的同步輸出和復(fù)位從有限狀態(tài)機(jī)的結(jié)構(gòu)可以知道,時(shí)鐘信號(hào)和復(fù)位信號(hào)對(duì)每一個(gè)有限狀態(tài)機(jī)來說都是很重要的,特別是時(shí)鐘信號(hào)是不可缺少的。8.2.1同步輸出信號(hào)無論是MOORE型有限狀態(tài)機(jī)還是MEALY型有限狀態(tài)機(jī),它們的輸出信號(hào)都是經(jīng)由組合邏輯電路輸出的,因此輸出信號(hào)會(huì)產(chǎn)生“毛刺”現(xiàn)象。對(duì)于同步電路輸出來說,由于“毛刺”只是發(fā)生在時(shí)鐘跳變沿之后的一小段時(shí)間里,因此在下一個(gè)時(shí)鐘跳變沿沒到來時(shí)“毛刺”已經(jīng)消失,所以這時(shí)“毛刺”現(xiàn)象不會(huì)對(duì)電路產(chǎn)生影響。但是如果設(shè)計(jì)人員在設(shè)計(jì)電路的過程中,需要把有限狀態(tài)機(jī)的輸出作為使能信號(hào),片選信號(hào),復(fù)位信號(hào)或時(shí)鐘信號(hào)等來使用時(shí),“毛刺”現(xiàn)象將會(huì)對(duì)電路設(shè)計(jì)造成很大的影響,甚至燒毀電路板。因此在這種情況下,我們必須保證有限狀態(tài)機(jī)的輸出信號(hào)沒有“毛刺”產(chǎn)生。在設(shè)計(jì)中消除“毛刺”現(xiàn)象的方法很多,這里介紹一種信號(hào)來同步輸出信號(hào)的消除“毛刺”現(xiàn)象的方法。利用的方法是用時(shí)鐘信號(hào)將有限狀態(tài)機(jī)的輸出信號(hào)加載到另一個(gè)寄存器中,該寄存器一般是由D觸發(fā)器構(gòu)成的,它的時(shí)鐘信號(hào)就是有限狀態(tài)機(jī)的時(shí)鐘信號(hào)。注意:由于附加了一個(gè)時(shí)鐘同步的寄存器,所以這時(shí)的輸出信號(hào)將比不加寄存器時(shí)的輸出信號(hào)晚一個(gè)時(shí)鐘周期。用時(shí)鐘信號(hào)同步輸出信號(hào)的MOORE型有限狀態(tài)機(jī)VHDL描述——存儲(chǔ)控制器。Libraryieee;Useieee.std_logic_1164.all;Entitystore_controllerisport(ready:instd_logic;clk:instd_logic;read_write:instd_logic;we,re:outstd_loigc);Endstore_controller;Architecturestate_machineofstore_controlleristypestate_typeis(idle,decision,read,write);signalpresent_state,next_state:state_type;BeginState_transfer:process(prestent_state,ready,read_write,clk)beginIf(clk’eventandclk=‘1’)then
casepresent_stateiswhenidle=>we<=‘0’;re<=‘0’if(ready=‘1’)thennext_state<=decision;elsenext_state<=idle;endif;whendecision=>we<=‘0’;re<=‘0’if(read_write=‘1’)thennext_state<=read;elsenext_state<=write;endif;whenread=>we<=‘0’;re<=‘1’if(ready=‘1’)thennext_state<=idle;elsenext_state<=read;endif;whenwrite=>we<=‘1’;re<=‘0’if(read_write=‘1’)thennext_state<=idle;elsenext_state<=write;endif;endcase;
endif;endprocess;State_rigister:Process(clk)beginif(clk’eventandclk=‘1’)thenpresent_state<=next_state;endif;Endprocess;Endstate_machine;9.3.2有限狀態(tài)機(jī)的復(fù)位有限狀態(tài)機(jī)的復(fù)位信號(hào)也分為同步復(fù)位和異步復(fù)位兩種。同步復(fù)位信號(hào)在時(shí)鐘跳變沿到來時(shí),將對(duì)有限狀態(tài)機(jī)進(jìn)行復(fù)位操作,同時(shí)把復(fù)位值賦給輸出信號(hào)并使有限狀態(tài)機(jī)回到空閑狀態(tài)。為了避免在狀態(tài)轉(zhuǎn)移進(jìn)程中的每個(gè)狀態(tài)分支中都指定到空閑狀態(tài)的轉(zhuǎn)移,可以在狀態(tài)轉(zhuǎn)移進(jìn)程的開始部分加入一個(gè)對(duì)同步復(fù)位信號(hào)進(jìn)行判斷的if語句:如果同步復(fù)位信號(hào)有效,則直接進(jìn)入到空閑狀態(tài)并將復(fù)位值賦給輸出信號(hào);如果復(fù)位信號(hào)無效,則執(zhí)行接下來的正常狀態(tài)轉(zhuǎn)移進(jìn)程。State_transfer:Process(reset,present_state,ready,read_write)Begin
if(reset=‘1’)thenre<=‘-’;we<=‘-’;next_state<=idle;
elsecasepresent_stateiswhenidle=>we<=‘0’;re<=‘0’;---endcase;
endif;Endprocessstate_transfer;異步復(fù)位如果只需要在上電復(fù)位和系統(tǒng)錯(cuò)誤時(shí)進(jìn)行復(fù)位操作,那么采用異步復(fù)位方式要比同步復(fù)位方式好。其主要原因是:同步復(fù)位方式占用較多的額外資源,而異步復(fù)位可以消除引入額外寄存器的可能性。帶有異步復(fù)位信號(hào)的VHDL描述十分簡(jiǎn)單,只需要在描述狀態(tài)寄存器的進(jìn)程中引入異步復(fù)位信號(hào)即可。State_register:Process(clk,reset)Beginif(reset=‘1’)thenpresent_state<=idle;
elsif(clk’eventandclk=‘1’)thenpresent_state<=next_state;endif;Endprocess;9.4改進(jìn)的Moore型有限狀態(tài)機(jī)從減小輸出信號(hào)時(shí)延時(shí)和消除“毛刺”現(xiàn)象的角度出發(fā),對(duì)有限狀態(tài)機(jī)進(jìn)行改進(jìn)?!粢环N是直接把狀態(tài)作為輸出信號(hào)的Moore型有限狀態(tài)機(jī);◆并行輸出寄存器譯碼輸出的Moore型有限狀態(tài)機(jī)。9.4.1把狀態(tài)作為輸出信號(hào)的Moore型有限狀態(tài)機(jī)把狀態(tài)機(jī)的狀態(tài)本身作為輸出信號(hào),相當(dāng)于去掉了一般有限狀態(tài)機(jī)中的輸出邏輯電路。其去掉輸出邏輯的有限狀態(tài)機(jī)的原理圖如下:優(yōu)點(diǎn):◆輸出信號(hào)直接來自寄存器,從而避免了“毛刺”的產(chǎn)生?!羯倭艘患?jí)邏輯電路,所以減少了輸出信號(hào)的傳輸時(shí)延。對(duì)于這種改進(jìn)的Moore型有限狀態(tài)機(jī)進(jìn)行VHDL描述,最重要的工作就是對(duì)狀態(tài)進(jìn)行編碼。存儲(chǔ)控制器有限狀態(tài)機(jī)的輸出邏輯的真值表:所處狀態(tài)reweidle00decision00read10write01所處狀態(tài)rewesidle000decision001read100write010從左邊的表格中可以看出,輸出組合“00”出現(xiàn)的頻率高,要區(qū)分idle和decision必須加上一個(gè)狀態(tài)信息來區(qū)分,如右邊表格中的s。Architecturestate_machineofstore_controlleristypestate_typeisarray(2downto0)ofstd_logic;constantidle:state_type:=“000”;constantdecision:state_type:=“001”;constantread:state_type:=“100”;constantwrite:state_type:=“010”;signalstate:state_type;beginstate_transfer:process(clk)beginif(reset=‘1’)thenstate<=idle;
elsif(clk’eventandclk=‘1’)thencasestateis
whenidle=>if(ready=‘1’)thenstate<=decision;elsestate<=idle;endif;whendecision=>if(read_write=‘1’)thenstate<=read;elsestate<=write;endif;whenread=>if(ready=‘1’)thenstate<=idle;elsestate<=read;endif;whenwrite=>if(ready=‘1’)thenstate<=idle;elsestate<=write;endif;whenothers=>state<=“---”;endcase;endif;endprocess;re<=state(2);we<=state(1);endstate_machine;9.4.2并行輸出寄存器的譯碼輸出的Moore型有限狀態(tài)機(jī)并行輸出寄存器的譯碼輸出同樣也是為了減少輸出信號(hào)的延時(shí),從而提高有限狀態(tài)機(jī)的速度。這種改進(jìn)就是在進(jìn)行狀態(tài)鎖存之前,先進(jìn)行輸出譯碼,然后再把它鎖存到輸出寄存器中。這種方法相當(dāng)于提前作了輸出的譯碼工作,加一個(gè)輸出寄存器的目的是為了使譯碼輸出的信號(hào)穩(wěn)定并避免“毛刺”現(xiàn)象的產(chǎn)生。這種改進(jìn),狀態(tài)機(jī)要比以前的設(shè)計(jì)嗇更多的寄存器,即占用了更多的邏輯資源。但這種犧牲可以換來速度的提高,在需要很高速度的有限狀態(tài)機(jī)中必須要犧牲邏輯資源來換取速度上的提高。可見邏輯資源和速度是一對(duì)矛盾,一方是提高是以犧牲另一方為前提的。Architecturestate_machineofstore_controlleristypestate_typeis(idle,decision,read,write);signalpresent_state,next_state:state_type;signalre_tmp,we_tmp:std_logic;beginstate_transfer:process(reset,present_state,ready,read_write)begincasepresent_stateiswhenidle=>if(ready=‘1’)then
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版汽車融資租賃合同示范文本(含電子簽約)3篇
- 2025年度馬戲團(tuán)專業(yè)演出設(shè)備租賃合同3篇
- 二零二五年度地?zé)豳Y源打井開發(fā)與利用合同3篇
- 二零二五版模具行業(yè)財(cái)務(wù)顧問服務(wù)合同4篇
- 2025年度城市綠化工程苗木及配套設(shè)施采購年度合同3篇
- 二零二五年度民間借款合同(含金融消費(fèi)者權(quán)益保護(hù))
- 二零二五年度電子信息技術(shù)ICP證年審服務(wù)合同4篇
- 2025年保險(xiǎn)科技的市場(chǎng)潛力
- 2025年度綠色農(nóng)業(yè)貸款合同4篇
- 課題申報(bào)參考:美對(duì)華VC脫鉤對(duì)中國企業(yè)關(guān)鍵核心技術(shù)突破的沖擊及間接掛鉤策略研究-共同所有權(quán)視角
- 暴發(fā)性心肌炎查房
- 口腔醫(yī)學(xué)中的人工智能應(yīng)用培訓(xùn)課件
- 工程質(zhì)保金返還審批單
- 【可行性報(bào)告】2023年電動(dòng)自行車項(xiàng)目可行性研究分析報(bào)告
- 五月天歌詞全集
- 商品退換貨申請(qǐng)表模板
- 實(shí)習(xí)單位鑒定表(模板)
- 機(jī)械制造技術(shù)-成都工業(yè)學(xué)院中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 數(shù)字媒體應(yīng)用技術(shù)專業(yè)調(diào)研方案
- 2023年常州市新課結(jié)束考試九年級(jí)數(shù)學(xué)試卷(含答案)
- 正常分娩 分娩機(jī)制 助產(chǎn)學(xué)課件
評(píng)論
0/150
提交評(píng)論