VHDL語言程序設(shè)計(jì)基礎(chǔ)_第1頁
VHDL語言程序設(shè)計(jì)基礎(chǔ)_第2頁
VHDL語言程序設(shè)計(jì)基礎(chǔ)_第3頁
VHDL語言程序設(shè)計(jì)基礎(chǔ)_第4頁
VHDL語言程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

EDA教學(xué)系統(tǒng)總體介紹湖北工業(yè)大學(xué)實(shí)驗(yàn)實(shí)訓(xùn)中心電子實(shí)習(xí)部2011-10-24葉紅結(jié)構(gòu)體(ARCHITECTURE)進(jìn)程或其它并行結(jié)構(gòu)實(shí)體(ENTITY)配置(CONFIGURATION)庫、程序包設(shè)計(jì)實(shí)體

一、VHDL程序設(shè)計(jì)基本結(jié)構(gòu)庫、程序包

庫(LIBRARY)——存放預(yù)先設(shè)計(jì)好的程序包和數(shù)據(jù)的集合體。

程序包(PACKAGE)——將已定義的數(shù)據(jù)類型、元件調(diào)用說明及子程序收集在一起,供VHDL設(shè)計(jì)實(shí)體共享和調(diào)用,若干個(gè)包則形成庫。常用庫有:·IEEE(常用的元件和標(biāo)準(zhǔn)模塊存放的庫)、

·STD、·WORK、·VITAL。其中必須顯示出來的是:IEEE庫包括:STD_LOGIC_1164STD_LOGIC_ARITH——是SYNOPSYS公司加入IEEE庫程序包,包括:STD_LOGIC_SIGNED(有符號數(shù))

STD_LOGIC_UNSIGNED(無符號數(shù))STD_LOGIC_SMALL_INT(小整型數(shù))VHDL’87版本使用IEEESTD1076-1987語法標(biāo)準(zhǔn)VHDL’93版本使用IEEESTD1076-1993語法標(biāo)準(zhǔn)庫中USE語句的兩種常用表達(dá)格式:USE庫名.程序包名.項(xiàng)目名;USE庫名.程序包名.ALL;例:LIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL描述器件的輸入、輸出端口數(shù)據(jù)類型時(shí)將要用到的IEEE的標(biāo)準(zhǔn)庫中的STD_LOGIC_1164程序包。庫應(yīng)放在設(shè)計(jì)實(shí)體最前面:

用關(guān)鍵詞LIBRARY指明庫名,

用USE語句指明庫中程序包。實(shí)體(ENTITY)說明格式: ENTITY實(shí)體名IS [類屬參數(shù)說明]; [端口說明]; END實(shí)體名;規(guī)則:(1)類屬參數(shù)說明必須放在端口說明之前,用于指定如矢量位數(shù)、延遲時(shí)間等參數(shù)。例如:GENERIC(m:TIME:=1ns);--說明m是一個(gè)值為1ns的時(shí)間參數(shù);又有程序語句:tmp1<=d0ANDse1AFTERm;--表示d0ANDse1經(jīng)1ns延遲后才送到tem1。(2)端口說明:是設(shè)計(jì)實(shí)體與外部接口的描述說明,相當(dāng)于FPGA器件的引腳說明。其格式為:PORT(端口名,端口名:模式數(shù)據(jù)類型名; :端口名,端口名:模式數(shù)據(jù)類型名);

例如:PORT(a,b:INSTD_LOGIC;

s:INSTD_LOGIC;

y:OUTSTD_LOGIC);端口名:常用幾個(gè)英文字母或著一個(gè)英文字母加數(shù)字表示。如:CLK、A0、RESTER、D3等。端口模式包括:1)IN; --輸入,符號:2)OUT;

--輸出,符號:3)INOUT;--雙向,符號:4)BUFFER;--具有讀功能的輸出,符號:DQBUFFER端口數(shù)據(jù)類型名:由IEEESTDLOGIC1164所約定的、由EDA工具支持和提供的數(shù)據(jù)類型為標(biāo)準(zhǔn)邏輯(standardlogic)類型。數(shù)據(jù)類型主要分為:步爾型(boolean)、位型(bit)、位矢量型(bit-vector)、整數(shù)型(integer)。結(jié)構(gòu)體(ARCHITECTURE):

