第二部分狀態(tài)機(jī)的VHDL設(shè)計(jì)_第1頁
第二部分狀態(tài)機(jī)的VHDL設(shè)計(jì)_第2頁
第二部分狀態(tài)機(jī)的VHDL設(shè)計(jì)_第3頁
第二部分狀態(tài)機(jī)的VHDL設(shè)計(jì)_第4頁
第二部分狀態(tài)機(jī)的VHDL設(shè)計(jì)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、有限狀態(tài)機(jī)的有限狀態(tài)機(jī)的VHDLVHDL設(shè)計(jì)設(shè)計(jì) 狀態(tài)機(jī)(狀態(tài)機(jī)(STATE MACHINE)可以說是一個(gè))可以說是一個(gè)廣義時(shí)序電路,觸發(fā)器廣義時(shí)序電路,觸發(fā)器,計(jì)數(shù)器計(jì)數(shù)器,移位寄存器都算移位寄存器都算是它的特殊功能的一種是它的特殊功能的一種.在電子設(shè)計(jì)自動(dòng)化應(yīng)用在電子設(shè)計(jì)自動(dòng)化應(yīng)用當(dāng)中當(dāng)中,狀態(tài)機(jī)經(jīng)常是擔(dān)任狀態(tài)機(jī)經(jīng)常是擔(dān)任CPU的功能的功能,從某種意義從某種意義上講狀態(tài)機(jī)的應(yīng)用讓系統(tǒng)具有了智能化的功能上講狀態(tài)機(jī)的應(yīng)用讓系統(tǒng)具有了智能化的功能,業(yè)界為狀態(tài)機(jī)和業(yè)界為狀態(tài)機(jī)和CPU的功能一直爭論不休的功能一直爭論不休,不過不過事實(shí)是更多人傾向于狀態(tài)機(jī)事實(shí)是更多人傾向于狀態(tài)機(jī),認(rèn)為狀態(tài)機(jī)的功能認(rèn)為

2、狀態(tài)機(jī)的功能比比CPU強(qiáng)大強(qiáng)大. 狀態(tài)機(jī)的基本結(jié)構(gòu)和功能狀態(tài)機(jī)的基本結(jié)構(gòu)和功能 狀態(tài)機(jī)是一類很重要的時(shí)序電路,是許多數(shù)字電路的核心部件。狀態(tài)機(jī)是一類很重要的時(shí)序電路,是許多數(shù)字電路的核心部件。除了輸入信號、輸出信號外,狀態(tài)機(jī)還包括一組寄存器記憶狀態(tài)機(jī)的除了輸入信號、輸出信號外,狀態(tài)機(jī)還包括一組寄存器記憶狀態(tài)機(jī)的內(nèi)部狀態(tài)。狀態(tài)機(jī)寄存器的下一個(gè)狀態(tài)及輸出,不僅同輸入信號有關(guān),內(nèi)部狀態(tài)。狀態(tài)機(jī)寄存器的下一個(gè)狀態(tài)及輸出,不僅同輸入信號有關(guān),而且還與寄存器的當(dāng)前狀態(tài)有關(guān),狀態(tài)機(jī)可認(rèn)為是組合邏輯和寄存器而且還與寄存器的當(dāng)前狀態(tài)有關(guān),狀態(tài)機(jī)可認(rèn)為是組合邏輯和寄存器邏輯的特殊組合。它包括兩個(gè)主要部分:組合邏輯

3、部分和寄存器部分。邏輯的特殊組合。它包括兩個(gè)主要部分:組合邏輯部分和寄存器部分。寄存器部分用于存儲(chǔ)狀態(tài)機(jī)的內(nèi)部狀態(tài);組合邏輯部分又分為狀態(tài)譯寄存器部分用于存儲(chǔ)狀態(tài)機(jī)的內(nèi)部狀態(tài);組合邏輯部分又分為狀態(tài)譯碼器和輸出譯碼器,狀態(tài)譯碼器確定狀態(tài)機(jī)的下一個(gè)狀態(tài),即確定狀碼器和輸出譯碼器,狀態(tài)譯碼器確定狀態(tài)機(jī)的下一個(gè)狀態(tài),即確定狀態(tài)機(jī)的激勵(lì)方程,輸出譯碼器確定狀態(tài)機(jī)的輸出,即確定狀態(tài)機(jī)的輸態(tài)機(jī)的激勵(lì)方程,輸出譯碼器確定狀態(tài)機(jī)的輸出,即確定狀態(tài)機(jī)的輸出方程。出方程。狀態(tài)譯碼器狀態(tài)寄存器輸出譯碼器狀態(tài)輸出反饋輸入組合邏輯 VHDL綜合器易于優(yōu)化 易構(gòu)成性能良好的時(shí)序邏輯模塊 結(jié)構(gòu)模式簡單、層次分明、易讀易懂、

