工學(xué)VHDL程序設(shè)計(jì)語(yǔ)言_第1頁(yè)
工學(xué)VHDL程序設(shè)計(jì)語(yǔ)言_第2頁(yè)
工學(xué)VHDL程序設(shè)計(jì)語(yǔ)言_第3頁(yè)
工學(xué)VHDL程序設(shè)計(jì)語(yǔ)言_第4頁(yè)
工學(xué)VHDL程序設(shè)計(jì)語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩195頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

工學(xué)VHDL程序設(shè)計(jì)語(yǔ)言第1頁(yè)/共200頁(yè)引例:VHDL原理:第2頁(yè)/共200頁(yè)

VHDL語(yǔ)言非常高速硬件描述語(yǔ)言,也就是一種硬件(數(shù)字電路)設(shè)計(jì)語(yǔ)言.其最大特點(diǎn)是對(duì)電路的行為與結(jié)構(gòu)進(jìn)行高度抽象化規(guī)范化,并對(duì)設(shè)計(jì)進(jìn)行模擬驗(yàn)證與綜合優(yōu)化,使分析和設(shè)計(jì)高度自動(dòng)化。

支持VHDL語(yǔ)言的軟件平臺(tái)Max+PlusII

由軟件設(shè)計(jì)到硬件實(shí)現(xiàn)之間的媒介CPLD/FPGA(可編程器件)第3頁(yè)/共200頁(yè)在Max+PlusII編寫(xiě)VHDL程序存盤(pán)(文件名為實(shí)體名,后綴為.VHD)編譯

軟件仿真管腳安排下載

由軟件設(shè)計(jì)到硬件實(shí)現(xiàn)的流程第4頁(yè)/共200頁(yè)

基本順序語(yǔ)句(1)Process語(yǔ)句(2)If-Else語(yǔ)句(3)Case-When語(yǔ)句(4)Null語(yǔ)句(5)Waituntil語(yǔ)句(6)變量賦值語(yǔ)句(7)For-Loop語(yǔ)句(8)過(guò)程調(diào)用語(yǔ)句

基本的并行語(yǔ)句(1)直接賦值語(yǔ)句(2)Process語(yǔ)句(3)When-Else(4)With-Select-When(5)元件例化語(yǔ)句(6)For-Generate第5頁(yè)/共200頁(yè)常用數(shù)字電路回顧(1)編碼器

輸入信號(hào)輸出信號(hào)使能端口第6頁(yè)/共200頁(yè)注:EN為1時(shí)編碼器工作第7頁(yè)/共200頁(yè)舉例參看EWB輔助電路第8頁(yè)/共200頁(yè)(2)譯碼器××

1111

譯碼器第9頁(yè)/共200頁(yè)VHDL與數(shù)字電路設(shè)計(jì)

VHDL簡(jiǎn)介

一、由來(lái)

VHDL是VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage(非常高速集成電路硬件描述語(yǔ)言)的英文縮寫(xiě)。它是由美國(guó)國(guó)防部支持的一項(xiàng)研究計(jì)劃,于1983年創(chuàng)建,目的是以文字化方法描述電子電路與系統(tǒng)。至今VHDL約有40年的發(fā)展歷史,1987年,VHDL成為IEEE標(biāo)準(zhǔn),即IEEE1076標(biāo)準(zhǔn),1993年修改為IEEE1164標(biāo)準(zhǔn),1996年,IEEE又將電路合成的標(biāo)準(zhǔn)程序與規(guī)格加入到VHDL語(yǔ)言中,稱(chēng)為1076.3標(biāo)準(zhǔn)。之后,又有1076.4標(biāo)準(zhǔn)和1076.6標(biāo)準(zhǔn)。第10頁(yè)/共200頁(yè)第一章

VHDL的程序結(jié)構(gòu)和軟件操作1-1VHDL程序的基本結(jié)構(gòu)

1-2軟件操作—Max+plusⅡ的操作

第11頁(yè)/共200頁(yè)第一章

VHDL的程序結(jié)構(gòu)和軟件操作1-1VHDL程序的基本結(jié)構(gòu)

(1)LIBRARY和PACHAGE的聲明部分

作用:庫(kù)(Library)是用于存放預(yù)先編譯好的程序包(Package),程序包中定義了數(shù)據(jù)集合體、邏輯操作和元件等。主要是聲明在設(shè)計(jì)或?qū)嶓w中將用到的常數(shù),數(shù)據(jù)類(lèi)型,元件及子程序等。使用格式:LIBRARY庫(kù)名;

USE庫(kù)名.程序包名.All;

第12頁(yè)/共200頁(yè)(2)ENTITY定義

作用:定義本設(shè)計(jì)的輸入/出端口,即定義電路的外觀,即I/O接口的類(lèi)型和數(shù)量使用格式:

端口名

:端口模式

數(shù)據(jù)類(lèi)型;);ENTITY

實(shí)體名

IsEnd

實(shí)體名;

格式:Port(端口名

:端口模式數(shù)據(jù)類(lèi)型;第13頁(yè)/共200頁(yè)(3)ARCHITECTURE定義作用:定義實(shí)體的實(shí)現(xiàn)。即電路的具體描述,說(shuō)明電路執(zhí)行什么動(dòng)作或?qū)崿F(xiàn)功能。

ARCHITECTURE

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

Of實(shí)體名

IsBegin

描述語(yǔ)句;

End

結(jié)構(gòu)體名;使用格式:第14頁(yè)/共200頁(yè)在Max+plusⅡ系統(tǒng)中有4個(gè)庫(kù)能支持VHDL語(yǔ)言,它們分別是Std庫(kù)、IEEE庫(kù)、Altera庫(kù)和Lpm庫(kù)。Std庫(kù)和IEEE庫(kù)提供基本的邏輯運(yùn)算函數(shù)及數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)等。IEEE庫(kù)中的程序包std_logic_1164定義了std_logic和std_logic_vector等數(shù)據(jù)類(lèi)型。第15頁(yè)/共200頁(yè)舉例:設(shè)計(jì)一個(gè)與門(mén)電路邏輯符號(hào)真值表第16頁(yè)/共200頁(yè)LibraryIEEE;Usestd.standard.all;Entityand2isPort(A:

inbit;

B:

inbit;

Y:outbit);Endand2;

--首先定義輸入輸出端口名字,模式(Mode),信號(hào)類(lèi)型--注意最后語(yǔ)句的分號(hào)在括號(hào)外實(shí)體定義:第17頁(yè)/共200頁(yè)ArchitectureNaofand2isBeginY<=’0’whena=’0’andB=‘0’else’0’whenA=’1’andB=‘0’else’0’whenA=’0’andB=‘1’else‘1’;EndNa結(jié)構(gòu)體定義:端口模式有以下幾種類(lèi)型:IN;OUT;INOUT;BUFFER。第18頁(yè)/共200頁(yè)ArchitectureNbofand2isBeginc<=’1’whena=’1’andb=‘1’else

‘0’;EndNb;以上結(jié)構(gòu)體表達(dá)何種電路?一個(gè)實(shí)體可以有幾個(gè)結(jié)構(gòu)體,即結(jié)構(gòu)體的定義可以有不同的形式結(jié)論:第19頁(yè)/共200頁(yè)1-2軟件操作—Max+plusⅡ的操作

