VHDL程序基本結(jié)構(gòu)_第1頁
VHDL程序基本結(jié)構(gòu)_第2頁
VHDL程序基本結(jié)構(gòu)_第3頁
VHDL程序基本結(jié)構(gòu)_第4頁
VHDL程序基本結(jié)構(gòu)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

圖2.4VHDL程序設(shè)計基本結(jié)構(gòu)2.2VHDL程序基本結(jié)構(gòu)一個相對完整的VHDL程序通常包含實體(Entity)、結(jié)構(gòu)體(Architecture)、配置(Configuration)、程序包(Package)和庫(Library)5個部分。2021/6/271

(1)庫、程序包使用說明:用于打開(調(diào)用)本設(shè)計實體將要用到的庫、程序包;程序包存放各個設(shè)計模塊共享的數(shù)據(jù)類型、常數(shù)和子程序等;庫是專門存放預(yù)編譯程序包的地方。(2)實體:用于描述所設(shè)計的系統(tǒng)的外部接口信號,是可視部分;(3)結(jié)構(gòu)體:用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為,建立輸入和輸出之間的關(guān)系,是不可視部分。

(4)配置說明語句:主要用于以層次化的方式對特定的設(shè)計實體進(jìn)行元件例化,或是為實體選定某個特定的結(jié)構(gòu)體。2021/6/272

實體(ENTITY)是一個設(shè)計實體的表層設(shè)計單元,其功能是對這個設(shè)計實體與外部電路進(jìn)行接口描述。它規(guī)定了設(shè)計單元的輸入輸出接口信號或引腳,是設(shè)計實體經(jīng)封裝后對外的一個通信界面。

1.實體語句結(jié)構(gòu)

實體說明單元的常用語句結(jié)構(gòu)如下:

ENTITY

實體名

IS[GENERIC(類屬表);][PORT(端口表);]END[ENTITY]

實體名;2.2.1實體2021/6/273

實體說明單元必須以語句“ENTITY實體名IS”開始,以語句“ENDENTITY

實體名;”結(jié)束。

實體名是設(shè)計者自己給設(shè)計實體的命名,可作為其他設(shè)計實體對該設(shè)計實體進(jìn)行調(diào)用時用。中間在方括號內(nèi)的語句描述,在特定的情況下并非是必須的。例如構(gòu)建一個VHDL仿真測試基準(zhǔn)等情況中可以省去方括號中的語句。2021/6/2742.類屬(GENERIC)說明語句

類屬(GENERIC)參量是一種端口界面常數(shù),常以一種說明的形式放在實體或塊結(jié)構(gòu)體前的說明部分。類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬的值可以由設(shè)計實體外部提供。類屬說明的一般書寫格式如下:

GENERIC([常數(shù)名;數(shù)據(jù)類型[:設(shè)定值]{;常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]});2021/6/275LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYAND2IS

GENERIC(RISEW:TIME:=1ns;

FALLW:TIME:=1ns);

PORT(A1:INSTD_LOGIC;

A0:INSTD_LOGIC;

Z0:OUTSTD_LOGIC);

ENDENTITYAND2;【例2.2】2輸入與門的實體描述

類屬說明中定義參數(shù)RISEW為上沿寬度,F(xiàn)ALLW為下沿寬度,它們分別為1ns,這兩個參數(shù)用于仿真模塊的設(shè)計。2021/6/276

實體端口說明的一般書寫格式如下:

PORT(端口名:端口模式數(shù)據(jù)類型;

{端口名:端口模式數(shù)據(jù)類型});

端口名是設(shè)計者為實體的每一個對外通道(系統(tǒng)引腳)所取的名字,一般用幾個英文字母組成;

端口模式(端口方向)是指這些通道上的數(shù)據(jù)流動方式,即定義引腳是輸入還是輸出;

數(shù)據(jù)類型是指端口上流動的數(shù)據(jù)的表達(dá)格式。

3.PORT端口說明2021/6/277圖2.5

端口模式符號圖

IEEE1076標(biāo)準(zhǔn)包中定義了4種常用的端口模式,各端口模式的功能及符號分別見表2.1和圖2.5。表2.1

端口模式說明2021/6/278PORT(n0,n1,select:INBIT;

q:OUTBIT;

bus:OUTBIT_VECTOR(7

DOWNTO0));【例2.3】端口模式及數(shù)據(jù)類型定義

說明:n0,n1,select

是輸入引腳,屬于BIT型;

q是輸出引腳,BIT型;

bus是一組8位二進(jìn)制總線,屬于BIT_VECTOR。2021/6/279

LIBRARYIEEE;

USEIEEE.STD_LOGIC.1164.ALL;

ENTITYmmIS

