VHDL語言第5章可編程邏輯_第1頁
VHDL語言第5章可編程邏輯_第2頁
VHDL語言第5章可編程邏輯_第3頁
VHDL語言第5章可編程邏輯_第4頁
VHDL語言第5章可編程邏輯_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章VHDL硬件描述語言(一)一、基本結(jié)構(gòu)二、語言要素三、順序語句四、并行語句一、基本結(jié)構(gòu)1、實體2、結(jié)構(gòu)體基本結(jié)構(gòu)VHDL設(shè)計VHDL文件庫及程序包(Packages)聲明在設(shè)計或?qū)嶓w中將用到的常數(shù),數(shù)據(jù)類型,元件及子程序等實體(Entities)

聲明到其實體及其設(shè)計的接口,即定義本設(shè)計的輸入/出端口結(jié)構(gòu)體(Architectures)

定義了實體的實現(xiàn)。即電路的具體描述基本結(jié)構(gòu)/舉例說明例、一個一位二進制全加器設(shè)計。半加器全加器H_ADDERABSOCOABCOSO&&H_ADDERABSOCOH_ADDERABSOCOAINBINCYSUMCINDEFABCF_ADDERAINBINSUMCYCIN基本結(jié)構(gòu)/舉例說明/VHDL語言描述或門LIBRARYIEEE;--庫,程序包調(diào)用USEIEEE.STD_LOGIC_1164.ALL;ENTITYMYOR2IS--實體OR2描述PORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDMYOR2;ARCHITECTUREART1OFMYOR2ISBEGIN--結(jié)構(gòu)體描述C<=AORB;ENDART1;ABC基本結(jié)構(gòu)/舉例說明/VHDL語言描述半加器描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYH_ADDERIS--實體H_ADDER描述PORT(A,B:INSTD_LOGIC;CO,SO:OUTSTD_LOGIC);ENDH_ADDER;ARCHITECTUREART2OFH_ADDERISBEGIN--結(jié)構(gòu)體描述SO<=(AORB)AND(ANANDB);CO<=NOT(ANANDB);ENDART2;H_ADDERABSOCO基本結(jié)構(gòu)/舉例說明/VHDL語言描述全加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYF_ADDERIS--實體F_ADDER描述PORT(AIN,BIN,CIN:INSTD_LOGIC;CY,SUM:OUTSTD_LOGIC);ENDF_ADDER;ARCHITECTUREART3OFF_ADDERISCOMPONENTH_ADDER--元件調(diào)用聲明PORT(A,B:INSTD_LOGIC;CO,SO:OUTSTD_LOGIC);ENDCOMPONENT;基本結(jié)構(gòu)/舉例說明/VHDL語言描述COMPONENTMYOR2PORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALD,E,F(xiàn):STD_LOGIC;--信號申明BEGIN--元件連接申明U1:H_ADDERPORTMAP(A=>AIN,B=>BIN,CO=>D,SO=>E);U2:H_ADDERPORTMAP(A=>E,B=>CIN,CO=>F,SO=>SUM);U3:OR2PORTMAP(A=>D,B=>F,C=>CY);ENDART3;基本結(jié)構(gòu)/舉例說明/VHDL語言描述元件連接對照U1:H_ADDERPORTMAP(A=>AIN,B=>BIN,CO=>D,SO=>E);U2:H_ADDERPORTMAP(A=>E,B=>CIN,CO=>F,SO=>SUM);U3:MYOR2PORTMAP(A=>D,B=>F,C=>CY);H_ADDERABSOCOH_ADDERABSOCOAINBINCYSUMCINDEFABC基本結(jié)構(gòu)/舉例說明/VHDL語言描述說明該設(shè)計包括三個實體OR2——2輸入或門;H_ADDER——半加器;F_ADDER——全加器。其中:F-ADDER是頂層實體,其它兩個實體(子實體)為頂層實體服務(wù)。每個實體含有:庫、程序包和結(jié)構(gòu)體。結(jié)構(gòu)體對實體功能進行定義。實體定義的元件可以通過COMPONENT…ENDCOMPONENT元件調(diào)用申明,PORTMAP()元件例化,信號SIGNAL的定義以及引腳連線進行元件裝配?;窘Y(jié)構(gòu)/實體VHDL設(shè)計VHDL文件程序包(Packages)聲明在設(shè)計或?qū)嶓w中將用到的常數(shù),數(shù)據(jù)類型,元件及子程序等實體(Entities)

聲明到其他實體及其他設(shè)計的接口,即定義本設(shè)計的輸入/出端口結(jié)構(gòu)體(Architectures)

