第九章-有限狀態(tài)機_第1頁
第九章-有限狀態(tài)機_第2頁
第九章-有限狀態(tài)機_第3頁
第九章-有限狀態(tài)機_第4頁
第九章-有限狀態(tài)機_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章有限狀態(tài)機9.1概述有限狀態(tài)機主要功能是用來實現(xiàn)一個數(shù)字電路設(shè)計中的控制部分,它與CPU的功能相似。狀態(tài)機優(yōu)于CPU的地方:1、CPU在實現(xiàn)控制功能的過程中,需要很多的操作指令步驟和硬件操作單元(如ALU);而有限狀態(tài)機中,控制狀態(tài)存儲在多個觸發(fā)器中,表示狀態(tài)轉(zhuǎn)移和控制功能的代碼存儲在門級網(wǎng)絡(luò)中。2、有限狀態(tài)機邏輯通常十分適用于可編程邏輯器件。通過恰當(dāng)?shù)腣HDL描述和EDA工具的綜合,一般可以生成性能極優(yōu)的有限狀態(tài)機,使其在執(zhí)行時間、運行速度和占用資源等方面優(yōu)于由CPU實現(xiàn)的設(shè)計方案。有限狀態(tài)機分為兩類:Moore型----輸出信號僅與當(dāng)前狀態(tài)有關(guān)Mealy型----輸出信號不僅與當(dāng)前狀態(tài)有關(guān),還與所有的輸入信號有關(guān)9.2有限狀態(tài)機的基本描述為了使綜合工具可以將一個完整的VHDL源代碼識別為有限狀態(tài)機,必須還要遵循一定的描述規(guī)則規(guī)定,一個有限狀態(tài)機的描述應(yīng)該包括以下內(nèi)容:◆至少包括一個狀態(tài)信號,它們用來指定有限狀態(tài)機狀態(tài)?!魻顟B(tài)轉(zhuǎn)移指定和輸出指定,它們對應(yīng)于控制步的轉(zhuǎn)移條件?!魰r鐘信號,它是用來進行同步的?!敉交虍惒綇?fù)位信號。只要遵循了上面的描述規(guī)則,我們編寫的VHDL源代碼都是合法的。9.2.1描述方法☆三進程描述

1.狀態(tài)邏輯描述;2.狀態(tài)寄存器描述;3.輸出邏輯描述?!铍p進程描述1.一個進程描述三個中的任何兩個;2.另外一個用一個進程☆單進程描述狀態(tài)邏輯,狀態(tài)寄存器,輸出邏輯描述用一個進程。有限狀態(tài)機的描述列表描述方式進程描述功能三進程描述方式進程1:描述次態(tài)邏輯;進程2:描述狀態(tài)寄存器;進程3:描述輸出邏輯。雙進程描述方式形式1進程1:描述次態(tài)邏輯、輸出邏輯;進程2:描述狀態(tài)寄存器。形式2進程1:描述次態(tài)邏輯、狀態(tài)寄存器;進程2:描述輸出邏輯。形式3進程1:描述狀態(tài)寄存器、輸出邏輯;進程2:描述次態(tài)邏輯。單進程描述方式進程1:描述次態(tài)邏輯、狀態(tài)寄存器和輸出邏輯。利用三進程描述方法和雙進程描述方式的形式來描述有限狀態(tài)機時,可以把有限狀態(tài)的組合邏輯部分和時序邏輯部分分開,這樣有利于有限狀態(tài)機的組合邏輯部分和時序邏輯部分進行測試。不同的描述方式對于綜合的結(jié)果影響很大,一般來說,三進程描述方式和雙進程描述方式中的形式和單進程描述方式的綜合結(jié)果是比較好的,而雙進程描述方式中的形式2和形式3并不常用。9.2.2一個MOORE型有限狀態(tài)機的描述現(xiàn)要求設(shè)計一個存儲控制器,它能夠根據(jù)微處理器的讀周期或者寫周期,分別對存儲器輸出寫使能信號WE和讀使能信號RE。該控制器的輸入信號有三個:微處理的準備就緒信號READY,微處理的讀寫信號READ—WRITE和時鐘信號CLK。工作過程:

READY有效(或上電復(fù)位時)

