VHDL的基本語法市公開課一等獎省賽課微課金獎課件_第1頁
VHDL的基本語法市公開課一等獎省賽課微課金獎課件_第2頁
VHDL的基本語法市公開課一等獎省賽課微課金獎課件_第3頁
VHDL的基本語法市公開課一等獎省賽課微課金獎課件_第4頁
VHDL的基本語法市公開課一等獎省賽課微課金獎課件_第5頁
已閱讀5頁,還剩122頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VHDL培訓教程歡迎參加VHDL培訓1/127VHDL培訓教程第一講、VHDL介紹及其結構第二講、VHDL中對象、操作符、數據類型第三講、VHDL中控制語句及模塊第四講、狀態機設計2/127第一講、VHDL介紹及其結構經過本課學習您能夠了解以下幾點1、VHDL基本概念2、VHDL基本結構3、VHDL設計初步3/127VHDL-VHSICHardwareDecriptionLanguage

其中VHSIC-VeryHighSpeedIntegratedCircuit電子設計自動化關鍵技術之一是要求用形式化方法來描述硬件系統。VHDL適應了這種要求。什么是VHDL4/127VHDL和VerilogHDLVerilogHDL:另一個硬件描述語言,由Verilog企業開發,1995年成為IEEE標準。優點:簡單、易學易用缺點:功效不如VHDL強大,仿真工具少VHDL:

1987年成為IEEE標準優點:功效強大、通用性強。缺點:難學5/127VHDL發展歷史起源于八十年代,由美國國防部開發兩個標準:1、1987年IEEE1076(VHDL87)

2、1993年進行了修正(VHDL93)6/127VHDL在電子系統設計中應用電子系統設計模塊7/127VHDL在電子系統設計中應用電子系統設計描述等級1、行為級2、RTL級(Registertransferlevel)3、邏輯門級4、版圖級用VHDL能夠描述以上四個等級8/127VHDL在電子系統設計中應用系統設計描述等級-制版級9/127VHDL在電子系統設計中應用系統設計描述等級-邏輯門級10/127VHDL在電子系統設計中應用系統設計描述等級-RTL級11/127VHDL在電子系統設計中應用系統設計描述等級-行為級12/127怎樣使用VHDL描述硬件實體

Entity(實體)Architecture1(結構體)ArchitectureN

process(進程結構)

block(塊結構)

subprograms(子程序)

procedure(過程)

function(函數)13/127libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitycountisport(clock,reset:inSTD_LOGIC;dataout:outSTD_LOGIC_VECTOR(3downto0));endcount;architecturebehaviorlofcountissignaldatabuffer:STD_LOGIC_VECTOR(3downto0);begindataout<=databuffer;

process(clock,reset)

