第2章 VHDL硬件描述語言_第1頁
第2章 VHDL硬件描述語言_第2頁
第2章 VHDL硬件描述語言_第3頁
第2章 VHDL硬件描述語言_第4頁
第2章 VHDL硬件描述語言_第5頁
已閱讀5頁,還剩122頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章VHDL硬件描述語言2.1VHDL概述

2.2VHDL程序基本結(jié)構(gòu)

2.3VHDL語言要素

2.4VHDL順序語句

2.5VHDL并行語句本章小結(jié)

2/26/202412.1VHDL概述2.1.1常用硬件描述語言簡介常用硬件描述語言有VHDL、Verilog和ABEL語言。VHDL起源于美國國防部的VHSIC,Verilog起源于集成電路的設(shè)計(jì),ABEL則來源于可編程邏輯器件的設(shè)計(jì)。下面從使用方面將3者進(jìn)行對比。

(1)邏輯描述層次:一般的硬件描述語言可以在三個層次上進(jìn)行電路描述,其層次由高到低依次可分為行為級、RTL級和門電路級。VHDL語言是一種高級描述語言,適用于行為級和RTL級的描述,最適于描述電路的行為;Verilog語言和ABEL語言是一種較低級的描述語言,適用于RTL級和門電路級的描述,最適于描述門級電路。

2/26/20242

(2)設(shè)計(jì)要求:VHDL進(jìn)行電子系統(tǒng)設(shè)計(jì)時可以不了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者所做的工作較少;Verilog和ABEL語言進(jìn)行電子系統(tǒng)設(shè)計(jì)時需了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者需做大量的工作。

(3)綜合過程:任何一種語言源程序,最終都要轉(zhuǎn)換成門電路級才能被布線器或適配器所接受。因此,VHDL語言源程序的綜合通常要經(jīng)過行為級→RTL級→門電路級的轉(zhuǎn)化,VHDL幾乎不能直接控制門電路的生成。而Verilog語言和ABEL語言源程序的綜合過程要稍簡單,即經(jīng)過RTL級→門電路級的轉(zhuǎn)化,易于控制電路資源。

2/26/20243

(4)對綜合器的要求:VHDL描述語言層次較高,不易控制底層電路,因而對綜合器的性能要求較高,Verilog和ABEL對綜合器的性能要求較低。

(5)支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的綜合器僅Dataio一家。

(6)國際化程度:VHDL和Verilog已成為IEEE標(biāo)準(zhǔn),而ABEL正朝國際化標(biāo)準(zhǔn)努力。

2/26/202442.1.2VHDL及其優(yōu)點(diǎn)

VHDL誕生于1982年,1987年底被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。自IEEE公布了VHDL的標(biāo)準(zhǔn)版本(IEEE-1076)之后,各EDA公司相繼推出了自己的VHDL設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和VHDL接口。此后VHDL在電子設(shè)計(jì)領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)硬件描述語言。1993年,IEEE對VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本?,F(xiàn)在,VHDL和Verilog作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。有專家認(rèn)為,在新的世紀(jì)中,VHDL與Verilog語言將承擔(dān)起幾乎全部的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù)。

2/26/20245

VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個元件、一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分,即端口)和內(nèi)部(或稱不可視部分),即設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。在對一個設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。應(yīng)用VHDL進(jìn)行工程設(shè)計(jì)的優(yōu)點(diǎn)是多方面的,具體如下:

2/26/20246

(1)與其他的硬件描述語言相比,VHDL具有更強(qiáng)的行為描述能力。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。

(2)VHDL具有豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期,就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時可對系統(tǒng)進(jìn)行仿真模擬,對整個工程的結(jié)構(gòu)和功能可行性做出判斷。

(3)VHDL語句的行為描述能力和程序結(jié)構(gòu),決定了它具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。VHDL中設(shè)計(jì)實(shí)體的概念、程序包的概念、設(shè)計(jì)庫的概念為設(shè)計(jì)的分解和并行工作提供了有利的支持。

2/26/20247

(4)用VHDL完成一個確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級網(wǎng)表。

(5)VHDL對設(shè)計(jì)的描述具有相對獨(dú)立性。設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管最終設(shè)計(jì)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。

(6)由于VHDL具有類屬描述語句和子程序調(diào)用等功能,對于完成的設(shè)計(jì),在不改變源程序的條件下,只需改變類屬參量或函數(shù),就能輕易地改變設(shè)計(jì)的規(guī)模和結(jié)構(gòu)。

2/26/202482.1.3VHDL程序設(shè)計(jì)約定便于程序的閱讀和調(diào)試,本書對VHDL程序設(shè)計(jì)特作如下約定:

(1)語句結(jié)構(gòu)描述中方括號“[]”內(nèi)的內(nèi)容為可選內(nèi)容。

(2)對于VHDL的編譯器和綜合器來說,程序文字的大小寫是不加區(qū)分的。本書一般使用大寫。

(3)程序中的注釋使用雙橫線“--”。在VHDL程序的任何一行中,雙橫線“--”后的文字都不參加編譯和綜合。

(4)為了便于程序的閱讀與調(diào)試,書寫和輸入程序時,使用層次縮進(jìn)格式,同一層次的對齊,低層次的較高層次的縮進(jìn)兩個字符。

2/26/202492.1.4VHDL程序設(shè)計(jì)舉例

1.2選1多路選擇器的VHDL程序

ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux2la;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'

ELSEb;ENDARCHITECTUREone;

以上是2選1多路選擇器的VHDL程序完整描述。圖2.1是此描述對應(yīng)的邏輯圖,圖中,a和b分別為兩個數(shù)據(jù)輸入端的端口名,s為通道選擇控制信號輸入端的端口名,y為輸出端的端口名。“mux21a”是設(shè)計(jì)者為此器件取的名稱。圖2.2是對以上程序綜合后獲得的門級電路,可以認(rèn)為是多路選擇器mux21a的內(nèi)部電路結(jié)構(gòu)。圖2.1mux21a實(shí)體

圖2.2mux21a結(jié)構(gòu)體

2/26/202410

2.說明及分析可見,此電路的VHDL描述由兩大部分組成:

(1)以關(guān)鍵詞ENTITY引導(dǎo),ENDENTITYmux2la結(jié)尾的語句部分,稱為實(shí)體。VHDL的實(shí)體描述了電路器件的外部情況及各信號端口的基本性質(zhì)。圖2.1可以認(rèn)為是實(shí)體的圖形表達(dá)。

(2)以關(guān)鍵詞ARCHITECTURE引導(dǎo),ENDARCHITECTUREone結(jié)尾的語句部分,稱為結(jié)構(gòu)體。結(jié)構(gòu)體負(fù)責(zé)描述電路器件的內(nèi)部邏輯功能或電路結(jié)構(gòu)。圖2.2是此結(jié)構(gòu)體的原理圖表達(dá)。在VHDL結(jié)構(gòu)體中用于描述邏輯功能和電路結(jié)構(gòu)的語句分為順序語句和并行語句。順序語句的執(zhí)行方式是按照語句的前后排列逐條順序執(zhí)行的,而并行語句都是同時執(zhí)行的,與語句的前后次序無關(guān)。

