EDA技術(shù)教程講義第五章VHD初步_第1頁(yè)
EDA技術(shù)教程講義第五章VHD初步_第2頁(yè)
EDA技術(shù)教程講義第五章VHD初步_第3頁(yè)
EDA技術(shù)教程講義第五章VHD初步_第4頁(yè)
EDA技術(shù)教程講義第五章VHD初步_第5頁(yè)
已閱讀5頁(yè),還剩175頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

EDA技術(shù)教程講義第五章VHD初步

HDL文本輸入設(shè)計(jì)HDL:VHDLVerilogAble

VeryhighspeedintegratedHardwareDescriptionLanguage(VHDL)是IEEE、工業(yè)標(biāo)準(zhǔn)硬件描述語(yǔ)言用語(yǔ)言的方式而非圖形等方式描述硬件電路特別適合于設(shè)計(jì)的電路有:復(fù)雜組合邏輯電路,如:譯碼器、編碼器、加減法器、多路選擇器、地址譯碼器…...狀態(tài)機(jī)

VHDL的功能和標(biāo)準(zhǔn)

VHDL描述輸入端口輸出端口電路的行為和功能VHDL有兩個(gè)標(biāo)準(zhǔn):IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)5.1VHDL程序的基本結(jié)構(gòu)一、VHDL設(shè)計(jì)實(shí)體的組成

庫(kù)和程序包(Library、package)--打開(kāi)本設(shè)計(jì)使用的庫(kù)和程序包實(shí)體(Entity) --說(shuō)明本設(shè)計(jì)實(shí)體的外部端口結(jié)構(gòu)體(Architecture) --描述本設(shè)計(jì)實(shí)體的內(nèi)部結(jié)構(gòu)和行為配置(Configuration) --指定實(shí)體希望配置的結(jié)構(gòu)體【例5-1.1】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'ELSEb;ENDARCHITECTUREone;實(shí)體結(jié)構(gòu)體5-1.1多路選擇器VHDL描述圖5-1mux21a實(shí)體圖5-2mux21a結(jié)構(gòu)體2選1多路選擇器的VHDL描述2選1多路選擇器的VHDL描述【例5-1.2】

ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd<=aAND(NOTS);e<=bANDs;y<=dORe;ENDARCHITECTUREone;【例5-1.3】...

ARCHITECTUREoneOFmux21aISBEGINy<=(aAND(NOTs))OR(bANDs);ENDARCHITECTUREone;圖5-3mux21a功能時(shí)序波形8

二、實(shí)體功能描述

實(shí)體的功能

對(duì)一個(gè)電路元件或電路系統(tǒng)的外部接口進(jìn)行描述,實(shí)體反映了本電路與其他電路之間的連接關(guān)系,可以看成一個(gè)電路符號(hào)。1、實(shí)體的語(yǔ)句格式實(shí)體描述語(yǔ)句通常包括引導(dǎo)語(yǔ)句、結(jié)束語(yǔ)句、類(lèi)屬表和端口表四部分,如表5.1.1所示。

表5.1.1實(shí)體描述語(yǔ)句的格式名稱(chēng)內(nèi)容引導(dǎo)語(yǔ)句ENTITY實(shí)體名

IS類(lèi)

表GENERIC(……);端

表PORT(……);結(jié)束語(yǔ)句END實(shí)體名;

是一種端口界面常數(shù),常以一種說(shuō)明形式放在實(shí)體或結(jié)構(gòu)體的說(shuō)明部分,類(lèi)屬值可以由設(shè)計(jì)實(shí)體外部賦值,通過(guò)類(lèi)屬參數(shù)的重新設(shè)定可以改變一個(gè)設(shè)計(jì)實(shí)體的內(nèi)部電路和規(guī)模。類(lèi)屬參數(shù)以關(guān)鍵詞GENERIC引導(dǎo)的類(lèi)屬表給出,表中提供時(shí)間參數(shù)或總線(xiàn)寬度等信息。類(lèi)屬說(shuō)明的書(shū)寫(xiě)格式是:

GENERIC(常數(shù)名:數(shù)據(jù)類(lèi)型:設(shè)定值

常數(shù)名:數(shù)據(jù)類(lèi)型:設(shè)定值);[例5-2]ENTITYbodyISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);b:OUTSTD_LOGIC);ENDbody;

類(lèi)屬參數(shù)端口模式

INOUTINOUTBUFFER

數(shù)據(jù)類(lèi)型表5.1.3幾種基本的數(shù)據(jù)類(lèi)型類(lèi)型取值范圍特點(diǎn)位類(lèi)型BIT0和1由IEEE中的標(biāo)準(zhǔn)程序包STANDARD定義,能表示二值邏輯信號(hào)位矢量BIT_VECTORBIT的數(shù)組由IEEE標(biāo)準(zhǔn)程序包STANDARD定義,能表示多位二值邏輯信號(hào)邏輯位STD_LOGIC具有9個(gè)不同狀態(tài);未初始化狀態(tài)記為'U',強(qiáng)未知值記為'X',強(qiáng)邏輯0記為'0',強(qiáng)邏輯1記為'1',高阻態(tài)'Z',弱不定值'W'弱邏輯0記為'L',弱邏輯1記為'H',不定狀態(tài)記為'-'由STD_LOGIC_1164程序包定義,能表示二值或9值邏輯,在數(shù)字電路中常出現(xiàn)的只有‘0’,‘1’,‘Z’和‘-’四種表5.1.3幾種基本的數(shù)據(jù)類(lèi)型類(lèi)型取值范圍特點(diǎn)邏輯位矢量STD_LOGIC_VECTOR是STD_LOGIC的數(shù)組由STD_LOGIC_1164程序包定義,能表示多位STD_LOGIC信號(hào),如總線(xiàn)信號(hào)整數(shù)類(lèi)型INTEGER正整數(shù),負(fù)整數(shù)和零,POSITIVE(正整數(shù))是其中的一個(gè)子集;NATURAL(自然數(shù))也是一個(gè)子集,含正整數(shù)和0整數(shù)的書(shū)寫(xiě)不加引號(hào),而位和邏輯位要加單引號(hào)。數(shù)組要加雙引號(hào);整數(shù)的取值范圍是32位有符號(hào)數(shù),即±2147893647布爾類(lèi)型BOOLEANFALSE和TRUE用于邏輯操作或條件判斷,在VHDL仿真器中FALSE和TRUE也用0和1表示,但不是數(shù)值

a:INBIT;b:OUTSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALC:STD_LOGIC_VECTOR(1TO4);SIGNALd:BIT_VECTOR(3DOWNTO0);三、結(jié)構(gòu)體(ARCHITECTURE)說(shuō)明1、結(jié)構(gòu)體的功能與格式結(jié)構(gòu)體承擔(dān)的具體任務(wù)是:定義結(jié)構(gòu)體中的各項(xiàng)內(nèi)部使用元素,如數(shù)據(jù)類(lèi)型(TYPE)、常數(shù)(CONSTANT)、信號(hào)(SIGNAL)、元件(COMPONENT)、過(guò)程(POCEDURE)等;通過(guò)VHDL語(yǔ)句描述實(shí)體所要求的具體行為和邏輯功能;描述各元件之間的連接。結(jié)構(gòu)體的語(yǔ)句書(shū)寫(xiě)格式如下:Architectrue結(jié)構(gòu)體名OF實(shí)體名IS定義語(yǔ)句; --并非一定有,視具體情況而定BEGIN功能描述語(yǔ)句;