PORT(n0,n1,select:INSTD_LOGIC;

Q:OUTSTD_LOGIC;

Bus:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDENTITYmm;【例2.4】端口模式及IEEE庫數(shù)據(jù)類型定義

例中端口數(shù)據(jù)類型取自IEEE標(biāo)準(zhǔn)庫(該庫中有數(shù)據(jù)類型和函數(shù)的說明),其中STD_LOGIC取值為“0”,“1”,“X”和“Z”。因為使用了庫,所以在實體說明前要增加庫說明語句。

2021/6/2710

2.2.2結(jié)構(gòu)體

結(jié)構(gòu)體(ARCHITECTURE)是設(shè)計實體的一個重要部分,結(jié)構(gòu)體將具體實現(xiàn)一個實體。結(jié)構(gòu)體不能單獨存在,它必須有一個界面說明,即一個實體。對于具有多個結(jié)構(gòu)體的實體,必須用CONFIGURATION配置語句指明用于綜合的結(jié)構(gòu)體和用于仿真的結(jié)構(gòu)體,即在綜合后的可映射于硬件電路的設(shè)計實體中,一個實體只對應(yīng)一個結(jié)構(gòu)體。在電路中,如果實體代表一個器件符號,則結(jié)構(gòu)體描述了這個符號的內(nèi)部行為。2021/6/2711ARCHITECTURE

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

OF

實體名IS

[說明語句]--內(nèi)部信號,常數(shù),數(shù)據(jù)類型,函數(shù)等的定義

BEGIN[功能描述語句]END[ARCHITECTURE][結(jié)構(gòu)體名];1.結(jié)構(gòu)體語句格式2021/6/2712

ENTITYmuxIS

PORT(a0,a1:INBIT;

Sel:INBIT;

Sh:OUTBIT);

ENDmux;

ARCHITECTUREdataflowOFmuxIS

BEGINsh<=(a0ANDsel)OR(NOTselANDa1);

ENDdataflow;

【例2.5】結(jié)構(gòu)體描述2021/6/2713

結(jié)構(gòu)體中的說明語句是對結(jié)構(gòu)體的功能描述語句中將要用到的信號(SIGNAL)、數(shù)據(jù)類型(TYPE)、常數(shù)(CONSTANT)、元件(COMPONENT)、函數(shù)(FUNCTION)和過程(PROCEDURE)等加以說明的語句。在一個結(jié)構(gòu)體中說明和定義的數(shù)據(jù)類型、常數(shù)、元件、函數(shù)和過程只能用于這個結(jié)構(gòu)體中,若希望其能用于其他的實體或結(jié)構(gòu)體中,則需要將其作為程序包來處理。2.結(jié)構(gòu)體說明語句2021/6/27143.功能描述語句

描述設(shè)計實體的具體行為,它包含兩類語句:

(1)并行語句:并行語句總是在進(jìn)程語句(PROCESS)的外部,語句的執(zhí)行與書寫順序無關(guān),總是同時被執(zhí)行。

(2)順序語句:順序語句總是在進(jìn)程語句(PROCESS)的內(nèi)部,該語句是順序執(zhí)行的。一個結(jié)構(gòu)體可以包含幾個類型的子結(jié)構(gòu)描述:BLOCK(塊)描述、PROCESS(進(jìn)程)描述、SUNPROGRAMS(子程序)描述。2021/6/2715

塊語句是由一系列并行執(zhí)行語句構(gòu)成的組合體,它的功能是將結(jié)構(gòu)體中的并行語句組成一個或多個模塊。

進(jìn)程語句定義順序語句模塊,用于將從外部獲得的信號值,或內(nèi)部的運算數(shù)據(jù)向其他的信號進(jìn)行賦值。

子程序調(diào)用語句用于調(diào)用一個已設(shè)計好的子程序。

信號賦值語句將設(shè)計實體內(nèi)的處理結(jié)果向定義的信號或界面端口進(jìn)行賦值。

元件例化語句對其他的設(shè)計實體作元件調(diào)用說明。2021/6/2716使用BLOCK語句描述的格式如下:

[塊標(biāo)號:]BLOCK

BEGIN

ENDBLOCK[塊標(biāo)號];1)BLOCK塊語句2021/6/2717

ENTITYmuxIS

PORT(d0,d1,sel:INBIT;

q:OUTBIT);

ENDmux;

ARCHITECTUREconnectOFmuxIS

SIGNALtmp1,tmp2,tmp3:BIT;

BEGIN

cale:BLOCK

BEGINtmp1<=d0ANDsel;

tmp2<=d1AND(NOTsel);

tmp3<=tmp1ORtmp2;

q<=tmp3;

ENDBLOCKcale;

ENDconnect;【例2.6】

用塊語句實現(xiàn)的二選一電路2021/6/2718進(jìn)程描述的格式如下:

[進(jìn)程名]:PROCESS(信號1,信號2,…)

BEGIN┇

ENDPROCESS[進(jìn)程名];進(jìn)程語句中總是帶有信號變量(敏感變量),只有當(dāng)信號變量發(fā)生變化時,進(jìn)程才被啟動,將進(jìn)程里的語句從上到下順序執(zhí)行一遍,執(zhí)行完了就回到開始的PROCESS語句。2)進(jìn)程(Process)語句描述2021/6/2719ENTITYmux2IS

PORT(d0,d1,sel:INBIT;

q:OUTBIT);

ENDmux2;