1-2-1建立和編寫(xiě)一個(gè)VHDL語(yǔ)言的工程文件1-2-2VHDL程序的編譯

1-2-3VHDL語(yǔ)言程序的仿真

1-2-4芯片的時(shí)序分析1-2-5安排芯片腳位

第20頁(yè)/共200頁(yè)1-2軟件操作—Max+plusⅡ的操作

1.Max+plusⅡ開(kāi)發(fā)工具是美國(guó)Altera公司自行設(shè)計(jì)的一種軟件工具,其全稱(chēng)為MultipleArrayMatrixandProgrammableLogicUserSystem。它具有原理圖輸入和文本輸入(采用硬件描述語(yǔ)言)兩種輸入手段,利用該工具所配備的編輯、編譯、仿真、綜合、芯片編程等功能,將設(shè)計(jì)電路圖或電路描述程序變成基本的邏輯單元寫(xiě)入到可編程的芯片中(如FPGA芯片),作成ASIC芯片。它是EDA設(shè)計(jì)中不可缺少的一種工具。2.軟件安裝第21頁(yè)/共200頁(yè)我們通過(guò)范例介紹:利用Max+plusⅡ系統(tǒng)(1)如何編寫(xiě)VHDL程序(使用TextEditor);(2)如何編譯VHDL程序(使用Compiler);

(3)如何仿真驗(yàn)證VHDL程序(使用WaveformEditor,Simulator);

(4)如何進(jìn)行芯片的時(shí)序分析(使用TimingAnalyzer);

(5)如何安排芯片腳位(使用FloorplanEditor);(6)如何下載程序至芯片(使用Programmer)。

第22頁(yè)/共200頁(yè)1-2-1建立和編寫(xiě)一個(gè)VHDL語(yǔ)言的工程文件

首先啟動(dòng)Max+plusⅡ系統(tǒng),啟動(dòng)后系統(tǒng)進(jìn)入主菜單畫(huà)面,在主菜單上有5個(gè)選項(xiàng),分別是:Max+plusⅡ、File、Assign、Options和Help。(1)打開(kāi)文本編輯器;用鼠標(biāo)點(diǎn)擊File選項(xiàng),點(diǎn)擊子菜單中的

New選項(xiàng),接著屏幕會(huì)出現(xiàn)New的對(duì)話(huà)框。在對(duì)話(huà)框內(nèi)有4

種編輯方式:圖形編輯、符號(hào)編輯、文本編輯和波形編輯。

VHDL文件屬于文本,那么應(yīng)該選擇文本編輯方式,點(diǎn)擊

OK按鈕,屏幕上將出現(xiàn)一個(gè)無(wú)名的編輯窗口,則系統(tǒng)進(jìn)入

文本編輯狀態(tài)。第23頁(yè)/共200頁(yè)(2)在編輯窗口中進(jìn)行編輯輸入,輸入相應(yīng)的描述語(yǔ)句。

(3)存盤(pán)。(a我們編輯的VHDL文件擴(kuò)展名為vhd;b保存的文

件名必須和所定義的實(shí)體名相同。c文件存盤(pán)的目錄不應(yīng)是

根目錄或桌面,建議存放在Max2work或Maxplus2目錄,或

其子目錄。)以與門(mén)的設(shè)計(jì)為例講述具體過(guò)程

第24頁(yè)/共200頁(yè)1-2-2VHDL程序的編譯

(1)若文件沒(méi)有打開(kāi),需首先打開(kāi)要編譯的VHDL文件;

(2)將目前的文件設(shè)置成工程文件;點(diǎn)擊File選項(xiàng),光標(biāo)移到子菜單的

Project項(xiàng)停留幾秒鐘,屏幕上會(huì)出現(xiàn)下一級(jí)菜單,點(diǎn)擊SetProjecttoCurrentFile(3)打開(kāi)編譯器;點(diǎn)擊主菜單MAX+plusⅡ/Compiler選項(xiàng),屏幕上就出現(xiàn)編譯

對(duì)話(huà)框。(4)開(kāi)始編譯;完成了上述編譯前的準(zhǔn)備及必要的設(shè)置工作,點(diǎn)擊編譯對(duì)話(huà)框

中的Start按鈕,編譯即開(kāi)始。

以與門(mén)的設(shè)計(jì)為例講述具體過(guò)程

第25頁(yè)/共200頁(yè)1-2-3VHDL語(yǔ)言程序的仿真

仿真是為了驗(yàn)證我們所編寫(xiě)的VHDL程序的功能是否正確。

(1)首先生成仿真波形文件

(a)打開(kāi)波形編輯器;點(diǎn)擊主菜單的MAX+plusⅡ/WaveformEditor選項(xiàng),就可在屏幕上顯示波形編輯器窗口。在未輸入信號(hào)名以前,整個(gè)窗口是空白的。(b)確定仿真持續(xù)時(shí)間(File/EndTime)。

(c)選則輸入輸出端口名;

(d)編輯輸入信號(hào)波形;

(e)信號(hào)波形編輯完成后,需存盤(pán)為仿真使用,文件名采取默認(rèn)方式即可。

第26頁(yè)/共200頁(yè)(2)打開(kāi)仿真器;點(diǎn)擊主菜單MAX+plusⅡ\Simulator項(xiàng),此時(shí)彈出Simulator

對(duì)話(huà)框。點(diǎn)擊對(duì)話(huà)框的Start按鈕,仿真即開(kāi)始。在仿真結(jié)束后打開(kāi)仿真波

形文件(點(diǎn)擊右下角的OpenSCF按鈕)即可以顯示仿真結(jié)果。(以與門(mén)的設(shè)計(jì)為例講述具體過(guò)程

)第27頁(yè)/共200頁(yè)1-2-4芯片的時(shí)序分析仿真結(jié)果從波形上來(lái)看,很難給出定量的信號(hào)延遲關(guān)系,這一點(diǎn)時(shí)序分析卻能直觀地用表來(lái)進(jìn)行顯示。(1)選擇要下載的器件型號(hào);

(2)需要再編譯一次。

(點(diǎn)擊主菜單的Assign/Device項(xiàng)得到Device對(duì)話(huà)框)(3)打開(kāi)時(shí)序仿真器;

(點(diǎn)擊TimingAnalyzer選項(xiàng)

)(4)最后點(diǎn)擊Start按鈕后,時(shí)序分析器開(kāi)始啟動(dòng)。

(以與門(mén)的設(shè)計(jì)為例講述具體過(guò)程

)第28頁(yè)/共200頁(yè)1-2-5安排芯片腳位

為了將程序下載到芯片,需安排芯片腳位。

(1)打開(kāi)芯片腳位設(shè)置器;

(MAX+plusⅡ/FloorplanEditor)(2)將實(shí)體定義的端口名字和下載芯片的管腳進(jìn)行具體對(duì)應(yīng);

(3)最后再進(jìn)行一次編譯。

教學(xué)演示片第29頁(yè)/共200頁(yè)第二章VHDL語(yǔ)言要素

§2.1VHDL語(yǔ)言規(guī)則數(shù)字型文字、字符串文字、標(biāo)識(shí)符、下標(biāo)名、段名第30頁(yè)/共200頁(yè)§2-2數(shù)據(jù)類(lèi)型

