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

下載本文檔

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

文檔簡(jiǎn)介

第2章VHDL硬件描述語(yǔ)言2.1VHDL概述2.2VHDL程序根本結(jié)構(gòu)2.3VHDL語(yǔ)言要素2.4VHDL順序語(yǔ)句2.5VHDL并行語(yǔ)句本章小結(jié)1/6/20241/6/202412.1VHDL概述2.1.1常用硬件描述語(yǔ)言簡(jiǎn)介常用硬件描述語(yǔ)言有VHDL、Verilog和ABEL語(yǔ)言。VHDL起源于美國(guó)國(guó)防部的VHSIC,Verilog起源于集成電路的設(shè)計(jì),ABEL那么來源于可編程邏輯器件的設(shè)計(jì)。下面從使用方面將3者進(jìn)行比照。(1)邏輯描述層次:一般的硬件描述語(yǔ)言可以在三個(gè)層次上進(jìn)行電路描述,其層次由高到低依次可分為行為級(jí)、RTL級(jí)和門電路級(jí)。VHDL語(yǔ)言是一種高級(jí)描述語(yǔ)言,適用于行為級(jí)和RTL級(jí)的描述,最適于描述電路的行為;Verilog語(yǔ)言和ABEL語(yǔ)言是一種較低級(jí)的描述語(yǔ)言,適用于RTL級(jí)和門電路級(jí)的描述,最適于描述門級(jí)電路。1/6/20241/6/20242(2)設(shè)計(jì)要求:VHDL進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí)可以不了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者所做的工作較少;Verilog和ABEL語(yǔ)言進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí)需了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者需做大量的工作。(3)綜合過程:任何一種語(yǔ)言源程序,最終都要轉(zhuǎn)換成門電路級(jí)才能被布線器或適配器所接受。因此,VHDL語(yǔ)言源程序的綜合通常要經(jīng)過行為級(jí)→RTL級(jí)→門電路級(jí)的轉(zhuǎn)化,VHDL幾乎不能直接控制門電路的生成。而Verilog語(yǔ)言和ABEL語(yǔ)言源程序的綜合過程要稍簡(jiǎn)單,即經(jīng)過RTL級(jí)→門電路級(jí)的轉(zhuǎn)化,易于控制電路資源。1/6/20241/6/20243(4)對(duì)綜合器的要求:VHDL描述語(yǔ)言層次較高,不易控制底層電路,因而對(duì)綜合器的性能要求較高,Verilog和ABEL對(duì)綜合器的性能要求較低。(5)支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的綜合器僅Dataio一家。(6)國(guó)際化程度:VHDL和Verilog已成為IEEE標(biāo)準(zhǔn),而ABEL正朝國(guó)際化標(biāo)準(zhǔn)努力。1/6/20241/6/202442.1.2VHDL及其優(yōu)點(diǎn)VHDL誕生于1982年,1987年底被IEEE和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語(yǔ)言。自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)硬件描述語(yǔ)言。1993年,IEEE對(duì)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)硬件描述語(yǔ)言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語(yǔ)言。有專家認(rèn)為,在新的世紀(jì)中,VHDL與Verilog語(yǔ)言將承擔(dān)起幾乎全部的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù)。1/6/20241/6/20245VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的語(yǔ)言形式和描述風(fēng)格與句法十分類似于一般的計(jì)算機(jī)高級(jí)語(yǔ)言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件、一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視局部,即端口)和內(nèi)部(或稱不可視局部),即設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成局部。在對(duì)一個(gè)設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外局部的概念是VHDL系統(tǒng)設(shè)計(jì)的根本點(diǎn)。應(yīng)用VHDL進(jìn)行工程設(shè)計(jì)的優(yōu)點(diǎn)是多方面的,具體如下:1/6/20241/6/20246(1)與其他的硬件描述語(yǔ)言相比,VHDL具有更強(qiáng)的行為描述能力。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。(2)VHDL具有豐富的仿真語(yǔ)句和庫(kù)函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期,就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對(duì)系統(tǒng)進(jìn)行仿真模擬,對(duì)整個(gè)工程的結(jié)構(gòu)和功能可行性做出判斷。(3)VHDL語(yǔ)句的行為描述能力和程序結(jié)構(gòu),決定了它具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。VHDL中設(shè)計(jì)實(shí)體的概念、程序包的概念、設(shè)計(jì)庫(kù)的概念為設(shè)計(jì)的分解和并行工作提供了有利的支持。1/6/20241/6/20247(4)用VHDL完成一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動(dòng)把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級(jí)網(wǎng)表。(5)VHDL對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性。設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管最終設(shè)計(jì)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。(6)由于VHDL具有類屬描述語(yǔ)句和子程序調(diào)用等功能,對(duì)于完成的設(shè)計(jì),在不改變?cè)闯绦虻臈l件下,只需改變類屬參量或函數(shù),就能輕易地改變?cè)O(shè)計(jì)的規(guī)模和結(jié)構(gòu)。