END結(jié)構(gòu)體名;

描述方式定義特點(diǎn)行為描述表示輸入與輸出信號(hào)之間的轉(zhuǎn)換行為,不含電路結(jié)構(gòu)方面的信息,只強(qiáng)調(diào)電路的行為和功能。·行為描述主要是對(duì)設(shè)計(jì)對(duì)象進(jìn)行數(shù)學(xué)建模,描述程序大量采用算術(shù)運(yùn)算、關(guān)系運(yùn)算、慣性延時(shí)、傳輸延時(shí)等語(yǔ)句·結(jié)構(gòu)體中的過(guò)程語(yǔ)句屬于典型的行為描述·VHDL語(yǔ)言具有較強(qiáng)的行為仿真和綜合能力,是EDA技術(shù)發(fā)展的基礎(chǔ)數(shù)據(jù)流描述以并行賦值語(yǔ)句為基礎(chǔ),當(dāng)語(yǔ)句中的任一輸入信號(hào)值發(fā)生變化時(shí),激活賦值語(yǔ)句,使信息從所描述的結(jié)構(gòu)中“流出”。這種描述方式稱(chēng)為數(shù)據(jù)流方式,又稱(chēng)為寄存器轉(zhuǎn)換層次描述(RTL)·以規(guī)定設(shè)計(jì)中的各種寄存器形式為特征,并在各寄存器之間插入組合邏輯,能描述組合邏輯和時(shí)序邏輯·既可以用功能描述的RTL方式,也可用與硬件一一對(duì)應(yīng)的方式·基于并行賦值語(yǔ)句實(shí)現(xiàn)結(jié)構(gòu)描述調(diào)用低層設(shè)計(jì)模塊或門(mén)級(jí)電路,過(guò)端口連接實(shí)現(xiàn)設(shè)計(jì)要求。類(lèi)似于實(shí)際的硬件電路連接·主要應(yīng)用VHDL中的例化語(yǔ)句和生成語(yǔ)句·完成各種簡(jiǎn)單電路到復(fù)雜電路的演變2、結(jié)構(gòu)體的三種描述方式

[例5-3]用行為描述方式設(shè)計(jì)的全加器LIBRARYIEEE; --庫(kù)說(shuō)明

USEIEEE.STD_LOGIC_1164.ALL; ENTITYonebitadderIS --實(shí)體說(shuō)明PORT(x,y,cin:INBIT; --端口信號(hào)定義Sum,count:OUTBIT);ENDonebitadder;ARCHITECTUREbehaviorOFonebitadderIS --結(jié)構(gòu)說(shuō)明BEGINPROCESS(x,y,cin)BEGINsum<=xXORyXORcin;count<=(xANDy)OR((xXORy)ANDcin);ENDPROCESS;ENDbehavior;[[例5-4]用RTL描述方式設(shè)計(jì)的2選1數(shù)據(jù)選擇器……ARCHITECTURErtlOFmux2ISBEGINy<=input(a)WHENsel='1'ELSEInput(b);ENDrtl[例5-5]用結(jié)構(gòu)描述方式設(shè)計(jì)的R-S觸發(fā)器ENTITYrsffISPORT(set,reset:INBIT)q,qbar:INOUTBIT);ENDrsff;ARCHITECTUREnetlistOFrsffISCOMPONENTnand2 --元件說(shuō)明PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENF;BEGINU1:nand2PORTMAP(set,qbar,q);--用位置關(guān)聯(lián)實(shí)現(xiàn)元件端口名和系統(tǒng)端口的連接

U2:nand2PORTMAP(q,reset,qbar);ENDentlist;表5.1.5結(jié)構(gòu)體中的三種子結(jié)構(gòu)方式比較子結(jié)構(gòu)名稱(chēng)語(yǔ)句格式特點(diǎn)塊語(yǔ)句結(jié)構(gòu)塊結(jié)構(gòu)名:BLOCK

端口說(shuō)明

類(lèi)屬說(shuō)明

BEGIN

并行語(yǔ)句

ENDBLOCK塊結(jié)構(gòu)名;·將一個(gè)結(jié)構(gòu)體劃分為幾個(gè)模塊,恰當(dāng)?shù)姆謮K有利于程序的移植、排措、仿真及程序閱讀·每個(gè)塊的端口和類(lèi)屬參數(shù)說(shuō)明只對(duì)塊結(jié)構(gòu)內(nèi)部有效·塊結(jié)構(gòu)中的語(yǔ)句是并行的,與書(shū)寫(xiě)順序無(wú)關(guān)進(jìn)程語(yǔ)句結(jié)構(gòu)進(jìn)程名:PROCESS(每感信號(hào)表)IS進(jìn)程說(shuō)明BEGIN順序描述語(yǔ)句ENDPROCESS進(jìn)程名;·敏感信號(hào)表通常要求將進(jìn)程中所有輸入信號(hào)都放在敏感信號(hào)表中·敏感信號(hào)中的某一個(gè)發(fā)生變化即啟動(dòng)執(zhí)行一遍,然后進(jìn)入等待狀態(tài),下一次敏感信號(hào)變化再次啟動(dòng)·一個(gè)結(jié)構(gòu)中可包含多個(gè)進(jìn)程,各進(jìn)程之間是并行的,而各進(jìn)程中的語(yǔ)句是順序語(yǔ)句;·進(jìn)程說(shuō)明部分說(shuō)明進(jìn)程所需的局部環(huán)境,進(jìn)程名可要可不要。子程序語(yǔ)句結(jié)構(gòu)

