第一部分-VHDL語言編程基礎(chǔ)課件_第1頁
第一部分-VHDL語言編程基礎(chǔ)課件_第2頁
第一部分-VHDL語言編程基礎(chǔ)課件_第3頁
第一部分-VHDL語言編程基礎(chǔ)課件_第4頁
第一部分-VHDL語言編程基礎(chǔ)課件_第5頁
已閱讀5頁,還剩312頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一部分VHDL語言編程基礎(chǔ)通過電腦下載(編程文件)到器件(PLD)程序代碼與電路代碼對(duì)應(yīng)于邏輯邏輯與器件結(jié)合產(chǎn)生功能電路代碼的重復(fù)代表電路的重復(fù)電路是并行的,所以代碼一定是并行的邏輯的繁簡對(duì)應(yīng)代碼的繁簡概述1.常用硬件描述語言簡介常用硬件描述語言有VHDL、Verilog和ABEL語言。三者的比較:(1)邏輯描述層次:一般的硬件描述語言可以在三個(gè)層次上進(jìn)行電路描述,其層次由高到低依次可分為行為級(jí)、RTL級(jí)和門電路級(jí)。VHDL語言是一種高級(jí)描述語言,適用于行為級(jí)和RTL級(jí)的描述,最適于描述電路的行為;Verilog語言和ABEL語言是一種較低級(jí)的描述語言,適用于RTL級(jí)和門電路級(jí)的描述,最適于描述門級(jí)電路。(2)設(shè)計(jì)要求:VHDL進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí)可以不了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者所做的工作較少;Verilog和ABEL語言進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí)需了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者需做大量的工作。(3)綜合過程:任何一種語言源程序,最終都要轉(zhuǎn)換成門電路級(jí)才能被布線器或適配器所接受。因此,VHDL語言源程序的綜合通常要經(jīng)過行為級(jí)→RTL級(jí)→門電路級(jí)的轉(zhuǎn)化,VHDL幾乎不能直接控制門電路的生成。而Verilog語言和ABEL語言源程序的綜合過程要稍簡單,即經(jīng)過RTL級(jí)→門電路級(jí)的轉(zhuǎn)化,易于控制電路資源。(4)對(duì)綜合器的要求:VHDL描述語言層次較高,不易控制底層電路,因而對(duì)綜合器的性能要求較高,Verilog和ABEL對(duì)綜合器的性能要求較低。(5)支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的綜合器僅僅Dataio一家。(6)國際化程度:VHDL和Verilog已成為IEEE標(biāo)準(zhǔn),而ABEL正朝國際化標(biāo)準(zhǔn)努力。2.VHDL的簡介VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,誕生于1982年。1987年底,VHDL被IEEE(TheInstituteofElectricalandElectronicsEngineers)和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。1993年,IEEE對(duì)VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本。VHDL和Verilog作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。有專家認(rèn)為,在新的世紀(jì)中,VHDL與Verilog語言將承擔(dān)起幾乎全部的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù)。3.VHDL程序設(shè)計(jì)約定為了便于程序的閱讀和調(diào)試,本書對(duì)VHDL程序設(shè)計(jì)特作如下約定:(1)語句結(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è)字符。(5)源程序文件的名字與實(shí)體名必須一致。第一章VHDL的程序結(jié)構(gòu)和軟件操作1-1VHDL程序的基本結(jié)構(gòu)

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

1-1VHDL程序的基本結(jié)構(gòu)

實(shí)體描述(ENTITY)結(jié)構(gòu)體(ARCHITECTURE)設(shè)計(jì)實(shí)體實(shí)體描述(ENTITY)構(gòu)造體1設(shè)計(jì)實(shí)體構(gòu)造體2構(gòu)造體n…設(shè)計(jì)實(shí)體、實(shí)體說明、構(gòu)造體之間關(guān)系庫、包集合(LIBRARY)庫、包集合(LIBRARY)結(jié)構(gòu)體配置LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYorISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYor;ARCHITECTUREbehaOForISBEGINy<=aorb;ENDbeha;例1:庫說明實(shí)體描述結(jié)構(gòu)體aby例2:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYhalf_adderISPORT(a,b:INSTD_LOGIC;s,co:OUTSTD_LOGIC);ENDhalf_adder;ARCHITECTUREhalf1OFhalf_adderISSIGNALc,d:STD_LOGIC;BEGINc<=aORb;d<=aNANDb;co<=NOTd;s<=cANDd;ENDhalf1;一、庫、程序包使用(LIBRARY):

LIBRARY和PACKAGE的聲明部分

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

USE庫名.程序包名.All;

在QuartusⅡ系統(tǒng)中有4個(gè)庫能支持VHDL語言,它們分別是Std庫、IEEE庫、WORK庫和VITAL庫。Std庫和IEEE庫提供基本的邏輯運(yùn)算函數(shù)及數(shù)據(jù)類型轉(zhuǎn)換函數(shù)等。IEEE庫中的程序包std_logic_1164定義了std_logic和std_logic_vector等數(shù)據(jù)類型。二、實(shí)體描述(ENTITY)

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