基本設(shè)計(jì)單元的實(shí)體:用于指明設(shè)計(jì)基本單元的行為、元件及內(nèi)部連接關(guān)系,即定義設(shè)計(jì)單元的功能。

結(jié)構(gòu)體的書寫格式:

ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS[說明語句];

--

為內(nèi)部信號、常數(shù)、數(shù)據(jù)類型、函數(shù)定義BEGIN[功能描述語句];ENDARCHITECTURE結(jié)構(gòu)體名;例如:“或門”的結(jié)構(gòu)體

ARCHITECTUREor1OFtemp1ISSIGNALy:STD_LOGIC;BEGIN y<=aORb;

ENDARCHITECTUREor1;配置(CONFIGURATION)——把特定的結(jié)構(gòu)體關(guān)聯(lián)(指定給)一個(gè)確定的實(shí)體。一般在大而復(fù)雜的工程設(shè)計(jì)中才用到配置?!盎蜷T”的完整描述:LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALL;ENTITYor1ISPORT(a,b:INSTD_LOGIC;

y:OUTSTD

LOGIC);ENDor1;ARCHITECTUREexample1OFor1ISBEGINy<=aORb;ENDexample1;基本邏輯器件的描述:“半加器”的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;

so,co:OUTSTD_LOGIC);ENDhadder;ARCHITECTUREexample2OFh_adderISBEGIN so<=aXORb; co<=aANDb;ENDexample2;absoco鎖存器的描述qDQenadLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYlatch1ISPORT(d:INSTD_LOGIC;

ena:INSTD_LOGIC; q:OUTSTD_LOGIC);ENDlatch1;ARCHITECTUREexample4OFlatch1ISSIGNALsig_save:STD_LOGIC:=‘0’;BEGINPROCESS(d,ena) BEGIN IFena='1'THEN

Sig_save<=D; ENDIF; Q<=sig_save; ENDPROCESS;ENDexample4;二、VHDL語言要素

VHDL具有計(jì)算機(jī)編程語言的一般特性,其語言要素是編程語句的基本單元。準(zhǔn)確無誤地理解和掌握VHDL語言要素的基本含義和用法,對正確地完成VHDL程序設(shè)計(jì)十分重要。

1.數(shù)字型文字——由數(shù)字、小數(shù)點(diǎn)和下劃線組成(1)整數(shù)文字 5,678,156E2,45_234_287(=45234287)(2)實(shí)數(shù)文字188.993,88_670_551.453_909(3)以數(shù)制基數(shù)表示的文字 格式:數(shù)制#數(shù)值#

例如: 10#170# 16#FE# 2#11010001# 8#376#VHDL文字規(guī)則(4)物理量文字例如:60s,100m2.字符串文字字符——以單引號括起來的數(shù)字、字母和符號(ASCII碼)例如:’0’,’1’,’A’,’B’,’a’,’b’字符串——一維的字符數(shù)組,用雙引號括起來。(1)文字字符串例如:”ABC”,”ABOY.”,”A”(2)數(shù)值字符串——矢量格式:數(shù)制基數(shù)符號“數(shù)值字符串”其中: B——二進(jìn)制基數(shù)符號;

O——八進(jìn)制基數(shù)符號;

X——16進(jìn)制基數(shù)符號;例如: B“111011110”;矢量數(shù)組,長度為9 O“15”;等效B“001101”,長度為6 X“AD0”;等效B“101011010000”,長度為123.標(biāo)識符——是用戶給常量、變量、信號、端口、子程序或參數(shù)定義的名字規(guī)則:以字母開頭,后跟若干字母、數(shù)字或單個(gè)下劃線構(gòu)成,但最后不能為下劃線。例如:h_adder,mux21,example為合法標(biāo)識符;2adder,_mux21,ful__adder,adder_為錯(cuò)誤的標(biāo)識符。VHDL’93標(biāo)準(zhǔn)支持?jǐn)U展標(biāo)識符,以反斜杠來定界,允許以數(shù)字開頭,允許使用空格以及兩個(gè)以上的下劃號。例如:\74LS193\,\ABOY.\等為合法的標(biāo)識符。