分過(guò)程語(yǔ)句和函數(shù)語(yǔ)句PROCEDURE過(guò)程名(參數(shù)1;參數(shù)2;…)IS定義語(yǔ)句;--定義變量等BEGIN順序處理語(yǔ)句;--過(guò)程語(yǔ)句END過(guò)程名;FUNCTION函數(shù)名(參數(shù)1;參數(shù)2;……)RETURN數(shù)據(jù)類(lèi)型IS定義語(yǔ)句;BEGIN順序處理語(yǔ)句;RETURN返回變量名;END函數(shù)名;·能被主程序反復(fù)調(diào)用并能將處理結(jié)果傳送到主程序的程序模塊,子程序分為過(guò)程語(yǔ)句(Procedure)和函數(shù)(Function)兩種·過(guò)程語(yǔ)句中的參數(shù)包括輸入和輸出信號(hào)。每次調(diào)用前,應(yīng)將初始值傳遞到輸入?yún)?shù)中,執(zhí)行結(jié)束后應(yīng)將輸出輸入?yún)?shù)傳送到調(diào)用者的信號(hào)或變量中·與進(jìn)程語(yǔ)句相同的是,子程序模塊也是用順序語(yǔ)句完成定義和算法;但程序不能象進(jìn)程那樣,從本結(jié)構(gòu)體的并行語(yǔ)句或進(jìn)程語(yǔ)句中直接讀取信號(hào)值以及向信號(hào)賦值·子程序中的參數(shù)說(shuō)明是局部的,只能用于子程序體內(nèi)[例5-6]使用塊語(yǔ)句結(jié)構(gòu)的程序?qū)嵗?位二進(jìn)制計(jì)數(shù)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcounter2ISPORT(clk:INSTD_LOGIC;q1,q2:OUTSTD-LOGIC);ENDcounter2;ARCHITECTUREarch_counter2OFcounter2ISSIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);BEGINCounter:BLOCK;BEGINProcess(clk)beginIF(clk'eventANDclk='1')THENIFcount='11'THENcount<="00";ELSEcount<=count+1;

ENDIF;ENDIF;q1<=count(1);

q0<=count(0);Endprocess;ENDBLOCKcounter;ENDarch_counter2;上例是一個(gè)2位二進(jìn)制計(jì)數(shù)器的VHDL描述,結(jié)構(gòu)體部分使用了塊語(yǔ)句結(jié)構(gòu)。其中,用了兩個(gè)IF語(yǔ)句,即當(dāng)時(shí)鐘CLK的上升沿到來(lái)時(shí),若2位計(jì)數(shù)器的輸出q1q0已計(jì)數(shù)到11時(shí)則將其置為0;否則,將計(jì)數(shù)器作加1運(yùn)算并賦值給q1q0。塊語(yǔ)句只是表示程序的結(jié)構(gòu),并不執(zhí)行.為什么不直接對(duì)q1q0作計(jì)數(shù)操作而另設(shè)信號(hào)count,然后再將count轉(zhuǎn)移到q1q0中呢?

該程序ENTITY前面的3條程序說(shuō)明什么呢?

AB01010101取整數(shù)數(shù)據(jù)類(lèi)型,為什么?整數(shù)取值范圍端口信號(hào)模式取BUFFER,為什么?注意整數(shù)和位的不同表達(dá)方式![例5-7]用進(jìn)程語(yǔ)句結(jié)構(gòu)的程序?qū)嵗?位二進(jìn)制計(jì)數(shù)器[例5-8]“過(guò)程”語(yǔ)句的程序?qū)嵗?位二進(jìn)制譯碼器PROCEDUREdecoder(code:INSTD_LOGIC_VECTOR(1TO0);decoder_out:OUTSTD_LOGIC_vecTOR(3DOWNTO0)ISVARIABLEdecod:OUTSTD_LOGIC_VECTOR(3DOWNTO0);BEGINCASEcodeISWHEN"00"=>decod<=B"0001";WHEN"01"=>decod<=B"0010";WHEN"10"=>decod<=B"0100";WHEN"11"=>decod<=B"1000";WHENOTHERS=>NULL;ENDCASE;decoder_out<=decod;ENDdecoder;表2位二進(jìn)制譯碼器真值表codedecoder_out000001010010100100111000[例5-9]函數(shù)定義和調(diào)用舉例LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYfuncIS PORT(a:INSTD_LOGIC_VECTOR(0to2);m:OUTSTD_LOGIC_VECTOR(0to2));ENDENTITYfunc;ARCHITECTUREdemoOFfuncISFUNCTIONsam(x,y,z:STD_LOGIC)RETURNSTD_LOGICISBEGINRETURN(xANDy)ORz;Endsam;BEGINPROCESS(a)BEGINm(0)<=sam(a(0),a(1),a(2));m(1)<=sam(a(2),a(0),a(1));m(2)<=sam(a(1),a(2),a(0));ENDPROCESS;ENDARCHITECTUREdemo;5.1.2寄存器描述及其VHDL語(yǔ)言現(xiàn)象D觸發(fā)器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--類(lèi)似于在芯片內(nèi)部定義一個(gè)數(shù)據(jù)的暫存節(jié)點(diǎn)

BEGIN

D觸發(fā)器BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;--將內(nèi)部的暫存數(shù)據(jù)向端口輸出

EndPROCESS;ENDbhv;比較用5種不同語(yǔ)句的D觸發(fā)器VHDL程序Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginifclk='1'ANDclk’last_value='0'thenq1<=d;endif;q<=q1;endprocess;endtest1_body;LIBRARYIEEE;USEIEEE.std_logic_1164.all;Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocess(clk,d)beginifrising_edge(clk)thenq<=d;endif;endprocess;endtest1_body;TheyareallthesameDFFEntitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginif(clk=‘1’)thenq1<=d;endif;q<=q1;endprocess;endbody;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk,d)beginif(clk=‘0’)thenq1<=d;endif;q<=q1;endprocess;endbody;

5.1.3VHDL中的程序庫(kù),包和配置一、VHDL庫(kù)庫(kù)---用來(lái)存放預(yù)先已設(shè)計(jì)好的程序包、數(shù)據(jù)集合體、元件的倉(cāng)庫(kù)庫(kù)中存放的信息供用戶(hù)進(jìn)行VHDL設(shè)計(jì)時(shí)調(diào)用,如果在完成一項(xiàng)VHDL設(shè)計(jì)需要用到庫(kù)中的某一個(gè)程序包時(shí),在設(shè)計(jì)實(shí)體前使用USE語(yǔ)句打開(kāi)這一程序包。而綜合過(guò)程中,綜合器檢測(cè)到VHDL源程序中的庫(kù)文件時(shí)則將源文件讀入.1、常用的庫(kù)資源一類(lèi)是資源庫(kù),庫(kù)中存放常規(guī)元件、標(biāo)準(zhǔn)模塊、預(yù)定義數(shù)據(jù)類(lèi)型等,有些是被IEEE確定為標(biāo)準(zhǔn)的,如IEEE庫(kù)中的STD_LOGIC_1164程序包。一類(lèi)是設(shè)計(jì)庫(kù),例如存放用戶(hù)設(shè)計(jì)和定義的某些元件和程序包的Work庫(kù)。程序庫(kù)由若干程序包構(gòu)成,程序包又包含若干子程序,子程又涉及若干基本設(shè)計(jì)單元。VHDL設(shè)計(jì)中常用的有IEEE庫(kù)、STD庫(kù)、Work和ASIC庫(kù)表5.1.6VHDL中常用庫(kù)的特點(diǎn)庫(kù)的名稱(chēng)包含的程序包特點(diǎn)IEEE庫(kù)

STD_LOGIC_1164·該程序包是IEEE標(biāo)準(zhǔn)的最常用的程序包。

STD_LOGIC_ARITH·該程包擴(kuò)展了UNSIGNED、SIGNED、SMALL-INT三種數(shù)據(jù)類(lèi)型,以及相關(guān)類(lèi)型的算術(shù)運(yùn)算符,比較操作函數(shù),還有數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)。STD_LOGIC_UNSIGNEDSTD_LOGIC_SIGNED

·此兩種程序包重載了用于INTEGER、STD_LOGIC和STD_LOGIC_VECTOR三種數(shù)據(jù)類(lèi)型進(jìn)行混合運(yùn)算的運(yùn)算符,還定義了STD_LOGIC_VECTOR類(lèi)型到整數(shù)型的轉(zhuǎn)換函數(shù);·此兩程序包的區(qū)別是,前者定義的運(yùn)算符不考慮符號(hào)而后者是有符號(hào)運(yùn)算。STD庫(kù)