數(shù)據(jù)類(lèi)型分類(lèi):邏輯信號(hào)類(lèi)型和數(shù)值信號(hào)類(lèi)型。

§2-2-1邏輯數(shù)據(jù)類(lèi)型

(1)布爾代數(shù)(Boolean)型

定義位置:在std庫(kù)的standard程序包中進(jìn)行定義。

信號(hào)形式:FALSE,TRUE

(2)位(Bit)

定義位置:在std庫(kù)的standard程序包中進(jìn)行定義。

信號(hào)形式:0,1

(低電位,高電位)第31頁(yè)/共200頁(yè)編碼器:輸入信號(hào)輸出信號(hào)第32頁(yè)/共200頁(yè)第33頁(yè)/共200頁(yè)(3)位數(shù)組類(lèi)型(Bit_Vector)

定義位置:在std庫(kù)的standard程序包中進(jìn)行定義。

例:SignalA:bit_vector(0to7);

SignalB:bit_vector(2downto0);

輸入信號(hào)輸出信號(hào)第34頁(yè)/共200頁(yè)(4)標(biāo)準(zhǔn)邏輯型(Std_Logic)

定義位置:在IEEE庫(kù)的std_logic_1164程序包中進(jìn)行定義

第35頁(yè)/共200頁(yè)可以看出,這個(gè)“標(biāo)準(zhǔn)邏輯”信號(hào)定義,比“位即bit”信號(hào)對(duì)于數(shù)字邏輯電路的邏輯特性描述更完整、更真實(shí)。所以在VHDL的程序里,對(duì)于邏輯信號(hào)的定義,通常都是采用這個(gè)“標(biāo)準(zhǔn)邏輯”信號(hào)形式。使用這類(lèi)數(shù)據(jù)信號(hào),必須包含下面兩條聲明語(yǔ)句:

LibraryIEEE;UseIEEE.std_logic_1164.all;

(5)標(biāo)準(zhǔn)邏輯數(shù)組類(lèi)型(Std_Logic_vector)

定義位置:在ieee庫(kù)的std_logic_1164程序包中進(jìn)行定義。

Bit_Vector與Std_Logic_vector的區(qū)別在于數(shù)組的每一位前者為BIT型(0,1)后者為Std_Logic型第36頁(yè)/共200頁(yè)§2-2-2數(shù)值數(shù)據(jù)類(lèi)型(1)整數(shù)(Integer)定義位置:在std庫(kù)的standard程序包中進(jìn)行定義。即數(shù)值范圍為-231~231。(2)無(wú)符號(hào)(Unsigned)和有符號(hào)(Signed)類(lèi)型定義位置:有符號(hào)(Signed)和無(wú)符號(hào)(Unsigned)邏輯信號(hào)定義在庫(kù)IEEE的程序包std_logic_arith中。第37頁(yè)/共200頁(yè)有符號(hào)類(lèi)型數(shù)據(jù)代表有符號(hào)數(shù)值,即可以是正數(shù),0,負(fù)數(shù);編譯器將有符號(hào)數(shù)類(lèi)型作為一個(gè)補(bǔ)碼的二進(jìn)制數(shù),最左邊的位為符號(hào)位。無(wú)符號(hào)類(lèi)型數(shù)據(jù)代表無(wú)符號(hào)數(shù)值,即代表0或正數(shù);最左邊的位為最高位。如:Unsigned(“0110”)代表;+6+10Unsigned(“1010”)代表如:signed(“0110”)代表+6;signed(“1010”)代表-2。第38頁(yè)/共200頁(yè)libraryieee;useieee.std_logic_1164.all;

useieee.std_logic_arith.all;entity

data

isport(a,b:inunsigned(3downto0);--相應(yīng)改為a,b:insigned(3downto0);c:outstd_logic);enddata;architecture

m1

ofdataisbeginc<='1'whena<belse'0';endm1;

useieee.std_logic_1164.all;???useieee.std_logic_arith.all;???列舉a、b具體值???

第39頁(yè)/共200頁(yè)當(dāng)定義成無(wú)符號(hào)數(shù)據(jù)類(lèi)型時(shí),若a<=”1000”,b=’0001’,即a=8,b=1則結(jié)果另外:還有其他positive,natural,real數(shù)據(jù)類(lèi)型以及用戶(hù)自定義數(shù)據(jù)類(lèi)型等。這些數(shù)據(jù)類(lèi)型各有特點(diǎn),以后用到再行講解c=’1’。c=’0’;當(dāng)定義成有符號(hào)數(shù)據(jù)類(lèi)型時(shí),若a<=”1000”,b=’0001’,a=-8,b=1,則結(jié)果第40頁(yè)/共200頁(yè)§2.3VHDL數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象(DataObjects):

凡是可以被賦予一個(gè)值的對(duì)象稱(chēng)為數(shù)據(jù)對(duì)象,數(shù)據(jù)對(duì)象用于傳遞信號(hào)。例:

數(shù)據(jù)對(duì)象名

數(shù)據(jù)對(duì)象類(lèi)型

數(shù)據(jù)對(duì)象值的類(lèi)型

第41頁(yè)/共200頁(yè)2-3-1信號(hào)信號(hào)數(shù)據(jù)對(duì)象,代表電路內(nèi)部傳輸線(xiàn)路線(xiàn)路,其在元件之間起互連作用

信號(hào)數(shù)據(jù)對(duì)象的定義格式為:

Signal信號(hào)名:數(shù)據(jù)類(lèi)型[:=設(shè)定值];

如:

Signal

A:Std_logic_vector(3Downto0):=“0000”;

注意:由于MaxplusII系統(tǒng)往往會(huì)忽略信號(hào)對(duì)象定義時(shí)所賦初始值,建議在結(jié)構(gòu)體中用賦值語(yǔ)句完成對(duì)信號(hào)的賦值。信號(hào)賦值語(yǔ)句的語(yǔ)法格式為:

目標(biāo)信號(hào)名<=表達(dá)式(設(shè)定值);A

<=

“1010”第42頁(yè)/共200頁(yè)2-3-2變量

它用于對(duì)中間數(shù)據(jù)的臨時(shí)存儲(chǔ),并不一定代表電路的某一組件。

變量數(shù)據(jù)對(duì)象的定義格式為:Variable變量名:數(shù)據(jù)類(lèi)型[:=設(shè)定值];

如:Variablea:integer:=0;變量賦值語(yǔ)句的語(yǔ)法格式為:目標(biāo)變量名:=表達(dá)式(設(shè)定值);

注意:由于MAXPLUSII系統(tǒng)往往會(huì)忽略變量對(duì)象定義時(shí)所賦初始值,建議在結(jié)構(gòu)體中用賦值語(yǔ)句完成對(duì)變量的賦值。如:a:=b+c;第43頁(yè)/共200頁(yè)常數(shù)的定義格式為:Constant常數(shù)名:數(shù)據(jù)類(lèi)型

:=表達(dá)式;

如:ConstantD1:Integer:=3;

ConstantD2:Std_Logic_Vector(D1Downto0):=”0000”;注意:常數(shù)數(shù)據(jù)對(duì)象定義的同時(shí)進(jìn)行賦值。賦值符號(hào)為

