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

下載本文檔

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

文檔簡(jiǎn)介

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)庫(kù)、程序包設(shè)計(jì)實(shí)體

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

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

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

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

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

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

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

--輸出,符號(hào):3)INOUT;--雙向,符號(hào):4)BUFFER;--具有讀功能的輸出,符號(hào):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[說(shuō)明語(yǔ)句];

--

為內(nèi)部信號(hào)、常數(shù)、數(shù)據(jù)類型、函數(shù)定義BEGIN[功能描述語(yǔ)句];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ì)中才用到配置。“或門”的完整描述: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語(yǔ)言要素

VHDL具有計(jì)算機(jī)編程語(yǔ)言的一般特性,其語(yǔ)言要素是編程語(yǔ)句的基本單元。準(zhǔn)確無(wú)誤地理解和掌握VHDL語(yǔ)言要素的基本含義和用法,對(duì)正確地完成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.字符串文字字符——以單引號(hào)括起來(lái)的數(shù)字、字母和符號(hào)(ASCII碼)例如:’0’,’1’,’A’,’B’,’a’,’b’字符串——一維的字符數(shù)組,用雙引號(hào)括起來(lái)。(1)文字字符串例如:”ABC”,”ABOY.”,”A”(2)數(shù)值字符串——矢量格式:數(shù)制基數(shù)符號(hào)“數(shù)值字符串”其中: B——二進(jìn)制基數(shù)符號(hào);

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

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

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

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

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

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

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

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

變量賦值語(yǔ)句: 目標(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.信號(hào)(SIGNAL)規(guī)則:信號(hào)是在結(jié)構(gòu)體(ARCHITECTURE)、程序包(PACKAGE)和實(shí)體中說(shuō)明的全局量。信號(hào)定義格式:SIGNAL信號(hào)名:數(shù)據(jù)類型:=初值; 例如:SIGNALtemp:STD

LOGIC:=‘0’;

SIGNALflaga,flagb:BIT SIGNALdata:STD

LOOGIC

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

y<=x;

z<=xAFTER5ns;信號(hào)與變量的區(qū)別:(1)使用場(chǎng)合不同;(變量:進(jìn)程;信號(hào):結(jié)構(gòu)體)(2)變量用“:=”號(hào)賦值,其值被立即使用(無(wú)時(shí)間延遲);而信號(hào)用“<=”賦值,其值可以附加延遲。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ù)對(duì)象提供存取方式4.文件類型(FilesType)——提供多值存取類型

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

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

3.位矢量(BIT

VECTOR)數(shù)據(jù)類型位矢量是用雙引號(hào)括起來(lái)的數(shù)字序列,如“0011”,X“00FD”定義語(yǔ)句: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ù)類型字符是用單引號(hào)括起來(lái)的ASCII碼字符,如‘A’‘a(chǎn)’‘0’‘9’定義語(yǔ)句:TYPECHARACTERIS(ASCII碼字符表中的全部字符)

5.整數(shù)(INTEGER)數(shù)據(jù)類型整數(shù)包括:正整數(shù)、負(fù)整數(shù)和零范圍:32位帶符號(hào)數(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ù)類型字符串是用雙引號(hào)括起來(lái)的字符序列,也稱字符矢量或字符串?dāng)?shù)組。例如,“ABOY.”,“10100011”

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

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ò)誤等級(jí)(SeverityLevel)錯(cuò)誤等級(jí)數(shù)據(jù)用于表征系統(tǒng)的狀態(tài),包括:NOTE(注意),WARNING(警告),ERROR(出錯(cuò)),F(xiàn)AILURE(失?。?/p>

。在仿真過(guò)程中,可輸出這4種值來(lái)提示被仿真系統(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取絕對(duì)值整數(shù)類型操作符功能操作數(shù)數(shù)據(jù)類型關(guān)系操作符=等于任何數(shù)據(jù)類型/=不等于任何數(shù)據(jù)類型<小于枚舉與整數(shù)及對(duì)應(yīng)的一維數(shù)組>大于同上<=小于等于同上>=大于等于同上類型操作符功能操作數(shù)數(shù)據(jù)類型

邏輯操作符

AND與BIT、BOOLEAN、STD

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

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

clock‘EVENTANDclock=‘1’; --檢測(cè)clock的上升沿

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

LOGIC

VECTOR(1TO4);

a<=“1101”;

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

流程控制語(yǔ)句1.IF語(yǔ)句格式1:IF條件句Then

順序語(yǔ)句; ENDIF;格式2:IF條件句Then

順序語(yǔ)句; ELSE

順序語(yǔ)句; ENDIF;格式3:IF條件句Then

順序語(yǔ)句; ELSIF條件句Then

順序語(yǔ)句; … ELSE

順序語(yǔ)句; ENDIF;【例】用VHDL語(yǔ)言描述下圖硬件電路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語(yǔ)句格式:CASE表達(dá)式IS When選擇值=>順序語(yǔ)句;

When選擇值=>順序語(yǔ)句;

… WhenOTHERS=>順序語(yǔ)句;

ENDCASE;說(shuō)明:“=>”不是運(yùn)算符,相當(dāng)“THEN”【例】用CASE語(yǔ)句描述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語(yǔ)句格式1:[標(biāo)號(hào):]FOR循環(huán)變量IN初值TO終值LOOP

順序語(yǔ)句; ENDLOOP[標(biāo)號(hà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語(yǔ)句格式:NEXT[標(biāo)號(hào)][WHEN條件];功能:(1)NEXT——無(wú)條件結(jié)束本次循環(huán)(2)NEXT標(biāo)號(hào)——結(jié)束本次循環(huán),從“標(biāo)號(hào)”規(guī)定的位置繼續(xù)循環(huán);(3)NEXTWHEN條件——當(dāng)“條件”滿足時(shí)結(jié)束本次循環(huán),否則繼續(xù)循環(huán)。5.EXIT語(yǔ)句格式:EXIT[標(biāo)號(hào)][WHEN條件];功能:(1)EXIT——無(wú)條件跳出循環(huán)(2)EXIT標(biāo)號(hào)——跳出循環(huán),從“標(biāo)號(hào)”規(guī)定的位置開(kāi)始循環(huán);(3)EXITWHEN條件——當(dāng)“條件”滿足時(shí)跳出循環(huán),否則繼續(xù)循環(huán)。

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

LOGIC;

PROCESS … WAITONs1,s2;

ENDPROCESS;WAIT語(yǔ)句

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

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

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

順序描述語(yǔ)句

ENDPROCESS[進(jìn)程標(biāo)號(hào)];進(jìn)程語(yǔ)句【例】異步清除十進(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 [說(shuō)明部分] BEGIN … --以并行語(yǔ)句構(gòu)成的塊體

ENDBLOCK塊名塊語(yǔ)句

【例】假設(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塊行為描述語(yǔ)句

ENDALU;REG8:BLOCK

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

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

BEGIN --REG1子塊行為描述語(yǔ)句

ENDREG1

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

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

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

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

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

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

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

i1AFTER10nsWHEN1,

i2AFTER10nsWHEN2,

i3AFTER10nsWHEN3, ‘X’AFTER10nsWHENOTHERS;

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

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

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

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

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

END[函數(shù)名];說(shuō)明:函數(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論