STANDARD(標(biāo)準(zhǔn)程序包)TEXTIO(文件輸入輸出程序包)

·符合VHDL語(yǔ)言標(biāo)準(zhǔn)的庫(kù),定義了一些基本的數(shù)據(jù)類(lèi)型、子類(lèi)型和函數(shù),在VHDL環(huán)境中可隨時(shí)調(diào)用其中的內(nèi)容?!EXTIO程序包僅供仿真用,使用時(shí)需加USESTD_TEXTIO.ALL語(yǔ)句·在VHDL的編譯和綜合過(guò)程中,每項(xiàng)設(shè)計(jì)都會(huì)自動(dòng)將STD庫(kù)包含進(jìn)去。ASIC庫(kù)

面向ASIC碼的資源庫(kù),由VHDL工具廠(chǎng)商提供,是一種面向門(mén)級(jí)仿真的邏輯門(mén)庫(kù)

·每個(gè)邏輯門(mén)對(duì)應(yīng)一個(gè)設(shè)計(jì)實(shí)體;·使用時(shí)有必要進(jìn)行說(shuō)明。WORK庫(kù)

用戶(hù)自編VHDL程序的工作庫(kù)·存放用戶(hù)設(shè)計(jì)和定義的設(shè)計(jì)單元和程序包;·使用時(shí)不必作說(shuō)明

二、包集合

打包后的程序?qū)HDL設(shè)計(jì)中常用的一些諸如信號(hào)定義、常數(shù)定義、數(shù)據(jù)類(lèi)型、元件、函數(shù)和過(guò)程定義等內(nèi)容集合在一起形成一個(gè)程序包,即所謂“打包”,供設(shè)計(jì)者在使用中調(diào)用

PACKAGE包集合名

IS說(shuō)明語(yǔ)句;

說(shuō)明語(yǔ)句

ENDBODY;

END包集合名;

包首包體PACKAGEBODY包集合名

IS

PACKAGEoneIS --程序包首,名字為

oneSUBTYPEsegmentsISBIT_VECTOR(0TO6); --包體開(kāi)始定義子類(lèi)型segmentsTYPEbcdISintegerRANGE0TO9; --定義數(shù)據(jù)bcd的范圍是0~9ENDone; --程序包結(jié)束USEWORK.one.ALL; --WORK庫(kù)默認(rèn)是打開(kāi)的,這里只指明所用的包ENTITYdecoderISPORT(input:inbcd;drive:outsegments);ENDdecoder;ARCHITECTUREsimpleOFdecoderIS[

例5-10]程序包定義和應(yīng)用舉例

BEGINWITHinputSELECT --用選擇信號(hào)賦值語(yǔ)句實(shí)現(xiàn)譯碼

drive<=B"1111110"WHEN0;B"0110000"WHEN1;B"1101101"WHEN2;B"1111001"WHEN3;B"0110011"WHEN4;B"1011011"WHEN5;

B"1011111"WHEN6;B"1110000"WHEN7;B"1111111"WHEN8;B"1111011"WHEN9;B"0000000"WHENOTHERS;ENDsimple;

三、配置(configuration)

兩種情況:一種是為一個(gè)具有兩個(gè)或兩個(gè)以上結(jié)構(gòu)體的設(shè)計(jì)實(shí)體指定一個(gè)結(jié)構(gòu)體。因?yàn)橐粋€(gè)設(shè)計(jì)實(shí)體中,應(yīng)該是一個(gè)實(shí)體對(duì)應(yīng)一個(gè)結(jié)構(gòu)體,但有時(shí)為了比較各種算法編寫(xiě)的不同結(jié)構(gòu)體的性能,在一個(gè)實(shí)體后面帶有幾個(gè)結(jié)構(gòu)體,這時(shí)可以用配置語(yǔ)句指定一個(gè)結(jié)構(gòu)體。另一種情況是為例化語(yǔ)句的各種元件實(shí)體配置結(jié)構(gòu)體,例如一個(gè)與非門(mén)的設(shè)計(jì)中,一個(gè)實(shí)體對(duì)應(yīng)著兩個(gè)以不同邏輯描述實(shí)現(xiàn)的結(jié)構(gòu)體,通過(guò)配置語(yǔ)句指定其中的一個(gè)作為仿真應(yīng)用的結(jié)構(gòu)體。

CONFIGURATION配置名OF實(shí)體名IS

配置說(shuō)明

END配置名;

配置語(yǔ)句的格式是:

[例5-11]配置語(yǔ)句應(yīng)用舉例ENTITYnandISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYnand;ARCHITECTUREoneOFnandIS --one是實(shí)體nand的一個(gè)結(jié)構(gòu)體

BEGIN

ENDARCHITECTUREone;

ARCHITECTUREtwoOFnandIS__two是實(shí)體nand的另一個(gè)結(jié)構(gòu)體

BEGINc<='1'WHEN(a='0')AND(b='0')ELSE'1'WHEN(a='0')AND(b='1')ELSE'1'WHEN(a='1')AND(b='0')ELSE'0'WHEN(a='1')AND(b='1')ELSE'0';ENDARCHITECTUREtwo;CONFIGURATIONsecondOFnandIS --用配置語(yǔ)句指定two為nand實(shí)際結(jié)構(gòu)體FORtwoENDFOR;ENDsecond;

c<=NOT(aANDb);CONFIGURATIONfirstOFnandIS--用配置語(yǔ)句指定one為nand的實(shí)際結(jié)構(gòu)體

FORoneENDFOR;ENDfirst;5.2VHDL語(yǔ)言的基本要素

5.2.1VHDL的字符規(guī)則類(lèi)型

書(shū)寫(xiě)規(guī)則

示例

數(shù)字

·數(shù)字包括十進(jìn)制整數(shù),實(shí)數(shù)和用數(shù)制基數(shù)表示的數(shù);·十進(jìn)制整數(shù)直接書(shū)寫(xiě),整數(shù)后面的零寫(xiě)成指數(shù)形式,數(shù)字之間可加間隔符以提高可讀性;

·實(shí)數(shù)也是十進(jìn)制數(shù),但帶小數(shù)點(diǎn);

0,8,18;123E2即12300;12_345_67即1234567;1.0,1.23,12_34.56_78即1234.5678;12.98E-2即0.1298;

·用數(shù)制基數(shù)表示的數(shù)由五部分組成,即用十進(jìn)制數(shù)表示的數(shù)制基數(shù)、分隔符#、數(shù)、指數(shù)隔離符#、指數(shù)部分(是0則省略);

254表示成16進(jìn)制數(shù)是16#FE#;表示成二進(jìn)制數(shù)是2#111_1110#;表示成八進(jìn)制數(shù)是8#376#;表示成十進(jìn)制數(shù)是10#254#;

字符串

·字符是能用ASICII碼表示的數(shù)字、字母或符號(hào),加單引號(hào);

如'10','+','*','a','$'等;

