




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第三章VHDL設(shè)計(jì)初步§3.1
VHDL程序基本結(jié)構(gòu)§3.2
VHDL文字規(guī)則§3.3
VHDL的數(shù)據(jù)類型§3.4
VHDL的數(shù)據(jù)對象§3.5
VHDL的操作符§3.6設(shè)計(jì)實(shí)例§3.1VHDL程序基本結(jié)構(gòu)庫(Library)、程序包(Package)實(shí)體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)VHDL程序基本結(jié)構(gòu):庫、程序包實(shí)體(Entity)配置(Configuration)結(jié)構(gòu)體(Architecture)進(jìn)程或其它并行結(jié)構(gòu)庫—IEEE庫
IEEE庫是VHDL設(shè)計(jì)中最常用的庫,它包含有IEEE標(biāo)準(zhǔn)的程序包和其他一些支持工業(yè)標(biāo)準(zhǔn)的程序包。IEEE庫中的標(biāo)準(zhǔn)程序包主要有:STD_LOGIC_1164、NUMERIC_BIT和NUMERIC_STD程序包。其中STD_LOGIC_1164是最重要且最常用的程序包。此外,還有些程序包雖非IEEE標(biāo)準(zhǔn),但已成為工業(yè)標(biāo)準(zhǔn),從而加入到IEEE庫中。最常用的是Synopsys公司的STD_LOGIC_ARITH、STD_LOGIC_SIGNED、STD_LOGIC_UNSIGNED。一般,基于FPGA/CPLD的開發(fā),IEEE庫中的四個(gè)程序包STD_LOGIC_1164、STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED已經(jīng)夠用。庫—STD庫
VHDL定義了兩個(gè)標(biāo)準(zhǔn)程序包,即STANDARD和TEXTIO(文件輸入/輸出)程序包,它們都收入在STD庫中,可隨時(shí)調(diào)用。由于STD庫符合VHDL語言標(biāo)準(zhǔn),在應(yīng)用中不必用打開庫語句。即
LIBRARY
STD;
USE
STD.STANDARD.ALL是不必要的。庫—WORK庫
WORK庫是用戶的VHDL設(shè)計(jì)的現(xiàn)行工作庫,用于存放用戶設(shè)計(jì)和定義的一些設(shè)計(jì)單元和程序包。WORK庫自動(dòng)滿足VHDL語言標(biāo)準(zhǔn),在實(shí)際調(diào)用中,也不必顯示預(yù)先說明,即不必在VHDL程序中明確打開并指定?;赩HDL所要求的WORK庫的基本概念,利用VHDL進(jìn)行設(shè)計(jì)時(shí),不允許在根目錄下進(jìn)行,而是必須為此設(shè)定一個(gè)文件夾,用于保存所有此項(xiàng)目的設(shè)計(jì)文件,VHDL綜合器將此文件默認(rèn)為WORK庫。還要注意的是,工作庫并不是這個(gè)文件夾的名字,而是一個(gè)邏輯名。綜合器將指示器指向該文件夾的路徑。庫—VITAL庫
VITAL程序包也已成為IEEE標(biāo)準(zhǔn)。使用VITAL庫,可以提高VHDL門級時(shí)序模擬精度,因而只在VHDL仿真器中使用。庫中包含時(shí)序程序包VITAL_TIMIGN和VITAL_PRIMITIVES。但在實(shí)際中,由于各FPGA/CPLD的生產(chǎn)廠商的適配工具都能為各自的芯片生成帶時(shí)序信息的VHDL門級網(wǎng)表,因而一般并不需要VITAL庫中的程序包。庫的用法例:
LIBRARY
IEEE;
USE
IEEE.STD_LOGIC_1164.STD_ULOGIC;
USE
IEEE.STD_LOGIC_1164.RISING_EDGE;表示向當(dāng)前設(shè)計(jì)實(shí)體開放了IEEE.STD_LOGIC_1164程序包中的RISING_EDGE函數(shù),但由于此函數(shù)要用到IEEE.STD_ULOGIC,所以在其前面加了一條USE語句,開放同一程序包中的這一數(shù)據(jù)類型。定義程序包的一般語句結(jié)構(gòu)如下:
PACKAGE程序包名IS--程序包首程序包首說明部分END程序包名;PACKAGE程序包名IS程序包體說明部分及包體內(nèi)容--程序包體END程序包名;
程序包的結(jié)構(gòu)由程序包的說明部分(即程序包首)和程序包的內(nèi)容(即程序包體)兩部分組成。程序包首可獨(dú)立定義和使用。其中的說明有數(shù)據(jù)類型說明、信號(hào)說明、子程序說明及元件說明等。在程序包結(jié)構(gòu)中,程序包體并不是必需的;一個(gè)完整的程序包中,程序包首名與程序包體名是同一個(gè)名字。程序包體將包括在程序包首中已定義的子程序的子程序體中。程序包體說明部分的組成內(nèi)容可以是USE語句(即允許對其他程序包的調(diào)用)、子程序定義、子程序體、數(shù)據(jù)類型說明子類型說明和常數(shù)說明等。常用的預(yù)定義的程序包有:STD_LOGIC_1164程序包:最常用的程序包,是IEEE的標(biāo)準(zhǔn)程序包。其中最常用的兩個(gè)數(shù)據(jù)類型是:STD_LOGIC和STD_LOGIC_VECTOR。STD_LOGIC_ARITH程序包:在STD_LOGIC_1164上擴(kuò)展了三個(gè)數(shù)據(jù)類型:UNSIGNED、SIGNED和SMALL_INTSTD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包:Synopsys公司的程序包,都預(yù)先編譯在IEEE庫中。這些程序包重載了可用于INTEGER型及STD_LOGIC和STD_LOGIC_VECTOR型混合運(yùn)算的運(yùn)算符,并定義了STD_LOGIC_VECTOR型到INTEGER型的轉(zhuǎn)換函數(shù)。 STANDARD和TEXTIO程序包:兩者都是STD庫中的預(yù)編譯程序包。STDNDARD定義了許多基本的數(shù)據(jù)類型、子類型和函數(shù)。TEXTIO程序包定義了文件操作的許多類型和子程序,主要供仿真器使用。在使用前需加語句USESTD.TEXTIO.ALL。實(shí)體(Entity)—P62實(shí)體由實(shí)體聲明部分和結(jié)構(gòu)體組成。實(shí)體聲明部分指定了設(shè)計(jì)單元的輸入/輸出端口或引腳,它是設(shè)計(jì)實(shí)體對外的一個(gè)通信界面,是外界可以看到的部分;結(jié)構(gòu)體用來描述設(shè)計(jì)實(shí)體的邏輯結(jié)構(gòu)和邏輯功能,它由VHDL語句構(gòu)成,是外界看不到的部分。一個(gè)實(shí)體可以多個(gè)結(jié)構(gòu)體。實(shí)體聲明部分的語句格式為:
ENTITY實(shí)體名IS
[GENERIC(類屬表);][PORT(端口表);]END實(shí)體名;實(shí)體(Entity)—參數(shù)傳遞說明語句(P82)參數(shù)傳遞說明語句(類屬參數(shù)聲明)必須放在端口聲明之前。用于指定矢量位數(shù)、器件延遲時(shí)間等參數(shù)。其格式為:
GENERIC([常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]{;常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]});
如:
GENERIC(m:TIME:=1.0ns);聲明m是一個(gè)值為1.0ns的時(shí)間參數(shù)【例9-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandnISGENERIC(n:INTEGER);--定義類屬參量及其數(shù)據(jù)類型PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);--用類屬參量限制矢量長度c:OUTSTD_LOGIC);END;ARCHITECTUREbehavOFandnISBEGIN
PROCESS(a)VARIABLEint:STD_LOGIC;BEGINint:='1';FORiINa'LENGTH-1DOWNTO0LOOP--循環(huán)語句IFa(i)='0'THENint:='0';ENDIF;ENDLOOP;c<=int;ENDPROCESS;
END;
u1:andnGENERICMAP(n=>2)--參數(shù)傳遞映射語句,定義類屬變量,n賦值為2PORTMAP(a(0)=>d1,a(1)=>d2,c=>q1);u2:andnGENERICMAP(n=>5)--定義類屬變量,n賦值為5PORTMAP(a(0)=>d3,a(1)=>d4,a(2)=>d5,a(3)=>d6,a(4)=>d7,c=>q2);
END;
實(shí)體(Entity)—參數(shù)傳遞映射語句(P227)參數(shù)傳遞映射語句描述相應(yīng)元件類屬參數(shù)間的銜接和傳送方式??捎糜谠O(shè)計(jì)從外部端口改變元件內(nèi)部參數(shù)或結(jié)構(gòu)規(guī)模的元件。其語句格式為:
GENERICMAP(類屬表)
【例9-4】LIBRARYIEEE;--頂層設(shè)計(jì)USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_arith.ALL;USEIEEE.STD_LOGIC_unsigned.ALL;ENTITYaddersISGENERIC(msb_operand:INTEGER:=15;msb_sum:INTEGER:=15);PORT(b:INSTD_LOGIC_VECTOR(msb_operandDOWNTO0);result:OUTSTD_LOGIC_VECTOR(msb_sumDOWNTO0));ENDadders;ARCHITECTUREbehaveOFaddersISCOMPONENTaddernPORT(a,b:INSTD_LOGIC_VECTOR;result:OUTSTD_LOGIC_VECTOR);ENDCOMPONENT;SIGNALa:STD_LOGIC_VECTOR(msb_sum/2DOWNTO0);SIGNALtwoa:STD_LOGIC_VECTOR(msb_operandDOWNTO0);BEGINtwoa<=a&a;U1:addernPORTMAP(a=>twoa,b=>b,result=>result);U2:addernPORTMAP(a=>b(msb_operanddowntomsb_operand/2+1),b=>b(msb_operand/2downto0),result=>a);ENDbehave;
實(shí)體(Entity)—端口說明語句(P60)端口聲明是描述器件的外部接口信號(hào)的聲明,相當(dāng)于器件的引腳聲明,端口聲明語句格式為:
PORT(端口名{,端口名}:端口模式數(shù)據(jù)類型名);
…端口名{,端口名}:端口模式數(shù)據(jù)類型名);端口模式包括:
IN—輸入;
OUT—輸出;
INOUT—雙向,既可以用于輸入出可用于輸出;
BUFFER—具有讀功能的輸出。
BUFFER功能與INOUT類似,區(qū)別在于當(dāng)需要輸入數(shù)據(jù)時(shí),只允許內(nèi)部回讀輸出的信號(hào),即反饋,該信號(hào)由內(nèi)部產(chǎn)生。
inout
和
buffer的區(qū)別【例3-1】P58
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITY
mux21aIS
PORT(a,b:INBIT;
s:INBIT;
y:OUTBIT);
ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIF(s=‘1’)THENy<=a;ELSEy<=b;
ENDIF;ENDPROCESS;ENDARCHITECTUREone;實(shí)體端口實(shí)體名端口名端口模式設(shè)計(jì)實(shí)體
結(jié)構(gòu)體語句格式為:ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS[信號(hào)聲明語句];BEGIN[功能描述語句]ENDARCHITECTURE結(jié)構(gòu)體名;
信號(hào)聲明語句也稱為說明語句,包括在結(jié)構(gòu)體中需要說明和定義的數(shù)據(jù)對象、數(shù)據(jù)類型、元件調(diào)用聲明等等。它并非必須的。
功能描述語句在結(jié)構(gòu)本中必須給出相應(yīng)的電路功能描述語句。
【例3-1】P64
ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIF(s=‘1’)THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;結(jié)構(gòu)體結(jié)構(gòu)體名配置
配置是指將特定的結(jié)構(gòu)體與一個(gè)確定的實(shí)體相關(guān)聯(lián),為一個(gè)大型系統(tǒng)的設(shè)計(jì)提供管理和工程組織。在VHDL程序中,每個(gè)實(shí)體可以擁有多個(gè)不同的結(jié)構(gòu)體,而每個(gè)結(jié)構(gòu)體的地位是相同的,在這種情況下,可以利用配置說明為這個(gè)實(shí)體指定一個(gè)結(jié)構(gòu)體。配置語句的一般格式為:
CONFIGURATION配置名OF實(shí)體名IS配置說明
END配置名;文件取名和存盤(P65)在保存文件前,每個(gè)VHDL設(shè)計(jì)程序都必須賦給一個(gè)正確的文件名。一般,程序文件名可以由設(shè)計(jì)者任意給定,但具體取名最好與文件實(shí)體名相同;文件后綴擴(kuò)展名必須是.VHD?!?.2VHDL的文字規(guī)則數(shù)字字符串標(biāo)識(shí)符下標(biāo)名P65、P346數(shù)字(P346)整數(shù):都是十進(jìn)制的數(shù),如:
5,156E2(=15600),45_234_287(=45234287)實(shí)數(shù):帶有小數(shù)點(diǎn)的十進(jìn)制數(shù),如:
1.335,88_670.46,44.99E-2(=0.4499)物理量文字
60s(60秒),100m(100米)數(shù)字
以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由五個(gè)部分組成。第一部分是用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù);第二部分是數(shù)制隔離符號(hào)“#”;第三部分是表達(dá)的數(shù);第四部分是指數(shù)隔離符號(hào)“?!保坏谖宀糠质怯檬M(jìn)制表示的指數(shù)部分,此部分?jǐn)?shù)若為0可以省去如:
SIGNL
d1,d2,d3,d4,d5:INTEGERRANGE0TO255
d1<=10#170#;--十進(jìn)制表示,等于170
d2<=16#FE#;--十六進(jìn)制表示,等于254
d3<=2#1111_1110#;--二進(jìn)制表示,等于254
d4<=8#376#;--八進(jìn)制表示,等于254
d5<=16#E#E1;--十六進(jìn)制表示,等于2#1110000#,等于224字符串(P346)
字符是用單引號(hào)括起來的ASCⅡ字符,可以是數(shù)值,也可以是符號(hào)或字母。如:‘R’,‘z’
字符串是一維的字符數(shù)組,需放在雙引號(hào)中。有兩種類型的字符串:文字字符串和數(shù)位字符串。文字字符串是用雙引號(hào)括起來的一串文字,如:“ERROR”,“BB&CC”
數(shù)位字符串也稱位矢量,代表各進(jìn)制數(shù)的數(shù)組。數(shù)位字符串的表示首先要有計(jì)算基數(shù),然后將該基數(shù)表示的值放在雙引號(hào)中,基數(shù)符以“B”,“O”,“X”表示,并放在字符串的前面。其中:B:二進(jìn)制基數(shù)符號(hào),表示二進(jìn)制位0或1,在字符串中的每位表示一個(gè)BIT。O:八進(jìn)制基數(shù)符號(hào),在字符串中的每一個(gè)數(shù)代表一個(gè)八進(jìn)制數(shù),即代表一個(gè)3位的二進(jìn)制數(shù)。X:十六進(jìn)制基數(shù)符號(hào)(0~F)十六進(jìn)制數(shù),即一個(gè)4位的二進(jìn)制數(shù)。
例如:data1<=B“1_1101_1110”--二進(jìn)制數(shù)組,長度是9data2<=O“15”--八進(jìn)制數(shù)組,位矢數(shù)組長度是6data3<=X“AD0”--十六進(jìn)制數(shù)組,位矢數(shù)組長度是12data4<=B“101_010_101_010”--位矢數(shù)組長度是12data5<=“101_010_101_010”--表達(dá)錯(cuò)誤,缺Bdata6<=“101010”--正確,略去B,不可加下劃線data7<=“0AD0”--表達(dá)錯(cuò)誤,缺X標(biāo)識(shí)符(P347)
標(biāo)識(shí)符是最常用的操作符,標(biāo)識(shí)符可以是常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字。其書寫應(yīng)遵守以下規(guī)則:有效的字符:26包括個(gè)大小寫英文字母,數(shù)字0~9及下劃線“_”。任何標(biāo)識(shí)符必須以英文字母開頭。必須是單一下劃線“_”,且其前后都必須有英文字母或數(shù)字。標(biāo)識(shí)符中的英語字母不分大小寫。允許包含圖形符號(hào)(回車符、換行符),也允許包含空格符。
例:
合法的標(biāo)識(shí)符:Decoder_1,State0非法的標(biāo)識(shí)符:_Decoder_1--起始為非英文字母2FFT--起始為數(shù)字Sig_#N--符號(hào)”#”不能成為標(biāo)識(shí)符的構(gòu)成Not-Ack--符號(hào)”-”不能成為標(biāo)識(shí)符的構(gòu)成RyY_RST_--標(biāo)識(shí)符的最后不能是下劃線“_”Data__BUS--標(biāo)識(shí)符中不能有雙下劃線Return--關(guān)鍵詞下標(biāo)名(P348)
下標(biāo)名用于指示數(shù)組型變量或信號(hào)的某一元素。下標(biāo)段名則用于指示數(shù)組型變量或信號(hào)的某一段元素。下標(biāo)名的語句格式如下:標(biāo)識(shí)符(表達(dá)式)其中,“標(biāo)識(shí)符”必須是數(shù)組型的變量或信號(hào)的名字;“表達(dá)式”所代表的值必須是數(shù)組標(biāo)范圍中的一個(gè)值,這個(gè)值將對應(yīng)數(shù)組中的一個(gè)元素。如果這個(gè)表達(dá)式是一個(gè)可計(jì)算的值,則此操作數(shù)可很容易的進(jìn)行綜合。如果是不可計(jì)算的,則只能在特定的情況下綜合,且耗費(fèi)資源較大。
例:SIGNALa,b:BIT_VECTOR(0TO3);SIGNALm:INTEGERRANGE0TO3;SIGNALy,z:BIT;y<=a(m);--不可計(jì)算型下標(biāo)表示z<=b(3);--可計(jì)算型下標(biāo)表示其中下標(biāo)名m不可計(jì)算,而下標(biāo)名3是可計(jì)算的?!?.3VHDL的數(shù)據(jù)類型(P59、P357)VHDL要求設(shè)計(jì)實(shí)體中的每一個(gè)常數(shù)、信號(hào)、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類型。VHDL中的數(shù)據(jù)類型可以分成四大類:標(biāo)量型:包括實(shí)數(shù)類型、整數(shù)類型、枚舉類型、時(shí)間類型。復(fù)合類型:可以由小的數(shù)據(jù)類型復(fù)合而成。復(fù)合類型主要有數(shù)組型和記錄型。存取類型:為給定的數(shù)據(jù)類型的數(shù)據(jù)提供存取方式文件類型:用于提供多值存取類型這些數(shù)據(jù)類型又可分為預(yù)定義數(shù)據(jù)類型和用戶自定義類型。此處,主要講以下兩種常用的數(shù)據(jù)類型:VHDL的預(yù)定義數(shù)據(jù)類型數(shù)組類型VHDL的預(yù)定義數(shù)據(jù)類型預(yù)定義的VHDL數(shù)據(jù)類型是VHDL最常用、最基本的數(shù)據(jù)類型。這些數(shù)據(jù)類型已在IEEE庫中的標(biāo)準(zhǔn)程序包STANDARD和STD_LOGIC_1164及其它標(biāo)準(zhǔn)程序包中預(yù)先作了定義。INTEGER(整數(shù))數(shù)據(jù)類型NATURAL(自然數(shù))和POSITIVE(正整數(shù))數(shù)據(jù)類型REAL(實(shí)數(shù))數(shù)據(jù)類型BOOLEAN(布爾)數(shù)據(jù)類型BIT(位)數(shù)據(jù)類型BIT_VECTOR(位矢量數(shù)據(jù)類型)STD_LOGIC(標(biāo)準(zhǔn)邏輯位)和STD_LOGIC_VECTOR(標(biāo)準(zhǔn)邏輯位矢量)CHARACTER(字符)數(shù)據(jù)類型STRING(字符串)數(shù)據(jù)類型TIME(時(shí)間)數(shù)據(jù)類型其它預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型整數(shù)數(shù)據(jù)類型(INTEGER)(P82)整數(shù)包括正整數(shù)、負(fù)整數(shù)和零。整數(shù)是32位的帶符號(hào)數(shù),因此它的數(shù)值范圍是-2147483647~+2147483647,即。自然數(shù)和正整數(shù)數(shù)據(jù)類型(NATURAL)自然數(shù)是整數(shù)的一個(gè)子集,它包括0和正整數(shù)。正整數(shù)也是整數(shù)的一個(gè)子集,它是不包括0的自然數(shù)。實(shí)數(shù)數(shù)據(jù)類型(REAL)實(shí)數(shù)由正、負(fù)、小數(shù)點(diǎn)和數(shù)字組成。實(shí)數(shù)的范圍是:-1.0E+38~+1.0E+38。布爾數(shù)據(jù)類型(BOOLEAN)布爾數(shù)據(jù)類型包括FALSE(假)和TURE(真)。綜合器將其變?yōu)?或1信號(hào)值。位數(shù)據(jù)類型(BIT)BIT(位)數(shù)據(jù)類型包括邏輯位’0’和’1’。在VHDL中,邏輯位0和1的表達(dá)必須加單引號(hào),否則VHDL綜合器將0和1解釋為整數(shù)數(shù)據(jù)類型INTEGER位矢量數(shù)據(jù)類型位矢量是用雙引號(hào)括起來的數(shù)字序列。位矢量數(shù)據(jù)定義語句:TYPEBIT_VECTORISARRAY(NaturalRange<>)OFBIT;其中,“<>”表示數(shù)據(jù)范圍未定界在使用位矢量時(shí),必須注明位寬,即數(shù)組中元素個(gè)數(shù)和排列,如:SIGNALa:BIT_VECTOR(7DOWNTO0);在此句中,聲明a是由a(7)~a(0)構(gòu)成的矢量,權(quán)值最高為a(7),a(0)最低。標(biāo)準(zhǔn)邏輯位和標(biāo)準(zhǔn)邏輯位矢量STD_LOGIC(標(biāo)準(zhǔn)邏輯位)數(shù)據(jù)類型
(P63)在VHDL中,標(biāo)準(zhǔn)邏輯位數(shù)據(jù)有九種邏輯值,它們是’U’(未初始化的)、’X’(強(qiáng)未知的)、’0’(強(qiáng)0)、’1’(強(qiáng)1)、’Z’(高阻態(tài))、’W’(弱未知的)、’L’(弱0)、’H’(弱1)和’-’(忽略)。在STD_LOGIC數(shù)據(jù)類型中的數(shù)據(jù)是用大寫字母定義的,使用中不能用小寫字母代替。STD_LOGIC_VECTOR(標(biāo)準(zhǔn)邏輯位矢量)數(shù)據(jù)類型(P69-70)
標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)在數(shù)字電路中常用于表示總線。其定義語句為:TYPESTD_LOGIC_VECTORISARRAY(NaturalRang<>)OFSTD_LOGIC字符數(shù)據(jù)類型字符是單引號(hào)括起來的ASCⅡ碼字符,如’A’、’a’、’0’等。字符類型區(qū)分大小寫。STRING(字符串)數(shù)據(jù)類型字符串是用雙引號(hào)括起來的字符序列,也稱字符矢量或字符串?dāng)?shù)組。如“ABOY”,”10100011”時(shí)間數(shù)據(jù)類型時(shí)間是物理量數(shù)據(jù),它由整數(shù)數(shù)據(jù)和單位兩部分組成。時(shí)間TIME數(shù)據(jù)定義語句為:TYPETIMEISRANGE-2147483647TO-2147483647unitsfs;--飛秒,VHDL中的最小時(shí)間單位。ps;--皮秒,等于1000fs
…h(huán)r;--小時(shí)ENDunits;其它預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型(P70)
VHDL綜合工具配備的擴(kuò)展程序包中定義了一些有用的類型。如Synopsys公司在IEEE庫中加入的程序包STD_LOGIC_ARITH中定義了如下三種數(shù)據(jù)類型:無符號(hào)型(UNSIGNED)、有符號(hào)型(SIGNED)、小整型(SMALL_INT)。在使用之前,必須加入以下的語句:
LIBRARY
IEEE;
USE
IEEE.STD_LOGIC_ARITH.ALLUNSIGNED類型和SIGNED類型是用來設(shè)計(jì)可綜合的數(shù)學(xué)運(yùn)算程序的重要類型,UNSIGNED用于無符號(hào)數(shù)的運(yùn)算,SIGNED用于有符號(hào)數(shù)的運(yùn)算。
在IEEE程序包中NUMERIC_STD和NUMEIC_BIT程序包中定義了UNSIGNED型及SIGNED型,NUMERIC_STD是針對于STD_LOGIC型定義的,而NUMERIC_BIT是針對BIT型定義的。在程序包中還定義了相應(yīng)的運(yùn)算符重載函數(shù)。有些綜合器沒有附帶STD_LOGIC_ARITH程序包,此時(shí)只能用NUMERIC_STD和NUMEIC_BIT程序包。
無符號(hào)數(shù)據(jù)類型(UNSIGNEDTYPE)
UNSIGNED數(shù)據(jù)類型代表一個(gè)無符號(hào)的數(shù)值,在綜合器中,這個(gè)數(shù)值被解釋為一個(gè)二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)的最左位是其最高位。如,十進(jìn)制的8可以表示為:UNSIGNED’(“1000”)如果要定義一個(gè)變量或信號(hào)的數(shù)據(jù)類型為UNSIGNED,則其位矢長度越長,所能代表的數(shù)值越大。如一個(gè)4位變量的最大值為15,一個(gè)8位變量的最大值則為255,0是其最小值,因?yàn)椴荒苡肬NSIGNED定義負(fù)數(shù)。例:VARIABLEvar:UNSIGNED(0TO10);SIGNALsig:UNSIGNED(5DOWNTO0)其中變量var有11位數(shù)值,最高位是var(0),而非var(10);信號(hào)sig有6位數(shù)值,最高位是sig(5)。
有符號(hào)數(shù)據(jù)類型(SIGNEDTYPE)
SIGNED數(shù)據(jù)類型表示一個(gè)有符號(hào)的數(shù)值,綜合器將其解釋為補(bǔ)碼,此數(shù)的最高位是符號(hào)位。例如;SIGNED’(“0101”)代表+5,5SIGNED’(“1011”)代表-5若是將上例中的var定義為SIGNED型,則數(shù)值意義就不同了,如:VARIABLEvar:SIGNED(0TO10);其中變量var有11位,最左位var(0)是符號(hào)位。數(shù)組類型(P179)數(shù)組類型是復(fù)合類型,是將一組具有相同數(shù)據(jù)類型的元素集合在一起,作為一個(gè)數(shù)據(jù)對象來處理的數(shù)據(jù)類型。數(shù)組可以是一維(每個(gè)元素只有一個(gè)下標(biāo))數(shù)組或多維數(shù)組(每個(gè)元素有多個(gè)下標(biāo))。VHDL仿真器支持多維數(shù)組,而綜合器只支持一維數(shù)組。數(shù)組的元素可以是任何一種數(shù)據(jù)類型,用以定義數(shù)組元素的下標(biāo)范圍子句決定了數(shù)組中元素的個(gè)數(shù),以及元素的排序方向,即下標(biāo)是由低到高(TO),或是由高到低(DOWNTO)。如:
“0TO7”是由低到高排序的8個(gè)元素;“15
DOWNTO0”是由高到低排序的16個(gè)元素。
VHDL允許定義兩種不同數(shù)組,即限定性數(shù)組和非限定性數(shù)組。它們的區(qū)別是,限定性數(shù)組下標(biāo)的取值范圍在數(shù)組定義時(shí)就被確定了,而非限定性數(shù)組下標(biāo)的取值范圍要待隨后確定。限定性數(shù)組
限定性數(shù)組定義語句格式如下:TYPE數(shù)組名ISARRAY(數(shù)組范圍)OF數(shù)據(jù)類型;其中
數(shù)組名——是新定義的限定性數(shù)組類型的名稱,可以是任何標(biāo)識(shí)符;數(shù)據(jù)類型與數(shù)組元素的數(shù)據(jù)類型相同
數(shù)組范圍——明確指出數(shù)組元素的定義數(shù)量和排序方式,以整數(shù)來表示其數(shù)組的下標(biāo)數(shù)據(jù)類型—指數(shù)組各元素的數(shù)據(jù)類型
例1:TYPEstbISARRAY(7DOWNTO0)OFSTD_LOGIC; 其中,stb是數(shù)組類型,有8個(gè)元素,它的下標(biāo)排序?yàn)?~0,各元素的排序是stb(7)~stb(0)。
例2:TYPExIS(low,high);TYPEdata_busISARRAY(0TO7,x)OFBIT;其中,x定義為兩元素的枚舉數(shù)據(jù)類型,然后將data_bus定義為一個(gè)有9個(gè)元素的數(shù)組類型,其中每一個(gè)元素的數(shù)據(jù)類型是BIT。
非限定性數(shù)組非限定性數(shù)組是在定義某數(shù)組時(shí),并不首先說明所定義的數(shù)組下標(biāo)的取值范圍,而是定義某一數(shù)據(jù)對象為此數(shù)組類型時(shí),再確定該數(shù)組下標(biāo)范圍取值。這樣就可以通過不同的定義取值,使相同的數(shù)據(jù)對象具有不同下標(biāo)取值的數(shù)組類型。非限定性數(shù)組的定義語句格式為:TYPE數(shù)組名ISARRAY(數(shù)組下標(biāo)名RANGE<>)OF數(shù)據(jù)類型其中:數(shù)組名-----是定義的非限定性數(shù)組類型的取名數(shù)組下標(biāo)名----是以整數(shù)類型設(shè)定的一個(gè)數(shù)組下標(biāo)名稱<>----是下標(biāo)范圍待定符號(hào),用到該數(shù)組類型時(shí),再填入具體的數(shù)值范圍數(shù)據(jù)類型----是數(shù)組中每一個(gè)元素的數(shù)據(jù)類型非限定性數(shù)組如:TYPEBIT_VECTORISARRAY(NaturalRange<>)OFBIT;
SIGNALa:BIT_VECTOR(7DOWNTO0);§3.4VHDL的操作符(P359)
VHDL的操作符包括:邏輯操作符(LogicOperator)
關(guān)系操作符(RelationOperator)
算術(shù)操作符(ArithmeticOperator)
符號(hào)操作符(SignOperator)。邏輯操作符、關(guān)系操作符類型操作符功能操作數(shù)數(shù)據(jù)類型邏輯操作符AND與BIT、BOOLEAN、STD_LOGICOR或BIT、BOOLEAN、STD_LOGICNOT非BIT、BOOLEAN、STD_LOGICNAND與非BIT、BOOLEAN、STD_LOGICNOR或非BIT、BOOLEAN、STD_LOGICXOR異或BIT、BOOLEAN、STD_LOGICXNOR同或BIT、BOOLEAN、STD_LOGICNXOR異或非BIT、BOOLEAN、STD_LOGIC關(guān)系操作符=等于任何數(shù)據(jù)類型/=不等于任何數(shù)據(jù)類型<小于枚舉與整數(shù)及對應(yīng)的一維數(shù)組>大于枚舉與整數(shù)及對應(yīng)的一維數(shù)組<=小于等于枚舉與整數(shù)及對應(yīng)的一維數(shù)組>=大于等于枚舉與整數(shù)及對應(yīng)的一維數(shù)組算術(shù)操作符、符號(hào)操作符類型操作符功能操作數(shù)數(shù)據(jù)類型算術(shù)操作符+加整數(shù)-減整數(shù)&并一維數(shù)組*乘整數(shù)和實(shí)數(shù)/除整數(shù)和實(shí)數(shù)MOD取模整數(shù)REM求余整數(shù)SLL邏輯左移BIT或布爾型一維數(shù)組SRL邏輯右移BIT或布爾型一維數(shù)組SLA算術(shù)左移BIT或布爾型一維數(shù)組SRA算術(shù)右移BIT或布爾型一維數(shù)組ROL邏輯循環(huán)左移BIT或布爾型一維數(shù)組ROR邏輯循環(huán)右移BIT或布爾型一維數(shù)組**乘方整數(shù)ABS取絕對值整數(shù)符號(hào)操作符+正整數(shù)-負(fù)整數(shù)
對于VHDL中的操作符與操作數(shù)間的運(yùn)算有兩點(diǎn)需要特別注意的規(guī)則:
1、在基本操作符間操作數(shù)的數(shù)據(jù)類型必須相同2、操作數(shù)的數(shù)據(jù)類型必須與操作符所要求的數(shù)據(jù)類型完全一致因此,不僅要了解所用的操作符的操作功能,還要了解此操作符所要求的操作數(shù)的數(shù)據(jù)類型。此外,在進(jìn)行運(yùn)算時(shí)還要注意各操作符之間存在的優(yōu)先級別,優(yōu)先級別越高,越先操作。運(yùn)算符優(yōu)先級NOT,ABS,**最高優(yōu)先級最低優(yōu)先級*,/,MOD,REM+(正號(hào)),-(負(fù)號(hào))+,-,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,<,<=,>,>=AND,OR,NAND,NOR,XOR,XNOR類型操作符功能操作數(shù)數(shù)據(jù)類型邏輯操作符AND與BIT、BOOLEAN、STD_LOGICOR或BIT、BOOLEAN、STD_LOGICNOT非BIT、BOOLEAN、STD_LOGICNAND與非BIT、BOOLEAN、STD_LOGICNOR或非BIT、BOOLEAN、STD_LOGICXOR異或BIT、BOOLEAN、STD_LOGICXNOR同或BIT、BOOLEAN、STD_LOGICNXOR異或非BIT、BOOLEAN、STD_LOGIC邏輯操作符(P64、P359)
在邏輯操作符中,如果邏輯操作符左邊和右邊值的類型為數(shù)組,則這兩個(gè)數(shù)組的位寬要相等。在一個(gè)表達(dá)式中有兩個(gè)以上的運(yùn)算符時(shí),需要使用括號(hào)將這些運(yùn)算分組。如果運(yùn)算中的運(yùn)算符相同,且是AND、OR、XOR中的一種,則不需使用括號(hào);如果一串運(yùn)算中的運(yùn)算符不同或有除這三種運(yùn)算符外的運(yùn)算符,則必須用括號(hào)。如:AandBandCandD(AorB)xorC邏輯操作符
【例】SIGNALa,b,c:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd,e,f,g:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALh,I,j,k:STD_LOGIC;SIGNALl,m,n,o,p:BOOLEAN;
…a<=bANDc;--b、c相與后向a賦值,a、b、c的數(shù)據(jù)類型同屬4位長的位矢量d<=eORfORg;--兩個(gè)操作符OR相同,不需括號(hào)h<=(iNANDj)NANDk;--NAND不屬上述三種算符中的一種,必須加括號(hào)l<=(mXORn)AND(oXORp);--操作符不同,必須加括號(hào)h<=iANDjANDk;--兩個(gè)操作符都是AND,不用加括號(hào)h<=iANDjORk;--兩個(gè)操作符不同,未加括號(hào),表達(dá)錯(cuò)誤a<=bANDe;--操作數(shù)b與e的位矢長度不一致,表達(dá)錯(cuò)誤h<=iORl;--i的數(shù)據(jù)類型是STD_LOGIC,而l的數(shù)據(jù)類型是布爾量,因而不能相互作用,表達(dá)錯(cuò)誤
【例3-2】(P61)
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderISBEGINso<=aXORbco<=aANDb;ENDARCHITECTUREfh1;absoco0000011010101101半加器真值表關(guān)系操作符=等于任何數(shù)據(jù)類型/=不等于任何數(shù)據(jù)類型<小于枚舉與整數(shù)及對應(yīng)的一維數(shù)組>大于枚舉與整數(shù)及對應(yīng)的一維數(shù)組<=小于等于枚舉與整數(shù)及對應(yīng)的一維數(shù)組>=大于等于枚舉與整數(shù)及對應(yīng)的一維數(shù)組
關(guān)系操作符的作用是將相同的數(shù)據(jù)類型的數(shù)據(jù)對象進(jìn)行數(shù)值比較或關(guān)系排序判斷,并將結(jié)果用布爾類型的數(shù)據(jù)表示出來,即其運(yùn)算結(jié)果為TRUE和FALSE兩種。關(guān)系操作符不同長度的數(shù)組也可以進(jìn)行運(yùn)算,兩個(gè)數(shù)組的操作運(yùn)算是從左至右逐一對各元素進(jìn)行比較來決定的,在比較過程中,并不管原數(shù)組的下標(biāo)定義順序,即不管是用TO還是用DOWNTO。比較過程中,只要有一對元素不等,就可確定兩者的關(guān)系,得出布爾結(jié)果。如:
‘1’=‘1’;“101”=“101”;
“1”>“011”;“101”<“110”;
“1011”>“101011”其結(jié)果均為TRUE。對于這些判斷中出現(xiàn)的錯(cuò)誤,可以用STD_LOGIC_ARITH程序包中定義的UNSIGNED數(shù)據(jù)類型來解決,即將這些進(jìn)行操作的數(shù)據(jù)的數(shù)據(jù)類型定義為UNSIGNED。如UNSIGNED’(“1”)<UNSIGNED’(“011”)的比較結(jié)果則為TURE。
【例9-22】ENTITYrelational_ops_1ISPORT(a,b:INBIT_VECTOR(0TO3);m:OUTBOOLEAN);ENDrelational_ops_1;ARCHITECTUREexampleOFrelational_ops_1ISBEGINoutput<=(a=b);ENDexample;【例9-23】ENTITYrelational_ops_2ISPORT(a,b:ININTEGERRANGE0TO3;m:OUTBOOLEAN);ENDrelational_ops_2;ARCHITECTUREexampleOFrelational_ops_2ISBEGINoutput<=(a>=b);ENDexample;
簡單的比較運(yùn)算(=和/=)在實(shí)現(xiàn)硬件結(jié)構(gòu)時(shí),比排序操作符構(gòu)成電路芯片資源利用率要高。同樣是對4位二進(jìn)制數(shù)進(jìn)行比較,例1采用了“=”操作符,而例2采用了”>=“操作符,除這兩個(gè)操作我們符之外,兩個(gè)程序完全一樣。但綜合結(jié)果表明,例9-23所耗用的邏輯門比例9-22多出近3倍算術(shù)操作符分類表類別算術(shù)操作符分類1求和操作符+(加),-(減),&(并置)2求積操作符*,/,MOD,REM3混合操作符**,ABS4移位操作符SLL,SRL,SLA,SRA,ROL,ROR算術(shù)操作符類型操作符功能操作數(shù)數(shù)據(jù)類型算術(shù)操作符+加整數(shù)-減整數(shù)&并一維數(shù)組*乘整數(shù)和實(shí)數(shù)/除整數(shù)和實(shí)數(shù)MOD取模整數(shù)REM求余整數(shù)SLL邏輯左移BIT或布爾型一維數(shù)組SRL邏輯右移BIT或布爾型一維數(shù)組SLA算術(shù)左移BIT或布爾型一維數(shù)組SRA算術(shù)右移BIT或布爾型一維數(shù)組ROL邏輯循環(huán)左移BIT或布爾型一維數(shù)組ROR邏輯循環(huán)右移BIT或布爾型一維數(shù)組**乘方整數(shù)ABS取絕對值整數(shù)求和操作符
VHDL中的求和操作符包括加減操作符和并置操作符。
加減操作符的運(yùn)算規(guī)則與常規(guī)的加減法一樣,在VHDL中,規(guī)定它們的操作數(shù)的數(shù)據(jù)類型是整數(shù)。
【例9-24】
VARIABLEa,b,c,d,e,f:INTEGERRANE0TO255;
…
a:=b+c;
d:=e–f;在綜合后,由加減運(yùn)算符產(chǎn)生的組合邏輯門所耗費(fèi)的硬件資源的規(guī)模都比較大,例9-26說明了一個(gè)3位加法運(yùn)算的邏輯電路。如果加減運(yùn)算符中的一個(gè)操作數(shù)或兩個(gè)操作數(shù)都為整型常數(shù),則只需很少的電路資源?!纠?-26】
PACKAGEexample_arithmeticISTYPEsmall_INTISRANGE0TO7;ENDexample_arithmetic;USEWORK.example_arithmetic.ALL;ENTITYarithmeticISPORT(a,b:INsmall_INT;c:OUTsmall_INT);ENDarithmetic;ARCHITECTUREexampleOFarithmeticISBEGINc<=a+b;ENDexample;
并置操作符“&”(P72)用來完成一維數(shù)組的位擴(kuò)展,即將操作數(shù)或數(shù)組組合并起來形成新的數(shù)組。可以將一個(gè)元素并置于一個(gè)數(shù)組中形成更長的數(shù)組,也可以將兩個(gè)數(shù)組并置形成一個(gè)新的數(shù)組。并置操作前后的數(shù)組長度應(yīng)一致。如:“VH”&“DL”的結(jié)果為“VHDL”,‘0’&‘1’&‘1’的結(jié)果為“011”
【例】SIGNALa:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd:STD_LOGIC_VECTOR(1DOWNTO0);
…a<=‘1’&‘0’&d(1)&‘1’;--元素與元素并置,并置后的數(shù)組長度為4
…IFa&d=“101011”THEN--數(shù)組并置,形成更長的數(shù)組,其長度為兩個(gè)數(shù)組長度之和。求積操作符:求積操作符包括*(乘),/(除),MOD(取模),REM(取余)。在VHDL中,乘與除的數(shù)據(jù)類型規(guī)定為整數(shù)和實(shí)數(shù)。MOD和REM的操作數(shù)的數(shù)據(jù)類型只能是整數(shù),運(yùn)算結(jié)果也是整數(shù)。取余運(yùn)算(aREMb)的符號(hào)與a相同,其絕對值小于b的絕對值;例:
(-5)REM2=(-1);5REM(-2)=1;
取模運(yùn)算(aMODb)的符號(hào)與b相同,其絕對值小于b的絕對值;例:
(-5)MOD2=1;5MOD(-2)=(-1)
混合操作符混合操作符有**(乘方)和ABS(取絕對值)兩種。它們的操作數(shù)數(shù)據(jù)類型一般為整數(shù)類型。**(乘方)運(yùn)算的左邊可以是整數(shù)或浮點(diǎn)數(shù),但右邊必須為整數(shù),而且只有在左邊為浮點(diǎn)時(shí),其右邊才可以為負(fù)數(shù)。
【例9-27】
SIGNAL
a,b:INTEGERRANGE-8TO7;SIGNALc:INTEGERRANGE0TO15;SIGNALd:INTEGERRANGE0TO3;a<=ABS(b);c<=2**d;移位操作符
移位操作符有六種:SLL、SRL、SLA、SRA、ROL、ROR。移位操作符是VHDL’93標(biāo)準(zhǔn)新增的運(yùn)算符。規(guī)定移位操作符作用的操作數(shù)的數(shù)據(jù)類型應(yīng)是一維數(shù)組,并要求數(shù)組中的元素必須是BIT或BOOLEAN的數(shù)據(jù)類型,移位的位數(shù)則是整數(shù)。在EDA工具所附的程序包中重載的移位操作符已支持STD_LOGIC_VECTOR及INTEGER等類型。移位操作符左邊可以是支持的類型,右邊則必定是整數(shù)類型。如果操作符右邊是整數(shù)類型常數(shù),移位操作符實(shí)現(xiàn)起來比較節(jié)省硬件資源。
SLL/SRL(邏輯左/右移):將位矢向左/右移,右/左邊跟進(jìn)的位補(bǔ)零。
ROL/ROR(邏輯循環(huán)左/右移):與SLL/SRL相似,只是它們移出的位將用于依次填補(bǔ)移空的位,執(zhí)行的是自循環(huán)式的移位。
SLA/SRA(算術(shù)左/右移):是算術(shù)移位操作符,其移空位用最初的首位來填補(bǔ)。
移位操作符的語句格式為:標(biāo)識(shí)符移位操作符移位位數(shù)
例:
“1011”SLL1=“0110”
“1011”SRL1=“0101”
“1011”ROLl=“0111”
“1011”ROR1=“1101”
“1011”SLA1=“0111”
“1011”SRA1=“1101”
00原首位原首位【例3-14】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdecoder3to8ISPORT(DIN:INSTD_LOGIC_VECTOR(2DOWNTO0)DOU:OUTBIT_VECTOR(7DOWNTO0));ENDENTITY;ARCHITECTUREbehOFdecoder3to8ISBEGINDOUT<=“00000001”SLLCONV_INTEGER(DIN);ENDbeh;符號(hào)操作符符號(hào)操作符“+”和“-”的操作數(shù)只有一個(gè),操作數(shù)的數(shù)據(jù)類型為整數(shù),操作符“+”對操作數(shù)不作任何改變,操作符“-”作用于操作數(shù)后的返回值是對原操作數(shù)取負(fù),在實(shí)際使用中,取負(fù)操作數(shù)需加括號(hào),如:
z:=x*(-y)§3.5VHDL的數(shù)據(jù)對象-P71、第8章VHDL數(shù)據(jù)對象是指用來存放各種類型數(shù)據(jù)的容器。包括:常數(shù)(Constant)變量(Variable)信號(hào)(Signal)在VHDL中,被定義的標(biāo)識(shí)符必須確定為某類數(shù)據(jù)對象,同時(shí)還必須被定義為某種數(shù)據(jù)類型。前者(數(shù)據(jù)對象)規(guī)定了標(biāo)識(shí)符的行為方式和功能特點(diǎn);后者(數(shù)據(jù)類型)限定了標(biāo)識(shí)符的取值范圍。常數(shù)(Constant)
常數(shù)的聲明和設(shè)置主要是為了使設(shè)計(jì)實(shí)體中的常數(shù)更容易閱讀和修改。常數(shù)一般在程序前部聲明,在程序中,常數(shù)是一個(gè)恒定不變的值,一旦做了數(shù)據(jù)類型和賦值定義后,在程序中不能再改變,因而具有全局性意義。常數(shù)聲明格式為:
CONSTANT常數(shù)名:數(shù)據(jù)類型:=初值;如:
CONSTANT
delay:TIME:=25ns
DATAIN:INTEGER:=15
FBT:STD_LOGIC_VECTOR:=“010110”VHDL要求所定義的常量數(shù)據(jù)類型必須與表達(dá)式的數(shù)據(jù)類型一致。常量定義語句所允許的設(shè)計(jì)單元有實(shí)體、結(jié)構(gòu)體、程序包、塊、進(jìn)程和子程序。常量具有可視性,即常量的使用范圍取決于它被定義的位置。變量(Variable)在VHDL語法規(guī)則中,變量是一個(gè)局部量,只能在進(jìn)程(PROCESS)、子程序(函數(shù)和過程)中聲明和使用。變量的作用是在進(jìn)程中作為臨時(shí)的數(shù)據(jù)存儲(chǔ)單元。變量聲明的語法格式為:
VARIABLE變量名:數(shù)據(jù)類型[:=初始值]變量在聲明時(shí),可以賦初值,也可不賦初值,到使用時(shí)才用變量賦值語句賦值。變量的賦值是一種理想化的數(shù)據(jù)傳輸,是立即發(fā)生的,不存在任何的延時(shí)。變量賦值語句的語法格式為:目標(biāo)變量名:=表達(dá)式賦值語句右邊的“表達(dá)式”必須是一個(gè)與“目標(biāo)變量名”具有相同數(shù)據(jù)類型的數(shù)值。
例如:VARIABLEa:INTEGER;VARIABLEb:INTEGER:=2;VARIABLEs,t:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEx,y:INTEGERRANGE15DOWNTO0;a:=“1010101”s:=t;s(0TO5):=t(2TO7);x:=11;y:=2+x;
信號(hào)(Signal)
信號(hào)是描述硬件系統(tǒng)的基本數(shù)據(jù)對象,它類似于連接線,可作為設(shè)計(jì)實(shí)體中并行語句模塊間的信息交流通道。它作為一種數(shù)值容器,不僅可以容納當(dāng)前值,也可以保持歷史值,這一屬性與觸發(fā)器的記憶功能有很好的對應(yīng)關(guān)系,只是不必注明信號(hào)的數(shù)據(jù)流動(dòng)的方向。
信號(hào)要在結(jié)構(gòu)體中聲明后才能使用。信號(hào)聲明語句的語法格式為:SIGNAL信號(hào)名:數(shù)據(jù)類型[:=初值]信號(hào)初始值的設(shè)置不是必須的。如:SIGNALtemp:STD_LOGIC:=0;--聲明temp為標(biāo)準(zhǔn)邏輯位(STD_LOGIC)信號(hào),賦初值為0SIGNALflaga,flagb:BIT--聲明flaga,flagb為位(BIT)信號(hào),未賦初值
信號(hào)的使用和定義范圍是實(shí)體、結(jié)構(gòu)體和程序包,在進(jìn)程和子程序的順序中不允許定義信號(hào),在進(jìn)程中只能將信號(hào)列入敏感表。信號(hào)具有全局特征。當(dāng)信號(hào)聲明數(shù)據(jù)類型后,就能對信號(hào)賦值了。信號(hào)賦值的語句格式為:目標(biāo)信號(hào)名<=表達(dá)式AFTER時(shí)間量這里的表達(dá)式可以是一個(gè)運(yùn)算表達(dá)式,也可以是數(shù)據(jù)對象(變量、信號(hào)或常量)。符號(hào)“<=”表示賦值操作,即將信號(hào)傳入。信號(hào)的傳入不是即時(shí)的,即目標(biāo)信號(hào)需要一定延遲的時(shí)間δ才能接收到源信號(hào)的數(shù)據(jù)。因此符號(hào)“<=”兩邊的數(shù)值并不總是一致的,這與實(shí)際器件的傳播延遲特性是吻合的,這與變量的賦值過程有很大差別。VHDL綜合器在信號(hào)賦值時(shí),常用關(guān)鍵詞AFTER設(shè)置延遲量。如:z<=xAFTER5ns賦值符“<=”兩邊的信號(hào)的數(shù)據(jù)類型必須一致。
信號(hào)的賦值可以出現(xiàn)在一個(gè)進(jìn)程中,也可以直接出現(xiàn)在結(jié)構(gòu)體的并行語句結(jié)構(gòu)中。但兩者意義不同:在進(jìn)程中屬順序信號(hào)賦值,信號(hào)賦值操作要視進(jìn)程
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)生禮儀教育與德育的融合
- 人教部編版八年級上語文第五單元復(fù)習(xí)-上課(新課標(biāo)單元整體教學(xué)設(shè)計(jì)+課時(shí)教學(xué)設(shè)計(jì))
- 人工智能在冷鏈物流中的應(yīng)用
- 監(jiān)理工程師考試沖刺階段試題及答案
- 中醫(yī)藥在農(nóng)業(yè)養(yǎng)殖中的應(yīng)用
- 2025至2030年中國萬圣節(jié)帽子市場現(xiàn)狀分析及前景預(yù)測報(bào)告
- 2025至2030年中國UV爐光固機(jī)行業(yè)投資前景及策略咨詢報(bào)告
- 人工智能在物流行業(yè)中的教育培訓(xùn)需求
- 魯教版英語六上Unit 2 Whats this in English 第3課時(shí) (單元整體+課時(shí)教學(xué)設(shè)計(jì))
- 2025至2030年中國POP廣告陳列箱行業(yè)發(fā)展研究報(bào)告
- 2025年醫(yī)保知識(shí)考試題庫及答案(醫(yī)保數(shù)據(jù)安全)試卷
- 2024年安康市旬陽市市直教育單位遴選教師考試真題
- 《煤礦安全生產(chǎn)責(zé)任制》培訓(xùn)課件2025
- 學(xué)校安全管理工作總結(jié)
- 活動(dòng)策劃執(zhí)行合同協(xié)議書
- T-SZSA 030.1-2024 醫(yī)院及醫(yī)療機(jī)構(gòu)建筑空間照明技術(shù)規(guī)范 第1部分:總規(guī)范
- 2025年湖北科技職業(yè)學(xué)院單招職業(yè)技能測試題庫參考答案
- GB/T 45204-2025寵物經(jīng)營場所環(huán)境清潔與消毒指南
- 二十屆中央紀(jì)律檢查委員會(huì)四次會(huì)測試題及參考答案
- 2025年福建龍巖市漳平市國有資產(chǎn)投資集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 柴油安全知識(shí)培訓(xùn)課件
評論
0/150
提交評論