4、易排錯(cuò) 運(yùn)行模式類似于CPU,易于進(jìn)行順序控制 利用同步時(shí)序和全局時(shí)鐘線可實(shí)現(xiàn)高速FSM 高可靠性,非法狀態(tài)易控制 1 1 狀態(tài)機(jī)設(shè)計(jì)相關(guān)語句狀態(tài)機(jī)設(shè)計(jì)相關(guān)語句1.1 1.1 類型定義語句類型定義語句TYPETYPE語句用法語句用法如下:如下:TYPE TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS IS 數(shù)據(jù)類型定義數(shù)據(jù)類型定義 OF OF 基本數(shù)據(jù)類型基本數(shù)據(jù)類型 ; ;或或TYPE TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS IS 數(shù)據(jù)類型定義數(shù)據(jù)類型定義 ; ;以下列出了兩種不同的定義方式:以下列出了兩種不同的定義方式:TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGI

5、C ;TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;TYPE week IS (sunTYPE week IS (sun,monmon,tuetue,wedwed,thuthu,frifri,sat) ;sat) ;1.1 1.1 類型定義語句類型定義語句TYPE m_state IS ( st0,st1,st2,st3,st4,st5 ) ; SIGNAL present_state,next_state : m_state ;布爾數(shù)據(jù)類型的定義語句是:布爾數(shù)據(jù)類型的定義語句是: TYPE BOOLEAN IS TYPE BOOLEAN IS (FA

6、LSEFALSE,TRUETRUE) ;TYPE my_logic IS ( 1 TYPE my_logic IS ( 1 ,Z Z ,U U ,0 ) ;0 ) ; SIGNAL s1 : my_logic ; SIGNAL s1 : my_logic ; s1 = Z ; s1 = Z ; 1.1 1.1 類型定義語句類型定義語句子類型子類型SUBTYPESUBTYPE的語句格式如下:的語句格式如下:SUBTYPE SUBTYPE 子類型名子類型名 IS IS 基本數(shù)據(jù)類型基本數(shù)據(jù)類型 RANGE RANGE 約束范圍約束范圍; ; SUBTYPE digits IS INTEGER RA

7、NGE 0 to 9 ;SUBTYPE digits IS INTEGER RANGE 0 to 9 ;1.2 1.2 狀態(tài)機(jī)的優(yōu)勢狀態(tài)機(jī)的優(yōu)勢 有限狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活有限狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點(diǎn)。的缺點(diǎn)。 狀態(tài)機(jī)的結(jié)構(gòu)模式相對簡單狀態(tài)機(jī)的結(jié)構(gòu)模式相對簡單。 狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊。 狀態(tài)機(jī)的狀態(tài)機(jī)的VHDLVHDL表述豐富多樣表述豐富多樣。 在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢。 就可靠性而言,狀態(tài)機(jī)的優(yōu)勢也是十分明顯的就可靠性而言

8、,狀態(tài)機(jī)的優(yōu)勢也是十分明顯的。1.3 1.3 狀態(tài)機(jī)結(jié)構(gòu)狀態(tài)機(jī)結(jié)構(gòu)(1). (1). 說明部分說明部分ARCHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST; . (2). (2). 主控主控時(shí)序時(shí)序進(jìn)程進(jìn)程(REG)(REG)圖圖1 一般狀態(tài)機(jī)結(jié)構(gòu)框圖工作示意圖一般狀態(tài)機(jī)結(jié)構(gòu)框圖工作示意圖指負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動(dòng)下負(fù)責(zé)狀態(tài)轉(zhuǎn)換的進(jìn)程指負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動(dòng)下負(fù)責(zé)狀態(tài)轉(zhuǎn)換的進(jìn)程3. 3. 主控組合進(jìn)程主控組合進(jìn)程(COM)(COM) 主控組合進(jìn)程的任務(wù)是根據(jù)外部輸入的

