第7章有限狀態(tài)機(jī)課件_第1頁(yè)
第7章有限狀態(tài)機(jī)課件_第2頁(yè)
第7章有限狀態(tài)機(jī)課件_第3頁(yè)
第7章有限狀態(tài)機(jī)課件_第4頁(yè)
第7章有限狀態(tài)機(jī)課件_第5頁(yè)
已閱讀5頁(yè),還剩243頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1

第7章有限狀態(tài)機(jī)設(shè)計(jì)127.1一般有限狀態(tài)機(jī)描述1.VHDL數(shù)據(jù)類(lèi)型VHDL是一種強(qiáng)數(shù)據(jù)類(lèi)型語(yǔ)言。要求設(shè)計(jì)實(shí)體中的每一個(gè)常數(shù)、信號(hào)、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類(lèi)型,并且相同數(shù)據(jù)類(lèi)型的量才能互相傳遞和作用。分為:

?預(yù)定義數(shù)據(jù)類(lèi)型、

?用戶(hù)自定義數(shù)據(jù)類(lèi)型27.1一般有限狀態(tài)機(jī)描述1.VHDL數(shù)據(jù)類(lèi)型3(1)VHDL的預(yù)定義數(shù)據(jù)類(lèi)型布爾量(boolean)布爾量具有兩種狀態(tài):false和true

位(bit)

位矢量(bit_vector)字符(character)整數(shù)(integer)自然數(shù)(natural)和正整數(shù)(positive)

natural是integer的子類(lèi)型,表示非負(fù)整數(shù)。

positive是integer的子類(lèi)型,表示正整數(shù)。實(shí)數(shù)(REAL)

字符串(string)時(shí)間(TIME)

3(1)VHDL的預(yù)定義數(shù)據(jù)類(lèi)型4(2)IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量1)std_logic類(lèi)型由std_logic類(lèi)型代替bit類(lèi)型可以完成電子系統(tǒng)的精確模擬,并可實(shí)現(xiàn)常見(jiàn)的三態(tài)總線(xiàn)電路。2)std_logic_vector類(lèi)型由std_logic構(gòu)成的數(shù)組。4(2)IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量5(3)用戶(hù)自定義類(lèi)型用戶(hù)自定義類(lèi)型是VHDL語(yǔ)言的一大特色??捎捎脩?hù)定義的數(shù)據(jù)類(lèi)型有:

?枚舉類(lèi)型

?整數(shù)和實(shí)數(shù)類(lèi)型

?數(shù)組類(lèi)型

?記錄類(lèi)型

?子類(lèi)型5(3)用戶(hù)自定義類(lèi)型6

用類(lèi)型定義語(yǔ)句TYPE和子類(lèi)型定義語(yǔ)句SUBTYPE實(shí)現(xiàn)用戶(hù)自定義數(shù)據(jù)類(lèi)型。

TYPE語(yǔ)句格式:例:typebooleanis(false,true);typestisarray(15downto0)ofstd_logic;

variablest1:st;typeweekis(sun,mon,tue,wed,thu,fri,sat);type數(shù)據(jù)類(lèi)型名is數(shù)據(jù)類(lèi)型定義[of基本數(shù)據(jù)類(lèi)型];6用類(lèi)型定義語(yǔ)句TYPE和子類(lèi)型定義語(yǔ)句SU7SUBTYPE語(yǔ)句格式:例:subtypedigitsisintegerrange0to9;由subtype語(yǔ)句定義的數(shù)據(jù)類(lèi)型稱(chēng)為子類(lèi)型。子類(lèi)型與基(父)類(lèi)型具有相同的操作符和子程序。可以直接進(jìn)行賦值操作。subtype子類(lèi)型名is基本數(shù)據(jù)類(lèi)型range約束范圍;7SUBTYPE語(yǔ)句格式:subtype子類(lèi)型名is81)枚舉類(lèi)型枚舉該類(lèi)型的所有可能的值。格式:如:typestd_logicis('U','X','0','1','Z','W','L','H','-');如:typecoloris(blue,green,yellow,red);

typem_stateis(st0,st1,st2,st3,st4,st5); signalpresent_state,next_state:m_state;type類(lèi)型名稱(chēng)is(枚舉文字{,枚舉文字});81)枚舉類(lèi)型type類(lèi)型名稱(chēng)is(枚舉文字{,9枚舉類(lèi)型的編碼:綜合器自動(dòng)實(shí)現(xiàn)枚舉類(lèi)型元素的編碼,一般將第一個(gè)枚舉量(最左邊)編碼為0,以后的依次加1。編碼用位矢量表示,位矢量的長(zhǎng)度將取所需表達(dá)的所有枚舉元素的最小值。如:typecoloris(blue,green,yellow,red);編碼為:blue=“00”;green=“01”;yellow=“10”;red=“11”;9枚舉類(lèi)型的編碼:102)整數(shù)類(lèi)型用戶(hù)定義的整數(shù)類(lèi)型是標(biāo)準(zhǔn)包中整數(shù)類(lèi)型的子范圍。格式:例:typemy_integerisintegerrange0to9;3)數(shù)組類(lèi)型

數(shù)組:同類(lèi)型元素的集合。VHDL支持多維數(shù)組。多維數(shù)組的聲明:

typebyteisarray(7downto0)ofbit;

