第3章 組合電路的VHDL設(shè)計(jì)_第1頁(yè)
第3章 組合電路的VHDL設(shè)計(jì)_第2頁(yè)
第3章 組合電路的VHDL設(shè)計(jì)_第3頁(yè)
第3章 組合電路的VHDL設(shè)計(jì)_第4頁(yè)
第3章 組合電路的VHDL設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章組合電路的VHDL設(shè)計(jì)組合電路的VHDL設(shè)計(jì)3.1多路選擇器及其VHDL描述3.2半加器及其VHDL描述3.34選1多路選擇器及其VHDL描述3.4全加器及其VHDL表述3.5乘法器及其VHDL描述

本章首先給出幾種大家熟知的簡(jiǎn)單而典型的組合電路實(shí)例,然后按以下幾個(gè)步驟,由淺入深地引領(lǐng)大家進(jìn)入“VHDL語(yǔ)言”與“電路情景”之間的對(duì)話——

(1)電路實(shí)例作為情景(Episode)探討其性能特點(diǎn)和設(shè)計(jì)方法;(2)針對(duì)電路情景的具體對(duì)象,給出對(duì)應(yīng)的VHDL表述;(3)對(duì)VHDL表述中出現(xiàn)的語(yǔ)句含義作詳細(xì)解釋,力圖從整體和實(shí)用角度把握VHDL與電路情景的對(duì)應(yīng)關(guān)系,以及程序的基本結(jié)構(gòu),表述特點(diǎn)和設(shè)計(jì)方法,快速進(jìn)入VHDL世界;(4)隨后將學(xué)到的知識(shí)在QuartusII和FPGA平臺(tái)上加以驗(yàn)證和自主發(fā)揮,鞏固學(xué)習(xí)效果、提高學(xué)習(xí)興趣、強(qiáng)化理論與工程實(shí)際的結(jié)合。組合電路的VHDL設(shè)計(jì)3.1多路選擇器及其VHDL描述

2選1多路選擇器具備組合邏輯電路的簡(jiǎn)單性和典型性的特征。3.1多路選擇器及其VHDL描述

例3-1給出的是mux21a所對(duì)應(yīng)的VHDL完整描述之一。此描述展示了可綜合的VHDL程序的模塊結(jié)構(gòu)。對(duì)于此程序,可使用VHDL綜合器直接綜合出實(shí)現(xiàn)此模塊功能的邏輯電路,其電路功能見圖3-3所示的時(shí)序波形??梢哉J(rèn)為,圖3-1的模塊與圖3-3的波形功能表述具有唯一對(duì)應(yīng)關(guān)系,而其電路結(jié)構(gòu)表述卻沒(méi)有唯一性。即對(duì)于既定的電路功能描述,對(duì)應(yīng)的電路結(jié)構(gòu)并不唯一,它可以對(duì)應(yīng)不同的電路構(gòu)建方式,這取決于:VHDL綜合器的基本元件庫(kù)的來(lái)源、優(yōu)化方向和約束的選擇,以及目標(biāo)器件(如FPGA)的結(jié)構(gòu)特點(diǎn)等。其實(shí),基于EDA的數(shù)字系統(tǒng)設(shè)計(jì)更注重最終完成的電路功能和性能(包括系統(tǒng)速度,資源利用率等)而非電路構(gòu)建形式。3.1多路選擇器及其VHDL描述

3.1多路選擇器及其VHDL描述

VHDL描述的兩大組成部分——

(1)實(shí)體:以關(guān)鍵詞(或關(guān)鍵字)ENTITY引導(dǎo),ENDENTITYmux21a結(jié)尾的語(yǔ)句部分。例3-1中的mux21a稱為實(shí)體名,。VHDL的實(shí)體描述電路器件的外部情況及各信號(hào)端口的基本性質(zhì),如信號(hào)流動(dòng)方向、流動(dòng)信號(hào)的數(shù)據(jù)類型等。圖3-1可以認(rèn)為是此實(shí)體的圖形表述。

(2)結(jié)構(gòu)體:以關(guān)鍵詞ARCHITECTURE引導(dǎo),ENDARCHITECTUREbhv結(jié)尾的語(yǔ)句部分。例3-1中的bhv稱為結(jié)構(gòu)體名。結(jié)構(gòu)體負(fù)責(zé)描述電路器件的內(nèi)部邏輯功能和電路結(jié)構(gòu)。圖3-2所示的是此結(jié)構(gòu)體的某種可能的電路結(jié)構(gòu)表達(dá)。下面對(duì)例3-1中出現(xiàn)的相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法含義作出說(shuō)明。3.1多路選擇器及其VHDL描述

1.條件語(yǔ)句

VHDL結(jié)構(gòu)體中,用于描述邏輯功能和電路結(jié)構(gòu)的語(yǔ)句分為順序語(yǔ)句和并行語(yǔ)句兩部分。

●順序語(yǔ)句:按照語(yǔ)句的前后排列方式逐條順序執(zhí)行。

●并行語(yǔ)句:無(wú)論有多少行語(yǔ)句,都同時(shí)執(zhí)行,與次序無(wú)關(guān)。

★“IF_THEN_ELSE”語(yǔ)句屬于順序語(yǔ)句

——

由關(guān)鍵詞IF引導(dǎo),首先通過(guò)條件語(yǔ)句判斷:表達(dá)式(s=‘1’),即s為高電平,執(zhí)行賦值語(yǔ)句y<=a,即將a端口的數(shù)據(jù)向y輸出;否則(即ELSE),即s為低電平,則執(zhí)行賦值語(yǔ)句y<=b。最后以“ENDIF;”結(jié)束。

用于條件語(yǔ)句的判斷表達(dá)式可以是一個(gè)值,也可以是更復(fù)雜的邏輯或運(yùn)算表達(dá)式。如例3-1中的(s=‘1’)或以下IF語(yǔ)句表述中的a或(s1=‘0’)AND(s2=‘1’)OR(c<b+1)。其表達(dá)形式不同,但本質(zhì)上都輸出一個(gè)用于作邏輯判斷的布爾值:“真”或“偽”。3.1多路選擇器及其VHDL描述

2.數(shù)據(jù)類型

PORT語(yǔ)句中端口信號(hào)a、b、s和y的數(shù)據(jù)類型都為BIT。

VHDL規(guī)定:任何一種數(shù)據(jù)對(duì)象的應(yīng)用都必須對(duì)其傳輸或存儲(chǔ)的數(shù)據(jù)的類型要作明確的界定。因此,在VHDL設(shè)計(jì)中,必須預(yù)先定義好要使用的數(shù)據(jù)類型,這對(duì)于大規(guī)模電路描述的排錯(cuò)十分有利。數(shù)據(jù)類型:整數(shù)類型INTEGER、布爾類型BOOLEAN和標(biāo)準(zhǔn)邏輯類型STD_LOGIC等。

BIT數(shù)據(jù)類型:信號(hào)規(guī)定的取值范圍是邏輯位‘1’和‘0’。在VHDL中,邏輯位0和1的表達(dá)必須加單引號(hào);否則,VHDL綜合器將其解釋為整數(shù)數(shù)據(jù)類型INTEGER,即:將1理解為1、2、3的1,而非二進(jìn)制0、1的1,或邏輯位的1。3.1多路選擇器及其VHDL描述

2.數(shù)據(jù)類型

BIT數(shù)據(jù)類型:可參與邏輯運(yùn)算,結(jié)果仍是邏輯位的數(shù)據(jù)類型。

VHDL綜合器:用1個(gè)二進(jìn)制位表示BIT類型或BOOLEAN類型。例如:將例3-1中的端口信號(hào)a、b、s和y的數(shù)據(jù)類型都定義為BIT,即表示它們的取值范圍,或者說(shuō)數(shù)據(jù)范圍都被限定在邏輯位‘1’和‘0’兩個(gè)值的范圍內(nèi)。條件語(yǔ)句中判斷表達(dá)式,如(s1=‘0’),輸出的是判斷結(jié)果,分別是“TURE”或“FALSE”,其數(shù)據(jù)類型是BOOLEAN,在數(shù)值上分別對(duì)應(yīng)‘1’(真)或‘0’(偽)。即如果s1為低電平,則在綜合器(s1=‘0’)=‘1’。注:這個(gè)由條件判斷式計(jì)算出來(lái)的值‘1’的數(shù)據(jù)類型是BOOLEAN(代表“真”或“偽”的判斷結(jié)果),不是二進(jìn)制的‘1’(其類型可以是BIT)。3.1多路選擇器及其VHDL描述

3.進(jìn)程語(yǔ)句和順序語(yǔ)句

進(jìn)程語(yǔ)句:由PROCESS引導(dǎo)的語(yǔ)句。在VHDL中,所有順序描述語(yǔ)句都必須放在進(jìn)程語(yǔ)句中(也包括放在過(guò)程語(yǔ)句中)。例3-1可見,順序語(yǔ)句“IF_THEN_ELSE_ENDIF;”是放在由PROCESS至ENDPROCESS引導(dǎo)的語(yǔ)句結(jié)構(gòu)中的。

敏感信號(hào)表:PROCESS旁的(a,b,s)。通常要求將進(jìn)程中所有的輸入信號(hào)都放在敏感信號(hào)表中。例如例3-1中的輸入信號(hào)a、b和s出現(xiàn)在了進(jìn)程語(yǔ)句中,所以須將它們?nèi)苛腥朊舾行盘?hào)表中。