beginif(reset='1')thendatabuffer<="0000";elsif(clock'eventandclock='1')thenifdatabuffer="1000"thendatabuffer<="0000";elsedatabuffer<=databuffer+'1';endif;endif;

endprocess;endbehavioral;14/127VHDL結構關鍵點1、ENTITY(實體)格式:

Entity實體名IS[類屬參數說明][端口說明]EndEntity;其中端口說明格式為:

PORT(端口名1,端口名N:方向:類型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGE

15/127VHDL結構關鍵點注意簡單地說

In

不能夠出現在<=或:=左邊

out不能夠出現在<=或:=右邊

buffer能夠出現在<=或:=兩邊In信號只能被引用,不能被賦值out信號只能被賦值,不能被引用buffer信號能夠被引用,也能夠被賦值16/127VHDL結構關鍵點例子(HalfAdd)

其內部結構將由Architecture來描述17/127VHDL結構關鍵點2、Arcthitecture(結構體)

格式:

Arcthitecture

結構體名of

實體名is

[定義語句]內部信號、常數、元件、數據類型、函數等定義

begin[并行處理語句和block、process、function、procedure]

end結構體名;

18/127VHDL結構關鍵點例子(HalfAdd)19/127VHDL結構關鍵點例子(FullAdd)(學習怎樣調用現有模塊)

20/127VHDL結構關鍵點實例(FullAdd)-entity

21/127VHDL結構關鍵點實例(FullAdd)-architecture22/12723/127VHDL中設計單元

除了entity(實體)和architecture(結構體)外還有另外三個能夠獨立進行編譯設計單元Package(包集合)屬于庫結構一個層次,存放信號定義、常數定義、數據類型、元件語句、函數定義和過程定義。PackageBody含有獨立對端口(port)packageconfiguration(配置)描述層與層之間連接關系以及實體與結構體之間關系。24/127VHDL中設計單元VHDL中設計單元(能夠獨立編譯)25/127Library庫概念STD庫--VHDL標準庫IEEE庫--VHDL標準庫擴展面向ASIC庫--不一樣工藝不一樣企業自定義庫普通用戶自己庫庫:數據集合。內含各類包定義、實體、結構體等26/127Library庫概念用戶自己庫當您VHDL文件被編譯后,編譯結果儲存在特定目錄下,這個目錄邏輯名稱即Library,此目錄下內容亦即是這個Library內容。27/127Package包概念Package(包)28/127VHDL中結構關系結構關系29/127VHDL介紹及其結構本講結束下一講:VHDL中對象、操作符、數據類型30/127第二講、VHDL對象、操作符、數據類型經過本課學習您能夠了解以下幾點1、VHDL基本類型2、怎樣在VHDL中定義類型3、VHDL信號定義4、怎樣在VHDL中對信號賦值5、VHDL中操作符31/127VHDL對象、操作符、數據類型對象object

對客觀實體抽象和概括VHDL中對象有:1、Constant(常量)在程序中不能夠被賦值

2、Variable(變量)在程序中能夠被賦值(用“:=”),賦值后馬上改變為新值。3、Signal(信號)在程序中能夠被賦值(用“<=”),但不馬上更新,當進程掛起后,才開始更新。

32/127VHDL對象、操作符、數據類型VHDL中對象使用:

variable

x,y:integer;--定義了整數型變量對象x,y

constantVcc:real;--定義了實數型常量對象Vcc

signalclk,reset:bit;--定義了位類型信號對象clk,reset33/127VHDL中對象使用注意1、variable只能定義在process和subprogram(包含function和procedure)中,不可定以在其外部。2、signal不能定義在process和subprogram(包含function和procedure)中,只可定以在其外部。34/127VHDL對象、操作符、數據類型對象屬性

類似于其它面向對象編程語言如VB、VC、DELPHI

使用方法格式:對象’屬性例子:clk’event--表明信號clkevent屬性

慣用屬性:

Signal對象慣用屬性有:

event:返回boolean值,信號發生改變時返回truelast_value:返回信號發生此次改變前值

last_event:返回上一次信號發生改變到現在改變間隔時間35/127VHDL對象、操作符、數據類型Signal對象慣用屬性有:接上頁delayed[(時延值)]:使信號產生固定時間延時并返回stable[(時延值)]:返回boolean,信號在要求時間內沒有改變返回truetransaction:返回bit類型,信號每發生一次改變,返回值翻轉一次例子:A<=B’delayed(10ns);--B延時10ns后賦給A;

if(B’Stable(10ns));--判斷B在10ns中是否發生改變36/127VHDL對象、操作符、數據類型信號event和last_value屬性經慣用來確定信號邊緣

屬性應用比如:判斷clk上升沿if((clk’event)and(clk=‘1’)and(clk’last_value=‘0’))then判斷clk下降沿if((clk’event)and(clk=‘0’)and(clk’last_value=‘1’))then37/127VHDL基本類型1、bit(位):

`0`和`1`2、bit-Vector(位矢量):比如:``00110``3、Boolean“ture”和“false”4、time

比如:1us、100ms,3s5、character

比如:‘a’、’n’、’1’、’0’6、string

比如:“sdfsd”、”mydesign”7、integer32位比如:1、234、-21342348、real范圍-1.0E38~+1.0E38

比如:1.0、2.834、3.14、0.038/127VHDL基本類型9、natural

自然數和positive

正整數10、senveritylevel(常和assert語句配合使用)包含有:note、warning、error、failure

以上十種類型是VHDL中標準類型,在編程中能夠直接使用。使用這十種以外類型,需要自行定義或指明所引用Library(庫)和Package(包)集合39/127VHDL基本類型例子一40/127VHDL基本類型和賦值例子二41/127VHDL基本類型和賦值例子三例子中信號Z有兩個驅動A和B;Z必須定義為一個新數據類型,不然Z將無法決定取值,語句視為非法。42/127VHDL基本類型和賦值例子四43/127VHDL基本類型和賦值例子五關鍵點:賦值語句中方向應和申明中方向一樣44/127VHDL基本類型和賦值連接操作符---使用&45/127VHDL基本類型和賦值集合操作---使用()46/127VHDL基本類型和賦值集合操作---采取序號47/127VHDL基本類型和賦值集合操作--采取others48/127在VHDL中定義自己類型通用格式

TYPE

類型名IS數據類型定義用戶能夠定義數據類型枚舉類型enumberated、整數型integer、實數型real、數組類型array、紀錄類型record、時間類型time、文件類型file、存取類型access49/127在VHDL中定義自己類型枚舉類型enumberated格式

type

數據類型名is

(元素,元素…...);例子

typeweekis(sun,mon,tue,thu,fri,sat);typestd_logicis(‘1’,’0’,’x’,’z’);

50/127在VHDL中定義自己類型整數類integer和實數類real格式

type

數據類型名is數據類型定義約束范圍;例子

typeweekisintegerrange1to7;typecurrentisrealrange-1E4to1E451/127在VHDL中定義自己類型數組類型array格式

type

數據類型名isarray

范圍

of元數據類型名例子

typeweekisarray(1to7)ofinteger;

typedeweekisarray(1to7)ofweek;52/127在VHDL中定義自己類型時間類型time格式

type

數據類型名is

范圍

units基本單位;

單位;

endunits53/127在VHDL中定義自己類型時間類型例子

typetimeisrange-1E18to1E18unitsus;ms=1000us;sec=1000ms;min=60sec;endunits注意:引用時間時,有編譯器要求量與單位之間應有一個空格如:1ns;不能寫為1ns;54/127在VHDL中定義自己類型紀錄類型record格式

type

數據類型名is

record

元素名:數據類型名;

元素名:數據類型名;….

endrecord;55/127在VHDL中定義自己類型紀錄類型例子typeorderisrecordid:integer;date:string;security:boolean;endrecord;引用:signalflag:boolean;signalorder1:order;order1<=(3423,”1999/07/07”,true);flag<=order1.security;

56/127IEEE1164中定義類型std_ulogic是對位(bit)類型擴展,只允許一個驅動源57/127IEEE1164中定義類型Std_logic同std_ulogic一樣有九個狀態,允許一個或多個驅動源58/127IEEE1164中定義類型Std_unlogic_vector和std_logic_vector59/127IEEE1164中定義類型Std_unlogic、std_ulogic_vectorstd_logic_vector和std_unlogic_vector類型均定義在package(包)standard_logic_1164中在使用這四種類形時應加以說明,比如:libraryieee;useieee.std_logic_1164.all;注:standard_logic_1164位于IEEE庫中60/127類型使用例子例子一(申明使用庫和包)61/127類型使用例子例子二std_ulogic和std_logic區分62/127類型使用例子練習一:下面那一個是正確363/127VHDL中操作符分類

1、邏輯操作符

2、關系操作符

3、數學運算符64/127VHDL中操作符1、邏輯操作符有:65/127VHDL中操作符邏輯操作符應用類型66/127VHDL中操作符邏輯操作符應用例子67/127VHDL中操作符2、關系運算符有68/127VHDL中操作符關系運算符應用ARRAY(數組)沒有數字概念,數組“111”不等于769/127VHDL中操作符3、數學運算符注意:上述運算符應用于integer,real,time類型,不能用于vector(假如希望用于vector,能夠使用庫IEEEstd_logic_unsigned包,它對算術運算符進行了擴展)70/127VHDL中操作符VHDL中操作符應用關鍵點

1、VHDL屬于強類型,不一樣類型之間不能進行運算和賦值,能夠進行數據類型轉換

2、vector不表示number3、array不表示number71/127VHDL中操作符本講結束下一講:VHDL中控制語句及模塊72/127第三講VHDL中控制語句及模塊經過本講您將會學到1、Block編寫2、Process編寫3、function和procedure編寫4、VHDL中流程控制語句書寫73/127VHDL中控制語句及模塊回顧第一講內容

Entity(實體)Architecture1(結構體)ArchitectureN

process(進程結構)

block(塊結構)

subprograms(子程序)

procedure(過程)

function(函數)74/127VHDL中控制語句及模塊基本概念1、并行處理(concurrent)語句執行與書寫次序無關,并行塊內語句時同時執行2、次序處理(sequential)語句執行按書寫先后次序,從前到后次序執行。這種方式和其它普通編程語言(如c,pascal)是一樣。75/127VHDL中控制語句及模塊Architecture中語句及子模塊之間是并行處理子模塊block中語句是并行處理子模塊process中語句是次序處理子模塊subprogram中function和procedure是次序處理76/127VHDL中architectureArcthitecture(結構體)格式為:(第一講)

Arcthitecture

結構體名of

實體名is

[定義語句]內部信號、常數、元件、數據類型、函數等定義

begin[并行處理語句和block、process、function、procedure]

end結構體名;

77/127Architecture中BlockBlock格式

塊名:

BLOCK[定義語句]

begin[并行處理語句concurrentstatement]

endblock

塊名78/127Architecture中Block條件Block格式

塊名:

BLOCK

[(布爾表示式)]

[定義語句]

begin[并行處理語句concurrentstatement[信號]<=

guarded[信號,延時];

endblock

塊名79/127Architecture中BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

beginqout<=guardedqin;

endblockmyblock1

myblock2:

block

beginqout<=qin;

endblock

myblock280/127Architecture中processProcess格式[進程名:]

process[(觸發信號列表)][定義語句;]

begin[串行處理語句sequentialstatement;]

endprocess81/127Architecture中processprocess例子

exp1:

process

(clk,qin)

variable:qin:bit:=‘0’;

beginqout<=qin;

endprocessexp2:

process

begin

waitonclk,qin;

qout<=qin;

endprocess82/127process例子-值更新分析:當A、B、C、D中任一信號發生改變時,進程將開始執行,當執行Z<=AandB后,Z值不會馬上改變;同理執行Z<=CandD后Z值也不會馬上改變。當執行endprocess后,Z值才開始更新,同時系統掛起開始等候敏感信號。83/127Architecture中processProcess中敏感信號列表普遍標準是:在process中,其值被引用信號應該出現在敏感信號列表中例子;二選一選擇器:A、B為輸入信號;SEL為選路信號;Z為輸出信號;84/127不符和設計要求85/127Architecture中subprogramFunction(函數)格式:

function

函數名(參數1,參數2…...)

[定義語句]

return

數據類型名

is[定義語句]

begin[次序執行語句]

return[返回變量名]

end函數名

86/127Architecture中subprogramFunction例子functionmax(a,b:bit)

returnbooleanisvariable:flag:boolean;beginif(a=b)thenflag<=true;

endifreturnflag;endmaxFunction中參數不用說明方向(因為只有一個方向in)87/127Architecture中subprogramprocedure(過程)格式:

procedure

過程名(參數1,參數2…...)is[定義語句]

begin[次序執行語句]

end

過程名

88/127Architecture中subprogramProcedure例子proceduremax(a,b:inbit;

flag:outboolean)isbeginif(a=b)thenflag<=true;

endifendmax;89/127次序執行語句sequentialstatementWait語句assert語句If語句case語句forloop語句while語句90/127次序執行語句sequentialstatementWait語句書寫格式

wait;--無限等候

waiton[信號列表]--等候信號改變

waituntil[條件];--等候條件滿足

waitfor[時間值];--等候時間到功效

wait語句使系統暫時掛起(等同于endprocess),此時,信號值開始更新。條件滿足后,系統將繼續運行。91/127次序執行語句sequentialstatementWait語句例子process(a,b)

beginy<=aandb;endprocessprocessbeginwaitona,b;y<=aandb;endprocess等同于process(a,b)

begin錯誤假如process中已經有敏感信號

waitona,b;進程中不能使用wait語句

y<=aandb;endprocess92/127次序執行語句sequentialstatementWait語句例子假如process中沒有敏感信號列表,其進程中也沒有wait語句,則process中程序代碼循環執行processbeginclk<=notclkafter50ns;endprocess功效:產生頻率為100nsclk信號93/127次序執行語句sequentialstatementAssert語句格式

assert條件[report輸出信息][severity]

說明:條件為true時執行下一條語句,為false時輸犯錯誤信息和錯誤嚴重級別例子

….assert(sum=100)report“sum/=100”severityerror;

nextstatement…...94/127次序執行語句sequentialstatementIf語句格式

if條件then[次序執行語句][else][次序執行語句]endifif條件then[次序執行語句][elsif][次序執行語句][elsif][次序執行語句]…..[else]endif95/127次序執行語句sequentialstatementIf語句例子96/127次序執行語句sequentialstatementCase語句格式Case表示式iswhen條件表示式=>次序處理語句

when條件表示式=>次序處理語句

…….whenothers=>次序處理語句endcase

標準:1、完全性:表示式全部可能值都必須說明,能夠用others2、唯一性:相同表示式值只能說明一次97/127次序執行語句sequentialstatementCase語句例子,條件表示式能夠有各種形式98/127次序執行語句sequentialstatementCase語句例子99/127

次序執行語句sequentialstatementForloop語句格式For循環變量in范圍loop[次序處理語句]endloop注意:循環變量不需要定義(申明);例子中i不需要定義Forloop語句例子Foriin1to10loopsum=sum+1;endloop100/127次序執行語句sequentialstatement在loop語句中能夠用next來跳出此次循環,也能夠用exit來結束整個循環狀態

next格式:next[標號][when條件];

exit格式:

exit[標號][when條件];Foriin1to10loopsum=sum+1;nextwhensum=100;endloopForiin1to10loopsum=sum+1;exitwhensum=100;endloop101/127次序執行語句sequentialstatementWhile語句格式while條件loop[次序處理語句]endloopWhilei<10loopsum=sum+1;i=i+1;endloopWhile語句例子102/127并行處理語句concurrentstatement1、信號賦值操作2、帶條件信號賦值語句3、帶選擇信號賦值語句103/127并行處理語句concurrentstatement信號賦值操作符號“<=”進行信號賦值操作,它能夠用在次序執行語句中,也能夠用在并行處理語句中注意

1、用在并行處理語句中時,符號<=右邊值是此條語句敏感信號,即符號<=右邊值發生改變就會重新激發此條賦值語句,也即符號<=右邊值不改變時,此條賦值語句就不會執行。假如符號<=右邊是常數則賦值語句一直執行。

2、用在次序執行語句中時,沒有以上說法。104/127并行處理語句concurrentstatement賦值語句例子Myblock:Blockbeginclr<=‘1’after10ns; clr<=‘0’after20ns;endblockmyblockprocessbeginclr<=‘1’after10ns;clr<=‘0’after20ns;endblockmyblock程序執行10ns后clr為1,又過10ns后0賦給了clr,此時clr以前值1并沒有清掉,clr將出現不穩定狀態程序執行10ns后clr為1,又過20ns后clr值變為0,105/127并行處理語句concurrentstatement條件信號帶入語句格式

目標信號量<=表示式1when條件1else表示式2when條件2else表示式3when條件3…..

else表示式4注意:最終Else項是必須;滿足完全性和唯一性106/127并行處理語句concurrentstatement條件信號帶入語句例子Blockbeginsel<=b&a;q<=ainwhensel=“00”elsebinwhensel=“01”elsecinwhensel=“10”elsedinwhensel=‘11”elsexx;endblock107/127并行處理語句concurrentstatement選擇信號帶入語句格式

with表示式select

目標信號量<=表示式1when條件1,表示式2when條件2,

…..

表示式nwhen條件n;108/127并行處理語句concurrentstatement選擇信號帶入語句例子Blockbeginwithselselectq<=ainwhensel=“00”,

binwhensel=“01”,

cinwhensel=“10”,

dinwhensel=‘11”xx;whenothers;endblock109/127次序執行語句和并行處理語句次序執行語句和并行處理語句總結1、次序執行語句wait、assert、if-else、case、for-loop、while語句只能用在process、function和procedure中;2、并行處理語句(條件信號帶入和選擇信號帶入)只能用在architecture、block中;110/127其它語句Generic語句enttityand2isgeneric(rise:t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論