9、控制信號(包主控組合進(jìn)程的任務(wù)是根據(jù)外部輸入的控制信號(包括來自狀態(tài)機(jī)外部的信號和來自狀態(tài)機(jī)內(nèi)部其它非主控的括來自狀態(tài)機(jī)外部的信號和來自狀態(tài)機(jī)內(nèi)部其它非主控的組合或時(shí)序進(jìn)程的信號),或(和)當(dāng)前狀態(tài)的狀態(tài)值確組合或時(shí)序進(jìn)程的信號),或(和)當(dāng)前狀態(tài)的狀態(tài)值確定下一狀態(tài)(定下一狀態(tài)(next_statenext_state)的取向,即)的取向,即next_statenext_state的取值的取值內(nèi)容,以及確定對外輸出或?qū)?nèi)部其它組合或時(shí)序進(jìn)程輸內(nèi)容,以及確定對外輸出或?qū)?nèi)部其它組合或時(shí)序進(jìn)程輸出控制信號的內(nèi)容。出控制信號的內(nèi)容。【例【例5-1】LIBRARY IEEE;USE IEEE.STD

10、_LOGIC_1164.ALL;ENTITY s_machine IS PORT ( clk,reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine;ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST; BEGIN REG: PROCESS (

11、reset,clk) BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state comb_outputs= 5; IF state_inputs = 00 THEN next_state = s0; ELSE next_state comb_outputs= 8; IF state_inputs = 00 THEN next_state = s1; ELSE next_state comb_outputs= 12; IF state_inputs = 11 THEN next_

12、state = s0; ELSE next_state comb_outputs = 14; IF state_inputs = 11 THEN next_state = s3; ELSE next_state = s0; END IF; END case; END PROCESS; END behv;S2resetS3S0S158121400001111圖圖2 狀態(tài)機(jī)的工作時(shí)序圖狀態(tài)機(jī)的工作時(shí)序圖例例1. 輸入輸入&狀態(tài)狀態(tài)&輸出輸出(輸出僅與狀態(tài)有關(guān)輸出僅與狀態(tài)有關(guān)) 以下面圖形為例以下面圖形為例,若目前狀態(tài)機(jī)處于狀態(tài)若目前狀態(tài)機(jī)處于狀態(tài)S0時(shí)時(shí),輸入為輸入為0則狀態(tài)機(jī)將維

13、持狀態(tài)則狀態(tài)機(jī)將維持狀態(tài)S0不變不變,若輸入改為若輸入改為1則下個(gè)狀態(tài)則下個(gè)狀態(tài)改成狀態(tài)改成狀態(tài)S1,但不論輸入是什么但不論輸入是什么,此時(shí)輸出均為此時(shí)輸出均為0. 這種輸出與狀態(tài)有關(guān),而與輸入無關(guān)的狀態(tài)機(jī)類型,稱為稱為More狀狀態(tài)機(jī)態(tài)機(jī). S0/0S1/0S2/0S3/011000101編程實(shí)現(xiàn)其功能如下編程實(shí)現(xiàn)其功能如下: 重點(diǎn)提示重點(diǎn)提示 : 整個(gè)狀態(tài)機(jī)的電路描述分成兩個(gè)整個(gè)狀態(tài)機(jī)的電路描述分成兩個(gè)PROCESS命令語句完成命令語句完成. 第一個(gè)第一個(gè)PROCESS:負(fù)責(zé)感測時(shí)鐘脈沖信號負(fù)責(zé)感測時(shí)鐘脈沖信號CP在上升沿變在上升沿變化之際化之際,作目前狀態(tài)作目前狀態(tài)(PresentSta

14、te)切換至下個(gè)狀態(tài)切換至下個(gè)狀態(tài)(NextState)的動(dòng)作的動(dòng)作. 第二個(gè)第二個(gè)PROCESS:負(fù)責(zé)感測輸入負(fù)責(zé)感測輸入(DIN)值值,目前狀態(tài)目前狀態(tài)(PresentState)值值,由由CASE-WHEN語句決定輸出語句決定輸出(OP)和下個(gè)和下個(gè)狀態(tài)狀態(tài)(NextState)值值. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CH6_5_1 IS PORT(CP :IN STD_LOGIC; -CP時(shí)鐘信

15、號時(shí)鐘信號 DIN:IN STD_LOGIC; OP :OUT STD_LOGIC); END CH6_5_1; ARCHITECTURE A OF CH6_5_1 IS TYPE STATE IS (S0,S1,S2,S3); -State Type Declare SIGNAL PRESENTSTATE :STATE; -Present State SIGNAL NEXTSTATE :STATE; -Next State BEGIN SWITCH_TO_NEXTSTATE: PROCESS(CP) BEGIN IF CPEVENT AND CP=1 THEN PRESENTSTATE -S

16、TATE S0 IF DIN=0 THEN -INPUT=0 NEXTSTATE=S0; ELSE NEXTSTATE=S1; END IF; OP -STATE S1 IF DIN=1 THEN -INPUT=1 NEXTSTATE=S1; ELSE NEXTSTATE=S2; END IF; OP -STATE S2 IF DIN=1 THEN -INPUT=1 NEXTSTATE=S2; ELSE NEXTSTATE=S3; END IF; OP -STATE S3 IF DIN=1 THEN -INPUT=1 NEXTSTATE=S0; ELSE NEXTSTATE=S1; END I

17、F; OP -Initial State NEXTSTATE=S0; OP=0; -OUTPUT END CASE; END PROCESS CHANGE_STATEMODE; END A; 程序說明程序說明: (1)上述的狀態(tài)編碼方式上述的狀態(tài)編碼方式,使用默認(rèn)的使用默認(rèn)的Binary編碼編碼. (2)在第二個(gè)在第二個(gè)PROCESS內(nèi)的內(nèi)的CASE-WHEN語句里語句里,最后最后一個(gè)一個(gè)WHEN OTHERS作用在電路起始狀態(tài)作用在電路起始狀態(tài),亦即亦即-將狀將狀態(tài)初始設(shè)定為態(tài)初始設(shè)定為S0. 例例2. 輸入輸入&狀態(tài)狀態(tài)&輸出輸出(輸出與狀態(tài)輸出與狀態(tài),輸入背景有關(guān)輸入背景

18、有關(guān)) 下面圖形的動(dòng)作和上圖相似下面圖形的動(dòng)作和上圖相似,但是輸出是會(huì)隨輸入不同而有但是輸出是會(huì)隨輸入不同而有所改變所改變,例如目前狀態(tài)是例如目前狀態(tài)是S3,若輸入是若輸入是0則輸出為則輸出為0且下個(gè)狀且下個(gè)狀態(tài)更換成態(tài)更換成S1,而輸入為而輸入為1則輸出為則輸出為1且下個(gè)狀態(tài)更換成且下個(gè)狀態(tài)更換成S0. 這種輸出與狀態(tài)及輸入皆有這種輸出與狀態(tài)及輸入皆有關(guān)系者關(guān)系者,稱為稱為Mealy狀態(tài)機(jī)狀態(tài)機(jī). 程序?qū)崿F(xiàn)功能如下程序?qū)崿F(xiàn)功能如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE

19、.STD_LOGIC_UNSIGNED.ALL; ENTITY CH6_5_2 IS PORT(CP :IN STD_LOGIC; -CLOCK DIN:IN STD_LOGIC; OP :OUT STD_LOGIC ); END CH6_5_2; ARCHITECTURE A OF CH6_5_2 IS TYPE STATE IS (S0,S1,S2,S3); -State Type Declare SIGNAL PRESENTSTATE: STATE; -PRESENT STATE SIGNAL NEXTSTATE :STATE; -NEXT STATE BEGIN SWITCHTONEX

20、TSTATE:PROCESS(CP) BEGIN IF CPEVENT AND CP=1 THEN PRESENTSTATE -STATE S0 IF DIN=0 THEN -INPUT=0 NEXTSTATE=S0; OP=0; -OUTPUT ELSE NEXTSTATE=S1; OP -STATE S1 IF DIN=1 THEN -INPUT=1 NEXTSTATE=S1; OP=1; -OUTPUT ELSE NEXTSTATE=S2; OP -STATE S2 IF DIN=1 THEN -INPUT=1 NEXTSTATE=S2; OP=0; -OUTPUT ELSE NEXTS

21、TATE=S3; OP -STATE S3 IF DIN=1 THEN -INPUT=1 NEXTSTATE=S0; OP=1; -OUTPUT ELSE NEXTSTATE=S1; OP -Initial State NEXTSTATE=S0; OP IF (updown = 0) THENnext_state = one;lsb = 0;msb = 0; ELSEnext_state = three;lsb = 1;msb IF (updown = 0) THEN next_state = two; lsb = 1; msb = 0; ELSE next_state = zero; lsb