·字符串是字符的一維數(shù)組,加雙引號(hào)。字符串分為數(shù)字字符串和文字字符串,數(shù)字字符串中要加表示計(jì)數(shù)體制的基數(shù),“B”為二進(jìn)制,“O”為八進(jìn)制、“X”為16進(jìn)制;

如“ERROR”;B“1_11_001”是5位的二進(jìn)制數(shù)組;X“ADE”是16進(jìn)制數(shù)組,位長(zhǎng)3位;O“567”是8進(jìn)制數(shù)組,位長(zhǎng)3位;標(biāo)識(shí)符·表示常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字,有效字符包括全部大小寫(xiě)英文字母且不區(qū)分大小寫(xiě),數(shù)字0~9及單一下劃線(xiàn),且下劃線(xiàn)只能放在字母或數(shù)字之間,使用標(biāo)識(shí)符還有下列規(guī)則:·應(yīng)以英文字母開(kāi)關(guān);·允許包含圖形符號(hào)如回車(chē)符、換行符、空格符;·不能使用VHDL中的關(guān)鍵字;

·標(biāo)識(shí)符的下標(biāo)加括號(hào)表示;

State0;date_1;SIGNAL;b(3);5.2.2數(shù)據(jù)類(lèi)型1、預(yù)定義數(shù)據(jù)類(lèi)型

類(lèi)型

點(diǎn)

整數(shù)類(lèi)Integer·包括正整數(shù)、負(fù)整數(shù)和0,其中正整數(shù)(positive)和0又叫自然數(shù)(Natural);·能使用預(yù)定義的操作符,如“+”、“-”、“*”、“/”等進(jìn)行算術(shù)運(yùn)算,但不能用于邏輯運(yùn)算;取值范圍是-(231-1)~+(231-1),并要求用Range子句規(guī)定限定范圍;

實(shí)數(shù)類(lèi)Real

·包括整數(shù)、小數(shù)和0,取值范圍為-1.0E38~+1.0E38,VHDL的仿真器能支持實(shí)數(shù)類(lèi)型,但綜合器不支持;

字符類(lèi)character·用字母和符號(hào)表示的數(shù)據(jù)類(lèi)型,書(shū)寫(xiě)時(shí)加單引號(hào),一般不分大小寫(xiě),但加引號(hào)后的大小寫(xiě)有區(qū)別如'A'不同于'a';·將多個(gè)字符組合則為字符串,書(shū)寫(xiě)時(shí)加雙引號(hào),加引號(hào)后的大小寫(xiě)有區(qū)別;布爾類(lèi)Boolean·布爾類(lèi)數(shù)據(jù)有False和Ture兩種狀態(tài),在VHDL綜合中則變?yōu)?和0;

·不屬于數(shù)值,不能用于運(yùn)算,只能通過(guò)關(guān)系運(yùn)算符獲得;

1、預(yù)定義數(shù)據(jù)類(lèi)型位類(lèi)型Bit·表示取值為1和0的數(shù)據(jù)對(duì)象,如變量、信號(hào)等

·位類(lèi)型數(shù)據(jù)可參予邏輯運(yùn)算;

位矢量Bit_Vector·位類(lèi)型數(shù)據(jù)的一維數(shù)組,使用時(shí)應(yīng)注明位寬;如SIGNALa:BIT_VECTOR(7TO0);

時(shí)間類(lèi)Time·表示時(shí)間的數(shù)據(jù)類(lèi)型,常用于系統(tǒng)仿真;

·書(shū)寫(xiě)格式中應(yīng)注明數(shù)值和單位,如15ms,書(shū)寫(xiě)時(shí)數(shù)值與單位間空一格,小于秒的時(shí)間單位依次為毫秒(ms)、微秒(us)、納秒(ns)、皮秒(ps)、飛秒(fs)

邏輯位STD_LOGIC·位數(shù)據(jù)類(lèi)型BIT的擴(kuò)展,共定義了9種邏輯狀態(tài),編程時(shí)應(yīng)注意除0和1外的其他七種邏輯值對(duì)程序功能的影響。

·由IEEE標(biāo)準(zhǔn)的STD_LOGIC_1164程序包定義,應(yīng)用時(shí)必須用USE語(yǔ)句打開(kāi)此程序包。

邏輯位矢量

·標(biāo)準(zhǔn)邏輯位矢量記為STD_LOGIC_VECTOR,是標(biāo)準(zhǔn)邏輯位的一維數(shù)組,使用時(shí)應(yīng)注意位寬。

2.自定義數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型

點(diǎn)

定義格式

枚舉類(lèi)型(Enumerated)·用文字、符號(hào)表示的一組實(shí)際的二進(jìn)制數(shù),如定義數(shù)據(jù)名為ST的數(shù)據(jù)是ST0,ST1,ST2,ST3,其編碼默認(rèn)為00,01,10,11。TYPE類(lèi)型名

IS(元素…);例如TYPEstIS(st0,st1,st2,st3);整數(shù)與實(shí)數(shù)型(Integer、Real)·與普通代數(shù)的整數(shù)、實(shí)數(shù)相同,預(yù)定義程序包中也有這兩種類(lèi)型,根據(jù)需要重新定義并限定其取值范圍,以便能被綜合器接受以提高PLD的利用率。TYPE類(lèi)型名IS類(lèi)型定義范圍;例如TYPEdigitISINTEGERRANGE0TO9;數(shù)組型(Array)·將相同數(shù)據(jù)類(lèi)型的元素集合為一維數(shù)組或多維數(shù)組,但綜合器只支持一維數(shù)組。若定義語(yǔ)句的范圍一項(xiàng)缺省,則為整數(shù)類(lèi)型。TYPE類(lèi)型名ISARRY范圍OF原類(lèi)型名;例如TYPEwordISARRY(1TO8)OFSTD_LOGIC;即word有8個(gè)元素分別為word(1)~word(8)2.自定義數(shù)據(jù)類(lèi)型記錄型(Recode)·記錄型數(shù)據(jù)是一個(gè)數(shù)組,這個(gè)數(shù)組中的元素由不同的數(shù)據(jù)類(lèi)型元素構(gòu)成?!び涗浶蛿?shù)據(jù)用于總線(xiàn),通訊協(xié)議等。TYPE類(lèi)型名ISRECODE元素名:數(shù)據(jù)類(lèi)型名…ENDRECODE;例如TYPEbankISRECODEaddr:STD_LOGIC_VECTOR(7DOWN0);ro:INTEGER;ENDRECODE;時(shí)間類(lèi)型(Time)·表示時(shí)間的數(shù)據(jù)類(lèi)型,定義語(yǔ)句中指明基本時(shí)間單位為“fs”,以及由“fs”向上的各單元之間的換算關(guān)系。·除時(shí)間外,其他物理量如電壓電容、電阻等也可以根據(jù)定義時(shí)間的格式進(jìn)行定義。TYPE數(shù)據(jù)類(lèi)型IS范圍;

UNITS基本單位;

單位;

ENDUNITS;例如:

TYPEtimeISRANGE0TO10000;UNITSfs;ps=1000fs;ns=1000ps;us=1000ns;ENDUNITS;