2/26/202411

程序中的邏輯描述是用WHEN_ELSE結(jié)構(gòu)的并行語句表達(dá)的。它的含義是,當(dāng)滿足條件s='0',即s為低電平時,a輸入端的信號傳送至y,否則(即s為高電平時)b輸入端的信號傳送至y。

2選1多路選擇器的電路功能可以從圖2.3的時序波形中看出,分別向a和b端輸入兩個不同頻率的信號fa和fb(設(shè)fa>fb),當(dāng)s為高電平時,y輸出fb,而當(dāng)s為低電平時,y輸出fa。顯然,圖2.3的波形證實(shí)了VHDL邏輯設(shè)計(jì)的正確性。

圖2.3mux21a功能時序波形圖

2/26/202412圖2.4VHDL程序設(shè)計(jì)基本結(jié)構(gòu)2.2VHDL程序基本結(jié)構(gòu)一個相對完整的VHDL程序(或稱為設(shè)計(jì)實(shí)體)具有如圖2.4所示的比較固定的結(jié)構(gòu)。通常包含實(shí)體(Entity)、結(jié)構(gòu)體(Architecture)、配置(Configuration)、程序包(Package)和庫(Library)5個部分。

2/26/202413其中,庫、程序包使用說明用于打開(調(diào)用)本設(shè)計(jì)實(shí)體將要用到的庫、程序包,程序包存放各個設(shè)計(jì)模塊共享的數(shù)據(jù)類型、常數(shù)和子程序等;庫是專門存放預(yù)編譯程序包的地方。實(shí)體用于描述所設(shè)計(jì)的系統(tǒng)的外部接口信號,是可視部分;結(jié)構(gòu)體用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為,建立輸入和輸出之間的關(guān)系,是不可視部分。在一個實(shí)體中,可以含有一個或一個以上的結(jié)構(gòu)體,而在每一個結(jié)構(gòu)體中又可以含有一個或多個進(jìn)程以及其他的語句。根據(jù)需要,實(shí)體還可以有配置說明語句。配置說明語句主要用于以層次化的方式對特定的設(shè)計(jì)實(shí)體進(jìn)行元件例化,或是為實(shí)體選定某個特定的結(jié)構(gòu)體。如何才算一個完整的VHDL程序(設(shè)計(jì)實(shí)體),并沒有完全一致的結(jié)論,因?yàn)椴煌某绦蛟O(shè)計(jì)目的可以有不同的程序結(jié)構(gòu)。通常認(rèn)為,一個完整的設(shè)計(jì)實(shí)體的最低要求應(yīng)該能為VHDL綜合器所接受,并能作為一個獨(dú)立設(shè)計(jì)單元,即以元件的形式存在的VHDL程序。

2/26/202414

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

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

ENTITY實(shí)體名IS[GENERIC(類屬表);][PORT(端口表);]ENDENTITY實(shí)體名;

2/26/202415實(shí)體說明單元必須以語句“ENTITY實(shí)體名IS”開始,以語句“ENDENTITY實(shí)體名;”結(jié)束,其中的實(shí)體名是設(shè)計(jì)者自己給設(shè)計(jì)實(shí)體的命名,可作為其他設(shè)計(jì)實(shí)體對該設(shè)計(jì)實(shí)體進(jìn)行調(diào)用時用。中間在方括號內(nèi)的語句描述,在特定的情況下并非是必須的。例如構(gòu)建一個VHDL仿真測試基準(zhǔn)等情況中可以省去方括號中的語句。

2/26/202416

2.類屬(GENERIC)說明語句

類屬(GENERIC)參量是一種端口界面常數(shù),常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分。類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬的值可以由設(shè)計(jì)實(shí)體外部提供。因此,設(shè)計(jì)者可以從外面通過類屬參量的重新設(shè)定而容易地改變一個設(shè)計(jì)實(shí)體或一個元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。類屬說明的一般書寫格式如下:

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

2/26/202417

類屬參量以關(guān)鍵詞GENERIC引導(dǎo)一個類屬參量表,在表中提供時間參數(shù)或總線寬度等靜態(tài)信息。類屬表說明用于確定設(shè)計(jì)實(shí)體和其外部環(huán)境通信的參數(shù),傳遞靜態(tài)的信息。在一個實(shí)體中定義的、可以通過GENERIC參數(shù)類屬的說明,為它創(chuàng)建多個行為不同的邏輯結(jié)構(gòu)。比較常見的情況是選用類屬來動態(tài)規(guī)定一個實(shí)體端口的大小,或設(shè)計(jì)實(shí)體的物理特性,或結(jié)構(gòu)體中的總線寬度,或設(shè)計(jì)實(shí)體中、底層中同種元件的例化數(shù)量等。一般在結(jié)構(gòu)體中,類屬的應(yīng)用與常數(shù)是一樣的。

2/26/202418【例2.2】2輸入與門的實(shí)體描述。

ENTITYAND2ISGENERIC(RISEW:TIME:=1ns;

FALLW:TIME:=1ns);

PORT(A1:INSTD_LOGIC;

A0:INSTD_LOGIC;

Z0:OUTSTD_LOGIC);

ENDENTITYAND2;這是一個準(zhǔn)備作為2輸入與門的設(shè)計(jì)實(shí)體的實(shí)體描述,在類屬說明中定義參數(shù)RISEW為上沿寬度,F(xiàn)ALLW為下沿寬度,它們分別為1ns,這兩個參數(shù)用于仿真模塊的設(shè)計(jì)。

2/26/202419

3.PORT端口說明

由PORT引導(dǎo)的端口說明語句是對于一個設(shè)計(jì)實(shí)體界面的說明。實(shí)體端口說明的一般書寫格式如下:

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

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

其中,端口名是設(shè)計(jì)者為實(shí)體的每一個對外通道(系統(tǒng)引腳)所取的名字,一般用幾個英文字母組成;端口模式(端口方向)是指這些通道上的數(shù)據(jù)流動方式,即定義引腳是輸入還是輸出;數(shù)據(jù)類型是指端口上流動的數(shù)據(jù)的表達(dá)格式。由于VHDL是一種強(qiáng)類型語言,它對語句中的所有操作數(shù)的數(shù)據(jù)類型都有嚴(yán)格的規(guī)定。一個實(shí)體通常有一個或多個端口,端口類似于原理圖部件符號上的管腳。實(shí)體與外界交流的信息必須通過端口通道流入或流出。

2/26/202420圖2.5端口模式符號圖

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