typevectorisarray(3downto0)ofbyte;type類(lèi)型名稱(chēng)isrange整數(shù)范圍;102)整數(shù)類(lèi)型type類(lèi)型名稱(chēng)isrange117.1一般有限狀態(tài)機(jī)描述1.狀態(tài)機(jī)狀態(tài)機(jī)(statemachine)有限狀態(tài)機(jī)FSM(finitestatemachine)狀態(tài)機(jī)是組合邏輯與寄存器邏輯兩者的特殊組合。狀態(tài)機(jī)是描述一系列狀態(tài)轉(zhuǎn)換的時(shí)序電路。一般用狀態(tài)圖來(lái)表示狀態(tài)機(jī)的運(yùn)行情況較為明確。對(duì)那些任務(wù)順序非常明確的電路(如數(shù)字控制模塊)非常有用。狀態(tài)圖是一種流程控制的設(shè)計(jì),在有限的狀態(tài)中,根據(jù)判別信號(hào)的邏輯值決定后面要進(jìn)入哪一個(gè)狀態(tài)。先來(lái)看看下面的狀態(tài)圖。117.1一般有限狀態(tài)機(jī)描述1.狀態(tài)機(jī)121213FSM(FiniteStateMachine)狀態(tài)機(jī)是一種記錄下給定時(shí)刻狀態(tài)的設(shè)備,并根據(jù)輸入,對(duì)每個(gè)給定的改變,改變其狀態(tài)或引發(fā)一個(gè)動(dòng)作。有限狀態(tài)機(jī)是有有限個(gè)狀態(tài)的機(jī)器有限狀態(tài)機(jī)由有限的狀態(tài)和相互之間的轉(zhuǎn)移構(gòu)成,在任何時(shí)候只能處于給定數(shù)目的狀態(tài)中的一個(gè)。當(dāng)接收到一個(gè)輸入事件時(shí),狀態(tài)機(jī)產(chǎn)生一個(gè)輸出,同時(shí)也可能伴隨著狀態(tài)的轉(zhuǎn)移。有限狀態(tài)機(jī)適用于表示時(shí)序控制電路,它可以描述出系統(tǒng)所處的狀態(tài)、狀態(tài)之間的轉(zhuǎn)移以及引起狀態(tài)轉(zhuǎn)移的原因;可以描述同步或異步狀態(tài)機(jī)。13FSM(FiniteStateMachine)狀態(tài)機(jī)14

FSM分類(lèi)

FSM根據(jù)輸入輸出關(guān)系可分為兩類(lèi):摩爾(Moore)型狀態(tài)機(jī)米利(Mealy)型狀態(tài)機(jī)14

FSM分類(lèi)

15

摩爾(Moore)型狀態(tài)機(jī)

摩爾(Moore)型狀態(tài)機(jī)的輸出僅僅與當(dāng)前狀態(tài)相關(guān)。15

摩爾(Moore)型狀態(tài)機(jī)

摩爾(Moore)型狀態(tài)機(jī)16摩爾(Moore)型狀態(tài)圖16摩爾(Moore)型狀態(tài)圖17

米利(Mealy)型狀態(tài)機(jī)

米利(Mealy)型狀態(tài)機(jī)的輸出不僅與當(dāng)前狀態(tài)相關(guān),而且也與輸入信號(hào)相關(guān)。17

米利(Mealy)型狀態(tài)機(jī)

米利(Mealy)型狀態(tài)機(jī)18

米利(Mealy)型狀態(tài)圖

18

米利(Mealy)型狀態(tài)圖

194為什么要使用狀態(tài)機(jī)狀態(tài)機(jī)的工作方式是根據(jù)控制信號(hào)按照預(yù)先設(shè)定的狀態(tài)進(jìn)行順序進(jìn)行的。在速度和可靠性方面優(yōu)于CPU。結(jié)構(gòu)模式簡(jiǎn)單,設(shè)計(jì)方案固定,狀態(tài)采取符號(hào)化枚舉類(lèi)型,為VHDL綜合器發(fā)揮其強(qiáng)大的優(yōu)化功能提供有利條件。狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊,利于消除電路的毛刺現(xiàn)象。高速運(yùn)算和控制方面,有巨大的優(yōu)勢(shì)。多個(gè)并行運(yùn)行的狀態(tài)機(jī)類(lèi)似并行運(yùn)行的多CPU的性能。其運(yùn)算速度比CPU高3至5個(gè)數(shù)量級(jí)。高可靠性。狀態(tài)機(jī)是純硬件電路,從非法狀態(tài)中跳出只數(shù)十納秒。而CPU要通過(guò)復(fù)位從非法運(yùn)行狀態(tài)中恢復(fù)過(guò)來(lái),需要數(shù)十毫秒。194為什么要使用狀態(tài)機(jī)狀態(tài)機(jī)的工作方式是根據(jù)控制信號(hào)按照201.一個(gè)有限狀態(tài)機(jī)的VHDL描述應(yīng)該包括以下內(nèi)容:至少包括一個(gè)狀態(tài)信號(hào),它們用來(lái)指定有限狀態(tài)機(jī)的狀態(tài)。狀態(tài)轉(zhuǎn)移指定和輸出指定,它們對(duì)應(yīng)于控制單元中與每個(gè)控制步有關(guān)的轉(zhuǎn)移條件。時(shí)鐘信號(hào),它是用來(lái)進(jìn)行同步的。同步或異步復(fù)位信號(hào)。7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)201.一個(gè)有限狀態(tài)機(jī)的VHDL描述應(yīng)該包括以下內(nèi)容:7.212一個(gè)有限狀態(tài)機(jī)通常包含:說(shuō)明部分主控時(shí)序進(jìn)程(REG)主控組合進(jìn)程(COM)輔助進(jìn)程7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)ProcessREGProcessCOMcomb_outputsclkresetstate_inputsFSM:s_machinecurrent_statenext_state212一個(gè)有限狀態(tài)機(jī)通常包含:7.1一般有限狀態(tài)機(jī)的22說(shuō)明部分一般放在結(jié)構(gòu)體的說(shuō)明部分:例如:一個(gè)符號(hào)化的狀態(tài)機(jī)說(shuō)明部分:TYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;直接指定狀態(tài)碼(非符號(hào)化編碼)的說(shuō)明部分:SIGNALcurrent_state,next_state:std_logic_vector(1downto0);CONSTANTst0:std_logic_vector(3downto0):="00"CONSTANTst1:std_logic_vector(3downto0):="01"CONSTANTst2:std_logic_vector(3downto0):=“10"CONSTANTst3:std_logic_vector(3downto0):=“11"22說(shuō)明部分23主控時(shí)序進(jìn)程部分是指負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動(dòng)下負(fù)責(zé)狀態(tài)轉(zhuǎn)換的進(jìn)程例如:含復(fù)位信號(hào)的主控時(shí)序進(jìn)程IFreset='1'THENcurrent_state<=s0;ELSIFclk='1'andclk'eventTHEN current_state<=next_state;ENDIF;23主控時(shí)序進(jìn)程部分24主控組合進(jìn)程部分是指狀態(tài)譯碼進(jìn)程,是根據(jù)外部輸入的控制信號(hào)和當(dāng)前狀態(tài)值確定下一狀態(tài)(next_state)的取向。例如:CASEcurrent_sateIS whens0=>next_state<=s1; whens1=>next_state<=s2; whens2=>next_state<=s3; whens3=>next_state<=s0;ENDCASE;說(shuō)明部分,主控時(shí)序進(jìn)程設(shè)計(jì)固定。主控組合進(jìn)程部分是區(qū)分狀態(tài)機(jī)的主要部分。輔助進(jìn)程 用來(lái)配合狀態(tài)機(jī)工作的組合進(jìn)程或時(shí)序進(jìn)程。 例如:為了完成某種算法的進(jìn)程。用了配合狀態(tài)機(jī)的其他時(shí)序進(jìn)程。為了穩(wěn)定輸出設(shè)置的數(shù)據(jù)鎖存器。