4.下標(biāo)名——數(shù)組格式:標(biāo)識符(表達(dá)式)例如:b(3)5.段名——多個(gè)下標(biāo)名的組合格式:標(biāo)識符(表達(dá)式方向表達(dá)式)方向:TO——下標(biāo)序號由低到高

DOWNTO——下標(biāo)序號由高到低例如:D(7DOWNTO0);表示數(shù)據(jù)總線D7~D0 D(0TO7);表示數(shù)據(jù)總線D0~D7

——存放各種類型數(shù)據(jù)的容器,包括變量、常量和信號1.變量(VARIABLE)

規(guī)則:只能在進(jìn)程(PROCESS)、函數(shù)(FUNCTION)和過程(PROCEDURE)中說明和使用的局域量定義格式:VARIABLE變量名:數(shù)據(jù)類型{:=初始值}

例如:VARIABLEa:INTEGER VARIABLEb:INTEGER:=2;

VHDL數(shù)據(jù)對象

變量賦值語句: 目標(biāo)變量名:=表達(dá)式例如:VARIABLEx,y:REAL VARIABLEa,b:BIT

VECTOR(0TO7);

x:=100.0;

y:=1.5+x;

a:=“1010101” a(3TO6):=(‘1’,‘1’,‘0’,‘1’);

a(0TO5):=b(2TO7);

2.信號(SIGNAL)規(guī)則:信號是在結(jié)構(gòu)體(ARCHITECTURE)、程序包(PACKAGE)和實(shí)體中說明的全局量。信號定義格式:SIGNAL信號名:數(shù)據(jù)類型:=初值; 例如:SIGNALtemp:STD

LOGIC:=‘0’;

SIGNALflaga,flagb:BIT SIGNALdata:STD

LOOGIC

VECTOR(15DOWNTO0);信號賦值語句:目標(biāo)信號名<=表達(dá)式例如:x<=9;

y<=x;

z<=xAFTER5ns;信號與變量的區(qū)別:(1)使用場合不同;(變量:進(jìn)程;信號:結(jié)構(gòu)體)(2)變量用“:=”號賦值,其值被立即使用(無時(shí)間延遲);而信號用“<=”賦值,其值可以附加延遲。3.常數(shù)(CONSTANT)規(guī)則:常數(shù)在程序前部定義且一旦被賦值就不能再改變。常數(shù)定義格式:CONSTANT常數(shù)名:數(shù)據(jù)類型:=初值;例如:CONSTANTfbus:BIT

VECTOR:=“010111”;CONSTANTVcc:REAL:=5.0;CONSTANTdely:TIME:=25ns;1.標(biāo)量型(ScalarType)——單元素的最基本數(shù)據(jù)類型 (1)實(shí)數(shù)類型 (2)整數(shù)類型 (3)枚舉類型 (4)時(shí)間類型VHDL數(shù)據(jù)類型2.復(fù)合類型(CompositeType)(1)數(shù)組型(Array)(2)記錄型(Record)3.存取類型(AccessType)——為數(shù)據(jù)對象提供存取方式4.文件類型(FilesType)——提供多值存取類型

VHDL的預(yù)定義數(shù)據(jù)類型——在IEEE庫中的標(biāo)準(zhǔn)程序包(STANDARD)中預(yù)先定義的數(shù)據(jù)類型。

1.布爾(BOOLEAN)數(shù)據(jù)類型包括邏輯“假”(FALSE)和邏輯“真”(TRUE),定義語句:TYPEBOOLEANIS(FALSE,TRUE);--以枚舉類型定義2.位(BIT)數(shù)據(jù)類型包括‘0’和‘1’,定義語句:TYPEBITIS(‘0’,‘1’)

3.位矢量(BIT

VECTOR)數(shù)據(jù)類型位矢量是用雙引號括起來的數(shù)字序列,如“0011”,X“00FD”定義語句:TYPEBIT

VECTORISARRAY(NaturalRange〈〉)OFBIT;--“〈〉”表示數(shù)據(jù)范圍未定界規(guī)則:使用位矢量必須注明位寬,例如:SIGNALa:BIT

VECTOR(7DOWNTO0);--定義a為由a(7)~a(0)構(gòu)成矢量,左為a(7)右為a(0);4.字符(CHARACTER)數(shù)據(jù)類型字符是用單引號括起來的ASCII碼字符,如‘A’‘a(chǎn)’‘0’‘9’定義語句:TYPECHARACTERIS(ASCII碼字符表中的全部字符)