2/26/202421【例2.3】端口模式及數(shù)據(jù)類型定義舉例

PORT(n0,

n1,

select:

INBIT;

q:

OUTBIT;

bus:

OUTBIT_VECTOR(7DOWNTO0));

本例中,n0,

n1,

select是輸入引腳,屬于BIT型,q是輸出引腳,BIT型,bus是一組8位二進(jìn)制總線,屬于BIT_VECTOR?!纠?.4】端口模式及IEEE庫數(shù)據(jù)類型定義舉例

LIBRARYIEEE;

USEIEEE.STD_LOGIC.1164.ALL;

ENTITYmmISPORT(n0,n1,select:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC;

Bus:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDmm;

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

2/26/202422

2.2.2結(jié)構(gòu)體結(jié)構(gòu)體(ARCHITECTURE)是設(shè)計(jì)實(shí)體的一個重要部分,結(jié)構(gòu)體將具體實(shí)現(xiàn)一個實(shí)體。每一個實(shí)體都有一個或一個以上的結(jié)構(gòu)體,每個結(jié)構(gòu)體對應(yīng)著實(shí)體不同結(jié)構(gòu)和算法實(shí)現(xiàn)方案,其間的各個結(jié)構(gòu)體的地位是同等的,它們完整地實(shí)現(xiàn)了實(shí)體的行為,但同一結(jié)構(gòu)體不能為不同的實(shí)體所擁有。結(jié)構(gòu)體不能單獨(dú)存在,它必須有一個界面說明,即一個實(shí)體。對于具有多個結(jié)構(gòu)體的實(shí)體,必須用CONFIGURATION配置語句指明用于綜合的結(jié)構(gòu)體和用于仿真的結(jié)構(gòu)體,即在綜合后的可映射于硬件電路的設(shè)計(jì)實(shí)體中,一個實(shí)體只對應(yīng)一個結(jié)構(gòu)體。在電路中,如果實(shí)體代表一個器件符號,則結(jié)構(gòu)體描述了這個符號的內(nèi)部行為。

2/26/202423

1.結(jié)構(gòu)體的一般語句格式

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

OF實(shí)體名

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

BEGIN[功能描述語句]END[ARCHITECTURE][結(jié)構(gòu)體名];

【例2.5】

ENTITYnaxISPORT(a0,a1:INBIT;

Sel:INBIT;

Sh:OUTBIT);

ENDnax;

ARCHITECTUREdataflowOFnaxISBEGIN

sh<=(a0ANDsel)OR(NOT

selANDa1);

ENDdataflow;

2/26/202424

2.結(jié)構(gòu)體說明語句

結(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)體中,若希望其能用于其他的實(shí)體或結(jié)構(gòu)體中,則需要將其作為程序包來處理。

3.功能描述語句

結(jié)構(gòu)體描述設(shè)計(jì)實(shí)體的具體行為,它包含兩類語句:

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

(2) 順序語句:順序語句總是在進(jìn)程語句(PROCESS)的內(nèi)部,從仿真的角度,該語句是順序執(zhí)行的。

2/26/202425

一個結(jié)構(gòu)體包含幾個類型的子結(jié)構(gòu)描述:BLOCK(塊)描述、PROCESS(進(jìn)程)描述、SUNPROGRAMS(子程序)描述。

塊語句是由一系列并行執(zhí)行語句構(gòu)成的組合體,它的功能是將結(jié)構(gòu)體中的并行語句組成一個或多個模塊。進(jìn)程語句定義順序語句模塊,用于將從外部獲得的信號值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其他的信號進(jìn)行賦值。子程序調(diào)用語句用于調(diào)用一個已設(shè)計(jì)好的子程序。信號賦值語句將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號或界面端口進(jìn)行賦值。元件例化語句對其他的設(shè)計(jì)實(shí)體作元件調(diào)用說明,并將此元件的端口與其他的元件、信號或高層次實(shí)體的界面端口進(jìn)行連接。

2/26/202426

1) BLOCK語句描述使用BLOCK語句描述的格式如下:

塊標(biāo)號:BLOCKBEGINENDBLOCK塊標(biāo)號:【例2.6】

用塊語句實(shí)改的二選一電路ENTITYmuxISPORT(d0,d1,sel:

INBIT;

q:OUTBIT);

ENDmux;

ARCHITECTUREconnectOFmuxISSIGNALtmp1,tmp2,tmp3:BIT;

BEGIN

cale:

BLOCKBEGINtmp1<=d0ANDsel;

tmp2<=d1AND(NOTsel);

tmp3<=tmp1ORtmp2;

q<=tmp3;

ENDBLOCKcale;

ENDconnect;

2/26/202427

2)進(jìn)程(Process)描述進(jìn)程描述的格式如下:

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

【例2.7】用進(jìn)程語句實(shí)現(xiàn)的二選一電路

ENTITYmux1ISPORT(d0,d1,sel:INBIT;

q:OUTBIT);

ENDmux1;

ARCHITECTUREconnectOFmux1ISBEGIN

cale:

VARIABLEtmp1,tmp2,tmp3:BIT;--在進(jìn)程中定義的變量

BEGINtmp1:=d0ANDsel;

--輸入端口向變量賦值

tmp2:=d1AND(NOTsel);

tmp3:=tmp1ORtmp2;

q<=tmp3ENDPROCESScale;

ENDconnect;

2/26/2024283)子程序描述

子程序的概念和其它高級程序中子程序的概念相同,在VHDL中有2種類型:過程(Procedure)和函數(shù)(Function)。過程的格式:PROCEDURE過程名(參數(shù)1,參數(shù)2)IS函數(shù)的格式:FUNCTION函數(shù)名(參數(shù)1,參數(shù)2)RETURN數(shù)據(jù)類型名

IS【例2.9】FUNCTION語句應(yīng)用舉例

FUNCTIONmin(x,y:INTEGER)RETURNINTEGERISBEGINIFX<YTHENRETURN(x);

ELSERETURN(y);

ENDIF;

ENDmin;

2/26/202429【例2.8】PROCEDURE語句應(yīng)用舉例

PROCEDUREvector_to_int(z:INSTD_LOGIC_VECTOR;

x_flag:OUTBOOLEAN;

q:ININTEGER)ISBEGINq:=0;

x_flag:=FALSE;

FORiINzRANGELOOPq:=q*2;

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

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

ENDIF;

ENDLOOP,

ENDvector_to_int;

2/26/2024302.2.3庫庫是經(jīng)編譯后的數(shù)據(jù)的集合,它存放包定義、實(shí)體定義、構(gòu)造定義和配置定義。在設(shè)計(jì)單元內(nèi)的語句可以使用庫中的結(jié)果,所以,庫的好處就是設(shè)計(jì)者可以共享已經(jīng)編譯的設(shè)計(jì)結(jié)果,在VHDL中有很多庫,但他們相互獨(dú)立。IEEE庫:在IEEE庫中有一個STD_LOGIC的包,它是IEEE正式認(rèn)可的包。STD庫:STD庫是VHDL的標(biāo)準(zhǔn)庫,在庫中有名為STANDARD的包,還有TEXTIO包。另外還有ASIC庫、WORK庫和用戶自定義庫等。在使用庫之前,一定要進(jìn)行庫說明和包說明,庫和包的說明總是放在設(shè)計(jì)單元的前面:

LIBRARY庫名;

USELIBRARY.ITEM.name

2/26/202431

2.2.4程序包通常在一個實(shí)體中對數(shù)據(jù)類型、常量等進(jìn)行的說明只可以在一個實(shí)體中使用,為使這些說明可以在其它實(shí)體中使用,VHDL提供了程序包結(jié)構(gòu),包中羅列VHDL中用到的信號定義、常數(shù)定義、數(shù)據(jù)類型、元件語句、函數(shù)定義和過程定義,它是一個可編譯的設(shè)計(jì)單元,也是庫結(jié)構(gòu)中的一個層次,使用包時可以用USE語句說明,例如:USEIEEE.STD_LOGIC_1164.ALL

程序包分為包頭和包體,包結(jié)構(gòu)的格式如下:

(1)包頭格式:

PACKAGE包名

IS[說明語句]END包名

(2)包體格式:

PACKAGEBODY包名

IS[說明語句]END包名;

2/26/202432【例2.11】包頭

USESTD.LOGIC.ALLPACKAGElogicISTYPEthree_level_logicIS(‘0’,’1’,’z’);

--數(shù)據(jù)類型項(xiàng)目

CONSTANTunknown_value:three_level_logic:=’0’;--常數(shù)項(xiàng)目

FUNCTIONinvert(input:three_level_logic)--函數(shù)項(xiàng)目

RETURNthree_level_logic;ENDlogic;

2/26/202433

2.2.5配置用于在多結(jié)構(gòu)體中的實(shí)體中選擇結(jié)構(gòu)體,例如,在做RS觸發(fā)器的實(shí)體中使用了2個結(jié)構(gòu)體,目的是研究各個結(jié)構(gòu)體描述的RS觸發(fā)器的行為性能如何,但是究竟在仿真中使用哪一個結(jié)構(gòu)體的問題就是配置問題。配置語句格式:

CONFIGURATION配置名

OF實(shí)體名

IS

[說明語句]

END

配置名;

2/26/202434【例2.13】

ENTITYrsISPORT(set,reset:INBIT;

q,qb:

BUFFERBIT);ENDrs;ARCHITECTURErsff1OFrsISCOMPONENTnand2PORT(a,b:INBIT;

c:OUTBIT);

ENDCOMPONENT;BEGINU1:nand2PORTMAP(a=>set,b=>qb,c=>q)U2:nand2PORTMAP(a=>reset,b=>q,c=>qb)ENDrsff1;ARCHITECTURErsff2OFrsISBEGINq<=NOT(qbANDset);

qb<=NOT(qANDreset);ENDrsff2;

2/26/2024352.3VHDL語言要素2.3.1VHDL文字規(guī)則

VHDL文字(Literal)主要包括數(shù)值和標(biāo)識符。數(shù)值型文字主要有數(shù)字型、字符串型、位串型。

1.?dāng)?shù)字型文字?jǐn)?shù)字型文字的值有多種表達(dá)方式,現(xiàn)列舉如下:

(1)整數(shù)文字:整數(shù)文字都是十進(jìn)制的數(shù),如:

5,678,0,156E2(=15600),45_234_287(=45234287)

數(shù)字間的下劃線僅僅是為了提高文字的可讀性,相當(dāng)于一個空的間隔符,而沒有其他的意義,因而不影響文字本身的數(shù)值。

(2)實(shí)數(shù)文字:實(shí)數(shù)文字也都是十進(jìn)制的數(shù),但必須帶有小數(shù)點(diǎn),如:

188.993,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0

2/26/202436

(3)以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由5個部分組成。第1部分,用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù);第2部分,數(shù)制隔離符號“#”;第3部分,表達(dá)的文字;第4部分,指數(shù)隔離符號“#”;第5部分,用十進(jìn)制表示的指數(shù)部分,這一部分的數(shù)如果是0可以省去不寫?,F(xiàn)舉例如下:10#170#--(十進(jìn)制數(shù)表示,等于170)2#1111_1110#--(二進(jìn)制數(shù)表示,等于254)16#E#E1--(十六進(jìn)制數(shù)表示,等于2#11100000#,等于224)16#F.01#E+2--(十六進(jìn)制數(shù)表示,等于3841.00)

2/26/202437

2.字符串型文字字符是用單引號引起來的ASCII字符,可以是數(shù)值,也可以是符號或字母,如:‘A’,‘*’,‘Z’。而字符串則是一維的字符數(shù)組,須放在雙引號中。VHDL中有兩種類型的字符串:文字字符串和數(shù)位字符串。

(1)文字字符串:文字字符串是用雙引號引起來的一串文字,如:“ERROR”,“X”。

(2)數(shù)位字符串:數(shù)位字符串也稱位矢量,是預(yù)定義的數(shù)據(jù)類型BIT的一位數(shù)組,它們所代表的是二進(jìn)制、八進(jìn)制或十六進(jìn)制的數(shù)組,其位矢量的長度即為等值的二進(jìn)制數(shù)的位數(shù)。數(shù)位字符串的表示首先要有計(jì)算基數(shù),然后將該基數(shù)表示的值放在雙引號中,基數(shù)符放在字符串的前面,分別以“B”、“O”和“X”表示二、八、十六進(jìn)制基數(shù)符號。例如:

B“1_1101_1110” --二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是9X“AD0”--十六進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是12

2/26/202438

3.標(biāo)識符

標(biāo)識符用來定義常數(shù)、變量、信號、端口、子程序或參數(shù)的名字。VHDL的基本標(biāo)識符就是以英文字母開頭,不連續(xù)使用下劃線“_”,不以下劃線“_”結(jié)尾的,由26個大小寫英文字母、數(shù)字0~9以及下劃線“_”組成的字符串。VHDL的保留字不能用于作為標(biāo)識符使用。如:DECODER_1,F(xiàn)FT,Sig_N,NOT_ACK,State0,Idle是合法的標(biāo)識符;而_DECODER_1,2FFT,SIG_#N,NOT_ACK,RYY_RST,data_BUS,RETURN則是非法的標(biāo)識符。

4.下標(biāo)名及下標(biāo)段名

下標(biāo)名用于指示數(shù)組型變量或信號的某一元素,而下標(biāo)段名則用于指示數(shù)組型變量或信號的某一段元素,其語句格式如下:

數(shù)組類型信號名或變量名(表達(dá)式1[TO/DOWNTO表達(dá)式2]);