端口名

:端口模式

數(shù)據(jù)類型;);ENTITY實(shí)體名ISEND[ENTITY]實(shí)體名;

格式:PORT(端口名

:端口模式數(shù)據(jù)類型;[GENERIC(類屬表);]類屬說明語句:

類屬(GENERIC)參量是一種端口界面常數(shù),常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分。一般書寫格式如下:GENERIC([常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]{;常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值]});端口名:即每個(gè)外部管腳名稱,有多個(gè)時(shí)可用逗號(hào)隔開。PORT(端口名:端口模式數(shù)據(jù)類型;{端口名:端口模式數(shù)據(jù)類型});Blk1Blk3Blk4Blk5Blk2InInoutOutBufferEntity

ARCHITECTURE定義作用:定義實(shí)體的實(shí)現(xiàn)。即電路的具體描述,說明電路執(zhí)行什么動(dòng)作或?qū)崿F(xiàn)功能。

ARCHITECTURE

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

OF實(shí)體名

ISBEGIN[功能描述語句];END[ARCHITECTURE]

結(jié)構(gòu)體名;使用格式:三、結(jié)構(gòu)體(ARCHITECTURE):[說明語句]結(jié)構(gòu)體說明語句:

結(jié)構(gòu)體中的說明語句是對(duì)結(jié)構(gòu)體的功能描述語句中將要用到的信號(hào)(SIGNAL)、數(shù)據(jù)類型(TYPE)、常數(shù)(CONSTANT)、元件(COMPONANT)、函數(shù)(FUNCTION)和過程(PROCEDURE)等加以說明;功能描述語句:功能描述語句主要由5種不同類型的以并行方式工作的語句結(jié)構(gòu):1、塊語句結(jié)構(gòu):由一系列并行語句構(gòu)成;2、進(jìn)程語句結(jié)構(gòu):由順序語句構(gòu)成;3、信號(hào)賦值語句:將設(shè)計(jì)實(shí)體內(nèi)處理結(jié)果向定義的信號(hào)或界面端口進(jìn)行賦值;4、子程序調(diào)用語句:用于調(diào)用過程或函數(shù);5、元件例化語句:對(duì)其它的設(shè)計(jì)實(shí)體作元件調(diào)用;舉例:設(shè)計(jì)一個(gè)與門電路邏輯符號(hào)真值表LibraryIEEE;UseIEEE.STD_LOGIC_1164.all;Entityand2isPort(A:instd_logic;

B:instd_logic;

Y:outstd_logic);Endand2;

--首先定義輸入輸出端口名字,模式(Mode),信號(hào)類型--注意最后語句的分號(hào)在括號(hào)外實(shí)體定義:

ArchitectureNaofand2isBeginY<=AandB;EndNa;結(jié)構(gòu)體定義:端口模式有以下幾種類型:IN;OUT;INOUT;BUFFER。ArchitectureNbofand2isBeginY<=’1’whenA=’1’andB=‘1’else

‘0’;EndNb;以上結(jié)構(gòu)體表達(dá)何種電路?一個(gè)實(shí)體可以有幾個(gè)結(jié)構(gòu)體,即結(jié)構(gòu)體的定義可以有不同的形式結(jié)論:小結(jié):VHDL程序設(shè)計(jì)基本結(jié)構(gòu)1-2軟件操作—Max+plusⅡ的操作1、

建立和編寫一個(gè)VHDL語言的工程文件2、VHDL程序的編譯

3、VHDL語言程序的仿真

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

一、軟件操作—Max+plusⅡ的操作

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

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

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

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

二、

建立和編寫一個(gè)VHDL語言的工程文件

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

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

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

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

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

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

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

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

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

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

三、VHDL程序的編譯

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

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

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

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

中的Start按鈕,編譯即開始。

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

四、VHDL語言程序的仿真

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

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

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

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

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

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

(2)打開仿真器;點(diǎn)擊主菜單MAX+plusⅡ\Simulator項(xiàng),此時(shí)彈出Simulator對(duì)話框。點(diǎn)擊對(duì)話框的Start按鈕,仿真即開始。在仿真結(jié)束后打開仿真波

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

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

(2)需要再編譯一次。

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

(點(diǎn)擊TimingAnalyzer選項(xiàng))(4)最后點(diǎn)擊Start按鈕后,時(shí)序分析器開始啟動(dòng)。

(以與門的設(shè)計(jì)為例講述具體過程)六、

安排芯片腳位

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

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

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

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

EDA實(shí)驗(yàn)箱第二章VHDL語言要素