“:=”

2-3-3常數(shù)第44頁(yè)/共200頁(yè)2-3-4信號(hào)、變量、常數(shù)對(duì)比一、定義SignalA:std_logic;VariableA:std_logic_vector(7downto0);ConstantA:integer:=6;二、賦值及賦值時(shí)刻A

<=

“1010”;(延時(shí))A:=“1010”;(立刻)三、定義區(qū)域信號(hào):實(shí)體、結(jié)構(gòu)體、程序包變量:進(jìn)程、子程序常數(shù):實(shí)體、結(jié)構(gòu)體、程序包、塊、進(jìn)程、子程序第45頁(yè)/共200頁(yè)四、適用范圍信號(hào):實(shí)體、結(jié)構(gòu)體、程序包變量:定義了變量的進(jìn)程、子程序的順序語(yǔ)句中常數(shù):視其定義的位置而定若常數(shù)定義在實(shí)體中,適用范圍是實(shí)體所對(duì)應(yīng)的有結(jié)構(gòu)體。若常數(shù)定義在結(jié)構(gòu)體中,適用范圍就是本結(jié)構(gòu)體。第46頁(yè)/共200頁(yè)執(zhí)行結(jié)果為:

x<=cxorb,y<=cxorb

第47頁(yè)/共200頁(yè)執(zhí)行結(jié)果為:

x<=cxora,y<=cxorb

第48頁(yè)/共200頁(yè)練習(xí):1.定義信號(hào)A1,A2,A3,A4,A5,A6,A7,A8其中每一位信號(hào)均為標(biāo)準(zhǔn)邏輯型2.定義信號(hào)B,其數(shù)據(jù)類(lèi)型為標(biāo)準(zhǔn)邏輯型。3.定義信號(hào)C,數(shù)據(jù)類(lèi)型為整數(shù)型。4.給A、B賦值,其中A的值為11001101;B的值為0。第49頁(yè)/共200頁(yè)LibraryIEEEUseieee.std_logic_1164.allSignalA:std_logic_vector(1to8)SignalB:std_logicSignalC:integerLibraryStdUsestd.standard.allA<=“11001101”B<=‘0’第50頁(yè)/共200頁(yè)2.4VHDL操作符VHDL操作符:邏輯、算術(shù)、符號(hào)、關(guān)系操作符。2.4.1邏輯運(yùn)算符一、分類(lèi)及功能And(與),Or(或),Not(非),Nand(與非),Nor(或非),Xor(異或),Xnor(同或)。第51頁(yè)/共200頁(yè)二.用法1.操作數(shù)的數(shù)據(jù)類(lèi)型必須符合操作符的要求能進(jìn)行邏輯運(yùn)算的數(shù)據(jù)類(lèi)型:bit、bit_vector、booleanstd_logic、std_logic_vector例Signala,b,y:std_logic;Signalc,d,z:integer;y<=aandb;z<=candd;第52頁(yè)/共200頁(yè)2.表達(dá)式中有多個(gè)運(yùn)算符時(shí)一般要加括號(hào)表達(dá)式中有多個(gè)運(yùn)算符時(shí)一般要加括號(hào),但and、or、xnor除外例Signala,b,c,d:std_logic_vector(3downto0);Signale,f,g,h:std_logic_vector(1downto0);d<=aandbandc;d<=aorborc;d<=axnorbxnorc;h<=enorfnorg;h<=(enorf)norg;3.運(yùn)算符兩側(cè)的操作數(shù)要對(duì)稱(chēng)d<=(enorf)norg;×第53頁(yè)/共200頁(yè)LibraryIEEEUSEIEEE.STD_LOGIC_1164.ALL;ENTITYlitiIS;PORT(a,b,c,d:INSTD_LOGIC;e:outSTD_LOGIC);ENDliti;ACHITECTUREAA1OFlitiISBEGINe<=(aandb)ortmp;Signaltmp:std_logic;tmp<=cxord;ENDAA1;第54頁(yè)/共200頁(yè)2.4.2關(guān)系運(yùn)算符=(等于),/=(不等于),<(小于),>(大于),<=(小于等于,和信號(hào)的賦值符號(hào)相同),>=(大于等于)。注1.等于和不等于的操作對(duì)象可以是任何數(shù)據(jù)類(lèi)型構(gòu)成的操作數(shù)。2.其它關(guān)系運(yùn)算符對(duì)數(shù)據(jù)類(lèi)型有一定的限制。(整數(shù),枚舉型)3.=、/=在實(shí)現(xiàn)硬件電路時(shí)比其它的關(guān)系運(yùn)算符對(duì)芯片的利用率要高第55頁(yè)/共200頁(yè)ENTITYmy1isPORT(a,b:inbit_vector(0to3)m:outboolean);ENDmy1;ARCHITECTUREa1ofmy1BEGINm<=(a=b);ENDa1;ENTITYmy1isPORT(a,b:inbit_vector(0to3)m:outboolean);ARCHITECTUREa1ofmy1BEGINm<=(a>=b);ENDa1;以上兩程序最終所實(shí)現(xiàn)的硬件電路見(jiàn)課本P78ENDmy1;第56頁(yè)/共200頁(yè)2.4.3算術(shù)運(yùn)算符一、分類(lèi)及功能求和運(yùn)算符、求積運(yùn)算符、符號(hào)運(yùn)算符、混合運(yùn)算符、移位運(yùn)算符二.運(yùn)用1.求和運(yùn)算符VHDL中的求和運(yùn)算符包括加減運(yùn)算和并置運(yùn)算,操作數(shù)的數(shù)據(jù)類(lèi)型為整型。例1:Variablea,b,c,d,e,f:integerrange0to255;a:=b+c;d:=e–f;例2:Signala:std_logic_vector(4to0);Signalb:std_logic_vector(2to0);Signalc:std_logic_vector(1to0);a<=bc第57頁(yè)/共200頁(yè)2.移位運(yùn)算符移位運(yùn)算所對(duì)應(yīng)的數(shù)據(jù)類(lèi)型為一維數(shù)組,其中的元素維bit、boolean例:Variablea1:std_logic_vector(3to0);a1:=“1011”;a1SLL1;a1=0110a1SLL2;a1=1100a1ROL1;a1=01113.其它略第58頁(yè)/共200頁(yè)二、應(yīng)用現(xiàn)在VHDL已成功地應(yīng)用于ASIC自動(dòng)設(shè)計(jì)的模擬驗(yàn)證和綜合優(yōu)化等方面。VHDL是以文字的方式設(shè)計(jì)電路,在應(yīng)用上,目前VHDL語(yǔ)言還僅限于數(shù)字電路的開(kāi)發(fā)和設(shè)計(jì)。三、VHDL和電路圖設(shè)計(jì)方式比較VHDL與電路圖設(shè)計(jì)電路的方式不同,主要有如下幾方面的優(yōu)越性:(1)易于修改;(2)設(shè)計(jì)能力更強(qiáng);(3)VHDL語(yǔ)言很方便:獨(dú)立于器件設(shè)計(jì);相同的程序代碼可以用于不同廠家生產(chǎn)的器件。第59頁(yè)/共200頁(yè)VHDL操作符復(fù)習(xí)回顧一、邏輯運(yùn)算符And(與),Or(或),Not(非),Nand(與非),Nor(或非),Xor(異或),Xnor(同或)。能進(jìn)行邏輯運(yùn)算的數(shù)據(jù)類(lèi)型:bit、bit_vector、booleanstd_logic、std_logic_vector第60頁(yè)/共200頁(yè)二、關(guān)系運(yùn)算符=(等于),/=(不等于),<(小于),>(大于),<=(小于等于,和信號(hào)的賦值符號(hào)相同),>=(大于等于)。1.等于和不等于的操作對(duì)象可以是任何數(shù)據(jù)類(lèi)型構(gòu)成的操作數(shù)。2.其它關(guān)系運(yùn)算符對(duì)數(shù)據(jù)類(lèi)型有一定的限制。(整數(shù),枚舉型)三、算術(shù)運(yùn)算符求和運(yùn)算符、求積運(yùn)算符、符號(hào)運(yùn)算符、混合運(yùn)算符、移位運(yùn)算符VHDL中的求和運(yùn)算符包括加減運(yùn)算和并置運(yùn)算,操作數(shù)的數(shù)據(jù)類(lèi)型

