




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
工學VHDL程序設計語言第1頁/共200頁引例:VHDL原理:第2頁/共200頁
VHDL語言非常高速硬件描述語言,也就是一種硬件(數(shù)字電路)設計語言.其最大特點是對電路的行為與結構進行高度抽象化規(guī)范化,并對設計進行模擬驗證與綜合優(yōu)化,使分析和設計高度自動化。
支持VHDL語言的軟件平臺Max+PlusII
由軟件設計到硬件實現(xiàn)之間的媒介CPLD/FPGA(可編程器件)第3頁/共200頁在Max+PlusII編寫VHDL程序存盤(文件名為實體名,后綴為.VHD)編譯
軟件仿真管腳安排下載
由軟件設計到硬件實現(xiàn)的流程第4頁/共200頁
基本順序語句(1)Process語句(2)If-Else語句(3)Case-When語句(4)Null語句(5)Waituntil語句(6)變量賦值語句(7)For-Loop語句(8)過程調(diào)用語句
基本的并行語句(1)直接賦值語句(2)Process語句(3)When-Else(4)With-Select-When(5)元件例化語句(6)For-Generate第5頁/共200頁常用數(shù)字電路回顧(1)編碼器
輸入信號輸出信號使能端口第6頁/共200頁注:EN為1時編碼器工作第7頁/共200頁舉例參看EWB輔助電路第8頁/共200頁(2)譯碼器××
1111
譯碼器第9頁/共200頁VHDL與數(shù)字電路設計
引
言
VHDL簡介
一、由來
VHDL是VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage(非常高速集成電路硬件描述語言)的英文縮寫。它是由美國國防部支持的一項研究計劃,于1983年創(chuàng)建,目的是以文字化方法描述電子電路與系統(tǒng)。至今VHDL約有40年的發(fā)展歷史,1987年,VHDL成為IEEE標準,即IEEE1076標準,1993年修改為IEEE1164標準,1996年,IEEE又將電路合成的標準程序與規(guī)格加入到VHDL語言中,稱為1076.3標準。之后,又有1076.4標準和1076.6標準。第10頁/共200頁第一章
VHDL的程序結構和軟件操作1-1VHDL程序的基本結構
1-2軟件操作—Max+plusⅡ的操作
第11頁/共200頁第一章
VHDL的程序結構和軟件操作1-1VHDL程序的基本結構
(1)LIBRARY和PACHAGE的聲明部分
作用:庫(Library)是用于存放預先編譯好的程序包(Package),程序包中定義了數(shù)據(jù)集合體、邏輯操作和元件等。主要是聲明在設計或?qū)嶓w中將用到的常數(shù),數(shù)據(jù)類型,元件及子程序等。使用格式:LIBRARY庫名;
USE庫名.程序包名.All;
第12頁/共200頁(2)ENTITY定義
作用:定義本設計的輸入/出端口,即定義電路的外觀,即I/O接口的類型和數(shù)量使用格式:
…
端口名
:端口模式
數(shù)據(jù)類型;);ENTITY
實體名
IsEnd
實體名;
格式:Port(端口名
:端口模式數(shù)據(jù)類型;第13頁/共200頁(3)ARCHITECTURE定義作用:定義實體的實現(xiàn)。即電路的具體描述,說明電路執(zhí)行什么動作或?qū)崿F(xiàn)功能。
ARCHITECTURE
結構體名
Of實體名
IsBegin
描述語句;
End
結構體名;使用格式:第14頁/共200頁在Max+plusⅡ系統(tǒng)中有4個庫能支持VHDL語言,它們分別是Std庫、IEEE庫、Altera庫和Lpm庫。Std庫和IEEE庫提供基本的邏輯運算函數(shù)及數(shù)據(jù)類型轉換函數(shù)等。IEEE庫中的程序包std_logic_1164定義了std_logic和std_logic_vector等數(shù)據(jù)類型。第15頁/共200頁舉例:設計一個與門電路邏輯符號真值表第16頁/共200頁LibraryIEEE;Usestd.standard.all;Entityand2isPort(A:
inbit;
B:
inbit;
Y:outbit);Endand2;
--首先定義輸入輸出端口名字,模式(Mode),信號類型--注意最后語句的分號在括號外實體定義:第17頁/共200頁ArchitectureNaofand2isBeginY<=’0’whena=’0’andB=‘0’else’0’whenA=’1’andB=‘0’else’0’whenA=’0’andB=‘1’else‘1’;EndNa結構體定義:端口模式有以下幾種類型:IN;OUT;INOUT;BUFFER。第18頁/共200頁ArchitectureNbofand2isBeginc<=’1’whena=’1’andb=‘1’else
‘0’;EndNb;以上結構體表達何種電路?一個實體可以有幾個結構體,即結構體的定義可以有不同的形式結論:第19頁/共200頁1-2軟件操作—Max+plusⅡ的操作
1-2-1建立和編寫一個VHDL語言的工程文件1-2-2VHDL程序的編譯
1-2-3VHDL語言程序的仿真
1-2-4芯片的時序分析1-2-5安排芯片腳位
第20頁/共200頁1-2軟件操作—Max+plusⅡ的操作
1.Max+plusⅡ開發(fā)工具是美國Altera公司自行設計的一種軟件工具,其全稱為MultipleArrayMatrixandProgrammableLogicUserSystem。它具有原理圖輸入和文本輸入(采用硬件描述語言)兩種輸入手段,利用該工具所配備的編輯、編譯、仿真、綜合、芯片編程等功能,將設計電路圖或電路描述程序變成基本的邏輯單元寫入到可編程的芯片中(如FPGA芯片),作成ASIC芯片。它是EDA設計中不可缺少的一種工具。2.軟件安裝第21頁/共200頁我們通過范例介紹:利用Max+plusⅡ系統(tǒng)(1)如何編寫VHDL程序(使用TextEditor);(2)如何編譯VHDL程序(使用Compiler);
(3)如何仿真驗證VHDL程序(使用WaveformEditor,Simulator);
(4)如何進行芯片的時序分析(使用TimingAnalyzer);
(5)如何安排芯片腳位(使用FloorplanEditor);(6)如何下載程序至芯片(使用Programmer)。
第22頁/共200頁1-2-1建立和編寫一個VHDL語言的工程文件
首先啟動Max+plusⅡ系統(tǒng),啟動后系統(tǒng)進入主菜單畫面,在主菜單上有5個選項,分別是:Max+plusⅡ、File、Assign、Options和Help。(1)打開文本編輯器;用鼠標點擊File選項,點擊子菜單中的
New選項,接著屏幕會出現(xiàn)New的對話框。在對話框內(nèi)有4
種編輯方式:圖形編輯、符號編輯、文本編輯和波形編輯。
VHDL文件屬于文本,那么應該選擇文本編輯方式,點擊
OK按鈕,屏幕上將出現(xiàn)一個無名的編輯窗口,則系統(tǒng)進入
文本編輯狀態(tài)。第23頁/共200頁(2)在編輯窗口中進行編輯輸入,輸入相應的描述語句。
(3)存盤。(a我們編輯的VHDL文件擴展名為vhd;b保存的文
件名必須和所定義的實體名相同。c文件存盤的目錄不應是
根目錄或桌面,建議存放在Max2work或Maxplus2目錄,或
其子目錄。)以與門的設計為例講述具體過程
第24頁/共200頁1-2-2VHDL程序的編譯
(1)若文件沒有打開,需首先打開要編譯的VHDL文件;
(2)將目前的文件設置成工程文件;點擊File選項,光標移到子菜單的
Project項停留幾秒鐘,屏幕上會出現(xiàn)下一級菜單,點擊SetProjecttoCurrentFile(3)打開編譯器;點擊主菜單MAX+plusⅡ/Compiler選項,屏幕上就出現(xiàn)編譯
對話框。(4)開始編譯;完成了上述編譯前的準備及必要的設置工作,點擊編譯對話框
中的Start按鈕,編譯即開始。
以與門的設計為例講述具體過程
第25頁/共200頁1-2-3VHDL語言程序的仿真
仿真是為了驗證我們所編寫的VHDL程序的功能是否正確。
(1)首先生成仿真波形文件
(a)打開波形編輯器;點擊主菜單的MAX+plusⅡ/WaveformEditor選項,就可在屏幕上顯示波形編輯器窗口。在未輸入信號名以前,整個窗口是空白的。(b)確定仿真持續(xù)時間(File/EndTime)。
(c)選則輸入輸出端口名;
(d)編輯輸入信號波形;
(e)信號波形編輯完成后,需存盤為仿真使用,文件名采取默認方式即可。
第26頁/共200頁(2)打開仿真器;點擊主菜單MAX+plusⅡ\Simulator項,此時彈出Simulator
對話框。點擊對話框的Start按鈕,仿真即開始。在仿真結束后打開仿真波
形文件(點擊右下角的OpenSCF按鈕)即可以顯示仿真結果。(以與門的設計為例講述具體過程
)第27頁/共200頁1-2-4芯片的時序分析仿真結果從波形上來看,很難給出定量的信號延遲關系,這一點時序分析卻能直觀地用表來進行顯示。(1)選擇要下載的器件型號;
(2)需要再編譯一次。
(點擊主菜單的Assign/Device項得到Device對話框)(3)打開時序仿真器;
(點擊TimingAnalyzer選項
)(4)最后點擊Start按鈕后,時序分析器開始啟動。
(以與門的設計為例講述具體過程
)第28頁/共200頁1-2-5安排芯片腳位
為了將程序下載到芯片,需安排芯片腳位。
(1)打開芯片腳位設置器;
(MAX+plusⅡ/FloorplanEditor)(2)將實體定義的端口名字和下載芯片的管腳進行具體對應;
(3)最后再進行一次編譯。
教學演示片第29頁/共200頁第二章VHDL語言要素
§2.1VHDL語言規(guī)則數(shù)字型文字、字符串文字、標識符、下標名、段名第30頁/共200頁§2-2數(shù)據(jù)類型
數(shù)據(jù)類型分類:邏輯信號類型和數(shù)值信號類型。
§2-2-1邏輯數(shù)據(jù)類型
(1)布爾代數(shù)(Boolean)型
定義位置:在std庫的standard程序包中進行定義。
信號形式:FALSE,TRUE
(2)位(Bit)
定義位置:在std庫的standard程序包中進行定義。
信號形式:0,1
(低電位,高電位)第31頁/共200頁編碼器:輸入信號輸出信號第32頁/共200頁第33頁/共200頁(3)位數(shù)組類型(Bit_Vector)
定義位置:在std庫的standard程序包中進行定義。
例:SignalA:bit_vector(0to7);
SignalB:bit_vector(2downto0);
輸入信號輸出信號第34頁/共200頁(4)標準邏輯型(Std_Logic)
定義位置:在IEEE庫的std_logic_1164程序包中進行定義
第35頁/共200頁可以看出,這個“標準邏輯”信號定義,比“位即bit”信號對于數(shù)字邏輯電路的邏輯特性描述更完整、更真實。所以在VHDL的程序里,對于邏輯信號的定義,通常都是采用這個“標準邏輯”信號形式。使用這類數(shù)據(jù)信號,必須包含下面兩條聲明語句:
LibraryIEEE;UseIEEE.std_logic_1164.all;
(5)標準邏輯數(shù)組類型(Std_Logic_vector)
定義位置:在ieee庫的std_logic_1164程序包中進行定義。
Bit_Vector與Std_Logic_vector的區(qū)別在于數(shù)組的每一位前者為BIT型(0,1)后者為Std_Logic型第36頁/共200頁§2-2-2數(shù)值數(shù)據(jù)類型(1)整數(shù)(Integer)定義位置:在std庫的standard程序包中進行定義。即數(shù)值范圍為-231~231。(2)無符號(Unsigned)和有符號(Signed)類型定義位置:有符號(Signed)和無符號(Unsigned)邏輯信號定義在庫IEEE的程序包std_logic_arith中。第37頁/共200頁有符號類型數(shù)據(jù)代表有符號數(shù)值,即可以是正數(shù),0,負數(shù);編譯器將有符號數(shù)類型作為一個補碼的二進制數(shù),最左邊的位為符號位。無符號類型數(shù)據(jù)代表無符號數(shù)值,即代表0或正數(shù);最左邊的位為最高位。如:Unsigned(“0110”)代表;+6+10Unsigned(“1010”)代表如:signed(“0110”)代表+6;signed(“1010”)代表-2。第38頁/共200頁libraryieee;useieee.std_logic_1164.all;
useieee.std_logic_arith.all;entity
data
isport(a,b:inunsigned(3downto0);--相應改為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頁/共200頁當定義成無符號數(shù)據(jù)類型時,若a<=”1000”,b=’0001’,即a=8,b=1則結果另外:還有其他positive,natural,real數(shù)據(jù)類型以及用戶自定義數(shù)據(jù)類型等。這些數(shù)據(jù)類型各有特點,以后用到再行講解c=’1’。c=’0’;當定義成有符號數(shù)據(jù)類型時,若a<=”1000”,b=’0001’,a=-8,b=1,則結果第40頁/共200頁§2.3VHDL數(shù)據(jù)對象數(shù)據(jù)對象(DataObjects):
凡是可以被賦予一個值的對象稱為數(shù)據(jù)對象,數(shù)據(jù)對象用于傳遞信號。例:
數(shù)據(jù)對象名
數(shù)據(jù)對象類型
數(shù)據(jù)對象值的類型
第41頁/共200頁2-3-1信號信號數(shù)據(jù)對象,代表電路內(nèi)部傳輸線路線路,其在元件之間起互連作用
信號數(shù)據(jù)對象的定義格式為:
Signal信號名:數(shù)據(jù)類型[:=設定值];
如:
Signal
A:Std_logic_vector(3Downto0):=“0000”;
注意:由于MaxplusII系統(tǒng)往往會忽略信號對象定義時所賦初始值,建議在結構體中用賦值語句完成對信號的賦值。信號賦值語句的語法格式為:
目標信號名<=表達式(設定值);A
<=
“1010”第42頁/共200頁2-3-2變量
它用于對中間數(shù)據(jù)的臨時存儲,并不一定代表電路的某一組件。
變量數(shù)據(jù)對象的定義格式為:Variable變量名:數(shù)據(jù)類型[:=設定值];
如:Variablea:integer:=0;變量賦值語句的語法格式為:目標變量名:=表達式(設定值);
注意:由于MAXPLUSII系統(tǒng)往往會忽略變量對象定義時所賦初始值,建議在結構體中用賦值語句完成對變量的賦值。如:a:=b+c;第43頁/共200頁常數(shù)的定義格式為:Constant常數(shù)名:數(shù)據(jù)類型
:=表達式;
如:ConstantD1:Integer:=3;
ConstantD2:Std_Logic_Vector(D1Downto0):=”0000”;注意:常數(shù)數(shù)據(jù)對象定義的同時進行賦值。賦值符號為
“:=”
2-3-3常數(shù)第44頁/共200頁2-3-4信號、變量、常數(shù)對比一、定義SignalA:std_logic;VariableA:std_logic_vector(7downto0);ConstantA:integer:=6;二、賦值及賦值時刻A
<=
“1010”;(延時)A:=“1010”;(立刻)三、定義區(qū)域信號:實體、結構體、程序包變量:進程、子程序常數(shù):實體、結構體、程序包、塊、進程、子程序第45頁/共200頁四、適用范圍信號:實體、結構體、程序包變量:定義了變量的進程、子程序的順序語句中常數(shù):視其定義的位置而定若常數(shù)定義在實體中,適用范圍是實體所對應的有結構體。若常數(shù)定義在結構體中,適用范圍就是本結構體。第46頁/共200頁執(zhí)行結果為:
x<=cxorb,y<=cxorb
第47頁/共200頁執(zhí)行結果為:
x<=cxora,y<=cxorb
第48頁/共200頁練習:1.定義信號A1,A2,A3,A4,A5,A6,A7,A8其中每一位信號均為標準邏輯型2.定義信號B,其數(shù)據(jù)類型為標準邏輯型。3.定義信號C,數(shù)據(jù)類型為整數(shù)型。4.給A、B賦值,其中A的值為11001101;B的值為0。第49頁/共200頁LibraryIEEEUseieee.std_logic_1164.allSignalA:std_logic_vector(1to8)SignalB:std_logicSignalC:integerLibraryStdUsestd.standard.allA<=“11001101”B<=‘0’第50頁/共200頁2.4VHDL操作符VHDL操作符:邏輯、算術、符號、關系操作符。2.4.1邏輯運算符一、分類及功能And(與),Or(或),Not(非),Nand(與非),Nor(或非),Xor(異或),Xnor(同或)。第51頁/共200頁二.用法1.操作數(shù)的數(shù)據(jù)類型必須符合操作符的要求能進行邏輯運算的數(shù)據(jù)類型:bit、bit_vector、booleanstd_logic、std_logic_vector例Signala,b,y:std_logic;Signalc,d,z:integer;y<=aandb;z<=candd;第52頁/共200頁2.表達式中有多個運算符時一般要加括號表達式中有多個運算符時一般要加括號,但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.運算符兩側的操作數(shù)要對稱d<=(enorf)norg;×第53頁/共200頁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頁/共200頁2.4.2關系運算符=(等于),/=(不等于),<(小于),>(大于),<=(小于等于,和信號的賦值符號相同),>=(大于等于)。注1.等于和不等于的操作對象可以是任何數(shù)據(jù)類型構成的操作數(shù)。2.其它關系運算符對數(shù)據(jù)類型有一定的限制。(整數(shù),枚舉型)3.=、/=在實現(xiàn)硬件電路時比其它的關系運算符對芯片的利用率要高第55頁/共200頁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;以上兩程序最終所實現(xiàn)的硬件電路見課本P78ENDmy1;第56頁/共200頁2.4.3算術運算符一、分類及功能求和運算符、求積運算符、符號運算符、混合運算符、移位運算符二.運用1.求和運算符VHDL中的求和運算符包括加減運算和并置運算,操作數(shù)的數(shù)據(jù)類型為整型。例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頁/共200頁2.移位運算符移位運算所對應的數(shù)據(jù)類型為一維數(shù)組,其中的元素維bit、boolean例:Variablea1:std_logic_vector(3to0);a1:=“1011”;a1SLL1;a1=0110a1SLL2;a1=1100a1ROL1;a1=01113.其它略第58頁/共200頁二、應用現(xiàn)在VHDL已成功地應用于ASIC自動設計的模擬驗證和綜合優(yōu)化等方面。VHDL是以文字的方式設計電路,在應用上,目前VHDL語言還僅限于數(shù)字電路的開發(fā)和設計。三、VHDL和電路圖設計方式比較VHDL與電路圖設計電路的方式不同,主要有如下幾方面的優(yōu)越性:(1)易于修改;(2)設計能力更強;(3)VHDL語言很方便:獨立于器件設計;相同的程序代碼可以用于不同廠家生產(chǎn)的器件。第59頁/共200頁VHDL操作符復習回顧一、邏輯運算符And(與),Or(或),Not(非),Nand(與非),Nor(或非),Xor(異或),Xnor(同或)。能進行邏輯運算的數(shù)據(jù)類型:bit、bit_vector、booleanstd_logic、std_logic_vector第60頁/共200頁二、關系運算符=(等于),/=(不等于),<(小于),>(大于),<=(小于等于,和信號的賦值符號相同),>=(大于等于)。1.等于和不等于的操作對象可以是任何數(shù)據(jù)類型構成的操作數(shù)。2.其它關系運算符對數(shù)據(jù)類型有一定的限制。(整數(shù),枚舉型)三、算術運算符求和運算符、求積運算符、符號運算符、混合運算符、移位運算符VHDL中的求和運算符包括加減運算和并置運算,操作數(shù)的數(shù)據(jù)類型
為整型。第61頁/共200頁Signala:std_logic_vector(4downto0);Signalb:std_logic_vector(2downto0);Signalc:std_logic_vector(1downto0);bca<=bc第62頁/共200頁VariableA:std_logic_vector(6downto0);A:=“10110001”;ASLL1;AROL1;第63頁/共200頁
第三章VHDL順序語句一、順序語句概念順序語句的特點是,每一條順序語句的執(zhí)行順序是與它們的書寫順序基本一致的。順序語句只能出現(xiàn)在進程(Process)和子程序中,子程序包括函數(shù)(Function)和過程(Procedure)。二、種類
進程語句賦值語句流程控制語句等待語句
子程序調(diào)用語句返回語句空操作語句第64頁/共200頁3.1進程語句(Process語句)0000輸入信號發(fā)生變化時,電路啟動進行計算第65頁/共200頁進程語句是由順序語句構成的,通過信號與結構體其余部分進行信息交流,在進程中有一個敏感信號列表,表中列出的任何信號的改變都將啟動進程,執(zhí)行進程內(nèi)相應的順序語句。進程語句是將并行語句和順序語句區(qū)分開來的標志之一。語法格式:
[進程標號:]Process[(敏感信號列表)]
[Variabledeclarations]--變量聲明
Begin
順序語句;
EndProcess[Processlabel];第66頁/共200頁Process(sel,x1,x2)Beginf<=x1;Ifsel=1thenf<=x2;endif;Endprocess;Process(sel,x1,x2)BeginIfsel=1thenf<=x2;endif;f<=x1;Endprocess;在第二個進程中,無論什么情況,f=x1,而在第一個進程中,只有信號sel/=1時,f=x1。因此,語句的排列順序很重要,會影響信號的輸出結果。區(qū)別第67頁/共200頁3.2賦值語句賦值語句包括變量賦值語句和信號賦值語句,前者的賦值是立刻發(fā)生的,后者的賦值發(fā)生在一個進程結束的時刻,并延時進行。變量賦值目標:=賦值源信號賦值目標<=賦值源在同一進程中,同一信號賦值目標有多個賦值源時,信號賦值目標獲得的是最后一個賦值源的值,其前面相同的賦值目標不做任何變化。注:3.2.1信號和變量賦值第68頁/共200頁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頁/共200頁3.2.2信號和變量賦值舉例1.標識符賦值目標Variablea,b:std_logic;Signalc:std_logic_vector(1to4);a:=‘1’;b:=‘0’;c<=“1100”;c(3)<=‘1’;注:一位值用單引號,多位值用雙引號第70頁/共200頁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;位置關聯(lián)第71頁/共200頁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);名稱關聯(lián)結果:h的值為1010第72頁/共200頁3.3流程控制語句3.3.1IF語句語法格式:IfexpressionThenstatement;ElsifexpressionThenstatement;ElsifThenstatement;elsestatement;Endif;根據(jù)條件進行相應賦值操作第73頁/共200頁例1:Process(A)BeginIfA=”00”thenf<=D0;elsifA=”01”thenf<=D1;elsifA=”10”thenf<=D2;elsef<=D3;endif;endprocess;第74頁/共200頁一、第一種IF語句IF條件句THEN
順序語句ENDIF例題語句格式IF(a>b)THENout<=‘1’;ENDIF;第75頁/共200頁二、第二種IF語句IF條件句THEN
順序語句ELSE
順序語句ENDIF語句格式例題IF(a>b)THENout<=‘1’;ELSEout<=‘0’;ENDIF;第76頁/共200頁三、第三種IF語句語法格式:If條件句
Then順序語句;Elsif條件句
Then順序語句;Elsif條件語句Then順序語句;else順序語句;Endif;語句格式第77頁/共200頁例題1:Signala,b,c,p1,p2,z:bit;IF(p1=‘1’)THENz<=a;ELSIF(p2=‘0’)THENz<=b;ELSEz<=c;ENDIF;?選擇方式cbaa畫線部分意思:ELSIF(p1=‘0’andp2=‘0’)注第78頁/共200頁例題2:8線-3線優(yōu)先編碼器第79頁/共200頁LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(I:INSTD_LOGIC_VECTOR(0TO7)Y:OUTSTD_LOGIC_VECTOR(1TO3));ENDcoder;實體設計功能:設計元件外觀第80頁/共200頁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;結構體設計功能:描述輸入和輸出之間的邏輯關系ENDIF;第81頁/共200頁練習題:設計一個3線-8線譯碼器元件外觀輸入輸出邏輯關系第82頁/共200頁LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(A:INSTD_LOGIC_VECTOR(1TO3)Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDcoder;實體設計功能:設計元件外觀第83頁/共200頁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;結構體設計功能:描述輸入和輸出之間的邏輯關系ENDIF;第84頁/共200頁3.3.2Case-When語句作用:根據(jù)條件進行相應的賦值操作。語法格式:Case表達式
Is
When選擇值
=>順序語句
When選擇值
=>順序語句
…Endcase;CASE語句根據(jù)滿足的條件直接選擇多項順序語句的一項執(zhí)行=>不是信號賦值符號,其意思等價于“THEN”注第85頁/共200頁例題1:用CASE語句設計四選一數(shù)據(jù)選擇器第86頁/共200頁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頁/共200頁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頁/共200頁例題2:SIGNALSEL:INTEGERRANGE0TO15;……CASESELISWHEN0=>Z1<=‘1’;WHEN13=>Z2<=‘1’;WHEN4TO72=>Z3<=‘1’;WHENOTHERS=>Z4<=‘1’;IF與CASE比較IF語句中條件句之間是相與的關系,
CASE語句中條件句之間是相或的關系。2.CASE條件語句必須將所有情況列出而IF則不必。3.IF語句可實現(xiàn)優(yōu)先級,CASE語句則不可以。第89頁/共200頁課堂練習題:試設計一個4位奇偶校驗器第90頁/共200頁數(shù)碼顯示一、數(shù)碼顯示器(一)發(fā)光二極管發(fā)光二極管特性:當加正向電壓時,二極管導通并發(fā)光.利用這了一特性可制成共陰極和共陽極七段數(shù)碼顯示器。第91頁/共200頁(二)七段數(shù)碼顯示器1.工作原理共陰極接法第92頁/共200頁2.顯示代碼概念9的顯示代碼第93頁/共200頁輔助實驗第94頁/共200頁顯示譯碼器顯示譯碼器功能第95頁/共200頁其真值表如下所示:輸入代碼輸出顯示代碼第96頁/共200頁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頁/共200頁3.3.3LOOP語句一、單個LOOP語句[LOOP標號:]LOOP
順序語句ENDLOOP[LOOP標號];例:L2:LOOPa:=a+1;
EXITL2WHENa>10;ENDLOOPL2;第98頁/共200頁二、FOR_LOOP語句[LOOP標號:]FOR循環(huán)變量
IN循環(huán)次數(shù)范圍LOOP
順序語句;
ENDLOOP[LOOP標號];例:試設計一個八位奇偶校驗器
注:
0XORa=a第99頁/共200頁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頁/共200頁三.WHILE_LOOP語句[標號:]WHILE循環(huán)控制變量LOOP
順序語句
ENDLOOP[標號];例1:Shift1:PROCESS(inputx)
VARIABLEn:POSITIVE:=1BEGINL1:WHILEn<8LOOPoutputx(n)<=input(n+8);
n:=n+1;ENDLOOPL1;ENDPROCESSShift1;第101頁/共200頁3.3.4NEXT與EXIT語句NEXT;NEXTLOOP標號;NEXTLOOP標號WHEN條件表達式;EXIT;EXITLOOP標號;EXITLOOP標號WHEN條件表達式;循環(huán)語句轉向控制第102頁/共200頁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語句第103頁/共200頁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語句第104頁/共200頁3.4子程序及其調(diào)用子程序概述函數(shù)(Function)過程(Procedure)子程序調(diào)用3.5返回語句(Return)3.6空操作語句(NULL)3.7其它語句第105頁/共200頁3.4.1子程序概述子程序是一個VHDL程序模塊,由順序語句構成,用于完成重復性的計算工作,子程序有兩種類型,即過程(Procedure)和函數(shù)(Function)。子程序的使用方法只能通過子程序調(diào)用及與子程序的界面端口進行通信。每調(diào)用一次子程序都意味著增加了一個硬件電路模塊,因此,在實際使用時,要密切關注和嚴格控制子程序的調(diào)用次數(shù)。第106頁/共200頁3.4.2函數(shù)(Function)--函數(shù)首Function函數(shù)名(參數(shù)表)Return數(shù)據(jù)類型Function函數(shù)名(參數(shù)表)Return數(shù)據(jù)類型IS
說明部分
Begin
順序語句
ENDFunction函數(shù)名;--函數(shù)體注:參數(shù)表中參量可以是變量、信號、常數(shù)(默認)
無需定義參數(shù)的方向(默認為“輸入”)第107頁/共200頁例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頁/共200頁例2Functiontrans(value:bit_vector(0to3))Returnbit_vectorIsBeginCasevalueISWhen“0000”=>Return“1100”;When“0101”=>Return“1100”;WhenOthers=>Return“1111”;EndCase;EndFunctiontrans;第109頁/共200頁3.4.3過程(Procedure)--過程首Procedure過程名(參數(shù)表)Procedure過程名(參數(shù)表)IS
說明部分
Begin
順序語句
ENDProcedure過程名;--過程體注:參數(shù)表中參量可以時變量、信號、常數(shù)(默認)參數(shù)的方向可以是IN、OUT、INOUT第110頁/共200頁例Procedureprg1(variablevalue:inoutbit_vector(0to3))BeginCasevalueISWhen“0000”=>Return“1100”;When“0101”=>Return“0000”;WhenOthers=>Return“1111”;EndCase;EndProcedurePrg1;第111頁/共200頁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頁/共200頁3.4.5函數(shù)與過程對比過程可以返回多值,函數(shù)只能返回一個值。過程的參數(shù)為IN、OUT、INOUT
函數(shù)的參數(shù)為IN(默認)。函數(shù)和過程均能產(chǎn)生新的電路模塊。第113頁/共200頁3.5返回語句(Return)格式:Return;Return表達式;只能用于FunctionProcedurers(signals,r:instd_logic;signalq,nq:inoutstd_logic)isBeginIf(s=‘1’andr=‘1’)thenReturnElseq<=sandnqNq<=sandqEndif;Endprocedurers;例題1:第114頁/共200頁例題2:Functionopt(a,b,opr:std_logic)returnstd_logicisBeginIf(opr=‘1’)thenReturn(aandb);ElseReturn(aorb);Endif;EndFunctionopt;Return語句的作用就是結束當前運行的子程序,所不同的是過程無條件返回,并且不返回任何值。函數(shù)必須返回一個值第115頁/共200頁3.6空操作語句(NULL)例句:CASEOPCODEISWHEN“001”=>tmp:=regaandregb;WHEN“101”=>tmp:=regaorregb;WHEN“110”=>tmp:=NOTrega;WHENOTHERS=>NULL;ENDCASE;注:NULL語句有時會造成不必要的寄存器第116頁/共200頁3.7其它語句clock’EVENTandclock=‘1’;功能:clock’EVENT就是對信號在當前的一個極小的時間段內(nèi)電平是否發(fā)生變化進行檢測。例1:Process(clock)If(clock’EVENTandclock=‘1’)thenQ<=DATAEndIf;EndProcess;第117頁/共200頁例2:Process(clock)If(clock’EVENTandclock=‘0’)thenQ<=DATAEndIf;EndProcess;例3:Process(clock)Ifrising_edge(clock)thenQ<=DATAEndIf;EndProcess;與例1等價第118頁/共200頁第四章VHDL并行語句4.1并行語句概述4.2并行信號賦值語句4.3進程語句(process)第119頁/共200頁4.1并行語句概述并行語句一般處于進程(PROCESS)的外部。所有并行語句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無關。
一、并行語句特點
a.所有語句的執(zhí)行是并行的;b.每條語句的執(zhí)行和其所在的位置無關;c.并行語句的輸出僅僅依賴于輸入,沒有其它的限制條件
第120頁/共200頁二、基本的并行語句(1)直接賦值語句:<=賦值運算符(2)進程(Process)語句(3)條件式信號設置語句:When-Else(4)選擇式信號設置語句:With-Select-When(5)塊(Block)語句(6)元件(Component)例化語句(7)For-Generate語句第121頁/共200頁4.2并行信號賦值語句簡單信號賦值語句條件信號賦值語句選擇信號賦值語句第122頁/共200頁一、直接賦值語句:<=賦值運算符作用:直接對目標對象進行賦值操作。語法格式:Signal_name<=expression;如:SignalA,B:std_logic_vector(7downto0);
A<=”0000000”;B<=”1000000”;我們也可以這樣賦值:
A<=(others=>’0’);
信號A的每一位的值都為0。
B<=(‘1’,others=>’0’);
信號B的第一位為1,其它位的值為0。
第123頁/共200頁下面舉一個應用示例,如下面電路:
用VHDL對電路的描述如下:
第124頁/共200頁libraryieee;useieee.std_logic_1164.all;Entity
exam1isport(a,b:instd_logic;c,d:outstd_logic);Endexam1;Architecture
m1ofexam1isBeginc<=aandb;d<=aorb;ENDm1;并行語句的輸出僅僅依賴于輸入,沒有其它的限制條件。每條語句的執(zhí)行和其所在的位置無關。
第125頁/共200頁二、條件式信號設置語句:When-Else語法格式為:
賦值目標<=表達式1When賦值條件
Else
表達式2When賦值條件
Else
…
表達式N;在結構體中的條件賦值語句的功能與在進程中的IF語句相同,在執(zhí)行條件信號語句時,每一賦值條件是按書寫的先后關系測定的。第126頁/共200頁我們曾舉過一個二輸入的與門電路的例子:
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頁/共200頁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頁/共200頁三、選
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年VB考試前準備及試題及答案
- 軟件開發(fā)員考試必知試題及答案
- 追求卓越的心態(tài)與方法2024年高考作文試題及答案
- 盈利能力與風險管理策略的有效結合試題及答案
- 信息處理技術員考試基礎知識概述及答案
- 大數(shù)據(jù)技術與AI的結合應用試題及答案
- 氣體委托充裝協(xié)議
- 行政法學實踐案例及試題研究
- 【黃岡】2025年湖北黃岡市團風縣事業(yè)單位統(tǒng)一公開招聘工作人員35人筆試歷年典型考題及考點剖析附帶答案詳解
- 班級實踐活動總結與分享計劃
- 三方水泥合同協(xié)議
- 采礦管理協(xié)議書范本
- 廣西壯族自治區(qū)2025年4月高三畢業(yè)班診斷學考試數(shù)學試卷及答案(廣西三模)
- 安徽中醫(yī)藥大學專職輔導員招聘筆試真題2024
- 研學部管理制度
- 2025年03月山東省環(huán)科院及權屬企業(yè)校園公開招聘筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2024北京海淀區(qū)三年級(下)期末語文試題及答案
- 帶電粒子在復合場中的運動教學設計
- 貴州省婦幼健康服務體系與能力提升實施方案
- 運維經(jīng)理培訓
- 事業(yè)單位停薪留職協(xié)議
評論
0/150
提交評論