ARCHITECTUREconnectOFmux2IS

BEGIN

cale:PROCESS(d0,d1,sel)

VARIABLEtmp1,tmp2,tmp3:BIT;

BEGINtmp1:=d0ANDsel;

tmp2:=d1AND(NOTsel);

tmp3:=tmp1ORtmp2;

q<=tmp3

ENDPROCESScale;

ENDconnect;【例2.7】用進(jìn)程語句實現(xiàn)的二選一電路2021/6/2720子程序就是在主程序調(diào)用它以后能將處理結(jié)果返回給主程序。在VHDL中有2種類型:過程和函數(shù)?!襁^程語句

PROCEDURE

過程名(參數(shù)1,參數(shù)2)IS

[定義語句];

BEGIN

[順序處理語句];

END過程名;3)子程序語句描述2021/6/2721

●函數(shù)語句FUNCTION函數(shù)名(參數(shù)1,參數(shù)2)RETURN數(shù)據(jù)類型名IS

[定義語句];

BEGIN

[順序處理語句]RETURN[返回變量名]END函數(shù)名;2021/6/2722

FUNCTIONmin(x,y:INTEGER)RETURNINTEGER

IS

BEGIN

IFX<YTHEN

RETURN(x);

ELSE

RETURN(y);

ENDIF;

ENDmin;【例2.8】FUNCTION語句應(yīng)用舉例2021/6/2723

PROCEDUREvector_to_int(q:ININTEGER;

x_flag:OUTBOOLEAN;

z:INSTD_LOGIC_VECTOR)IS

BEGINq:=0;

x_flag:=FALSE;

FORiINz’RANGELOOPq:=q*2;

IF(z(i)=1)THENq:=q+1;

ELSEIF(z(i)/=0)THENx_flag:=TRUE;

ENDIF;

ENDLOOP;

ENDvector_to_int;

【例2.9】PROCEDURE語句應(yīng)用2021/6/27242.2.3庫

庫是經(jīng)編譯后的數(shù)據(jù)的集合,它存放包定義、實體定義、構(gòu)造定義和配置定義。使設(shè)計者可以共享已經(jīng)編譯的設(shè)計結(jié)果。VHDL中常用的庫如下:

IEEE庫

IEEE庫中包含IEEE標(biāo)準(zhǔn)的程序包,包括STD_LOGIC_1164、NUMERIC_BIT、NUMERIC_STD以及其他一些程序包。其中STD_LOGIC_1164是最主要的程序包,大部分可用于可編程邏輯器件的程序包都以這個程序包為基礎(chǔ)。

2021/6/2725STD庫

STD庫包含STANDARD和TEXTIO程序包。

STANDARD程序包中定義了許多基本的數(shù)據(jù)類型、子類型和函數(shù)。

TEXTIO是文件輸入/輸出程序包,是VHDL語言標(biāo)準(zhǔn)定義的。在VHDL的編譯和綜合過程中,系統(tǒng)都能自動調(diào)用因此不必在程序開始處打開該庫及其程序包。WORK庫

WORK庫是VHDL的現(xiàn)行工作庫,用于存放用戶設(shè)計和定義的一些單元和程序包。在使用該庫時無需進(jìn)行任何說明。2021/6/2726VITAL庫

使用VITAL可以提高門級時序仿真的精度,一般在VHDL語言程序進(jìn)行仿真時使用。主要包含兩個程序包:

VITAL_timing:時序仿真包;

VITAL_primitives:基本單元程序包?,F(xiàn)在的EDA開發(fā)工具都已將VITAL庫的程序包加到IEEE庫了。

2021/6/2727

在使用庫之前,一定要進(jìn)行庫說明和包說明。

庫和包的說明格式

LIBRARY

庫名;

USE

庫名.程序包名.項目名/all2.2.4程序包

包中羅列VHDL中用到的信號定義、常數(shù)定義、數(shù)據(jù)類型、元件語句、函數(shù)定義和過程定義,它是一個可編譯的設(shè)計單元,也是庫結(jié)構(gòu)中的一個層次,使用包時可以用USE語句說明,例如:USEIEEE.STD_LOGIC_1164.ALL2021/6/2728

程序包分為包首和包體。

(1)程序包首格式

PACKAGE

包名IS[說明語句]

END

包名;

(2)程序包體格式

PACKAGEBODY

包名IS[說明語句]

END[PACKAGEBODY]包名;2021/6/2729PACKAGElogicIS

TYPEthree_level_logicIS(‘0’,’1’,’z’);

CONSTANTunknown_value:three_level_logic:=’0’;

FUNCTIONinvert(input:three_level_logic)

RETURNthree_level_logic;END

logic;【例2.10】程序包首2021/6/2730PACKAGEBODYLOGICIS

FUNCTIONinvert(input:three_level_logic)

returnthree_level_logicis

bengin

Caseinputis

when‘0’=>return‘1’;

when‘1’=>return‘0’;

when‘z’=>return‘z’;

Endcase;

Endinvert;Endlogic;[例2.11]

程序包體2021/6

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論