第2章-VHDL設(shè)計(jì)入門-《EDA技術(shù)》-教學(xué)課件_第1頁
第2章-VHDL設(shè)計(jì)入門-《EDA技術(shù)》-教學(xué)課件_第2頁
第2章-VHDL設(shè)計(jì)入門-《EDA技術(shù)》-教學(xué)課件_第3頁
第2章-VHDL設(shè)計(jì)入門-《EDA技術(shù)》-教學(xué)課件_第4頁
第2章-VHDL設(shè)計(jì)入門-《EDA技術(shù)》-教學(xué)課件_第5頁
已閱讀5頁,還剩187頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

【要求】掌握VHDL語言的基本知識和運(yùn)用VHDL語言設(shè)計(jì)邏輯電路的基本方法?!局R點(diǎn)】理解VHDL程序的基本結(jié)構(gòu)理解VHDL程序的順序語句理解VHDL程序的并行語句理解VHDL程序的語言要素第2章VHDL設(shè)計(jì)入門下一頁【要求】第2章VHDL設(shè)計(jì)入門下一頁【重點(diǎn)和難點(diǎn)】

VHDL程序的順序結(jié)構(gòu)VHDL程序的并行結(jié)構(gòu)【引言】HDL文本輸入設(shè)計(jì)法是QuartusII的一個重要輸入設(shè)計(jì)法

,本書主要介紹VHDL文本輸入法。本章討論VHDL語言的基本知識和運(yùn)用VHDL語言設(shè)計(jì)邏輯電路的方法,在以后各章再對VHDL文本輸入設(shè)計(jì)法及其應(yīng)用作進(jìn)一步的討論。本章先介紹VHDL程序的基本結(jié)構(gòu)、順序語句和并行語句,最后對VHDL程序的語言要素做一個總結(jié)。第2章VHDL設(shè)計(jì)入門下一頁上一頁【重點(diǎn)和難點(diǎn)】第2章VHDL設(shè)計(jì)入門下一頁上一頁

第2章VHDL設(shè)計(jì)入門§2.1VHDL程序的基本結(jié)構(gòu)§2.2VHDL程序的順序語句§2.3VHDL程序的并行語句§2.4VHDL程序的語言要素總結(jié)§2.5本章小結(jié)上一頁

第2章VHDL設(shè)計(jì)入門§2.1VHDL程序的基本結(jié)VHDL程序包含實(shí)體(ENTITY)、結(jié)構(gòu)體(ARCHITECTURE)、配置(CONFIGURATION)、程序包(PACKAGE、庫(LIBRARY)5個部分。簡單的實(shí)體是由實(shí)體和結(jié)構(gòu)體兩部分組成的。實(shí)體用于描述設(shè)計(jì)系統(tǒng)的外部接口信號,結(jié)構(gòu)體用于描述系統(tǒng)的行為、系統(tǒng)數(shù)據(jù)的流程或者系統(tǒng)組織結(jié)構(gòu)形式。設(shè)計(jì)實(shí)體是VHDL程序的基本單元,是電子系統(tǒng)的抽象。簡單的實(shí)體可以是一個與門電路(ANDGATE),復(fù)雜的實(shí)體可以是一個微處理器或一個數(shù)字電了系統(tǒng)。實(shí)體由實(shí)體說明和結(jié)構(gòu)體說明兩部分組成?!?.1VHDL程序的基本結(jié)構(gòu)下一頁VHDL程序包含實(shí)體(ENTITY)、結(jié)構(gòu)體(A下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)

【例2.1】以下是一個簡單的VHDL源程序,可以歸納出VHDL程序的基本結(jié)構(gòu)。

ENTITYmyand2IS--實(shí)體名稱為and2PORT(a,b:INBIT;--a,b是兩個輸入引腳c:OUTBIT);--c為輸出引腳ENDmyand2;ARCHITECTUREexamlOFmyand2IS---結(jié)構(gòu)體BEGINexam1是對實(shí)體and2的內(nèi)部c<=aANDb;描述,描述了and2器件的內(nèi)部功能為實(shí)現(xiàn)一個2輸入與門ENDexam1;下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)【下一頁上一頁由例2.1可以看出,VHDL程序由兩部分組成:第1部分為實(shí)體說明.第2部分為結(jié)構(gòu)體。VHDL程序結(jié)構(gòu)更抽象、更基本、更簡練的表示如圖2-1所示。設(shè)計(jì)實(shí)體用關(guān)鍵字ENTITY來標(biāo)識,結(jié)構(gòu)體ARCHITECTURE來標(biāo)識。系統(tǒng)設(shè)計(jì)中的實(shí)體提供該設(shè)計(jì)系統(tǒng)的公共信息,結(jié)構(gòu)體定義了各個模塊內(nèi)的操作特性。一個設(shè)計(jì)實(shí)體必須包含一個結(jié)構(gòu)體或含有多個結(jié)構(gòu)體。一個電子系統(tǒng)的設(shè)計(jì)模型如圖2-2所示。§2.1VHDL程序的基本結(jié)構(gòu)下一頁上一頁由例2.1可以看出,VHDL程序由兩部下一頁一、實(shí)體實(shí)體由實(shí)體名、類型說明、端口說明、實(shí)體說明部分和實(shí)體語句部分組成。1.實(shí)體語句結(jié)構(gòu)根據(jù)IEEE標(biāo)準(zhǔn),實(shí)體組織的一般格式為:ENTITY實(shí)體名IS[GENERIC(類型說明);][PORT(端口說明);]

實(shí)體說明部分:[BEGIN

實(shí)體語句部分;]

END[ENTITY][實(shí)體名];§2.1VHDL程序的基本結(jié)構(gòu)下一頁一、實(shí)體§2.1VHDL程序的基本結(jié)構(gòu)實(shí)體名是設(shè)計(jì)者自己給設(shè)計(jì)實(shí)體的命名,其他設(shè)計(jì)實(shí)體可對該設(shè)計(jì)實(shí)體進(jìn)行調(diào)用。中間在方括號內(nèi)的語句描述,在特定的情況下并非是必須的。

2.類型說明類型說明是實(shí)體說明中的可選項(xiàng),放在端口說明之前,其一般使寫格式為:GENERIC[CONSTANT]名字表:[1N]了類型標(biāo)識[:一靜態(tài)表達(dá)式],…]

舉例:GENERIC(m:TIME:=3ns)