1/6/20241/6/202482.1.3VHDL程序設(shè)計(jì)約定便于程序的閱讀和調(diào)試,本書對(duì)VHDL程序設(shè)計(jì)特作如下約定:(1)語(yǔ)句結(jié)構(gòu)描述中方括號(hào)“[]”內(nèi)的內(nèi)容為可選內(nèi)容。(2)對(duì)于VHDL的編譯器和綜合器來說,程序文字的大小寫是不加區(qū)分的。本書一般使用大寫。(3)程序中的注釋使用雙橫線“--”。在VHDL程序的任何一行中,雙橫線“--”后的文字都不參加編譯和綜合。(4)為了便于程序的閱讀與調(diào)試,書寫和輸入程序時(shí),使用層次縮進(jìn)格式,同一層次的對(duì)齊,低層次的較高層次的縮進(jìn)兩個(gè)字符。1/6/20241/6/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是此描述對(duì)應(yīng)的邏輯圖,圖中,a和b分別為兩個(gè)數(shù)據(jù)輸入端的端口名,s為通道選擇控制信號(hào)輸入端的端口名,y為輸出端的端口名?!癿ux21a”是設(shè)計(jì)者為此器件取的名稱。圖2.2是對(duì)以上程序綜合后獲得的門級(jí)電路,可以認(rèn)為是多路選擇器mux21a的內(nèi)部電路結(jié)構(gòu)。圖2.1mux21a實(shí)體

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

1/6/20241/6/2024102.說明及分析可見,此電路的VHDL描述由兩大局部組成:(1)以關(guān)鍵詞ENTITY引導(dǎo),ENDENTITYmux2la結(jié)尾的語(yǔ)句局部,稱為實(shí)體。VHDL的實(shí)體描述了電路器件的外部情況及各信號(hào)端口的根本性質(zhì)。圖2.1可以認(rèn)為是實(shí)體的圖形表達(dá)。(2)以關(guān)鍵詞ARCHITECTURE引導(dǎo),ENDARCHITECTUREone結(jié)尾的語(yǔ)句局部,稱為結(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)的語(yǔ)句分為順序語(yǔ)句和并行語(yǔ)句。順序語(yǔ)句的執(zhí)行方式是按照語(yǔ)句的前后排列逐條順序執(zhí)行的,而并行語(yǔ)句都是同時(shí)執(zhí)行的,與語(yǔ)句的前后次序無(wú)關(guān)。1/6/20241/6/202411程序中的邏輯描述是用WHEN_ELSE結(jié)構(gòu)的并行語(yǔ)句表達(dá)的。它的含義是,當(dāng)滿足條件s='0',即s為低電平時(shí),a輸入端的信號(hào)傳送至y,否那么(即s為高電平時(shí))b輸入端的信號(hào)傳送至y。2選1多路選擇器的電路功能可以從圖2.3的時(shí)序波形中看出,分別向a和b端輸入兩個(gè)不同頻率的信號(hào)fa和fb(設(shè)fa>fb),當(dāng)s為高電平時(shí),y輸出fb,而當(dāng)s為低電平時(shí),y輸出fa。顯然,圖2.3的波形證實(shí)了VHDL邏輯設(shè)計(jì)的正確性。圖2.3mux21a功能時(shí)序波形圖

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

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

1.實(shí)體語(yǔ)句結(jié)構(gòu)實(shí)體說明單元的常用語(yǔ)句結(jié)構(gòu)如下:ENTITY實(shí)體名IS[GENERIC(類屬表);][PORT(端口表);]ENDENTITY實(shí)體名;1/6/20241/6/202415實(shí)體說明單元必須以語(yǔ)句“ENTITY實(shí)體名IS”開始,以語(yǔ)句“ENDENTITY實(shí)體名;”結(jié)束,其中的實(shí)體名是設(shè)計(jì)者自己給設(shè)計(jì)實(shí)體的命名,可作為其他設(shè)計(jì)實(shí)體對(duì)該設(shè)計(jì)實(shí)體進(jìn)行調(diào)用時(shí)用。中間在方括號(hào)內(nèi)的語(yǔ)句描述,在特定的情況下并非是必須的。例如構(gòu)建一個(gè)VHDL仿真測(cè)試基準(zhǔn)等情況中可以省去方括號(hào)中的語(yǔ)句。1/6/20241/6/2024162.類屬(GENERIC)說明語(yǔ)句類屬(GENERIC)參量是一種端口界面常數(shù),常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明局部。類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬的值可以由設(shè)計(jì)實(shí)體外部提供。因此,設(shè)計(jì)者可以從外面通過類屬參量的重新設(shè)定而容易地改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。類屬說明的一般書寫格式如下:GENERIC([常數(shù)名;數(shù)據(jù)類型[:設(shè)定值]{;常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]});1/6/20241/6/202417類屬參量以關(guān)鍵詞GENERIC引導(dǎo)一個(gè)類屬參量表,在表中提供時(shí)間參數(shù)或總線寬度等靜態(tài)信息。類屬表說明用于確定設(shè)計(jì)實(shí)體和其外部環(huán)境通信的參數(shù),傳遞靜態(tài)的信息。在一個(gè)實(shí)體中定義的、可以通過GENERIC參數(shù)類屬的說明,為它創(chuàng)立多個(gè)行為不同的邏輯結(jié)構(gòu)。比較常見的情況是選用類屬來動(dòng)態(tài)規(guī)定一個(gè)實(shí)體端口的大小,或設(shè)計(jì)實(shí)體的物理特性,或結(jié)構(gòu)體中的總線寬度,或設(shè)計(jì)實(shí)體中、底層中同種元件的例化數(shù)量等。一般在結(jié)構(gòu)體中,類屬的應(yīng)用與常數(shù)是一樣的。1/6/20241/6/202418【例2.2】2輸入與門的實(shí)體描述。ENTITYAND2ISGENERIC(RISEW:TIME:=1ns;FALLW:TIME:=1ns);PORT(A1:INSTD_LOGIC;A0:INSTD_LOGIC;Z0:OUTSTD_LOGIC);ENDENTITYAND2;這是一個(gè)準(zhǔn)備作為2輸入與門的設(shè)計(jì)實(shí)體的實(shí)體描述,在類屬說明中定義參數(shù)RISEW為上沿寬度,F(xiàn)ALLW為下沿寬度,它們分別為1ns,這兩個(gè)參數(shù)用于仿真模塊的設(shè)計(jì)。1/6/20241/6/202419