表達(dá)式的數(shù)值必須在數(shù)組元素下標(biāo)號范圍以內(nèi),并且必須是可計(jì)算的。TO表示數(shù)組下標(biāo)序列由低到高,如“2TO8”;DOWNTO表示數(shù)組下標(biāo)序列由高到低,如“8DOWNTO2”。如下是下標(biāo)名及下標(biāo)段名使用示例:

SIGNALA,B,C:BIT_VECTOR(0TO7);

SIGNALM:INTEGERRANGE0TO3;

Y<=A(M);

--M是不可計(jì)算型下標(biāo)表示

Z<=B(3);--3是可計(jì)算型下標(biāo)表示

2/26/2024392.3.2VHDL數(shù)據(jù)對象

在VHDL中,數(shù)據(jù)對象(DataObjects)類似于一種容器,它接受不同數(shù)據(jù)類型的賦值。數(shù)據(jù)對象有三種,即常量(CONSTANT)、變量(VARIABLE)和信號(SIGNAL)。

1.常量常量的定義和設(shè)置主要是為了使設(shè)計(jì)實(shí)體中的常數(shù)更容易閱讀和修改。例如,將位矢的寬度定義為一個常量,只要修改這個常量就能很容易地改變寬度,從而改變硬件結(jié)構(gòu)。在程序中,常量是一個恒定不變的值,一旦作了數(shù)據(jù)類型的賦值定義后,在程序中不能再改變,因而具有全局意義。常量的描述格式:

CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達(dá)式

例:CONSTANTVcc:

REAL:=5.0;

CONSTANTDALY:

TIME:=100ns;

CONSTANTFBUS:BIT_VECTOR:=”0101”;

2/26/202440

2.變量(VARIABLE)

在VHDL語法規(guī)則中,變量是一個局部量,只能在進(jìn)程和子程序中使用。變量不能將信息帶出對它作出定義的當(dāng)前設(shè)計(jì)單元。變量的賦值是一種理想化的數(shù)據(jù)傳輸,是立即發(fā)生,不存在任何延時的行為。VHDL語言規(guī)則不支持變量附加延時語句。變量常用在實(shí)現(xiàn)某種算法的賦值語句中。變量只能在進(jìn)程、函數(shù)和過程中使用,一旦賦值立即生效。

定義變量的語法格式如下:

VARIABLE變量名:數(shù)據(jù)類型:=初始值;例如:

VARIABLEA:INTEGER;--定義A為整數(shù)型變量

VARIABLEB,C:INTEGER:=2;--定義B和C為整型變量,初始值為2VARIABLEcount:INTEGERRANGE0TO255:=10;

2/26/202441

3.信號(SIGNAL)

信號是描述硬件系統(tǒng)的基本數(shù)據(jù)對象,它類似于連接線。信號可以作為設(shè)計(jì)實(shí)體中并行語句模塊間的信息交流通道。在VHDL中,信號及其相關(guān)的信號賦值語句、決斷函數(shù)、延時語句等很好地描述了硬件系統(tǒng)的許多基本特征。如硬件系統(tǒng)運(yùn)行的并行性;信號傳輸過程中的慣性延時特性;多驅(qū)動源的總線行為等。信號作為一種數(shù)值容器,不但可以容納當(dāng)前值,也可以保持歷史值。這一屬性與觸發(fā)器的記憶功能有很好的對應(yīng)關(guān)系。除了沒有方向說明以外,信號與實(shí)體的端口(PORT)概念是一致的。信號的描述格式如下:

SIGNAL信號名:數(shù)據(jù)類型﹕=初始值;

2/26/202442

4.信號與變量的區(qū)別

信號賦值可以有延遲時間,變量賦值無時間延遲;信號除當(dāng)前值外還有許多相關(guān)值,如歷史信息等,變量只有當(dāng)前值;進(jìn)程對信號敏感,對變量不敏感;信號可以是多個進(jìn)程的全局信號,但變量只在定義它之后的順序域可見;信號可以看作硬件的一根連線,但變量無此對應(yīng)關(guān)系。

例:SIGNALsys_clk:

BIT:=‘0’;

--定義了一個位BIT的信號sys_clk,初始值為0SIGNALS1:STD_LOGIG﹕=0;--定義了一個標(biāo)準(zhǔn)位的單值信號S1,初始值為低電平

SIGNALS4:STD_LOGIC_VECTOR(15DOWNTO0);--定義了一個位矢量(數(shù)組、總線)信號S4共有16個信號元素在程序中,信號值輸入信號時采用代入符”<=”,而不是賦值符“:=”,同時信號可以附加延時。信號是一個全局量,可以用來進(jìn)行進(jìn)程之間的通信。信號傳送語句:

s1<=s2AFTER10ns

2/26/2024432.3.3VHDL數(shù)據(jù)類型

VHDL是一種強(qiáng)類型語言,要求設(shè)計(jì)實(shí)體中的每一個常數(shù)、信號、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型的量才能互相傳遞和作用。VHDL作為強(qiáng)類型語言的好處是使VHDL編譯或綜合工具很容易地找出設(shè)計(jì)中的各種常見錯誤。VHDL中的數(shù)據(jù)類型可以分成在現(xiàn)成程序包中可以隨時獲得的標(biāo)準(zhǔn)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型兩個類別。標(biāo)準(zhǔn)的VHDL數(shù)據(jù)類型是VHDL最常用、最基本的數(shù)據(jù)類型,這些數(shù)據(jù)類型都已在VHDL的標(biāo)準(zhǔn)程序包Standard和STD_LOGIC_1164及其他的標(biāo)準(zhǔn)程序包中作了定義,并可在設(shè)計(jì)中隨時調(diào)用。

2/26/202444

1.標(biāo)準(zhǔn)數(shù)據(jù)類型

(1)整數(shù)(INTEGER)范圍:-2147483547~+2147483646,即可用32位有符號的二進(jìn)制數(shù)表示。如2、10E4、16#D2#。

例:INTEGERRANGE

100DOWNTO0(2)實(shí)數(shù)(REAL)范圍:-1.0E38~1.0E38,書寫時一定要有小數(shù)。如:65.36、

8#43.6#E+4。

(3)位(BIT)取值只能是用帶單引號的‘1’和‘0’來表示。

(4)位矢量(BIT_VECTOR)位矢量是用雙引號括起來的一組位數(shù)據(jù),如“010101”。例:BIT_VECTOR(3DOWNTO0)(5)布爾量(BOOLEAN)只有“真”和“假”2個狀態(tài),可以進(jìn)行關(guān)系運(yùn)算。

(6)字符(CHARACTER):字符通常用單引號括起來,對大小寫敏感。

(7)字符串(STRING):字符串是雙引號括起來的一串字符,如“l(fā)aksdklakld”。