5.整數(shù)(INTEGER)數(shù)據(jù)類型整數(shù)包括:正整數(shù)、負(fù)整數(shù)和零范圍:32位帶符號數(shù)原碼,即-(231-1)~+(231-1)(-2147483647~+2147483647)

6.自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)數(shù)據(jù)類型自然數(shù)——包括0和正整數(shù)正整數(shù)——不包括0的正整數(shù)7.實(shí)數(shù)(REAL)數(shù)據(jù)類型由正、負(fù)、小數(shù)點(diǎn)和數(shù)字組成,如:-1.0,+2.5,-1.0E38范圍:-1.0E+38TO+1.0E+388.字符串(STRING)數(shù)據(jù)類型字符串是用雙引號括起來的字符序列,也稱字符矢量或字符串?dāng)?shù)組。例如,“ABOY.”,“10100011”

9.時(shí)間(TIME)數(shù)據(jù)類型時(shí)間是物理量數(shù)據(jù),由整數(shù)數(shù)據(jù)和單位兩部分組成,定義語句:

TYPETIMEISRANGE–2147483647TO2147483647units

fs;--飛秒(10-15S)VHDL中的最小時(shí)間單位

ps=1000fs;--皮秒

ns=1000ps;--納秒

us=1000ns;--微秒

ms=1000us;--毫秒

sec=1000ms;--秒

min=60sec;--分

hr=60min;--時(shí)ENDunits;10.錯(cuò)誤等級(SeverityLevel)錯(cuò)誤等級數(shù)據(jù)用于表征系統(tǒng)的狀態(tài),包括:NOTE(注意),WARNING(警告),ERROR(出錯(cuò)),F(xiàn)AILURE(失?。?/p>

。在仿真過程中,可輸出這4種值來提示被仿真系統(tǒng)當(dāng)前的工作狀態(tài)。其定義如下:TYPEseverity_levelIS(note,warning,error,failure);IEEE預(yù)定義的標(biāo)準(zhǔn)邏輯位和矢量1.標(biāo)準(zhǔn)邏輯位(STD

LOGIC)數(shù)據(jù)類型TYPESTD

LOGICIS(‘U’--未初始化的 ‘X’--強(qiáng)未知的 ‘0’--強(qiáng)0 ‘1’--強(qiáng)1 ‘Z’--高阻態(tài) ‘W’--弱未知的 ‘L’--弱0 ‘H’--弱1 ‘-’--忽略);

2.標(biāo)準(zhǔn)邏輯矢量(STD

LOGIC

VECTOR)數(shù)據(jù)類型TYPESTD

LOGIC

VECTORISARRAY(NaturalRange〈〉)OFSTD

LOGIC;--

〈〉表示范圍未定用戶自定義數(shù)據(jù)類型方式定義格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型或:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;例如:TYPEstISARRAY(0TO15)OFSTD

LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);1.枚舉類型(Enumerated)定義格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;例如:TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);2.整數(shù)類型和實(shí)數(shù)類型定義格式:TYPE數(shù)據(jù)類型名ISRANGE范圍;例如:TYPEnum1ISRANGE0TO100;

3.數(shù)組類型數(shù)組——是一組具有相同數(shù)據(jù)類型的元素的組合。定義格式:TYPE數(shù)組名ISARRAY(數(shù)據(jù)范圍)OF數(shù)據(jù)類型;例如:TYPEdata_busISARRAY(7DOWNTO0)OFSTD_LOGIC;--定義數(shù)據(jù)總線,下標(biāo)由高到低,即D7位權(quán)值最高,D0位權(quán)值最低。TYPEdata_busISARRAY(0TO7)OFSTD_LOGIC;--定義數(shù)據(jù)總線,下標(biāo)由低到高,即D0位權(quán)值最高,D7位權(quán)值最低。4.記錄類型(Recode)記錄——是一組不同數(shù)據(jù)類型的元素的組合。定義格式:TYPE記錄類型名ISRECODE

元素名:元素?cái)?shù)據(jù)類型; 元素名:元素?cái)?shù)據(jù)類型; :