定義了實體的實現(xiàn)。即電路的具體描述基本結(jié)構(gòu)/實體實體是一個設(shè)計實體的表層設(shè)計單元,其功能是對這個設(shè)計實體與外部電路進行接口描述,它規(guī)定了設(shè)計單元的輸入輸出接口信號或引腳,是設(shè)計實體經(jīng)封裝后對外的一個通信界面。VHDL表達的所有設(shè)計均與實體有關(guān),實體是設(shè)計中最基本的模塊。實體中定義了該設(shè)計所需的輸入/輸出信號,信號的輸入/輸出類型被稱為端口模式,同時,實體中還定義他們的數(shù)據(jù)類型。實體說明單元的常用語句結(jié)構(gòu)如下:ENTITY實體名IS【GENERIC(類屬表);】【PORT(端口表);】——常用END實體名;基本結(jié)構(gòu)/實體/類屬類屬(GENERIC)類屬參數(shù)為設(shè)計實體和外部環(huán)境之間提供靜態(tài)數(shù)據(jù)傳輸通道,實際上就是整個設(shè)計中所要使用的一個常數(shù)。一般用來規(guī)定端口的大小、I/O引腳的指派、實體中子元件的數(shù)目和實體的定時特性。類屬參數(shù)說明語句必須放在端口說明語句前面。類似于C語言中的“#define”。書寫格式如下:GENERIC(常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值];常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值];…常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值]);注意:最后一個類屬定義后面,不可加“;”?;窘Y(jié)構(gòu)/實體/端口端口(PORT)書寫格式如下:PORT(端口名:端口模式 數(shù)據(jù)類型;…端口名:端口模式 數(shù)據(jù)類型);端口名是賦給每個外部引腳信號的名稱,由設(shè)計者自行命名,在實體中唯一;端口模式常用的有4種:IN:只可輸入的引腳;OUT:只可輸出的引腳;INOUT:雙向引腳;BUFFER:輸出引腳,但同時用作內(nèi)部輸入和反饋。注意:最后一個端口定義后面,不可加“;”?;窘Y(jié)構(gòu)/實體/舉例說明ENTITYMYENTISGENERIC(WIDTH:INTEGER:=16);PORT(CLK:INSTD_LOGIC;ADBUS:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0));ENDMYENT;如果改變了類屬WIDTH的值,結(jié)構(gòu)體中所有相關(guān)的定義將同時改變,由此將改變整個設(shè)計實體的硬件結(jié)構(gòu)?;窘Y(jié)構(gòu)/結(jié)構(gòu)體VHDL設(shè)計VHDL文件程序包(Packages)聲明在設(shè)計或?qū)嶓w中將用到的常數(shù),數(shù)據(jù)類型,元件及子程序等實體(Entities)

聲明到其他實體及其他設(shè)計的接口,即定義本設(shè)計的輸入/出端口結(jié)構(gòu)體(Architectures)

定義了實體的實現(xiàn)。即電路的具體描述基本結(jié)構(gòu)/結(jié)構(gòu)體結(jié)構(gòu)體是對實體功能的具體描述,因此它一定要跟在實體的后面。一個完整的、能夠被綜合實現(xiàn)的VHDL設(shè)計必須有一個實體和對應(yīng)的結(jié)構(gòu)體。一個實體和其對應(yīng)結(jié)構(gòu)體可構(gòu)成一個完整的VHDL設(shè)計。一個實體可對應(yīng)一個結(jié)構(gòu)體或多個結(jié)構(gòu)體。語句格式如下:ARCHITECTURE結(jié)構(gòu)體名OF實體名IS【定義語句】內(nèi)部信號、常數(shù)、數(shù)據(jù)類型,函數(shù)等的定義GEGIN【并行處理語句】【進程語句】END結(jié)構(gòu)體名;實體名必須是所在設(shè)計實體的名字,自行命名結(jié)構(gòu)體名。基本結(jié)構(gòu)/結(jié)構(gòu)體結(jié)構(gòu)體(Architecture)聲明區(qū)(Declarations)信號聲明;聲明用于該結(jié)構(gòu)體的類型,常數(shù),元件,子程序。并發(fā)語句信號賦值(SignalAssignments)計算結(jié)果,并賦值給信號元件例化(ComponentInstantiations)調(diào)用另一個實體所描述的電路。即元件調(diào)用過程調(diào)用(ProcedureCalls)調(diào)用一個預(yù)先定義好的一個算法。進程(Processes)定義一個新算法實現(xiàn)電路功能。進程中只有順序語句,語句按放置的順序執(zhí)行?;窘Y(jié)構(gòu)/結(jié)構(gòu)體/舉例說明ARCHITECTUREbehaveOFcntm16ISBEGINco<=‘1’when(qcnt=“1111”andci=‘1’)else