3.PORT端口說明

由PORT引導(dǎo)的端口說明語(yǔ)句是對(duì)于一個(gè)設(shè)計(jì)實(shí)體界面的說明。實(shí)體端口說明的一般書寫格式如下:PORT(端口名:端口模式數(shù)據(jù)類型;{端口名:端口模式數(shù)據(jù)類型});

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

1/6/20241/6/202420圖2.5端口模式符號(hào)圖IEEE1076標(biāo)準(zhǔn)包中定義了4種常用的端口模式,各端口模式的功能及符號(hào)分別見表2.1和圖2.5。表2.1端口模式說明1/6/20241/6/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。【例2.4】端口模式及IEEE庫(kù)數(shù)據(jù)類型定義舉例

LIBRARYIEEE;

;ENTITYmmISPORT(n0,n1,select:INSTD_LOGIC;Q:OUTSTD_LOGIC;Bus:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDmm;

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

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

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

ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS[說明語(yǔ)句]--內(nèi)部信號(hào),常數(shù),數(shù)據(jù)類型,函數(shù)等的定義BEGIN[功能描述語(yǔ)句]END[ARCHITECTURE][結(jié)構(gòu)體名];

【例2.5】

ENTITYnaxISPORT(a0,a1:INBIT;Sel:INBIT;Sh:OUTBIT);ENDnax;ARCHITECTUREdataflowOFnaxISBEGINsh<=(a0ANDsel)OR(NOTselANDa1);ENDdataflow;

1/6/20241/6/2024242.結(jié)構(gòu)體說明語(yǔ)句結(jié)構(gòu)體中的說明語(yǔ)句是對(duì)結(jié)構(gòu)體的功能描述語(yǔ)句中將要用到的信號(hào)(SIGNAL)、數(shù)據(jù)類型(TYPE)、常數(shù)(CONSTANT)、元件(COMPONENT)、函數(shù)(FUNCTION)和過程(PROCEDURE)等加以說明的語(yǔ)句。但在一個(gè)結(jié)構(gòu)體中說明和定義的數(shù)據(jù)類型、常數(shù)、元件、函數(shù)和過程只能用于這個(gè)結(jié)構(gòu)體中,假設(shè)希望其能用于其他的實(shí)體或結(jié)構(gòu)體中,那么需要將其作為程序包來處理。3.功能描述語(yǔ)句結(jié)構(gòu)體描述設(shè)計(jì)實(shí)體的具體行為,它包含兩類語(yǔ)句:(1)并行語(yǔ)句:并行語(yǔ)句總是在進(jìn)程語(yǔ)句(PROCESS)的外部,該語(yǔ)句的執(zhí)行與書寫順序無(wú)關(guān),總是同時(shí)被執(zhí)行。(2) 順序語(yǔ)句:順序語(yǔ)句總是在進(jìn)程語(yǔ)句(PROCESS)的內(nèi)部,從仿真的角度,該語(yǔ)句是順序執(zhí)行的。1/6/20241/6/202425

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

1/6/20241/6/202426

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

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

用塊語(yǔ)句實(shí)改的二選一電路ENTITYmuxISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux;ARCHITECTUREconnectOFmuxISSIGNALtmp1,tmp2,tmp3:BIT;BEGINcale:BLOCKBEGINtmp1<=d0ANDsel;tmp2<=d1AND(NOTsel);tmp3<=tmp1ORtmp2;q<=tmp3;ENDBLOCKcale;

ENDconnect;

1/6/20241/6/2024272)進(jìn)程(Process)描述進(jìn)程描述的格式如下:

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

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