為整型。第61頁(yè)/共200頁(yè)Signala:std_logic_vector(4downto0);Signalb:std_logic_vector(2downto0);Signalc:std_logic_vector(1downto0);bca<=bc第62頁(yè)/共200頁(yè)VariableA:std_logic_vector(6downto0);A:=“10110001”;ASLL1;AROL1;第63頁(yè)/共200頁(yè)

第三章VHDL順序語(yǔ)句一、順序語(yǔ)句概念順序語(yǔ)句的特點(diǎn)是,每一條順序語(yǔ)句的執(zhí)行順序是與它們的書(shū)寫(xiě)順序基本一致的。順序語(yǔ)句只能出現(xiàn)在進(jìn)程(Process)和子程序中,子程序包括函數(shù)(Function)和過(guò)程(Procedure)。二、種類(lèi)

進(jìn)程語(yǔ)句賦值語(yǔ)句流程控制語(yǔ)句等待語(yǔ)句

子程序調(diào)用語(yǔ)句返回語(yǔ)句空操作語(yǔ)句第64頁(yè)/共200頁(yè)3.1進(jìn)程語(yǔ)句(Process語(yǔ)句)0000輸入信號(hào)發(fā)生變化時(shí),電路啟動(dòng)進(jìn)行計(jì)算第65頁(yè)/共200頁(yè)進(jìn)程語(yǔ)句是由順序語(yǔ)句構(gòu)成的,通過(guò)信號(hào)與結(jié)構(gòu)體其余部分進(jìn)行信息交流,在進(jìn)程中有一個(gè)敏感信號(hào)列表,表中列出的任何信號(hào)的改變都將啟動(dòng)進(jìn)程,執(zhí)行進(jìn)程內(nèi)相應(yīng)的順序語(yǔ)句。進(jìn)程語(yǔ)句是將并行語(yǔ)句和順序語(yǔ)句區(qū)分開(kāi)來(lái)的標(biāo)志之一。語(yǔ)法格式:

[進(jìn)程標(biāo)號(hào):]Process[(敏感信號(hào)列表)]

[Variabledeclarations]--變量聲明

Begin

順序語(yǔ)句;

EndProcess[Processlabel];第66頁(yè)/共200頁(yè)P(yáng)rocess(sel,x1,x2)Beginf<=x1;Ifsel=1thenf<=x2;endif;Endprocess;Process(sel,x1,x2)BeginIfsel=1thenf<=x2;endif;f<=x1;Endprocess;在第二個(gè)進(jìn)程中,無(wú)論什么情況,f=x1,而在第一個(gè)進(jìn)程中,只有信號(hào)sel/=1時(shí),f=x1。因此,語(yǔ)句的排列順序很重要,會(huì)影響信號(hào)的輸出結(jié)果。區(qū)別第67頁(yè)/共200頁(yè)3.2賦值語(yǔ)句賦值語(yǔ)句包括變量賦值語(yǔ)句和信號(hào)賦值語(yǔ)句,前者的賦值是立刻發(fā)生的,后者的賦值發(fā)生在一個(gè)進(jìn)程結(jié)束的時(shí)刻,并延時(shí)進(jìn)行。變量賦值目標(biāo):=賦值源信號(hào)賦值目標(biāo)<=賦值源在同一進(jìn)程中,同一信號(hào)賦值目標(biāo)有多個(gè)賦值源時(shí),信號(hào)賦值目標(biāo)獲得的是最后一個(gè)賦值源的值,其前面相同的賦值目標(biāo)不做任何變化。注:3.2.1信號(hào)和變量賦值第68頁(yè)/共200頁(yè)Signals1,s2:std_logic;Signalsec:std_logic_vector(0to7);Process(s1,s2)Variablev1,v2:std_logic;Beginv1:=‘1’;v2:=‘1’;s1<=‘1’;s2<=‘1’;sec(0)<=v1;sec(1)<=v2;sec(2)<=s1;sec(3)<=s2;v1:=‘0’;v2:=‘0’;s2<=‘0’;sec(4)<=v1;sec(5)<=v2;sec(6)<=s1;sec(7)<=s2;ENDPROCESS“01000111”sec=第69頁(yè)/共200頁(yè)3.2.2信號(hào)和變量賦值舉例1.標(biāo)識(shí)符賦值目標(biāo)Variablea,b:std_logic;Signalc:std_logic_vector(1to4);a:=‘1’;b:=‘0’;c<=“1100”;c(3)<=‘1’;注:一位值用單引號(hào),多位值用雙引號(hào)第70頁(yè)/共200頁(yè)2.段賦值Signalc:std_logic_vector(1to4);c(1to2)<=‘10’;c(1to4)<=‘1010’;3.塊賦值Signala,b,c,d:std_logic;Signals:std_logic_vector(1to4);s<=“0100”;(a,b,c,d)<=s;位置關(guān)聯(lián)第71頁(yè)/共200頁(yè)Variablee,f:std_logic;Variableg:std_logic_vector(1to2);Variableh:std_logic_vector(1to4);e:=‘0’;f:=‘1’;g:=“10”;h:=(e=>3,f=>4,g(1)=>2,g(2)=>1);名稱(chēng)關(guān)聯(lián)結(jié)果:h的值為1010第72頁(yè)/共200頁(yè)3.3流程控制語(yǔ)句3.3.1IF語(yǔ)句語(yǔ)法格式:IfexpressionThenstatement;ElsifexpressionThenstatement;ElsifThenstatement;elsestatement;Endif;根據(jù)條件進(jìn)行相應(yīng)賦值操作第73頁(yè)/共200頁(yè)例1:Process(A)BeginIfA=”00”thenf<=D0;elsifA=”01”thenf<=D1;elsifA=”10”thenf<=D2;elsef<=D3;endif;endprocess;第74頁(yè)/共200頁(yè)一、第一種IF語(yǔ)句IF條件句THEN

順序語(yǔ)句ENDIF例題語(yǔ)句格式IF(a>b)THENout<=‘1’;ENDIF;第75頁(yè)/共200頁(yè)二、第二種IF語(yǔ)句IF條件句THEN