PROCESS語(yǔ)句的執(zhí)行依賴于敏感信號(hào)的變化(或稱發(fā)生事件),當(dāng)某一敏感信號(hào)有變,如a,從‘1’跳變到‘0’,或從‘0’跳變到‘1’時(shí),就將啟動(dòng)此進(jìn)程語(yǔ)句,于是該P(yáng)ROCESS至ENDPROCESS引導(dǎo)的語(yǔ)句(包括其中的順序語(yǔ)句)被執(zhí)行一遍;然后返回進(jìn)程的起始端,進(jìn)入等待狀態(tài),直到下一次敏感信號(hào)表中某一信號(hào)或某些信號(hào)發(fā)生事件后才再次進(jìn)入“啟動(dòng)-運(yùn)行”狀態(tài)。

★1個(gè)結(jié)構(gòu)體可包含任意個(gè)進(jìn)程語(yǔ)句結(jié)構(gòu),所有的進(jìn)程語(yǔ)句本身都是并行語(yǔ)句,而由任1進(jìn)程PROCESS引導(dǎo)的語(yǔ)句屬于順序語(yǔ)句。

3.1多路選擇器及其VHDL描述

4.端口語(yǔ)句和端口信號(hào)名

描述電路的端口及其端口信號(hào)必須用端口語(yǔ)句PORT()來(lái)引導(dǎo),并在語(yǔ)句結(jié)尾處加分號(hào)“;”。

在例3-1的實(shí)體描述中——

IN:定義端口a、b和s為信號(hào)輸入端口。

OUT:定義端口y為信號(hào)輸出端口。端口模式用于定義端口上數(shù)據(jù)的流動(dòng)方向和方式,有如圖3-4所示的4種:3.1多路選擇器及其VHDL描述

5.端口模式

(1)IN:輸入端口。定義的通道為單向只讀模式,即規(guī)定數(shù)據(jù)只能由此端口被讀入實(shí)體中。

(2)OUT:輸出端口。定義的通道為單向輸出模式,即規(guī)定數(shù)據(jù)只能通過(guò)此端口從實(shí)體向外流出,或者說(shuō)可以將實(shí)體中的數(shù)據(jù)向此端口賦值。

(3)INOUT:雙向端口。定義的通道確定為輸入輸出雙向端口,即從端口的內(nèi)部看,可以對(duì)此端口進(jìn)行賦值,或通過(guò)此端口讀入外部的數(shù)據(jù)信息;而從端口的外部看,信號(hào)既可由此端口流出,也可向此端口輸入信號(hào),如RAM的數(shù)據(jù)口、單片機(jī)的I/O口等。

(4)BUFFER:緩沖端口。其功能與INOUT類似,區(qū)別在于當(dāng)需要輸入數(shù)據(jù)時(shí),只允許內(nèi)部回讀輸出的信號(hào),即允許反饋。如計(jì)數(shù)器設(shè)計(jì),可將計(jì)數(shù)器輸出的計(jì)數(shù)信號(hào)回讀,以作為下一計(jì)數(shù)值的初值。與INOUT模式相比,BUFFER回讀的信號(hào)不是由外部輸入的,而是由內(nèi)部產(chǎn)生、向外輸出的信號(hào)。3.1多路選擇器及其VHDL描述

6.關(guān)鍵字

關(guān)鍵詞(KeyWord):指VHDL中預(yù)定義的有特殊含義的英文詞語(yǔ)?!馰HDL程序設(shè)計(jì)者不能用關(guān)鍵字命名自用對(duì)象(如標(biāo)識(shí)符等)。如例3-1中的ENTITY、ARCHITECTURE、END、IF、ELSE、OUT和IN等,還有AND、OR等邏輯操作符,這些都屬于關(guān)鍵字。