這個參數(shù)說明是指在VHDL程序中,結(jié)構(gòu)體內(nèi)的參數(shù)m的值為3ns。

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)實(shí)體名是設(shè)計(jì)者自己給設(shè)計(jì)實(shí)體的命名,其他設(shè)計(jì)實(shí)體可類型說明和端口說明是實(shí)體說明的組成部分,用于說明設(shè)計(jì)實(shí)體和外部通信的通道。利用外部通信通道,參數(shù)的類型說明為設(shè)計(jì)實(shí)體提供信息。參數(shù)的類型用來規(guī)定端口的大示、I/O引腳的指派、實(shí)體中子元件的數(shù)口和實(shí)體的定時特性等信息。3.端口說明端口說明是對設(shè)計(jì)實(shí)體與外部接口的描述,是設(shè)計(jì)實(shí)體和外部環(huán)境動態(tài)通信的通道,其功能對應(yīng)于電路圖符號的一個引腳。實(shí)體說明中的每一個I/O信號被稱為一個端口,一個端口就是一個數(shù)據(jù)對象。端口可以被賦值,也可以當(dāng)做變量用在邏輯表達(dá)式中。定義實(shí)體的一組端口稱作端口說明。

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)類型說明和端口說明是實(shí)體說明的組成部分,用于說明設(shè)計(jì)端口說明的組織結(jié)構(gòu)必須有一個名稱、一個通信模式和一個數(shù)據(jù)類型。端口說明的一般格式為:Port(端口名,端口名:模式數(shù)據(jù)類型名┊端口名,端口名:模式數(shù)據(jù)類型名);

端口名是賦于每個外部引腳的名稱,名稱的含義要明確,如D開頭的端口名表示數(shù)據(jù),A開頭的端口名表示地址等。端口名通常用幾個英文字母或一個英文字母加數(shù)字表示。下面是合法的端口名:CLK,RESET,A0,D3。

模式用來說明數(shù)據(jù)、信號通過該端口的傳輸方向。端口模式有IN,OUT,BUFFER,1NOUT。下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)端口說明的組織結(jié)構(gòu)必須有一個名稱、一個通信模式和一個數(shù)下一頁上一頁(1)輸入(IN)

輸入僅允許數(shù)據(jù)流入輸入模式主要用于時鐘輸入、控制輸入(如RESET,ENABLE,CLK)和單向的數(shù)據(jù)輸入,如地址信號(ADDRESS)。不用的輸入一般接地,以免浮動引入干擾噪聲。

(2)輸出(OUT)

輸出僅允許數(shù)據(jù)流從實(shí)體內(nèi)部輸出。端口的驅(qū)動源是由被設(shè)計(jì)的實(shí)體內(nèi)部進(jìn)行的。輸出模式不能用于被設(shè)計(jì)實(shí)體的內(nèi)部反饋,因?yàn)檩敵龆丝谠趯?shí)體內(nèi)不能看做可讀的。輸出模式常用于計(jì)數(shù)輸出、單向數(shù)據(jù)輸出、設(shè)計(jì)實(shí)體產(chǎn)生的控制其他實(shí)體的信號等。一般而言,不用的輸出端口不能接地,避免造成輸出高電平時燒毀被設(shè)計(jì)實(shí)體。

§2.1VHDL程序的基本結(jié)構(gòu)下一頁上一頁(1)輸入(IN)§2.1VHDL程序

(3)緩沖(BUFFER)

緩沖模式的端口與輸出模式的端口類似,只是緩沖模式允許內(nèi)部引用該端口的信號。緩沖端口既能用于輸出,也能用于反饋。緩沖端口的驅(qū)動源可以是:設(shè)計(jì)實(shí)體的內(nèi)部信號源;其他實(shí)體的緩沖端口。緩沖不允許多重驅(qū)動,不與其他實(shí)體的雙向端口和輸出端口相連。內(nèi)部反饋的實(shí)現(xiàn)方法有:建立緩沖模式端口;建立設(shè)計(jì)實(shí)體的內(nèi)部節(jié)點(diǎn)。

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)(3)緩沖(BUFFER)下一頁上一頁§2.1VHDL緩沖模式用于在實(shí)體內(nèi)部建立一個可讀的輸出端口,例如計(jì)數(shù)器輸出,計(jì)數(shù)器的現(xiàn)態(tài)被用來決定計(jì)數(shù)器的次態(tài)。實(shí)體既需要輸出,又需要反饋,這時設(shè)計(jì)端口模式應(yīng)為緩沖模式。

(4)雙向模式(INOUT)

雙向模式可以代替輸入模式、輸出模式和緩沖模式。在設(shè)計(jì)實(shí)體的數(shù)據(jù)流中,有些數(shù)據(jù)是雙向的,數(shù)據(jù)可以流入該設(shè)計(jì)實(shí)體,也有數(shù)據(jù)從設(shè)計(jì)實(shí)體流出,這時需要將端口模式設(shè)計(jì)為雙向端口。雙向模式的端口允許引入內(nèi)部反饋,所以雙向模式端口還可以作為緩沖模式用。由上述分析可見,雙向端口是一個完備的端口模式。下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)緩沖模式用于在實(shí)體內(nèi)部建立一個可讀的輸出端口,例如二、結(jié)構(gòu)體結(jié)構(gòu)體具體指明了該設(shè)計(jì)實(shí)體的行為,定義了該設(shè)計(jì)實(shí)體的功能,規(guī)定了該端口。輸入信號的驅(qū)動源由設(shè)計(jì)實(shí)體的數(shù)據(jù)流程,指派了實(shí)體中內(nèi)部元件的連接關(guān)系。用VHDL語言描述結(jié)構(gòu)體有4種方法:①行為描述法:采用進(jìn)程語句,順序描述被稱設(shè)計(jì)實(shí)體的行為。②數(shù)據(jù)流描述法:采用進(jìn)程語句,順序描述數(shù)據(jù)流在控制流作用下被加工、處理、存儲的全過程。③結(jié)構(gòu)描述法:采用并行處理語句描述設(shè)計(jì)實(shí)體內(nèi)的結(jié)構(gòu)組織和元件互連關(guān)系。下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)二、結(jié)構(gòu)體下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)④采用多個進(jìn)程(PROCESS)、多個模塊(BLOCKS)、多個子程序(SUBPROGRAMS)的子結(jié)構(gòu)方式。結(jié)構(gòu)體的一般書寫格式為:ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS

定義語句,內(nèi)部信號,常數(shù),數(shù)據(jù)類型,函數(shù)定義

BEGIN[并行處理語句];[進(jìn)程語句];┊END結(jié)構(gòu)體名;

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)④采用多個進(jìn)程(PROCESS)、多個模塊(BLO一個結(jié)構(gòu)體的組織結(jié)構(gòu)從“ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS”開始,到“END結(jié)構(gòu)體名”結(jié)束。結(jié)構(gòu)體名稱由設(shè)計(jì)者自由命名,是結(jié)構(gòu)體的唯一名稱。OF后面的實(shí)體名稱表明該結(jié)構(gòu)體屬于哪個設(shè)計(jì)實(shí)體,有些設(shè)計(jì)實(shí)體中可能含有多個結(jié)構(gòu)體。這些結(jié)構(gòu)體的命名可以從不同側(cè)面反映結(jié)構(gòu)體的特色,讓人一目了然。例如:ARCHITECTUREbehacvioralOFmuxIS---用結(jié)構(gòu)體行為命名ARCHITECTUREdataflowOFmuxIS---用結(jié)構(gòu)體的數(shù)據(jù)流命名

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)一個結(jié)構(gòu)體的組織結(jié)構(gòu)從“ARCHITECTURE結(jié)ARCHITECTUREstructuralOFmuxIS---用結(jié)構(gòu)體的組織結(jié)構(gòu)命名ARCHITECTUREboolOFmuxIS---用結(jié)構(gòu)體的數(shù)學(xué)表達(dá)方式命名