ENDRECODE[記錄類型名]類型操作符功能操作數(shù)數(shù)據(jù)類型算術(shù)操作符+加整數(shù)-減整數(shù)&并一維數(shù)組*乘整數(shù)和實(shí)數(shù)/除整數(shù)和實(shí)數(shù)MOD取模整數(shù)REM求余整數(shù)SLL邏輯左移BIT或布爾型一維數(shù)組SRL邏輯右移BIT或布爾型一維數(shù)組VHDL操作符類型操作符功能操作數(shù)數(shù)據(jù)類型算術(shù)操作符SLA算術(shù)左移BIT或布爾型一維數(shù)組SRA算術(shù)右移BIT或布爾型一維數(shù)組ROL邏輯循環(huán)左移BIT或布爾型一維數(shù)組ROR邏輯循環(huán)右移BIT或布爾型一維數(shù)組**乘方整數(shù)ABS取絕對值整數(shù)類型操作符功能操作數(shù)數(shù)據(jù)類型關(guān)系操作符=等于任何數(shù)據(jù)類型/=不等于任何數(shù)據(jù)類型<小于枚舉與整數(shù)及對應(yīng)的一維數(shù)組>大于同上<=小于等于同上>=大于等于同上類型操作符功能操作數(shù)數(shù)據(jù)類型

邏輯操作符

AND與BIT、BOOLEAN、STD

LOGICOR或同上NAND與非同上NOR或非同上XOR異或同上NXOR異或非同上NOT非同上類型操作符功能操作數(shù)數(shù)據(jù)類型符號操作符+正整數(shù)-付整數(shù)說明:(1)操作符的優(yōu)先級:()→(NOT,ABS,**)→(REM,MOD,/,*)→(+,-)→(關(guān)系運(yùn)算符)→(邏輯運(yùn)算符:XOR,NOR,NAND,OR,AND)(2)在邏輯運(yùn)算表達(dá)式中若全部運(yùn)算符相同,則可以不加括號;若運(yùn)算符不同則加括號分隔;(3)并“&”操作符完成一維數(shù)組的位擴(kuò)展功能:用于檢出時(shí)鐘邊沿、完成定時(shí)檢查、獲得未約束的數(shù)據(jù)類型的范圍等。格式:屬性測試項(xiàng)目名‘屬性標(biāo)識符;--S‘屬性標(biāo)識符屬性(ATTRIBUTE)描述與定義語句例如:TYPEnumberISINTEGERRANGE9DOWNTO0;

I:=number‘LEFT;--I=9 I:=number‘RIGTH;--I=0 I:=number‘HIGH;--I=9 I:=number‘LOW;--I=0EVENT——表示對當(dāng)前的一個(gè)極小的時(shí)間段內(nèi)發(fā)生事件的情況進(jìn)行檢測(如時(shí)鐘的邊沿)。例如:clock‘EVENT --檢測以clock為屬性測試項(xiàng)目的事件

clock‘EVENTANDclock=‘1’; --檢測clock的上升沿

clock‘EVENTANDclock=‘0’; --檢測clock的下降沿LAST_EVENT——從信號最近一次的發(fā)生至今所經(jīng)歷的時(shí)間,常用于檢查定時(shí)時(shí)間、建立時(shí)間、保持時(shí)間和脈沖寬度等。順序語句——在進(jìn)程(PROCESS)或子程序(PROCEDURE)、函數(shù)(FUNCTION)中使用,按程序書寫的順序自上而下、一個(gè)一個(gè)語句地執(zhí)行;并行語句——出現(xiàn)在結(jié)構(gòu)體中,各語句并行(同步)執(zhí)行,與書寫的順序無關(guān)。VHDL賦值語句1.變量賦值語句格式:目標(biāo)變量名:=賦值源(表達(dá)式);例如:x:=5.0;2.信號賦值語句格式:目標(biāo)信號名<=賦值源;例如:y<=‘1’;說明:該語句若出現(xiàn)在進(jìn)程或子程序中則是順序語句,若出現(xiàn)在結(jié)構(gòu)體中則是并行語句。數(shù)組元素賦值例如:SIGNALa,b:STD

LOGIC

VECTOR(1TO4);

a<=“1101”;