控制器開始工作并在下一個時鐘周期到來時判斷本次工作是讀M還是寫M(READ-WRITE有效為讀,無效時為寫)

控制器的輸出寫使能信號WE在操作中有效,而讀寫使能信號RE在讀操作中有效。

讀寫完畢后READY標態(tài)本次處理任務(wù)完成,回到空閑狀態(tài)。設(shè)計步驟:1.根據(jù)有限狀態(tài)機與控制器的對應(yīng)關(guān)系。首先根據(jù)控制器的控制步來確定有限狀態(tài)機的狀態(tài)。◆空閑狀態(tài)IDLE◆判斷狀態(tài)DECISION◆讀狀態(tài)READ◆寫狀態(tài)WRITE2.根據(jù)狀態(tài)畫出狀態(tài)轉(zhuǎn)移圖。狀態(tài)轉(zhuǎn)移圖是一個非常重要的概念,它表明了有限狀態(tài)機的狀態(tài)和轉(zhuǎn)移條件,有了狀態(tài)轉(zhuǎn)移圖就可以很容易地寫出有限狀態(tài)機的VHDL描述。idledecisionreadwriteready/readreadreadread_write/read_write/ready/ready3.狀態(tài)機的輸出邏輯所處狀態(tài)reweidle01decision00read10write014.用VHDL語言進行描述(1)三進程描述方式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)機的步驟:1.用定義的狀態(tài)類型去定義信號,狀態(tài)類型為可枚舉類型;2.在進程中描述有限狀態(tài)轉(zhuǎn)移,由于狀態(tài)是當(dāng)前狀態(tài)和輸入信號的函數(shù),所以將它們作為進程的敏感信號。3.在進程中描述狀態(tài)寄存器的邏輯,狀態(tài)寄存器功能是將狀態(tài)轉(zhuǎn)化為現(xiàn)代。由于轉(zhuǎn)化時在時鐘邊,感想時鐘應(yīng)為敏感量。4.在進程中描述輸出邏輯,由于輸出邏輯是根據(jù)當(dāng)前狀態(tài)給輸出信號進行賦值,所以進程的敏感信號是當(dāng)前狀態(tài)信號。(2)雙進程描述方式第一種形式最好,原因是該描述用兩個進程組合邏輯和時序邏輯分開。將三進程描述方式中的NEXTSTATE-LOGIC和OUTPUT-LOGIC合成一個進程STATE-TRANSFEN的的雙進程描述方式的VHDL描述。這種方式比三進程描述方式要簡單得多,VHDL源代碼也要短一些,這樣就會使摸擬過程速度加快,而對綜合結(jié)果卻沒有什么影響,因此一般情況下,我們常采用這種雙進程描述方式。下面用雙進程方式描述存儲控制器的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;三進程描述方式是把次態(tài)邏輯,狀態(tài)寄存器和輸出邏輯方在一個進程中,那么這個進程的敏感信號量應(yīng)該是時鐘clk。9.3有限狀態(tài)機的同步輸出和復(fù)位從有限狀態(tài)機的結(jié)構(gòu)可以知道,時鐘信號和復(fù)位信號對每一個有限狀態(tài)機來說都是很重要的,特別是時鐘信號是不可缺少的。8.2.1同步輸出信號無論是MOORE型有限狀態(tài)機還是MEALY型有限狀態(tài)機,它們的輸出信號都是經(jīng)由組合邏輯電路輸出的,因此輸出信號會產(chǎn)生“毛刺”現(xiàn)象。對于同步電路輸出來說,由于“毛刺”只是發(fā)生在時鐘跳變沿之后的一小段時間里,因此在下一個時鐘跳變沿沒到來時“毛刺”已經(jīng)消失,所以這時“毛刺”現(xiàn)象不會對電路產(chǎn)生影響。但是如果設(shè)計人員在設(shè)計電路的過程中,需要把有限狀態(tài)機的輸出作為使能信號,片選信號,復(fù)位信號或時鐘信號等來使用時,“毛刺”現(xiàn)象將會對電路設(shè)計造成很大的影響,甚至燒毀電路板。因此在這種情況下,我們必須保證有限狀態(tài)機的輸出信號沒有“毛刺”產(chǎn)生。在設(shè)計中消除“毛刺”現(xiàn)象的方法很多,這里介紹一種信號來同步輸出信號的消除“毛刺”現(xiàn)象的方法。利用的方法是用時鐘信號將有限狀態(tài)機的輸出信號加載到另一個寄存器中,該寄存器一般是由D觸發(fā)器構(gòu)成的,它的時鐘信號就是有限狀態(tài)機的時鐘信號。注意:由于附加了一個時鐘同步的寄存器,所以這時的輸出信號將比不加寄存器時的輸出信號晚一個時鐘周期。用時鐘信號同步輸出信號的MOORE型有限狀態(tài)機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,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)機的復(fù)位有限狀態(tài)機的復(fù)位信號也分為同步復(fù)位和異步復(fù)位兩種。同步復(fù)位信號在時鐘跳變沿到來時,將對有限狀態(tài)機進行復(fù)位操作,同時把復(fù)位值賦給輸出信號并使有限狀態(tài)機回到空閑狀態(tài)。為了避免在狀態(tài)轉(zhuǎn)移進程中的每個狀態(tài)分支中都指定到空閑狀態(tài)的轉(zhuǎn)移,可以在狀態(tài)轉(zhuǎn)移進程的開始部分加入一個對同步復(fù)位信號進行判斷的if語句:如果同步復(fù)位信號有效,則直接進入到空閑狀態(tài)并將復(fù)位值賦給輸出信號;如果復(fù)位信號無效,則執(zhí)行接下來的正常狀態(tài)轉(zhuǎ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)錯誤時進行復(fù)位操作,那么采用異步復(fù)位方式要比同步復(fù)位方式好。其主要原因是:同步復(fù)位方式占用較多的額外資源,而異步復(fù)位可以消除引入額外寄存器的可能性。帶有異步復(fù)位信號的VHDL描述十分簡單,只需要在描述狀態(tài)寄存器的進程中引入異步復(fù)位信號即可。State_register:Process(clk,reset)Beginif(reset=‘1’)thenpresent_state<=idle;