ARCHITECTURElatchOFmuxIS---用結(jié)構(gòu)體的功能來定義上述幾個結(jié)構(gòu)體都屬于設(shè)計(jì)實(shí)體mux,每個結(jié)構(gòu)體有著不同的名稱,使得閱讀VHDL程序的人能直接從結(jié)構(gòu)體的描述方式了解功能,定義電路行為。下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)ARCHITECTUREstructural三、程序包實(shí)體中定義的各種數(shù)據(jù)類型、子程序和元件調(diào)用說明只能局限在該實(shí)體內(nèi)或結(jié)構(gòu)體內(nèi)調(diào)用,其他實(shí)體不能使用。程序包的語句格式如下:PACKAGE程序包名IS---程序包首開始

[程序包首說明語句]END程序包名;---程序包首結(jié)束

PACKAGEBODY程序包名IS---程序包體開始

[程序包體說明語句]END程序包名;

---程序包體結(jié)束

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)三、程序包下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)STD_LOGIC_1164程序包是IEEE庫中最常用的程序包,是IEEE的標(biāo)準(zhǔn)程序包。其中包括了一些數(shù)據(jù)類型、了類型和函數(shù)的定義,這些定義將VHDL擴(kuò)展為一個能描述多值邏輯(即除具有“0”和“1”以外還有其他的邏輯量,如高阻態(tài)“Z"、不定態(tài)“X”等)的硬件描述語言。程序包結(jié)構(gòu)中,程序包體并非是必須的,程序包首可以獨(dú)立定義和使用。例如:PACKAGEPAC1IS---程序包首開始TYPEBYTEISRANGE0TO255;---定義數(shù)據(jù)類型BYTE

下一頁上一頁§2.1VHDL程序的基本結(jié)構(gòu)STD_LOGIC_1164程序包是IEEE庫中SIGNALADDEND:NIBBLE;---定義信號ADDENDENDPAC1;---程序包首結(jié)束如果要使用這個程序包中的所有定義,可用USE語句訪問此程序包:USEWORK.PAC1.ALL;四、庫在利用VHDL進(jìn)行工程設(shè)計(jì)中,為了提高設(shè)計(jì)效率以及使設(shè)計(jì)遵循某些統(tǒng)一的語言標(biāo)準(zhǔn)或數(shù)據(jù)格式,有必要將一些有用的信息匯集在一個或幾個庫中以供調(diào)用。這些信息可以是預(yù)先定義的數(shù)據(jù)類型、子程序等設(shè)計(jì)單元的集合體(程序包),或預(yù)先設(shè)計(jì)好的各種設(shè)計(jì)實(shí)體(元件庫程序包)。因此,可以把庫看成是一種用來存儲預(yù)先完成的程序包和數(shù)據(jù)集合體的倉庫。

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)SIGNALADDEND:NIBBLE;庫的語句格式如下:LIBRARY庫名:

這一語句相當(dāng)于為其后的設(shè)計(jì)實(shí)體打開了以次庫名命名的庫,以便設(shè)計(jì)實(shí)體可以利用其中的程序包。如語句“LIBRARY_IEEE;”表示打開IEEE庫。

1.庫的種類

(1)IEEE庫

IEEE庫是VH支持工業(yè)標(biāo)準(zhǔn)的程序包。IEEE庫中的標(biāo)準(zhǔn)程序包主要包含STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_SIGNED,STD_LOGIC_UNSIGNED程序包。

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)庫的語句格式如下:上一頁下一頁§2.1VHDL程(2)STD庫

STD庫是VHDL的標(biāo)準(zhǔn)庫,VHDL在編譯過程中自動使用這個庫,所以使用時不需要語句說明,類似“LIBRARY_STD”這種語句是不必要的。

(3)WORK庫

WORK庫是用戶的VHDL設(shè)計(jì)的現(xiàn)行工作庫,用于存放用戶設(shè)計(jì)和定義的一些設(shè)計(jì)單元和程序包。因此,自動滿足VHDL的語言標(biāo)準(zhǔn),實(shí)際調(diào)用中,也不需要語句說明。2.庫的用法在VHDL中,庫的說明語句是放在實(shí)體單元的前面,而目庫語言一般必須與USE語言同用。庫語言關(guān)鍵詞LIBRARY,指明所使用的庫上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)(2)STD庫上一頁下一頁§2.1VHDL程序名。USE語句指明庫中的程序包。一旦說明了程序包,整個設(shè)計(jì)實(shí)體都可以進(jìn)入訪問和調(diào)用,但其作用范圍僅限于所說明的設(shè)計(jì)實(shí)體。

USE語句的使用將使說明的程序包對本設(shè)計(jì)實(shí)體部分全部開放,USE語句的使用有兩種常用格式:USE庫名.程序包名.項(xiàng)目名;USE庫名.程序包名.ALL;

例如:LIBRARYIEEE;---打開IEEE庫

USEIEEE.STD_LOGIC_1164.ALL;---使用IEEE庫內(nèi)的STD_LOGIC_1164

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)名。USE語句指明庫中的程序包。一旦說明了程序包,整個設(shè)計(jì)實(shí)USEIEEE.STD_LOGIC_UNSIGNED.ALL;