一、VHDL語言標(biāo)識(shí)符的有關(guān)命名規(guī)則:1、標(biāo)識(shí)符主要用于命名或標(biāo)識(shí)VHDL設(shè)計(jì)中的一個(gè)項(xiàng)目(如實(shí)體、構(gòu)造體、程序包、過程、函數(shù)、常量、變量、文件等。2、標(biāo)識(shí)符不區(qū)分大小寫。3、長度不超過32個(gè)有效字符序列。4、只能由英文字母、數(shù)字及下劃線構(gòu)成。5、首字母必須是字母,且不連續(xù)使用下劃線“_”,不以下劃線“_”結(jié)尾;6、任何VHDL語言的保留字不能用作標(biāo)識(shí)符。VHDL語言程序書寫規(guī)定二、VHDL語言書寫規(guī)定:1、VHDL語句間用分號(hào)隔開。2、VHDL注釋語句用“--”開頭?!?.1VHDL文字規(guī)則VHDL文字(Literal)主要包括數(shù)值和標(biāo)識(shí)符。數(shù)值型文字主要有數(shù)字型、字符串型、位串型。1.?dāng)?shù)字型文字(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.0(3)以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由五個(gè)部分組成。第一部分,用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù);第二部分,數(shù)制隔離符號(hào)“#”;第三部分,表達(dá)的文字;第四部分,指數(shù)隔離符號(hào)“#”;第五部分,用十進(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)(4)物理量文字(VHDL綜合器不接受此類文字)。如:60s(60秒),100m(100米),kΩ(千歐姆),177A(177安培)2.字符串型文字

(1)字符是用單引號(hào)引起來的ASCII字符,可以是數(shù)值,也可以是符號(hào)或字母,如:‘R’,‘A’,‘*’,‘Z’。(2)字符串則是一維的字符數(shù)組,須放在雙引號(hào)中。如:“ERROR”,“BOTHSANDQEQUALTOL”(3)數(shù)位字符串:數(shù)位字符串稱位矢量,代表的是二進(jìn)制、八進(jìn)制或十六進(jìn)制的數(shù)組。B:二進(jìn)制基數(shù)符號(hào)(0,1);O:八進(jìn)制基數(shù)符號(hào)(0~7);X:十六進(jìn)制基數(shù)符號(hào)(0~9,A~F)例:B“10110110”,X“A0”,X“456”

3.下標(biāo)名及下標(biāo)段名下標(biāo)名用于指示數(shù)組型變量或信號(hào)的某一元素,而下標(biāo)段名則用于指示數(shù)組型變量或信號(hào)的某一段元素,其語句格式如下:數(shù)組類型信號(hào)名或變量名(表達(dá)式1[TO/DOWNTO表達(dá)式2]);

【例】SIGNALA,B,C:BIT_VECTOR(0TO7);SIGNALY,Z:BIT;Z<=B(3); --3是可計(jì)算型下標(biāo)表示C(0TO3)<=A(4TO7); --以段的方式進(jìn)行賦值§2-2數(shù)據(jù)類型

數(shù)據(jù)類型分類:主要有邏輯信號(hào)類型和數(shù)值信號(hào)類型。

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

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

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

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

(2)位(Bit)

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

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

(低電位,高電位)編碼器:輸入信號(hào)輸出信號(hào)(3)位數(shù)組類型(Bit_Vector)

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

例:SignalA:bit_vector(0to7);

SignalY:bit_vector(2downto0);

輸入信號(hào)輸出信號(hào)(4)標(biāo)準(zhǔn)邏輯型(Std_Logic)

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

其中只有“0”、“1”、“Z”、“-”四種值可以綜合可以看出,這個(gè)“標(biāo)準(zhǔn)邏輯”信號(hào)定義,比“位即bit”信號(hào)對(duì)于數(shù)字邏輯電路的邏輯特性描述更完整、更真實(shí)。所以在VHDL的程序里,對(duì)于邏輯信號(hào)的定義,通常都是采用這個(gè)“標(biāo)準(zhǔn)邏輯”信號(hào)形式。使用這類數(shù)據(jù)信號(hào),必須包含下面兩條聲明語句:

LibraryIEEE;UseIEEE.std_logic_1164.all;

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

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