22、 = 0; msb IF (updown = 0) THENnext_state = three;lsb = 0;msb = 1; ELSEnext_state = one;lsb = 1;msb IF (updown = 0) THENnext_state = zero;lsb = 1;msb = 1;ELSEnext_state = two;lsb = 0;msb = 1;END IF; END CASE;END PROCESS P1;由狀態(tài)機(jī)方法描述的模由狀態(tài)機(jī)方法描述的模4加減計(jì)數(shù)器加減計(jì)數(shù)器P2:PROCESS BEGIN WAIT UNTIL clockEVENT and cloc

23、k = 1; present_state = next_state;END PROCESS P2;END firstenumsmch;由狀態(tài)機(jī)方法描述的模由狀態(tài)機(jī)方法描述的模4加減計(jì)數(shù)器加減計(jì)數(shù)器例例4:交通燈控制器的設(shè)計(jì):交通燈控制器的設(shè)計(jì) 基本要求:基本要求: (1)用兩組紅、黃、綠三色燈作為兩個(gè)方向的紅、黃、用兩組紅、黃、綠三色燈作為兩個(gè)方向的紅、黃、綠燈;綠燈; (2)東西東西(主道主道)和南北和南北(支道支道)方向的顯示時(shí)間為紅燈方向的顯示時(shí)間為紅燈45秒、秒、綠燈綠燈50秒、黃燈秒、黃燈5秒;秒; *(3)按照實(shí)際紅綠燈規(guī)則,用數(shù)碼管顯示倒計(jì)時(shí)時(shí)間;按照實(shí)際紅綠燈規(guī)則,用數(shù)碼管顯示

24、倒計(jì)時(shí)時(shí)間; CLKRSTlgt1_rlgt1_ylgt1_glgt2_rlgt2_ylgt2_gtrafficinstVCCCLKINPUTVCCRSTINPUTzhugan_ROUTPUTzhugan_YOUTPUTzhugan_GOUTPUTzhigan_ROUTPUTzhigan_YOUTPUTzhigan_GOUTPUT交通燈控制器接口圖 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY traffic is GENERIC( green1:integer:=50;-定

25、義主道綠燈亮50S yellow1 :integer:=5 ;-定義主道黃燈亮5S green2:integer:=50;-定義支道綠燈亮50S yellow2 :integer:=5);-定義支道黃燈亮5S PORT( CLK,RST: IN STD_LOGIC; lgt1_r,lgt1_y,lgt1_g,lgt2_r,lgt2_y,lgt2_g: out STD_LOGIC); End traffic; ARCHITECTURE rtl of traffic is Type states is (st0,st1,st2,st3);-定義控制器各種狀態(tài) Signal state:states