5.2.3VHDL的數(shù)據(jù)對(duì)象VHDL的數(shù)據(jù)對(duì)象分為三類(lèi),常量(constant)、變量(variable)信號(hào)(signal)??傮w來(lái)說(shuō),三者都用于傳遞數(shù)據(jù)或接受數(shù)據(jù)賦值,在最終實(shí)現(xiàn)的硬件電路中,信號(hào)和變量相當(dāng)于連線(xiàn)及連線(xiàn)上數(shù)據(jù)值;常量是一個(gè)固定不變的數(shù)據(jù)值,如VCC、GND等,常量只能取一個(gè)值,信號(hào)和變量卻可以取多個(gè)不同的值。

常量定義的一般表達(dá)格式是:CONSTANT常數(shù)名:數(shù)據(jù)類(lèi)型:=表達(dá)式;例如CONSTANTdata:STD_LOGIC_VECTOR:="0110“上式的意思是data是常數(shù)0110,其數(shù)據(jù)類(lèi)型為標(biāo)準(zhǔn)位矢量型。常量語(yǔ)句定義的適應(yīng)范圍有實(shí)體、結(jié)構(gòu)體、程序包、塊、進(jìn)程和子程序。如果在一個(gè)設(shè)計(jì)實(shí)體中定義,則有效范圍是這個(gè)設(shè)計(jì)實(shí)體的結(jié)構(gòu)體,如果在設(shè)計(jì)實(shí)體的某一部分定義,則有效范圍只是所定義的這部分電路,例如一個(gè)進(jìn)程語(yǔ)句中,則有效范圍只在這個(gè)進(jìn)程中。在VHDL具體設(shè)計(jì)中,變量和信號(hào)有不同的特點(diǎn)、不同的賦值符號(hào),適應(yīng)范圍也有著明顯的區(qū)別。表5.2.4對(duì)信號(hào)和變量進(jìn)行了比較。數(shù)據(jù)對(duì)象DATAOBJECTS6.3.1常數(shù)(CONSTANT)6.3.2變量(VARIABLE)6.3.3信號(hào)(SIGNAL)1.常數(shù)(CONSTANT)2.變量(VARIABLE)3.信號(hào)(SIGNAL)常數(shù)定義的一般表述:CONSTANT常數(shù)名:數(shù)據(jù)類(lèi)型:=表達(dá)式;定義變量的一般表述:VARIABLE變量名:數(shù)據(jù)類(lèi)型:=初始值;

定義格式:SIGNAL信號(hào)名:數(shù)據(jù)類(lèi)型<=初始值;表信號(hào)和變量賦值語(yǔ)句比較比較內(nèi)容

信號(hào)(signal)

變量(variable)

定義及賦值語(yǔ)句格式SIGNAL信號(hào)名:數(shù)據(jù)類(lèi)型<=--賦值符例:SIGNALa,b,y:INTEGER;y<=a*b;VARIABLE變量名:數(shù)據(jù)類(lèi)型:=--賦值符VARIABLEa,b:STD_LOGIC;a:=b;特點(diǎn)