‘0’;PROCESS(clk,nreset) --進程(敏感信號表)BEGINIF(nreset='0')THEN--順序語句qcnt<="0000"; ELSIF(clk'EVENTANDclk='1')THENif(ci='1')thenqcnt<=qcnt+1;endif;ENDIF;

ENDPROCESS;ENDbehave;基本結(jié)構(gòu)/實體與結(jié)構(gòu)體之間的關(guān)系整個芯片→一個完整的VHDL設(shè)計程序;芯片外部(外殼+引腳)→實體引腳→端口芯片內(nèi)部(電路)→結(jié)構(gòu)體二、語言要素1、文字規(guī)則2、數(shù)據(jù)對象3、數(shù)據(jù)類型4、運算符文字規(guī)則/關(guān)鍵字關(guān)鍵字——VHDL中有許多保留字,它們在程序中有特殊的含義。設(shè)計者不能使用這些關(guān)鍵字作為自己的標識符。ABSDOWNTOLIBRARYPOSTPONEDSRLACCESSSLSELINKAGEPROCEDURESUBTYPEAFTERELSIFLITERALPROCESSTHENALIASENDLOOPPURETOALLENTITYMAPRANGETRANSPORTANDEXITMODRECORDTYPEARCHITECTUREFILENANDREGISTERUNAFFECTEDARRAYFORNEWREJECTUNITSASSERTFUNCTIONNEXTREMUNTILATTRIBUTEGENERATENORREPORTUSEBEGINGENERICNOTRETURNVARIABLEBLOCKGROUPNULLROLWAITBODYGUARDEDOFRORWHENBUFFERIFONSELECTWHILEBUSIMPUREOPENSEVERITYWITHCASEINORSIGNALXNORCOMPONENTINERTIALOTHERSSHAREDXORCONFIGURATIONINOUTOUTSLACONSTANTISPACKAGEALLDISCONNECTLABELPORTSRA文字規(guī)則/標識符標識符——由大小寫英文字母、阿拉伯數(shù)字和下劃線組成使用時注意以下幾點:VHDL不區(qū)分大小寫;標識符必須以字母開頭;下劃線不能放在結(jié)尾;下劃線不能連用;不能使用關(guān)鍵字;不同的綜合系統(tǒng)還定義了各自的子程序,子程序名也不能作為標識符。例如:合法:rs_a_1、show_new_state、COUT不合法:2as、_ab1、a__cd、out文字規(guī)則/數(shù)字型文字整數(shù)文字:都是十進制的數(shù)例如:456,134E2(=13400),8_123_456_789,0注意:“_”——為了提高數(shù)字的可讀性,相當于一個空的間隔符,沒有其它意義,不影響數(shù)值。實數(shù)文字:十進制數(shù)+小數(shù)點例如:23.4,1_234.567,123.45E-2(=1.2345),0.0以數(shù)制基數(shù)表示的文字:基數(shù):2~16進制基數(shù)(十進制數(shù))#數(shù)值文字#E指數(shù)(十進制數(shù),若是0可省略),例如10#170#=170×1002#1111_1110#=254×2016#E#E1=16#E0#=224=14×16116#F.01#E+2=16#F01#=3841.00文字規(guī)則/字符串型文字字符——用‘’引起來的ASCII字符,可以是數(shù)值、符號和字母。字符串——是一維的字符數(shù)組,必須放在“”中。VHDL中有兩種類型的字符串:文字字符串——用“”引起來的一串文字。例如“VHDLSYMBOL”、“abcd”數(shù)位字符串——也稱位矢量、位串,是被“”引起來的數(shù)字序列,其前加上數(shù)制基數(shù)說明符,實際上是預(yù)定義的數(shù)據(jù)類型BIT的一維數(shù)組。例如二進制:B“0110_1110”八進制:O“117”十六進制:X“FFE0”文字規(guī)則/下標名及下標段名下標名——指示數(shù)組型變量或信號的某一個元素;類似于C語言中的數(shù)組元素的表示方法。下標段名——指示數(shù)組型變量或信號的某一段元素。語句格式如下:數(shù)組型變量或信號名(表達式1【TO/DOWNTO表達式2】);TO表示數(shù)組下標序列由低到高DOWNTO表示數(shù)組下標序列由高到低例如:SIGNALA,B,C:BIT_VECTOR(0TO7);SIGNALY:BIT;Y<=B(3);--單個元素賦值C(0TO3)<=A(4TO7);--分段賦值C(4TO7)<=A(0TO3);--分段賦值文字規(guī)則/文法格式關(guān)鍵字和標識符的大小寫格式等同,即不區(qū)分大小寫;注釋是以“--”(雙短橫線)開始,只對本行有效;每一條語句以“;”結(jié)束,在文本的一行中,可以寫多條語句,一般只寫一條語句;除關(guān)鍵字和標識符的自身中間不能插入空格外,其它地方可插入任意數(shù)目的空格。數(shù)據(jù)對象/信號信號——是一種用于連接并發(fā)要素(例如元件、進程及并發(fā)賦值語句)的對象,相當于原理圖或電路板上用于連接元件的導(dǎo)線。從信號說明的位置來分,可分為:端口信號和內(nèi)部信號。內(nèi)部信號聲明語法格式:SIGNAL信號名:數(shù)據(jù)類型【:=初始值】;例如:SIGNALbusa:STD_LOGIC_VECTOR(15DOWNTO0):=(OTHERS=>‘Z’);注意:“:=”表示對信號賦初值,可用于仿真,不用于綜合。信號使用的兩種方法:在兩個元件之間使用信號傳遞信息——導(dǎo)線;信號賦值語句。格式為:目標信號名<=表達式;信號可看作是一個數(shù)值容器,既可容納當前值,又可保持歷史值。信號賦值存在延時。數(shù)據(jù)對象/變量變量——VHDL順序語句中存放中間值的對象。變量聲明語法格式如下:VARIABLE變量名:數(shù)據(jù)類型【:=初始值】;例如:VARIABLEDET:BIT:=‘0’;變量賦值格式:目標變量名:=表達式;例如:y:=a+b;變量只能在進程、函數(shù)和過程中使用,屬于局部對象。變量賦值立即有效,不產(chǎn)生延時。數(shù)據(jù)對象/變量/信號與變量的區(qū)別聲明形式不同。信號聲明關(guān)鍵字為SIGNAL;而變量為VARIABLE。聲明位置不同。信號聲明在在子程序、進程外部;而變量在子程序、進程內(nèi)部。賦值符號不同。信號賦值符為“<=”;變量賦值符為“:=”。在進程中,信號賦值在進程結(jié)束時起作用,而變量賦值是立即起作用。即在一個進程中多次為一個信號賦值,只有最后一個會起作用,而當為變量賦值時,變量的值立即改變。數(shù)據(jù)對象/變量/信號與變量的區(qū)別例如:ARCHITECTUREARTOFSIGISSIGNALD:STD_LOGIC;BEGIN PROCESS(A,B,C) BEGIN D<=A; X<=CANDD; D<=B; Y<=CANDD; ENDPROCESS;ENDART;ARCHITECTUREARTOFVARISBEGIN PROCESS(A,B,C)

VARIABLED:STD_LOGIC; BEGIN D:=A; X<=CANDD; D:=B; Y<=CANDD; ENDPROCESS;ENDART;X<=CANDB;Y<=CANDBX<=CANDA;Y<=CANDB數(shù)據(jù)對象/常量常量——是一個固定的值,在整個仿真期間其值不能改變,一旦賦值就不能再改變。常量說明格式如下:CONSTANT常量名:類型說明:=表達式;例如:CONSTANTSTEP:INTEGER:=2;常量一般在結(jié)構(gòu)體描述、程序包說明、實體說明、過程說明、函數(shù)調(diào)用說明和進程說明中使用。常量聲明可以放在設(shè)計的任意位置,但作用范圍不同。全局常量:聲明放在外部程序包內(nèi);若限制再某個程序段內(nèi),則應(yīng)該將聲明放在相應(yīng)的結(jié)構(gòu)體、塊、進程和子程序內(nèi)。數(shù)據(jù)類型VHDL具有很強的數(shù)據(jù)類型,是一種強類型語言。VHDL語言的數(shù)據(jù)類型的定義相當嚴格,不同類型之間的數(shù)據(jù)不能直接代入,即使數(shù)據(jù)類型相同,位長不同時也不能直接代入。在VHDL標準中描述了四種數(shù)據(jù)類型:標量類型、復(fù)合類型、存取類型、文件類型。在VHDL中,除了很多預(yù)定義的數(shù)據(jù)類型可直接使用外,用戶還可以自定義數(shù)據(jù)類型。預(yù)定義的VHDL數(shù)據(jù)類型在VHDL的標準程序包STANDARD和STD_LOGIC_1164及其它的標準程序包中作了定義,并可在設(shè)計中隨時調(diào)用;用戶自定義的數(shù)據(jù)類型以及子類型的基本元素一般仍屬于VHDL的預(yù)定義數(shù)據(jù)類型。注意:VHDL綜合器并不支持所有的預(yù)定義和自定義數(shù)據(jù)類型。如:REAL、TIME、FILE、ACCES等。數(shù)據(jù)類型/VHDL預(yù)定義數(shù)據(jù)類型VHDL預(yù)定義數(shù)據(jù)類型都是在VHDL標準程序包STANDARD種定義的,在使用時已經(jīng)自動包含進VHDL的源文件中,所以不必通過USE語句調(diào)用。布爾(BOOLEAN)數(shù)據(jù)類型——枚舉類型兩種可能取值:TRUE(真)和FALSE(假)預(yù)定義:TYPEBOOLEANIS(FALSE,TRUE);位(BIT)數(shù)據(jù)類型——枚舉類型兩種可能取值:‘1’和‘0’預(yù)定義:TYPEBITIS(‘0’,‘1’);位矢量(BIT_VECTOR)數(shù)據(jù)類型——基于BIT類型的數(shù)組預(yù)定義:TYPEBIT_VECTORIS

ARRAY(NATURAL<>)OFBIT;使用位矢量必須注明位寬。例如:SIGNALABUS:BIT_VECTOR(7TO0);數(shù)據(jù)類型/VHDL預(yù)定義數(shù)據(jù)類型字符(CHARACTER)數(shù)據(jù)類型用‘’引起來,區(qū)分大小寫。整數(shù)(INTEGER)類型:正整數(shù)、負整數(shù)和零。32位,最大取值范圍:-231~231VHDL仿真器——有符號處理;VHDL綜合器——有符號處理。自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)數(shù)據(jù)類型SUBTYPENATURALISINTEGERRANGE0TOINTEGER’HIGH;SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER’HIGH;實數(shù)(REAL)數(shù)據(jù)類型:有正負,有小數(shù)點。TYPEREALISRANGE-1.0E+38TO+1.0e+38;數(shù)據(jù)類型/VHDL預(yù)定義數(shù)據(jù)類型字符串(STRING)數(shù)據(jù)類型時間(TIME)數(shù)據(jù)類型——物理類型物理單位定義格式:TYPE物理類型名IS范圍;UNITS基本單位;單位;ENDUNITS;錯誤等級類型數(shù)據(jù)類型/IEEE預(yù)定義標準邏輯位與矢量在IEEE庫的程序包STD_LOGIC_1164中定義了兩個非常重要的數(shù)據(jù)類型。標準邏輯位STD_LOGIC數(shù)據(jù)類型——常用預(yù)定義:TYPESTD_LOGICIS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);——枚舉類型‘U’-初始值,‘X’-不定,‘0’-0,‘1’-1,‘Z’-高阻,‘W’-弱信號不定,‘L’-弱信號0,‘H’-弱信號1,‘-’-不可能情況。程序包STD_LOGIC_1164中定義了STD_LOGIC型邏輯運算符AND、NAND、OR、NOR和NOT的重載函數(shù),以及用于BIT與STD_LOGIC相互轉(zhuǎn)換的函數(shù)。標準邏輯矢量STD_LOGIC_VECTOR數(shù)據(jù)類型——常用預(yù)定義:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;同位寬、同數(shù)據(jù)類型的矢量間才能相互賦值。數(shù)據(jù)類型/其它預(yù)定義標準數(shù)據(jù)類型在IEEE庫的程序包STD_LOGIC_ARITH中定義了另三種數(shù)據(jù)類型。無符號(UNSIGNED)型:用于無符號數(shù)運算預(yù)定義:TYPEUNSIGNEDISARRAY(NATRUALRANGE<>)OFSTD_LOGIC;例如:VARIABLEA:UNSIGNED(0TO8);有符號(SIGNED)型:用于有符號數(shù)運算預(yù)定義:TYPESIGNEDISARRAY(NATRUALRANGE<>)OFSTD_LOGIC;例如:VARIABLEA:SIGNED(0TO8);A(0)是符號位小整型(SMALL_INT)預(yù)定義:TYPESMALL_INTISINTEGERRANGE0TO1;數(shù)據(jù)類型/用戶自定義數(shù)據(jù)類型用戶定義的數(shù)據(jù)類型的一般格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義【OF基本數(shù)據(jù)類型】;SUBTYPE子類型名IS基本數(shù)據(jù)類型RANGE約束范圍;枚舉(ENUMERATED)類型格式:TYPE數(shù)據(jù)類型名IS(元素,元素,…);例:TYPEweekIS(Sun,Mon,Tue,wed,Thu,Fri,Sat);例:TYPESTD_LOGICIS(‘U’,‘X’,’0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);整數(shù)(INTEGER)類型格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義約束范圍例:TYPEdigitISINTEGERRANGE0TO9數(shù)據(jù)類型/用戶自定義數(shù)據(jù)類型實數(shù)(REAL)類型格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義約束范圍例:TYPEcurrentISREALRANGE-1E4TO1E4數(shù)組(ARRAY)類型格式:TYPE數(shù)據(jù)類型名ISARRAY范圍OF原數(shù)據(jù)類型名;例:TYPEwordISARRAY(1TO8)OFSTD_LOGIC;時間(TIME)類型格式:TYPE數(shù)據(jù)類型名IS范圍UNITS基本單位單位;ENDUNITS;數(shù)據(jù)類型/用戶自定義數(shù)據(jù)類型記錄(RECODE)類型將不同的數(shù)據(jù)類型放在一塊,就是記錄類型數(shù)據(jù)。格式:TYPE數(shù)組類型名ISRECORD元素名:數(shù)據(jù)類型名;元素名:數(shù)據(jù)類型名;…ENDRECORD;數(shù)據(jù)類型/數(shù)據(jù)類型轉(zhuǎn)換函數(shù)/程序包說明STD_LOGIC_1164包