26、:=st0; -初始化狀態(tài) Signal cnt:integer range 0 to 30:=1;-定義計(jì)數(shù)器 Signal cnt_enb:std_logic:=0; -初始化計(jì)數(shù)器使能信號 begin AA:Process(clk,rst) Begin if (rst=1) then state=st0; cnt=1; Elsif (clkevent and clk=1) then if (cnt_enb=1) then cnt=cnt+1;-計(jì)數(shù)器計(jì)數(shù) else cntif (cnt=green1 ) then state=st1; -主道綠燈時(shí)間到 Else stateif (cnt

27、=yellow1 ) then state=st2; -主道黃燈時(shí)間到 Else stateif (cnt=green2 ) then state=st3; -支道綠燈時(shí)間到 Else stateif (cnt=yellow2 ) then state=st0; -支道黃燈時(shí)間到 Else state lgt1_r=0; lgt1_y=0; lgt1_g=1; -主道綠燈亮 lgt2_r=1; lgt2_y=0; lgt2_g=0; Cnt_enb=1;-支道紅燈亮 if (cnt=green1) then cnt_enb lgt1_r=0; lgt1_y=1; lgt1_g=0; -主道黃燈

28、亮 lgt2_r=1; lgt2_y=0; lgt2_g=0; Cnt_enb=1; -支道紅燈亮 if (cnt=yellow1) then cnt_enb lgt1_r=1; lgt1_y=0; lgt1_g=0; -主道紅燈亮 lgt2_r=0; lgt2_y=0; lgt2_g=1; Cnt_enb=1;-支道綠燈亮 if (cnt=green2) then cnt_enb lgt1_r=1; lgt1_y=0; lgt1_g=0; -主道紅燈亮 lgt2_r=0; lgt2_y=1; lgt2_g=0; Cnt_enb=1;-支道黃燈亮 if (cnt=yellow2) then c

29、nt_enb=0; end if; End case;End process BB;End rtl; 例例5 5 序列信號檢測器序列信號檢測器 (在數(shù)字信號的傳輸和數(shù)字系統(tǒng)的測試中,有時(shí)需要用到一組特定的串行數(shù)字信號,產(chǎn)生序列信號的電路稱為序列信號發(fā)生器。)設(shè)計(jì)一個(gè)“01111110”序列信號檢測器的VHDL描述。LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DETECT IS PORT( DATAIN:IN STD_LOGIC; CLK:IN STD_LOGIC; Q:OUT STD_LOGIC);END DETECT;ARCHITECT

30、URE ART OF DETECT ISTYPE STATETYPE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);BEGINPROCESS(CLK)VARIABLE PRESENT_STATE:STATETYPE;BEGIN Q IF DATAIN=0 THEN PRESENT_STATE:=S1; ELSE PRESENT_STATE:=S0; END IF; WHEN S1= IF DATAIN=1 THEN PRESENT_STATE:=S2; ELSE PRESENT_STATE:=S1; END IF; WHEN S2= IF DATAIN=1THEN PRESEN

31、T_STATE:=S3; ELSE PRESENT_STATE:=S1; END IF; WHEN S3= IF DATAIN=1THEN PRESENT_STATE:=S4; ELSE PRESENT_STATE:=S1; END IF; WHEN S4= IF DATAIN=1THEN PRESENT_STATE:=S5; ELSE PRESENT_STATE:=S1; END IF; WHEN S5= IF DATAIN=1THEN PRESENT_STATE:=S6; ELSE PRESENT_STATE:=S1; END IF; WHEN S6= IF DATAIN=1THEN PR

32、ESENT_STATE:=S7; ELSE PRESENT_STATE:=S1; END IF; WHEN S7= IF DATAIN=0THEN PRESENT_STATE:=S8; Q IF DATAIN=0THEN PRESENT_STATE:=S1; ELSE PRESENT_STATE:=S2; END IF; END CASE; WAIT UNTIL CLK=1; END PROCESS; END ART; 例6: 基于狀態(tài)機(jī)的ADC0809與SRAM6264的通信控制器的設(shè)計(jì)。圖3.33是該控制器ADTOSRAM與ADC0809及SRAM6264接口示意圖。圖圖3.33 ADTO