ENTITYmux1ISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux1;ARCHITECTUREconnectOFmux1ISBEGINcale:

VARIABLEtmp1,tmp2,tmp3:BIT;--在進(jìn)程中定義的變量BEGINtmp1:=d0ANDsel;--輸入端口向變量賦值tmp2:=d1AND(NOTsel);tmp3:=tmp1ORtmp2;q<=tmp3ENDPROCESScale;

ENDconnect;

1/6/20241/6/2024283)子程序描述

子程序的概念和其它高級(jí)程序中子程序的概念相同,在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ǔ)句應(yīng)用舉例

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

1/6/20241/6/202429【例2.8】PROCEDURE語(yǔ)句應(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;

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

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

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

PACKAGE包名IS[說明語(yǔ)句]END包名(2)包體格式:

PACKAGEBODY包名IS[說明語(yǔ)句]END包名;1/6/20241/6/202432【例2.11】包頭

PACKAGElogicISTYPEthree_level_logicIS(‘0’,’1’,’z’);--數(shù)據(jù)類型工程CONSTANTunknown_value:three_level_logic:=’0’;--常數(shù)工程FUNCTIONinvert(input:three_level_logic)--函數(shù)工程RETURNthree_level_logic;ENDlogic;1/6/20241/6/2024332.2.5配置用于在多結(jié)構(gòu)體中的實(shí)體中選擇結(jié)構(gòu)體,例如,在做RS觸發(fā)器的實(shí)體中使用了2個(gè)結(jié)構(gòu)體,目的是研究各個(gè)結(jié)構(gòu)體描述的RS觸發(fā)器的行為性能如何,但是究竟在仿真中使用哪一個(gè)結(jié)構(gòu)體的問題就是配置問題。配置語(yǔ)句格式:

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

[說明語(yǔ)句]

END配置名;

1/6/20241/6/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;

1/6/20241/6/2024352.3VHDL語(yǔ)言要素2.3.1VHDL文字規(guī)那么VHDL文字(Literal)主要包括數(shù)值和標(biāo)識(shí)符。數(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)于一個(gè)空的間隔符,而沒有其他的意義,因而不影響文字本身的數(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.01/6/20241/6/202436(3)以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由5個(gè)局部組成。第1局部,用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù);第2局部,數(shù)制隔離符號(hào)“#”;第3局部,表達(dá)的文字;第4局部,指數(shù)隔離符號(hào)“#”;第5局部,用十進(jìn)制表示的指數(shù)局部,這一局部的數(shù)如果是0可以省去不寫。現(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)1/6/20241/6/2024372.字符串型文字字符是用單引號(hào)引起來的ASCII字符,可以是數(shù)值,也可以是符號(hào)或字母,如:‘A’,‘*’,‘Z’。而字符串那么是一維的字符數(shù)組,須放在雙引號(hào)中。VHDL中有兩種類型的字符串:文字字符串和數(shù)位字符串。(1)文字字符串:文字字符串是用雙引號(hào)引起來的一串文字,如:“ERROR”,“X”。(2)數(shù)位字符串:數(shù)位字符串也稱位矢量,是預(yù)定義的數(shù)據(jù)類型BIT的一位數(shù)組,它們所代表的是二進(jìn)制、八進(jìn)制或十六進(jìn)制的數(shù)組,其位矢量的長(zhǎng)度即為等值的二進(jìn)制數(shù)的位數(shù)。數(shù)位字符串的表示首先要有計(jì)算基數(shù),然后將該基數(shù)表示的值放在雙引號(hào)中,基數(shù)符放在字符串的前面,分別以“B”、“O”和“X”表示二、八、十六進(jìn)制基數(shù)符號(hào)。例如:B“1_1101_1110” --二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長(zhǎng)度是9X“AD0”--十六進(jìn)制數(shù)數(shù)組,位矢數(shù)組長(zhǎng)度是121/6/20241/6/2024383.標(biāo)識(shí)符標(biāo)識(shí)符用來定義常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字。VHDL的根本標(biāo)識(shí)符就是以英文字母開頭,不連續(xù)使用下劃線“_”,不以下劃線“_”結(jié)尾的,由26個(gè)大小寫英文字母、數(shù)字0~9以及下劃線“_”組成的字符串。VHDL的保存字不能用于作為標(biāo)識(shí)符使用。如:DECODER_1,F(xiàn)FT,Sig_N,NOT_ACK,State0,Idle是合法的標(biāo)識(shí)符;而_DECODER_1,2FFT,SIG_#N,NOT_ACK,RYY_RST,data_BUS,RETURN那么是非法的標(biāo)識(shí)符。4.下標(biāo)名及下標(biāo)段名下標(biāo)名用于指示數(shù)組型變量或信號(hào)的某一元素,而下標(biāo)段名那么用于指示數(shù)組型變量或信號(hào)的某一段元素,其語(yǔ)句格式如下:

數(shù)組類型信號(hào)名或變量名(表達(dá)式1[TO/DOWNTO表達(dá)式2]);表達(dá)式的數(shù)值必須在數(shù)組元素下標(biāo)號(hà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)表示1/6/20241/6/2024392.3.2VHDL數(shù)據(jù)對(duì)象

在VHDL中,數(shù)據(jù)對(duì)象(DataObjects)類似于一種容器,它接受不同數(shù)據(jù)類型的賦值。數(shù)據(jù)對(duì)象有三種,即常量(CONSTANT)、變量(VARIABLE)和信號(hào)(SIGNAL)。1.常量常量的定義和設(shè)置主要是為了使設(shè)計(jì)實(shí)體中的常數(shù)更容易閱讀和修改。例如,將位矢的寬度定義為一個(gè)常量,只要修改這個(gè)常量就能很容易地改變寬度,從而改變硬件結(jié)構(gòu)。在程序中,常量是一個(gè)恒定不變的值,一旦作了數(shù)據(jù)類型的賦值定義后,在程序中不能再改變,因而具有全局意義。常量的描述格式:

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

例:CONSTANTVcc:REAL:=5.0;CONSTANTDALY:TIME:=100ns;CONSTANTFBUS:BIT_VECTOR:=”0101”;1/6/20241/6/2024402.變量(VARIABLE)在VHDL語(yǔ)法規(guī)那么中,變量是一個(gè)局部量,只能在進(jìn)程和子程序中使用。變量不能將信息帶出對(duì)它作出定義的當(dāng)前設(shè)計(jì)單元。變量的賦值是一種理想化的數(shù)據(jù)傳輸,是立即發(fā)生,不存在任何延時(shí)的行為。VHDL語(yǔ)言規(guī)那么不支持變量附加延時(shí)語(yǔ)句。變量常用在實(shí)現(xiàn)某種算法的賦值語(yǔ)句中。變量只能在進(jìn)程、函數(shù)和過程中使用,一旦賦值立即生效。

定義變量的語(yǔ)法格式如下:VARIABLE變量名:數(shù)據(jù)類型:=初始值;例如:VARIABLEA:INTEGER;--定義A為整數(shù)型變量VARIABLEB,C:INTEGER:=2;--定義B和C為整型變量,初始值為2VARIABLEcount:INTEGERRANGE0TO255:=10;

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

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

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

例:SIGNALsys_clk:BIT:=‘0’;

--定義了一個(gè)位BIT的信號(hào)sys_clk,初始值為0SIGNALS1:STD_LOGIG﹕=0;--定義了一個(gè)標(biāo)準(zhǔn)位的單值信號(hào)S1,初始值為低電平SIGNALS4:STD_LOGIC_VECTOR(15DOWNTO0);--定義了一個(gè)位矢量(數(shù)組、總線)信號(hào)S4共有16個(gè)信號(hào)元素在程序中,信號(hào)值輸入信號(hào)時(shí)采用代入符”<=”,而不是賦值符“:=”,同時(shí)信號(hào)可以附加延時(shí)。信號(hào)是一個(gè)全局量,可以用來進(jìn)行進(jìn)程之間的通信。信號(hào)傳送語(yǔ)句:

s1<=s2AFTER10ns

1/6/20241/6/2024432.3.3VHDL數(shù)據(jù)類型VHDL是一種強(qiáng)類型語(yǔ)言,要求設(shè)計(jì)實(shí)體中的每一個(gè)常數(shù)、信號(hào)、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型的量才能互相傳遞和作用。VHDL作為強(qiáng)類型語(yǔ)言的好處是使VHDL編譯或綜合工具很容易地找出設(shè)計(jì)中的各種常見錯(cuò)誤。VHDL中的數(shù)據(jù)類型可以分成在現(xiàn)成程序包中可以隨時(shí)獲得的標(biāo)準(zhǔn)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型兩個(gè)類別。標(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ì)中隨時(shí)調(diào)用。1/6/20241/6/2024441.標(biāo)準(zhǔn)數(shù)據(jù)類型(1)整數(shù)(INTEGER)范圍:-2147483547~+2147483646,即可用32位有符號(hào)的二進(jìn)制數(shù)表示。如2、10E4、16#D2#。例:INTEGERRANGE100DOWNTO0(2)實(shí)數(shù)(REAL)范圍:-1.0E38~1.0E38,書寫時(shí)一定要有小數(shù)。如:65.36、8#43.6#E+4。(3)位(BIT)取值只能是用帶單引號(hào)的‘1’和‘0’來表示。(4)位矢量(BIT_VECTOR)位矢量是用雙引號(hào)括起來的一組位數(shù)據(jù),如“010101”。例:BIT_VECTOR(3DOWNTO0)(5)布爾量(BOOLEAN)只有“真”和“假”2個(gè)狀態(tài),可以進(jìn)行關(guān)系運(yùn)算。(6)字符(CHARACTER):字符通常用單引號(hào)括起來,對(duì)大小寫敏感。(7)字符串(STRING):字符串是雙引號(hào)括起來的一串字符,如“l(fā)aksdklakld”。(8)時(shí)間(TIME):完整的時(shí)間類型包括整數(shù)和物理量單位兩局部,整數(shù)和單位之間至少留一個(gè)空格,如55ms,20ns。1/6/20241/6/202445另外,在IEEE庫(kù)的程序包STD_LOGIC_1164中,定義了兩個(gè)非常重要的數(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種值,這意味著,對(duì)于定義為數(shù)據(jù)類型是標(biāo)準(zhǔn)邏輯位STD_LOGIC的數(shù)據(jù)對(duì)象,其可能的取值已非傳統(tǒng)的BIT那樣只有0和1兩種取值,而是如上定義的有9種可能的取值。在程序中使用此數(shù)據(jù)類型前,需參加下面的語(yǔ)句:LIBRARYIEEE;;(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ù)組中的每一個(gè)元素的數(shù)據(jù)類型都是以上定義的標(biāo)準(zhǔn)邏輯位STD_LOGIC。1/6/20241/6/2024462.用戶自定義數(shù)據(jù)類型VHDL允許用戶自行定義新的數(shù)據(jù)類型,如枚舉類型(ENUMERATIONTYPE)、整數(shù)類型(INTEGERTYPE)、數(shù)組類型(ARRAYTYPE)、記錄類型(RECORDTYPE)、時(shí)間類型(TIMETYPE)、實(shí)數(shù)類型(REALTYPE)等。用戶自定義數(shù)據(jù)類型是用類型定義語(yǔ)句TYPE和子類型定義語(yǔ)句SUBTYPE實(shí)現(xiàn)的。用戶自定義數(shù)據(jù)類型的一般格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義[OF根本數(shù)據(jù)類型];1/6/20241/6/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;1/6/20241/6/202448

3.?dāng)?shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換函數(shù)由VHDL語(yǔ)言的包提供,例如: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,位長(zhǎng))

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ù)表