24主控組合進(jìn)程部分25例:描述如圖所示的狀態(tài)機(jī)S2(12)S1(8)S0(5)S3(14)00非00非11非00非1111001125例:描述如圖所示的狀態(tài)機(jī)S2(12)S1(8)S0(526實(shí)體,F(xiàn)SM說(shuō)明部分LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISport(clk,reset:instd_logic;state_inputs:instd_logic_vector(0to1);comb_outputs:outintegerrange0to15);END;ARCHITECTUREbhvOFs_machineIS

TYPEfsm_stis(s0,s1,s2,s3);SIGNALcurrent_state,next_state:fsm_st;BEGIN26實(shí)體,F(xiàn)SM說(shuō)明部分LIBRARYIEEE;27主控時(shí)序進(jìn)程REGReg:PROCESS(reset,clk)BEGINIFreset='1'THEN current_state<=s0;ELSIFclk='1'andclk'eventTHEN

current_state<=next_state;ENDIF;ENDPROCESS;27主控時(shí)序進(jìn)程REGReg:PROCESS(reset,c28主控組合進(jìn)程COMcom:process(current_state,state_inputs)begincasecurrent_stateis

whens0=>comb_outputs<=5;ifstate_inputs="00"thennext_state<=s0; elsenext_state<=s1;endif;whens1=>comb_outputs<=8;ifstate_inputs="00"thennext_state<=s1; elsenext_state<=s2;endif;whens2=>comb_outputs<=12; ifstate_inputs="11"thennext_state<=s0; elsenext_state<=s3;endif;whens3=>comb_outputs<=14; ifstate_inputs="11"thennext_state<=s3; elsenext_state<=s0;endif;endcase;endprocess;ENDbhv;28主控組合進(jìn)程COMcom:process(current29

上例屬于Moore型狀態(tài)機(jī),狀態(tài)機(jī)的輸出僅與當(dāng)前狀態(tài)有關(guān),是當(dāng)前狀態(tài)的函數(shù).

當(dāng)輸入發(fā)生變化時(shí),需等待時(shí)鐘邊沿的到來(lái),才會(huì)引起狀態(tài)的改變,從而導(dǎo)致輸出的變化。29上例屬于Moore型狀態(tài)機(jī),狀態(tài)機(jī)的輸30綜合結(jié)果

狀態(tài)QS0100001015S1010010008S20010110012S3000111101430綜合結(jié)果狀態(tài)QS0100001015S1010010031多進(jìn)程有限狀態(tài)機(jī)用狀態(tài)機(jī)實(shí)現(xiàn)對(duì)ADC0809的采樣控制電路1.典型A/D轉(zhuǎn)換器芯片ADC08098路模擬信號(hào)的分時(shí)采集,片內(nèi)有8路模擬選通開(kāi)關(guān),以及相應(yīng)的通道地址鎖存用譯碼電路,其轉(zhuǎn)換時(shí)間為100μs左右。ADC0809的內(nèi)部邏輯結(jié)構(gòu)圖如圖所示。

7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)31多進(jìn)程有限狀態(tài)機(jī)7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)32ADC0809內(nèi)部邏輯結(jié)構(gòu)ADC0809引腳圖

32ADC0809內(nèi)部邏輯結(jié)構(gòu)33圖中多路開(kāi)關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用一個(gè)A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換,這是一種經(jīng)濟(jì)的多路數(shù)據(jù)采集方法。地址鎖存與譯碼電路完成對(duì)A、B、C3個(gè)地址位進(jìn)行鎖存和譯碼,其譯碼輸出用于通道選擇,其轉(zhuǎn)換結(jié)果通過(guò)三態(tài)輸出鎖存器存放、輸出,因此可以直接與系統(tǒng)數(shù)據(jù)總線(xiàn)相連。

通道選擇表

33圖中多路開(kāi)關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,34信號(hào)引腳

ADC0809芯片為28引腳為雙列直插式封裝。主要信號(hào)引腳的功能說(shuō)明如下:

IN7~I(xiàn)N0——模擬量輸入通道

A、B、C——地址線(xiàn)。通道端口選擇線(xiàn),A為低地址,C為高地址,引腳圖中為ADDA,ADDB和ADDC。其地址狀態(tài)與通道對(duì)應(yīng)關(guān)系見(jiàn)表。

ALE——地址鎖存允許信號(hào)。對(duì)應(yīng)ALE上升沿,A、B、C地址狀態(tài)送入地址鎖存器中。

START——轉(zhuǎn)換啟動(dòng)信號(hào)。START上升沿時(shí),復(fù)位ADC0809;START下降沿時(shí)啟動(dòng)芯片,開(kāi)始進(jìn)行A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持低電平。34信號(hào)引腳35D7~D0——數(shù)據(jù)輸出線(xiàn)。為三態(tài)緩沖輸出形式。

OE——輸出允許信號(hào)。用于控制三態(tài)輸出鎖存器向外輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=0,輸出數(shù)據(jù)線(xiàn)呈高阻;OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù)。

CLK——時(shí)鐘信號(hào)。通常使用頻率為500KHz的時(shí)鐘信號(hào)。

EOC——轉(zhuǎn)換結(jié)束信號(hào)。EOC=0,正在進(jìn)行轉(zhuǎn)換;EOC=1,轉(zhuǎn)換結(jié)束。

Vcc——+5V電源。

Vref——參考電源參考電壓用來(lái)與輸入的模擬信號(hào)進(jìn)行比較,作為逐次逼近的基準(zhǔn)。其典型值為+5V(Vref(+)=+5V,Vref(-)=-5V)。35D7~D0——數(shù)據(jù)輸出線(xiàn)。為三態(tài)緩沖輸出形式。36ADC0809的工作時(shí)序圖