a(1TO2)<=“10” a(1TO2)<=b(2TO3);

流程控制語句1.IF語句格式1:IF條件句Then

順序語句; ENDIF;格式2:IF條件句Then

順序語句; ELSE

順序語句; ENDIF;格式3:IF條件句Then

順序語句; ELSIF條件句Then

順序語句; … ELSE

順序語句; ENDIF;【例】用VHDL語言描述下圖硬件電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_stmtsISPORT(a,b,c:INBOOLEAN; y:OUTBOOLEAN);ENDcontrol_stmts;cabyARCHITECTUREexample1OFcontrol_stmtsISBEGIN PROCESS(a,b,c) VARIABLEn:BOOLEAN; BEGIN IFaTHENn:=b; ELSE n:=c; ENDIF; y<=n; ENDPROCESS;ENDexample1;

【例】8線-3線優(yōu)先編碼器的設(shè)計(jì)

(真值表)輸入輸出a0a1a2a3a4a5a6a7y0y1y2xxxxxxx0

111xxxxxx01

011xxxxx011

101xxxx0111

001xxx01111

110xx011111

010x0111111

10001111111

000LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(a:INSTD_LOGIC_VECTOR(0TO7);y:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder;ARCHITECTUREexample2OFcoderISBEGINPROCESS(a)BEGIN IFa(7)='0' THENy<="111"; ELSIF(a(6)='0') THENy<="011"; ELSIF(a(5)='0') THENy<="101"; ELSIF(a(4)='0') THENy<="001"; ELSIF(a(3)='0') THENy<="110"; ELSIF(a(2)='0') THENy<="010"; ELSIF(a(1)='0') THENy<="100"; ELSEy<="000"; ENDIF; ENDPROCESS;ENDexample2;

2.CASE語句格式:CASE表達(dá)式IS When選擇值=>順序語句;

When選擇值=>順序語句;

… WhenOTHERS=>順序語句;

ENDCASE;說明:“=>”不是運(yùn)算符,相當(dāng)“THEN”【例】用CASE語句描述4選1數(shù)據(jù)選擇器數(shù)據(jù)選擇器as2zbcds1LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41ISPORT(s1,s2:INSTD_LOGIC; a,b,c,d:INSTD_LOGIC; z:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREexample3OFmux41ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN s<=s1&s2; PROCESS(s1,s2,a,b,c,d) BEGIN CASEsIS WHEN"00"=>z<=a; WHEN"01"=>z<=b; WHEN"10"=>z<=c; WHEN"11"=>z<=d; WHENOTHERS=>z<='X';ENDCASE; ENDPROCESS;ENDexample3;

3.LOOP語句格式1:[標(biāo)號:]FOR循環(huán)變量IN初值TO終值LOOP

順序語句; ENDLOOP[標(biāo)號];【例】8位奇偶校驗(yàn)器的描述8位奇偶校驗(yàn)器a(0)za(1)a(2)a(3)a(4)a(5)a(6)a(7)8位奇偶校驗(yàn)器za(7..0)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYp_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0); y:OUTSTD_LOGIC);ENDp_check;ARCHITECTUREexample4OFp_checkISBEGINPROCESS(a)VARIABLEtemp:STD_LOGIC; BEGIN temp:='0'; FORnIN7DOWNTO0LOOP temp:=tempXORa(n); ENDLOOP; y<=temp; ENDPROCESS; ENDexample4; 4.NEXT語句格式:NEXT[標(biāo)號][WHEN條件];功能:(1)NEXT——無條件結(jié)束本次循環(huán)(2)NEXT標(biāo)號——結(jié)束本次循環(huán),從“標(biāo)號”規(guī)定的位置繼續(xù)循環(huán);(3)NEXTWHEN條件——當(dāng)“條件”滿足時(shí)結(jié)束本次循環(huán),否則繼續(xù)循環(huán)。5.EXIT語句格式:EXIT[標(biāo)號][WHEN條件];功能:(1)EXIT——無條件跳出循環(huán)(2)EXIT標(biāo)號——跳出循環(huán),從“標(biāo)號”規(guī)定的位置開始循環(huán);(3)EXITWHEN條件——當(dāng)“條件”滿足時(shí)跳出循環(huán),否則繼續(xù)循環(huán)。