---使用IEEE庫內(nèi)的STDLOGICUNSIGNED程序包內(nèi)的所有資源五、配置配置可以把特定的結(jié)構(gòu)體指定給一個確定的實(shí)體。為了滿足不同設(shè)計(jì)階段或不同場合的需要,對某一個實(shí)體,我們可以給出兒種不同形式的結(jié)構(gòu)體描述,這樣在其他實(shí)體調(diào)用該實(shí)體時,就可以根據(jù)需要選擇其中某一個結(jié)構(gòu)體,選擇不同的結(jié)構(gòu)體以便進(jìn)行性能對比試驗(yàn),確認(rèn)性能最佳的結(jié)構(gòu)體。以上這些工作就由配置來完成。

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)USEIEEE.STD_LOGIC_UNSIGN配置語句的一般語句如下:CONFIGURATION配置名OF實(shí)體名IS[配置語句說明]END配置名;[例2.2]在描述一個與非門NAND的設(shè)計(jì)實(shí)體中會有兩個不同的邏輯描述方法構(gòu)成的結(jié)構(gòu)體。用配置語句來為特定的結(jié)構(gòu)體擊求作配置指定。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMYNANDIS

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)配置語句的一般語句如下:上一頁下一頁§2.1VHDL程序PORT(A:INSTD_LOGIC;B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDENTITYMYNAND;ARCHITECTUREART1OFMYNANDISBEGINC<=NOT(AANDB);ENDARCHITECYUREART1;ARCHITECTUREART2OFMYNANDISBEGIN

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)PORT(A:INSTD_LOGIC;上一頁下C<='1'WHEN(A='0')AND(B='0')ELSE'1'WHEN(A='0')AND(B='1')ELSE'1'WHEN(A='1')AND(B='0')ELSE'0'WHEN(A='1')AND(B='1')ELSE'0‘;ENDARCHITECTURE;CONFIGURATIONSECONDOFISFORART2ENDFOR;ENDSECOND;

上一頁下一頁§2.1VHDL程序的基本結(jié)構(gòu)C<='1'WHEN(A='0')AND(BCONFIGURATIONFIRSTOFISFORART1ENDFOR;ENDFIRST;在本例中,若指定配置名為SECOND,則為實(shí)體NAND配置的結(jié)構(gòu)體為ART2;若指定配置名為FIRST,則為實(shí)體NAND配置的結(jié)構(gòu)體為ARTl。兩種結(jié)構(gòu)的描述方式不同,但是邏輯功能相同。

上一頁返回§2.1VHDL程序的基本結(jié)構(gòu)CONFIGURATIONFIRSTOF

順序語句是VHDL程序設(shè)計(jì)中很貢要的語句系列之一,它能夠從多個側(cè)面完整地描述數(shù)字系統(tǒng)的硬件結(jié)構(gòu)和基本邏輯功能。順序語句與傳統(tǒng)軟件要指的是語句的執(zhí)行(指仿真執(zhí)行)順序與它們書寫順序基本一致。順序語句只能出現(xiàn)在進(jìn)程(PROCESS)或了程序(PROCEDURE)、函數(shù)(FUNCTION)中使用,按程序書寫的順序自上而下、一個一個語句地執(zhí)行。進(jìn)程本身屬于并行語句,這就是說在同一設(shè)計(jì)實(shí)體中,所有的進(jìn)程都是并行執(zhí)行的,每一個進(jìn)程內(nèi)部的語句是順序執(zhí)行的。本節(jié)主要介紹賦值語句、IF語句、CASE語句、LOOP語句。

§2.2VHDL程序的順序語句下一頁順序語句是VHDL程序設(shè)計(jì)中很貢要的語句系列之一,一、順序賦值語句順序語句中的賦值語句分變量賦值語句和信號賦值語句。其用途是將一個值或者表達(dá)式的運(yùn)算結(jié)果傳遞給一個變量、信號或者由它們組成的數(shù)組。但一者是有區(qū)別的,變量賦值時間延遲為零,而信號賦值一定存在時間延遲。

1.變量賦值語句格式:口標(biāo)變量名:一賦值源(表達(dá)式):

例如:x:=5.0;z:=x+y;

其中x和z都是變量,:=表示給變量賦值。

上一頁下一頁§2.2VHDL程序的順序語句一、順序賦值語句上一頁下一頁§2.2VHDL程序的順序2.信號賦值語句格式:口標(biāo)信號名<=賦值源:

例如:y<=3;b(3TO4)<=c(1TO2);

其中y為信號,而b則為數(shù)組型信號,<=表示給信號賦值。

二、IF語句

IF語句的書寫格式如下二種:1.簡化的IF語句

IF條件表達(dá)式THEN

順序語句:ENDIF:

上一頁下一頁§2.2VHDL程序的順序語句2.信號賦值語句上一頁下一頁§2.2VHDL第一種語句的執(zhí)行情況是,當(dāng)程序執(zhí)行到該語句時,首先檢測關(guān)鍵詞"IF"后的“條件表達(dá)式”的布爾值是否為真(TURE。如果為真,那么THEN將順序執(zhí)行“順序語句”中的各條語句,直到“ENDIF:";如果為假CFALSE),則不執(zhí)行“順序語句”,直接到跳到“ENDIF",結(jié)束IF語句的執(zhí)行。

【例2.3】用IF語句描述一個簡單的D觸發(fā)器。

ENTITYdfflISPORT(d,c1k:INBIT;

q:ouTBIT);ENDdffl;

上一頁下一頁§2.2VHDL程序的順序語句第一種語句的執(zhí)行情況是,當(dāng)程序執(zhí)行到該語句時,首ARCHITECTUREoneOFdfflISBEGINPROCESS(clk)BEGINIF(clk'eventANDclk='1’)THENq<=d;ENDIF;ENDPROCESS;ENDone;上一頁下一頁§2.2VHDL程序的順序語句ARCHITECTUREoneOFdf2.兩分支結(jié)構(gòu)

IF條件表達(dá)式THEN

順序語句;ELSE

順序語句;ENDIF;

兩分支結(jié)構(gòu)的執(zhí)行情況是,當(dāng)關(guān)鍵詞“IF”后的“條件表達(dá)式”為真時,則順序執(zhí)行其下面的“順序語句”中的各條語句,當(dāng)“順序語句”執(zhí)行完成后,直接跳到“ENDIF:”,結(jié)束IF語句的執(zhí)行;當(dāng)“IF”)西的“條件表達(dá)式”為假時,則程序直接跳到關(guān)鍵詞“ELSE”,執(zhí)行其下面的順序語句,直到“ENDIF;”。因此它是一種兩分支的結(jié)構(gòu)。

上一頁下一頁§2.2VHDL程序的順序語句2.兩分支結(jié)構(gòu)上一頁下一頁§2.2VHDL程【例2.4】用IF語句描述一個2輸入端的與門。

ENTITYmvand2ISPORT(a,b:INBIT;y:OUTBIT);ENDmvand2;ARCHITECTUREoneOFmvand2ISBEGINPROCESS(a,b)BEGINIF(a='1'ANDb='1')THEN

上一頁下一頁§2.2VHDL程序的順序語句【例2.4】用IF語句描述一個2輸入端的與門。上一y<='1’;ELSEy<='0’;ENDIF;ENDPROCESS;ENDone;

3.多分支結(jié)構(gòu)IF條件表達(dá)式THEN

順序語句;ELSIF條件表達(dá)式THEN順序語句;上一頁下一頁§2.2VHDL程序的順序語句y<='1’;上一頁下一┊ELSE

順序語句;ENDIF;多分支結(jié)構(gòu)通過關(guān)鍵詞“ELSIF”設(shè)定了多個判斷條件(條件表達(dá)式),這些判斷條件的優(yōu)先順序(從高到低)與書寫“條件表達(dá)式”的先后順序一致。當(dāng)某一判斷條件為真時,則順序執(zhí)行其后的“順序語句”,執(zhí)行完成后,直接跳到“ENDIF;”當(dāng)某一判斷條件為假時,則跳過其后的“順序語句”,再測試下一個條件表達(dá)式。當(dāng)所有的條件表達(dá)式都為假時,則執(zhí)行關(guān)鍵詞"ELSE”下的順序語句”。因此它是一種多分支結(jié)構(gòu),功能與并行語句中的條件信號賦值語勻類似。上一頁下一頁§2.2VHDL程序的順序語句┊【例2.5】8線一3線優(yōu)先編碼器的設(shè)計(jì)

LIBRARYIEEE;USEIEEE.STD_LOGIC1164.ALL;ENTITYcoderISPORT(a:INSTD_LOGIC_VECTOR(0TO7));v:OUTSTD_LOGlC_VECTOR(2DOWNTO0));ENDcoder;ARCHITECTURErtlOFcoderISBEGINPROCESS(a)BEGIN上一頁下一頁§2.2VHDL程序的順序語句【例2.5】8線一3線優(yōu)先編碼器的設(shè)計(jì)上一頁下一IFa(7)='0'THENy<="111“;ELSIF(a(6)='0')THENy<="110";ELSIF(a(5)='0')THENy<="101";ELSIF(a(4)='0')THENy<="100";ELSIF(a(3)='0')THENy<="011";ELSIF(a(2)='0')THENy<="010";ELSIF(a(1)='0')THENy<="001";ELSEy<="000";ENDIF;

ENDPROCESS;ENDrtl;

上一頁下一頁§2.2VHDL程序的順序語句IFa(7)='0'T三、CASE語句

CASE語句即選擇語句,它根據(jù)表達(dá)式的值,從多項(xiàng)順序語句中選擇滿足條件的一項(xiàng)來執(zhí)行。CASE語句也是VHDL的常用流程控制語句。CASE語句的書寫格式如下:CASE表達(dá)式ISWhen選擇值=>順序語句;When選擇值=>順序語句;┊WhenOTHERS=>順序語句;ENDCASE;

注意:“=>”不是運(yùn)算符,相當(dāng)“THEN“。

上一頁下一頁§2.2VHDL程序的順序語句三、CASE語句上一頁下一頁§2.2VHDL程序的順序說明:①語句執(zhí)行時,首先計(jì)算“表達(dá)式”的值,然后執(zhí)行與“表達(dá)式”值相同的“選擇值”)后的“順序語句”,最后"ENDCASE"。這單要注意,“=>”不是操作符,它只相當(dāng)于“THEN”的作用。從這一點(diǎn)上來說,CASE語句和并行選擇信號賦值語句的功能相當(dāng)。②條件句中的“選擇值”必須在“表達(dá)式”的取值范圍內(nèi),并目要完全覆蓋“表達(dá)式”的所有取值。當(dāng)“選擇值”不能完全覆蓋“表達(dá)式”的所有取值時,則最后一個條件語句中的“選擇值”必須用"OTHERS”表示,以表示“選擇值”未能列出“表達(dá)式”的其他取值。關(guān)鍵詞"OTHERS”只能出現(xiàn)一次,目只能作為最后一種條件取值。這一點(diǎn)對于定義成STDLOGIC和STDLOGICVECTOR的數(shù)據(jù)類型尤為重要。