順序語(yǔ)句ELSE

順序語(yǔ)句ENDIF語(yǔ)句格式例題IF(a>b)THENout<=‘1’;ELSEout<=‘0’;ENDIF;第76頁(yè)/共200頁(yè)三、第三種IF語(yǔ)句語(yǔ)法格式:If條件句

Then順序語(yǔ)句;Elsif條件句

Then順序語(yǔ)句;Elsif條件語(yǔ)句Then順序語(yǔ)句;else順序語(yǔ)句;Endif;語(yǔ)句格式第77頁(yè)/共200頁(yè)例題1:Signala,b,c,p1,p2,z:bit;IF(p1=‘1’)THENz<=a;ELSIF(p2=‘0’)THENz<=b;ELSEz<=c;ENDIF;?選擇方式cbaa畫(huà)線(xiàn)部分意思:ELSIF(p1=‘0’andp2=‘0’)注第78頁(yè)/共200頁(yè)例題2:8線(xiàn)-3線(xiàn)優(yōu)先編碼器第79頁(yè)/共200頁(yè)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(I:INSTD_LOGIC_VECTOR(0TO7)Y:OUTSTD_LOGIC_VECTOR(1TO3));ENDcoder;實(shí)體設(shè)計(jì)功能:設(shè)計(jì)元件外觀第80頁(yè)/共200頁(yè)ARCHITECTUREa1orcoderISBeginIF(I(7)=‘1’)THENY<=“111”;ELSIF(I(6)=‘1’)THENY<=“110”;ELSIF(I(5)=‘1’)THENY<=“101”;ELSIF(I(4)=‘1’)THENY<=“100”;ELSIF(I(3)=‘1’)THENY<=“011”;ELSIF(I(2)=‘1’)THENY<=“010”;ELSIF(I(1)=‘1’)THENY<=“001”;ELSEY<=“000”;ENDa1;結(jié)構(gòu)體設(shè)計(jì)功能:描述輸入和輸出之間的邏輯關(guān)系ENDIF;第81頁(yè)/共200頁(yè)練習(xí)題:設(shè)計(jì)一個(gè)3線(xiàn)-8線(xiàn)譯碼器元件外觀輸入輸出邏輯關(guān)系第82頁(yè)/共200頁(yè)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(A:INSTD_LOGIC_VECTOR(1TO3)Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDcoder;實(shí)體設(shè)計(jì)功能:設(shè)計(jì)元件外觀第83頁(yè)/共200頁(yè)ARCHITECTUREa1orcoderISBeginIFA=“000”THENY<=“00000001”;ELSIFA=“001”THENY<=“00000010”;ELSIFA=“010”THENY<=“00000100”;ELSIFA=“011”THENY<=“00001000”;ELSIFA=“100”THENY<=“00010000”;ELSIFA=“101”THENY<=“00100000”;ELSIFA=“110”THENY<=“01000000”;ELSEY<=“10000000”;ENDa1;結(jié)構(gòu)體設(shè)計(jì)功能:描述輸入和輸出之間的邏輯關(guān)系ENDIF;第84頁(yè)/共200頁(yè)3.3.2Case-When語(yǔ)句作用:根據(jù)條件進(jìn)行相應(yīng)的賦值操作。語(yǔ)法格式:Case表達(dá)式

Is

When選擇值

=>順序語(yǔ)句

When選擇值

=>順序語(yǔ)句

…Endcase;CASE語(yǔ)句根據(jù)滿(mǎn)足的條件直接選擇多項(xiàng)順序語(yǔ)句的一項(xiàng)執(zhí)行=>不是信號(hào)賦值符號(hào),其意思等價(jià)于“THEN”注第85頁(yè)/共200頁(yè)例題1:用CASE語(yǔ)句設(shè)計(jì)四選一數(shù)據(jù)選擇器第86頁(yè)/共200頁(yè)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALLENTITYmux41ISPORT(s1,s2:instd_logic;a,,b,c,d:instd_logic;z:outstd_logic);ENDENTITYmux41;ARCHITECTUREactivOFmux41ISSIGNALs:std_logic_vector(1downto0);BEGINS<=s1&s2PROCESS(s1,s2,a,b,c,d)BEGINCASEsISWHEN“00”=>z<=a;WHEN“01”=>z<=b;WHEN“10”=>z<=c;WHEN“11”=>z<=d;WHENOTHERS=>z<=‘x’;ENDCASE;ENDPROCESS;ENDactiv;第87頁(yè)/共200頁(yè)ARCHITECTUREactivOFmux41ISSIGNALs:std_logic_vector(1downto0);BEGINS<=s1&s2PROCESS(s1,s2,a,b,c,d)BEGINIF

s=“00”thena=>z;ELSIFs=“01”thenb=>z;ELSIFs=“10”thenc=>z;ELSE

d=>z;ENDIF;ENDARCHITECTUREactiv;ARCHITECTUREactivOFmux41ISSIGNALs:std_logic_vector(1downto0);BEGINS<=s1&s2PROCESS(s1,s2,a,b,c,d)BEGINCASE

sISWHEN“00”=>z<=a;WHEN

“01”=>z<=b;WHEN“10”=>z<=c;WHEN“11”=>z<=d;WHENOTHERS=>z<=‘x’;ENDCASE;ENDPROCESS;ENDactiv;第88頁(yè)/共200頁(yè)例題2:SIGNALSEL:INTEGERRANGE0TO15;……CASESELISWHEN0=>Z1<=‘1’;WHEN13=>Z2<=‘1’;WHEN4TO72=>Z3<=‘1’;WHENOTHERS=>Z4<=‘1’;IF與CASE比較IF語(yǔ)句中條件句之間是相與的關(guān)系,

CASE語(yǔ)句中條件句之間是相或的關(guān)系。2.CASE條件語(yǔ)句必須將所有情況列出而IF則不必。3.IF語(yǔ)句可實(shí)現(xiàn)優(yōu)先級(jí),CASE語(yǔ)句則不可以。第89頁(yè)/共200頁(yè)課堂練習(xí)題:試設(shè)計(jì)一個(gè)4位奇偶校驗(yàn)器第90頁(yè)/共200頁(yè)數(shù)碼顯示一、數(shù)碼顯示器(一)發(fā)光二極管發(fā)光二極管特性:當(dāng)加正向電壓時(shí),二極管導(dǎo)通并發(fā)光.利用這了一特性可制成共陰極和共陽(yáng)極七段數(shù)碼顯示器。第91頁(yè)/共200頁(yè)(二)七段數(shù)碼顯示器1.工作原理共陰極接法第92頁(yè)/共200頁(yè)2.顯示代碼概念9的顯示代碼第93頁(yè)/共200頁(yè)輔助實(shí)驗(yàn)第94頁(yè)/共200頁(yè)顯示譯碼器顯示譯碼器功能第95頁(yè)/共200頁(yè)其真值表如下所示:輸入代碼輸出顯示代碼第96頁(yè)/共200頁(yè)Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntitybtodisPort(A:instd_logic_vector(3downto0);Y:outstd_logic_vector(6downto0));Endbtod;Architecturea1ofbtodisBeginProcess(d)BeginCaseAiswhen"0000“=>Y<="0111111”;--0when"0001“=>Y<="0000110”;--1when"0010“=>Y<="1011011”;--2when"0011“=>Y<="1001111”;--3when"0100“=>Y<="1100110”;--4when"0101“=>Y<="1101101”;--5when"0110“=>Y<="1111101”;--6when"0111“=>Y<="0000111”;--7when“1000“=>Y<=“1111111”;--8when“1001“=>Y<="1101111”;--9Enda1;第97頁(yè)/共200頁(yè)3.3.3LOOP語(yǔ)句一、單個(gè)LOOP語(yǔ)句[LOOP標(biāo)號(hào):]LOOP

順序語(yǔ)句ENDLOOP[LOOP標(biāo)號(hào)];例:L2:LOOPa:=a+1;

EXITL2WHENa>10;ENDLOOPL2;第98頁(yè)/共200頁(yè)二、FOR_LOOP語(yǔ)句[LOOP標(biāo)號(hào):]FOR循環(huán)變量

IN循環(huán)次數(shù)范圍LOOP

順序語(yǔ)句;

ENDLOOP[LOOP標(biāo)號(hào)];例:試設(shè)計(jì)一個(gè)八位奇偶校驗(yàn)器

注:

0XORa=a第99頁(yè)/共200頁(yè)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYJIOUISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);