elsif(clk’eventandclk=‘1’)thenpresent_state<=next_state;endif;Endprocess;9.4改進的Moore型有限狀態(tài)機從減小輸出信號時延時和消除“毛刺”現(xiàn)象的角度出發(fā),對有限狀態(tài)機進行改進。◆一種是直接把狀態(tài)作為輸出信號的Moore型有限狀態(tài)機;◆并行輸出寄存器譯碼輸出的Moore型有限狀態(tài)機。9.4.1把狀態(tài)作為輸出信號的Moore型有限狀態(tài)機把狀態(tài)機的狀態(tài)本身作為輸出信號,相當(dāng)于去掉了一般有限狀態(tài)機中的輸出邏輯電路。其去掉輸出邏輯的有限狀態(tài)機的原理圖如下:優(yōu)點:◆輸出信號直接來自寄存器,從而避免了“毛刺”的產(chǎn)生。◆少了一級邏輯電路,所以減少了輸出信號的傳輸時延。對于這種改進的Moore型有限狀態(tài)機進行VHDL描述,最重要的工作就是對狀態(tài)進行編碼。存儲控制器有限狀態(tài)機的輸出邏輯的真值表:所處狀態(tài)reweidle00decision00read10write01所處狀態(tài)rewesidle000decision001read100write010從左邊的表格中可以看出,輸出組合“00”出現(xiàn)的頻率高,要區(qū)分idle和decision必須加上一個狀態(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)機并行輸出寄存器的譯碼輸出同樣也是為了減少輸出信號的延時,從而提高有限狀態(tài)機的速度。這種改進就是在進行狀態(tài)鎖存之前,先進行輸出譯碼,然后再把它鎖存到輸出寄存器中。這種方法相當(dāng)于提前作了輸出的譯碼工作,加一個輸出寄存器的目的是為了使譯碼輸出的信號穩(wěn)定并避免“毛刺”現(xiàn)象的產(chǎn)生。這種改進,狀態(tài)機要比以前的設(shè)計嗇更多的寄存器,即占用了更多的邏輯資源。但這種犧牲可以換來速度的提高,在需要很高速度的有限狀態(tài)機中必須要犧牲邏輯資源來換取速度上的提高??梢娺壿嬞Y源和速度是一對矛盾,一方是提高是以犧牲另一方為前提的。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等.壓縮文件請下載最新的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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論