




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
EDA教學系統總體介紹湖北工業大學實驗實訓中心電子實習部2011-10-24葉紅結構體(ARCHITECTURE)進程或其它并行結構實體(ENTITY)配置(CONFIGURATION)庫、程序包設計實體
一、VHDL程序設計基本結構庫、程序包
庫(LIBRARY)——存放預先設計好的程序包和數據的集合體。
程序包(PACKAGE)——將已定義的數據類型、元件調用說明及子程序收集在一起,供VHDL設計實體共享和調用,若干個包則形成庫。常用庫有:·IEEE(常用的元件和標準模塊存放的庫)、
·STD、·WORK、·VITAL。其中必須顯示出來的是:IEEE庫包括:STD_LOGIC_1164STD_LOGIC_ARITH——是SYNOPSYS公司加入IEEE庫程序包,包括:STD_LOGIC_SIGNED(有符號數)
STD_LOGIC_UNSIGNED(無符號數)STD_LOGIC_SMALL_INT(小整型數)VHDL’87版本使用IEEESTD1076-1987語法標準VHDL’93版本使用IEEESTD1076-1993語法標準庫中USE語句的兩種常用表達格式:USE庫名.程序包名.項目名;USE庫名.程序包名.ALL;例:LIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL描述器件的輸入、輸出端口數據類型時將要用到的IEEE的標準庫中的STD_LOGIC_1164程序包。庫應放在設計實體最前面:
用關鍵詞LIBRARY指明庫名,
用USE語句指明庫中程序包。實體(ENTITY)說明格式: ENTITY實體名IS [類屬參數說明]; [端口說明]; END實體名;規則:(1)類屬參數說明必須放在端口說明之前,用于指定如矢量位數、延遲時間等參數。例如:GENERIC(m:TIME:=1ns);--說明m是一個值為1ns的時間參數;又有程序語句:tmp1<=d0ANDse1AFTERm;--表示d0ANDse1經1ns延遲后才送到tem1。(2)端口說明:是設計實體與外部接口的描述說明,相當于FPGA器件的引腳說明。其格式為:PORT(端口名,端口名:模式數據類型名; :端口名,端口名:模式數據類型名);
例如:PORT(a,b:INSTD_LOGIC;
s:INSTD_LOGIC;
y:OUTSTD_LOGIC);端口名:常用幾個英文字母或著一個英文字母加數字表示。如:CLK、A0、RESTER、D3等。端口模式包括:1)IN; --輸入,符號:2)OUT;
--輸出,符號:3)INOUT;--雙向,符號:4)BUFFER;--具有讀功能的輸出,符號:DQBUFFER端口數據類型名:由IEEESTDLOGIC1164所約定的、由EDA工具支持和提供的數據類型為標準邏輯(standardlogic)類型。數據類型主要分為:步爾型(boolean)、位型(bit)、位矢量型(bit-vector)、整數型(integer)。結構體(ARCHITECTURE):
基本設計單元的實體:用于指明設計基本單元的行為、元件及內部連接關系,即定義設計單元的功能。
結構體的書寫格式:
ARCHITECTURE結構體名OF實體名IS[說明語句];
--
為內部信號、常數、數據類型、函數定義BEGIN[功能描述語句];ENDARCHITECTURE結構體名;例如:“或門”的結構體
ARCHITECTUREor1OFtemp1ISSIGNALy:STD_LOGIC;BEGIN y<=aORb;
ENDARCHITECTUREor1;配置(CONFIGURATION)——把特定的結構體關聯(指定給)一個確定的實體。一般在大而復雜的工程設計中才用到配置。“或門”的完整描述: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具有計算機編程語言的一般特性,其語言要素是編程語句的基本單元。準確無誤地理解和掌握VHDL語言要素的基本含義和用法,對正確地完成VHDL程序設計十分重要。
1.數字型文字——由數字、小數點和下劃線組成(1)整數文字 5,678,156E2,45_234_287(=45234287)(2)實數文字188.993,88_670_551.453_909(3)以數制基數表示的文字 格式:數制#數值#
例如: 10#170# 16#FE# 2#11010001# 8#376#VHDL文字規則(4)物理量文字例如:60s,100m2.字符串文字字符——以單引號括起來的數字、字母和符號(ASCII碼)例如:’0’,’1’,’A’,’B’,’a’,’b’字符串——一維的字符數組,用雙引號括起來。(1)文字字符串例如:”ABC”,”ABOY.”,”A”(2)數值字符串——矢量格式:數制基數符號“數值字符串”其中: B——二進制基數符號;
O——八進制基數符號;
X——16進制基數符號;例如: B“111011110”;矢量數組,長度為9 O“15”;等效B“001101”,長度為6 X“AD0”;等效B“101011010000”,長度為123.標識符——是用戶給常量、變量、信號、端口、子程序或參數定義的名字規則:以字母開頭,后跟若干字母、數字或單個下劃線構成,但最后不能為下劃線。例如:h_adder,mux21,example為合法標識符;2adder,_mux21,ful__adder,adder_為錯誤的標識符。VHDL’93標準支持擴展標識符,以反斜杠來定界,允許以數字開頭,允許使用空格以及兩個以上的下劃號。例如:\74LS193\,\ABOY.\等為合法的標識符。
4.下標名——數組格式:標識符(表達式)例如:b(3)5.段名——多個下標名的組合格式:標識符(表達式方向表達式)方向:TO——下標序號由低到高
DOWNTO——下標序號由高到低例如:D(7DOWNTO0);表示數據總線D7~D0 D(0TO7);表示數據總線D0~D7
——存放各種類型數據的容器,包括變量、常量和信號1.變量(VARIABLE)
規則:只能在進程(PROCESS)、函數(FUNCTION)和過程(PROCEDURE)中說明和使用的局域量定義格式:VARIABLE變量名:數據類型{:=初始值}
例如:VARIABLEa:INTEGER VARIABLEb:INTEGER:=2;
VHDL數據對象
變量賦值語句: 目標變量名:=表達式例如: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)規則:信號是在結構體(ARCHITECTURE)、程序包(PACKAGE)和實體中說明的全局量。信號定義格式:SIGNAL信號名:數據類型:=初值; 例如:SIGNALtemp:STD
LOGIC:=‘0’;
SIGNALflaga,flagb:BIT SIGNALdata:STD
LOOGIC
VECTOR(15DOWNTO0);信號賦值語句:目標信號名<=表達式例如:x<=9;
y<=x;
z<=xAFTER5ns;信號與變量的區別:(1)使用場合不同;(變量:進程;信號:結構體)(2)變量用“:=”號賦值,其值被立即使用(無時間延遲);而信號用“<=”賦值,其值可以附加延遲。3.常數(CONSTANT)規則:常數在程序前部定義且一旦被賦值就不能再改變。常數定義格式:CONSTANT常數名:數據類型:=初值;例如:CONSTANTfbus:BIT
VECTOR:=“010111”;CONSTANTVcc:REAL:=5.0;CONSTANTdely:TIME:=25ns;1.標量型(ScalarType)——單元素的最基本數據類型 (1)實數類型 (2)整數類型 (3)枚舉類型 (4)時間類型VHDL數據類型2.復合類型(CompositeType)(1)數組型(Array)(2)記錄型(Record)3.存取類型(AccessType)——為數據對象提供存取方式4.文件類型(FilesType)——提供多值存取類型
VHDL的預定義數據類型——在IEEE庫中的標準程序包(STANDARD)中預先定義的數據類型。
1.布爾(BOOLEAN)數據類型包括邏輯“假”(FALSE)和邏輯“真”(TRUE),定義語句:TYPEBOOLEANIS(FALSE,TRUE);--以枚舉類型定義2.位(BIT)數據類型包括‘0’和‘1’,定義語句:TYPEBITIS(‘0’,‘1’)
3.位矢量(BIT
VECTOR)數據類型位矢量是用雙引號括起來的數字序列,如“0011”,X“00FD”定義語句:TYPEBIT
VECTORISARRAY(NaturalRange〈〉)OFBIT;--“〈〉”表示數據范圍未定界規則:使用位矢量必須注明位寬,例如:SIGNALa:BIT
VECTOR(7DOWNTO0);--定義a為由a(7)~a(0)構成矢量,左為a(7)右為a(0);4.字符(CHARACTER)數據類型字符是用單引號括起來的ASCII碼字符,如‘A’‘a’‘0’‘9’定義語句:TYPECHARACTERIS(ASCII碼字符表中的全部字符)
5.整數(INTEGER)數據類型整數包括:正整數、負整數和零范圍:32位帶符號數原碼,即-(231-1)~+(231-1)(-2147483647~+2147483647)
6.自然數(NATURAL)和正整數(POSITIVE)數據類型自然數——包括0和正整數正整數——不包括0的正整數7.實數(REAL)數據類型由正、負、小數點和數字組成,如:-1.0,+2.5,-1.0E38范圍:-1.0E+38TO+1.0E+388.字符串(STRING)數據類型字符串是用雙引號括起來的字符序列,也稱字符矢量或字符串數組。例如,“ABOY.”,“10100011”
9.時間(TIME)數據類型時間是物理量數據,由整數數據和單位兩部分組成,定義語句:
TYPETIMEISRANGE–2147483647TO2147483647units
fs;--飛秒(10-15S)VHDL中的最小時間單位
ps=1000fs;--皮秒
ns=1000ps;--納秒
us=1000ns;--微秒
ms=1000us;--毫秒
sec=1000ms;--秒
min=60sec;--分
hr=60min;--時ENDunits;10.錯誤等級(SeverityLevel)錯誤等級數據用于表征系統的狀態,包括:NOTE(注意),WARNING(警告),ERROR(出錯),FAILURE(失敗)
。在仿真過程中,可輸出這4種值來提示被仿真系統當前的工作狀態。其定義如下:TYPEseverity_levelIS(note,warning,error,failure);IEEE預定義的標準邏輯位和矢量1.標準邏輯位(STD
LOGIC)數據類型TYPESTD
LOGICIS(‘U’--未初始化的 ‘X’--強未知的 ‘0’--強0 ‘1’--強1 ‘Z’--高阻態 ‘W’--弱未知的 ‘L’--弱0 ‘H’--弱1 ‘-’--忽略);
2.標準邏輯矢量(STD
LOGIC
VECTOR)數據類型TYPESTD
LOGIC
VECTORISARRAY(NaturalRange〈〉)OFSTD
LOGIC;--
〈〉表示范圍未定用戶自定義數據類型方式定義格式:TYPE數據類型名IS數據類型定義OF基本數據類型或:TYPE數據類型名IS數據類型定義;例如:TYPEstISARRAY(0TO15)OFSTD
LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);1.枚舉類型(Enumerated)定義格式:TYPE數據類型名IS數據類型定義;例如:TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);2.整數類型和實數類型定義格式:TYPE數據類型名ISRANGE范圍;例如:TYPEnum1ISRANGE0TO100;
3.數組類型數組——是一組具有相同數據類型的元素的組合。定義格式:TYPE數組名ISARRAY(數據范圍)OF數據類型;例如:TYPEdata_busISARRAY(7DOWNTO0)OFSTD_LOGIC;--定義數據總線,下標由高到低,即D7位權值最高,D0位權值最低。TYPEdata_busISARRAY(0TO7)OFSTD_LOGIC;--定義數據總線,下標由低到高,即D0位權值最高,D7位權值最低。4.記錄類型(Recode)記錄——是一組不同數據類型的元素的組合。定義格式:TYPE記錄類型名ISRECODE
元素名:元素數據類型; 元素名:元素數據類型; :
ENDRECODE[記錄類型名]類型操作符功能操作數數據類型算術操作符+加整數-減整數&并一維數組*乘整數和實數/除整數和實數MOD取模整數REM求余整數SLL邏輯左移BIT或布爾型一維數組SRL邏輯右移BIT或布爾型一維數組VHDL操作符類型操作符功能操作數數據類型算術操作符SLA算術左移BIT或布爾型一維數組SRA算術右移BIT或布爾型一維數組ROL邏輯循環左移BIT或布爾型一維數組ROR邏輯循環右移BIT或布爾型一維數組**乘方整數ABS取絕對值整數類型操作符功能操作數數據類型關系操作符=等于任何數據類型/=不等于任何數據類型<小于枚舉與整數及對應的一維數組>大于同上<=小于等于同上>=大于等于同上類型操作符功能操作數數據類型
邏輯操作符
AND與BIT、BOOLEAN、STD
LOGICOR或同上NAND與非同上NOR或非同上XOR異或同上NXOR異或非同上NOT非同上類型操作符功能操作數數據類型符號操作符+正整數-付整數說明:(1)操作符的優先級:()→(NOT,ABS,**)→(REM,MOD,/,*)→(+,-)→(關系運算符)→(邏輯運算符:XOR,NOR,NAND,OR,AND)(2)在邏輯運算表達式中若全部運算符相同,則可以不加括號;若運算符不同則加括號分隔;(3)并“&”操作符完成一維數組的位擴展功能:用于檢出時鐘邊沿、完成定時檢查、獲得未約束的數據類型的范圍等。格式:屬性測試項目名‘屬性標識符;--S‘屬性標識符屬性(ATTRIBUTE)描述與定義語句例如:TYPEnumberISINTEGERRANGE9DOWNTO0;
I:=number‘LEFT;--I=9 I:=number‘RIGTH;--I=0 I:=number‘HIGH;--I=9 I:=number‘LOW;--I=0EVENT——表示對當前的一個極小的時間段內發生事件的情況進行檢測(如時鐘的邊沿)。例如:clock‘EVENT --檢測以clock為屬性測試項目的事件
clock‘EVENTANDclock=‘1’; --檢測clock的上升沿
clock‘EVENTANDclock=‘0’; --檢測clock的下降沿LAST_EVENT——從信號最近一次的發生至今所經歷的時間,常用于檢查定時時間、建立時間、保持時間和脈沖寬度等。順序語句——在進程(PROCESS)或子程序(PROCEDURE)、函數(FUNCTION)中使用,按程序書寫的順序自上而下、一個一個語句地執行;并行語句——出現在結構體中,各語句并行(同步)執行,與書寫的順序無關。VHDL賦值語句1.變量賦值語句格式:目標變量名:=賦值源(表達式);例如:x:=5.0;2.信號賦值語句格式:目標信號名<=賦值源;例如:y<=‘1’;說明:該語句若出現在進程或子程序中則是順序語句,若出現在結構體中則是并行語句。數組元素賦值例如: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線優先編碼器的設計
(真值表)輸入輸出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表達式IS When選擇值=>順序語句;
When選擇值=>順序語句;
… WhenOTHERS=>順序語句;
ENDCASE;說明:“=>”不是運算符,相當“THEN”【例】用CASE語句描述4選1數據選擇器數據選擇器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:[標號:]FOR循環變量IN初值TO終值LOOP
順序語句; ENDLOOP[標號];【例】8位奇偶校驗器的描述8位奇偶校驗器a(0)za(1)a(2)a(3)a(4)a(5)a(6)a(7)8位奇偶校驗器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[標號][WHEN條件];功能:(1)NEXT——無條件結束本次循環(2)NEXT標號——結束本次循環,從“標號”規定的位置繼續循環;(3)NEXTWHEN條件——當“條件”滿足時結束本次循環,否則繼續循環。5.EXIT語句格式:EXIT[標號][WHEN條件];功能:(1)EXIT——無條件跳出循環(2)EXIT標號——跳出循環,從“標號”規定的位置開始循環;(3)EXITWHEN條件——當“條件”滿足時跳出循環,否則繼續循環。
格式1:WAITON敏感信號表;功能:將運行的程序掛起直至敏感信號表中的任一信號發生變化時結束掛起,重新執行程序。例如:SIGNALs1,s2:STD
LOGIC;
PROCESS … WAITONs1,s2;
ENDPROCESS;WAIT語句
注意:含WAIT語句的進程PROCESS的括弧中后不能加敏感信號,否則是非法的,例如
PROCESS(s1,s2)格式2:WAITUNTIL條件表達式;功能:將運行的程序掛起直至表達式中的敏感信號發生變化,而且滿足表達式設置的條件時結束掛起,重新執行程序。例如:WAITUNTILenable=‘1’;格式:ASSERT條件表達式[ REPORT字符串][ SEVERITY錯誤等級]功能:當條件為“真”時,向下執行另一個語句,為“假”時,則輸出“字符串”信息并指出“錯誤等級”。用途:用于仿真、調試程序時的人機對話。斷言(ASSERT)語句例如ASSERT(S=‘1’ANDR=‘1’)REPORT“BothvaluesofSandRareequal‘1’”SEVERITYERROR;錯誤等級:NOTE(注意),WARNING(警告),ERROR(出錯),FAILURE(失敗)VHDL并行語句并行語句——出現在結構體中,各語句并行(同步)運行,與書寫的順序無關。1.并行語句的種類ARCHITECTURE生成語句條件信號賦值語句元件例化語句并行信號賦值語句塊語句進程語句并行過程調用語句信號信號信號信號信號信號ENDARCHITECTURE2.并行語句的使用結構ARCHITECTURE結構體名OF實體名IS說明語句BEGIN
并行語句ENDARCHITECTURE結構體名進程語句屬于并行語句,它在VHDL中使用最頻繁、最能體現VHDL風格。進程語句格式:[進程標號:]PROCESS[(敏感信號參數表)][IS] [進程說明部分] BEGIN
順序描述語句
ENDPROCESS[進程標號];進程語句【例】異步清除十進制加法計數器的描述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;功能:將一個大系統程序分解為若干子系統(塊)編寫,便于程序的編寫、調試和查錯。格式:塊名:BLOCK [說明部分] BEGIN … --以并行語句構成的塊體
ENDBLOCK塊名塊語句
【例】假設CPU芯片由算術邏輯運算單元ALU和寄存器組REG8組成,REG8又由8個REG1、REG2、…子塊構成,其程序結構為: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說明:在結構體中定義的全局量可以在各塊結構中使用;塊結構中定義局域量只能在本塊及所屬的子塊中使用;子塊中定義子局域量只能在子塊中使用。1.簡單信號賦值語句格式:賦值目標<=表達式;例如:output1<=aANDb;規則:賦值目標必須是信號,而且出現在結構體或塊語句中并行信號賦值語句2.條件信號賦值語句格式:賦值目標<=表達式WHEN賦值條件ELSE
表達式WHEN賦值條件ELSE …
表達式;例如:對4選1多路選擇器的描述
… z<=aWHENs=”00”ELSE bWHENs=”01”ELSEcWHENs=”10”ELSEd;
…3.選擇信號賦值語句格式:WITH選擇表達式SELECT賦值目標信號<=表達式WHEN選擇值, --以“,”號分隔 表達式WHEN選擇值, …
表達式WHEN選擇值;
--以“;”號結束例如:WITHselSELECT q<=i0AFTER10nsWHEN0,
i1AFTER10nsWHEN1,
i2AFTER10nsWHEN2,
i3AFTER10nsWHEN3, ‘X’AFTER10nsWHENOTHERS;
子程序和并行過程調用語句VHDL中的子程序(SUBPROGRAM)有兩種類型:過程(PROCEDURE)和函數(FUNCTION)。1.過程(PROCEDURE)語句過程調用前需要將過程的實質內容裝入程序包(Package)中,過程分為過程首和過程體兩部分。過程首是過程的索引,相當于一本書目錄,便于快速地檢索到相應過程體的內容。過程首的語句格式為:PROCEDURE過程名
(參數表);過程體是放在程序包的包體(PackageBody)中,過程體的格式為:PROCEDURE過程名(參數表)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.過程調用語句格式:過程名(關聯參數表);例如:adder(a1,b1,sum1);規則:(1)若過程在進程(PROCESS)中調用,則是順序語句;(2)若過程調用出現在結構體(ARCHITECTURE)或塊(BLOCK)中,則屬于并行語句,相當一個進程,而且每調用一次過程,就相當插入一個元件。3.函數(FUNCTION)語句格式:FUNCTION函數名(參數表)
RETURN數據類型IS [說明部分] BEGIN [順序處理語句] RETURN[返回變量名];
END[函數名];說明:函數程序通常是放在程序包(PACKAGE)中。【例】求最大值的函數:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbpac1IS FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR) RETURNSTD_LOGIC_VECTOR; --聲明函數首END;PACKAGEBODYbpacIS FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--聲明函數體
RETURNSTD_LOGIC_VECTORIS BEGIN IF(a>b)THENRETURNa; ELSE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年建造師考試準備攻略試題及答案
- 2025年MSOffice高級應用考試真題卷(Access高級查詢技巧)
- 2025年度中級會計考試試題及答案
- 企業在區塊鏈技術中的競爭與合作策略
- 各類題型分析中級審計師試題及答案
- 工程項目監理試題及答案
- 醫療保險制度在應急救援中的應用實踐
- 學習秘籍2025年入團考試試題答案
- 醫療大數據在農村健康教育中的價值
- 廣東全國計算機PowerPoint題庫單選題100道及答案
- 船舶關鍵性設備和系統檢測要點(甲板部)
- 配電房預防性試驗方案
- 房屋建筑工程質量評定表格
- 學生在校表現情況證明
- 以案促改警示教育活動心得體會
- 汽車維修技能大賽開幕式致辭
- 中心試驗室運行管理實施方案
- 板式開料標準
- 吊車起重吊裝方案
- 溫州市基準地價成果表(共45頁)
- 粉煤灰漂珠粉項目建議書范文
評論
0/150
提交評論