y:OUTSTD_LOGIC);ENDJIOU;ARCHITECTUREOPTOFJIOUISSIGNALtmp:STD_LOGIC;BEGINPROCESS(a)BEGINtmp<=‘0’;FORnIN0TO7LOOPtmp<=tmpXORa(n);ENDLOOP;y<=tmp;ENDPROCESS;ENDopt;第100頁(yè)/共200頁(yè)三.WHILE_LOOP語(yǔ)句[標(biāo)號(hào):]WHILE循環(huán)控制變量LOOP

順序語(yǔ)句

ENDLOOP[標(biāo)號(hào)];例1:Shift1:PROCESS(inputx)

VARIABLEn:POSITIVE:=1BEGINL1:WHILEn<8LOOPoutputx(n)<=input(n+8);

n:=n+1;ENDLOOPL1;ENDPROCESSShift1;第101頁(yè)/共200頁(yè)3.3.4NEXT與EXIT語(yǔ)句N(xiāo)EXT;NEXTLOOP標(biāo)號(hào);NEXTLOOP標(biāo)號(hào)WHEN條件表達(dá)式;EXIT;EXITLOOP標(biāo)號(hào);EXITLOOP標(biāo)號(hào)WHEN條件表達(dá)式;循環(huán)語(yǔ)句轉(zhuǎn)向控制第102頁(yè)/共200頁(yè)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYBIJIAOISPORT(a:INSTD_LOGIC_VECTOR(0TO7);

b:INSTD_LOGIC_VECTOR(0TO7);y:OUTSTD_LOGIC);ENDBIJIAO;ARCHITECTUREJIEGOUOFBIJIAOISSignaltmp:STD_LOGIC_VECTOR(0TO7);Signaltmq:std_logic;BEGINPROCESS(a,b)BEGINFORnIN0TO7LOOPtmp(n)<=a(n)xnorb(n);Nextwhen(tmp(n)=‘1’);tmq<=‘1’;ENDLOOP;y<=tmq;ENDPROCESS;ENDJIEGOU;NEXT語(yǔ)句第103頁(yè)/共200頁(yè)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYBIJIAOISPORT(a:INSTD_LOGIC_VECTOR(0TO7);

b:INSTD_LOGIC_VECTOR(0TO7);y:OUTSTD_LOGIC);ENDBIJIAO;ARCHITECTUREJIEGOUOFBIJIAOISSignaltmp:STD_LOGIC_VECTOR(0TO7);BEGINPROCESS(a,b)BEGINFORnIN0TO7LOOPtmp(n)<=a(n)xnorb(n);EXITwhen(tmp(n)=‘0’);ENDLOOP;y<=‘1’;ENDPROCESS;ENDJIEGOU;EXIT語(yǔ)句第104頁(yè)/共200頁(yè)3.4子程序及其調(diào)用子程序概述函數(shù)(Function)過(guò)程(Procedure)子程序調(diào)用3.5返回語(yǔ)句(Return)3.6空操作語(yǔ)句(NULL)3.7其它語(yǔ)句第105頁(yè)/共200頁(yè)3.4.1子程序概述子程序是一個(gè)VHDL程序模塊,由順序語(yǔ)句構(gòu)成,用于完成重復(fù)性的計(jì)算工作,子程序有兩種類(lèi)型,即過(guò)程(Procedure)和函數(shù)(Function)。子程序的使用方法只能通過(guò)子程序調(diào)用及與子程序的界面端口進(jìn)行通信。每調(diào)用一次子程序都意味著增加了一個(gè)硬件電路模塊,因此,在實(shí)際使用時(shí),要密切關(guān)注和嚴(yán)格控制子程序的調(diào)用次數(shù)。第106頁(yè)/共200頁(yè)3.4.2函數(shù)(Function)--函數(shù)首Function函數(shù)名(參數(shù)表)Return數(shù)據(jù)類(lèi)型Function函數(shù)名(參數(shù)表)Return數(shù)據(jù)類(lèi)型IS

說(shuō)明部分

Begin

順序語(yǔ)句

ENDFunction函數(shù)名;--函數(shù)體注:參數(shù)表中參量可以是變量、信號(hào)、常數(shù)(默認(rèn))

無(wú)需定義參數(shù)的方向(默認(rèn)為“輸入”)第107頁(yè)/共200頁(yè)例1EntityfuncIsPort(a:inbit_vector(0to2);m:outbit_vector(0to2));EndEntityfunc;ArchitecturedemoOffuncIsFunctionsam(x,y,z:bit)ReturnbitisBeginReturn(xandy)orzEndFunctionsam;BeginProcess(a)Beginm(0)<=sam(a(0),a(1),a(2));m(1)<=sam(a(2),a(0),a(1));m(0)<=sam(a(1),a(2),a(0));EndProcess;EndArchitecturedemo;函數(shù)體輸入變量注意:函數(shù)定義的位置函數(shù)調(diào)用第108頁(yè)/共200頁(yè)例2Functiontrans(value:bit_vector(0to3))Returnbit_vectorIsBeginCasevalueISWhen“0000”=>Return“1100”;When“0101”=>Return“1100”;WhenOthers=>Return“1111”;EndCase;EndFunctiontrans;第109頁(yè)/共200頁(yè)3.4.3過(guò)程(Procedure)--過(guò)程首Procedure過(guò)程名(參數(shù)表)Procedure過(guò)程名(參數(shù)表)IS

說(shuō)明部分

Begin

順序語(yǔ)句