36ADC0809的工作時(shí)序圖37PROCESSREG時(shí)序進(jìn)程PROCESSCOM組合進(jìn)程PROCESSLATCH鎖存器current_statenext_stateLOCK狀態(tài)機(jī)FSMCLKALESTARTOEADDAclkEOCD[7..0]ADC0809Q[7..0]模擬信號(hào)輸入采樣數(shù)據(jù)輸出A/D工作時(shí)鐘LOCK02采樣狀態(tài)機(jī)結(jié)構(gòu)框圖37PROCESSPROCESSPROCESScurrent38對(duì)ADC0809初始化st0st1st2st3st4打開(kāi)片選,啟動(dòng)轉(zhuǎn)換采樣周期中等待EOC='0'正在轉(zhuǎn)換EOC='1'轉(zhuǎn)換結(jié)束開(kāi)啟OE數(shù)據(jù)輸出有效由LOCK:0->1發(fā)數(shù)據(jù)鎖存信號(hào)2采樣狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖38對(duì)ADC0809初始化st0st1st2st3st4打開(kāi)39ADC0809內(nèi)部邏輯結(jié)構(gòu)ADC0809引腳圖

39ADC0809內(nèi)部邏輯結(jié)構(gòu)402采樣狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖ADDA<='1';st0:ALE<='0';START<='0';OE<='0';LOCK<='0';

st1:ALE<='1';START<='1';OE<='0';LOCK<='0';st2:ALE<='0';START<='0';OE<='0';LOCK<='0';st3:ALE<='0';START<='0';OE<='1';LOCK<='0';st4:ALE<='0';START<='0';OE<='1';LOCK<='1';ALE:地址鎖存信號(hào)START:轉(zhuǎn)換啟動(dòng)信號(hào)LOCK:輸出鎖存信號(hào)OE:輸出允許信號(hào)ADDA:通道選擇信號(hào)402采樣狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖ADDA<='1';413.VHDL描述狀態(tài)機(jī)(1)實(shí)體libraryieee;useieee.std_logic_1164.all;entityadcintis port(D:instd_logic_vector(7downto0); clk,EOC:instd_logic;ALE,START,OE,ADDA,LOCK0:outstd_logic; Q:outstd_logic_vector(7downto0));end;413.VHDL描述狀態(tài)機(jī)(1)實(shí)體423.VHDL描述狀態(tài)機(jī)(2)說(shuō)明部分architecturebehavofadcintis Typestatesis(st0,st1,st2,st3,st4); signalcurrent_state,next_state:states; signalregl:std_logic_vector(7downto0); signallock:std_logic;begin423.VHDL描述狀態(tài)機(jī)(2)說(shuō)明部分433.VHDL描述狀態(tài)機(jī)(3)主控時(shí)序進(jìn)程部分Reg:process(clk)beginif(clk'eventandclk='1')then current_state<=next_state; endif;endprocess;433.VHDL描述狀態(tài)機(jī)(3)主控時(shí)序進(jìn)程部分44(4)主控組合進(jìn)程部分com:process(current_state,EOC)beginCASEcurrent_stateis whenst0=>ALE<='0';START<='0';OE<='0';LOCK<='0';

next_state<=st1;whenst1=>ALE<='1';START<='1';OE<='0';LOCK<='0'; next_state<=st2;whenst2=>ALE<='0';START<='0';OE<='0';LOCK<='0'; ifEOC='1'thennext_state<=st3;elsenext_state<=st2;endif;whenst3=>ALE<='0';START<='0';OE<='1';LOCK<='0'; next_state<=st4; whenst4=>ALE<='0';START<='0';OE<='1';LOCK<='1'; next_state<=st0;whenothers=>ALE<='0';START<='0';OE<='0';LOCK<='0';

next_state<=st0;ENDCASE;endprocesscom;44(4)主控組合進(jìn)程部分453.VHDL描述狀態(tài)機(jī)(5)輔助進(jìn)程部分-鎖存器latch1:process(lock)beginif(lock'eventandlock='1')then regl<=D; endif;endprocesslatch1;453.VHDL描述狀態(tài)機(jī)(5)輔助進(jìn)程部分-鎖存器463.VHDL描述狀態(tài)機(jī)(6)其它ADDA<='1';Q<=regl;Lock0<=lock;endbehav;463.VHDL描述狀態(tài)機(jī)(6)其它474.仿真波形474.仿真波形485.綜合RTL電路485.綜合RTL電路496.分解組合進(jìn)程

組合進(jìn)程可以分解為兩個(gè)組合進(jìn)程com1,com2,則效果相同.com1:process(current_state,EOC)beginCASEcurrent_stateiswhenst0=>ALE<='0';START<='0';OE<='0';LOCK<='0';whenst1=>ALE<='1';START<='1';OE<='0';LOCK<='0';whenst2=>ALE<='0';START<='0';OE<='0';LOCK<='0';whenst3=>ALE<='0';START<='0';OE<='1';LOCK<='0';whenst4=>ALE<='0';START<='0';OE<='1';LOCK<='1';whenothers=>ALE<='0';START<='0';OE<='0';LOCK<='0';ENDCASE;endprocesscom1;com2:process(current_state,EOC)beginCASEcurrent_stateiswhenst0=>next_state<=st1;whenst1=>next_state<=st2;whenst2=>ifEOC='1'thennext_state<=st3;elsenext_state<=st2;endif;whenst3=>next_state<=st4;whenst4=>next_state<=st0;whenothers=>next_state<=st0;ENDCASE;endprocesscom2;496.分解組合進(jìn)程

組合進(jìn)程可以分解為兩個(gè)組合進(jìn)程com1507.單進(jìn)程Moore型有限狀態(tài)機(jī)

組合進(jìn)程可以與時(shí)序進(jìn)程合并為一個(gè)。去掉next_statecomreg:process(clk,EOC)beginif(clk'eventandclk='1')thenCASEcurrent_stateiswhenst0=>ALE<='0';START<='0';OE<='0';lock<='0';current_state<=st1;whenst1=>ALE<='1';START<='1';OE<='0';lock<='0';current_state<=st2;whenst2=>ALE<='0';START<='0';OE<='0';lock<='0'; ifEOC='1'thencurrent_state<=st3;elsecurrent_state<=st2;endif;whenst3=>ALE<='0';START<='0';OE<='1';lock<='0';current_state<=st4;whenst4=>ALE<='0';START<='0';OE<='1';lock<='1';current_state<=st0;whenothers=>ALE<='0';START<='0';OE<='0';lock<='0';current_state<=st0;ENDCASE;endif;endprocess;507.單進(jìn)程Moore型有限狀態(tài)機(jī)

組合進(jìn)程可以與時(shí)序進(jìn)程51綜合結(jié)果

可見(jiàn)輸出增加了一個(gè)鎖存器??梢杂行У販p小組合電路的毛刺現(xiàn)象。但輸出會(huì)延遲一個(gè)時(shí)鐘周期。51綜合結(jié)果

可見(jiàn)輸出增加了一個(gè)鎖存器??梢杂行У販p小組合52組合進(jìn)程,時(shí)序進(jìn)程分開(kāi)的情況組合進(jìn)程,時(shí)序進(jìn)程合并的情況52組合進(jìn)程,時(shí)序進(jìn)程分開(kāi)的情況組合進(jìn)程,時(shí)序進(jìn)程合并的情況538.單進(jìn)程Moore型有限狀態(tài)機(jī)例8-4libraryieee;

useieee.std_logic_1164.all;entitymoore1is

port(clk,RST:instd_logic;

DATAIN:instd_logic_vector(1downto0);

Q:outstd_logic_vector(3downto0));

end;architecturebhvofmoore1is

typest_typeis(st0,st1,st2,st3,st4);

signalc_st:st_type;

begin

process(clk,RST)

begin

ifRST='1'then

c_st<=st0;Q<="0000";elsifclk'eventandclk='1'then

casec_stis

whenst0=>ifdatain="10"thenc_st<=st1;elsec_st<=st0;endif;Q<="1001";

whenst1=>ifdatain="11"thenc_st<=st2;elsec_st<=st1;endif;Q<="0101";

whenst2=>ifdatain="01"thenc_st<=st3;elsec_st<=st0;endif;Q<="1100";

whenst3=>ifdatain="00"thenc_st<=st4;elsec_st<=st2;endif;Q<="0010";

whenst4=>ifdatain="11"thenc_st<=st0;elsec_st<=st3;endif;Q<="1001";

whenothers=>c_st<=st0;

endcase;

endif;

endprocess;end;538.單進(jìn)程Moore型有限狀態(tài)機(jī)例8-454綜合結(jié)果54綜合結(jié)果55改寫(xiě)為兩進(jìn)程Moore型有限狀態(tài)機(jī)例7-4libraryieee;

useieee.std_logic_1164.all;entitymoore1is

port(clk,RST:instd_logic;

DATAIN:instd_logic_vector(1downto0);

Q:outstd_logic_vector(3downto0));

end;architecturebhvofmoore1is

typest_typeis(st0,st1,st2,st3,st4);

signalc_st,n_st:st_type;

begin

process(clk,RST)

begin

ifclk'eventandclk='1'thenc_st<=n_st;endif;endprocess;process(c_st)begin

ifRST='1'thenn_st<=st0;Q<="0000";elsecasec_stis

whenst0=>ifdatain="10"thenn_st<=st1;elsen_st<=st0;endif;Q<="1001";

whenst1=>ifdatain="11"thenn_st<=st2;elsen_st<=st1;endif;Q<="0101";

whenst2=>ifdatain="01"thenn_st<=st3;elsen_st<=st0;endif;Q<="1100";

whenst3=>ifdatain="00"thenn_st<=st4;elsen_st<=st2;endif;Q<="0010";

whenst4=>ifdatain="11"thenn_st<=st0;elsen_st<=st3;endif;Q<="1001";

whenothers=>n_st<=st0;

endcase;endif;

endprocess;end;55改寫(xiě)為兩進(jìn)程Moore型有限狀態(tài)機(jī)例7-456兩進(jìn)程綜合結(jié)果56兩進(jìn)程綜合結(jié)果57單進(jìn)程兩進(jìn)程57單進(jìn)程兩進(jìn)程58

例8-57.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)1/101000/101111/101010/011010/010101/100000/110111/111010/100111/01001Q(輸出)是DATAIN(輸入)與狀態(tài)的函數(shù)DATAIN/Q輸入/輸出58例8-57.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)1/1059

例7-5實(shí)體與說(shuō)明7.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)libraryieee;useieee.std_logic_1164.all;entitymealy1isport(clk,datain,reset:instd_logic;Q:outstd_logic_vector(4downto0));end;architecturebhvofmealy1istypestatesis(st0,st1,st2,st3,st4);signalstx:states;begin59例7-5實(shí)體與說(shuō)明7.3Mealy型有限狀態(tài)機(jī)60