Bit_Vector與Std_Logic_vector的區(qū)別在于數(shù)組的每一位前者為BIT型(0,1)后者為Std_Logic型§2-2-2數(shù)值數(shù)據(jù)類型(1)整數(shù)(Integer)定義位置:在std庫的standard程序包中進(jìn)行定義。即數(shù)值范圍為-231+1~231-1。與數(shù)學(xué)中的整數(shù)的定義相同,不能含有小數(shù)點(diǎn)的數(shù)。書寫方式有:2-十進(jìn)制數(shù)10E4-十進(jìn)制數(shù)16#D2#-十六進(jìn)制數(shù)2#101101#-二進(jìn)制數(shù)(2)無符號(hào)(Unsigned)和有符號(hào)(Signed)類型定義位置:有符號(hào)(Signed)和無符號(hào)(Unsigned)邏輯信號(hào)定義在庫IEEE的程序包std_logic_arith中。有符號(hào)類型數(shù)據(jù)代表有符號(hào)數(shù)值,即可以是正數(shù),0,負(fù)數(shù);編譯器將有符號(hào)數(shù)類型作為一個(gè)補(bǔ)碼的二進(jìn)制數(shù),最左邊的位為符號(hào)位。無符號(hào)類型數(shù)據(jù)代表無符號(hào)數(shù)值,即代表0或正數(shù);最左邊的位為最高位。如:Unsigned(“0110”)代表+6;Unsigned(“1010”)代表+10;如:signed(“0110”)代表+6;signed(“1011”)代表-5;例如:VARIABLEA:UNSIGNED(0TO5);SIGNALB:SIGNED(3DOWNTO0);最左位B(3)是符號(hào)位;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具體值當(dāng)定義成無符號(hào)數(shù)據(jù)類型時(shí),若a<=”1000”,b=’0001’,即a=8,b=1則結(jié)果c=’1’。c=’0’;當(dāng)定義成有符號(hào)數(shù)據(jù)類型時(shí),若a<=”1001”,b=’0001’,則結(jié)果(3)實(shí)數(shù)(real):含有小數(shù)點(diǎn)的數(shù),其范圍為-1.0E+38~+1.0E+38,實(shí)數(shù)有正負(fù)數(shù),書寫時(shí)一定要有小數(shù)點(diǎn)。如:-1.2,+2.5,-1.0E20(4)自然數(shù)(natural):包含0和0以上的正整數(shù)。(5)正整數(shù)(positive):大于0的正整數(shù)。(6)其它:字符(character):所定義的字符量通常有單引號(hào)括起來,如‘A’,‘a(chǎn)’,‘1’等。字符串(string):是由雙引號(hào)括起來的一個(gè)字符序列,也稱為字符矢量或字符串?dāng)?shù)組。如:“integerrange”時(shí)間(time):是一個(gè)物理量單位,完整時(shí)間量數(shù)據(jù)應(yīng)包含整數(shù)和單位兩部分。錯(cuò)誤等級(jí)(severitylevel):表征系統(tǒng)的狀態(tài),有note(注意)warning(警告)error(出錯(cuò))failure(失敗)四種。§2-2-3用戶定義的數(shù)據(jù)類型格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型;或者為:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;(1)枚舉類型:一組以列表形式給出的適用于特定操作所需要的值。如:TYPEyearIS(Jan,Feb,Mar,Apr,May,Jun,Aug,Sep,Oct,Nov,Dec);(2)整數(shù)類型和實(shí)數(shù)類型:如:TYPEdigitISINTEGERRANGE0TO100;(3)數(shù)組類型:格式為:TYPE數(shù)組名ISARRAY約束范圍OF數(shù)據(jù)類型;如:TYPEwordISARRAY(0to7)OFSTD_LOGIC;TYPEdata_busISARRAY(15downto0)OFSTD_LOGIC_VECTOR(7DOWNTO0);(4)其它:還可以定義物理類型、記錄類型等。§2-2-4數(shù)據(jù)類型的轉(zhuǎn)換VHDL語言中,不同數(shù)據(jù)類型不能進(jìn)行運(yùn)算和直接代入,必須將要代入的數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換;函數(shù)名功能.STD_LOGIC_1164包集合TO_STDLOGICVECTOR(A)TO_BITVECTOR(A)TO_STDLOGIC(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)換為BIT.STD_LOGIC_ARITH包集合CONV_STD_LOGIC_VECTOR(A,位長)CONV_INTEGER(A)由INTEGER,UNSIGNED,SIGNED轉(zhuǎn)換為STD_LOGIC_VECTOR由UNSIGNED,SIGNED轉(zhuǎn)換為INTEGER.STD_LOGIC_UNSIGNED包集合CON_INTEGER(A)由STD_LOGIC_VECTOR轉(zhuǎn)換為INTEGER例1:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexa_2ISPORT(inp:INSTD_LOGIC;…);ENDexa_2;ARCHITECTUREexamOFexa_2ISSIGNALinb:BIT;BEGINinb<=TO_BIT(inp);

…ENDexam;例2:SIGNALa:BIT_VECTOR(0TO11);SIGNALb:STD_LOGIC_VECTOR(0TO11);a<=X”A6”;(十六進(jìn)制數(shù)值賦予位矢量BIT_VECTOR)b<=TO_STDLOGICVECTOR(X”A6”);(注:十六進(jìn)制數(shù)值不能賦予STD_LOGIC_VECTOR)例3:VARIABLEa:INTEGER;VARIABLEb:REAL;a:=INTEGER(b);b:=REAL(a);注:類型標(biāo)記轉(zhuǎn)換法,即直接轉(zhuǎn)換?!?.3VHDL數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象(DataObjects):