1/6/20241/6/202449【例2.14】由STD_BIT_VECTOR轉(zhuǎn)換成INTEGERLIBRARY

IEEE;ENTITYadd5ISPORT(num:INSTD_LOGIC_VECTOR(2DOWNTO0);┇

);ENDadd5;ARCHITECTURErtlOFadd5ISSIGNALin_num:INTEGERRANGE0TO5;┇BEGIN

In_num<=CONV_INTEGER(num);

ENDrtl;

1/6/20241/6/2024502.3.4VHDL運(yùn)算操作符VHDL的各種表達(dá)式由操作數(shù)和操作符組成,其中操作數(shù)是各種運(yùn)算的對(duì)象,而操作符那么規(guī)定運(yùn)算的方式。1.操作符種類及對(duì)應(yīng)的操作數(shù)類型在VHDL中,有4類根本操作符,即邏輯操作符(LogicalOperator)、關(guān)系操作符(RelationalOperator)、算術(shù)操作符(ArithmeticOperator)和符號(hào)操作符(SignOperator)。根本操作符是完成邏輯和算術(shù)運(yùn)算的最根本的操作符的單元。此外還有重載操作符(OverloadingOperator),是對(duì)根本操作符作了重新定義的函數(shù)型操作符。常用運(yùn)算操作符見表2.3,操作符之間的優(yōu)先級(jí)別見表2.4。1/6/20241/6/202451表2.3常用運(yùn)算操作符1/6/20241/6/202452表2.3常用運(yùn)算操作符(續(xù))1/6/20241/6/202453表2.4VHDL操作符優(yōu)先級(jí)1/6/20241/6/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)算符時(shí),應(yīng)該特別慎重,因?yàn)樗梢允惯壿嬮T數(shù)大大增加。(3)關(guān)系運(yùn)算符應(yīng)該注意小于等于<=和代入運(yùn)算符的不同(從上下文區(qū)別)。1/6/20241/6/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是四位長(zhǎng)度的矢量,而y的位長(zhǎng)是7位,上述情況可以表示成:

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