例7-5主控時(shí)序與組合進(jìn)程7.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)comreg:process(clk,reset)beginifreset='1'thenstx<=st0;elsifclk'eventandclk='1'thencasestxis whenst0=>ifdatain='1'thenstx<=st1;endif; whenst1=>ifdatain='0'thenstx<=st2;endif; whenst2=>ifdatain='1'thenstx<=st3;endif; whenst3=>ifdatain='0'thenstx<=st4;endif; whenst4=>ifdatain='1'thenstx<=st0;endif; whenothers=>stx<=st0;endcase;endif;endprocess;60例7-5主控時(shí)序與組合進(jìn)程7.3Mealy型有61

例7-5輸出信號(hào)的進(jìn)程7.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)com1:process(stx,datain)begincasestxis whenst0=>ifdatain='1'thenQ<="10000";elseQ<="01010";endif; whenst1=>ifdatain='0'thenQ<="10111";elseQ<="10100";endif; whenst2=>ifdatain='1'thenQ<="10101";elseQ<="10011";endif; whenst3=>ifdatain='0'thenQ<="11011";elseQ<="01001";endif; whenst4=>ifdatain='1'thenQ<="11101";elseQ<="01101";endif;endcase;endprocess;end;61例7-5輸出信號(hào)的進(jìn)程7.3Mealy型有限狀62

例7-5可見(jiàn)輸出是當(dāng)前輸入與當(dāng)前狀態(tài)的函數(shù)。Q輸出有些毛刺現(xiàn)象。7.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)62例7-57.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)63消除毛刺的方法是將Q鎖存后再輸出:將com1進(jìn)程修改為:(mealy2.vhd)com1:process(stx,datain,clk)

