




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
有限狀態(tài)機(finite-statemachine,縮寫:FSM)又稱有限狀態(tài)自動機,簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間轉(zhuǎn)移和動作等行為的數(shù)學模型。狀態(tài)機由狀態(tài)寄存器和組合邏輯電路構(gòu)成,能夠根據(jù)控制信號按照預(yù)先設(shè)定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,協(xié)調(diào)相關(guān)信號動作,完成特定操作的控制。在VHDL程序設(shè)計的實用時序邏輯系統(tǒng)中,狀態(tài)機是應(yīng)用廣泛的電路模塊,其在運行速度的高效、執(zhí)行時間的確定性和高可靠性方面都顯現(xiàn)出強大的優(yōu)勢。項目6狀態(tài)機的VHDL程序描述1.狀態(tài)機狀態(tài)機是以描述控制特性為主的建模方法,它可以應(yīng)用于從系統(tǒng)分析到設(shè)計的所有階段。狀態(tài)機的基本操作有兩種:(1)狀態(tài)機內(nèi)部狀態(tài)轉(zhuǎn)換狀態(tài)機內(nèi)部狀態(tài)轉(zhuǎn)換操作使狀態(tài)機經(jīng)歷一系列狀態(tài),下一狀態(tài)由狀態(tài)譯碼器根據(jù)當前狀態(tài)和輸入條件決定。(2)產(chǎn)生輸出信號序列產(chǎn)生輸出信號序列操作是根據(jù)當前狀態(tài)和輸入條件確定輸出信號,由輸出譯碼器輸出信號。典型的狀態(tài)機有兩種:Mealy狀態(tài)機和Moore狀態(tài)機。項目6狀態(tài)機的VHDL程序描述2.一般狀態(tài)機的VHDL程序描述一般狀態(tài)機的結(jié)構(gòu)如圖6.9所示,狀態(tài)機的VHDL程序描述通常用枚舉類數(shù)據(jù)類型來定義狀態(tài)機的狀態(tài),使用多進程方式來描述狀態(tài)機的內(nèi)部邏輯。通常包括說明部分、主控時序進程、主控組合進程和輔助進程等。項目6狀態(tài)機的VHDL程序描述圖6.9一般狀態(tài)機的結(jié)構(gòu)結(jié)構(gòu)框圖(1)說明部分說明部分一般放在結(jié)構(gòu)體的architecture和begin之間,用枚舉型數(shù)據(jù)類型定義狀態(tài)機的狀態(tài)名。(2)主控時序進程主控時序進程是實現(xiàn)狀態(tài)轉(zhuǎn)換的進程。(3)主控組合進程主控組合進程的功能是狀態(tài)譯碼,向外部發(fā)出控制信號,確定下一狀態(tài)的走向。(4)輔助進程輔助進程用于配合狀態(tài)機工作的組合、時序進程或配合狀態(tài)機工作的其他時序進程。項目6狀態(tài)機的VHDL程序描述libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitys_machineisport(clk,reset:instd_logic;
state_inputs:in
std_logic_vector(0to1);
control_outputs:outstd_logic_vector(0to1));endentitys_machine;architecturebehaveofs_machineistypestatesis(S0,S1,S2,S3);--定義states為枚舉數(shù)據(jù)類型signalcurrent_state,next_state:states;beginP1:process(reset,clk)beginifreset='1'thencurrent_state<=S0;elsif
clk='1'andclk'eventthen--上升沿觸發(fā)current_state<=next_state;--當前態(tài)轉(zhuǎn)換為次態(tài)endif;endprocessP1;【例6.1】雙進程描述的狀態(tài)機項目6狀態(tài)機的VHDL程序描述進程P1為主控時序進程,在“clk”上升沿時,狀態(tài)機的狀態(tài)由當前態(tài)“current_state”向次態(tài)“next_state”轉(zhuǎn)變。P2:process(current_state,state_inputs)--主控組合進程begincasecurrent_stateiswhenS0=>control_outputs<="00";--輸出當前狀態(tài)的控制值ifstate_inputs="00"then--根據(jù)外部輸入的值確定次態(tài)的走向
next_state<=S0;else
next_state<=S1;endif;whenS1=>control_outputs<="01";ifstate_inputs="00"then
next_state<=S1;else
next_state<=S2;endif;whenS2=>control_outputs<="10";ifstate_inputs="11"then
next_state<=S2;else
next_state<=S3;endif;whenS3=>control_outputs<="11";ifstate_inputs="11"then
next_state<=S3;else
next_state<=S0;endif;endcase;endprocess;endarchitecturebehave;說明部分:使用type語句定義狀態(tài)機狀態(tài)進程P2為主控組合進程;根據(jù)當前狀態(tài)“current_state”與輸入信號“state_inputs”確定次態(tài)的狀態(tài)。進程間通過“current_state”、“next_state”信號傳遞信息。例6.1程序編譯后,在QuartusPrime20.1集成環(huán)境,選擇【Tool】菜單【NetlistViewers】選項【RTLViewer】命令,將產(chǎn)生例6.1描述的狀態(tài)機的寄存器傳輸級綜合效果圖,如圖6.10所示。項目6狀態(tài)機的VHDL程序描述圖6.10寄存器傳輸級綜合效果圖RTL例6.1程序編譯后,在QuartusPrime20.1集成環(huán)境,選擇【Tool】菜單【NetlistViewers】選項【StateMachineViewer】命令,將產(chǎn)生例6.1描述的狀態(tài)機的狀態(tài)轉(zhuǎn)換圖,如圖6.11所示。項目6狀態(tài)機的VHDL程序描述圖6.11狀態(tài)機狀態(tài)轉(zhuǎn)換圖例6.1程序的功能仿真結(jié)果,如圖6.12所示。項目6狀態(tài)機的VHDL程序描述圖6.12狀態(tài)機功能仿真圖從圖中可知,狀態(tài)的轉(zhuǎn)變與輸出值的改變,與輸入時鐘的上升沿同步,與輸入信號“state_inputs”不同步。在55ms處,輸入信號“state_inputs”由“01”變?yōu)椤?1”,但輸出與狀態(tài)并沒有發(fā)生改變(control_outputs=10),在70ms“clk”上升沿處,輸出狀態(tài)還是“10”態(tài)沒有發(fā)生改變。這是由于當前態(tài)是S2狀態(tài),根據(jù)程序可知當前態(tài)是S2態(tài),輸入信號“state_inputs”值為“11”時,狀態(tài)轉(zhuǎn)換是由S2態(tài)轉(zhuǎn)向S2態(tài),因而,狀態(tài)沒有發(fā)生改變。3.Moore狀態(tài)機的VHDL程序描述Moore有限狀態(tài)機輸出只與當前狀態(tài)有關(guān),與輸入信號的當前值無關(guān),是嚴格的現(xiàn)態(tài)函數(shù)。Moore有限狀態(tài)機的典型結(jié)構(gòu),如圖6.13所示。項目6狀態(tài)機的VHDL程序描述圖6.13Moore狀態(tài)機的典型結(jié)構(gòu)libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymooreisport(clk,reset:instd_logic;
data_in:in
std_logic;
data_out:outstd_logic_vector(3downto0));endentitymoore;architecturebehaveofmooreistypestates_typeis(S0,S1,S2,S3);--定義states_type為枚舉數(shù)據(jù)類型signalstate:states_type;--聲明信號state為states_type數(shù)據(jù)類型Begin【例6.2】Moore狀態(tài)機的描述項目6狀態(tài)機的VHDL程序描述進程P1為主控時序進程,在“clk”上升沿時,狀態(tài)機的狀態(tài)轉(zhuǎn)變。P1:process(reset,clk)--主控時序進程beginifreset='0'thenstate<=S0;elsif
clk='1'andclk'eventthen--上升沿觸發(fā)casestateiswhenS0=>ifdata_in='1'thenstate<=S1;endif;whenS1=>ifdata_in='0'thenstate<=S2;endif;whenS2=>ifdata_in='1'thenstate<=S3;endif;whenS3=>ifdata_in='0'thenstate<=S0;endif;endcase; endif;endprocessP1說明部分:使用type語句定義狀態(tài)機狀態(tài)P2:process(state)--主控組合進程begincasestateiswhenS0=>data_out<="0001";--輸出當前狀態(tài)的值whenS1=>data_out<="0010";whenS2=>data_out<="0100";whenS3=>data_out<="1000";endcase;endprocess;endarchitecturebehave;【例6.2】Moore狀態(tài)機的描述項目6狀態(tài)機的VHDL程序描述進程P2為主控組合邏輯進程例6.2程序編譯后,在QuartusPrime20.1集成環(huán)境,選擇【Tool】菜單【NetlistViewers】選項【StateMachineViewer】命令,將產(chǎn)生例6.2描述的狀態(tài)機的狀態(tài)轉(zhuǎn)換圖,如圖6.14所示。圖6.14狀態(tài)機狀態(tài)轉(zhuǎn)換圖項目6狀態(tài)機的VHDL程序描述由圖可知,狀態(tài)機在異步復(fù)位后進入S0態(tài)(state=S0),在第30ns時clk上升沿處,state=S0,data_in=0(≠1),狀態(tài)不變,保持處于S0態(tài),輸出data_out=0001;在30ns~50ns的一個時鐘周期內(nèi),一直保持輸出信號不變,雖然在40ns處,data_in變?yōu)?,但狀態(tài)并不改變,而是要到50ns時,clk上升沿處才發(fā)生狀態(tài)轉(zhuǎn)變(S0態(tài)轉(zhuǎn)變?yōu)镾1態(tài))。說明了Moore狀態(tài)機在時鐘周期內(nèi)輸入信號發(fā)生變化,但輸出保持穩(wěn)定不變,屬于同步輸出狀態(tài)機。例6.2程序的功能仿真結(jié)果,如圖6.15所示。圖6.15Moore狀態(tài)機的仿真結(jié)果4.Mealy狀態(tài)機的VHDL程序描述Mealy狀態(tài)機的輸出是現(xiàn)態(tài)和所有輸入的函數(shù),隨輸入變化而隨時發(fā)生變化,Mealy狀態(tài)機典型的結(jié)構(gòu)如圖6.16所示。從時序上看,Mealy狀態(tài)機屬于異步輸出狀態(tài)機,它不依賴于時鐘,狀態(tài)機的輸出在輸入發(fā)生變化后立即發(fā)生。項目6狀態(tài)機的VHDL程序描述圖6.16Mealy狀態(tài)機的典型結(jié)構(gòu)libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymealyisport(clk,reset:instd_logic;
data_in:in
std_logic;
data_out:outstd_logic_vector(3downto0));endentitymealy;architecturebehaveofmealyistypestates_typeis(S0,S1,S2,S3);--定義states_type為枚舉數(shù)據(jù)類型signalstate:states_type;begin【例6.3】Mealy狀態(tài)機的描述項目6狀態(tài)機的VHDL程序描述P1:process(reset,clk)--主控時序進程beginifreset='0'thenstate<=S0;elsif
clk='1'andclk'eventthen--上升沿觸發(fā)casestateiswhenS0=>ifdata_in='1'then--根據(jù)外部輸入的值確定次態(tài)的走向state<=S1;endif;whenS1=>ifdata_in='0'thenstate<=S2;endif;whenS2=>ifdata_in='1'thenstate<=S3;endif;whenS3=>ifdata_in='0'thenstate<=S0;endif;endcase; endif;endprocessP1;說明部分:使用type語句定義狀態(tài)機狀態(tài)P2:process(state,data_in)--主控組合進程begi
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理考試效果評估方法及答案
- 應(yīng)急安全知識培訓
- 鐵路軌道結(jié)構(gòu)與施工89課件
- 21古詩三首 第三課時 教學設(shè)計-2024-2025學年語文四年級上冊統(tǒng)編版
- 湖北省鄂州市華容高級中學2025屆高三3月調(diào)研英語試題含解析
- 四川省資陽市重點中學2025屆高三下學期第四次模擬考試卷生物試題文試卷含解析
- 湖南省懷化中學方縣市級名校2025屆初三下學期返校第一次聯(lián)考(化學試題理)試卷含解析
- 四川省德陽市廣漢中學2025年5月初三模擬考試化學試題試卷含解析
- 中南財經(jīng)政法大學《歷史學前沿問題研究》2023-2024學年第二學期期末試卷
- 北海職業(yè)學院《民族民間文學專題究》2023-2024學年第二學期期末試卷
- 產(chǎn)品生產(chǎn)臺賬
- SF36量表內(nèi)容與計分方法附
- 第一單元到郊外去
- 食堂出入庫明細表(新)
- 新人教版小學數(shù)學一年級下冊教材分析[1]
- 澆注型聚氨酯彈性體生產(chǎn)技術(shù)標準_圖文
- 《大力集團大型電動機降補固態(tài)軟起動裝置(PPT 31頁)6.65MB》
- 大學物理剛體力學
- 【實操】GERevolutionCT快速上手操作指南
- 高空吊板蜘蛛人安全技術(shù)交底和安全檢查表
- 《認識飯店的管家》PPT課件.ppt
評論
0/150
提交評論