33、SRAM與與ADC0809及及SRAM6264接口示意圖接口示意圖STARTADC0809DIN7.0DIN7.0EOCEOCADTOSRAM通信控制器SRAM6264ADC0809ADDRESS12.0RAM_DIN7.0WRWRRDRDADDAADDRESS12.0RAM_DIN7.0SRAM6264CSCSCLKRSTSTARTOEADDAALEOEALE-VHDL源程序ADTOSRAM.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADTOSRAM IS PORT(

34、-ADC0809接口信號 DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -0809轉(zhuǎn)換數(shù)據(jù)輸入口 CLK,EOC:IN STD_LOGIC; -CLK:狀態(tài)機(jī)工作時(shí)鐘;EOC:轉(zhuǎn)換結(jié)束狀態(tài)信號 RST:IN STD_LOGIC; -系統(tǒng)復(fù)位信號 ALE:OUT STD_LOGIC; -0809采樣通道選擇地址鎖存信號 START:OUT STD_LOGIC; -0809采樣啟動(dòng)信號,上升沿有效 OE:OUT STD_LOGIC; -轉(zhuǎn)換數(shù)據(jù)輸出使能,接0809的ENABLE(PIN 9) ADDA:OUT STD_LOCIC; -0809采樣通道地址最低位-SRAM

35、 6264接口信號 CS:OUT STD_LOGIC; -6264片選控制信號,低電平有效 RD,WR:OUT STD_LOGIC;-6264讀/寫控制信號,低電平有效 RAM_DIN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-6264數(shù)據(jù)寫入端口 ADDRESS:OUT STD_LOGIC_VECTOR(12 DOWNTO 0);-地址輸出端口END ADTOSRAM;ARCHITECTURE ART OF ADTOSRAM ISTYPE AD_STATES IS(ST0,ST1,ST2,ST3, ST4,ST5,ST6,ST7) -A/D轉(zhuǎn)換狀態(tài)定義TYPE WR

36、IT_STATES IS (START_WRITE,WRITE1,WRITE2,WRITE3, WRITE_END); SRAM數(shù)據(jù)寫入控制狀態(tài)定義SIGNAL RAM_CURRENT_STATE,RAM_NEXT_STATE:WRIT_STATES; SIGNAL ADC_CURRENT_STATE,ADC_NEXT_STATE:AD_STATES;SIGNAL ADC_END:STD_LOGIC;-0809數(shù)據(jù)轉(zhuǎn)換結(jié)束并鎖存標(biāo)志位,高電平有效SIGNAL LOCK :STD_LOGIC; -轉(zhuǎn)換后數(shù)據(jù)輸出鎖存信號SIGNAL ENABLE:STD_LOGIC; -A/D轉(zhuǎn)換允許信號,高電平

37、有效SIGNAL ADDRES_PLUS:STD_LOGIC;-SRAM地址加1時(shí)鐘信號SIGNAL ADC_DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);-轉(zhuǎn)換數(shù)據(jù)讀入鎖存器 SIGNAL ADDRES_CNT:STD_LOGIC_VECTOR(12 DOWNTO 0);-SRAM地址鎖存器BEGIN ADDA=1; -ADDA=1,ADDB=0,ADDC=0選A/D采樣通道為IN-1 RD=1; -SRAM寫禁止 -ADC0809采樣控制狀態(tài)機(jī) ADC:PROCESS(ADC_CURRENT_STATE,EOC,ENABLE) -A/D轉(zhuǎn)換狀態(tài)機(jī)組合電路進(jìn)程BEGIN

38、 IF (RST=1) THEN ADC_NEXT_STATEALE=0;START=0;OE=0; LOCK=0;ADC_END=0; -A/D轉(zhuǎn)換初始化 IF (ENABLE=1) THEN ADC_NEXT_STATE=ST1;-允許轉(zhuǎn)換,轉(zhuǎn)下一狀態(tài) ELSE ADC_NEXT_STATEALE=1;START=0;OE=0; LOCK=0;ADC_END=0;ADC_NEXT_STATEALE=1;START=1;OE=0; LOCK=0;ADC_END=0;ADC_NEXT_STATEALE=1;START=1;OE=0; LOCK=0;ADC_END=0;-延遲一個(gè)脈沖周期IF (

39、EOC=0) THEN ADC_NEXT_STATE=ST4;ELSE ADC_NEXT_STATEALE=0;START=0;OE=0; LOCK=0;ADC_END=0;IF(EOC=0)THEN ADC_NEXT_STATE=ST5;-轉(zhuǎn)換結(jié)束,轉(zhuǎn)下一狀態(tài)ELSE ADC_NEXT_STATEALE=0;START=0;OE=1; LOCK=1;ADC_END=1;ADC_NEXT_STATEALE=0;START=0;OE=1; LOCK=1;ADC_END=1;ADC_NEXT_STATEALE=0;START=0;OE=1; LOCK=1;ADC_END=1;ADC_NEXT_ST