格式1:WAITON敏感信號表;功能:將運(yùn)行的程序掛起直至敏感信號表中的任一信號發(fā)生變化時(shí)結(jié)束掛起,重新執(zhí)行程序。例如:SIGNALs1,s2:STD

LOGIC;

PROCESS … WAITONs1,s2;

ENDPROCESS;WAIT語句

注意:含WAIT語句的進(jìn)程PROCESS的括弧中后不能加敏感信號,否則是非法的,例如

PROCESS(s1,s2)格式2:WAITUNTIL條件表達(dá)式;功能:將運(yùn)行的程序掛起直至表達(dá)式中的敏感信號發(fā)生變化,而且滿足表達(dá)式設(shè)置的條件時(shí)結(jié)束掛起,重新執(zhí)行程序。例如:WAITUNTILenable=‘1’;格式:ASSERT條件表達(dá)式[ REPORT字符串][ SEVERITY錯(cuò)誤等級]功能:當(dāng)條件為“真”時(shí),向下執(zhí)行另一個(gè)語句,為“假”時(shí),則輸出“字符串”信息并指出“錯(cuò)誤等級”。用途:用于仿真、調(diào)試程序時(shí)的人機(jī)對話。斷言(ASSERT)語句例如ASSERT(S=‘1’ANDR=‘1’)REPORT“BothvaluesofSandRareequal‘1’”SEVERITYERROR;錯(cuò)誤等級:NOTE(注意),WARNING(警告),ERROR(出錯(cuò)),F(xiàn)AILURE(失?。¬HDL并行語句并行語句——出現(xiàn)在結(jié)構(gòu)體中,各語句并行(同步)運(yùn)行,與書寫的順序無關(guān)。1.并行語句的種類ARCHITECTURE生成語句條件信號賦值語句元件例化語句并行信號賦值語句塊語句進(jìn)程語句并行過程調(diào)用語句信號信號信號信號信號信號ENDARCHITECTURE2.并行語句的使用結(jié)構(gòu)ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS說明語句BEGIN

并行語句ENDARCHITECTURE結(jié)構(gòu)體名進(jìn)程語句屬于并行語句,它在VHDL中使用最頻繁、最能體現(xiàn)VHDL風(fēng)格。進(jìn)程語句格式:[進(jìn)程標(biāo)號:]PROCESS[(敏感信號參數(shù)表)][IS] [進(jìn)程說明部分] BEGIN

順序描述語句

ENDPROCESS[進(jìn)程標(biāo)號];進(jìn)程語句【例】異步清除十進(jìn)制加法計(jì)數(shù)器的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcnt10yISPORT(clr:INSTD_LOGIC;

clk:INSTD_LOGIC;

cnt:BUFFERINTEGERRANGE9DOWNTO0);ENDcnt10y;ARCHITECTUREexample9OFcnt10yISBEGINPROCESS(clr,clk) BEGIN IFclr='0'THENcnt<=0; ELSIFclk'EVENTANDclk='1'THEN IF(cnt=9)THEN

cnt<=0; ELSE

cnt<=cnt+1; ENDIF; ENDIF; ENDPROCESS;ENDexample9;功能:將一個(gè)大系統(tǒng)程序分解為若干子系統(tǒng)(塊)編寫,便于程序的編寫、調(diào)試和查錯(cuò)。格式:塊名:BLOCK [說明部分] BEGIN … --以并行語句構(gòu)成的塊體

ENDBLOCK塊名塊語句

【例】假設(shè)CPU芯片由算術(shù)邏輯運(yùn)算單元ALU和寄存器組REG8組成,REG8又由8個(gè)REG1、REG2、…子塊構(gòu)成,其程序結(jié)構(gòu)為:LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYCPUISPORT(clk,RESET:INSTD

LOGIC;

ADDERS:OUTSTD

LOGIC_VECTOR(31DOWNTO0);

DATA:INOUTSTD

LOGIC

VECTOR(7DOWNTO0);ENDCPU;ARCHITECTURECPU_ALU_REG8OFCPUISSIGANLibus,dbus:STD_LOGIC_VECTOR(31DOWNTO0);--定義全局量BEGIN ALU:BLOCK SIGNALQbus:STD_LOGIC_VECTOR(31DOWNTO0);--定義局域量

BEGIN --ALU塊行為描述語句

ENDALU;REG8:BLOCK

SIGNALZbus:STD_LOGIC_VECTOR(31DOWNTO0);--定義局域量

BEGIN REG1:BLOCK SIGNALZbus1:STD_LOGIC_VECTOR(31DOWNTO0);--定義子局域量

BEGIN --REG1子塊行為描述語句

ENDREG1

… ENDREG8ENDCPU_ALU_REG8說明:在結(jié)構(gòu)體中定義的全局量可以在各塊結(jié)構(gòu)中使用;塊結(jié)構(gòu)中定義局域量只能在本塊及所屬的子塊中使用;子塊中定義子局域量只能在子塊中使用。1.簡單信號賦值語句格式:賦值目標(biāo)<=表達(dá)式;例如:output1<=aANDb;規(guī)則:賦值目標(biāo)必須是信號,而且出現(xiàn)在結(jié)構(gòu)體或塊語句中并行信號賦值語句2.條件信號賦值語句格式:賦值目標(biāo)<=表達(dá)式WHEN賦值條件ELSE

表達(dá)式WHEN賦值條件ELSE …

表達(dá)式;例如:對4選1多路選擇器的描述

… z<=aWHENs=”00”ELSE bWHENs=”01”ELSEcWHENs=”10”ELSEd;

…3.選擇信號賦值語句格式:WITH選擇表達(dá)式SELECT賦值目標(biāo)信號<=表達(dá)式WHEN選擇值, --以“,”號分隔 表達(dá)式WHEN選擇值, …

表達(dá)式WHEN選擇值;

--以“;”號結(jié)束例如:WITHselSELECT q<=i0AFTER10nsWHEN0,

i1AFTER10nsWHEN1,

i2AFTER10nsWHEN2,

i3AFTER10nsWHEN3, ‘X’AFTER10nsWHENOTHERS;

子程序和并行過程調(diào)用語句VHDL中的子程序(SUBPROGRAM)有兩種類型:過程(PROCEDURE)和函數(shù)(FUNCTION)。1.過程(PROCEDURE)語句過程調(diào)用前需要將過程的實(shí)質(zhì)內(nèi)容裝入程序包(Package)中,過程分為過程首和過程體兩部分。過程首是過程的索引,相當(dāng)于一本書目錄,便于快速地檢索到相應(yīng)過程體的內(nèi)容。過程首的語句格式為:PROCEDURE過程名

(參數(shù)表);過程體是放在程序包的包體(PackageBody)中,過程體的格式為:PROCEDURE過程名(參數(shù)表)IS [聲明部分] BEGIN

順序語句;ENDPROCEDURE過程名;例如PROCEDUREadder(SIGANLa,b:INSTD_LOGIC_VECTOR; Sum:OUTSTD_LOGIC); --過程首PROCEDUREadder(SIGANLa,b:INSTD_LOGIC_VECTOR; Sum:OUTSTD_LOGIC)IS--過程體

BEGIN …;ENDadder;2.過程調(diào)用語句格式:過程名(關(guān)聯(lián)參數(shù)表);例如:adder(a1,b1,sum1);規(guī)則:(1)若過程在進(jìn)程(PROCESS)中調(diào)用,則是順序語句;(2)若過程調(diào)用出現(xiàn)在結(jié)構(gòu)體(ARCHITECTURE)或塊(BLOCK)中,則屬于并行語句,相當(dāng)一個(gè)進(jìn)程,而且每調(diào)用一次過程,就相當(dāng)插入一個(gè)元件。3.函數(shù)(FUNCTION)語句格式:FUNCTION函數(shù)名(參數(shù)表)

RETURN數(shù)據(jù)類型IS [說明部分] BEGIN [順序處理語句] RETURN[返回變量名];

END[函數(shù)名];說明:函數(shù)程序通常是放在程序包(PACKAGE)中?!纠壳笞畲笾档暮瘮?shù):LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbpac1IS FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR) RETURNSTD_LOGIC_VECTOR; --聲明函數(shù)首END;PACKAGEBODYbpacIS FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--聲明函數(shù)體

RETURNSTD_LOGIC_VECTORIS BEGIN IF(a>b)THENRETURNa; ELSE

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論