●現(xiàn)在多數(shù)VHDL文本編輯器,包括QuartusII的編輯器,都是關(guān)鍵字敏感型的(遇到關(guān)鍵字會(huì)以特定顏色顯示),所以在編輯程序時(shí)通常不會(huì)誤用關(guān)鍵字?!咀⒁狻浚阂膊灰`將EDA軟件工具庫(kù)中已定義好的關(guān)鍵詞或元件名當(dāng)做普通標(biāo)識(shí)符來(lái)用。

●VHDL的關(guān)鍵字對(duì)大小寫不敏感,即在同一程序中,關(guān)鍵字大小寫可以混用。3.1多路選擇器及其VHDL描述

7.標(biāo)識(shí)符

標(biāo)識(shí)符(Identifier)是設(shè)計(jì)者在VHDL程序中自定義的,用于標(biāo)識(shí)不同名稱的詞語(yǔ)。例如用作實(shí)體名、結(jié)構(gòu)體名、端口名或信號(hào)名等。如例3-1中出現(xiàn)過(guò)的mux21a、b、one等。

●標(biāo)識(shí)符也不區(qū)分大小寫。例如在同一VHDL程序中,標(biāo)識(shí)符A和a、y和Y分別表示同一信號(hào)。

●標(biāo)識(shí)符不應(yīng)用數(shù)字、數(shù)字起頭的文字或中文來(lái)表述。

●符號(hào)“--”是注釋符號(hào)。注釋符號(hào)可用于隔離程序,添加程序說(shuō)明文字。因此注釋符號(hào)“--”后的文字僅僅是為了使對(duì)應(yīng)的數(shù)據(jù)或語(yǔ)句更容易被看懂,它們本身沒(méi)有功能含義,也不參加邏輯綜合。3.2半加器及其VHDL描述

半加器(設(shè)此模塊的器件名是h_adder)的電路原理圖如圖3-5所示,半加器對(duì)應(yīng)的邏輯真值表如圖3-6所示。此電路模塊由兩個(gè)基本邏輯門元件構(gòu)成,即與門和異或門。

A和B:

加數(shù)和被加數(shù)的數(shù)據(jù)輸入端口;

SO:是和值的數(shù)據(jù)輸出端口;

CO:

是進(jìn)位數(shù)據(jù)的輸出端口。根據(jù)圖3-5的電路結(jié)構(gòu),很容易獲得半加器的邏輯表述是:

圖3-7是此半加器電路的時(shí)序波形,它反映了此模塊的邏輯功能。根據(jù)這些敘述可以給出對(duì)應(yīng)的VHDL描述,即例3-2所示的半加器電路模塊的VHDL表述。此描述展示了可綜合的VHDL程序的模塊結(jié)構(gòu)。3.2半加器及其VHDL描述圖3-8所示:VHDL程序最常用結(jié)構(gòu)框圖例3-2右側(cè)的文字說(shuō)明:

可看出,例3-2程序雖簡(jiǎn)單,但卻包含了VHDL

完整的程序結(jié)構(gòu)和必要的語(yǔ)句元素。

由例3-2和圖3-8可見——

VHDL程序結(jié)構(gòu)分三大部分:庫(kù)與程序包的調(diào)用語(yǔ)句、由ENTITY引導(dǎo)的描述電路端口的實(shí)體,以及由ARCHITECTURE引導(dǎo)的描述電路功能的結(jié)構(gòu)體。不過(guò),后兩個(gè)部分是必須存在的,例3-1就是一個(gè)例子。3.2半加器及其VHDL描述3.2半加器及其VHDL描述1.實(shí)體表達(dá)與實(shí)體名

下面在3.1節(jié)中已展示的VHDL相關(guān)知識(shí)的基礎(chǔ)上,針對(duì)例3-2中新出現(xiàn)的VHDL語(yǔ)句結(jié)構(gòu)、語(yǔ)法規(guī)則和程序設(shè)計(jì)規(guī)范作出說(shuō)明。VHDL完整的、可綜合的程序結(jié)構(gòu)必須能完整地表達(dá)一個(gè)數(shù)字電路功能模塊的端口形式和電路功能,即無(wú)論是一片74LS138還是一片CPU,都必須包含實(shí)體和結(jié)構(gòu)體兩個(gè)最基本的語(yǔ)言結(jié)構(gòu)。

設(shè)計(jì)實(shí)體:含有完整程序結(jié)構(gòu)(即圖3-8所示的結(jié)構(gòu))的VHDL表述。實(shí)體描述的是:電路器件的端口構(gòu)成(有哪些端口),端口類型(信號(hào)的流動(dòng)方向和方式)和端口上流動(dòng)的信號(hào)的屬性,它的一般表述格式如下:3.2半加器及其VHDL描述

關(guān)鍵詞:

ENTITY、IS、PORT和ENDENTITY都是描述實(shí)體的關(guān)鍵詞,在實(shí)體描述中必須包含在內(nèi);

data_type:

是定義port_m等端口的數(shù)據(jù)類型名;

e_name:

是實(shí)體名。實(shí)體名屬于標(biāo)識(shí)符,具體取名由設(shè)計(jì)者自定。由于實(shí)體名實(shí)際上表達(dá)的應(yīng)該是設(shè)計(jì)電路的器件名,所以通常根據(jù)相應(yīng)電路的功能來(lái)確定。如4位二進(jìn)制計(jì)數(shù)器,實(shí)體名可取為counter4b;8位二進(jìn)制加法器,實(shí)體名可取為ADDER8B等。

★不能用與EDA軟件工具庫(kù)中已定義好的元件名作為實(shí)體名,如or2、latch等,也不能用數(shù)字起頭的實(shí)體名,如74LS160。3.2半加器及其VHDL描述2.結(jié)構(gòu)體表達(dá)結(jié)構(gòu)體的一般表述格式如下:

其中,ARCHITECTURE、OF、IS、BEGIN和ENDARCHITECTURE都是描述結(jié)構(gòu)體的關(guān)鍵詞,在描述中必須包含它們。arch_name是結(jié)構(gòu)體名,是標(biāo)識(shí)符。

“說(shuō)明語(yǔ)句”:包括在結(jié)構(gòu)體中,用以說(shuō)明和定義數(shù)據(jù)對(duì)象、數(shù)據(jù)類型、元件調(diào)用聲明等。描述中并非必需。

“功能描述語(yǔ)句”:在結(jié)構(gòu)體中給出的相應(yīng)的電路功能描述語(yǔ)句,可以是并行語(yǔ)句、順序語(yǔ)句或它們的混合。描述中必須存在。3.2半加器及其VHDL描述2.結(jié)構(gòu)體表達(dá)

一個(gè)可綜合的、完整的VHDL程序有比較固定的結(jié)構(gòu),如圖3-8所示。

(1)各類庫(kù)及其程序包的使用聲明。包括未以顯式表達(dá)的工作庫(kù)WORK庫(kù)的使用聲明;

(2)實(shí)體描述;

(3)結(jié)構(gòu)體描述。而在結(jié)構(gòu)體中可以含有不同的邏輯表達(dá)語(yǔ)句結(jié)構(gòu)。

★例3-2的實(shí)體和結(jié)構(gòu)體分別是以“ENDENTITYxxx;”和“ENDARCHITECTURExxx;”語(yǔ)句結(jié)尾的,這符合VHDL的IEEESTD1076-1993版的語(yǔ)法要求。若根據(jù)VHDL’87版本,即IEEESTD1076-1987的語(yǔ)法要求,這兩條結(jié)尾語(yǔ)句只需寫成“END;”或“ENDxx;”?!锝^大多數(shù)常用的EDA工具中的VHDL綜合器都兼容兩種VHDL版本的語(yǔ)法規(guī)則。但對(duì)于不同的EDA工具,仍需根據(jù)設(shè)計(jì)程序不同的VHDL版本表述,在綜合前作相應(yīng)的設(shè)置。3.2半加器及其VHDL描述3.標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型STD_LOGIC

就數(shù)字系統(tǒng)設(shè)計(jì)來(lái)說(shuō),類型STD_LOGIC比BIT包含的內(nèi)容豐富和完整得多,而且此數(shù)據(jù)類型也包含BIT類型VHDL的BIT數(shù)據(jù)類型定義語(yǔ)句——VHDL的STD_LOGIC數(shù)據(jù)類型包含BIT類型,其定義語(yǔ)句——STD_LOGIC所定義的九種數(shù)據(jù)的含義是——

‘U’表示未初始化的;‘X’表示強(qiáng)未知的;‘0’表示強(qiáng)邏輯0;‘1’表示強(qiáng)邏輯1;‘Z’表示高阻態(tài);‘W’表示弱未知的;‘L’表示弱邏輯0;‘H’表示弱邏輯1;‘-’表示忽略。3.2半加器及其VHDL描述3.標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型STD_LOGIC

完整地概括了數(shù)字系統(tǒng)中所有可能的數(shù)據(jù)表現(xiàn)形式,因而其描述與實(shí)際電路有更好更實(shí)用的適應(yīng)性。在仿真和綜合中,將端口信號(hào)或其他數(shù)據(jù)對(duì)象定義為STD_LOGIC數(shù)據(jù)類型是非常重要且最為常用的,它可以使設(shè)計(jì)者精確地模擬一些未知的和具有高阻態(tài)的線路情況。對(duì)于綜合器,高阻態(tài)‘Z’和忽略態(tài)‘-’(有的綜合器用‘X’)可用于三態(tài)的描述。

STD_LOGIC型數(shù)據(jù)只有其中的四五種值在數(shù)字器件中可實(shí)現(xiàn)的(即綜合器可接受的)

——‘X’(或/和‘-’)、‘0’、‘1’和‘Z’。其他類型不可綜合,只能用于VHDL仿真。

STD_LOGIC數(shù)據(jù)類型中的取值多數(shù)可在現(xiàn)實(shí)電路中找到對(duì)應(yīng)現(xiàn)象。如由74LS04某反相器輸出高電平,則此端口對(duì)應(yīng)強(qiáng)邏輯‘1’;若此端口串接一個(gè)100k電阻,其輸出則對(duì)應(yīng)弱邏輯‘H’;若此端口串接一大于1M電阻的輸出則基本對(duì)應(yīng)高阻態(tài)邏輯‘Z’;而‘X’或‘-’與數(shù)字電路教材中卡諾圖中的任意值有對(duì)應(yīng)關(guān)系。

3.2半加器及其VHDL描述4.賦值符號(hào)和邏輯操作符

例3-2中的表達(dá)式CO<=AANDB和SO<=AXORB表示輸入端口A、B兩信號(hào)分別作邏輯與和邏輯異或運(yùn)算后,再分別將結(jié)果向輸出端口CO和SO傳輸,或解釋為向信號(hào)CO和SO賦值。這里,A和B是邏輯操作對(duì)象。VHDL要求賦值符“<=”兩邊信號(hào)的數(shù)據(jù)類型必須一致。

信號(hào)賦值的常用表述:即當(dāng)?shù)忍?hào)右側(cè)的驅(qū)動(dòng)表達(dá)式中的任一信號(hào)變量發(fā)生變化時(shí),此表達(dá)式即被計(jì)算一遍,并將獲得的數(shù)據(jù)賦給等號(hào)左側(cè)的變量名所標(biāo)示的目標(biāo)變量。

驅(qū)動(dòng)的含義:強(qiáng)調(diào)這一表達(dá)式的本質(zhì)是對(duì)于目標(biāo)變量的激勵(lì)源,或賦值源,它為左側(cè)的目標(biāo)變量提供運(yùn)算操作后的結(jié)果。3.2半加器及其VHDL描述4.賦值符號(hào)和邏輯操作符VHDL共有七種基本邏輯操作符,如表3-1所示,它們分別是AND(與)、OR(或)、NAND(與非)、NOR(或非)、XOR(異或)、XNOR(同或)和NOT(取反)。信號(hào)在這些操作符的作用下可構(gòu)成組合邏輯。

操作數(shù)(操作對(duì)象)的數(shù)據(jù)類型有3種:BIT、BOOLEAN和STD_LOGIC。即:僅此三種數(shù)據(jù)類型的數(shù)值或變量相互間可以進(jìn)行邏輯操作。3.2半加器及其VHDL描述5.設(shè)計(jì)庫(kù)和標(biāo)準(zhǔn)程序包表3-1

匕邏輯操作符5.設(shè)計(jì)庫(kù)和標(biāo)準(zhǔn)程序包

有許多數(shù)據(jù)類型的說(shuō)明,以及類似的函數(shù)是預(yù)先放在VHDL綜合器(或仿真器)附帶的設(shè)計(jì)庫(kù)和程序包中的。如BIT數(shù)據(jù)類型的定義是包含在VHDL標(biāo)準(zhǔn)程序包STANDARD中的,而程序包STANDARD包含于VHDL標(biāo)準(zhǔn)庫(kù)STD中。

為了使用BIT類型,應(yīng)該在例3-1的程序上面增加以下三句說(shuō)明語(yǔ)句:

LIBRARY:是關(guān)鍵詞,LIBRARYWORK表示打開工作庫(kù)WORK庫(kù);

LIBRARYSTD:表示打開STD庫(kù);

USB和ALL:是關(guān)鍵詞,全句表示允許使用STD庫(kù)中STANDARD程序包中的所有內(nèi)容(.ALL),如類型定義、函數(shù)、過(guò)程、常量等。

LIBRARYWORK:VHDL設(shè)計(jì)文件保存在某一文件夾,如d:\myfile中,并指定為工程PROJECT的文件所在的目錄,VHDL工具就將此路徑指定的文件夾默認(rèn)為工作庫(kù)(WORKLIBRARY)。于是,在VHDL程序前面還應(yīng)該增加“WORKLIBRARY;”語(yǔ)句,VHDL工具才能調(diào)用此路徑中相關(guān)的元件和程序包。3.2半加器及其VHDL描述5.設(shè)計(jì)庫(kù)和標(biāo)準(zhǔn)程序包使用庫(kù)和程序包的一般定義表達(dá)式如下:

STD_LOGIC數(shù)據(jù)類型定義在被稱為STD_LOGIC_1164的程序包中,此包由IEEE庫(kù)定義,而且此程序包所在的程序庫(kù)的庫(kù)名被取名為IEEE。由于IEEE庫(kù)不屬于VHDL標(biāo)準(zhǔn)庫(kù),所以在使用其庫(kù)中內(nèi)容前,必須事先給予聲明。正是出于此需要,即定義端口信號(hào)的數(shù)據(jù)類型為STD_LOGIC的目的,例3-2使用了以下兩句語(yǔ)句:

即利用LIBRARY語(yǔ)句和USE語(yǔ)句,打開IEEE庫(kù)的程序包STD_LOGIC_1164。

★在VHDL程序中根據(jù)實(shí)際情況也可以定義為BIT類型或其他數(shù)據(jù)類型,但一般應(yīng)用中推薦盡可能使用STD_LOGIC類型。3.2半加器及其VHDL描述6.文件取名和存盤

當(dāng)編輯好VHDL程序后,需要保存文件時(shí),必須賦給一個(gè)正確的文件名。對(duì)于多數(shù)綜合器,文件名可以由設(shè)計(jì)者任意給定。文件后綴擴(kuò)展名必須是“.vhd”,如mux21a.vhd。考慮到某些EDA軟件的限制、VHDL程序的特點(diǎn),以及調(diào)用的方便性,建議程序的文件名盡量與該程序的模塊名一致。對(duì)于QuartusII,則必須滿足這一規(guī)定!如例3-1和例3-2的存盤文件名必須分別是mux21a.vhd和h_adder.vhd

。與Verilog不同,VHDL文件取名大小寫不敏感,即存盤的文件名與此文件程序中的模塊名的大小寫不必一致。

VHDL程序必須存入某文件夾中(要求非中文文件夾名),不要存在根目錄內(nèi)或桌面上。

3.2半加器及其VHDL描述7.規(guī)范的程序書寫格式

VHDL程序書寫格式要求十分寬松,可以在一行寫多條語(yǔ)句(只要能寫下),也可分行書寫。但良好的,規(guī)范的VHDL源程序書寫習(xí)慣是高效的電路設(shè)計(jì)者所必備的。規(guī)范的書寫格式能使自己或別人更容易閱讀和檢査錯(cuò)誤。

例3-2給出了近似規(guī)范的書寫格式:最頂層的LIBRARY、ENTITY、ENDENTITY實(shí)體描述語(yǔ)句放在最左側(cè);比它低一層次的描述語(yǔ)句(如PORT)向右靠一個(gè)Tab鍵距離,即4個(gè)小寫字母的間隔。同一語(yǔ)句的關(guān)鍵詞要對(duì)齊,如ENTITY和ENDENTITY、PROCESS和ENDPROCESS、IF和ENDIF等。

★說(shuō)明:為了在書中放入更多的內(nèi)容而節(jié)省篇幅、降低成本,教材中的多數(shù)程序都未能嚴(yán)格按照規(guī)范書寫。

3.3.1四選一多路選擇器及CASE語(yǔ)句表述方式3.3四選一多路選擇器及其

VHDL描述

4選1多路選擇器的電路模型如圖3-9所示,當(dāng)s1和s0取值分別為00、01、10和11時(shí),輸出端y將分別輸出來(lái)自輸入口a、b、c、d的數(shù)據(jù)。圖3-10是此模塊的時(shí)序波形。圖中的S是選通信號(hào)s1和s0的矢量或總線表達(dá)信號(hào),它可以在仿真激勵(lì)文件中由設(shè)計(jì)者設(shè)置。3.3四選一多路選擇器及其

VHDL描述

3.3.1四選一多路選擇器及CASE語(yǔ)句表述方式3.3.2CASE語(yǔ)句3.3四選一多路選擇器及其

VHDL描述

CASE語(yǔ)句屬于順序語(yǔ)句,因此必須放在進(jìn)程語(yǔ)句PROCESS中使用。CASE語(yǔ)句的一般表述如下:3.3.2CASE語(yǔ)句3.3四選一多路選擇器及其

VHDL描述

當(dāng)執(zhí)行到CASE語(yǔ)句時(shí),首先計(jì)算<表達(dá)式>的值,然后根據(jù)WHEN條件句中與之相同的<選擇值或標(biāo)識(shí)符>,執(zhí)行對(duì)應(yīng)的<順序語(yǔ)句>,最后結(jié)束CASE語(yǔ)句。條件句中的“=>”不是操作符,它的含義相當(dāng)于THEN(或“于是”)。CASE語(yǔ)句使用中應(yīng)該注意以下幾點(diǎn):(1)WHEN條件句中的選擇值或標(biāo)識(shí)符所代表的值必須在CASE的<表達(dá)式>的取值范圍內(nèi),且數(shù)據(jù)類型也必須匹配。(2)除非所有條件句中的選擇值能完整覆蓋CASE語(yǔ)句中表達(dá)式的取值,否則最末一個(gè)條件句中的選擇必須加上最后一句“WHENOTHERS=><順序語(yǔ)句>;”。關(guān)鍵詞OTHERS表示以上已列的所有條件句中未能列出的其他可能的取值?!咀ⅰ浚篛THERS只能出現(xiàn)一次,且只能作為最后一種條件取值。關(guān)鍵詞NULL表示不做任何操作。(3)CASE語(yǔ)句中的選擇值只能出現(xiàn)一次,不允許有相同選擇值的條件語(yǔ)句出現(xiàn)。(4)CASE語(yǔ)句執(zhí)行中必須選中,且只能選中所列條件語(yǔ)句中的一條。3.3四選一多路選擇器及其

VHDL描述

3.3.2CASE語(yǔ)句

例3-3中的CASE語(yǔ)句的功能——

當(dāng)CASE語(yǔ)句的表達(dá)式S由輸入信號(hào)s1和s0分別獲得‘0’和‘0’時(shí),即當(dāng)S=“00”時(shí),執(zhí)行賦值語(yǔ)句y<=a,即y輸出來(lái)自a的數(shù)據(jù);當(dāng)S=“01”時(shí),執(zhí)行賦值語(yǔ)句y<=b,即y輸出來(lái)自b的數(shù)據(jù);……;以此類推。

CASE語(yǔ)句多條件選擇值的一般表達(dá)式如下:選擇值[|選擇值]

選擇值可以有四種不同的表達(dá)方式:

(1)單個(gè)普通數(shù)值,如6。

(2)數(shù)值選擇范圍,如(2TO4),表示取值為2、3或4。

(3)并列數(shù)值,如3|5,表示取值為3或者5。

(4)混合方式,以上三種方式的混合。3.3四選一多路選擇器及其

VHDL描述

3.3.2CASE語(yǔ)句例3-4給出了以上用法的示例,示例中的對(duì)應(yīng)處給出了詳細(xì)說(shuō)明。3.3四選一多路選擇器及其

VHDL描述

3.3.2CASE語(yǔ)句例3-5給出了CASE語(yǔ)句使用中幾種容易發(fā)生的錯(cuò)誤。3.3四選一多路選擇器及其

VHDL描述

3.3.2CASE語(yǔ)句

當(dāng)條件句中的選擇值未能完整覆蓋CASE語(yǔ)句中表達(dá)式的取值時(shí),例如例3-5中第一個(gè)CASE語(yǔ)句示例,未列全2~15的值的情況,要注意三點(diǎn):

(1)如果不加OTHERS語(yǔ)句,綜合器通常將判為錯(cuò)。(2)如果加WHENOTHERS=>NULL語(yǔ)句,則可能在輸出口綜合出時(shí)序模塊(鎖存器),應(yīng)該避免。

(3)只能在WHENOTHERS=>語(yǔ)句后加上順序語(yǔ)句,如out1<=‘0’;而不是NULL語(yǔ)句!這時(shí)才能綜合出純組合電路。所以盡量不要用NULL語(yǔ)句。3.3四選一多路選擇器及其

VHDL描述

3.3.2CASE語(yǔ)句

與IF語(yǔ)句相比,CASE語(yǔ)句的程序可讀性更好,因?yàn)樗褩l件中所有可能出現(xiàn)的情況全部列出,一目了然。

CASE語(yǔ)句的條件性獨(dú)立、排它,條件句的次序不重要,它的執(zhí)行過(guò)程更接近于并行方式。

IF語(yǔ)句有一個(gè)逐項(xiàng)條件順序比較的過(guò)程(向上相與的邏輯過(guò)程)。

★對(duì)相同的邏輯功能,CASE語(yǔ)句比IF語(yǔ)句的描述耗用更多的硬件資源。

★對(duì)于有的邏輯,CASE語(yǔ)句無(wú)法描述,只能用IF語(yǔ)句來(lái)描述,這是因?yàn)镮F-THEN-ELSIF語(yǔ)句具有條件相與的功能和自動(dòng)將邏輯值“-”包括進(jìn)去的功能(邏輯值“-”有利于邏輯的化簡(jiǎn)),而CASE語(yǔ)句只有條件相或的功能3.3.3IEEE庫(kù)預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量3.3四選一多路選擇器及其

VHDL描述

標(biāo)準(zhǔn)邏輯位矢量STD_LOGIC_VECTOR數(shù)據(jù)類型與STD_LOGIC一樣,都定義在STD_LOGIC_1164程序包中(而此程序包的所在庫(kù)是IEEE庫(kù))。

STD_LOGIC:屬于標(biāo)準(zhǔn)邏輯位類型;

STD_LOGIC_VECTOR:屬于標(biāo)準(zhǔn)一維矢量數(shù)組,數(shù)組中的每一個(gè)元素的數(shù)據(jù)類型都是標(biāo)準(zhǔn)邏輯位STD_LOGIC。

★使用STD_LOGIC_VECTOR,可以表達(dá)電路中并列的多通道端口或節(jié)點(diǎn),或者總線。

★使用STD_LOGIC_VECTOR,必須注明其數(shù)組寬度,即位寬,如定義:3.3.3IEEE庫(kù)預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量3.3四選一多路選擇器及其

VHDL描述

上句表明,標(biāo)識(shí)符B的數(shù)據(jù)類型被定義為一個(gè)具有8位位寬的矢量或總線端口信號(hào),它的最左位,即最高位是B(7)。通過(guò)數(shù)組元素排列指示關(guān)鍵詞“DOWNTO”向右依次遞減為B(6),B(5),…,B(0)。第二條語(yǔ)句定義A的數(shù)據(jù)類型為4位位寬總線,數(shù)據(jù)對(duì)象是信號(hào)SIGNAL,其最左位是A(1),通過(guò)關(guān)鍵詞“TO”向右依次遞增為A(2)、A(3)和A(4)。于是根據(jù)以上兩式的定義,對(duì)B的賦值方式如下:

其中“01100010”表示二進(jìn)制數(shù)。VHDL規(guī)定:多于一位的二進(jìn)制數(shù)必須加雙引號(hào),如“01”;而單一二進(jìn)制數(shù)則用單引號(hào),如‘1’。3.3.3IEEE庫(kù)預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量3.3四選一多路選擇器及其

VHDL描述

與STD_LOGIC_VECTOR對(duì)應(yīng)的是BIT_VECTOR位矢量數(shù)據(jù)類型,其每一個(gè)元素的數(shù)據(jù)類型都是邏輯位BIT,使用方法同STD_LOGIC_VECTOR。

例3-3中的內(nèi)部信號(hào)S被定義為二元素的STD_LOGIC_VECTOR數(shù)據(jù)類型,高位是S(1),低位是S(0)。標(biāo)準(zhǔn)邏輯矢量(STD_LOGIC_VECTOR)類型定義語(yǔ)句如下:

在使用中,向STD_LOGIC_VECTOR數(shù)據(jù)類型的數(shù)據(jù)對(duì)象賦值的方式與普通的一維數(shù)組是一樣的,即必須嚴(yán)格考慮位矢的寬度。同位寬、同數(shù)據(jù)類型的矢量間才能進(jìn)行賦值。3.3.4其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型3.3四選一多路選擇器及其

VHDL描述

VHDL綜合工具配備的擴(kuò)展程序包中定義了一些有用的類型。如Synopsys公司在IEEE庫(kù)中加入的程序包STD_LOGIC_ARITH【arithmetic】中定義了如下的數(shù)據(jù)類型:無(wú)符號(hào)型(UNSIGNED)、有符號(hào)型(SIGNED)、小整型(SMALL_INT)。如果將信號(hào)或變量定義為這幾個(gè)數(shù)據(jù)類型,就可以使用本程序包中定義的運(yùn)算符。

★在使用這些數(shù)據(jù)類型之前,請(qǐng)注意必須加入下面的語(yǔ)句:

UNSIGNED用于無(wú)符號(hào)數(shù)的運(yùn)算,SIGNED用于有符號(hào)數(shù)的運(yùn)算。在IEEE庫(kù)中,NUMERIC_STD和NUMERIC_BIT程序包中也定義了UNSIGNED型及SIGNED型,NUMERIC_STD是針對(duì)STD_LOGIC型定義的,而NUMERIC_BIT是針對(duì)BIT型定義的。在程序包中還定義了相應(yīng)的運(yùn)算符重載函數(shù)。3.3.4其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型3.3四選一多路選擇器及其

VHDL描述

★有些綜合器沒(méi)有附帶STD_LOGIC_ARITH程序包(QUARTUSII有此程序包),只能使用NUMERIC_STD和NUMERIC_BIT程序包。

(1)無(wú)符號(hào)數(shù)據(jù)類型。UNSIGNED數(shù)據(jù)類型代表一個(gè)無(wú)符號(hào)的數(shù)值,在綜合器中,這個(gè)數(shù)值被解釋為一個(gè)二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)的最左位是其最高位。例如,十進(jìn)制的8可以表示如下:

若一個(gè)變量或信號(hào)的數(shù)據(jù)類型為UNSIGNED,則其位矢長(zhǎng)度越長(zhǎng),所能代表的數(shù)值就越大。如一個(gè)4位變量的最大值為15,一個(gè)8位變量的最大值則為255,0是其最小值。不能用UNSIGNED定義負(fù)數(shù)。以下是兩個(gè)無(wú)符號(hào)數(shù)據(jù)定義的示例:3.3.4其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型3.3四選一多路選擇器及其

VHDL描述

其中變量var有11位數(shù)值,最高位是var(0),而非var(10);信號(hào)sig有6位數(shù)值,最高位是sig(5)。

(2)有符號(hào)數(shù)據(jù)類型。SIGNED數(shù)據(jù)類型表示一個(gè)有符號(hào)的數(shù)值,綜合器將其解釋為補(bǔ)碼,此數(shù)的最高位是符號(hào)位,例如:SIGNED’(“0101”)代表+5,5SIGNED’(“1101”)代表-5

若將上例的var定義為SIGNED數(shù)據(jù)類型,則數(shù)值意義就不同了,如:其中,變量var有11位,最左位var(0)是符號(hào)位。3.3.4其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型3.3四選一多路選擇器及其

VHDL描述

★特別注意:定義為數(shù)據(jù)類型UNSIGNED或SIGNED的數(shù)據(jù)具有雙重性:

(1)這類數(shù)據(jù)可以像整數(shù)類型的數(shù)據(jù)一樣直接進(jìn)行各種算術(shù)運(yùn)算(如加法),且不能進(jìn)行邏輯運(yùn)算;它們的取值范圍也與整數(shù)類型相同:SIGNED類型的取值范圍是-2147483647?+2147483647,UNSIGNED類型的取值范圍是0?+2147483647。(2)它們本質(zhì)上不屬于整數(shù)類型INTEGER,而是被定義為STD_LOGIC的數(shù)組類型。它們?cè)诔绦虬黃TD_LOGIC_ARITH中的定義原文是:3.3.5信號(hào)定義和數(shù)據(jù)對(duì)象3.3四選一多路選擇器及其

VHDL描述

例3-3(P67)中第8行的語(yǔ)句表示在描述的器件MUX41A內(nèi)部定義標(biāo)識(shí)符S的數(shù)據(jù)對(duì)象為信號(hào)SIGNAL,其數(shù)據(jù)類型為標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR(1DOWNTO0),其中元素S(1)和S(0)都為標(biāo)準(zhǔn)邏輯位類型STD_LOGIC。若要定義標(biāo)識(shí)符e的數(shù)據(jù)對(duì)象為信號(hào),數(shù)據(jù)類型為標(biāo)準(zhǔn)邏輯位,則可表示為:

其中的SIGNAL是定義某標(biāo)識(shí)符為信號(hào)的關(guān)鍵詞。信號(hào)屬于數(shù)據(jù)對(duì)象(DataObjects)。在VHDL中,數(shù)據(jù)對(duì)象類似于一種容器,它接受不同數(shù)據(jù)類型的賦值。3.3.5信號(hào)定義和數(shù)據(jù)對(duì)象3.3四選一多路選擇器及其

VHDL描述

數(shù)據(jù)對(duì)象有三類:信號(hào)(SIGNAL)、變量(VARIABLE)和常量(CONSTANT)。定義標(biāo)識(shí)符:通常須確定為某類數(shù)據(jù)對(duì)象(規(guī)定該標(biāo)識(shí)符的行為方式和功能特點(diǎn)),在此基礎(chǔ)上還必須被定義為某種數(shù)據(jù)類型(限定取值范圍)。

VHDL規(guī)定:標(biāo)識(shí)符e的數(shù)據(jù)對(duì)象作為信號(hào),它可以如同一根導(dǎo)線那樣在整個(gè)結(jié)構(gòu)體中傳遞信息,但傳遞或存儲(chǔ)的數(shù)據(jù)類型(取值范圍)只能包含在STD_LOGIC定義的元素中。對(duì)于端口信號(hào)也一樣,所有端口的數(shù)據(jù)對(duì)象都默認(rèn)為信號(hào)SIGNAL,其數(shù)據(jù)類型則根據(jù)需要另作顯式定義。

譬如:例3-3中所有端口默認(rèn)數(shù)據(jù)對(duì)象是信號(hào),其數(shù)據(jù)類型被顯式定義為STD_LOGIC,取值類型最多可達(dá)九種,如‘1’、‘Z’或‘X’等。3.3.6并置操作符

3.3四選一多路選擇器及其

VHDL描述

在例3-3中的操作符&表示將信號(hào)或是數(shù)組合并起來(lái)形成新的數(shù)組矢量。例如“VH”&“DL”的結(jié)果為“VHDL”;‘0’&‘1’&‘1’的結(jié)果為“011”。顯然語(yǔ)句S<=s1&s0的作用是令:S(1)<=s1;S(0)<=s0。利用并置符可以有多種方式來(lái)建立新的數(shù)組——

(1)將一個(gè)單元素并置于一個(gè)數(shù)的左端或右端形成更長(zhǎng)的數(shù)組;(2)將兩個(gè)數(shù)組并置成一個(gè)新數(shù)組等。

★在實(shí)際運(yùn)算過(guò)程中,要注意并置操作前后的數(shù)組長(zhǎng)度應(yīng)一致。3.3.7四選一多路選擇器的VHDL不同描述方式3.3四選一多路選擇器及其

VHDL描述

例3-6至例3-8(此三例中的S賦值語(yǔ)句以上的部分與例3-3【P66-67】的對(duì)應(yīng)部分相同)給出了另外三種不同的VHDL描述方式,所描述的都是4選1多路選擇器,其端口結(jié)構(gòu)和仿真波形都與圖3-9和圖3-10(P66)相同。以下分別給予討論.

例3-6的語(yǔ)句表述結(jié)構(gòu)其實(shí)與例3-1相似,只是IF語(yǔ)句的條件判斷式的變量變成了兩位二進(jìn)制數(shù),所以就有了四種可能的選擇。于是程序使用了能進(jìn)行更多判斷條件的IF語(yǔ)句,其形式如下:3.3四選一多路選擇器及其

VHDL描述

IF_THEN_ELSIF_ELSIF_…ELSE_ENDIF3.3.7四選一多路選擇器的VHDL不同描述方式

例3-6中的IF語(yǔ)句是一條完整的條件句。其中的關(guān)鍵詞ELSIF包含了ELSE和IF二者的含義,即有“否則假如…”的含義。它起到了在不滿足前述條件的情況下,開辟另一條件判斷分支的作用。由此構(gòu)建了當(dāng)條件多于兩個(gè)時(shí)完成判斷的語(yǔ)句結(jié)構(gòu)。1.WHEN_ELSE條件信號(hào)賦值語(yǔ)句

3.3四選一多路選擇器及其

VHDL描述

3.3.7四選一多路選擇器的VHDL不同描述方式

與例3-3和例3-6不同,例3-7和例3-8中使用了并行語(yǔ)句,以下分別給予說(shuō)明。

例3-7中出現(xiàn)的語(yǔ)句形式稱為條件信號(hào)賦值語(yǔ)句,屬于并行語(yǔ)句,它不需要進(jìn)程語(yǔ)句引導(dǎo)。此類語(yǔ)句也稱為并行賦值語(yǔ)句(相對(duì)于進(jìn)程中的賦值語(yǔ)句),其一般表達(dá)式如下:

3.3四選一多路選擇器及其

VHDL描述

3.3.7四選一多路選擇器的VHDL不同描述方式

在結(jié)構(gòu)體中的條件信號(hào)賦值語(yǔ)句的功能與在進(jìn)程中的IF語(yǔ)句類同。在執(zhí)行條件信號(hào)語(yǔ)句時(shí),每一“賦值條件”是按書寫的先后關(guān)系逐項(xiàng)測(cè)定的,一旦發(fā)現(xiàn)賦值條件為TURE,立即將“表達(dá)式”的值賦給“賦值目標(biāo)”信號(hào)。但應(yīng)注意由于條件測(cè)試的順序性,條件信號(hào)賦值語(yǔ)句中的第一子句具有最高賦值優(yōu)先級(jí),第二句其次,依此類推。例如在以下程序中,如果當(dāng)p1和p2同時(shí)為‘1’時(shí),z獲得的賦值是a而不可能是b★在整個(gè)條件賦值語(yǔ)句中,只有最后一個(gè)“表達(dá)式”后有一個(gè)分號(hào)。2.選擇信號(hào)賦值語(yǔ)句

3.3四選一多路選擇器及其

VHDL描述

與例3-7相同,例3-8中也使用了相似的并行語(yǔ)句,稱為選擇信號(hào)賦值語(yǔ)句,其一般語(yǔ)句格式如下:

選擇信號(hào)賦值語(yǔ)句不能在進(jìn)程中應(yīng)用,但其功能卻與進(jìn)程中的CASE語(yǔ)句的功能十分相似。

CASE語(yǔ)句:執(zhí)行依賴于進(jìn)程中敏感信號(hào)的改變而啟動(dòng)進(jìn)程,各子句的條件不能有重疊,必須包容所有的條件。

選擇信號(hào)賦值語(yǔ)句:也有敏感量,即關(guān)鍵詞WITH旁的選擇表達(dá)式。不允許有條件重疊、條件涵蓋不全情況。

★當(dāng)選擇信號(hào)賦值語(yǔ)句在條件句中未能覆蓋所有條件選擇時(shí),要求在末尾加上與NULL類似涵義的關(guān)鍵詞UNAFFECTED。

3.4全加器及其VHDL表述3.4.1全加器設(shè)計(jì)及例化語(yǔ)句應(yīng)用

全加器可以由兩個(gè)半加器和一個(gè)或門連接而成,其經(jīng)典的電路結(jié)構(gòu)如圖3-11所示,其整個(gè)設(shè)計(jì)過(guò)程和表述方式都可以用VHDL來(lái)描述。

半加器元件的邏輯功能和VHDL表述已在3.2節(jié)中給出,程序是例3-2(P61),文件名即其實(shí)體名h_adder.vhd;或門元件的VHDL表述如例3-10(P75)所示,文件名是or2a.vhd。例3-9為全加器的VHDL頂層描述。3.4.1全加器設(shè)計(jì)及例化語(yǔ)句應(yīng)用3.4全加器及其VHDL表述3.4全加器及其VHDL表述3.4.1全加器設(shè)計(jì)及例化語(yǔ)句應(yīng)用3.4全加器及其VHDL表述3.4.1全加器設(shè)計(jì)及例化語(yǔ)句應(yīng)用

為了實(shí)現(xiàn)連接底層元件形成更高層次的電路設(shè)計(jì)結(jié)構(gòu),文件中使用了例化語(yǔ)句。

例3-9

在實(shí)體中首先定義全加器頂層設(shè)計(jì)元件的端口信號(hào),然后在ARCHITECTURE和BEGIN之間加入調(diào)用元件的聲明語(yǔ)句,即利用COMPONENT語(yǔ)句對(duì)準(zhǔn)備調(diào)用的元件(或門和半加器)做了聲明,并定義net1、net2和net3三個(gè)信號(hào)作為全加器內(nèi)部的連接線,具體連接方式見圖3-11左圖。最后利用端口映射語(yǔ)句PORTMAP()將兩個(gè)半加器模塊和一個(gè)或門模塊連接起來(lái)構(gòu)成一個(gè)完整的全加器(例3-9)。

【注意】:這里是假設(shè)參與設(shè)計(jì)的半加器文件、或門文件和全加器頂層設(shè)計(jì)文件都存放于同一個(gè)文件夾中。

元件例化就是引入一種連接關(guān)系,將預(yù)先設(shè)計(jì)好的設(shè)計(jì)實(shí)體定義為一個(gè)元件,然后利用特定的語(yǔ)句將此元件與當(dāng)前的設(shè)計(jì)實(shí)體中的指定端口相連接,從而為當(dāng)前設(shè)計(jì)實(shí)體引進(jìn)一個(gè)新的低一級(jí)的設(shè)計(jì)層次。

3.4全加器及其VHDL表述3.4.1全加器設(shè)計(jì)及例化語(yǔ)句應(yīng)用

當(dāng)前設(shè)計(jì)實(shí)體(如例3-9描述的全加器)相當(dāng)于一個(gè)較大的電路系統(tǒng),所定義的例化元件相當(dāng)于一個(gè)要插在這個(gè)電路系統(tǒng)板上的芯片,而當(dāng)前設(shè)計(jì)實(shí)體中指定的端口則相當(dāng)于這塊電路板上準(zhǔn)備接受此芯片的一個(gè)插座。★元件例化是使VHDL設(shè)計(jì)實(shí)體構(gòu)成自上而下層次化設(shè)計(jì)的一種重要途徑?!镌强梢远鄬哟蔚?。一個(gè)調(diào)用了較低層次元件的頂層設(shè)計(jì)實(shí)體本身也可以被更高層次設(shè)計(jì)實(shí)體所調(diào)用,成為該設(shè)計(jì)實(shí)體中的一個(gè)元件。任何一個(gè)被例化語(yǔ)句聲明并調(diào)用的設(shè)計(jì)實(shí)體可通過(guò)不同的形式出現(xiàn),它可以是一個(gè)設(shè)計(jì)好的VHDL設(shè)計(jì)文件(即一個(gè)設(shè)計(jì)實(shí)體),也可來(lái)自FPGA元件庫(kù)中的元件或是FPGA器件中的嵌入式宏元件功能塊,或是以別的硬件描述語(yǔ)言,如VerilogHDL設(shè)計(jì)的元件,還可以是IP核。3.4全加器及其VHDL表述3.4.2VHDL例化語(yǔ)句

例化語(yǔ)句由兩部分組成,第一部分是將一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體定義為一個(gè)元件,語(yǔ)句的功能是對(duì)待調(diào)用的這個(gè)元件做出調(diào)用聲明。命名方式與實(shí)體中的PORT()語(yǔ)句一致,只需將ENTITY改寫為COMPONENT。它的最簡(jiǎn)表達(dá)式如下:

元件定義語(yǔ)句必須放在結(jié)構(gòu)體的ARCHITECTURE和BEGIN之間。另外應(yīng)注意,盡管例3-9中對(duì)或門和半加器的調(diào)用聲明的端口說(shuō)明中使用與原來(lái)元件(VHDL描述)相同的端口符號(hào),但這并非是唯一的表達(dá)方式,亦可以做如下表達(dá):

注意端口信號(hào)的數(shù)據(jù)類型的定義必須與原設(shè)計(jì)實(shí)體文件一致,且信號(hào)排列方式也要與原來(lái)的一致,包括端口模式、數(shù)據(jù)類型、功能定義等。3.4全加器及其VHDL表述3.4.2VHDL例化語(yǔ)句

元件例化語(yǔ)句的第二部分則是此元件與當(dāng)前設(shè)計(jì)實(shí)體(頂層文件)中元件間及端口的連接說(shuō)明。即所謂的“端口名關(guān)聯(lián)法”,表達(dá)方式為:

其中,“例化名”必須存在,它類似于PCB板設(shè)計(jì)時(shí)標(biāo)在當(dāng)前系統(tǒng)(電路板)中的一個(gè)插座編號(hào)名;而“元件名”則是準(zhǔn)備在此插座上插入的、己定義好的元件名,也即待調(diào)用的VHDL設(shè)計(jì)實(shí)體的實(shí)體名。例如一塊PCB板上可能插有三片相同的A74LS161,它們分別對(duì)應(yīng)例化名IC1、IC2、IC3三個(gè)插座位置,而元件名都是A74LS161。

PORTMAP是端口映射,或端口連接的意思。其中的“端口名”是在元件定義語(yǔ)句中的端口名表中已定義好的元件端口的名字,或者說(shuō)是頂層文件中待連接的各個(gè)元件本身的端口名;“連接端口名”則是頂層系統(tǒng)中準(zhǔn)備與接入的元件的端口相連的通信線名,或者是頂層系統(tǒng)的端口名。因此端口名關(guān)聯(lián)法也稱端口名映射法。3.4全加器及其VHDL表述3.4.2VHDL例化語(yǔ)句★符號(hào)“=>”是連接符號(hào),其左面放置內(nèi)部元件的端口名,右面放置內(nèi)部元件以外需要連接的端口名或信號(hào)名,這種位置排列方式是固定的;然而,連接表達(dá)式在PORTMAP語(yǔ)句中的位置是任意的?!锓?hào)“=>”僅代表連接關(guān)系,不代表信號(hào)流動(dòng)方向,即符號(hào)“=>”不限制信號(hào)數(shù)據(jù)的流動(dòng)方向。還有一種對(duì)應(yīng)的連接表述方法稱為位置關(guān)聯(lián)法。即:以位置的對(duì)應(yīng)關(guān)系連接相應(yīng)的端口。譬如:例3-2及例3-9中,半加器的端口信號(hào)排列順序都是(A,B,CO

,SO);當(dāng)它作為元件u2在圖3-11中連接時(shí),其對(duì)應(yīng)的連接信號(hào)就是(net1,cin,net3,sum

)。于是與此半加器u2的端口按順序?qū)?yīng)起來(lái),就得到例3-9中關(guān)于u2的位置關(guān)聯(lián)法例化表述。對(duì)于位置關(guān)聯(lián)法(或稱位置映射法),關(guān)聯(lián)表述的信號(hào)位置十分重要,不能放錯(cuò);而且,一旦位置關(guān)聯(lián)例化語(yǔ)句確定,被連接元件的源文件中的端口表內(nèi)的信號(hào)排列位置就不能再變動(dòng)。如例3-2,這時(shí)只能把端口改成以下形式:

3.4全加器及其VHDL表述3.4.38位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用3.4全加器及其VHDL表述

例3-11的仿真波形圖如圖3-12所示。從圖3-13它的RTL圖(寄存器傳輸級(jí))中可以清晰看到8位數(shù)相加的和再加進(jìn)位值的硬件方式?!镉捎趫D3-13—類RTL圖直接來(lái)自NetlistViewers的RTLViewers生成器,主要用來(lái)了解VHDL描述電路的大致結(jié)構(gòu),不拘泥細(xì)節(jié),所以包括其中的小字不清楚都無(wú)關(guān)緊要。因?yàn)樵敿?xì)功能主要是通過(guò)仿真來(lái)了解。3.4.38位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用★為方便獲得兩個(gè)8位數(shù)據(jù)A和B相加后的進(jìn)位值,這里首先定義一個(gè)9位信號(hào)DATA,然后用并位符&在A和B的高位并位一個(gè)‘0’,將其都擴(kuò)為9位。

VHDL規(guī)定,賦值符號(hào)兩邊的數(shù)據(jù)類型必須一致,且若為矢量類型,兩端值的位數(shù)也必須相等。

3.4全加器及其VHDL表述★在算式中直接使用并位操作符&時(shí),必須對(duì)并位式加上括號(hào),如(“00000000”&CIN)。這是因?yàn)椴煌牟僮鞣鋬?yōu)先級(jí)別不同,例如乘除的優(yōu)先級(jí)別一定高于加減,而加減與并位&操作級(jí)別相等。對(duì)于平級(jí)的情況,在前的操作符則具有較高的優(yōu)先級(jí),其運(yùn)算將優(yōu)先進(jìn)行。例如,若(‘0’&B)項(xiàng)不加括號(hào),則賦值語(yǔ)句右邊最后的運(yùn)算結(jié)果有17位,與左邊的DATA不符;而若(“00000000”&CIN)不加括號(hào),則運(yùn)算結(jié)果有10位,因?yàn)樵谧詈蟛⑽籆IN前的運(yùn)算結(jié)果己經(jīng)有9位了?!锢?-11中,使用了IEEE庫(kù)中另一程序包:STD_LOGIC_UNSIGNED。

【原因】:VHDL只允許加減乘除(+、-、*、/)算術(shù)操作的操作數(shù)的數(shù)據(jù)類型是整數(shù)類型(INTEGER類型,如1、2、3、4等),且算術(shù)結(jié)果仍然是整數(shù)類型;而例3-11中,加號(hào)“+”兩邊的操作數(shù)的類型都是標(biāo)準(zhǔn)位矢類型,相加后賦值的DATA也是標(biāo)準(zhǔn)位矢類型。顯然不符合VHDL的語(yǔ)法要求。3.4.38位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用3.4全加器及其VHDL表述【解決方法】:

(1)運(yùn)算符重載:調(diào)用一個(gè)具有特定功能的函數(shù)(運(yùn)算符重載函數(shù)),以便賦予加號(hào)“+”具備新的數(shù)據(jù)類型的操作功能。

(2)重新定義運(yùn)算符:VHDL允許用戶對(duì)原有的基本操作符重新定義,賦予新的含義和功能,從而建立一種新的操作符。

VHDL的IEEE庫(kù)中的STD_LOGIC_UNSIGNED程序包中預(yù)定義的操作符{加(+)、乘(*)、小于等于(<=)、不等于(/=)、邏輯與(AND)…}對(duì)相應(yīng)的數(shù)據(jù)類型INTEGER、STD_LOGIC和STD_LOGIC_VECTOR的操作做了重載,允許被重載的運(yùn)算符對(duì)新的數(shù)據(jù)類型進(jìn)行操作,或者允許不同的數(shù)據(jù)類型之間用此運(yùn)算符進(jìn)行運(yùn)算。即:完成標(biāo)準(zhǔn)矢量(或整數(shù)與標(biāo)準(zhǔn)矢量)間的各種運(yùn)算,并使計(jì)算結(jié)果自動(dòng)轉(zhuǎn)換為標(biāo)準(zhǔn)邏輯矢量類型STD_LOGIC_VECTOR,向DATA進(jìn)行賦值。

3.4.38位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用3.5乘法器及其VHDL表述

3.5.1統(tǒng)計(jì)位矢中含‘1’個(gè)數(shù)的電路模塊設(shè)計(jì)

下面通過(guò)幾則實(shí)用電路模塊,即乘法器及相關(guān)電路的VHDL設(shè)計(jì)程序,進(jìn)一步展示常用的新的VHDL語(yǔ)句、程序結(jié)構(gòu)、數(shù)據(jù)類型和電路設(shè)計(jì)方法。

例3-12所描述的電路是一個(gè)統(tǒng)計(jì)輸入的8位位矢中含‘1’個(gè)數(shù)的程序,其仿真波形如圖3-14所示。這是一則與移位相加型乘法器程序結(jié)構(gòu)十分相似的電路模型。3.5乘法器及其VHDL表述

3.5.1統(tǒng)計(jì)位矢中含‘1’個(gè)數(shù)的電路模塊設(shè)計(jì)3.5乘法器及其VHDL表述

3.5.1統(tǒng)計(jì)位矢中含‘1’個(gè)數(shù)的電路模塊設(shè)計(jì)

例3-12的程序中有如下三點(diǎn)值得注意的語(yǔ)句結(jié)構(gòu):

(1)變量關(guān)鍵詞VARIABLE的用法。這包括變量的定義方式、定義位置和賦值特點(diǎn)等。變量VARIABLE與信號(hào)SIGNAL一樣,都屬于數(shù)據(jù)對(duì)象,在此程序中的功能與信號(hào)相似。但變量的賦值符號(hào)與信號(hào)的賦值符號(hào)是不同的,信號(hào)的賦值符號(hào)是“<=”,而變量的賦值符號(hào)是“:=”。例如若a定義為變量,對(duì)其賦值可以寫為a:=‘1’。與信號(hào)不同,變量的功能主要用于數(shù)據(jù)的暫存,而且只能在進(jìn)程中定義變量,所以,變量無(wú)法將數(shù)據(jù)傳遞出進(jìn)程。例3-12中的語(yǔ)句CNTH<=Q

則能幫助變量Q將數(shù)據(jù)傳出去。

(2)程序中的IF語(yǔ)句沒(méi)有用關(guān)鍵詞ELSE。這種用法是一種條件響應(yīng)不完整的現(xiàn)象,即沒(méi)有表達(dá)當(dāng)條件(DIN(n)=‘0’)時(shí)作何處理。第5章中將會(huì)進(jìn)一步給予說(shuō)明。

(3)程序使用了循環(huán)語(yǔ)句,即LOOP語(yǔ)句的一種類型。3.5乘法器及其VHDL表述

3.5.2FOR_LOOP循環(huán)語(yǔ)句用法

例3-12程序中使用的FOR_LOOP循環(huán)語(yǔ)句是LOOP語(yǔ)句的一種類型。LOOP語(yǔ)句屬于可綜合的循環(huán)語(yǔ)句,它可以使所包含的一組順序語(yǔ)句被循環(huán)執(zhí)行,其執(zhí)行次數(shù)可由設(shè)定的循環(huán)參數(shù)決定。LOOP語(yǔ)句的常用表達(dá)方式有以下兩種:

這種循環(huán)方式是一種最簡(jiǎn)單的語(yǔ)句形式,它的循環(huán)方式需引入其他控制語(yǔ)句(如EXIT語(yǔ)句)后才能確定跳出;“LOOP標(biāo)號(hào)”可任選。用法示例如下:3.5乘法器及其VHDL表述

3.5.2FOR_LOOP循環(huán)語(yǔ)句用法

FOR后面的“循環(huán)變量”是一個(gè)臨時(shí)變量,如n,屬LOOP語(yǔ)句的局部變量,不必事先定義。這個(gè)變量只能作為賦值源,不能被賦值,它由LOOP語(yǔ)句自動(dòng)定義?!咀⒁狻浚涸贚OOP語(yǔ)句范圍內(nèi)不要再使用其他同名的標(biāo)識(shí)符。

“循環(huán)次數(shù)范圍”規(guī)定了LOOP語(yǔ)句中的順序語(yǔ)句被執(zhí)行的次數(shù)(以常數(shù)表示),否則在LOOP體內(nèi)的邏輯可以重復(fù)任何可能的范圍,這將導(dǎo)致耗費(fèi)過(guò)大的硬件資源,綜合器不支持沒(méi)有約束條件的循環(huán)。例3-12中,循環(huán)語(yǔ)句中的順序語(yǔ)句是一個(gè)IF語(yǔ)句。當(dāng)測(cè)到DIN的某一個(gè)位為1時(shí),則通過(guò)賦值語(yǔ)句Q:=Q+1作累加。

VHDL中的循環(huán)語(yǔ)句與C等軟件描述語(yǔ)言中的循環(huán)語(yǔ)句大有不同:前者每一次循環(huán)都將產(chǎn)生一個(gè)硬件模塊,隨著循環(huán)次數(shù)的增加,耗用硬件資源,但工作時(shí)間未必增加;后者的每次循環(huán)損失的是運(yùn)行時(shí)間。3.5乘法器及其VHDL表述

3.5.3移位相加型乘法器的VHDL表述方法

例3-13所示的是基于移位相加原理的4×4位乘法器的VHDL程序,其仿真波形如圖3-15所示(注意圖中所有變量的數(shù)據(jù)類型都被設(shè)置成十進(jìn)制類型)。此例的程序結(jié)構(gòu)與例3-12基本相同。主要不同之處是,這個(gè)乘法器可以僅僅通過(guò)改變其中的參數(shù)S,即能增加此乘法器的位數(shù)。不但如此,這個(gè)參數(shù)S的數(shù)值可以從外部,即頂層設(shè)計(jì)中傳送進(jìn)入,從而能在頂層設(shè)計(jì)中通過(guò)例化語(yǔ)句輕易改變此乘法器的尺寸?!锢?-13中涉及的新的語(yǔ)法知識(shí)比較多,以下分別以分節(jié)的形式敘述之。3.5乘法器及其VHDL表述

3.5.3移位相加型乘法器的VHDL表述方法1011×)1001101100000000

+)101111000111111(A)×)1101(B)1111000011111111110000114位×4位乘法器的結(jié)果最多為8位——00001111(A0)×)1101(B)00001111

000000000

0000111100

00001111000

00011000011假設(shè):A=1111,B=1101;A0=00001111;R1.0=00000000R1.1=R1+00001111=00001111;R1.2=R1.1+00111100=01001011;R1.3=R1.2+01111000=11000011;R1<=R1.3;R<=R13.5乘法器及其VHDL表述

3.5.3移位相加型乘法器的VHDL表述方法3.5乘法器及其VHDL表述

3.5.4GENERIC參數(shù)定義語(yǔ)句

實(shí)體中定義的端口:連接設(shè)計(jì)實(shí)體與外部電路信號(hào)和數(shù)據(jù)的有形通道。

類似端口的參數(shù)的通道:這是一種無(wú)形的通道,但卻能像普通端口一樣,在綜合或仿真編譯中接受外部的數(shù)據(jù),以改變電路的規(guī)模或時(shí)序性質(zhì)。

★參數(shù)傳遞說(shuō)明語(yǔ)句(GENERIC語(yǔ)句)常以一種說(shuō)明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說(shuō)明部分,為所說(shuō)明的環(huán)境提供一種靜態(tài)信息(時(shí)間參數(shù)或總線寬度)通道。被傳遞的參數(shù),或稱類屬參量(類屬值或類屬變量)與普通常數(shù)不同,常數(shù)只能從設(shè)計(jì)實(shí)體的內(nèi)部得到賦值,且不能再改變;而作為參數(shù)傳遞的類屬值可由設(shè)計(jì)實(shí)體外部提供。因此,設(shè)計(jì)者可從外面通過(guò)類屬參量的重新設(shè)定,十分方便地改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。3.5乘法器及其VHDL表述

3.5.4GENERIC參數(shù)定義語(yǔ)句參數(shù)傳遞說(shuō)明語(yǔ)句的一般書寫格式如下:

參數(shù)傳遞說(shuō)明語(yǔ)句以關(guān)鍵詞GENERIC引導(dǎo)一個(gè)類屬參量表,在表中提供時(shí)間參數(shù)或總線寬度等靜態(tài)信息。此語(yǔ)句用于設(shè)計(jì)實(shí)體和其外部電路環(huán)境通信的參數(shù)和傳遞信息。GENERIC語(yǔ)句在所定義的環(huán)境中的地位與常數(shù)相似,但卻能(在編譯過(guò)程中)從外部動(dòng)態(tài)地接受賦值,因此其行為類似于端口PORT。因此常如實(shí)體定義語(yǔ)句那樣,將GENERIC語(yǔ)句的說(shuō)明放在其中,且放在端口說(shuō)明語(yǔ)句的前面。3.5乘法器及其VHDL表述

3.5.5整數(shù)數(shù)據(jù)類型

例3-13的GENERIC語(yǔ)句中,定義參數(shù)S的數(shù)據(jù)類型是整數(shù)類型INTEGER。整數(shù)數(shù)據(jù)類型INTEGER的元素包含正整數(shù)、負(fù)整數(shù)和零。在VHDL中,整數(shù)的取值范圍是-2147483647?+2147483647,即可用32位有符號(hào)的二進(jìn)制數(shù)表示。應(yīng)該特別注意的是,通常VHDL仿真器將INTEGER類型作為有符號(hào)數(shù)處理,而VHDL綜合器則將INTEGER作為無(wú)符號(hào)數(shù)處理。在定義整數(shù)類型時(shí)VHDL綜合器通常要求使用關(guān)鍵詞RANGE構(gòu)成的子句限定數(shù)的范圍,然后根據(jù)所限定的范圍來(lái)決定表示此信號(hào)或變量的二進(jìn)制數(shù)的位數(shù)。

VHDL綜合器無(wú)法綜合未限定范圍的整數(shù)類型的信號(hào)或變量。如:

定義Q的數(shù)據(jù)對(duì)象是信號(hào),數(shù)據(jù)類型是整數(shù),限定Q的取值范圍是0?15,共16個(gè)值,可用4位二進(jìn)制數(shù)來(lái)表示。因此,VHDL綜合器自動(dòng)將Q綜合成由四條信號(hào)線構(gòu)成的總線方式信號(hào):Q(3)、Q(2)、Q(1)和Q(0)。3.5乘法器及其VHDL表述

3.5.5整數(shù)數(shù)據(jù)類型整數(shù)常量的書寫方式示例如下:【注意】:整數(shù)的表達(dá)不加引號(hào),如1、0、25等;“#”類似于“()”的功能。16E3等于十進(jìn)制整數(shù)“16的3次冪”3.5乘法器及其VHDL表述

3.5.5整數(shù)數(shù)據(jù)類型

自然數(shù)類型NATURAL是整數(shù)類型的一個(gè)子類型,包含0和所有正整數(shù)。若將Q定義為NATURAL類型,綜合結(jié)果與INTEGER相同,示例如下:即將Q定義為NATURAL類型的BUFFER端口,取值范圍是整數(shù)0?15。

正整數(shù)類型POSITIVE也是整數(shù)類型的一個(gè)子類型,比NATURAL類型少一個(gè)0。對(duì)于許多綜合器,如果定義上例的Q定義為POSITIVERANGE15DOWNTO0,仍然能綜合出相同的電路來(lái)。與BIT、BIT_VECTOR一樣,數(shù)據(jù)類型INTEGER、NATURAL和POSITIVE都定義在VHDL標(biāo)準(zhǔn)程序包SDANDARD中。

由于此程序包是默認(rèn)打開的,所以不必為定義整數(shù)類型而以顯式打開STD庫(kù)和程序包SDANDARD。3.5乘法器及其VHDL表述

3.5.6省略賦值操作符

例3-13中的語(yǔ)句“R1:=(others=>‘0’);”等效于向變量R1賦值“00000000”,即:R1:=“00000000”,實(shí)際是為R1賦初始值0。如果將例3-13作為一個(gè)可被外部電路調(diào)用和參量控制的模塊,則當(dāng)前程序中的參數(shù)S是一個(gè)不定值,于是對(duì)R1所賦的值的二進(jìn)制位數(shù)也是不定的。一般地,為了簡(jiǎn)化表達(dá)和位數(shù)不定情況下的賦值,可使用短語(yǔ)“(OTHERS=>X)”,這是一個(gè)省略賦值操作符,它可以在較多位的位矢量賦值中作省略化的賦值,如有:

最下的語(yǔ)句則等同于:d1<=“11111”;a1:=“0000000000000000”。其優(yōu)點(diǎn)是在給大的位矢量賦值時(shí)簡(jiǎn)化了表述,明確了含義,特別是這種表述與位矢量長(zhǎng)度無(wú)關(guān)。3.5乘法器及其VHDL表述

3.5.6省略賦值操作符

利用“(OTHERS=>X)”還可給位矢量的某一部分位賦值之后再使用OTHERS給剩余的位賦值,如d2<=(1=>‘1’,4=>‘1’,OTHERS=>‘0’)。此句意義是給位矢量d2的第1位和第4位賦值為‘1’,而其余位賦值‘0’。下例是用省略賦值操作符“(OTHERS=>X)”給d1賦其

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論