variableQ2:std_logic_vector(4downto0);begincasestxis whenst0=>ifdatain='1'thenQ2:="10000";elseQ2:="01010";endif; whenst1=>ifdatain='0'thenQ2:="10111";elseQ2:="10100";endif; whenst2=>ifdatain='1'thenQ2:="10101";elseQ2:="10011";endif; whenst3=>ifdatain='0'thenQ2:="11011";elseQ2:="01001";endif; whenst4=>ifdatain='1'thenQ2:="11101";elseQ2:="01101";endif;endcase;ifclk'eventandclk='1'thenQ<=Q2;endif;endprocess;end;63消除毛刺的方法是將Q鎖存后再輸出:com1:proce64輸出Q鎖存的情況64輸出Q鎖存的情況65輸出Q鎖存的情況65輸出Q鎖存的情況66將三進(jìn)程合并一個(gè)進(jìn)程:(mealy3.vhd)與mealy2.vhd效果相同comregcom1:process(clk,reset)beginifreset='1'thenstx<=st0;elsifclk'eventandclk='1'thencasestxis whenst0=>ifdatain='1'thenstx<=st1;endif;

ifdatain='1'thenQ<="10000";elseQ<="01010";endif; whenst1=>ifdatain='0'thenstx<=st2;endif;

ifdatain='0'thenQ<="10111";elseQ<="10100";endif; whenst2=>ifdatain='1'thenstx<=st3;endif;

ifdatain='1'thenQ<="10101";elseQ<="10011";endif; whenst3=>ifdatain='0'thenstx<=st4;endif;

ifdatain='0'thenQ<="11011";elseQ<="01001";endif; whenst4=>ifdatain='1'thenstx<=st0;endif;

ifdatain='1'thenQ<="11101";elseQ<="01101";endif; whenothers=>stx<=st0;endcase;endif;endprocess;66將三進(jìn)程合并一個(gè)進(jìn)程:(mealy3.vhd)與me67輸出Q鎖存的情況合并一個(gè)進(jìn)程的情況67輸出Q鎖存的情況合并一個(gè)進(jìn)程的情況68合并一個(gè)進(jìn)程的情況68合并一個(gè)進(jìn)程的情況69常用的描述方式有三種:三進(jìn)程描述、雙進(jìn)程描述和單進(jìn)程描述。三進(jìn)程描述就是指在VHDL源代碼的結(jié)構(gòu)體中,用三個(gè)進(jìn)程語(yǔ)句來(lái)描述有限狀態(tài)機(jī)的行為:一個(gè)進(jìn)程用來(lái)進(jìn)行有限狀態(tài)機(jī)中的次態(tài)邏輯的描述;一個(gè)進(jìn)程用來(lái)進(jìn)行有限狀態(tài)機(jī)中的狀態(tài)寄存器的描述;還有一個(gè)進(jìn)程用來(lái)進(jìn)行狀態(tài)機(jī)中輸出邏輯的描述。所謂雙進(jìn)程描述就是指在VHDL源代碼的結(jié)構(gòu)體中,用兩個(gè)進(jìn)程語(yǔ)句來(lái)描述有限狀態(tài)機(jī)的行為:一個(gè)進(jìn)程語(yǔ)句用來(lái)描述有限狀態(tài)中次態(tài)邏輯、狀態(tài)寄存器和輸出邏輯中的任何兩個(gè);剩下的一個(gè)用另外的一個(gè)進(jìn)程來(lái)進(jìn)行描述。所謂單進(jìn)程描述就是將有限狀態(tài)機(jī)中的次態(tài)邏輯、狀態(tài)寄存器和輸出邏輯在VHDL源代碼的結(jié)構(gòu)體中用一個(gè)進(jìn)程來(lái)進(jìn)行描述。69常用的描述方式有三種:三進(jìn)程描述、雙進(jìn)程描述和單進(jìn)程描述70707.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.2序列檢測(cè)器之狀態(tài)機(jī)設(shè)計(jì)

接下頁(yè)7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.2序列檢7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.2序列檢測(cè)器之狀態(tài)機(jī)設(shè)計(jì)

接上頁(yè)7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.2序列檢7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.2序列檢測(cè)器之狀態(tài)機(jī)設(shè)計(jì)

7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.2序列檢74前面為符號(hào)化編碼,狀態(tài)機(jī)各狀態(tài)的編碼也可以直接指定。7.4狀態(tài)編碼

狀態(tài)位直接輸出型編碼ADDA<='1';st0:ALE<='0';START<='0';OE<='0';LOCK<='0';

st1:ALE<='1';START<='1';OE<='0';LOCK<='0';st2:ALE<='0';START<='0';OE<='0';LOCK<='0';st3:ALE<='0';START<='0';OE<='1';LOCK<='0';st4:ALE<='0';START<='0';OE<='1';LOCK<='1';74前面為符號(hào)化編碼,狀態(tài)機(jī)各狀態(tài)的編碼也可以直接指定。7.75采樣狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖(復(fù)習(xí))ADDA<='1';st0:ALE<='0';START<='0';OE<='0';LOCK<='0';