凡是可以被賦予一個(gè)值的對(duì)象稱為數(shù)據(jù)對(duì)象,數(shù)據(jù)對(duì)象用于傳遞信號(hào)。數(shù)據(jù)對(duì)象有:信號(hào)、變量、常數(shù)數(shù)據(jù)對(duì)象名

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

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

2-3-1信號(hào)信號(hào)數(shù)據(jù)對(duì)象,代表電路內(nèi)部傳輸線路線路,其在元件之間起互連作用,信號(hào)通常在包集合、結(jié)構(gòu)體和實(shí)體說明中使用。信號(hào)數(shù)據(jù)對(duì)象的定義格式為:

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

如:

Signal

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

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

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

<=

“1010”2-3-2變量

變量用于進(jìn)程語句、函數(shù)語句、過程語句的結(jié)構(gòu)中做局部的數(shù)據(jù)存儲(chǔ),它是一個(gè)局部量,而且變量的賦值是立即生效的,不產(chǎn)生賦值延時(shí)。它用于對(duì)中間數(shù)據(jù)的臨時(shí)存儲(chǔ),并不一定代表電路的某一組件。

變量數(shù)據(jù)對(duì)象的定義格式為:

Variable變量名:數(shù)據(jù)類型[:=設(shè)定值];

如:Variablea:integer:=0;變量賦值語句的語法格式為:目標(biāo)變量名:=

表達(dá)式(設(shè)定值);

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

:=表達(dá)式;

如:ConstantD1:Integer:=3;

VariableD2:Std_Logic_Vector(D1Downto0):=”0000”;

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

“:=”

2-3-3常數(shù)常量是設(shè)計(jì)者為實(shí)體中某一常量名賦予的固定值。一般在程序開始前進(jìn)行說明2-3-4信號(hào)、變量、常數(shù)對(duì)比一、定義SignalA:std_logic;VariableB:std_logic_vector(7downto0);ConstantC:integer:=6;二、賦值及賦值時(shí)刻A

<=

“1010”;(延時(shí))B:=“1010”;(立刻)三、定義區(qū)域信號(hào):實(shí)體、結(jié)構(gòu)體、程序包變量:進(jìn)程、子程序常數(shù):實(shí)體、結(jié)構(gòu)體、程序包、塊、進(jìn)程、子程序四、適用范圍信號(hào):實(shí)體、結(jié)構(gòu)體、程序包變量:定義了變量的進(jìn)程、子程序的順序語句中常數(shù):視其定義的位置而定若常數(shù)定義在實(shí)體中,適用范圍是實(shí)體所對(duì)應(yīng)的有結(jié)構(gòu)體。若常數(shù)定義在結(jié)構(gòu)體中,適用范圍就是本結(jié)構(gòu)體。練習(xí):1.定義信號(hào)A為標(biāo)準(zhǔn)邏輯數(shù)組(8個(gè)元素)2.定義變量B,其數(shù)據(jù)類型為標(biāo)準(zhǔn)邏輯型。3.定義信號(hào)C,數(shù)據(jù)類型為整數(shù)型。4.給A、B、C賦值,其中A的值為11001101;B的值為0;C的值為23;SignalA:std_logic_vector(1to8);VariableB:std_logic;SignalC:integer;A<=“11001101”;B:=‘0’;解:C<=23;2.4VHDL操作符VHDL操作符:邏輯、算術(shù)、符號(hào)、關(guān)系操作符。2.4.1邏輯運(yùn)算符一、分類及功能AND(與),OR(或),NOT(非),NAND(與非),NOR(或非),XOR(異或),XNOR(同或)。二.用法1.操作數(shù)的數(shù)據(jù)類型必須符合操作符的要求能進(jìn)行邏輯運(yùn)算的數(shù)據(jù)類型:bit、bit_vector、booleanstd_logic、std_logic_vector例Signala,b,y:std_logic;Signalc,d,z:integer;y<=aandb;z<=candd;√×2.表達(dá)式中有多個(gè)運(yùn)算符時(shí)一般要加括號(hào)表達(dá)式中有多個(gè)運(yùn)算符時(shí)一般要加括號(hào),但and、or、xor除外例Signala,b,c,d:std_logic_vector(3downto0);Signale,f,g,h:std_logic_vector(1downto0);d<=aandbandc;d<=aorborc;d<=axorbxorc;h<=enorfnorg;h<=(enorf)norg;3.運(yùn)算符兩側(cè)的操作數(shù)要對(duì)稱d<=(enorf)norg;×√×√√√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;2.4.2關(guān)系運(yùn)算符=(等于),/=(不等于),<(小于),>(大于),<=(小于等于,和信號(hào)的賦值符號(hào)相同),>=(大于等于)。注1.等于和不等于的操作對(duì)象可以是任何數(shù)據(jù)類型構(gòu)成的操作數(shù)。2.其它關(guān)系運(yùn)算符對(duì)數(shù)據(jù)類型有一定的限制。(整數(shù),枚舉型)3.=、/=在實(shí)現(xiàn)硬件電路時(shí)比其它的關(guān)系運(yùn)算符對(duì)芯片的利用率要高例:SIGNALa:STD_LOGIC(3DOWNTO0);SIGNALb:STD_LOGIC(3DOWNTO0);…a<=“1010”;--十進(jìn)制數(shù)10b<=“0111”;--十進(jìn)制數(shù)7IF(a>b)THEN…ELSE…注意:對(duì)于位組(或矢量)數(shù)據(jù)進(jìn)行關(guān)系運(yùn)算時(shí)總是先左對(duì)齊,然后再由左至右逐位進(jìn)行比較。例:A<=“1010”B<=“111”試比較A和B大???2.4.3算術(shù)運(yùn)算符一、分類及功能求和運(yùn)算符、求積運(yùn)算符、符號(hào)運(yùn)算符、混合運(yùn)算符、移位運(yùn)算符等。(+加,-減,&并置,*乘,/除,MOD求模,REM取余,**指數(shù),ABS取絕對(duì)值)二.運(yùn)用1.求和運(yùn)算符VHDL中的求和運(yùn)算符包括加減運(yùn)算和并置(&)運(yùn)算(用于位的連接),操作數(shù)的數(shù)據(jù)類型為整型。例1:Variablea,b,c,d,e,f:integerrange0to255;a:=b+c;d:=e–f;例2:Signala:std_logic_vector(0to4);Signalb:std_logic_vector(0to2);Signalc:std_logic_vector(1downto0);a<=bc例3:A<=“VH”&”DL”--A=“VHDL”A<=‘0‘&’1’--A=“01”2.移位運(yùn)算符移位運(yùn)算所對(duì)應(yīng)的數(shù)據(jù)類型為一維數(shù)組,其中的元素為bit、boolean等。例:Variablea1:std_logic_vector(3to0);a1:=“1011”;a1SLL1;a1=0110a1SRL2;a1=0010a1ROL1;a1=01113.其它SLL:邏輯左移,SRL:邏輯右移,SLA算術(shù)左移,SRA算術(shù)右移,ROL:邏輯循環(huán)左移,ROR邏輯循環(huán)右移Signala:std_logic_vector(4downto0);Signalb:std_logic_vector(2downto0);Signalc:std_logic_vector(1downto0);bc