上一頁下一頁§2.2VHDL程序的順序語句說明:上一頁下一頁§2.2VHDL程序的順序語句③“選擇值”可以有以下四種不同的表達(dá)方式:單個數(shù)值,如4;數(shù)值選擇范圍,如(2TO4),表示取值為2,3和4;并列數(shù)值,如3│5,表示取值為3或5;混合方式,以上三種方式的混合。④每一條件語句中的“選擇值”只能出現(xiàn)一次,不能有相同“選擇值”的條件語句。⑤與IF語句相比,CASE語句組的程序可讀性比較好,這是因?yàn)樗褩l件中“表達(dá)式”的所有取值都列了出來,可執(zhí)行條件一口了然。但對相同的邏輯功能描述,綜合后,用CASE語句描述比IF描述耗用更多的硬件資源。因此,對本身就具有優(yōu)先邏輯關(guān)系的描述(如優(yōu)先編碼器),采用IF語句比CASE語句更合適。上一頁下一頁§2.2VHDL程序的順序語句③“選擇值”可以有以下四種不同的表達(dá)方式:單個數(shù)值【例2.6】用CASE語句描述4選1數(shù)據(jù)選擇器。

LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL;ENTITYmux41ISPORT(a,b,c,d:INSTD_LOGIC;se1:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux41;ARCHITECTUREoneOFmux41ISBEGIN

上一頁下一頁§2.2VHDL程序的順序語句【例2.6】用CASE語句描述4選1數(shù)據(jù)選擇器。上一頁下一頁P(yáng)ROCESS(sel,a,b,c,d)BEGINCASEselISWHEN“00”=>y<=a;WHEN“O1”=>y<=b;WHEN“10”=>y<=c;WHEN“11”=>y<=d;WHENOTHERS=>y<=‘X’;ENDCASE;ENDPROCESS;ENDone;上一頁下一頁§2.2VHDL程序的順序語句PROCESS(sel,a,b,c,d)上一頁下四、LOOP語句

LOOP語句就是循環(huán)語句,它可以使所包含的一組順序語句被循環(huán)執(zhí)行。

[標(biāo)號:]FOR循環(huán)變量IN循環(huán)范圍LOOP

順序語句;ENDLOOP[標(biāo)號];

常用的書寫格式如下:①“循環(huán)變量”是一個臨時變量,屬于Loop語句的局部變量,它由Loop語句自動定義,不必事先定義。該變量只能作為賦值源,不能被賦值。使用時應(yīng)注意,在Loop語句范圍內(nèi)不要再使用其他與此循環(huán)變量同名的標(biāo)識符。

上一頁下一頁§2.2VHDL程序的順序語句四、LOOP語句上一頁下一頁§2.2VHDL程序的順序②“循環(huán)范圍”規(guī)定循環(huán)語句被執(zhí)行的次數(shù)。“循環(huán)變量”從“循環(huán)范圍”的初值開始,每執(zhí)行完一次“順序語句”后遞增1,直到達(dá)到“循環(huán)范圍”指定的最大值。

【例2.7】用FOR_LOOP語句描述圖2-3的電路。ENTITYexam_1ISPORT(a:INBIT_VECTOR(0TO3);out1:0UTBIT_VECTOR(0TO3));ENDexam1:ARCHITECTUREbehOFexam_1ISBEGIN

上一頁下一頁§2.2VHDL程序的順序語句②“循環(huán)范圍”規(guī)定循環(huán)語句被執(zhí)行的次數(shù)?!把h(huán)變量”從“循環(huán)PROCESS(a)VARIABLEb:BIT;BEGINb:='1’;FORiIN0TO3LOOPb:=a(3-i)ANDb;outl(i)<=b;ENDLOOP;ENDPROCESS;ENDbeh;上一頁返回§2.2VHDL程序的順序語句PROCESS(a)上一頁返回§2.2并行語句結(jié)構(gòu)是最具VHDL特色的,是與一般軟件程序最大的區(qū)別所在。在VHDL中,并行語句有多種語句格式,各種并行語句的執(zhí)行都是同步進(jìn)行的,或者說是并行運(yùn)行的,其執(zhí)行的方式與書寫的順序無關(guān)。這種并行性是由硬件本身的并行性決定的,即一旦電路接通電源,它的各部分就會按照事先設(shè)計(jì)好的方案同時工作。并行語句在執(zhí)行時,各并行語句之間可以有信息來往,也可以互為獨(dú)立、互不相關(guān)。另外,每一并行語句內(nèi)部的語句可以有兩種不同的運(yùn)行方式,即并行執(zhí)行方式(如塊語句)和順序執(zhí)行方式(如進(jìn)程語句)。本節(jié)介紹結(jié)構(gòu)體中常用的并行語句:進(jìn)程(PROCESS)語句、并行信號賦值語句、元件例化語句。下一頁§2.2VHDL程序的順序語句§2.3VHDL程序的并行語句并行語句結(jié)構(gòu)是最具VHDL特色的,是與一般軟件程序

一、進(jìn)程(PROCESS)語句進(jìn)程語句是VHDL設(shè)計(jì)中用得最多的語句之一,進(jìn)程語句本身是并行語句,其內(nèi)部卻是由順序語句組成。一個結(jié)構(gòu)體內(nèi)可以包含多個進(jìn)程語句,多個進(jìn)程之間是并發(fā)執(zhí)行的,多個進(jìn)程語句間可以通過信號來交換信息。進(jìn)程語句的格式有兩種。格式一:[進(jìn)程標(biāo)號:]PROCESS[(敏感信號參數(shù)表)][IS][進(jìn)程聲明部分]---說明用于該進(jìn)程的常量,變量和子程序

BEGIN

順序描述語句;ENDPROCESS[進(jìn)程標(biāo)號];下一頁上一頁§2.2VHDL程序的順序語句§2.3VHDL程序的并行語句一、進(jìn)程(PROCESS)語句下一頁上一頁§2.2V下一頁上一頁此格式有敏感信號參數(shù)表,其內(nèi)部不允許存在WAIT語句。格式二:

[進(jìn)程標(biāo)號:]PROCESS[IS][進(jìn)程聲明部分」---說明用于該進(jìn)程的常量,變量和子程序

BEGINWAIT語句;

順序描述語句;ENDPROCESS[進(jìn)程標(biāo)號];進(jìn)程語句是最常用的并行語句,既可以用來描述組合邏輯電路,又可以描述時序邏輯電路,是VHDL程序設(shè)計(jì)中應(yīng)用最多也是最能體現(xiàn)硬件描述語言特點(diǎn)的一種語句?!?.2VHDL程序的順序語句§2.3VHDL程序的并行語句下一頁上一頁此格式有敏感信號參數(shù)表,其內(nèi)部不允許存在下一頁上一頁進(jìn)程語句的主要特點(diǎn)歸納如下: ①同一結(jié)構(gòu)中的各個進(jìn)程之間是并發(fā)執(zhí)行的,并目都可以使用實(shí)體說明和結(jié)構(gòu)體中所定義的信號;而同一進(jìn)程內(nèi)部的語句則必須是順序語句。②為啟動進(jìn)程,進(jìn)程語句中必須至少包含一個敏感信號或包含一個WAIT語句,但是在一個進(jìn)程中不能同時存在敏感信號和WAIT語句。③一個結(jié)構(gòu)體中的各個進(jìn)程之間可以通過信號來進(jìn)行通信,進(jìn)程的聲明部分不能定義信號,但可定義進(jìn)程的內(nèi)部變量。④在進(jìn)程內(nèi)部信號賦值是有時間延遲的,在同一個進(jìn)程中對同一個信號多次賦值時,起作用的是最后一次條件成立的賦值;而在進(jìn)程內(nèi)

§2.3VHDL程序的并行語句下一頁上一頁進(jìn)程語句的主要特點(diǎn)歸納如下: §2.3下一頁上一頁部變量賦值是無時間延遲的,在同一個進(jìn)程中對同一個變量多次賦值時,每次都立即起作用。[例2.8]一個典型的結(jié)構(gòu)體實(shí)例。ARCHITECTUREaOFstatesmachISBEGINP1:PROCESS(clk)BEGINIF(clk'eventANDclk='1')THENcurrent_state=next_state;ENDIF;ENDPROCESS;ENDA;§2.3VHDL程序的并行語句下一頁上一頁部變量賦值是無時間延遲的,在同一個進(jìn)程中對同一下一頁上一頁

上例中,P1為進(jìn)程標(biāo)號,時鐘clk為敏感信號。每當(dāng)clk發(fā)生一次變化時,BEGIN

和ENDPROCESS之間的順序語句就會運(yùn)行一次。由于時鐘clk變化包括上升沿和下降沿,為了準(zhǔn)確描述,在順序語句中用了一個條件判斷語句“IF

(clk‘eventANDclk=‘1’)THEN

”來判斷clk的上升沿。若要判斷clk的下降沿,可用“

IF(clk'eventANDclk='0')THEN”語句。二、并行信號賦值語句并行信號賦值語句有二種形式:簡單信號賦值語句、選擇信號賦值語句和條件信號賦值語句。這二種信號賦值語句的共同特點(diǎn)是賦值目標(biāo)必須都是信號,所有賦值語句與其他并行語句一樣,在結(jié)構(gòu)體中的執(zhí)行是同時發(fā)生的?!?.3VHDL程序的并行語句下一頁上一頁上例中,P1為進(jìn)程標(biāo)號,時鐘clk為下一頁上一頁

1.簡單信號賦值語句簡單信號賦值語句是并行語句結(jié)構(gòu)的最基本單元,它的語句書寫格式如下:

賦值目標(biāo)<=表達(dá)式;應(yīng)用該賦值語句時一定要注意,賦值日標(biāo)的數(shù)據(jù)對象必須是信號,賦值運(yùn)算符“<=”兩邊的數(shù)據(jù)類型必須一致。[例2.9]本例的結(jié)構(gòu)體中描述了3個基本的邏輯門。

ENTITYgateISPORT(a,b:INBIT;y1,y2,y3:0UTBIT);ENDgate;§2.3VHDL程序的并行語句下一頁上一頁1.簡單信號賦值語句§2.3VHDARCHITECTUREoneOFgateISBEGINyl<=aANDb;---與門

y2<=aORb;---或門

y3<=NOTa;---非門

ENDone;2.選擇信號賦值語句選擇信號賦值語句的書寫格式如下:WITH選擇表達(dá)式SELECT

賦值目標(biāo)信號<=表達(dá)式WHEN選擇值,┆表達(dá)式WHEN選擇值;

下一頁上一頁§2.3VHDL程序的并行語句ARCHITECTUREoneOFga

①當(dāng)“選擇表達(dá)式”的值發(fā)生變化時,將啟動此語句對各子句的“選擇值”進(jìn)行測試對比。當(dāng)發(fā)現(xiàn)有滿足條件的子句時,就將此子句中的“表達(dá)式”值賦給“賦值目標(biāo)信號”。②每條子句應(yīng)以“,”結(jié)束,最后一條子句以“;”結(jié)束。③“選擇值”不能有重復(fù),“選擇值”應(yīng)包含“選擇表達(dá)式”的所有取值,不允許存在選擇值涵蓋不全的情況。

[例2.10]用選擇信號賦值語句設(shè)計(jì)一個4選1數(shù)據(jù)選擇器,其符號如圖2-4所示。其中SEL[1..0]為2位地址輸入端,A,B,C,D為數(shù)據(jù)輸入端,Y為數(shù)據(jù)輸出端。當(dāng)SEL[1..0]為“00”時,Y=A;當(dāng)SEL[1..0]為“O1”時,Y=B;當(dāng)SEL[1..0]為“10”時,Y=C;當(dāng)SEL[1..0]為“11”時,Y=D。

下一頁上一頁§2.3VHDL程序的并行語句①當(dāng)“選擇表達(dá)式”的值發(fā)生變化時,將啟動此語句對下一頁上一頁ENTITYmux41ISSEL[1..0]

PORT(a,b,c,d:INBIT;se1:INBIT_VECTOR(1DOWNTO0);y:OUTBIT);ENDmux41;ARCHITECTUREoneOFmux41ISBEGINWITHselSELECTy<=aWHEN"00",bWHEN"O1",§2.3VHDL程序的并行語句下一頁上一頁ENTITYmux41cWHEN”10",dWHEN”11";ENDone;3.條件信號賦值語句條件信號賦值語句書寫格式如下;目標(biāo)信號<=表達(dá)式WHEN賦值條件ELSE

表達(dá)式WHEN賦值條件ELSE

┆表達(dá)式;①條件信號賦值語句與選擇信號賦值語句的最大區(qū)別在于后者的各個“選擇值”之間處于同一優(yōu)先級,而前者的各個“賦值條件”具有優(yōu)先順序,優(yōu)先級由高到低的順序與語句書寫順序一致。

下一頁上一頁§2.3VHDL程序的并行語句cWHEN”10",下一頁上②當(dāng)某個“賦值條件”得到滿足(即其值為“真”)時,立即將該條件“WHEN"前的“表達(dá)式”值賦給“目標(biāo)信號”;當(dāng)兒個“賦值條件”都得到滿足時,優(yōu)先級高的那個條件“WHEN”前的“表達(dá)式”值賦給“目標(biāo)信號”;當(dāng)所有的“賦值條件”都得不到滿足時,最后一個“ELSE”關(guān)鍵詞后的“表達(dá)式”值賦給“目標(biāo)信號”。③每行語句后沒有標(biāo)點(diǎn)符號,最后一行“表達(dá)式”用“;”結(jié)束?!纠?.11】用條件信號賦值語句設(shè)計(jì)4選1數(shù)據(jù)選擇器。

LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL;ENTITYmux41IS

下一頁上一頁§2.3VHDL程序的并行語句②當(dāng)某個“賦值條件”得到滿足(即其值為“真”)時,立即將該條

PORT(a,b,c,d:INBIT;se1:INBIT_VECTOR(1DOWNTO0);y:OUTBIT);ENDmux4_1;ARCHITECTUREoneOFmux41ISBEGINy<=aWHENsel="00"ELSEbWHENsel="O1"ELSEcWHENsel="10"ELSEd;ENDone;下一頁上一頁§2.3VHDL程序的并行語句PORT(a,b,c,d:INBIT;下一三、元件例化語句元件例化語句引入的是一種連接關(guān)系,即將預(yù)先設(shè)計(jì)好的設(shè)計(jì)實(shí)體定義成一個元件,然后利用例化語句將此元件與當(dāng)前的設(shè)計(jì)實(shí)體中的指定端目相連接,從而為當(dāng)前設(shè)計(jì)實(shí)體引入了一個低一級的設(shè)計(jì)層次。也可以這樣來理解例化語句;當(dāng)前設(shè)計(jì)實(shí)體相當(dāng)于一個較大的電路系統(tǒng),預(yù)先設(shè)計(jì)好的設(shè)計(jì)實(shí)體相當(dāng)于一個要插在這個電路系統(tǒng)板上的芯片,而當(dāng)前設(shè)計(jì)實(shí)體中的例化語句則相當(dāng)于這塊電路板上準(zhǔn)備接收此芯片的一個插座。元件例化語句通常由元件聲明和元件例化兩部分組成。語句書寫格式如下:

下一頁上一頁§2.3VHDL程序的并行語句三、元件例化語句下一頁上一頁§2.3VHDL程序的并行語

---元件聲明部分

COMPONENT元件名

GENERIC(參數(shù)表);PORT(端口信息);ENDCOMPONENT;---元件例化部分例如:元件名PORTMAP(端口名=>連接端口名,…);①第一部分的“元件聲明”,是對預(yù)先設(shè)計(jì)好的元件的定義語句,相當(dāng)于對一個已有的設(shè)計(jì)實(shí)體進(jìn)行封裝,使其只留出對外的接口界面,也就像一個集成芯片只對外留出幾個引腳一樣?!邦悓俦怼笨啥x一些參數(shù);“端口信息”可列出已有元件端口的名稱、模式、數(shù)據(jù)類型。該部分可放在結(jié)構(gòu)體中“語句說明部分”。

下一頁上一頁§2.3VHDL程序的并行語句---元件聲明部分下一頁上一頁§2.3VHDL程②第一部分的“元件例化”,用于說明當(dāng)前設(shè)計(jì)實(shí)體和被調(diào)用元件的連接關(guān)系。其中,“例化名”是必須的,它類似于當(dāng)前電路系統(tǒng)板上的一個插座名;而“元件名”則是已定義好的、準(zhǔn)備在此插座上插入的元件(或芯片)名稱;“端口名”是已有的元件(或芯片)的端口名稱;“=>”是關(guān)聯(lián)(連接)符號;“連接端口名”則是當(dāng)前系統(tǒng)與準(zhǔn)備接入的元件對應(yīng)端口相連的通信端口,相當(dāng)于插座上各插針的引腳名。③已有元件的“端口名”與當(dāng)前系統(tǒng)的“連接端口名”的關(guān)聯(lián)描述有兩種方式。一種是上述方式,在這種方式下,已有元件的“端口名”、關(guān)聯(lián)符號“=>”都是必須存在的,“端口名=>連接端口名”在PORTMAP語句中的位置可以是任意的;下一頁上一頁§2.3VHDL程序的并行語句②第一部分的“元件例化”,用于說明當(dāng)前設(shè)計(jì)實(shí)體和被調(diào)另一種是位置關(guān)聯(lián)方式,在這種方式下,“端口名”和“=>”都可省去,在PORTMAP了句中只列出當(dāng)前系統(tǒng)中的“連接端口名”即可,但要求“連接端口名”的排列順序與“元件聲明”中已有元件“端口信息”中所列的端口名排列順序相同,書寫格式為例化名:元件名PORTMAP(連接端口名1,連接端口名2,…);【例2.12】利用例化語句設(shè)計(jì)圖2-5所示的電路。----首先完成與非門的設(shè)計(jì)

LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL;ENTITYmvnand2IS

下一頁上一頁§2.3VHDL程序的并行語句另一種是位置關(guān)聯(lián)方式,在這種方式下,“端口名”和下一頁上一頁

PORT(a,b:INSTD_LOGIC;

y:OUTSTD_LOGIC);ENDmvnand2;ARCHITECTUREoneOFmvnand2ISBEGINVOAANANDb;ENDone;----利用例化語句完成設(shè)計(jì)

LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL;

§2.3VHDL程序的并行語句下一頁上一頁P(yáng)ORT(a,b:INSTD_LO下一頁上一頁ENTITYord4ISPORT(a,b,c,d:INSTD_LOGIC;

z:OUTSTD_LOGIC);ENDord4;ARCHITECTUREbehvOFord4ISCOMPONENTmynand2----元件聲明部分

PORT(a,b:INSTD_LOGIC;

y:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALtempl,temp2;STD_LOGIC;

§2.3VHDL程序的并行語句下一頁上一頁ENTITYord4IS§2.3下一頁上一頁

BEGIN-----元件例化部分

U1:mynand2PORTMAP(a,b,templ);一按位置關(guān)聯(lián)

U2:mynand2PORTMAP(a=>c,b=>d,y=>temp2);----按名字關(guān)聯(lián)U3:mynand2PORTMAP(templ,temp2,y=>z);-----混合關(guān)聯(lián)ENDbehv;§2.3VHDL程序的并行語句下一頁上一頁BEGIN§2.3VHDL程序的并行四、生成語句(GENERATE)

生成語句具有復(fù)制作用,它可以生成與已有的某個元件或設(shè)計(jì)單元電路完全相同的一組并行元件或設(shè)計(jì)單元電路結(jié)構(gòu)。生成語句的書寫格式有以下兩種形式;

形式一:[標(biāo)號:]FOR循環(huán)變量IN取值范圍GENERATE[說明語句;]并行語句;ENDGENERATE[標(biāo)號];下一頁上一頁§2.3VHDL程序的并行語句四、生成語句(GENERATE)下一頁上一頁§2.3VH形式二:[標(biāo)號:]IF條件GENERATE[說明語句;]并行語句;ENDGENERATE[標(biāo)號];①生成語句的生成方式有“FOR”和“IF"兩種,它們用于規(guī)定并行語句的復(fù)制方式。②“說明語句”用于對元件的數(shù)據(jù)類型、數(shù)據(jù)對象等作一些局部說明。③“并行語句”是用來復(fù)制的基本單元,主要包括元件、進(jìn)程語句、塊語句、并行信號賦值語句,甚至生成語句,這表示生成語下一頁上一頁§2.3VHDL程序的并行語句形式二:下一頁上一頁§2.3VHDL程序的并行語句句允許存在嵌套結(jié)構(gòu),因而可用于生成元件的多維陣列結(jié)構(gòu)。④“標(biāo)號”并非是必?fù)舻?,但如果在嵌套式生成語句結(jié)構(gòu)中就是十分重要的。⑤對于“FOR”語句結(jié)構(gòu),主要用來描述設(shè)計(jì)中的一些有規(guī)律的單元結(jié)構(gòu),其“循環(huán)變量”是一個局部變量,它根據(jù)“取值范圍”而自動遞增或遞減?!叭≈捣秶钡臅鴮懜袷接幸韵聝煞N方式。表達(dá)式TO表達(dá)式:---遞增方式;如1TO5

表達(dá)式DOWNTO表達(dá)式:---遞減方式;如5DOWNTO1下一頁上一頁§2.3VHDL程序的并行語句句允許存在嵌套結(jié)構(gòu),因而可用于生成元件的多維陣列結(jié)構(gòu)。下一頁下一頁上一頁【例2.13】利用GENERATE語句產(chǎn)生4個D觸發(fā)器,如圖2-6所示。

LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL;ENTITYdff4ISPORT(c1k,clrn,prn:INSTD_LOGIC;d:INSTD一OGIC-VECTOR(3DOWNTO0);q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDdff4;ARCHITECTUREbehOFdff4IS

§2.3VHDL程序的并行語句下一頁上一頁【例2.13】利用GENERATE語句產(chǎn)生4個D

COMPONENTdff一元件聲明

PORT(d,clk,clrn,prn:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENT;BEGINd4:FORi1N3DOWNTO0GENERATE一生成語句

u:dffPORTMAP(d(i),clk,clrn,prn,q(i));

一元件例化ENDGENERATE;ENDbeh;返回上一頁§2.3VHDL程序的并行語句COMPONENTdff一元件聲明返回上一VHDL的語言要素,作為硬件描述語言的基本結(jié)構(gòu)元素,主要有數(shù)據(jù)對象、數(shù)據(jù)類型和運(yùn)算操作符,而數(shù)據(jù)對象則包括變量、信號和常數(shù)二種。一、文字語法

VHDL文字主要包括數(shù)字文字、字符串文字。

1.數(shù)字文字?jǐn)?shù)字文字有多種表達(dá)方式,舉例如下。

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

3,235,0,178E2(=17800),45_146(=45146)

數(shù)字間的下畫線只是為了提高文字的可讀性。下一頁§2.4VHDL程序的語言要素總結(jié)VHDL的語言要素,作為硬件描述語言的基本結(jié)構(gòu)元(2)實(shí)數(shù)文字實(shí)數(shù)文字是十進(jìn)制數(shù),必須帶有示數(shù)點(diǎn),例如123.57,45146.571,0.0,3.15(3)以數(shù)制基數(shù)表示的文字,由五個組成部分。第一部分,用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù);

第二部分,數(shù)制隔離符號“#”;

第三部分,表達(dá)的文字,標(biāo)識符和下標(biāo)名。相當(dāng)于一個空的間隔符。第四部分,指數(shù)隔離符號“#”;

第五部分,用十進(jìn)制表示的指數(shù)部分,如果是0可以省略。例如10#150#----(十進(jìn)制數(shù)表示,=150)

下一頁上一頁§2.4VHDL程序的語言要素總結(jié)(2)實(shí)數(shù)文字下一頁上一頁§2.4VHDL程序2.字符串文字字符是用單引號引起來的ASCII字符,可以是數(shù)值,也可以是符號或字母,如;‘A’,‘X’,‘*’、‘R’。而字符串是一維的數(shù)組,必須放在雙引號中。VHDL有兩種類型的字符串:文字字符串和數(shù)位字符串。(1)文字字符串文字字符串是用雙引號引起來的一串文字,例如"ERROR"、"BB$CC"、"BOTHSANDQEQUALTOL"

(2)數(shù)位字符串?dāng)?shù)位字符串是一進(jìn)制、八進(jìn)制或十六進(jìn)制的數(shù)組,首先要有計(jì)算基數(shù),然后將該基數(shù)表示的值放在雙引號中,基數(shù)符號以”B","O”和”X”表示,并放在字符串的前面。

下一頁上一頁§2.4VHDL程序的語言要素總結(jié)2.字符串文字下一頁上一頁§2.4VHDL程序的語言要素B:二進(jìn)制基數(shù)符號,表示二進(jìn)制數(shù)位0或1,表示一個bit。O:八進(jìn)制基數(shù)符號,代表一個3位的二進(jìn)制數(shù)。

X:十六進(jìn)制基數(shù)符號

溫馨提示

  • 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

提交評論