st1:ALE<='1';START<='1';OE<='0';LOCK<='0';st2:ALE<='0';START<='0';OE<='0';LOCK<='0';st3:ALE<='0';START<='0';OE<='1';LOCK<='0';st4:ALE<='0';START<='0';OE<='1';LOCK<='1';ALE:地址鎖存信號(hào)START:轉(zhuǎn)換啟動(dòng)信號(hào)LOCK:輸出鎖存信號(hào)OE:輸出允許信號(hào)ADDA:通道選擇信號(hào)75采樣狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖(復(fù)習(xí))ADDA<='1';AL76VHDL描述狀態(tài)機(jī)(1)實(shí)體libraryieee;useieee.std_logic_1164.all;entityAD0809is port(clk:instd_logic; EOC:instd_logic; D:instd_logic_vector(7downto0); ALE:outstd_logic; START:outstd_logic; OE:outstd_logic; ADDA:outstd_logic; lock0:outstd_logic; C_state:outstd_logic_vector(4downto0); Q:outstd_logic_vector(7downto0));end;76VHDL描述狀態(tài)機(jī)(1)實(shí)體77VHDL描述狀態(tài)機(jī)(2)說(shuō)明部分architecturebhvofAD0809is signalcurrent_state,next_state:std_logic_vector(4downto0); constantst0:std_logic_vector(4downto0):="00000"; constantst1:std_logic_vector(4downto0):="11000"; constantst2:std_logic_vector(4downto0):="00001"; constantst3:std_logic_vector(4downto0):="00100"; constantst4:std_logic_vector(4downto0):="00110"; signallock:std_logic; signalregl:std_logic_vector(7downto0);begin77VHDL描述狀態(tài)機(jī)(2)說(shuō)明部分78VHDL描述狀態(tài)機(jī)(3)主控時(shí)序進(jìn)程部分Reg:process(clk)beginif(clk'eventandclk='1')then current_state<=next_state; endif;endprocess;78VHDL描述狀態(tài)機(jī)(3)主控時(shí)序進(jìn)程部分79(4)主控組合進(jìn)程部分

com:process(current_state,EOC) begin casecurrent_stateis whenst0=>next_state<=st1; whenst1=>next_state<=st2; whenst2=>ifEOC='0'thennext_state<=st2; elsenext_state<=st3; endif; whenst3=>next_state<=st4; whenst4=>next_state<=st0; whenothers=>next_state<=st0; endcase; endprocess;79(4)主控組合進(jìn)程部分80VHDL描述狀態(tài)機(jī)(5)輔助進(jìn)程部分-鎖存器latch1:process(lock)beginif(lock'eventandlock='1')then regl<=D; endif;endprocesslatch1;80VHDL描述狀態(tài)機(jī)(5)輔助進(jìn)程部分-鎖存器81VHDL描述狀態(tài)機(jī)(6)其它

ADDA<='1'; lock0<=lock; q<=regl; start<=current_state(4); ALE<=current_state(3); OE<=current_state(2); LOCK<=current_state(1); c_state<=current_state;81VHDL描述狀態(tài)機(jī)(6)其它827.4狀態(tài)編碼

2.順序編碼前面的編碼,狀態(tài)碼有5位,需要有5個(gè)觸發(fā)器。但由于只有5種狀態(tài),所以要求觸發(fā)器最少的話(huà),其實(shí)只三個(gè)就夠了。用順序編碼的話(huà):ST0:000

ST1:001

ST2:010

ST3:011

ST4:100但不同狀態(tài)下,有不同控制信號(hào)輸出,此時(shí)需要相應(yīng)的譯碼電路,需要大量的組合邏輯電路。827.4狀態(tài)編碼

2.順序編碼前面的編碼,狀態(tài)碼有837.4狀態(tài)編碼

3.一位熱碼編碼用n個(gè)觸發(fā)器來(lái)實(shí)現(xiàn)有n個(gè)狀態(tài)的狀態(tài)機(jī)。每一個(gè)狀態(tài)都由其中一個(gè)觸發(fā)器的狀態(tài)表示。其它觸發(fā)器置為0。用順序編碼的話(huà):ST0:10000

ST1:01000ST2:00100

ST3:00010

ST4:00001但不同狀態(tài)下,有不同控制信號(hào)輸出,此時(shí)同樣也需要相應(yīng)的譯碼電路,但此時(shí)譯碼電路要簡(jiǎn)單很多。837.4狀態(tài)編碼

3.一位熱碼編碼用n個(gè)觸發(fā)器來(lái)實(shí)847.5狀態(tài)機(jī)剩余狀態(tài)處理仍以前面為例。用順序編碼的話(huà):ST0:000

ST1:001

ST2:010

ST3:011

ST4:100三個(gè)觸發(fā)器有8種狀態(tài),還有三種狀態(tài)未使用即101,110,111,這是非法狀態(tài),解決方法:1.使用Whenothers=>next_state<=st0;這樣的語(yǔ)句。2.為了安全起見(jiàn),將剩余狀態(tài)羅列出來(lái)。

when"101"=>next_state<=st0;when"110"=>next_state<=st0;when"111"=>next_state<=st0;3.有時(shí)剩余狀態(tài)比較多,如使用1位循環(huán)熱碼。有2的5次方共32

種狀態(tài),而只用了5種狀態(tài)。如果單獨(dú)羅列就太多了。可使用如下方法檢測(cè)是否進(jìn)入非法狀態(tài)。

alarm<=(st0and(st1orst2orst3orst4orst5))or(st1and(st0orst2orst3orst4orst5))or(st2and(st0orst1orst3orst4orst5))or(st3and(st0orst1orst2orst4orst5))or(st4and(st0orst1orst2orst3orst5))如時(shí)alarm為高電平則進(jìn)入非法狀態(tài),由此信號(hào)啟動(dòng)狀態(tài)機(jī)復(fù)位。847.5狀態(tài)機(jī)剩余狀態(tài)處理仍以前面為例。用順序編碼的858586第6章宏功能模塊與IP應(yīng)用LPM:LibraryofParameterizedModules參數(shù)可設(shè)置模塊庫(kù)在第6章中接觸到的是原理圖的使用方法,如LPM_counter數(shù)控分頻器LPM_rom86第6章宏功能模塊與IP應(yīng)用LPM:Library87現(xiàn)在再來(lái)看LPM文本方式調(diào)用首先由MegaWizardPlug-InManager生成需要的vhd文件。然后由原理圖調(diào)用此元件或

VHDL頂層設(shè)計(jì)中的例化元件來(lái)調(diào)用所以文本方式調(diào)用與原理圖方式調(diào)用本質(zhì)上是一樣的。87現(xiàn)在再來(lái)看LPM文本方式調(diào)用首先由MegaWizard886.6.1LPM_RAM模塊例如將前面的采樣狀態(tài)機(jī),最后輸出Q[7..0]8位數(shù)據(jù),如果做成存儲(chǔ)示波器,需要將這些數(shù)據(jù)存在RAM中,在一定的時(shí)候RAM中的數(shù)據(jù)輸出顯示.那么就可以用LPM_RAM模塊實(shí)現(xiàn)一個(gè)雙口RAM.886.6.1LPM_RAM模塊例如將前面的采樣狀態(tài)機(jī),最89Ram2.vhdFile->MegaWizardPlug-InManagerCreateanewcustommegafunctionvariation(變異)Storage->LPM_RAM_DQ->VHDL->directory\ram2.vhdQ:數(shù)據(jù)位寬度8address:地址線(xiàn)寬為9其它默認(rèn)值89Ram2.vhdFile->MegaWizardP90LIBRARYieee;USEieee.std_logic_1164.all;ENTITYram2IS PORT (address:INSTD_LOGIC_VECTOR(8DOWNTO0); inclock:INSTD_LOGIC; we :INSTD_LOGIC:='1'; data :INSTD_LOGIC_VECTOR(7DOWNTO0); q:OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDram2;ARCHITECTURESYNOFram2ISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0); COMPONENTlpm_ram_dq GENERIC( lpm_width :NATURAL; lpm_widthad :NATURAL; lpm_indata :STRING; lpm_address_control :STRING; lpm_outdata :STRING; lpm_hint :STRING ); 90LIBRARYieee;91 PORT(address:INSTD_LOGIC_VECTOR(8DOWNTO0); inclock:INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(7DOWNTO0); data :INSTD_LOGIC_VECTOR(7DOWNTO0); we :INSTD_LOGIC); ENDCOMPONENT;BEGIN q<=sub_wire0(7DOWNTO0); lpm_ram_dq_component:lpm_ram_dq GENERICMAP( LPM_WIDTH=>8, LPM_WIDTHAD=>9, LPM_INDATA=>"REGISTERED", LPM_ADDRESS_CONTROL=>"REGISTERED", LPM_OUTDATA=>"UNREGISTERED", LPM_HINT=>"USE_EAB=ON" ) PORTMAP( address=>address,inclock=>inclock, data=>data,we=>we,q=>sub_wire0 );ENDSYN;91 PORT(address:INSTD_LOGI92仿真可見(jiàn)We=‘1’時(shí),時(shí)鐘信號(hào)的上降沿在相應(yīng)的address寫(xiě)入數(shù)據(jù),輸出為00,下降沿時(shí)輸出當(dāng)前數(shù)據(jù)q.We=‘0’時(shí),時(shí)鐘信號(hào)的上升沿時(shí)讀出相應(yīng)address的數(shù)據(jù)q.92仿真可見(jiàn)936.6.1LPM_ROM模塊正弦信號(hào)發(fā)生器設(shè)計(jì)ROM:readonlymemory在ROM中存放正弦信號(hào)數(shù)據(jù),需要時(shí)從ROM中按順序讀出.#include"stdio.h"#include"math.h"main(){inti;floats;for(i=0;i<64;i++){s=(cos(atan(1)*8*i/63)+1)*255/2;printf("%x:%3.0f;",i,s);}}正弦信號(hào)波形數(shù)據(jù)生成03263255936.6.1LPM_ROM模塊正弦信號(hào)發(fā)生器設(shè)計(jì)ROM94將C程序編譯生成.exe文件如rom.exe在dos下運(yùn)行rom.exe>rom.txt保存在sindata.mif的文件內(nèi)容如下:WIDTH=8;--數(shù)據(jù)寬度DEPTH=64;--數(shù)據(jù)深度--此時(shí)地址線(xiàn)寬度可設(shè)為6位ADDRESS_RADIX=HEX;DATA_RADIX=DEC;CONTENTBEGIN00:255;01:254;02:252;03:249;04:245;05:239;06:233;07:225;08:217;09:207;0A:197;0B:186;0C:174;0D:162;0E:150;0F:137;10:124;11:112;12:99;13:87;14:75;15:64;16:53;17:43;18:34;19:26;1A:19;1B:13;1C:8;1D:4;1E:1;1F:0;20:0;21:1;22:4;23:8;24:13;25:19;26:26;27:34;28:43;29:53;2A:64;2B:75;2C:87;2D:99;2E:112;2F:124;30:137;31:150;32:162;33:174;34:186;35:197;36:207;37:217;38:225;39:233;3A:239;3B:245;3C:249;3D:252;3E:254;3F:255;END;94將C程序編譯生成.exe文件如rom.exe95LPM_ROM定制,命名sindata.vhdFile->MegaWizardPlug-InManagerCreateanewcustommegafunctionvariation(變異)Storage->LPM_ROM->VHDL->directory\sindata.vhdQ:數(shù)據(jù)位寬度8address:地址線(xiàn)寬為6ROM中初始化文件sindata.mif,采用相對(duì)路徑.95LPM_ROM定制,命名sindata.vhdFile96LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsindataIS PORT (address:INSTD_LOGIC_VECTOR(5DOWNTO0); inclock:INSTD_LOGIC; q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDsindata;ARCHITECTURESYNOFsindataIS SIGNALsub_wire0 :STD_LOGIC_VECTOR(7DOWNTO0); COMPONENTlpm_rom GENERIC( lpm_width :NATURAL; lpm_widthad:NATURAL; lpm_address_control :STRING; lpm_outdata :STRING; lpm_file :STRING ); 96LIBRARYieee;97 PORT(address :INSTD_LOGIC_VECTOR(5DOWNTO0); inclock :INSTD_LOGIC; q:OUTSTD_LOGIC_VECTOR(7DOWNTO0)); ENDCOMPONENT;BEGIN q<=sub_wire0(7DOWNTO0); lpm_rom_component:lpm_rom GENERICMAP( LPM_WIDTH=>8, LPM_WIDTHAD=>6, LPM_ADDRESS_CONTROL=>"REGISTERED", LPM_OUTDATA=>"UNREGISTERED", LPM_FILE=>"sin_data.mif“) PORTMAP( address=>address, inclock=>inclock, q=>sub_wire0 );ENDSYN;97 PORT(address :INSTD_LOGI98仿真結(jié)果:98仿真結(jié)果:996.6.1LPM_FIFO模塊FIFO:firstinfirstoutFile->MegaWizardPlug-InManagerCreateanewcustommegafunctionvariation(變異)Storage->LPM_FIFO->VHDL->directory\fifo2.vhd

數(shù)據(jù)位寬度8,數(shù)據(jù)深度512996.6.1LPM_FIFO模塊FIFO:first100LIBRARYieee;USEieee.std_logic_1164.all;ENTITYfifo2IS PORT(data :INSTD_LOGIC_VECTOR(7DOWNTO0); wrreq :INSTD_LOGIC; rdreq :INSTD_LOGIC; clock :INSTD_LOGIC; aclr :INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(7DOWNTO0); full :OUTSTD_LOGIC);ENDfifo2;ARCHITECTURESYNOFfifo2IS SIGNALsub_wire0 :STD_LOGIC_VECTOR(7DOWNTO0); SIGNALsub_wire1 :STD_LOGIC; COMPONENTlpm_fifo GENERIC(lpm_width :NATURAL; lpm_numwords :NATURAL; lpm_widthu :NATURAL; lpm_showahead :STRING; lpm_hint :STRING);100LIBRARYieee;101 PORT(rdreq:INSTD_LOGIC; aclr:INSTD_LOGIC; clock:INSTD_LOGIC; q:OUTSTD_LOGIC_VECTOR(7DOWNTO0); wrreq:INSTD_LOGIC; data:INSTD_LOGIC_VECTOR(7DOWNTO0); ful:OUTSTD_LOGIC); ENDCOMPONENT;BEGIN q<=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論