a<=bcVariableA:std_logic_vector(7downto0);A:=“10110001”;ASLL1;AROL1;1

為了方便各種不同數(shù)據(jù)類型間的運(yùn)算,VHDL允許用戶對(duì)原有的基本操作符重新定義,賦予新的含義和功能,從而建立一種新的操作符,這就是重載操作符,定義這種操作符的函數(shù)稱為重載函數(shù)。事實(shí)上,在程序包STD_LOGIC_UNSIGNED中已定義了多種可供不同數(shù)據(jù)類型間操作的運(yùn)算符重載函數(shù)。STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED中已經(jīng)為許多類型的運(yùn)算重載了算術(shù)運(yùn)算符和關(guān)系運(yùn)算符,因此只要引用這些程序包,SINGEND、UNSIGEND、STD_LOGIC和INTEGER之間即可混合運(yùn)算;INTEGER、STD_LOGIC和STD_LOGIC_VECTOR之間也可以混合運(yùn)算。2.4.4重載運(yùn)算符libraryIEEE;useIEEE.std_logic_1164.all;packagestd_logic_arithistypeUNSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;typeSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;subtypeSMALL_INTisINTEGERrange0to1;function"+"(L:UNSIGNED;R:UNSIGNED)returnUNSIGNED;function"+"(L:SIGNED;R:SIGNED)returnSIGNED;function"+"(L:UNSIGNED;R:SIGNED)returnSIGNED;function"+"(L:SIGNED;R:UNSIGNED)returnSIGNED;function"+"(L:UNSIGNED;R:INTEGER)returnUNSIGNED;function"+"(L:INTEGER;R:UNSIGNED)returnUNSIGNED;function"+"(L:SIGNED;R:INTEGER)returnSIGNED;function"+"(L:INTEGER;R:SIGNED)returnSIGNED;function"+"(L:UNSIGNED;R:STD_ULOGIC)returnUNSIGNED;function"+"(L:STD_ULOGIC;R:UNSIGNED)returnUNSIGNED;function"+"(L:SIGNED;R:STD_ULOGIC)returnSIGNED;function"+"(L:STD_ULOGIC;R:SIGNED)returnSIGNED;例:Std_logic_arith程序包中的部分重載運(yùn)算符