·上式將數(shù)據(jù)a和b的乘積值傳遞給數(shù)據(jù)對(duì)象y,VHDL設(shè)計(jì)實(shí)體內(nèi)的數(shù)據(jù)傳遞和端口數(shù)據(jù)的讀寫(xiě)均由賦值語(yǔ)句實(shí)現(xiàn);信號(hào)類(lèi)似于連接線(xiàn),實(shí)現(xiàn)各并行模塊間的信息交流?!ば盘?hào)具有全局特征,若在某一設(shè)計(jì)實(shí)體中定義,則該設(shè)計(jì)實(shí)體的任何結(jié)構(gòu)體均能獲得該信號(hào)的賦值,若在某一結(jié)構(gòu)體中定義,賦值能在本結(jié)構(gòu)中的各模塊之間例如各進(jìn)程之間傳遞信息?!ば盘?hào)賦值具有延時(shí)性,即信號(hào)賦值不是立即發(fā)生,而是發(fā)生在一個(gè)進(jìn)程的結(jié)束;·信號(hào)用作電路的數(shù)據(jù)連接通道,綜合后與硬件結(jié)構(gòu)對(duì)應(yīng)。信號(hào)和端口概念是一致的,但無(wú)方向說(shuō)明。·上式將數(shù)據(jù)b的值賦給變量對(duì)象a,變量主要用在進(jìn)程中作臨時(shí)數(shù)據(jù)存儲(chǔ)單元?!ぷ兞烤哂芯植刻卣?,如果在某一進(jìn)程或子程序中定義,則不能在此進(jìn)程或子程序以外獲得此變量值。而且變量的定義僅限于進(jìn)程或子程序中?!ぷ兞康馁x值具有即時(shí)性,即賦值后立即產(chǎn)生?!ぷ兞吭诰C合后不對(duì)應(yīng)硬件結(jié)構(gòu),只作為臨時(shí)的、過(guò)渡的、局部的數(shù)據(jù)存儲(chǔ)單元。適應(yīng)范圍·實(shí)體、結(jié)構(gòu)體和程序包中均可定義·在進(jìn)程或子程序中定義[例5-12]使用了變量賦值的VHDL實(shí)例

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff3ISPORT(CLK,d1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFdff3ISBEGINPROCESS(CLK)VARIABLE:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THEN:=d1;ENDIF;Q1<=;ENDPROCESS;Endbhv;

[例5-13]使用了信號(hào)賦值的VHDL實(shí)例LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff3ISPORT(CLK,d1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFdff3ISSIGNAL:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN<=d1;ENDIF;Q1<=;ENDPROCESS;ENDbhv;

5.3VHDL的操作符

表5.3.1VHDL中使用的主要操作符優(yōu)先級(jí)順序

運(yùn)算作符類(lèi)型操作符

功能

操作數(shù)類(lèi)型

高邏輯運(yùn)算符AND邏輯與

BIT、BOOLEAN、STD_LOGICOR邏輯或BIT、BOOLEAN、STD_LOGICNAND邏輯與非BIT、BOOLEAN、STD_LOGICNOR邏輯或非BIT、BOOLEAN、STD_LOGICXOR邏輯異或BIT、BOOLEAN、STD_LOGICNOT*取反BIT、BOOLEAN、STD_LOGIC關(guān)系運(yùn)算符

=等號(hào)

任何類(lèi)型/=不等于任何類(lèi)型<小于枚舉、整數(shù)型及對(duì)應(yīng)的一維數(shù)組>大于枚舉、整數(shù)型及對(duì)應(yīng)的一維數(shù)組<=小于等于枚舉、整數(shù)型及對(duì)應(yīng)的一維數(shù)組>=大于等于枚舉、整數(shù)型及對(duì)應(yīng)的一維數(shù)組算術(shù)運(yùn)算符

+加枚舉、整數(shù)型及對(duì)應(yīng)的一維數(shù)組-減枚舉、整數(shù)型及對(duì)應(yīng)的一維數(shù)組&并置一維數(shù)組正、負(fù)運(yùn)算符

+正整數(shù)-負(fù)整數(shù)算術(shù)運(yùn)算符

*乘整數(shù)、實(shí)數(shù)

/除整數(shù)、實(shí)數(shù)

MOD求模整數(shù)REM取余整數(shù)**指數(shù)整數(shù)ABS取絕對(duì)值整數(shù)

5.3.1邏輯操作符(1)邏輯操作符所要求的數(shù)據(jù)類(lèi)型是BIT、BOOLEAN、STD_LOGIC三種以及BIT和STD_LOGIC相應(yīng)的數(shù)組類(lèi)型;對(duì)數(shù)組類(lèi)型操作時(shí)除了操作符兩邊的數(shù)據(jù)類(lèi)型相同外,還應(yīng)保證數(shù)位相等。(2)一個(gè)表達(dá)式中出現(xiàn)兩個(gè)以上的運(yùn)算符號(hào),應(yīng)使用括號(hào)對(duì)運(yùn)算進(jìn)行分組。如果一個(gè)等式中重復(fù)應(yīng)用了AND、OR、XOR三個(gè)算符中的一個(gè)則不要加括號(hào)。例如:y1ANDy2ANDy3;--AND是三種算符之一,不必加括號(hào)(aORb)ANDc;--不是一個(gè)運(yùn)算符重復(fù)應(yīng)用,應(yīng)加括號(hào)

d<=aANDbORc; --用了兩種運(yùn)符未加括號(hào),錯(cuò)誤(3)邏輯運(yùn)算符除NOT外,其余操作符的優(yōu)先級(jí)是各類(lèi)運(yùn)算符中最低的,但NOT與**乘方)、ABS(取絕對(duì)值)一樣,同處于最高優(yōu)先級(jí)。

5.3.2算術(shù)運(yùn)算符1、求和操作符——+(加)、-(減)、&(并置)2、求積運(yùn)算——*(乘)、/(除)、MOD(取模)、REM(取余)

3、混合操作——**(乘方)、ABS(取絕對(duì)值)

4、符號(hào)操作——+(正)、-(負(fù))

[例5-14]并置符應(yīng)用實(shí)例SIGNALf:STD_LOGIC_VECTOR(5DOWNTO0);SIGNALa,b:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALc,d,e:STD_LOGIC;a<=c&d&e; --單個(gè)元素并置為長(zhǎng)度3位的數(shù)組f<=a&b; --數(shù)組與數(shù)組并置成為長(zhǎng)度6位的數(shù)組[例5-15]用加法運(yùn)算實(shí)現(xiàn)位長(zhǎng)4位的加法器LIBRARYIEEE;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadder4BISPORT(cin:INSTD_LOGIC;a;b:INSTD_LOGIC_VECTOR(3DOWNTO0);s:OUTSTD_LOGIC_VECTOR(3DOWNTO0);cout:OUTSTD_LOGIC);ENDadder4B;ARCHITECTUREbehavOFadder4BISSIGNAL:sint:STD_LOGIC_VECTOR(4DOWNTO0);SIGNAL:aa,bb:STD_LOGIC_VECTOR(4DOWNTO0);BEGINaa<='0'&a;bb<='0'&b;--a、b4位數(shù)據(jù)變成aa、bb的5位數(shù)

sint<=aa+bb+cin;s<=sint(3NOWNTO0);cout<=sint(4);ENDbehav;

5.3.3關(guān)系運(yùn)算符1.關(guān)系操作符的作用將同類(lèi)型的數(shù)據(jù)作大小比較或作排序判斷,其結(jié)果以Boolean數(shù)據(jù)類(lèi)型表示。應(yīng)用時(shí),操作符兩邊的數(shù)類(lèi)型應(yīng)相同,但位數(shù)可不同。2·等號(hào)和不等號(hào)的操作數(shù)可為任何數(shù)據(jù)類(lèi)型,例如兩個(gè)數(shù)m1和m2的類(lèi)型相同且數(shù)值大小一樣,則可判斷m1和m2相等的結(jié)果為T(mén)ure,而m1/=m2的結(jié)果為False。3·4種關(guān)系運(yùn)算符<、<=、>、>=為排序符號(hào),允許使用的操作數(shù)類(lèi)型為整數(shù)或整數(shù)的一維數(shù)組。4·排序判斷是將操作數(shù)從左至右逐位比較后得出結(jié)論的,若兩操作數(shù)的位數(shù)不相等可能產(chǎn)生錯(cuò)誤結(jié)論,如“101”和“1001”比較到左起第3位時(shí)會(huì)認(rèn)為“101”>“1001”的錯(cuò)誤結(jié)論,這時(shí)將操作數(shù)定義數(shù)據(jù)類(lèi)型STD_LOGIC_ARITH中的為Unsigned則能得到正確結(jié)論。如:UNSIGNED'"1"<UNSIGNED'"011"的比較結(jié)果為T(mén)RUE。

5.4VHDL的基本語(yǔ)句解析

順序語(yǔ)句(sequentialstatements)特點(diǎn)--語(yǔ)句的執(zhí)行(指仿真)按書(shū)寫(xiě)順序進(jìn)行,應(yīng)用范圍只能是進(jìn)程和子程序。并行語(yǔ)句(concurrentstatements)又稱(chēng)并發(fā)語(yǔ)句并行語(yǔ)句--執(zhí)行是同步進(jìn)行的,與語(yǔ)句書(shū)寫(xiě)順序無(wú)關(guān)。并行語(yǔ)句執(zhí)行中,各語(yǔ)句之間的關(guān)系可能是相互獨(dú)立的,但也可能存在信息交流

5.4.1順序語(yǔ)句(sequentialstatements)1

賦值語(yǔ)句

2

條件語(yǔ)句(IF)3

條件語(yǔ)句(CASE)

5

循環(huán)控制語(yǔ)句(NEXT)

4

循環(huán)語(yǔ)句(LOOP)

6

循環(huán)控制語(yǔ)句(EXIT)7

等待語(yǔ)句(WAIT)

信號(hào)賦值語(yǔ)句變量賦值語(yǔ)句賦值目標(biāo)賦值符號(hào)賦值源·賦值語(yǔ)句的作用將一個(gè)數(shù)值或一個(gè)表達(dá)式的運(yùn)算結(jié)果傳遞到某一數(shù)據(jù)對(duì)象,以實(shí)現(xiàn)設(shè)計(jì)實(shí)體內(nèi)部的數(shù)據(jù)傳送以及端口外部數(shù)據(jù)的讀寫(xiě)。賦值語(yǔ)句包含賦值源、賦值目標(biāo)和賦值符三要素。要求賦值源和賦值目標(biāo)的數(shù)據(jù)類(lèi)型必須相同?!じ鶕?jù)賦值對(duì)象的不同,賦值語(yǔ)句分為:信號(hào)賦值和變量賦值兩種,信號(hào)賦值---具有延時(shí)性、全局性,賦值符用(<=)表示。變量賦值---具有即時(shí)性、局部性,且定義只限于進(jìn)程和子程序中,變量賦值符是(:=)一、賦值語(yǔ)句IF一種順序語(yǔ)句是應(yīng)用很廣的語(yǔ)句,屬于流程控制語(yǔ)句之一,除此之外,流程控制語(yǔ)句還有LOOP、NEXT、EXIT語(yǔ)句。IF條件語(yǔ)句,分為4種語(yǔ)句格式,見(jiàn)表。二、條件語(yǔ)句(IF)表5.4.1條件語(yǔ)句的功能和格式語(yǔ)句格式