TO_STDLOGICVECTOR(A)由BIT_VECTOR轉(zhuǎn)換成STD_LOGIC_VECTORTO_BITVECTOR(A)由STD_LOGIC_VECTOR轉(zhuǎn)換成BIT_VECTORTO_LOGIC(A)由BIT轉(zhuǎn)換成STD_LOGICTO_BIT(A)由STD_LOGIC轉(zhuǎn)換成BITSTD_LOGIC_ARITH包CONV_STD_LOGIC_VECTOR(A,位長)由INTEGER,UNSIGNED和SIGNED轉(zhuǎn)換成STD_LOGIC_VECTORCONV_INTEGER(A)由UNSIGNED和SIGNED轉(zhuǎn)換成INTEGERSTD_LOGIC_UNSIGNED包CONV_INTEGER(A)STD_LOGIC_VECTOR轉(zhuǎn)換成INTEGER運算符優(yōu)先級類型運算符說明運算符說明低邏輯AND與NOR或非OR或XOR異或NAND與非XNOR同或關(guān)系=等于<=小于等于/=不等于>大于<小于>=大于等于加減+加法-減法并置&并置符號+正號-負號乘法*乘法/除法MOD求模REM求余其它**指數(shù)ABS絕對值NOT非SLL邏輯左移SRL邏輯右移SLA算術(shù)左移高SRA算術(shù)右移ROL循環(huán)左移ROR循環(huán)右移運算符/并置運算符&——組合操作數(shù)構(gòu)建一個數(shù)組。操作數(shù)可以是數(shù)值型數(shù)據(jù)也可以是一個數(shù)組或一個數(shù)組元素,常用于字符串和位串的連接或數(shù)組的合并與修改。例如SIGNALx1,x2:BIT_VECTOR(7DOWNTO0);SIGNALy1:BIT_VECTOR(3DOWNTO0);SIGNALy2:BIT;SIGNALz1:BIT_VECTOR(15DOWNTO0);SIGNALz2:BIT_VECTOR(11DOWNTO0);SIGNALz3:BIT_VECTOR(8DOWNTO0);z1<=x1&x2;z2<=x2&y1;z3<=x2&y2;運算符/移位運算符SLA——算術(shù)左移,SRA——算術(shù)右移方法:空缺位用當前位補充。例如:x=10101110;y1<=xSLA3;y2<=xSRA5;結(jié)果:y1=01110000,y2=11111101。SLL——邏輯左移,SRL——邏輯右移方法:空缺位用‘0’補充。例如:x=10101110;y1<=xSLL3;y2<=xSRL5;結(jié)果:y1=01110000,y2=00000101。ROL——循環(huán)左移,ROR——循環(huán)右移方法:空缺位用移出位補充。例如:x=10101110;y1<=xROL3;y2<=xROR5;結(jié)果:y1=01110101,y2=01110101。三、順序語句1、賦值語句2、分支控制語句3、循環(huán)控制語句4、同步控制語句5、其它語句順序語句順序語句——只能用在進程和子程序中,它和其他高級語言一樣,其語句是按照語句的出現(xiàn)的順序加以執(zhí)行的。進程語句本身是一個并行語句,但在進程內(nèi)部的所有語句都是順序語句;子程序包括函數(shù)和過程,也是由一系列順序語句構(gòu)成。順序語句/賦值語句信號賦值目的信號量<=信號量表達式;變量賦值目的變量:=表達式;注意:在進程內(nèi),信號和變量具有根本的行為差別。變量賦值立即生效;信號賦值不能立即生效,直到相應(yīng)的進程被掛起。順序語句/分支控制語句IF語句簡單IF語句結(jié)構(gòu)格式:IF條件THEN順序執(zhí)行語句ENDIF;例如:D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDIS PORT(CP,D:INSTD_LOGIC; Q:OUTSTD_LOGIC);ENDD;ARCHITECTUREARTOFDISBEGINPROCESS(CP)BEGINIFCP‘EVENTANDCP='1'THENQ<=D;ENDIF;ENDPROCESS;ENDART;順序語句/分支控制語句/IF語句雙路選擇結(jié)構(gòu)格式:IF條件THEN順序執(zhí)行語句1ELSE順序執(zhí)行語句2ENDIF;例如:二選一LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21ISPORT(d0,d1,sel:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux21;ARCHITECTUREartOFmux21ISBEGINPROCESS(d0,d1,sel)BEGINIFsel='1'THENq<=d1;ELSEq<=d0;ENDIF;ENDPROCESS;ENDart;順序語句/分支控制語句/IF語句多路選擇結(jié)構(gòu)格式:IF條件THEN順序執(zhí)行語句ELSIF條件THEN順序執(zhí)行語句…ELSIF條件THEN順序執(zhí)行語句ELSE順序執(zhí)行語句ENDIF;例如:四選一LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUX41ISPORT(DIN:INSTD_LOGIC_VECTOR(3DOWNTO0);SEL:INSTD_LOGIC_VECTOR(1DOWNTO0);Q:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREARTOFmux41ISBEGINPROCESS(DIN,SEL)BEGINIFSEL=“00”THENQ<=DIN(0);ELSIFSEL=“01”THENQ<=DIN(1);ELSIFSEL=“10”THENQ<=DIN(2);ELSEQ<=DIN(3);ENDIF;ENDPROCESS;ENDART;順序語句/分支控制語句/CASE語句CASE語句從許多不同語句的序列中選擇其中之一執(zhí)行?!愃艭語言中的“switch”。CASE表達式ISWHEN條件表達式1=>順序處理語句1;…WHEN條件表達式n=>順序處理語句n;WHENOTHERS=>順序處理語句n+1ENDCASE;其中WHEN的條件表達式可以有3種形式:WHEN值=>順序處理語句WHEN值|值|值|…|值=>順序處理語句WHEN值TO值=>順序處理語句注意:各個條件表達式必須相互排斥。順序語句/分支控制語句/CASE語句例如:四選一數(shù)據(jù)選擇器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUX41ISPORT(DIN:INSTD_LOGIC_VECTOR(3DOWNTO0);SEL:INSTD_LOGIC_VECTOR(1DOWNTO0);Q:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREARTOFmux41ISBEGINPROCESS(DIN,SEL)BEGINCASESELISWHEN“00”=>Q<=DIN(0);WHEN“01”=>Q<=DIN(1);WHEN“10”=>Q<=DIN(2);WHENOTHERS=>Q<=DIN(3);ENDPROCESS;ENDART;區(qū)別:IF語句:條件有先后之分CASE語句:沒有先后之分順序語句/循環(huán)控制語句/LOOP語句FORLOOP結(jié)構(gòu)——固定循環(huán)次數(shù)【標號:】FOR循環(huán)變量IN循環(huán)下限TO循環(huán)上限LOOP順序語句序列ENDLOOP【標號】;說明:循環(huán)次數(shù)由循環(huán)上下限決定;循環(huán)變量的值從循環(huán)下限開始,每循環(huán)一次自動指向下一個循環(huán)變量值;當循環(huán)變量值大于循環(huán)上限時循環(huán)結(jié)束;對FORLOOP結(jié)構(gòu),默認循環(huán)變量位i,不用聲明。順序語句/循環(huán)控制語句/LOOP語句例:8位奇偶校驗電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCRC8ISPORT(x:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDCRC8;ARCHITECTUREARTOFCRC8ISBEGINPROCESS(x)VARIABLEtmp:STD_LOGIC;BEGINtmp:='0';FORiIN0TO7LOOPtmp:=tmpXORx(i);ENDLOOP;y<=tmp;ENDPROCESS;ENDART;FORiIN0TO7LOOPIFx(i)=‘1’THENtmp:=NOTtmp;ENDIF;ENDLOOP;順序語句/循環(huán)控制語句/LOOP語句WHILELOOP結(jié)構(gòu)【標號:】WHILE條件LOOP順序處理語句ENDLOOP【標號】;

在該語句中,如果條件為真,則進行循環(huán),否則結(jié)束循環(huán)。適合于仿真,綜合比較困難。例:8位奇偶校驗電路PROCESS(x)VARIABLEtmp:STD_LOGIC;BEGINtmp:='0';i:=0;WHILEi<8LOOPtmp:=tmpXORx(i);ENDLOOP;y<=tmp;ENDPROCESS;順序語句/循環(huán)控制語句/LOOP語句無限循環(huán)語句——不常用【標號:】LOOP…EXITWHEN(條件表達式);ENDLOOP;當括號中的條件表達式為真時,退出循環(huán)。順序語句/循環(huán)控制語句/EXIT語句EXIT語句,用于LOOP語句中實現(xiàn)提前終止循環(huán)。類似于C語言中的“break;”。語法格式有三種:EXIT;EXIT標號;EXIT標號WHEN條件表達式;例如:PROCESS(a)VARIABLEint_a:INTEGER;BEGINint_a:=aFORiIN0TO31LOOPIF(int_a<=0)THEN

EXIT;ELSEint_a:=int_a-1;q(I)<=3.1416/REAL(a*i);ENDIFENDLOOP;y<=q;ENDPROCESS;順序語句/循環(huán)控制語句/NEXT語句NEXT語句用于LOOP語句中跳出本次循環(huán),直接進入下一循環(huán)周期。類似于C語言中的“continue;”。NEXT【標號】【W(wǎng)HEN條件表達式】;例如:PROCESS(a,b)CONSTANTmax_limit:INTEGER:=255BEGINFORiIN0TOmax_limitLOOPIF(done(i)=TRUE)THENNEXT;ELSEdone(i):=TRUE;ENDIF;q(i)<=a(i)ANDb(i);ENDLOOP;ENDPROCESS;順序語句/同步控制語句進程在仿真運行中總是處于兩種狀態(tài):執(zhí)行或掛起。進程狀態(tài)的變化受到同步控制語句——WAIT語句的制約,當進程執(zhí)行到等待語句時,被掛起,并設(shè)置好再次執(zhí)行的條件。WAIT語句適合于仿真,不適合于綜合。WAIT語句根據(jù)條件的不同可分為4類:WAIT;——無限等待,不常用WAITON信號【,信號,…】;——敏感信號量變化WAITUNTIL條件表達式;——條件滿足WAITFOR時間表達式;——時間到順序語句/同步控制語句WAITON信號【,信號,…】;——敏感信號量變化例如注意:這兩種方式等價,但不能同時使用。如果PROCESS語句已有敏感信號量列表,則在進程中不能再使用WAITON語句,反之就不能有敏感信號量列表。PROCESS(a,b)BEGINy<=aANDb;ENDPROCESS;PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;順序語句/同步控制語句格式:WAITUNTIL條件表達式;當進程執(zhí)行到該語句時,被掛起;若條件表達式為真時,進程將被啟動,繼續(xù)執(zhí)行WAITUNTIL后面的語句。例PROCESSBEGINRESET_LOOP:LOOPWAITUNTILCLK’EVENTANDCLK=‘1’;NEXTRESET_LOOPWHEN(RESET=‘1’);ENDLOOPRESET_LOOP;ENDPROCESS;注意:WAITUNTIL語句隱含一個敏感信號列表,就是條件表達式所包含的信號,任何一個敏感信號發(fā)生改變時,就立即對條件表達式進行測試。順序語句/同步控制語句格式:WAITFOR時間表達式;當進程執(zhí)行到該語句時,被掛起;經(jīng)過時間表達式所指定的等待時間以后,進程將被啟動,程序就開始繼續(xù)執(zhí)行WAITFOR語句后面的語句。例如PROCESSBEGINWAITFOR30ns;CLK1<=NOTCLK1;ENDPROCESS;注意:如果時間表達式的值為0,則WAITFOR就相當于無限循環(huán)語句,電路仿真時將出現(xiàn)死機現(xiàn)象。順序語句/同步控制語句多條件WAIT語句例:WAITONnmi,interruptUNTIL((nmi=TRUE)OR(interrupt=TRUE))FOR5us;該等待有三個條件:第一,信號nmi和interrupt任何一個有一次刷新動作;第二,信號nmi和interrupt任何一個為真;第三,等待5us。只要一個以上的條件被滿足,進程就被啟動。超時等待若在程序中所設(shè)置的等待條件永遠不會滿足,則進程就永遠不能啟動。為防止進入無限等待情況,應(yīng)做一些處理。順序語句/子程序調(diào)用語句在進程中允許對子程序進行調(diào)用?!樞蛘Z句子程序包括過程和函數(shù),可以在VHDL的結(jié)構(gòu)體或程序包中的任何位置對子程序進行調(diào)用。過程調(diào)用過程名【(【形參1名=>】實參1,【形參2名=>】實參2,…【形參n名=>】實參n)】;注意:形參與實參的關(guān)聯(lián)方法有兩種:位置關(guān)聯(lián)法——上面去掉“【形參名=>】”;名字關(guān)聯(lián)法——如上面的形式。函數(shù)調(diào)用與過程調(diào)用相似,調(diào)用函數(shù)將返回一個指定數(shù)據(jù)類型的值,函數(shù)的參量只能式輸入值。順序語句/其它語句斷言語句(ASSERT)ASSERT條件表達式【REPORT錯誤信息】【SEVERITY錯誤級別】;執(zhí)行到斷言語句時,判斷條件。若條件滿足就繼續(xù)執(zhí)行,否則輸出錯誤信息和錯誤級別信息。例如:ASSERT(tiaojian=‘1’)REPORT“somethingwrong”SEVERITYERROR;空語句(NULL)格式:NULL;在有些情況下不需要執(zhí)行任何動作,就可以用空語句。四、并行語句1、進程語句2、塊語句3、并行信號賦值語句4、并行過程調(diào)用語句5、元件例化語句6、生成語句并行語句/進程語句進程(PROCESS)格式:【進程標號:】PROCESS(【敏感信號表】)【進程說明區(qū)】BEGIN【進程程序區(qū)】ENDPROCESS【進程標號】;在一個結(jié)構(gòu)體中多個PROCESS語句可以同時并行的執(zhí)行,該語句有如下特點:可以和其它進程語句同時執(zhí)行,并可以存取結(jié)構(gòu)體和實體中所定義的信號;進程中的所有語句都按照順序執(zhí)行;為啟動進程,在進程中必須包含一個敏感信號表或WAIT語句;進程之間的通信是通過信號量來實現(xiàn)的。并行語句/進程語句ARCHITECTUREARTOFCNT12ISSIGNALQ:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALRST,DLY:STD_LOGIC;BEGINCOUT<=NOTQ(3)ANDDLY;RST<='1'WHENQ=12ORCLR='1'ELSE '0';QOUT<=Q;PROCESS(CLK,RST)BEGINIFRST='1'THENQ<="0000";ELSIFCLK'EVENTANDCLK='1'THENDLY<=Q(3);IFENA='1'THENQ<=Q+1;ENDIF; ENDIF;ENDPROCESS;ENDART;并行語句/塊語句塊(BLOCK)語句是一個并行語句,而它所包含的一系列語句也是并行語句,這些并行語句的執(zhí)行與次序無關(guān)。標號:BLOCK塊頭【聲明語句】;BEGIN【并行處理語句】;ENDBLOCK標號名;塊頭——主要用于信號的映射及參數(shù)的定義,通常通過GENERIC語句、GENERICMAP以及PORT和PORTMAP語句來實現(xiàn);聲明語句——與結(jié)構(gòu)體的聲明語句相同,主要是對該塊所要用到的客體進行聲明??梢月暶鞯捻椖坑蠻SE子句、子程序聲明及子程序體、類型聲明、常數(shù)聲明、信號聲明、元件聲明等。并行語句/塊語句例如:BLK1:BLOCKGENERIC(GB1,GB2:TIME);GENERICMAP(GB1=>L-TIME,GB2=>S-TIME);PORT(PB1:INBIT;PB2:INOUTBIT);PORTMAP(PB1=>B1,PB2=>A1);CONSTANTDELAY:TIME:=1ms;SIGNALS1:BIT;BEGINS1<=PB1AFTERDELAY;PB2<=S1AFTERGB1,B1AFTERGB2;ENDBLOCKBLK1;并行語句/塊語句B1:BLOCKSIGNALS:BIT;BEGINS<=AANDB;B2:BLOCKSIGNALS:BIT;BEGINS<=AANDB;B3:BLOCKBEGINZ<=S;ENDBLOCKB3;ENDBLOCKB2;Y<=S;ENDBLOCKB1;注意:BLOCK語句可以嵌套,內(nèi)層BLOCK能夠使用外層BLOCK所聲明的信號,而外層BLOCK不能使用內(nèi)層BLOCK中聲明的信號。并行語句/并行信號賦值語句簡單信號賦值語句格式:信號名<=表達式【AFTERTIME】;信號賦值語句在進程中使用是順序語句,但是在進程外即在結(jié)構(gòu)體中使用就是并行語句。當賦值號“<=”右邊表達式中的信號發(fā)生變化時,賦值語句被激活??梢?,一條并行信號賦值語句相當于一個進程。例如:兩個等價ARCHITECTUREARTOFa_varISBEGINOutput<=a(I);ENDART;ARCHITECTUREARTOFa_varISBEGINPROCESS(a,I)BEGINOutput<=a(I);ENDPROCESS;ENDART;并行語句/并行信號賦值語句條件信號賦值語句格式:目標信號量<=表達式1WHEN條件表達式1ELSE表達式2WHEN條件表達式2ELSE…表達式nWHEN條件表達式n;注意:最后一行中的“條件表達式n”可以寫作“OTHERS”,以確保WHEN子句能夠覆蓋所有可能的條件;所列出的條件有一個隱含的優(yōu)先級,先列出的優(yōu)先級最高,最后給出的條件優(yōu)先級最低。并行語句/并行信號賦值語句/條件信號賦值語句例如:四選一電路LIBRA

溫馨提示

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

最新文檔

評論

0/150

提交評論