function"+"(L:UNSIGNED;R:UNSIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:SIGNED;R:SIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:UNSIGNED;R:SIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:SIGNED;R:UNSIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:UNSIGNED;R:INTEGER)returnSTD_LOGIC_VECTOR;function"+"(L:INTEGER;R:UNSIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:SIGNED;R:INTEGER)returnSTD_LOGIC_VECTOR;function"+"(L:INTEGER;R:SIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:UNSIGNED;R:STD_ULOGIC)returnSTD_LOGIC_VECTOR;function"+"(L:STD_ULOGIC;R:UNSIGNED)returnSTD_LOGIC_VECTOR;function"+"(L:SIGNED;R:STD_ULOGIC)returnSTD_LOGIC_VECTOR;function"+"(L:STD_ULOGIC;R:SIGNED)returnSTD_LOGIC_VECTOR;

function"-"(L:UNSIGNED;R:UNSIGNED)returnUNSIGNED;function"-"(L:SIGNED;R:SIGNED)returnSIGNED;……endStd_logic_arith;VHDL操作符列表VHDL操作符優(yōu)先級(jí)VHDL語句類型并行語句在architecture的begin和end之間,與書寫順序無關(guān),每一條并發(fā)語句均可用一個(gè)process語句等價(jià).順序語句只能在process和子程序中使用,與語句的書寫順序有關(guān).語句類型分:順序語句和并行語句.

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

賦值語句流程控制語句等待語句

子程序調(diào)用語句返回語句空操作語句3.1進(jìn)程語句(Process語句)輸入信號(hào)發(fā)生變化時(shí),電路啟動(dòng)進(jìn)行計(jì)算進(jìn)程語句是由順序語句構(gòu)成的,通過信號(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)的順序語句。進(jìn)程語句是將并行語句和順序語句區(qū)分開來的標(biāo)志之一。語法格式:[進(jìn)程標(biāo)號(hào):]Process[(敏感信號(hào)列表)]

[Variabledeclarations]--變量聲明Begin順序語句;EndProcess[標(biāo)號(hào)];Process(sel,x1,x2)Beginf<=x1;Ifsel=1thenf<=x2;endif;Endprocess;Process(sel,x1,x2)BeginIfsel=1thenf<=x2;endif;f<=x1;Endprocess;在第二個(gè)進(jìn)程中,無論什么情況,f=x1,而在第一個(gè)進(jìn)程中,只有信號(hào)sel/=1時(shí),f=x1。因此,語句的排列順序很重要,會(huì)影響信號(hào)的輸出結(jié)果。區(qū)別3.2賦值語句賦值語句包括變量賦值語句和信號(hào)賦值語句,前者的賦值是立刻發(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)和變量賦值執(zhí)行結(jié)果為:

x<=cxorb,y<=cxorb

執(zhí)行結(jié)果為:

x<=cxora,y<=cxorb

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)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)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);名稱關(guān)聯(lián)結(jié)果:h的值為0101Libraryieee;Useieee.std_logic_1164.all;Entitydff1isPort(clk,d:instd_logic;q:outstd_logic);Enddff1;Architecturebhvofdff1isSignala,b:std_logic;Beginprocess(clk)beginIfrising_edge(clk)then

a<=d;b<=a;q<=b;Endif;Endprocess;Endbhv;例1:信號(hào)賦值例2:變量賦值Libraryieee;Useieee.std_logic_1164.all;Entitydff1isPort(clk,d:instd_logic;q:outstd_logic);Enddff1;Architecturebhvofdff1isBeginprocess(clk)

Variablea,b:std_logic;beginIfrising_edge(clk)then

a:=d;b:=a;q<=b;Endif;Endprocess;Endbhv;DdclkqDDDQQadclkqb例2:變量賦值生成圖形例1:信號(hào)賦值生成的圖形3.3流程(轉(zhuǎn)向)控制語句3.3.1IF語句語法格式:If條件1Then語句1;Elsif條件2Then語句2;Elsif條件3Then語句3;……else語句n;Endif;根據(jù)條件進(jìn)行相應(yīng)賦值操作例1:Process(A)BeginIfA=”00”thenY<=D0;elsifA=”01”thenY<=D1;elsifA=”10”thenY<=D2;elseY<=D3;endif;endprocess;一、第一種IF語句IF條件句THEN順序語句ENDIF例題語句格式IF(a>b)THENout<=‘1’;ENDIF;二、第二種IF語句IF條件句THEN順序語句1ELSE順序語句2ENDIF語句格式例題IF(a>b)THENout<=‘1’;ELSEout<=‘0’;ENDIF;三、第三種IF語句語法格式:If條件句1Then順序語句1;Elsif條件句2Then順序語句2;Elsif條件語句3Then順序語句3;…….else順序語句n;Endif;語句格式例題1:Signala,b,c,p1,p2,z:bit;PROCESS(P1,P2)ISBEGINIF(p1=‘1’)THENz<=a;ELSIF(p2=‘0’)THENz<=b;ELSE

