




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
幻燈片1
第三章VHDL編程基礎
3.1概述
3.2VHDL程序基本結構
3.3VHDL語言要素
3.4VHDL順序語句
3.5VHDL并行語句
3.6子程序(SUBPROGRAM)
3.7庫、程序包及其他
3.8VHDL描述風格
3.9基本邏輯電路設計
3.10狀態(tài)機的VHDL設計
幻燈片2
第三章VHDL編程基礎
3.1概述
3.1.1硬件描述語言起源
目前,電子系統正向著集成化、大規(guī)模和高速度的方向發(fā)展,所需要的集成電路的規(guī)模
越來越大,復雜程度也越來越高。對于如此大規(guī)模和復雜電路的設計問題,傳統的門級描
述方法顯得過于瑣碎,因而難以理解和管理,這就迫使人們尋求更高抽象層次的描述方法
和采用高層次的、自頂向下的設計方法。
邏輯圖和布爾方程雖然可用來描述硬件且抽象程度高于門級描述方法,但對于復雜的電路,
這種描述仍顯得過于繁瑣而不便于使用;在高于邏輯級的抽象層次上,這種方法很難以簡
練的方式提供精確的描述,在自頂向下的設計方法中不能再把它當作主要的描述手段。
幻燈片3
第三章VHDL編程基礎
3.1概述
硬件描述語言(HardwareDescriptionLanguage,HDL)就是順應人們的這一需要而產生和發(fā)
展起來的,它是一種能夠以形式化方式描述電路的結構和行為并用于模擬和綜合的高級描
述方法。
HDL具有類似于高級程序設計語言的抽象能力,有些HDL本身就是從已有的程序設計語言
(如C)發(fā)展而來,但其主要目的是用來編寫設計文件并建立硬件電路(器件)的邏輯模型。
硬件系統的基本性質和硬件設計的方法決定了HDL的主要特性。
幻燈片4
第三章VHDL編程基礎
3.1概述
HDL的語法和語義定義都是為描述硬件的行為服務,它應當能自然地描述硬件中并行的、
非遞歸的特性以及時間關系。一般認為,HDL應當具有以下能力:
①能在希望的抽象層次上進行精確而簡練的描述。
②易于產生用戶手冊、服務手冊等文件,以便多人配合工作。
③在不同層次上都易于形成用于模擬和驗證的設計描述。
④在自動設計系統中(例如高層次綜合、硅編譯器等)可作為設計輸入。
⑤可以進行硬、軟件的聯合設計,消除硬、軟件開發(fā)時間上的間隔。
⑥易于修改設計和把相應的修改納入設計文件中。
⑦在希望的抽象層次上可以建立設計者與用戶的通信界面。
幻燈片5
第三章VHDL編程基礎
3.1概述
從20世紀60年代開始,為了解決大規(guī)模復雜集成電路的設計問題,許多EDA廠商和科研
機構就建立和使用著自己的電路硬件描述語言。
20世紀80年代初美國國防部為其超高速集成電路計劃(VHSIC)提出了硬件描述語言
VHDL(VHSICHardwareDescriptionLanguage),作為該計劃的標準HDL格式。在使用中,
VHDL很好地體現了標準化的威力,因而逐步得到推廣。
1987年12月,IEEE(電氣和電子工程師協會)正式接受VHDL作為國際標準,編號為IEEE
Stdl076—1987,即VHDL'87。
1993年,對VHDL又作了若干修改,增加了一些功能,新的標準版本記作IEEEStdl076—
1993,即VHDL'93o
嚴格地說,VHDL'93和VHDL’87并不完全兼容,新標準增加了一些保留字并刪去了某些屬
性。但是,對VHDL'87的源碼只需作少許簡單的修改就可成為合法的VHDL'93代碼。
幻燈片6
第三章VHDL編程基礎
3.1概述
3.1.2VHDL的優(yōu)點
①VHDL具有強大的功能,覆蓋面廣,描述能力強,可用于從門級、電路級直至系統級的
描述、仿真和綜合。VHDL支持層次化設計,可以在VHDL的環(huán)境下,完成從簡練的設計原
始描述,經過層層細化求精,最終獲得可直接付諸生產的電路級或版圖參數描述的全過
程。
②VHDL有良好的可讀性。它可以被計算機接受,也容易被讀者理解。用VHDL書寫的源
文件,既是程序又是文檔,既是技術人員之間交換信息的文件,又可作為合同簽約者之間
的文件。
幻燈片7
第三章VHDL編程基礎
3.1概述
③VHDL有良好的可移植性。作為一種已被IEEE承認的工業(yè)標準,VHDL事實上已成為通用
的硬件描述語言,可以在不同的設計環(huán)境和系統平臺中使用。
④使用VHDL可以延長設計的生命周期。因為VHDL的硬件描述與工藝技術無關,不會因工
藝變化而使描述過時。與工藝技術有關的參數可通過VHDL提供的屬性加以描述,工藝改變
時,只需修改相應程序中的屬性參數即可。
⑤VHDL支持對大規(guī)模設計的分解和已有設計的再利用。VHDL可以描述復雜的電路系統,
支持對大規(guī)模設計進行分解,由多人、多項目組來共同承擔和完成。標準化的規(guī)則和風格,
為設計的再利用提供了有力的支持。
幻燈片8
第三章VHDL編程基礎
3.1概述
另一種已于1995年正式成為國際標準的HDL是VerilogHDL,編號為VerilogHDL1364-1995,
其特點是編程風格與C語言相似,因而比較容易掌握。它推出的時間比VHDL早,系統抽象
能力稍遜于VHDL,而對門級開關電路的描述能力則優(yōu)于VHDL,在許多領域的應用也很普遍。
第三種硬件描述語言是SYSTEMC,SystemC是由SynopsisInc.提出的,目前最新的版
本為V2.0。它提出的目的就是以一種系統設計的思想進行系統設計。它將軟件算法與硬件
實現很好的結合在一起,提高了整個系統設計的效率和正確性。
幻燈片9
第三章VHDL編程基礎
3.1概述
隨著VLSI的集成度越來越高,設計也越趨復雜。一個系統的設計往往不僅需要硬件設計人
員的參與,也需要有軟件設計人員的參與。軟件設計人員與硬件設計人員之間的相互協調就
變的格外重要,它直接關系到工作的效率以及整個系統設計的成敗。傳統的設計方法沒有使
軟件設計工作與硬件設計工作協調一致,而是將兩者的工作割裂開來。軟件算法的設計人員
在系統設計后期不能為硬件設計人員的設計提供任何的幫助。同時現在有些大規(guī)模集成電路
設計中往往帶有DSPCore或其它CPUCore。這些都使得單純地用原理圖或硬件描述語言來
設計、仿真這么復雜的系統變得十分困難。SystemC就是在這些矛盾的背景下提出的。它
的出現為復雜的系統設計提供了一條有效的解決途徑。
幻燈片10
第三章VHDL編程基礎
3.1概述
采用SYSTEMC進行設計的優(yōu)點
精煉的設計方法。使用SystemC設計系統,系統設計人員不必花費很大的精力將整個系統
設計由C語言描述轉換為HDL描述。系統設計人員可以通過在C模塊中很小的區(qū)域范圍內加
入必要的硬件和時序結構描述,從而將C模塊方便準確地轉化為一個有效的硬件設計,而避
免將另行設計一個硬件模塊。利用SystemC設計方法,設計人員可以很輕松地實現一個設
計的更改,或在優(yōu)化算法時檢測出一些設計錯誤并及時修改。
單一語言書寫。使用SystemC設計系統,整個設計都用一種語言設計系統,降低了對設計
人員的要求,減少了語言轉換時所造成的錯誤。這一優(yōu)點也使得設計人員可以在一個比較高
的層次上進行系統模塊設計。在較高層次的設計會導致產生小的設計代碼,使設計和仿真的
速度比傳統的設計方法要快很多。這一點是很顯著的。
幻燈片11
第三章VHDL編程基礎
3.1概述
SC_MODULE(example)
(
sc_in<bool>din;
sc_out<bool>dout;〃端口
voidinverter();〃處理過程聲明
SC_CTOR(example)
{
SC_METH0D(inverter);
sensitive(din)"/處理過程由輸入變化觸發(fā)
}
};
處理過程inverter如下:
voidexample::inverter()
(
boolinternal;
internal=din;〃輸入數據取反后山輸出端口輸出
dout=~internal;
幻燈片12
第三章VHDL編程基礎
3.1概述
3.1.3VHDL程序設計約定
(1)語句結構描述中方括號“[]”內的內容為可選內容。
(2)對于VHDL的編譯器和綜合器來說,程序文字的大小寫是不加區(qū)分的。本書一般使用大
寫。
(3)程序中的注釋使用雙橫線“一”。在VHDL程序的任何一行中,雙橫線“一”后的文字
都不參加編譯和綜合。
(4)為了便于程序的閱讀與調試,書寫和輸入程序時,使用層次縮進格式,同一層次的對
齊,低層次的較高層次的縮進兩個字符。
(5)考慮到MAX+plusII要求源程序文件的名字與實體名必須一致,因此為了使同一個VHDL
源程序文件能適應各個EDA開發(fā)軟件上的使用要求,建議各個源程序文件的命名均與其實
體名一致。
幻燈片13
第三章VHDL編程基礎
3.2VHDL程序基本結構
模塊化和自頂向下、逐層分解的結構化設計思想貫穿于整個VHDL設計文件之中。VHDL將
所設計的任意復雜的電路系統均看作一個設計單元,實體(Entity)和結構體(Architecture)
是模塊最基本的兩個組成部分。設計文件的實體部分描述該模塊(系統)的接口信息,
包括端口的數目、方向和類型等,其作用就相當于傳統設計方法中使用的元件符號;
結構體部分則描述該模塊的內部電路,對應于原理圖、邏輯方程和模塊的輸入一輸出特性。
二者相配合就可以組成簡單的VHDL設計文件。而一個完整的VHDL設計文件則通常包括實
體、結構體、配置(Configuration)、程序包(Package)和庫(Library)五個部分。
幻燈片14
第三章VHDL編程基礎
3.2VHDL程序基本結構
3.2.1初識VHDL程序
為使讀者在接觸大量的專業(yè)術語和語法規(guī)則之前先對VHDL有一個基本的了解,我們先一起
來看下面的三個簡單例子。讀時暫且不妨“顧名思義”、“望文生義”,充分利用你已有
的知識,你會發(fā)現VHDL其實并不難。
幻燈片15
第三章VIIDL編程基礎
3.2VHDL程序基本結構
例3-1與非門的邏輯描述
LIBRARYIEEE;
USEIEEE.STD_L0GIC_1164.ALL;
ENTITYnand2IS
PORT(a,b:INSTD_LOGIC;
y:OUTSTD_LOGIC);
ENDENTITYnand2;
ARCHITECTUREART1OFnand2IS
BEGIN
y<=NOT(aANDb);
ENDARCHITECTUREART1;
幻燈片16
第三章VHDL編程基礎
3.2VHDL程序基本結構
例3-1是一個最簡單的VHDL設計文件,所描述的是2輸入與非門。其中,從第3行至
第6行為實體部分,利用PORT(端口)語句說明該模塊有兩個輸入引腳a和b,?個輸出
引腳y,其數據類型均為STD-LOGIC;第7行至第10行為結構體,說明模塊內部的數據
傳輸和變換關系。其中所用的符號“<=”表示傳送或賦值的意思,稱為“賦值符";“NOT”
代表“取反”,“AND”代表“與”,都是經過VHDL預先定義的邏輯運算符。
幻燈片17
第三章VI1DL編程基礎
3.2VHDL程序基本結構
該文件的前兩行分別是“庫說明”和“程序包說明”語句,其作用是聲明要引用IEEE庫
(Library)中STD-L0GICT164程序包(Package)的所有項目。此例中僅在PORT(端口)
語句中引用了IEEE預定義的標準數據類型“STD-LOGIC”(標準邏輯位)。庫和程序包中存
放的是經過編譯的數據,包括對信號、常數、數據類型以及實體、結構體等的定義。
以后將對它們做詳細介紹。
幻燈片18
第三章VHDL編程基礎
3.2VHDL程序基本結構
從這個簡單的例子還可以看出,VHDL與PASCAL等高級語言在結構和風格上非常相似。例
如,每個語句均以“;”結尾(切記不要忘了“;”?。。。?,采用縮進格式,等等。其語序和
語義也與英語很相似,有時“望文生義”也能“猜個八九不離十”。因此,在學習的過程中,
讀者應善于利用這些相似性,充分調動已有的程序設計知識和英語知識,努力通過對比和
聯想來幫助理解,加深記憶。
幻燈片19
第三章VIIDL編程基礎
3.2VHDL程序基本結構
但與此同時還必須時刻牢記:VHDL是用來描述硬件電路的,它與C等高級語言存在許多差
別。最重要的差別有兩點:-是其中的某些語句(如并行語句)可以自動地重復執(zhí)行,而不
必顯式地使用循環(huán)等來保證,因為每條語句都描述著硬件電路的某一具體部分或者某一種
特性,而電路只要通上電(相當于VHDL程序投入運行)就會連續(xù)工作,根本不必反復接通
電源;
二是VHDL的許多語句不是按排列順序執(zhí)行的,而是可以同時執(zhí)行的,稱為VHDL的并行性。
這樣規(guī)定,也是為了模擬硬件電路(不含處理器)本身固有的并行性:實際電路的各個部分
在工作時是相對獨立的,沒有人能指定它們的操作順序。明白這個道理,對分析和編寫
VHDL程序都非常重要。
幻燈片20
第三章VHDL編程基礎
3.2VHDL程序基本結構
例3-2與非門的結構描述。
LIBRARYIEEE;
USEIEEE.STD_L0GIC_1164.ALL;
ENTITYnand2IS
PORT(a,b:INSTD_LOGIC;
OUTSTD_LOGIC);
ENDENTITYnand2;
ARCHITECTUREART2OFnand2IS
COMPONENTinv
PORT(in:INSTD_LOG1C;
Out:OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTand2
PORT(in1,in2:INSTD_LOGIC;
Out:OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALout1:STD_LOGIC;
BEGIN
u1:and2PORTMAP(a,b,out1);
u2:invPORTMAP(out1,y);
ENDARCHITECTUREART2;
outl
幻燈片21
第三章VHDL編程基礎
3.2VHDL程序基本結構
例3-2采用了結構描述方式,與例3T的差別主要在結構體上。其思路與原理圖設計相
似;先利用兩個COMPONENT(元件)語句說明要調用的兩個標準模塊(在庫中一生成),相
當于“調入器件符號”;再使用兩個PORTMAP(端口對應)語句說明這兩個元件之間以及元
件與端口之間的信號對應關系,也就是連接關系,相當于“連線”。這樣,便將原理圖直
接轉化成了對應的VHDL設計文件。
幻燈片22
第三章VHDL編程基礎
3.2VHDL程序基本結構
例3-3與非門的行為描述。
LIBRARYIEEE;
USEIEEE.STDJOGIC」164.ALL;
ENTITYnand2IS
PORT(a,b:INSTD-LOGIC;
y:OUTSTD-LOGIC);
ENDENTITYnand2;
ARCHITECTUREART3OFnand2IS
BEGIN
PROCESS(a,b)
BEGIN
VARIABLEtmp:STDLOGICVECTOR(1DOWNTO0);
tmp:=a&b;
CASEtmpIS
WHEN〃00〃=>y<=f-;
WHEN〃01〃=>y<)J;
WHEN〃10〃=>y<=z1';
WHEN〃11〃=>y<=f0,;
WHENOTHERS=>y<=X';
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART3;
幻燈片23
第三章VHDL編程基礎
3.2VHDL程序基本結構
3.2.2VHDL程序的基本結構
從前面的設計實例可以看出,一個相對完整的VHDL程序(或稱為設計實體)具有如
圖所示的比較固定的結構。
至少應包括三個基本組成部分:
庫、程序包使用說明,實體說明和實體對應的結構體說明。
其中,庫、程序包使用說明用于打開(調用)本設計實體將要用到的庫、程序包;
實體說明用于描述該設計實體與外界的接口信號說明,是可視部分;
結構體說明用于描述該設計實體內部工作的邏輯關系,是不可視部分。在一個實體中,可
以含有一個或一個以上的結構體,而在每一個結構體中又可以含有一個或多個進程以及其
他的語句。
根據需要,實體還可以有配置說明語句。配置說明語句主要用于以層次化的方式對特定的
設計實體進行元件例化,或是為實體選定某個特定的結構體。
幻燈片24
第三章VHDL編程基礎
3.2VHDL程序基本結構
幻燈片25
第三章VHDL編程基礎
3.2VHDL程序基本結構
3.2.3實體(ENTITY)
實體是一個設計實體的表層設計單元,其功能是對這個設計實體與外部電路進行
接口描述。它規(guī)定了設計單元的輸入輸出接口信號或引腳,是設計實體經封裝后對外的一
個通信界面。
1.實體語句結構
實體說明單元的常用語句結構如下:
ENTITY實體名IS
[GENERIC(類屬表);]
[PORT(端口表);]
ENDENTITY實體名;
幻燈片26
第三章VHDL編程基礎
3.2VHDL程序基本結構
2.類屬(GENERIC)說明語句
類屬(GENERIC)參量是一種端口界面常數,常以一種說明的形式放在實體或塊結構
體前的說明部分。類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬的值可以由設計實
體外部提供。因此,設計者可以從外面通過類屬參量的重新設定而容易地改變一個設計實
體或一個元件的內部電路結構和規(guī)模。
類屬說明的一般書寫格式如下:
GENERIC([常數名;數據類型[:設定值]
{;常數名:數據類型[:設定值]});
幻燈片27
第三章VHDL編程基礎
3.2VHDL程序基本結構
在一個實體中定義的、可以通過GENERIC參數類屬的說明,為它創(chuàng)建多個行為不同的邏輯結
構。比較常見的情況是選用類屬來動態(tài)規(guī)定一個實體端口的大小,或設計實體的物理特性,
或結構體中的總線寬度,或設計實體中、底層中同種元件的例化數量等。一般在結構體中,
類屬的應用與常數是一樣的。例如,當用實體例化一個設計實體的器件時,可以用類屬表中
的參數項定制這個器件,如可以將?個實體的傳輸延時、上升和下降延時等參數加到類屬參
數表中,然后根據這些參數進行定制,這對于系統仿真控制是十分方便的。類屬中的常數名
是由設計者確定的類屬常數名,數據類型通常取INTEGER或TIME等類型,設定值即為常數
名所代表的數值。但需注意,綜合器僅支持數據類型為整數的類屬值。
幻燈片28
第三章VHDL編程基礎
3.2VHDL程序基本結構
ENTITYMCKIS
GENERIC(WIDTH:INTEGER:=16);
PORT(ADD?BUS:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0));
在這里,GENERIC語句對實體MCK的作為地址總線的端口ADDJUS的數據類型和寬度
作了定義,即定義ADD_BUS為一個16位的位矢量。
幻燈片29
第三章VHDL編程基礎
3.2VHDL程序基本結構
2輸入與門的實體描述。
ENTITYAND2IS
GENERIC(RISEW:TIME:=1ns;
FALLW:TIME:=1ns);
PORT(Al:INSTD_LOGIC;
AO:INSTDLOGIC;
ZO:OUTSTD_LOGIC);
ENDENTITYAND2;
這是一個準備作為2輸入與門的設計實體的實體描述,在類屬說明中定義參數
RISEN為上沿寬度,FALLW為下沿寬度,它們分別為1ns,這兩個參數用于仿真模塊的設計。
幻燈片30
第三章VHDL編程基礎
3.2VHDL程序基本結構
3.PORT端口說明
由PORT引導的端口說明語句是對于一個設計實體界面的說明。實體端口說明的一
般書寫格式如下:
PORT(端口名:端口模式數據類型;
{端口名:端口模式數據類型}):
其中,端口名是設計者為實體的每一個對外通道所取的名字;端口模式是指這些
通道上的數據流動方式,如輸入或輸出等;數據類型是指端口上流動的數據的表達格式。
由于VHDL是一種強類型語言,它對語句中的所有操作數的數據類型都有嚴格的規(guī)定。一個
實體通常有一個或多個端口,端口類似于原理圖部件符號上的管腳。實體與外界交流的信
息必須通過端口通道流入或流出。
幻燈片31
第三章VHDL編程基礎
3.2VHDL程序基本結構
IEEE1076標準包中定義了4種常用的端口模式,各端口模式的功能及符號如下所示.在實
際的數字集成電路中,IN相當于只可輸入的引腳,OUT相當于只可輸出的弓|腳,BUFFER相
當于帶輸出緩沖器并可以回讀的引腳(與TRI引腳不同),而INOUT相當于雙向引腳(即BIDIR
引腳)。由下圖的INOUT電路可見,此模式的端口是普通輸出端口(OUT)加入三態(tài)輸出緩沖器
和輸入緩沖器構成的。
端口模式端口模式說明(以設計實體為主體)
IN輸入,只讀模式,將變量或信號信息通過該端口讀入
OUT輸出,單向賦值模式,將信號通過該端口輸出
BUFFER具有讀功能的輸出模式,可以讀或寫,只能有?個驅動源
INOUT雙向,可以通過該端口讀入或寫出信息
---------------
INOUTBUFFERINOUT
幻燈片32
第三章VHDL編程基礎
3.2VHDL程序基本結構
3.2.4結構體(ARCHITECTUR玲
結構體是用于描述設計實體的內部結構以及實體端口間的邏輯關系。結構體內部
構造的描述層次和描述內容一般可以用下圖來說明。一般地,一個完整的結構體由兩個基
本層次組成:
?對數據類型、常數、信號、子程序和元件等元素的說明部分。
?描述實體邏輯行為的,以各種不同的描述風格表達的功能描述語句。
幻燈片33
第三章VHDL編程基礎
3.2VHDL程序基本結構
幻燈片34
第三章VIIDL編程基礎
3.2VHDL程序基本結構
1.結構體的一般語句格式
結構體的語句格式如下:
ARCHITECTURE結構體名OF實體名IS
[說明語句]
BEGIN
[功能描述語句]
ENDARCHITECTURE結構體名;
其中,實體名必須是所在設計實體的名字,而結構體名可以由設計者自己選擇,但當一個
實體具有多個結構體時,結構體的取名不可重復。
幻燈片35
第三章VHDL編程基礎
3.2VHDL程序基本結構
2.結構體說明語句
結構體中的說明語句是對結構體的功能描述語句中將要用到的信號(SIGNAL)、數據
類型(TYPE)、常數(CONSTANT)、元件(COMPONENT)、函數(FUNCTION)和過程(PROCEDURE)等
加以說明的語句。但在一個結構體中說明和定義的數據類型、常數、元件、函數和過程只
能用于這個結構體中,若希望其能用于其他的實體或結構體中,則需要將其作為程序包來
處理。
幻燈片36
第三章VHDL編程基礎
3.2VIIDL程序基本結構
3.功能描述語句結構
如圖所示的功能描述語句結構可以含有五種不同類型的,以并行方式工作的語句
結構。而在每一語句結構的內部可能含有并行運行的邏輯描述語句或順序運行的邏輯描述
語句。各語句結構的基本組成和功能分別是:
(1)塊語句是由一系列并行執(zhí)行語句構成的組合體,它的功能是將結構體中的并行語句組
成一個或多個模塊。
(2)進程語句定義順序語句模塊,用以將從外部獲得的信號值,或內部的運算數據向其他
的信號進行賦值。
(3)信號賦值語句將設計實體內的處理結果向定義的信號或界面端口進行賦值。
(4)子程序調用語句用于調用一個已設計好的子程序。
(5)元件例化語句對其他的設計實體作元件調用說明,并將此元件的端口與其他的元件、
信號或高層次實體的界面端口進行連接。
幻燈片37
第三章VHDL編程基礎
3.3VIIDL語言要素
3.3.1VHDL文字規(guī)則
VHDL文字(Literal)主要包括數值和標識符。數值型文字主要有數字型、字符串型、
位串型。
1.數字型文字
數字型文字的值有多種表達方式,現列舉如下:
(1)整數文字:整數文字都是十進制的數,如:
5,678,0,156E2(=15600),45_234_287(=45234287)
數字間的下劃線僅僅是為了提高文字的可讀性,相當于一個空的間隔符,而沒有其
他的意義,因而不影響文字本身的數值。
(2)實數文字:實數文字也都是十進制的數,但必須帶有小數點,如:
188.993,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),
1.335,0.0
幻燈片38
第三章VHDL編程基礎
3.3VHDL語言要素
(3)以數制基數表示的文字:用這種方式表示的數由五個部分組成。第一部分,用
十進制數標明數制進位的基數;第二部分,數制隔離符號“#":第三部分,表達的文字;第
四部分,指數隔離符號“#";第五部分,用十進制表示的指數部分,這一部分的數如果是0
可以省去不寫?,F舉例如下:
10#170#-(十進制數表示,等于170)
一(二進制數表示,等于254)
16#E#E1一(十六進制數表示,等于2#11100000#,等于224)
16#F.01#E+2一(十六進制數表示,等于3841.00)
(4)物理量文字(VHDL綜合器不接受此類文字)。如:
60s(60秒),100m(100米),kQ(千歐姆),177A(177安培)
幻燈片39
第三章VHDL編程基礎
3.3VHDL語言要素
2.字符串型文字
字符是用單引號引起來的ASCII字符,可以是數值,也可以是符號或字母,如:'R',
'A"J而字符串則是一維的字符數組,須放在雙引號中。VHDL中有兩種類型的
字符串:文字字符串和數位字符串。
(1)文字字符串:文字字符串是用雙引號引起來的一串文字,如:
“ERROR”,“BOTHSANDQEQUALTOL”,“X”,“BB$CC”
(2)數位字符串:數位字符串也稱位矢量,是預定義的數據類型BIT的一位數組,
它們所代表的是二進制、八進制或十六進制的數組,其位矢量的長度即為等值的二進制數
的位數。數位字符串的表示首先要有計算基數,然后將該基數表示的值放在雙引號中,基
數符以“B”、“0”和“X”表示,并放在字符串的前面。例如:
Bwl_1101_1110w一二進制數數組,位矢數組長度是9
X“AD0”一十六進制數數組,位矢數組長度是12
幻燈片40
第三章VHDL編程基礎
3.3VHDL語言要素
3.標識符
標識符用來定義常數、變量、信號、端口、子程序或參數的名字。VHDL的基本標
識符就是以英文字母開頭,不連續(xù)使用下劃線不以下劃線“,結尾的,由26個大
小寫英文字母、數字0?9以及下劃線“,組成的字符串。VHDL'93標準還支持擴展標識
符,但是目前仍有許多VHDL工具不支持擴展標識符。標識符中的英語字母不分大小寫。VHDL
的保留字不能用于作為標識符使用。
如:DECODER」,FFT,Sig_N,NOT_ACK,StateO,Idle是合法的標識符;
而一DECODER」,2FFT,SIG_#N,NOT_ACK,RYY_RST,data_BUS,RETURN則是非法的標識符。
幻燈片41
第三章VHDL編程基礎
3.3VHDL語言要素
4.下標名及下標段名
下標名用于指示數組型變量或信號的某一元素,而下標段名則用于指示數組型變
量或信號的某一段元素,其語句格式如下:
數組類型信號名或變量名(表達式1[TO/DOWNTO表達式2]);
表達式的數值必須在數組元素下標號范圍以內,并且必須是可計算的。TO表示數
組下標序列由低到高,如“2TO8”;DOWNTO表示數組下標序列由高到低,如“8DOWNTO
2"。如下是下標名及下標段名使用示例:
SIGNALA,B,C:BIT_VECTOR(OTO7);
SIGNALM:INTEGERRANGE0TO3;
SIGNALY,Z;BIT;
Y<=A(M);-M是不可計算型下標表示
Z<=B(3);-3是可計算型下標表示
C(0TO3)<=A(4TO7);一以段的方式進行賦值
C(4TO7)<=A(0TO3);一以段的方式進行賦值
幻燈片42
第三章VI1DL編程基礎
3.3VHDL語言要素
3.3.2VHDL數據對象
在VHDL中,數據對象(DataObjects)類似于一種容器,它接受不同數據類型的賦
值。數據對象有三種,即常量(CONSTANT)、變量(VARIABLE)和信號(SIGNAL)。前兩種可以
從傳統的計算機高級語言中找到對應的數據類型,其語言行為與高級語言中的變量和常量
十分相似。但信號是具有更多的硬件特征的特殊數據對象,是VHDL中最有特色的語言要素
之一。
幻燈片43
第三章VHDL編程基礎
3.3VHDL語言要素
1.常量(CONSTANT)
常量的定義和設置主要是為了使設計實體中的常數更容易閱讀和修改。例如,將位
矢的寬度定義為一個常量,只要修改這個常量就能很容易地改變寬度,從而改變硬件結構。
在程序中,常量是一個恒定不變的值,一旦作了數據類型的賦值定義后,在程序中不能再
改變,因而具有全局意義。常量的定義形式如下:
CONSTANT常量名:數據類型:=表達式;
例如:
CONSTANTFBUS:BIT_VECTOR:="010115”;
CONSTANTVCC:REAL:=5.0;
CONSTANTDELY:TIME:=25ns;
幻燈片44
第三章VHDL編程基礎
3.3VHDL語言要素
VHDL要求所定義的常量數據類型必須與表達式的數據類型一致。常量的數據類型可
以是標量類型或復合類型,但不能是文件類型(File)或存取類型(Access)o
常量定義語句所允許的設計單元有實體、結構體、程序包、塊、進程和子程序。在
程序包中定義的常量可以暫不設具體數值,它可以在程序包體中設定。
常量的可視性,即常量的使用范圍取決于它被定義的位置。在程序包中定義的常量
具有最大全局化特征,可以用在調用此程序包的所有設計實體中;定義在設計實體中的常
量,其有效范圍為這個實體定義的所有的結構體;定義在設計實體的某一結構體中的常量,
則只能用于此結構體;定義在結構體的某一單元的常量,如一個進程中,則這個常量只能
用在這一進程中。
幻燈片45
第三章VHDL編程基礎
3.3VHDL語言要素
2.變量(VARIABLE)
在VHDL語法規(guī)則中,變量是一個局部量,只能在進程和子程序中使用。變量不能
將信息帶出對它作出定義的當前設計單元。變量的賦值是一種理想化的數據傳輸,是立即
發(fā)生,不存在任何延時的行為。VHDL語言規(guī)則不支持變量附加延時語句。變量常用在實現
某種算法的賦值語句中。
定義變量的語法格式如下:
VARIABLE變量名:數據類型:=初始值;
例如:
VARIABLEA:INTEGER;一定義A為整數型變量
VARIABLEB,C:INTEGER;=2;一定義B和C為整型變量,初始值為2
幻燈片46
第三章VHDL編程基礎
3.3VHDL語言要素
變量作為局部量,其適用范圍僅限于定義了變量的進程或子程序中。仿真過程
中惟一的例外是共享變量。變量的值將隨變量賦值語句的運算而改變。變量定義語句中的
初始值可以是一個與變量具有相同數據類型的常數值,也可以是一個全局靜態(tài)表達式,這
個表達式的數據類型必須與所賦值變量一致。此初始值不是必需的,綜合過程中綜合器將
略去所有的初始值。
變量數值的改變是通過變量賦值來實現的,其賦值語句的語法格式如下:
目標變量名:=表達式;
幻燈片47
第三章VHDL編程基礎
3.3VHDL語言要素
3.信號(SIGNAL)
信號是描述硬件系統的基本數據對象,它類似于連接線。信號可以作為設計實體
中并行語句模塊間的信息交流通道。在VHDL中,信號及其相關的信號賦值語句、決斷函數、
延時語句等很好地描述了硬件系統的許多基本特征。如硬件系統運行的并行性;信號傳輸
過程中的慣性延時特性;多驅動源的總線行為等。
信號作為一種數值容器,不但可以容納當前值,也可以保持歷史值。這一屬性與
觸發(fā)器的記憶功能有很好的對應關系。信號的定義格式如下:
SIGNAL信號名:數據類型:=初始值;
幻燈片48
第三章VHDL編程基礎
3.3VHDL語言要素
以下是信號的定義示例:
SIGNALSI:STD_LOGIG:=0;一定義了一個標準位的單值信號S1,初始值為低電平
SIGNALS2,S3:BIT;一定義了兩個位BIT的信號S2和S3
SIGNALS4:STD_L0GIC_VECT0R(15D0WNT00);一定義了一個標準位矢的位矢量(數組、
總線)信號,共有16個信號元素
與變量相比,信號的硬件特征更為明顯,它具有全局性特性。
除了沒有方向說明以外,信號與實體的端口(PORT)概念是一致的。
幻燈片49
第三章VHDL編程基礎
3.3VHDL語言要素
信號的使用和定義范圍是實體、結構體和程序包。在進程和子程序中不允許定義信
號。信號可以有多個驅動源,或者說賦值信號源,但必須將此信號的數據類型定義為決斷性
數據類型。
在進程中,只能將信號列入敏感表,而不能將變量列入敏感表??梢娺M程只對信號
敏感,而對變量不敏感。
幻燈片50
第三章VHDL編程基礎
3.3VHDL語言要素
4.三者的使用比較
(1)從硬件電路系統來看,常量相當于電路中的恒定電平,如GND或VCC接口,而
變量和信號則相當于組合電路系統中門與門間的連接及其連線上的信號值。
(2)從行為仿真和VHDL語句功能上看,二者的區(qū)別主要表現在接受和保持信號的
方式、信息保持與傳遞的區(qū)域大小上。例如信號可以設置延時量,而變量則不能;變量只
能作為局部的信息載體,而信號則可作為模塊間的信息載體。變量的設置有時只是一種過
渡,最后的信息傳輸和界面間的通信都靠信號來完成。
幻燈片51
第三章VHDL編程基礎
3.3VHDL語言要素
4.三者的使用比較
(3)從綜合后所對應的硬件電路結構來看,信號一般將對應更多的硬件結構,但在
許多情況下,信號和變量并沒有什么區(qū)別。例如在滿足一定條件的進程中,綜合后它們都
能引入寄存器。這時它們都具有能夠接受賦值這一重要的共性,而VHDL綜合器并不理會它
們在接受賦值時存在的延時特性。
(4)雖然VHDL仿真器允許變量和信號設置初始值,但在實際應用中,VHDL綜合器
并不會把這些信息綜合進去。這是因為實際的FPGA/CPLD芯片在上電后,并不能確保其初
始狀態(tài)的取向。因此,對于時序仿真來說,設置的初始值在綜合時是沒有實際意義的。
幻燈片52
第三章VI1DL編程基礎
3.3VHDL語言要素
變量和信號
盡管它們都是用來存儲數據,但二者存在許多重要差別:
說明的形式與位置不同,作用范圍也不同。信號可用于進程間的通信,變量則不行。
變量的賦值是立即生效的;對信號的賦值則是按仿真節(jié)拍來進行的,還可以用AFTER語句
來附加延時。
信號的賦值采用“<="賦值符,而變量的賦值是用“:=”符號。
幻燈片53
第三章VHDL編程基礎
3.3VHDL語言要素
3.3.3VHDL數據類型
VHDL是一種強類型語言,要求設計實體中的每一個常數、信號、變量、函數以及設
定的各種參量都必須具有確定的數據類型,并且相同數據類型的量才能互相傳遞和作用。
VHDL作為強類型語言的好處是使VHDL編譯或綜合工具很容易地找出設計中的各種常見錯
誤。VHDL中的數據類型可以分成四大類。
標量型(SCALARTYPE):屬單元素的最基本的數據類型,通常用于描述一個單值數
據對象,它包括實數類型、整數類型、枚舉類型和時間類型。
幻燈片54
第三章VHDL編程基礎
3.3VHDL語言要素
復合類型(COMPOSITETYP玲:可以由細小的數據類型復合而成,如可由標量復合而
成。復合類型主要有數組型(ARRAY)和記錄型(RECORD)?
存取類型(ACCESSTYPE):為給定的數據類型的數據對象提供存取方式。
文件類型(FILESTYPE):用于提供多值存取類型。
這四大數據類型又可分成在現成程序包中可以隨時獲得的預定義數據類型和用戶
自定義數據類型兩個類別。預定義的VHDL數據類型是VHDL最常用、最基本的數據類型。
這些數據類型都已在VHDL的標準程序包STANDARD和STD_L0GIC_1164及其他的標準程序包
中作了定義,并可在設計中隨時調用。
幻燈片55
第三章VHDL編程基礎
3.3VHDL語言要素
1.VHDL的預定義數據類型
1)布爾(BOOLEAN)數據類型
程序包STANDARD中定義布爾數據類型的源代碼如下:
TYPEBOOLEANIS(FALES,TRUE);
布爾數據類型實際上是一個二值枚舉型數據類型,它的取值有FALSE和TRUE兩種。
綜合器將用一個二進制位表示BOOLEAN型變量或信號。
例如,當A大于B時,在IF語句中的關系運算表達式(A>B)的結果是布爾量TRUE,
反之為FALSE,綜合器將其變?yōu)?或0信號值,對應于硬件系統中的一根線。
幻燈片56
第三章VHDL編程基礎
3.3VHDL語言要素
2)位(BIT)數據類型
位數據類型也屬于枚舉型,取值只能是1或0。位數據類型的數據對象,如變量、
信號等,可以參與邏輯運算,運算結果仍是位的數據類型。VHDL綜合器用一個二進制位表
示BITo在程序包STANDARD中定義的源代碼是:
TYPEBITIS('O',T);
幻燈片57
第三章VHDL編程基礎
3.3VHDL語言要素
3)位矢量(B1T_VECTOR)數據類型
位矢量只是基于BIT數據類型的數組,在程序包STANDARD中定義的源代碼是:
TYPEBIT_VETORISARRAY(NATURALRANGEO)OFBIT;
使用位矢量必須注明位寬,即數組中的元素個數和排列,例如:
SIGNALA:BIT_VECTOR(7TO0);
信號A被定義為一個具有8位位寬的矢量,它的最左位是A(7),最右位是A(0)。
幻燈片58
第三章VHDL編程基礎
3.3VHDL語言要素
4)字符(CHARACTER)數據類型
字符類型通常用單引號引起來,如'A'。字符類型區(qū)分大小寫,如‘B'不同于'b'。
字符類型已在STANDARD程序包中作了定義。
5)整數(INTEGER)數據類型
整數類型的數代表正整數、負整數和零。在VHDL中,整數的取值范圍是-21473
647?+21473647,即可用32位有符號的二進制數表示。在實際應用中,VHDL仿真器通常
將INTEGER類型作為有符號數處理,而VHDL綜合器則將INTEGER作為無符號數處理。在使
用整數時,VHDL綜合器要求用RANGE子句為所定義的數限定范圍,然后根據所限定的范圍
來決定表不此信號或變量的二進制數的位數,因為VHDL綜合器無法綜合未限定的整數類型
的信號或變量。
如語句“SIGNALTYPE1:INTEGERRANGE0TO15;”規(guī)定整數TYPE1的取值范圍
是0?15共16個值。
幻燈片59
第三章VIIDL編程基礎
3.3VHDL語言要素
6)自然數(NATURAL)和正整數(POSITIVE)數據類型
自然數是整數的—個子類型,非負的整數,即零和正整數;正整數也是整數的一個子
類型,它包括整數中非零和非負的數值。它們在STANDARD程序包中定義的源代碼如下:
SUBTYPENATURALISINTEGERRANGE0TOINTEGER'HIGH;
SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER'HIGH;
幻燈片60
第三章VHDL編程基礎
3.3VHDL語言要素
7)實數(REAL)數據類型
VHDL的實數類型類似于數學上的實數,或稱浮點數。實數的取值范圍為T.0E38?
+1.0E38。通常情況下,實數類型僅能在VHDL仿真器中使用,VHDL綜合器不支持實數,因
為實數類型的實現相當復雜,目前在電路規(guī)模上難以承受。
實數常量的書寫方式舉例如下:
65971.333333-十進制浮點數
8#43.6#E+4一八進制浮點數
43.6E-4-十進制浮點數
幻燈片61
第三章VHDL編程基礎
3.3VHDL語言要素
8)字符串(STRING)數據類型
字符串數據類型是字符數據類型的一個非約束型數組,或稱為字符串數組。字符串
必須用雙引號標明。如:
VARIABLESTRING_VAR:STRING(1TO7);
STRING_VAR:“ABCD”;
9)時間(TIME)數據類型
VHDL中惟一的預定義物理類型是時間。完整的時間類型包括整數和物理量單位兩部
分,整數和單位之間至少留一個空格,如55ms,20nso
幻燈片62
第三章VHDL編程基礎
3.3VHDL語言要素
10)錯誤等級(SEVERITY_LEVEL)
在VHDL仿真器中,錯誤等級用來指示設計系統的工作狀態(tài),共有四種可能的狀態(tài)
值:NOTE(注意)、WARNING(警告)、ERROR(出錯)、FAILURE(失?。T诜抡孢^程中,可輸出
這四種值來提示被仿真系統當前的工作情況。其定義如下:
TYPESEVERITY_LEVELIS(NOTE,WARNING,ERROR,FAILURE);
幻燈片63
第三章VHDL編程基礎
3.3VHDL語言要素
2.IEEE預定義標準邏輯位與矢量
在IEEE庫的程序包STD_L0GIC」164中,定義了兩個非常重要的數據類型,即標準
邏輯位STD_LOGIC和標準邏輯矢量STD_LOGIC_VECTOR.
1)標準邏輯位STD_L0GIC_1164中的數據類型
以下是定義在IEEE庫程序包STD_L0GIC_1164中的數據類型。數據類型STD_LOGIC
的定義如下所示:
TYPESTD_LOGICIS('U','X','O',(V,'Z','W','L','H',);
各值的含義是:
'U'-未初始化的,'X'--強未知的,'0'一強0,'1'一強1,'Z'一高阻態(tài),'『一
弱未知的,’L'一弱0,'H'一弱1,一忽略。
在程序中使用此數據類型前,需加入下面的語句:
LIBRARYIEEE;
USEIEEE.STD_L0GIC_1164.ALL;
幻燈片64
第三章VHDL編程基礎
3.3VHDL語言要素
2)標準邏輯矢量(STDLOGICVECTOR)數據類型
STD_LOGIC_VECTOR類型定義如下:
TYPESTDLOGICVECTORISAR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023-2024學年人教版高中信息技術必修二第三章第三節(jié)《 信息系統中的軟件》教學設計
- 大型礦山爆破拆除作業(yè)合同
- 跨區(qū)域藝術表演團體巡回演出合同標準文本
- 跨境流動資金借款合同書
- 購銷合同權利義務轉讓協議
- 1認識光 教學設計-2023-2024學年科學五年級上冊青島版
- 10 牛郎織女(一)第二課時 教學設計-2024-2025學年語文五年級上冊統編版
- 住酒店合同范本
- Module 2 public holidays unit 2 教學設計- 2024-2025學年外研版九年級英語上冊
- 沐足合同范本
- 天津2025年天津中德應用技術大學輔導員崗位招聘7人筆試歷年參考題庫附帶答案詳解
- 2025年湘西民族職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年湖南交通職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 部編人教版道德與法治九年級下冊全冊課件
- 三維電生理導航系統技術參數
- 三年級下冊科學活動手冊
- 《交通工程CAD》課程教學大綱(本科)
- 人教版數學五年級下冊 全冊各單元教材解析
- 換班申請表(標準模版)
- 者陰村戰(zhàn)友紀念者陰山對越自衛(wèi)還擊作戰(zhàn)30周年聯誼會計劃2
- 承插型盤扣式支模架專項施工方案
評論
0/150
提交評論