(8)時間(TIME):完整的時間類型包括整數(shù)和物理量單位兩部分,整數(shù)和單位之間至少留一個空格,如55ms,20ns。

2/26/202445另外,在IEEE庫的程序包STD_LOGIC_1164中,定義了兩個非常重要的數(shù)據(jù)類型,即標(biāo)準(zhǔn)邏輯位STD_LOGIC和標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR。

(1)標(biāo)準(zhǔn)邏輯位(STD_LOGIC)數(shù)據(jù)類型

STD_LOGIC的定義如下所示:

TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-');

各值的含義是:'U'--未初始化的,'X'--強(qiáng)未知的,'0'--強(qiáng)0,'1'--強(qiáng)1,'Z'--高阻態(tài),'W'--弱未知的,'L'--弱0,'H'--弱1,'-'--忽略。由定義可見,STD_LOGIC是標(biāo)準(zhǔn)的BIT數(shù)據(jù)類型的擴(kuò)展,共定義了9種值,這意味著,對于定義為數(shù)據(jù)類型是標(biāo)準(zhǔn)邏輯位STD_LOGIC的數(shù)據(jù)對象,其可能的取值已非傳統(tǒng)的BIT那樣只有0和1兩種取值,而是如上定義的有9種可能的取值。在程序中使用此數(shù)據(jù)類型前,需加入下面的語句:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

(2)標(biāo)準(zhǔn)邏輯矢量(STD_LOGIC_VECTOR)數(shù)據(jù)類型

STD_LOGIC_VECTOR類型定義如下:

TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;

顯然,STD_LOGIC_VECTOR是定義在STD_LOGIC_1164程序包中的標(biāo)準(zhǔn)一維數(shù)組,數(shù)組中的每一個元素的數(shù)據(jù)類型都是以上定義的標(biāo)準(zhǔn)邏輯位STD_LOGIC。

2/26/202446

2.用戶自定義數(shù)據(jù)類型

VHDL允許用戶自行定義新的數(shù)據(jù)類型,如枚舉類型(ENUMERATIONTYPE)、整數(shù)類型(INTEGERTYPE)、數(shù)組類型(ARRAYTYPE)、記錄類型(RECORDTYPE)、時間類型(TIMETYPE)、實(shí)數(shù)類型(REALTYPE)等。用戶自定義數(shù)據(jù)類型是用類型定義語句TYPE和子類型定義語句SUBTYPE實(shí)現(xiàn)的。用戶自定義數(shù)據(jù)類型的一般格式:

TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義[OF基本數(shù)據(jù)類型];

2/26/202447其中,數(shù)據(jù)類型名由設(shè)計(jì)者自定;數(shù)據(jù)類型定義部分用來描述所定義的數(shù)據(jù)類型的表達(dá)方式和表達(dá)內(nèi)容;關(guān)鍵詞OF后的基本數(shù)據(jù)類型是指數(shù)據(jù)類型定義中所定義的元素的基本數(shù)據(jù)類型,一般都是取已有的預(yù)定義數(shù)據(jù)類型,如BIT、STD_LOGIC或INTEGER等。例:TYPEdigitISINTEGERRANGE0TO9;

TYPEcurrentISREALRANGE-1E4TO1E4;

TYPEwordISARRAY(INTEGER1TO8)OFSTD_LOGIC;

2/26/202448

3.?dāng)?shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換函數(shù)由VHDL語言的包提供,例如:STD_LOGIC_1164和STD_LOGIC_ARITH等。轉(zhuǎn)換函數(shù)見表2.2。

函數(shù)

說明

STD_LOGIC_1164包TO_STDLOGICVECTOR(A)TO_BITVECTOR(A)TO_LOGIC(A)TO_BIT(A)

由BIT_VECTOR轉(zhuǎn)換成STD_LOGIC_VECTOR由STD_LOGIC_VECTOR轉(zhuǎn)換成BIT_VECTOR由BIT轉(zhuǎn)換成STD_LOGIC由STD_LOGIC轉(zhuǎn)換成BITSTD_LOGIC_ARITH包CONV_STD_LOGIC_VECTOR(A,位長)

CONV_INTEGER(A)

由INTEGER,UNSIGNED和SIGNED轉(zhuǎn)換成STD_LOGIC_VECTOR由UNSIGNED和SIGNED轉(zhuǎn)換成INTEGERSTD_LOGIC_UNSIGNED包CONV_INTEGER

由STD_LOGIC_VECTOR轉(zhuǎn)換成INTEGER表2.2轉(zhuǎn)換函數(shù)表

2/26/202449【例2.14】由STD_BIT_VECTOR轉(zhuǎn)換成INTEGERLIBRARY

IEEE;USEIEEE.STD_LOGIC_1164.ALLUSEIEEE.STD_LOGIC_UNSIGNED.ALLENTITYadd5ISPORT(num:INSTD_LOGIC_VECTOR(2DOWNTO0);┇

);

ENDadd5;

ARCHITECTURErtlOFadd5ISSIGNALin_num:

INTEGERRANGE0TO5;┇

BEGIN

In_num<=CONV_INTEGER(num);

ENDrtl;

2/26/2024502.3.4VHDL運(yùn)算操作符

VHDL的各種表達(dá)式由操作數(shù)和操作符組成,其中操作數(shù)是各種運(yùn)算的對象,而操作符則規(guī)定運(yùn)算的方式。

1.操作符種類及對應(yīng)的操作數(shù)類型在VHDL中,有4類基本操作符,即邏輯操作符(LogicalOperator)、關(guān)系操作符(RelationalOperator)、算術(shù)操作符(ArithmeticOperator)和符號操作符(SignOperator)?;静僮鞣峭瓿蛇壿嫼退阈g(shù)運(yùn)算的最基本的操作符的單元。此外還有重載操作符(OverloadingOperator),是對基本操作符作了重新定義的函數(shù)型操作符。

常用運(yùn)算操作符見表2.3,操作符之間的優(yōu)先級別見表2.4。

2/26/202451表2.3常用運(yùn)算操作符

2/26/202452表2.3常用運(yùn)算操作符(續(xù))

2/26/202453表2.4VHDL操作符優(yōu)先級

2/26/202454

2.各種操作符的使用說明

(1)邏輯運(yùn)算符要求運(yùn)算符左右的數(shù)據(jù)類型必須相同。例:x<=(aANDb)OR(NOTcANDd);

x<=bANDaANDdANDe;

x<=bORcORdORe;

x<=aXORdXORe;

a<=(x1ANDx2)OR(y1ANDy2);

(2)算術(shù)操作符在使用乘法運(yùn)算符時,應(yīng)該特別慎重,因?yàn)樗梢允惯壿嬮T數(shù)大大增加。

(3)關(guān)系運(yùn)算符應(yīng)該注意小于等于<=和代入運(yùn)算符的不同(從上下文區(qū)別)。

2/26/202455