40、ATEADC_NEXT_STATE=ST0;-所有閑置狀態(tài)導(dǎo)入初始態(tài)END CASE;END IF;END PROCESS ADC;AD_STATE:PROCESS(CLK) -A/D轉(zhuǎn)換狀態(tài)機(jī)時(shí)序電路進(jìn)程BEGIN IF(CLKEVENT AND CLK=1)THEN ADC_CURRENT_STATE=ADC_NEXT_STATE;-在時(shí)鐘上升沿,轉(zhuǎn)至下一狀態(tài) END IF;END PROCESS AD_STATE;-由信號CURRENT_STATE將當(dāng)前狀態(tài)值帶出此進(jìn)程DATA_LOCK:PROCESS(LOCK)BEGIN -此進(jìn)程中,在LOCK的上升沿,將轉(zhuǎn)換好的數(shù)據(jù)鎖入鎖存器ADC

41、_DATA中 IF (LOCK=1 AND LOCKEVENT) THEN ADC_DATA=DIN; END IF;END PROCESS DATA_LOCK;-SRAM數(shù)據(jù)寫入控制狀態(tài)機(jī)WRIT_STATE:PROCESS(CLK,RST)-SRAM寫入控制狀態(tài)機(jī)時(shí)序電路進(jìn)程BEGIN IF RST=1THEN RAM_CURRENT_STATE=START_WRITE;-系統(tǒng)復(fù)位 ELSIF(CLKEVENT AND CLK=1) THEN RAM_CURRENT_STATECS=1;WR=1;ADDRES_PLUS=0; IF (ADDRES_CNT=1111111111111) -數(shù)

42、據(jù)寫入初始化 THEN ENABLE=0; -SRAM地址計(jì)數(shù)器已滿,禁止A/D轉(zhuǎn)換 RAMM_NEXT_STATE=START_WRITE; ELSE ENABLE=1 -SRAM地址計(jì)數(shù)器未滿,允許A/D轉(zhuǎn)換 RAM_NEXT_STATECS=1;WR=1; ENABLE=1;ADDRES_PLUS=0;-判斷A/D轉(zhuǎn)換周期是否結(jié)束 IF (ADC_END=1)THEN RAM_NEXT_STATE=WRITE2; -已結(jié)束 ELSE RAM_NEXT_STATECS=1;WR=1;-打開SRAM片選信號 ENABLE=0; -禁止A/D轉(zhuǎn)換 ADDRES_PLUS=0;ADDRESS=A

43、DDRES_CNT; -輸出13位地址 RAM_DIN=ADC_DATA; -8位已轉(zhuǎn)換好的數(shù)據(jù)輸向SRAM數(shù)據(jù)口RAM_NEXT_STATECS=0;WR=0; -打開寫允許信號 ENABLE=0; -仍然禁止A/D轉(zhuǎn)換 ADDRES_PLUS=1; -產(chǎn)生地址加1時(shí)鐘上升沿,使地址計(jì)數(shù)器加1 RAM_NEXT_STATECS=1;WR=1; ENABLE=1; -打開A/D轉(zhuǎn)換允許開關(guān) ADDRES_PLUS=0; -地址加1時(shí)鐘脈沖結(jié)束 RAM_NEXT_STATE RAM_NEXT_STATE=START_WRITE; END CASE; END PROCESS RAM_WRITE;COUNTER:PROCESS(ADDRES_PLUS) -地址計(jì)數(shù)器加1進(jìn)程BEGIN IF(RST=1)THEN ADDRES_CNT=0000000000000;-計(jì)數(shù)器復(fù)位 ELSIF(ADDRES_PLUSEVENT AND ADDRES_PLUS=1)THEN ADDRES_CNT=ADDRES_CNT+1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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

提交評論