假設(shè)是位連接,可以簡(jiǎn)單寫為:

tmp_b<=bAND(en,en,en,en);1/6/20241/6/202456

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

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

描述數(shù)字系統(tǒng)的行為,主要用于仿真和系統(tǒng)工作原理的研究。下面介紹一些專用語(yǔ)句。(1)代入語(yǔ)句格式:信號(hào)量<=敏感信號(hào)量表達(dá)式;例如:z<=aNOR(bNANDc);該例中有3個(gè)敏感量,無(wú)論哪一個(gè)發(fā)生變化都可以使z變化。具有時(shí)間延遲的代入語(yǔ)句:

a<=bAFTER10ns

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

1/6/20241/6/202457例:與門電路

ENTITYand2ISPORT(a,b:INBIT;c:OUTBIT);ENDand2;ARCHITECTUREand2_behaveOFand2ISBEGINc<=aANDb;ENDand2_behave;(2)延時(shí)語(yǔ)句VHDL中有兩種延時(shí)語(yǔ)句:慣性延時(shí)和傳輸延時(shí)。VHDL中慣性延時(shí)是缺省的,因?yàn)檫壿嬘布娐房偸怯袝r(shí)間延遲的,假設(shè)延遲時(shí)間是20ns,那么入信號(hào)時(shí)間假設(shè)小于20ns,那么輸出信號(hào)將不跟隨輸入信號(hào)的變化。有時(shí)為使延遲時(shí)間更逼真實(shí)際電路,就專門設(shè)置慣性時(shí)間:

b<=aAFTER10ns;

傳輸延時(shí)常代表總線、連接線的延遲時(shí)間,該時(shí)間必須專門說明。該傳輸延時(shí)只對(duì)信號(hào)起純延時(shí)作用。例:b<=TRANSPORTaAFTER20ns;1/6/20241/6/2024582.數(shù)據(jù)流描述方式數(shù)據(jù)流描述方式是一種可以進(jìn)行邏輯綜合的描述方式,由于要進(jìn)行邏輯綜合所以對(duì)使用的語(yǔ)句有一定的限制,VHDL中的每一個(gè)命令和語(yǔ)句都對(duì)邏輯綜合能力進(jìn)行了定義,要進(jìn)行邏輯綜合的設(shè)計(jì)實(shí)體就要使用有邏輯綜合能力的命令和語(yǔ)句?!纠?.15】四選一電路

LIBRARYIEEE;;;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;

1/6/20241/6/2024593.結(jié)構(gòu)描述方式注重調(diào)用已有的元件或門級(jí)電路之間的連線是結(jié)構(gòu)描述的特點(diǎn),結(jié)構(gòu)描述可以提高設(shè)計(jì)效率。(1)元件聲明語(yǔ)句元件聲明語(yǔ)句用于調(diào)用已生成的元件,這些元件可能在庫(kù)中,也可能是預(yù)先編寫的元件實(shí)體描述。元件聲明語(yǔ)句的格式:

COMPONENT元件名PORT說明;ENDCOMPONENT;

元件聲明語(yǔ)句可以在Architecture,Package和Block的說明局部。1/6/20241/6/202460(2)元件調(diào)用語(yǔ)句格式:

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

port(a,b:inbit;c:outbit);

調(diào)用該元件時(shí):U2:元件名portmap(n1,n2,m);這里n1對(duì)應(yīng)a,n2對(duì)應(yīng)b,m對(duì)應(yīng)c。②名稱映射例該映射就是將庫(kù)中已有模塊的端口名稱,賦予設(shè)計(jì)中的信號(hào)名.

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

1/6/20241/6/2024612.4VHDL順序語(yǔ)句順序語(yǔ)句(SequentialStaements)和并行語(yǔ)句(ConcurrentStatements)是VHDL程序設(shè)計(jì)中兩大根本描述語(yǔ)句系列。在邏輯系統(tǒng)的設(shè)計(jì)中,這些語(yǔ)句從多側(cè)面完整地描述數(shù)字系統(tǒng)的硬件結(jié)構(gòu)和根本邏輯功能,其中包括通信的方式、信號(hào)的賦值、多層次的元件例化以及系統(tǒng)行為等。順序語(yǔ)句是相對(duì)于并行語(yǔ)句而言的,其特點(diǎn)是只能用在進(jìn)程和子程序中,它和其他高級(jí)語(yǔ)言一樣,其語(yǔ)句是按照語(yǔ)句的出現(xiàn)的順序加以執(zhí)行的。VHDL有如下6類根本順序語(yǔ)句:等待語(yǔ)句;賦值語(yǔ)句;轉(zhuǎn)向控制語(yǔ)句;子程序調(diào)用語(yǔ)句;返回語(yǔ)句和空操作語(yǔ)句。1/6/20241/6/2024622.4.1等待語(yǔ)句和斷言語(yǔ)句

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

(1) 無(wú)限等待語(yǔ)句:WAIT單獨(dú)的WAIT,未設(shè)置停止掛起條件的表達(dá)式,表示永遠(yuǎn)掛起。

1/6/20241/6/202463(2)敏感信號(hào)等待語(yǔ)句:WAITON信號(hào)[,信號(hào)]在信號(hào)表中列出的信號(hào)是等待語(yǔ)句的敏感信號(hào)。當(dāng)處于等待狀態(tài)時(shí),敏感信號(hào)的任何變化(如從0~1或從1~0的變化)將結(jié)束掛起,再次啟動(dòng)進(jìn)程。如:

WAITONa,b;

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

PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;

(3)條件等待語(yǔ)句:WAITUNTIL布爾表達(dá)式當(dāng)進(jìn)程執(zhí)行到該語(yǔ)句時(shí),被掛起;假設(shè)布爾表達(dá)式為真時(shí),進(jìn)程將被啟動(dòng)。例:WAITUNTIL((x*10)<100)1/6/20241/6/202464(4)WAITFOR時(shí)間表達(dá)式當(dāng)進(jìn)程執(zhí)行到該語(yǔ)句時(shí),被掛起;等待一定的時(shí)間后,進(jìn)程將被啟動(dòng)。例:WAITFOR20ns