功能及特點(diǎn)

IF條件

THEN(1)順序語(yǔ)句ENDIF;

IF語(yǔ)句是根據(jù)滿(mǎn)足條件的情況確定執(zhí)行哪些語(yǔ)句,而條件可以是一個(gè)或多個(gè)。格式(1)是一種不完全條件語(yǔ)句,滿(mǎn)足條件則執(zhí)行順序語(yǔ)句,否則跳過(guò)順序語(yǔ)句直至結(jié)束IF語(yǔ)句的執(zhí)行。

IF條件

THEN

順序語(yǔ)句(2)ELSE

順序語(yǔ)句ENDIF;

具有分支功能的IF語(yǔ)句,若條件成立執(zhí)第一順序語(yǔ)句,不成立執(zhí)行第二順序語(yǔ)句,總要執(zhí)行其中一條后才到結(jié)束。

IF條件1THEN

順序語(yǔ)句1ELSIF條件2THEN(3)順序語(yǔ)句2

…ELSE順序語(yǔ)句nENDIF;

具有多重判斷條件的IF語(yǔ)句,當(dāng)條件1成立時(shí)執(zhí)行順序語(yǔ)句1,只有當(dāng)前面的條件不成立時(shí)才判斷后面的條件以決定是否執(zhí)行下一個(gè)順序語(yǔ)句,依次進(jìn)行,直至執(zhí)行最后一個(gè)順序語(yǔ)句IF條件1THENIF條件2THEN(4)…ENDIF;ENDIF;

多重嵌套的IF語(yǔ)句,能實(shí)現(xiàn)時(shí)序電路,組合電路和混合電路。這時(shí)只有多個(gè)條件同時(shí)滿(mǎn)足才能執(zhí)行其中的順序語(yǔ)句,而結(jié)束語(yǔ)句應(yīng)與條件語(yǔ)句對(duì)應(yīng)。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(9DOWNTO0);output:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDcoder;ARCHITECTUREbehavOFcoderISBEGINPROCESS(din)BEGINIF(din(9)='0')THENoutput<="1001";ELSIF(din(8)='0')THENoutput<="1000";ELSIF(din(7)='0')THENoutput<="0111";ELSIF(din(6)='0')THENoutput<="0110";ELSIF(din(5)='0')THENoutput<="0101";ELSIF(din(4)='0')THENoutput<="0100”;ELSIF(dif(3)=‘0’)THENutput<=“0011”;ELSIF(din(2)=‘0’)THENoutput<=“0010”;ELSIF(din(1)='0')THENoutput<="0001";ELSEoutput<="0000";[例5-16]一位BCD碼編碼器的VHDL描述

表5.4.2一位BCD碼編碼器真值表Din0din1din2din3din4din5din6din7din8din9Output3output2Output1Output0×××××××××0××××××××01×××××××011××××××0111×××××01111××××011111×××0111111××01111111×01111111101111111111001100001110110010101000011001000010000

ENDIF;ENDPROCESS;ENDbehav;作業(yè):試用if語(yǔ)句編寫(xiě)一個(gè)具有優(yōu)先級(jí)的8—3線(xiàn)編碼器,實(shí)現(xiàn)74LS148的功能。

語(yǔ)句格式

語(yǔ)句特點(diǎn)

CASE條件表達(dá)式

ISWHEN條件選擇值=>順序語(yǔ)句;WHEN條件選擇值=>順序語(yǔ)句;……

ENDCASE;

其中,符號(hào)=>沒(méi)有實(shí)際操作意義,相當(dāng)于THEN

CASE語(yǔ)句是根據(jù)條件選擇值與條件表達(dá)式的值相同時(shí),決定執(zhí)行的順序語(yǔ)句中的哪一項(xiàng)。條件表達(dá)式的值為整數(shù)或枚舉型的值以及相應(yīng)的數(shù)組形式?!ASE語(yǔ)句只能放在進(jìn)程語(yǔ)句中應(yīng)用?!ASE語(yǔ)句中的條件語(yǔ)句無(wú)順序之分,是相互獨(dú)立的?!?/p>

CASE語(yǔ)句的每一條件選擇值不能超出條件表達(dá)式的范圍,每個(gè)選擇值只能出現(xiàn)一次,即不能有相同選擇值的條件語(yǔ)句。·若CASE語(yǔ)句中的選擇值不能復(fù)蓋條件表達(dá)式的值,則用“OTHERS”作為最后一個(gè)條件取值?!癘THERS”的選擇值只能出現(xiàn)一次?!っ看螆?zhí)行中必須選中而且只能選中條件語(yǔ)句中的一條。

·CASE語(yǔ)句的執(zhí)行過(guò)程中,各條件句是獨(dú)立的,更接近于并行方式,不象IF語(yǔ)句那樣是將條件按順序逐項(xiàng)比較。綜合后的硬件電路比IF語(yǔ)句所耗的資源要多。

三、條件語(yǔ)句(CASE)表5.4.4Loop語(yǔ)句的特點(diǎn)和語(yǔ)句格式格式一:

標(biāo)號(hào):FOR循環(huán)變量

IN循環(huán)次數(shù)范圍Loop

順序語(yǔ)句

ENDLoop標(biāo)號(hào);格式二:

標(biāo)號(hào):WHILE條件

LOOP

順序語(yǔ)句;

ENDLOOP標(biāo)號(hào);·循環(huán)語(yǔ)句根據(jù)設(shè)定的循環(huán)變量或條件,多次循環(huán)執(zhí)行一組順序語(yǔ)句,語(yǔ)句中的循環(huán)變量屬于一個(gè)臨時(shí)變量,由Loop語(yǔ)句自動(dòng)定義,不能與語(yǔ)句中的其他標(biāo)識(shí)符同名?!?/p>

循環(huán)次數(shù)從初值開(kāi)始,每執(zhí)行一次則增加1,直至達(dá)到循環(huán)次數(shù)范圍指定的最大值?!ぱh(huán)語(yǔ)句有兩種格式,格式二是條件循環(huán)語(yǔ)句,條件成立則循環(huán)執(zhí)行順序語(yǔ)句,不成立則結(jié)束Loop語(yǔ)句。四、循環(huán)語(yǔ)句(LOOP)

循環(huán)語(yǔ)句的功能是:將其所包含的一組順序語(yǔ)句循環(huán)執(zhí)行,執(zhí)行次數(shù)由循環(huán)參數(shù)決定。[例5-18]用VHDL描述的8位奇偶校驗(yàn)電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYp_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDp_check;

ARCHITECTUREoptOFp_checkISSIGNALtmp:STD_LOGIC;BEGINPROCESS(a)Variabletemp:std_logic;BEGINtemp:='0';FORnIN0TO7LOOP --循環(huán)語(yǔ)句,循環(huán)變量為n,次數(shù)是0~7,此循環(huán)語(yǔ)句作為進(jìn)程語(yǔ)句中的順序語(yǔ)句使用

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論