z<=c;ENDIF;ENDPROCESS;?選擇方式cbaa畫線部分意思:ELSIF(p1=‘0’andp2=‘0’)注例題2:8線-3線優(yōu)先編碼器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(I:INSTD_LOGIC_VECTOR(0TO7)Y:OUTSTD_LOGIC_VECTOR(1TO3));ENDcoder;實(shí)體設(shè)計(jì)功能:設(shè)計(jì)元件外觀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;BeginProcess(A)isENDprocess;練習(xí)題:設(shè)計(jì)一個(gè)3線-8線譯碼器元件外觀輸入輸出邏輯關(guān)系LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(A:INSTD_LOGIC_VECTOR(1TO3)Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDcoder;實(shí)體設(shè)計(jì)功能:設(shè)計(jì)元件外觀ARCHITECTUREa1OFcoderISBeginIFA=“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;Process(A)isBeginendprocess;3.3.2Case-When語句作用:根據(jù)條件進(jìn)行相應(yīng)的賦值操作。語法格式:Case表達(dá)式Is

When選擇值1=>順序語句1;

When選擇值2=>順序語句2;

…[whenothers=>順序語句n;]Endcase;CASE語句根據(jù)滿足的條件直接選擇多項(xiàng)順序語句的一項(xiàng)執(zhí)行=>不是信號(hào)賦值符號(hào),其意思等價(jià)于“THEN”注例題1:用CASE語句設(shè)計(jì)四選一數(shù)據(jù)選擇器s1s2z0001011abcdLIBRARYIEEE;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;ARCHITECTUREactivOFmux41ISSIGNALs:std_logic_vector(1downto0);BEGINS<=s1&s2PROCESS(s1,s2,a,b,c,d)BEGINIF

s=“00”thenz<=a;ELSIFs=“01”thenz<=b;ELSIFs=“10”thenz<=c;ELSE

z<=d;ENDIF;ENDPROCESS;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;例題2:SIGNALSEL:INTEGERRANGE0TO15;……CASESELISWHEN0=>Z1<=‘1’;WHEN1|3=>Z2<=‘1’;WHEN4TO7|12=>Z3<=‘1’;WHENOTHERS=>Z4<=‘1’;ENDCASE;IF與CASE比較IF語句中條件句之間是相與的關(guān)系,CASE語句中條件句之間是相或的關(guān)系。2.CASE條件語句必須將所有情況列出而IF則不必。3.IF語句可實(shí)現(xiàn)優(yōu)先級(jí),CASE語句則不可以。課堂練習(xí)題:試設(shè)計(jì)一個(gè)4位奇偶校驗(yàn)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTEST12ISPORT( D:INSTD_LOGIC_VECTOR(3DOWNTO0); P,NP:OUTSTD_LOGIC);ENDTEST12;ARCHITECTUREAOFTEST12ISSIGNALTMP1,TMP2,TMP3:STD_LOGIC;BEGINTMP1<=D(3)XORD(2);TMP2<=D(1)XORD(0);TMP3<=TMP1XORTMP2;NP<=TMP3XOR'1';P<=TMP3XOR'0';ENDA;源程序:數(shù)碼顯示一、數(shù)碼顯示器(一)發(fā)光二極管發(fā)光二極管特性:當(dāng)加正向電壓時(shí),二極管導(dǎo)通并發(fā)光.利用這了一特性可制成共陰極和共陽極七段數(shù)碼顯示器。(二)七段數(shù)碼顯示器1.工作原理共陰極接法2.顯示代碼概念9的顯示代碼顯示譯碼器顯示譯碼器功能其真值表如下所示:輸入代碼輸出顯示代碼Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntityBCD_7isPort(A:instd_logic_vector(3downto0);Y:outstd_logic_vector(6downto0));EndBCD_7;Architecturea1ofBCD_7isBeginProcess(A)BeginCaseAis

when"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”;--9

whenothers=>Y<=“XXXXXXX”;Endcase;Endprocess;Enda1;3.3.3LOOP語句一、單個(gè)LOOP語句[LOOP標(biāo)號(hào):]LOOP順序語句ENDLOOP[LOOP標(biāo)號(hào)];例:L2:LOOPa:=a+1;

EXITL2WHENa>10;ENDLOOPL2;二、FOR_LOOP語句[LOOP標(biāo)號(hào):]FOR循環(huán)變量IN循環(huán)次數(shù)范圍LOOP順序語句;ENDLOOP[LOOP標(biāo)號(hào)];例:試設(shè)計(jì)一個(gè)八位奇偶校驗(yàn)器

注:0XORa=aLIBRARYIEEE;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;三.WHILE_LOOP語句[標(biāo)號(hào):]WHILE循環(huán)控制變量LOOP順序語句ENDLOOP[標(biāo)號(hào)];例1:Shift1:PROCESS(inputx)

VARIABLEn:POSITIVE:=1BEGINL1:WHILEn<8LOOPoutputx(n)<=inputx(8-n);

n:=n+1;ENDLOOPL1;ENDPROCESSShift1;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYJIOUISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論