WAITUNTILCLOCK='1';--時(shí)鐘CLOCK上跳沿啟動(dòng)進(jìn)程

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

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

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

2.斷言(Assert)語(yǔ)句格式:ASSERT條件[REPORT輸出信息][SEVERITY級(jí)別]執(zhí)行到斷言語(yǔ)句時(shí),判斷條件,假設(shè)條件滿足就繼續(xù)執(zhí)行,否那么輸出文字串和錯(cuò)誤級(jí)別信息。例:ASSERT(tiaojian='1')REPORT"somethingwrong"SEVERITYERROR;1/6/20241/6/2024662.4.2賦值語(yǔ)句

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

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

1/6/20241/6/2024692.4.3轉(zhuǎn)向控制語(yǔ)句轉(zhuǎn)向控制語(yǔ)句通過條件控制開關(guān)決定是否執(zhí)行一條或幾條語(yǔ)句,或重復(fù)執(zhí)行一條或幾條語(yǔ)句,或跳過一條或幾條語(yǔ)句。轉(zhuǎn)向控制語(yǔ)句共有5種:IF語(yǔ)句、CASE語(yǔ)句、LOOP語(yǔ)句、NEXT語(yǔ)句和EXIT語(yǔ)句。1.IF語(yǔ)句IF語(yǔ)句是一種條件語(yǔ)句,語(yǔ)句中至少應(yīng)有一個(gè)條件句,條件句必須由布爾表達(dá)式構(gòu)成。IF語(yǔ)句根據(jù)條件句產(chǎn)生的判斷結(jié)果TRUE或FALSE,有條件地選擇執(zhí)行其后的順序語(yǔ)句。如果某個(gè)條件句的布爾值為真(TRUE),那么執(zhí)行該條件句后的關(guān)鍵詞THEN后面的順序語(yǔ)句,否那么結(jié)束該條件的執(zhí)行,或執(zhí)行ELSIF或ELSE后面的順序語(yǔ)句后結(jié)束該條件句的執(zhí)行……直到執(zhí)行到最外層的ENDIF語(yǔ)句,才完成全部IF語(yǔ)句的執(zhí)行。1/6/20241/6/202470(1)IF的門閂控制格式:IF條件THEN

順序執(zhí)行語(yǔ)句ENDIF;

例:IF(a=’1’)THENc<=b;ENDIF;格式二:IF條件THEN

順序執(zhí)行語(yǔ)句ELSIF條件THEN

順序執(zhí)行語(yǔ)句

ELSIF條件THEN

順序執(zhí)行語(yǔ)句ENDIF;(2)IF語(yǔ)句的選擇控制格式一:IF條件THEN

順序執(zhí)行語(yǔ)句ELSE

順序執(zhí)行語(yǔ)句ENDIF;1/6/20241/6/202471

【例2.18】IF語(yǔ)句完成的一個(gè)具有2輸入與門功能的函數(shù)定義。FUNCTIONAND_FUNC(X,Y:INBIT)RETURNBITISBEGINIFX=‘1’ANDY=‘1’THENRETURN‘1’;ELSERETURN‘0’;ENDIF;ENDAND_FUNC;1/6/20241/6/202472【例2.19】IF語(yǔ)句的選擇控制程序舉例LIBRARYIEEE;;ENTITYCONTROL_STMTSISPORT(A,B,C:INBOOLEAN;OUTPUT:OUTBOOLEAN);ENDCONTROL_STMTS;ARCHITECTUREEXAMPLEOFCONTROL_STMTSISBEGINPROCESS(A,B,C)VARIABLEN:BOOLEAN;BEGINIFATHENN:=B;ELSEN:=C;ENDIF;OUTPUT<=N;ENDPROCESS,ENDEXAMPLE;圖2.6例2.19對(duì)應(yīng)的硬件電路

1/6/20241/6/202473

2.CASE語(yǔ)句

CASE語(yǔ)句根據(jù)滿足的條件直接選擇多項(xiàng)順序語(yǔ)句中的一項(xiàng)執(zhí)行。CASE語(yǔ)句的結(jié)構(gòu)如下:CASE表達(dá)式ISWHEN選擇值=>順序語(yǔ)句;WHEN選擇值=>順序語(yǔ)句;[WHENOTHERS=>順序語(yǔ)句;]…ENDCASE;選擇值可以有4種不同的表達(dá)方式:①單個(gè)普通數(shù)值,如4;②數(shù)值選擇范圍,如(2TO4),表示取值2、3或4;③并列數(shù)值,如3|5,表示取值為3或者5;④混合方式,以上三種方式的混合。1/6/20241/6/202474當(dāng)執(zhí)行到CASE語(yǔ)句時(shí),首先計(jì)算表達(dá)式的值,然后根據(jù)條件句中與之相同的選擇值,執(zhí)行對(duì)應(yīng)的順序語(yǔ)句,最后結(jié)束CASE語(yǔ)句。表達(dá)式可以是一個(gè)整數(shù)類型或枚舉類型的值,也可以是由這些數(shù)據(jù)類型的值構(gòu)成的數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論