(4)并置運(yùn)算符并置運(yùn)算符“&”用于位連接。例如:y(0)=b(0)&eny(1)=b(1)&eny(2)=b(2)&eny(3)=b(3)&eny(4)=a(0)y(5)=a(1)y(6)=a(2)y(7)=a(3)

從上可以看出a,b是四位長度的矢量,而y的位長是7位,上述情況可以表示成:

tmp_b<=bAND(en&en&en&en);

y<=a&tmp_b;

若是位連接,可以簡單寫為:

tmp_b<=bAND(en,en,en,en);

2/26/202456

2.3.5VHDL語言結(jié)構(gòu)體的描述方式

有3種描述方式:行為描述,RTL描述和ASIC描述,采用后兩種描述方式可以進(jìn)行邏輯綜合。

1.行為描述

描述數(shù)字系統(tǒng)的行為,主要用于仿真和系統(tǒng)工作原理的研究。下面介紹一些專用語句。

(1)代入語句格式:信號量<=敏感信號量表達(dá)式;例如:z<=aNOR(bNANDc);該例中有3個敏感量,無論哪一個發(fā)生變化都可以使z變化。具有時間延遲的代入語句:

a<=bAFTER10ns

表示當(dāng)b發(fā)生變化10ns后a才變化。

2/26/202457例:與門電路

ENTITYand2ISPORT(a,b:INBIT;

c:OUTBIT);

ENDand2;

ARCHITECTUREand2_behaveOFand2ISBEGINc<=aANDb;

ENDand2_behave;

(2)延時語句

VHDL中有兩種延時語句:慣性延時和傳輸延時。

VHDL中慣性延時是缺省的,因?yàn)檫壿嬘布娐房偸怯袝r間延遲的,若延遲時間是20ns,那么入信號時間若小于20ns,則輸出信號將不跟隨輸入信號的變化。有時為使延遲時間更逼真實(shí)際電路,就專門設(shè)置慣性時間:

b<=aAFTER10ns;

傳輸延時常代表總線、連接線的延遲時間,該時間必須專門說明。該傳輸延時只對信號起純延時作用。例:b<=TRANSPORTaAFTER20ns;

2/26/202458

2.數(shù)據(jù)流描述方式數(shù)據(jù)流描述方式是一種可以進(jìn)行邏輯綜合的描述方式,由于要進(jìn)行邏輯綜合所以對使用的語句有一定的限制,VHDL中的每一個命令和語句都對邏輯綜合能力進(jìn)行了定義,要進(jìn)行邏輯綜合的設(shè)計(jì)實(shí)體就要使用有邏輯綜合能力的命令和語句?!纠?.15】四選一電路

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmux42ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);

Sel:INSTD_LOGIC_VECTOR(1DOWNTO0);

Y:OUTSTD_LOGIC);

ENDmux42;

ARCHITECTUREappOFmux42ISBEGINy<=input(0)WHENsel=0ELSEinput(1)WHENsel=1ELSEinput(2)WHENsel=2ELSEinput(3);ENDapp;

2/26/2024593.結(jié)構(gòu)描述方式注重調(diào)用已有的元件或門級電路之間的連線是結(jié)構(gòu)描述的特點(diǎn),結(jié)構(gòu)描述可以提高設(shè)計(jì)效率。

(1)元件聲明語句元件聲明語句用于調(diào)用已生成的元件,這些元件可能在庫中,也可能是預(yù)先編寫的元件實(shí)體描述。元件聲明語句的格式:

COMPONENT元件名

PORT說明;

ENDCOMPONENT;

元件聲明語句可以在Architecture,Package和Block的說明部分。

2/26/202460

(2)元件調(diào)用語句格式:

標(biāo)號名:元件名

PORTMAP(信號,…);兩層信號之間的關(guān)系為映射關(guān)系,該映射有兩種:位置映射和名稱映射。①位置映射例有一元件的端口說明為:

port(a,b:inbit;

c:outbit);

調(diào)用該元件時:

U2:元件名

portmap(n1,n2,m);這里n1對應(yīng)a,n2對應(yīng)

b,m對應(yīng)c。②名稱映射例該映射就是將庫中已有模塊的端口名稱,賦予設(shè)計(jì)中的信號名.

U2:元件名portmap(a=>n1,b=>n2,c=>m);

2/26/2024612.4VHDL順序語句順序語句(SequentialStaements)和并行語句(ConcurrentStatements)是VHDL程序設(shè)計(jì)中兩大基本描述語句系列。在邏輯系統(tǒng)的設(shè)計(jì)中,這些語句從多側(cè)面完整地描述數(shù)字系統(tǒng)的硬件結(jié)構(gòu)和基本邏輯功能,其中包括通信的方式、信號的賦值、多層次的元件例化以及系統(tǒng)行為等。順序語句是相對于并行語句而言的,其特點(diǎn)是只能用在進(jìn)程和子程序中,它和其他高級語言一樣,其語句是按照語句的出現(xiàn)的順序加以執(zhí)行的。

VHDL有如下6類基本順序語句:等待語句;賦值語句;轉(zhuǎn)向控制語句;子程序調(diào)用語句;返回語句和空操作語句。

2/26/2024622.4.1等待語句和斷言語句

1.等待(WAIT)語句進(jìn)程在執(zhí)行過程中總是處于2種狀態(tài):執(zhí)行或掛起(Suspension),進(jìn)程的狀態(tài)變化受等待(WAIT)語句的控制,當(dāng)進(jìn)程執(zhí)行到WAIT語句,就被掛起,直到滿足此語句設(shè)置的結(jié)束掛起條件后,將重新開始執(zhí)行進(jìn)程或過程中的程序。但VHDL規(guī)定,已列出敏感量的進(jìn)程中不能使用任何形式的WAIT語句。

WAIT語句的語句格式如下:

WAIT[ON敏感信號表][UNTIL條件表達(dá)式][FOR時間表達(dá)式];

(1) 無限等待語句:WAIT

單獨(dú)的WAIT,未設(shè)置停止掛起條件的表達(dá)式,表示永遠(yuǎn)掛起。

2/26/202463(2)敏感信號等待語句:WAITON信號[,信號]

在信號表中列出的信號是等待語句的敏感信號。當(dāng)處于等待狀態(tài)時,敏感信號的任何變化(如從0~1或從1~0的變化)將結(jié)束掛起,再次啟動進(jìn)程。如:

WAITONa,b;

表示當(dāng)a或b中任一信號發(fā)生改變時,就恢復(fù)執(zhí)行WAIT語句之后的語句。例:

PROCESSBEGINy<=aANDb;

WAITONa,b;

ENDPROCESS;

(3)條件等待語句:WAITUNTIL布爾表達(dá)式當(dāng)進(jìn)程執(zhí)行到該語句時,被掛起;若布爾表達(dá)式為真時,進(jìn)程將被啟動。例:

WAITUNTIL((x*10)<100)

2/26/202464(4)WAITFOR時間表達(dá)式當(dāng)進(jìn)程執(zhí)行到該語句時,被掛起;等待一定的時間后,進(jìn)程將被啟動。例:WAITFOR20ns

WAITUNTILCLOCK='1';

--時鐘CLOCK上跳沿啟動進(jìn)程

例2.16中的進(jìn)程將完成一個硬件求平均的功能,每一個時鐘脈沖由A輸入一個數(shù)值,4個時鐘脈沖后將獲得此4個數(shù)值的平均值。

【例2.16】求4個數(shù)值的平均值程序PROCESSBEGINWAITUNTILCLK='1';AVE<=A;WAITUNTILCLK='1';AVE<=AVE+A;WAITUNTILCLK='1';AVE<=AVE+A;WAITUNTILCLK='1';AVE<=(AVE+A)/4;ENDPROCESS;

2/26/202465(5)多條件WAIT語句例:WAITONnmi,interruptUNTIL((nmi=TRUE)OR(interrupt=TRUE))FOR5us該等待有3個條件:第一,信號nmi和interrupt任何一個有一次刷新動作;第二,信號nmi和interrupt任何一個為真;第三,等待5μs。只要一個以上的條件被滿足,進(jìn)程就被啟動。

2.斷言(Assert)語句格式:

ASSERT條件

[REPORT輸出信息][SEVERITY級別]執(zhí)行到斷言語句時,判斷條件,若條件滿足就繼續(xù)執(zhí)行,否則輸出文字串和錯誤級別信息。例:ASSERT(tiaojian='1')REPORT"somethingwrong"

SEVERITYERROR;

2/26/2024662.4.2賦值語句

賦值語句的功能就是將一個值或一個表達(dá)式的運(yùn)算結(jié)果傳遞給某一數(shù)據(jù)對象,如信號或變量,或由此組成的數(shù)組。VHDL設(shè)計(jì)實(shí)體內(nèi)的數(shù)據(jù)傳遞以及對端口界面外部數(shù)據(jù)的讀寫都必須通過賦值語句的運(yùn)行來實(shí)現(xiàn)。賦值語句有兩種,即信號賦值語句和變量賦值語句。(1) 信號賦值語句格式:目的信號量<=信號量表達(dá)式例:a<=b;(2) 變量賦值語句格式:目的變量:=表達(dá)式例:c:=a+d;

2/26/202467變量賦值與信號賦值的區(qū)別在于,變量具有局部特征,它的有效只局限于所定義的一個進(jìn)程中,或一個子程序中,它是一個局部的、暫時性數(shù)據(jù)對象(在某些情況下)。對于它的賦值是立即發(fā)生的(假設(shè)進(jìn)程已啟動),即是一種時間延遲為零的賦值行為。信號則不同,信號具有全局性特征,它不但可以作為一個設(shè)計(jì)實(shí)體內(nèi)部各單元之間數(shù)據(jù)傳送的載體,而且可通過信號與其他的實(shí)體進(jìn)行通信(端口本質(zhì)上也是一種信號)。信號的賦值并不是立即發(fā)生的,它發(fā)生在一個進(jìn)程結(jié)束時。賦值過程總是有某種延時的,它反映了硬件系統(tǒng)并不是立即發(fā)生的,它發(fā)生在一個進(jìn)程結(jié)束時。賦值過程總是有某些延時的,它反映了硬件系統(tǒng)的重要特性,綜合后可以找到與信號對應(yīng)的硬件結(jié)構(gòu),如一根傳輸導(dǎo)線、一個輸入輸出端口或一個D觸發(fā)器等。讀者可以從例例2.17中看出信號與變量賦值的特點(diǎn)及它們的區(qū)別。當(dāng)在同一賦值目標(biāo)處于不同進(jìn)程中時,其賦值結(jié)果就比較復(fù)雜了,這可以看成是多個信號驅(qū)動源連接在一起,可以發(fā)生線與、線或或者三態(tài)等不同結(jié)果。

2/26/202468【例2.17】SIGNALS1,S2:STD_LOGIC;SIGNALSVEC:STD_LOGIC_VECTOR(0TO7);

...PROCESS(S1,S2)VARIABLEV1,V2:STD_LOGIC;

BEGINV1:='1';--立即將V1置位為1V2:='1';--立即將V2置位為1S1<='1';--S1被賦值為1S2<=‘1’;

--由于在本進(jìn)程中,這里的S2不是最后一個賦值語句故不做任何賦值操作SVEC(0)<=V1;--將V1在上面的賦值1,賦給SVEC(0)SVEC(1)<=V2;--將V2在上面的賦值1,賦給SVEC(1)SVEC(2)<=S1;--將S1在上面的賦值1,賦給SVEC(2)SVEC(3)<=S2;--將最下面的賦予S2的值‘0’,賦給SVEC(3)V1:='0';--將V1置入新值0V2:='0';--將V2置入新值0S2:='0';--由于這是S2最后一次賦值,賦值有效,此‘0’將上面準(zhǔn)備賦入的‘1’覆蓋掉SVEC(4)<=V1;--將V1在上面的賦值0,賦給SVEC(4)SVEC(5)<=V2;--將V2在上面的賦值0,賦給SVEC(5)SVEC(6)<=S1;--將

S1在上面的賦值1,賦給SVEC(6)SVEC(7)<=S2;--將S2在上面的賦值0,賦給SVEC(7)ENDPROCESS;

2/26/2024692.4.3轉(zhuǎn)向控制語句轉(zhuǎn)向控制語句通過條件控制開關(guān)決定是否執(zhí)行一條或幾條語句,或重復(fù)執(zhí)行一條或幾條語句,或跳過一條或幾條語句。轉(zhuǎn)向控制語句共有5種:IF語句、CASE語句、LOOP語句、NEXT語句和EXIT語句。

1.IF語句

IF語句是一種條件語句,語句中至少應(yīng)有一個條件句,條件句必須由布爾表達(dá)式構(gòu)成。IF語句根據(jù)條件句產(chǎn)生的判斷結(jié)果TRUE或FALSE,有條件地選擇執(zhí)行其后的順序語句。如果某個條件句的布爾值為真(TRUE),則執(zhí)行該條件句后的關(guān)鍵詞THEN后面的順序語句,否則結(jié)束該條件的執(zhí)行,或執(zhí)行ELSIF或ELSE后面的順序語句后結(jié)束該條件句的執(zhí)行……直到執(zhí)行到最外層的ENDIF語句,才完成全部IF語句的執(zhí)行。

2/26/202470(1)IF的門閂控制格式:IF條件

THEN

順序執(zhí)行語句

ENDIF;

例:IF(a=’1’)THENc<=b;

ENDIF;

格式二:IF條件

THEN

溫馨提示

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

評論

0/150

提交評論