ENDProcedure過(guò)程名;--過(guò)程體注:參數(shù)表中參量可以時(shí)變量、信號(hào)、常數(shù)(默認(rèn))參數(shù)的方向可以是IN、OUT、INOUT第110頁(yè)/共200頁(yè)例Procedureprg1(variablevalue:inoutbit_vector(0to3))BeginCasevalueISWhen“0000”=>Return“1100”;When“0101”=>Return“0000”;WhenOthers=>Return“1111”;EndCase;EndProcedurePrg1;第111頁(yè)/共200頁(yè)3.4.4子程序調(diào)用例題ENTITYlitiISPORT(a,b,c,d:inbit_vector(0to3);ra,rb,rc,rd:ourbit_vector(0to3));ENDliti;ARCHITECTUREmuxesOFlitiisProceduresort(x,y:inoutbit_vector(0to3))isvariabletmp:bit_vector(0to3);BeginIfx>ythentmp:=x;x:=y;y:=tmp;ENDIF;ENDSORT;BeginProcess(a,b,c,d)Beginsort(a,c);sort(b,d);sort(a,b);sort(c,d);sort(b,c);ENDprocess;ra<=a;rb<=b;rc<=c;rd<=d;ENDmuxes;第112頁(yè)/共200頁(yè)3.4.5函數(shù)與過(guò)程對(duì)比過(guò)程可以返回多值,函數(shù)只能返回一個(gè)值。過(guò)程的參數(shù)為IN、OUT、INOUT

函數(shù)的參數(shù)為IN(默認(rèn))。函數(shù)和過(guò)程均能產(chǎn)生新的電路模塊。第113頁(yè)/共200頁(yè)3.5返回語(yǔ)句(Return)格式:Return;Return表達(dá)式;只能用于FunctionProcedurers(signals,r:instd_logic;signalq,nq:inoutstd_logic)isBeginIf(s=‘1’andr=‘1’)thenReturnElseq<=sandnqNq<=sandqEndif;Endprocedurers;例題1:第114頁(yè)/共200頁(yè)例題2:Functionopt(a,b,opr:std_logic)returnstd_logicisBeginIf(opr=‘1’)thenReturn(aandb);ElseReturn(aorb);Endif;EndFunctionopt;Return語(yǔ)句的作用就是結(jié)束當(dāng)前運(yùn)行的子程序,所不同的是過(guò)程無(wú)條件返回,并且不返回任何值。函數(shù)必須返回一個(gè)值第115頁(yè)/共200頁(yè)3.6空操作語(yǔ)句(NULL)例句:CASEOPCODEISWHEN“001”=>tmp:=regaandregb;WHEN“101”=>tmp:=regaorregb;WHEN“110”=>tmp:=NOTrega;WHENOTHERS=>NULL;ENDCASE;注:NULL語(yǔ)句有時(shí)會(huì)造成不必要的寄存器第116頁(yè)/共200頁(yè)3.7其它語(yǔ)句clock’EVENTandclock=‘1’;功能:clock’EVENT就是對(duì)信號(hào)在當(dāng)前的一個(gè)極小的時(shí)間段內(nèi)電平是否發(fā)生變化進(jìn)行檢測(cè)。例1:Process(clock)If(clock’EVENTandclock=‘1’)thenQ<=DATAEndIf;EndProcess;第117頁(yè)/共200頁(yè)例2:Process(clock)If(clock’EVENTandclock=‘0’)thenQ<=DATAEndIf;EndProcess;例3:Process(clock)Ifrising_edge(clock)thenQ<=DATAEndIf;EndProcess;與例1等價(jià)第118頁(yè)/共200頁(yè)第四章VHDL并行語(yǔ)句4.1并行語(yǔ)句概述4.2并行信號(hào)賦值語(yǔ)句4.3進(jìn)程語(yǔ)句(process)第119頁(yè)/共200頁(yè)4.1并行語(yǔ)句概述并行語(yǔ)句一般處于進(jìn)程(PROCESS)的外部。所有并行語(yǔ)句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無(wú)關(guān)。

一、并行語(yǔ)句特點(diǎn)

a.所有語(yǔ)句的執(zhí)行是并行的;b.每條語(yǔ)句的執(zhí)行和其所在的位置無(wú)關(guān);c.并行語(yǔ)句的輸出僅僅依賴(lài)于輸入,沒(méi)有其它的限制條件

第120頁(yè)/共200頁(yè)二、基本的并行語(yǔ)句(1)直接賦值語(yǔ)句:<=賦值運(yùn)算符(2)進(jìn)程(Process)語(yǔ)句(3)條件式信號(hào)設(shè)置語(yǔ)句:When-Else(4)選擇式信號(hào)設(shè)置語(yǔ)句:With-Select-When(5)塊(Block)語(yǔ)句(6)元件(Component)例化語(yǔ)句(7)For-Generate語(yǔ)句第121頁(yè)/共200頁(yè)4.2并行信號(hào)賦值語(yǔ)句簡(jiǎn)單信號(hào)賦值語(yǔ)句條件信號(hào)賦值語(yǔ)句選擇信號(hào)賦值語(yǔ)句第122頁(yè)/共200頁(yè)一、直接賦值語(yǔ)句:<=賦值運(yùn)算符作用:直接對(duì)目標(biāo)對(duì)象進(jìn)行賦值操作。語(yǔ)法格式:Signal_name<=expression;如:SignalA,B:std_logic_vector(7downto0);

A<=”0000000”;B<=”1000000”;我們也可以這樣賦值:

A<=(others=>’0’);

信號(hào)A的每一位的值都為0。

B<=(‘1’,others=>’0’);

信號(hào)B的第一位為1,其它位的值為0。

第123頁(yè)/共200頁(yè)下面舉一個(gè)應(yīng)用示例,如下面電路:

用VHDL對(duì)電路的描述如下:

第124頁(yè)/共200頁(yè)libraryieee;useieee.std_logic_1164.all;Entity

exam1isport(a,b:instd_logic;c,d:outstd_logic);Endexam1;Architecture

m1ofexam1isBeginc<=aandb;d<=aorb;ENDm1;并行語(yǔ)句的輸出僅僅依賴(lài)于輸入,沒(méi)有其它的限制條件。每條語(yǔ)句的執(zhí)行和其所在的位置無(wú)關(guān)。

第125頁(yè)/共200頁(yè)二、條件式信號(hào)設(shè)置語(yǔ)句:When-Else語(yǔ)法格式為:

賦值目標(biāo)<=表達(dá)式1When賦值條件

Else

表達(dá)式2When賦值條件

Else

表達(dá)式N;在結(jié)構(gòu)體中的條件賦值語(yǔ)句的功能與在進(jìn)程中的IF語(yǔ)句相同,在執(zhí)行條件信號(hào)語(yǔ)句時(shí),每一賦值條件是按書(shū)寫(xiě)的先后關(guān)系測(cè)定的。第126頁(yè)/共200頁(yè)我們?cè)e過(guò)一個(gè)二輸入的與門(mén)電路的例子:

Libraryieee;Useieee.std_logic_1164.all;Entity

and2isPort(d1,d2:instd_logic;op:outstd_logic);Endand2;Architecturem1ofand2isBeginop<=‘1’when(d1=’1’andd2=’1’)else

‘0’;Endm1;第127頁(yè)/共200頁(yè)Libraryieee;Useieee.std_logic_1164.all;Entity

muxisPort(a,b,c:inbit;p1,p2:inbit

z:outbit);Endand2;Architecturem1ofmuxisBeginz<=awhenp1=‘1’else

bwhenp2=‘1’else

c;Endm1;允許有重疊第128頁(yè)/共200頁(yè)三、選

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論