VHDL硬件描述語言二_第1頁
VHDL硬件描述語言二_第2頁
VHDL硬件描述語言二_第3頁
VHDL硬件描述語言二_第4頁
VHDL硬件描述語言二_第5頁
已閱讀5頁,還剩151頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、VHDL硬件描述語言二VHDL硬件描述語言二2.1 VHDL程序結(jié)構(gòu)程序結(jié)構(gòu)2.2 VHDL的語言元素的語言元素2.3 VHDL的基本描述語句的基本描述語句2.4 VHDL結(jié)構(gòu)體的三種描述方法結(jié)構(gòu)體的三種描述方法VHDL硬件描述語言二u 2.1.1 VHDL程序基本結(jié)構(gòu)程序基本結(jié)構(gòu)u 2.1.2 VHDL結(jié)構(gòu)體的基本子結(jié)構(gòu)結(jié)構(gòu)體的基本子結(jié)構(gòu)VHDL硬件描述語言二2.1.1 VHDL程序基本結(jié)構(gòu)程序基本結(jié)構(gòu)例例1 一個(gè)一個(gè)2輸入的與門的邏輯描述輸入的與門的邏輯描述LIBRARY ieee; -庫說明語句庫說明語句USE ieee.std_logic_1164.ALL; -程序包說明語句程序包說明

2、語句ENTITY and2 ISPORT(a,b: IN STD_LOGIC; y : OUT STD_LOGIC);END and2;ARCHITECTURE and2x OF and2 ISBEGINy=a AND b;END and2x;實(shí)體部分實(shí)體部分結(jié)構(gòu)體部分結(jié)構(gòu)體部分VHDL硬件描述語言二VHDL設(shè)計(jì)文件的兩個(gè)基本組成部分實(shí)體實(shí)體(Entity)結(jié)構(gòu)體結(jié)構(gòu)體(Architecture)配置配置(Configuration)包集合包集合(Package)庫庫(Library)一個(gè)完整的一個(gè)完整的VHDL程序程序庫庫 用于存放已編譯的實(shí)體、結(jié)構(gòu)體、包集合和配置l2.1.1 VHDL程序

3、基本結(jié)構(gòu)程序基本結(jié)構(gòu)實(shí)體部分實(shí)體部分描述設(shè)計(jì)系統(tǒng)的外部接口信號(hào)(即輸入/輸出信號(hào))結(jié)構(gòu)體結(jié)構(gòu)體用于描述系統(tǒng)的內(nèi)部電路配置配置用于從庫中選取所需元件安裝到設(shè)計(jì)單元的實(shí)體中包集合包集合存放各設(shè)計(jì)模塊能共享的數(shù)據(jù)類型、常數(shù)、子程序等VHDL硬件描述語言二2.1.1.1 實(shí)體(實(shí)體(ENTITY)實(shí)體的一般格式為:實(shí)體的一般格式為:ENTITY 實(shí)體名實(shí)體名 IS類屬參數(shù)說明類屬參數(shù)說明;端口說明端口說明;END; ENTITY、IS、END是是VHDL的關(guān)鍵字(保留字)。的關(guān)鍵字(保留字)。 實(shí)體中的每一個(gè)實(shí)體中的每一個(gè)I/O信號(hào)被稱為端口,其功能對應(yīng)于電路信號(hào)被稱為端口,其功能對應(yīng)于電路 圖圖符號(hào)

4、的一個(gè)引腳。端口說明則是對一個(gè)實(shí)體的一組端口的定義,符號(hào)的一個(gè)引腳。端口說明則是對一個(gè)實(shí)體的一組端口的定義,即對基本設(shè)計(jì)實(shí)體與外部接口的描述。端口是設(shè)計(jì)實(shí)體和外部即對基本設(shè)計(jì)實(shí)體與外部接口的描述。端口是設(shè)計(jì)實(shí)體和外部環(huán)境動(dòng)態(tài)通信的通道。環(huán)境動(dòng)態(tài)通信的通道。ayand2b類屬參數(shù)說明是可選部分。如果需要,可使用以類屬參數(shù)說明是可選部分。如果需要,可使用以“GENERIC”語語句來指定該設(shè)計(jì)單元的類屬參數(shù)(如延時(shí)、功耗等)。句來指定該設(shè)計(jì)單元的類屬參數(shù)(如延時(shí)、功耗等)。 實(shí)體名、端口名等均應(yīng)為實(shí)體名、端口名等均應(yīng)為符合符合VHDL命名規(guī)則命名規(guī)則 的標(biāo)識(shí)符。的標(biāo)識(shí)符。VHDL硬件描述語言二端口說

5、明的一般格式為:端口說明的一般格式為: PORT(端口名(端口名,端口名,端口名:端口模式:端口模式 數(shù)據(jù)類型;數(shù)據(jù)類型; 端口名端口名,端口名,端口名:端口模式:端口模式 數(shù)據(jù)類型);數(shù)據(jù)類型); 端口模式用來說明數(shù)據(jù)傳輸通過該端口的方向。端口模式有以下幾類:端口模式用來說明數(shù)據(jù)傳輸通過該端口的方向。端口模式有以下幾類: IN(輸入):僅允許數(shù)據(jù)流進(jìn)入端口。主要用于時(shí)鐘輸入、控制輸入、(輸入):僅允許數(shù)據(jù)流進(jìn)入端口。主要用于時(shí)鐘輸入、控制輸入、單向數(shù)據(jù)輸入。單向數(shù)據(jù)輸入。 OUT(輸出):僅允許數(shù)據(jù)流由實(shí)體內(nèi)部流出端口。該模式通常用于終(輸出):僅允許數(shù)據(jù)流由實(shí)體內(nèi)部流出端口。該模式通常用于

6、終端計(jì)數(shù)一類的輸出,不能用于反饋。端計(jì)數(shù)一類的輸出,不能用于反饋。 BUFFER(緩沖):該模式允許數(shù)據(jù)流出該實(shí)體和作為內(nèi)部反饋時(shí)用,(緩沖):該模式允許數(shù)據(jù)流出該實(shí)體和作為內(nèi)部反饋時(shí)用,但不允許作為雙向端口使用。但不允許作為雙向端口使用。 INOUT(雙向):可以允許數(shù)據(jù)流入或流出該實(shí)體。該模式也允許用于(雙向):可以允許數(shù)據(jù)流入或流出該實(shí)體。該模式也允許用于內(nèi)部反饋。內(nèi)部反饋。如果端口模式?jīng)]有指定,則該端口處于缺省模式為:如果端口模式?jīng)]有指定,則該端口處于缺省模式為:IN 。數(shù)據(jù)類型原則上可以是任何標(biāo)準(zhǔn)的數(shù)據(jù)類型和用戶自定義類型。數(shù)據(jù)類型原則上可以是任何標(biāo)準(zhǔn)的數(shù)據(jù)類型和用戶自定義類型。PO

7、RT (a,b: IN STD_LOGIC; y : OUT STD_LOGIC);VHDL硬件描述語言二inininoutoutbufferinoutmodemode模式及其信號(hào)源VHDL硬件描述語言二類屬參數(shù)說明的格式為:類屬參數(shù)說明的格式為: GENERIC(參數(shù)名:參數(shù)類型:(參數(shù)名:參數(shù)類型:=初始值);初始值); 例例2:加入類屬說明的:加入類屬說明的2輸入的與門的邏輯描述輸入的與門的邏輯描述ENTITY and2 ISGENERIC (m:TIME:=1ns);PORT(a,b: IN STD_LOGIC; y : OUT STD_LOGIC);END and2;ARCHITEC

8、TURE and2x OF and2 ISSIGNAL u: BIT;BEGINu=a AND b;y=u after(m) when u=1 else u after(m) ;END and2x;VHDL硬件描述語言二例例3 3: 四位加法器實(shí)體說明程序四位加法器實(shí)體說明程序ENTITY add4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); Ci: IN STD_LOGIC; Sum: OUT STD_LOGIC_VECTOR(3 downto 0); Co: OUT STD_LOGIC);END add4;由實(shí)體說明畫出四位加法器由實(shí)體說明

9、畫出四位加法器add4的電路圖如下所示。的電路圖如下所示。add4a3.0b3.0Sum3.0CiCoVHDL硬件描述語言二l2.1.1.2 結(jié)構(gòu)體(結(jié)構(gòu)體(ARCHITECTURE )結(jié)構(gòu)體的一般格式如下:結(jié)構(gòu)體的一般格式如下:ARCHITECTURE 結(jié)構(gòu)體名結(jié)構(gòu)體名 OF 實(shí)體名實(shí)體名 IS結(jié)構(gòu)體說明部分結(jié)構(gòu)體說明部分;BEGIN并發(fā)處理語句并發(fā)處理語句;END 結(jié)構(gòu)體名;結(jié)構(gòu)體名; 結(jié)構(gòu)體說明是指對結(jié)構(gòu)體需要使用的信號(hào)、常數(shù)、數(shù)據(jù)類結(jié)構(gòu)體說明是指對結(jié)構(gòu)體需要使用的信號(hào)、常數(shù)、數(shù)據(jù)類 型和函數(shù)進(jìn)行型和函數(shù)進(jìn)行定義和說明。定義和說明。 并發(fā)處理語句位于并發(fā)處理語句位于BEGIN和和END之

10、間,這些語句具體地描述了構(gòu)造體的之間,這些語句具體地描述了構(gòu)造體的行為。行為。并發(fā)處理語句是功能描述的核心部分,也是變化最豐富的部分并發(fā)處理語句是功能描述的核心部分,也是變化最豐富的部分。并發(fā)處。并發(fā)處理語句可以使用賦值語句、進(jìn)程語句、元件例化語句、塊語句以及子程序等。理語句可以使用賦值語句、進(jìn)程語句、元件例化語句、塊語句以及子程序等。需要注意的是需要注意的是,這些語句都是并發(fā)(同時(shí))執(zhí)行的,與排列順序無關(guān)。,這些語句都是并發(fā)(同時(shí))執(zhí)行的,與排列順序無關(guān)。VHDL硬件描述語言二l2.1.1.3 配置(配置(CONFIGURATION) 配置的基本格式為:配置的基本格式為: CONFIGURA

11、TION 配置名配置名 OF 實(shí)體名實(shí)體名 IS配置說明配置說明; END 配置名;配置名; 配置語句描述了層與層之間的連接關(guān)系,以及實(shí)體與構(gòu)造配置語句描述了層與層之間的連接關(guān)系,以及實(shí)體與構(gòu)造體之間的連接關(guān)系。設(shè)計(jì)者可以利用配置語句選擇不同的構(gòu)造體之間的連接關(guān)系。設(shè)計(jì)者可以利用配置語句選擇不同的構(gòu)造體,使其與要設(shè)計(jì)的實(shí)體相對應(yīng);在仿真某一個(gè)實(shí)體時(shí),可以體,使其與要設(shè)計(jì)的實(shí)體相對應(yīng);在仿真某一個(gè)實(shí)體時(shí),可以利用配置選擇不同的構(gòu)造體進(jìn)行性能對比實(shí)驗(yàn),以得到性能最利用配置選擇不同的構(gòu)造體進(jìn)行性能對比實(shí)驗(yàn),以得到性能最佳的構(gòu)造體。佳的構(gòu)造體。VHDL硬件描述語言二 CONFIGURATION 配置名

12、配置名 OF 實(shí)體名實(shí)體名 IS FOR 選配結(jié)構(gòu)體名選配結(jié)構(gòu)體名 END FOR; END 配置名配置名; 配置語句根據(jù)不同情況,其說明語句有簡有繁。最簡單配置語句根據(jù)不同情況,其說明語句有簡有繁。最簡單的缺省配置格式為:的缺省配置格式為:例例4 4:加入了配置的加入了配置的4位等值比較器設(shè)計(jì)文件位等值比較器設(shè)計(jì)文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comp4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); y: OUT STD_LOGIC);END comp4;VHDL硬件描述語言二

13、-結(jié)構(gòu)體結(jié)構(gòu)體 1:ARCHITECTURE behavior OF comp4 ISBEGINComp: PROCESS(a, b) BEGIN IF a=b THEN y=1; ELSE y=0; END IF; END PROCESS comp;END behavior;-結(jié)構(gòu)體結(jié)構(gòu)體 2:ARCHITECTURE dataflow OF comp4 ISBEGIN y RETURN 1; WHEN 1= RETURN 0; WHEN Z= RETURN Z; END CASE; END invert;END BODY;VHDL硬件描述語言二l2.1.1.5 庫(庫(LIBRARY) 庫

14、是用來放置可編譯的設(shè)計(jì)單元的地方,通過其目錄可查詢庫是用來放置可編譯的設(shè)計(jì)單元的地方,通過其目錄可查詢和調(diào)用。和調(diào)用。 VHDL中的庫大致可歸納為中的庫大致可歸納為5種:種:IEEE庫、庫、STD庫、庫、ASIC矢量庫、矢量庫、WORK庫和用戶定義庫。庫和用戶定義庫。 v IEEE庫。庫。常用的資源庫。常用的資源庫。IEEE庫包含經(jīng)過庫包含經(jīng)過IEEE正式認(rèn)可的正式認(rèn)可的S T D _ L O G I C _ 11 6 4 包 集 合 和 某 些 公 司 提 供 的 一 些 包 集 合 , 如包 集 合 和 某 些 公 司 提 供 的 一 些 包 集 合 , 如STD_LOGIC_ARITH(

15、算術(shù)運(yùn)算庫)、(算術(shù)運(yùn)算庫)、STD_LOGIC_UNSIGNED等。等。v STD庫。庫。VHDL的標(biāo)準(zhǔn)庫。庫中存放有稱為的標(biāo)準(zhǔn)庫。庫中存放有稱為“standard”的標(biāo)準(zhǔn)包集合,的標(biāo)準(zhǔn)包集合,其中定義了多種常用的數(shù)據(jù)類型,均不加說明可直接引用。其中定義了多種常用的數(shù)據(jù)類型,均不加說明可直接引用。STD庫中還包含庫中還包含有稱為有稱為“textio”的包集合。在使用的包集合。在使用“textio”包集合中的數(shù)據(jù)時(shí),應(yīng)先說明庫包集合中的數(shù)據(jù)時(shí),應(yīng)先說明庫和包集合名,然后才可使用該包集合中的數(shù)據(jù)。和包集合名,然后才可使用該包集合中的數(shù)據(jù)。v ASIC矢量庫。矢量庫。在在VHDL語言中,為了進(jìn)行門

16、級仿真,各公司可提供面語言中,為了進(jìn)行門級仿真,各公司可提供面向向ASIC的邏輯門庫。在該庫中存放著與邏輯門一一對應(yīng)的實(shí)體。為了使用面的邏輯門庫。在該庫中存放著與邏輯門一一對應(yīng)的實(shí)體。為了使用面向向ASIC的庫,對庫進(jìn)行說明是必要的。的庫,對庫進(jìn)行說明是必要的。VHDL硬件描述語言二vWORK庫。庫。WORK庫是現(xiàn)行作業(yè)庫。設(shè)計(jì)者所描述的庫是現(xiàn)行作業(yè)庫。設(shè)計(jì)者所描述的VHDL語語句不需要任何說明,將都存放在句不需要任何說明,將都存放在WORK庫中。庫中。WORK庫對所有庫對所有設(shè)計(jì)都是隱含可見的,因此在使用該庫時(shí)無需進(jìn)行任何說明。設(shè)計(jì)都是隱含可見的,因此在使用該庫時(shí)無需進(jìn)行任何說明。v用戶定義

17、庫。用戶定義庫簡稱用戶庫,是由用戶自己創(chuàng)建并定用戶定義庫。用戶定義庫簡稱用戶庫,是由用戶自己創(chuàng)建并定義的庫。設(shè)計(jì)者可以把自己經(jīng)常使用的非標(biāo)準(zhǔn)(一般是自己開發(fā)義的庫。設(shè)計(jì)者可以把自己經(jīng)常使用的非標(biāo)準(zhǔn)(一般是自己開發(fā)的)包集合和實(shí)體等匯集成在一起定義成一個(gè)庫,作為對的)包集合和實(shí)體等匯集成在一起定義成一個(gè)庫,作為對VHDL標(biāo)準(zhǔn)庫的補(bǔ)充。用戶定義庫在使用時(shí)同樣要首先進(jìn)行說明。標(biāo)準(zhǔn)庫的補(bǔ)充。用戶定義庫在使用時(shí)同樣要首先進(jìn)行說明。vVITAL庫。庫。 VHDL硬件描述語言二庫說明語句的語法形式為:庫說明語句的語法形式為: LIBRARY 庫名;庫名; -說明使用什么庫說明使用什么庫USE 包集合名;包集

18、合名; -說明使用庫中哪一個(gè)包集合及包集說明使用庫中哪一個(gè)包集合及包集 合中的項(xiàng)目(如過程名、函數(shù)名等)合中的項(xiàng)目(如過程名、函數(shù)名等) 包集合名最多為三個(gè)層次,即 : library-name. packge-name. item-name LIBRARY 語句和USE語句的作用范圍: 僅限于緊跟起后的實(shí)體和結(jié)構(gòu)體。僅限于緊跟起后的實(shí)體和結(jié)構(gòu)體。VHDL硬件描述語言二l2.1.2 VHDL結(jié)構(gòu)體的基本子結(jié)構(gòu)結(jié)構(gòu)體的基本子結(jié)構(gòu) 在規(guī)模較大的電路設(shè)計(jì)中,整個(gè)電路將被分成若干個(gè)相對在規(guī)模較大的電路設(shè)計(jì)中,整個(gè)電路將被分成若干個(gè)相對獨(dú)立的模塊來描述。這樣,一個(gè)結(jié)構(gòu)體可以用幾個(gè)子結(jié)構(gòu),即獨(dú)立的模塊來描

19、述。這樣,一個(gè)結(jié)構(gòu)體可以用幾個(gè)子結(jié)構(gòu),即相對獨(dú)立的幾個(gè)模塊來構(gòu)成。相對獨(dú)立的幾個(gè)模塊來構(gòu)成。VHDL語言有以下語言有以下3種形式的子結(jié)種形式的子結(jié)構(gòu)描述語句:構(gòu)描述語句: BLOCK 語句結(jié)構(gòu)語句結(jié)構(gòu) PROCESS 語句結(jié)構(gòu)語句結(jié)構(gòu) SUBPROGRAMS 結(jié)構(gòu)結(jié)構(gòu)VHDL硬件描述語言二l2.1.2.1 塊(塊( BLOCK ) BLOCK語句的語法格式為:語句的語法格式為: 塊標(biāo)號(hào):塊標(biāo)號(hào):BLOCK (塊保護(hù)條件塊保護(hù)條件) 說明語句說明語句; BEGIN 并發(fā)處理語句并發(fā)處理語句; END BLOCK 標(biāo)號(hào)名;標(biāo)號(hào)名; 保護(hù)條件是可選項(xiàng),它是一個(gè)布爾表達(dá)式。如果有保護(hù)條件,則該條件應(yīng)用

20、保護(hù)條件是可選項(xiàng),它是一個(gè)布爾表達(dá)式。如果有保護(hù)條件,則該條件應(yīng)用圓括號(hào)括起來,放在圓括號(hào)括起來,放在BLOCK之后。保護(hù)條件的作用是:只有當(dāng)其為真時(shí),該之后。保護(hù)條件的作用是:只有當(dāng)其為真時(shí),該塊中的語句才被啟動(dòng)執(zhí)行;否則,該塊中的語句不被執(zhí)行。塊中的語句才被啟動(dòng)執(zhí)行;否則,該塊中的語句不被執(zhí)行。 BLOCK語句中所描述的各個(gè)語句是可以并行執(zhí)行的,它和書寫順序無關(guān)。語句中所描述的各個(gè)語句是可以并行執(zhí)行的,它和書寫順序無關(guān)。 一個(gè)大規(guī)模的電原理圖通??梢苑指畛啥鄰堊釉韴D,以便于設(shè)計(jì)和存檔。一個(gè)大規(guī)模的電原理圖通??梢苑指畛啥鄰堊釉韴D,以便于設(shè)計(jì)和存檔。同樣,在同樣,在VHDL程序設(shè)計(jì)中,構(gòu)

21、造體對應(yīng)整個(gè)電原理圖,而構(gòu)造體可由多個(gè)程序設(shè)計(jì)中,構(gòu)造體對應(yīng)整個(gè)電原理圖,而構(gòu)造體可由多個(gè)BLOCK塊組成,每一個(gè)塊組成,每一個(gè)BLOCK塊則對應(yīng)一張子原理圖。電原理圖的分割關(guān)系塊則對應(yīng)一張子原理圖。電原理圖的分割關(guān)系和和VHDL程序中用程序中用BLOCK塊分割構(gòu)造體的關(guān)系是一一對應(yīng)的。塊分割構(gòu)造體的關(guān)系是一一對應(yīng)的。VHDL硬件描述語言二例7 用BLOCK語句描述2選1電路的程序。 ENTITY mux2_1 IS PORT(d0, d1, sel: INSTD_LOGIC; q: OUT STD_LOGIC); END mux2_1; ARCHITECTURE amux OF mux2_1

22、 IS SIGNAL tmp1,tmp2,tmp3 : STD_LOGIC; BEGIN cale: BLOCK BEGINtmp1=d0 AND sel;tmp2=d1 AND (not sel);tmp3=tmp1 OR tmp2;q=tmp3; END BLOCK cale; END amux; 上述結(jié)構(gòu)體中只有一個(gè) BLOCK塊,若電路復(fù)雜時(shí)可由幾個(gè)BLOCK塊組成。2選1 數(shù)據(jù)選擇器d1d0qselu2u1u3tmp1tmp2tmp3VHDL硬件描述語言二例8 用帶保護(hù)條件的BLOCK語句描述一個(gè)鎖存器的結(jié)構(gòu)。 ENTITY latch ISPORT(d, clk: INSTD_LO

23、GIC; q, qn : OUT STD_LOGIC); END latch; ARCHITECTURE latch_a OF latch IS BEGIN g1:BLOCK(clk=1) BEGIN q=guarded d after 5ns; qn=guarded not(d) after 7ns; END BLOCK g1; END latch_a;qnq QD Cdclk 在在BLOCK塊中的兩個(gè)信號(hào)傳送語句都寫有前衛(wèi)關(guān)鍵詞塊中的兩個(gè)信號(hào)傳送語句都寫有前衛(wèi)關(guān)鍵詞guarded,表明只有,表明只有clk=1為真時(shí),這兩個(gè)語句才能執(zhí)行。為真時(shí),這兩個(gè)語句才能執(zhí)行。 (注意注意 :這里的綜合

24、工具不支持:這里的綜合工具不支持 guarded block 語句和語句和 after 短語短語。) )VHDL硬件描述語言二l2.1.2.2 進(jìn)程(進(jìn)程( PROCESS ) PROCESS語句是語句是VHDL中描述硬件系統(tǒng)并發(fā)行為的最常用、中描述硬件系統(tǒng)并發(fā)行為的最常用、最基本的語句。最基本的語句。進(jìn)程語句的一般格式為;進(jìn)程語句的一般格式為; 進(jìn)程名:進(jìn)程名: PROCESS (敏感信號(hào)表敏感信號(hào)表)進(jìn)程說明語句進(jìn)程說明語句 BEGIN順序描述語句;順序描述語句; END PROCESS 進(jìn)程名進(jìn)程名; Example:PROCESS ( CLK )BEGINIF CLKEVENT AND

25、 CLK = 1 THENQ1= D; END IF;Q=Q1;END PROCESS;VHDL硬件描述語言二何時(shí) PROCESS 被執(zhí)行?何時(shí) PROCESS 執(zhí)行結(jié)束 ?可以有多個(gè)進(jìn)程出現(xiàn)嗎?多個(gè)進(jìn)程之間如何通信?與C 代碼中的函數(shù) 的區(qū)別 ?VHDL硬件描述語言二PROCESS ( CLK )BEGINIF CLKEVENT AND CLK = 1 THENQ1= D; END IF;Q=Q1;END PROCESS;CLK 信號(hào)信號(hào) 發(fā)生變化時(shí)發(fā)生變化時(shí) PROCESS 被執(zhí)行被執(zhí)行VHDL硬件描述語言二 LIBARY IEEE; USE IEEE.STD_LOGIC_1164.ALL

26、; ENTITY and2 IS PORT ( a:INSTD_LOGIC;b:INSTD_LOGIC;q:OUT STD_LOGIC); END ENTITY and2; ARCHITECTURE bhv OF and2 IS SIGNALQ1:STD_LOGIC; BEGIN P0: process(a,b) beginq = a and b; end process p0; END ARCHITECTURE bhv;VHDL硬件描述語言二 ARCHITECTURE BEHAV OFmulIS SIGNAL temp:BIT BEGIN p_a:PROCESS ( a, b, selx )

27、BEGINIF ( selx=0 ) THENtemp=a;ELSEtemp=b;END IF;END PROCESS p_a; p_b:PROCESS ( temp, c, sely )BEGINIF ( sely=0 ) THENdata_out=temp;ELSEdata_out=datac;END IF;END PROCESS p_b; END ARCHITECTURE BEHAV;VHDL硬件描述語言二VHDL硬件描述語言二VHDL硬件描述語言二 敏感信號(hào)表所標(biāo)明的信號(hào)是用來敏感信號(hào)表所標(biāo)明的信號(hào)是用來啟動(dòng)進(jìn)程啟動(dòng)進(jìn)程的。敏感信號(hào)表中的信號(hào)無論哪的。敏感信號(hào)表中的信號(hào)無論哪一個(gè)發(fā)生變

28、化(如由一個(gè)發(fā)生變化(如由0變變1或由或由1變變0 )都將啟動(dòng)該)都將啟動(dòng)該P(yáng)ROCESS語句。語句。一旦啟動(dòng)后,一旦啟動(dòng)后, PROCESS中的語句將從上至下逐句執(zhí)行一遍。當(dāng)最后一個(gè)執(zhí)行中的語句將從上至下逐句執(zhí)行一遍。當(dāng)最后一個(gè)執(zhí)行完畢以后,即返回到開始的完畢以后,即返回到開始的PROCESS語句,等待下一次啟動(dòng)語句,等待下一次啟動(dòng)。因此,只要因此,只要PROCESS中指定的信號(hào)變化一次,該中指定的信號(hào)變化一次,該P(yáng)ROCESS語句就會(huì)執(zhí)行一遍。語句就會(huì)執(zhí)行一遍。 PROCESS內(nèi)部內(nèi)部各語句之間是順序關(guān)系各語句之間是順序關(guān)系 。在系統(tǒng)仿真時(shí),。在系統(tǒng)仿真時(shí), PROCESS語句語句是按書寫

29、順序一條一條向下執(zhí)行的。而不象是按書寫順序一條一條向下執(zhí)行的。而不象BLOCK中的語句可以并行執(zhí)行。中的語句可以并行執(zhí)行。 若構(gòu)造體中有多個(gè)進(jìn)程存在,若構(gòu)造體中有多個(gè)進(jìn)程存在,各進(jìn)程之間的關(guān)系是并行關(guān)系各進(jìn)程之間的關(guān)系是并行關(guān)系 ;進(jìn)程之間的;進(jìn)程之間的通信通信則一邊通過接口由信號(hào)傳遞,一邊并行地同步執(zhí)行。則一邊通過接口由信號(hào)傳遞,一邊并行地同步執(zhí)行。VHDL硬件描述語言二l2.1.2.3 子程序(子程序( SUBPROGRAM )VHDL的子程序有兩種類型:過程(PROCEDURE)函數(shù)(FUNCTION)VHDL硬件描述語言二 過程(過程(PROCEDURE)過程語句的結(jié)構(gòu):過程語句的結(jié)構(gòu)

30、:PROCEDURE 過程名(參數(shù)過程名(參數(shù)1;參數(shù);參數(shù)2; )IS定義語句定義語句;BEGIN順序處理語句順序處理語句;END 過程名;過程名;過程語句的調(diào)用格式:過程語句的調(diào)用格式:過程名(實(shí)際參數(shù)表);過程名(實(shí)際參數(shù)表);VHDL硬件描述語言二例10 設(shè)計(jì)一個(gè)從兩個(gè)整數(shù)中求取最大值的過程。PROCEDURE max(a, b: IN INTEGER; y:OUT INTEGER) ISBEGINIF (ab) THEN y=b;ELSE yb) THEN tmp:=a;ELSE tmp:=b; END IF;RETURN tmp; END max; 函數(shù)的參數(shù)均為輸入?yún)?shù)。函數(shù)的參

31、數(shù)均為輸入?yún)?shù)。 函數(shù)調(diào)用返回一個(gè)指定數(shù)據(jù)類型的值。函數(shù)調(diào)用返回一個(gè)指定數(shù)據(jù)類型的值。VHDL硬件描述語言二例11 在結(jié)構(gòu)體中調(diào)用求最大值的函數(shù)。LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY dpeak IS PORT(clk, set : IN STD_LOGIC; date : IN STD_LOGIC_VECTOR(5 downto 0); dout : OUT STD_LOGIC_VECTOR(5 downto 0);END dpeak;VHDL硬件描述語言二ARCHITECTURE rtl OF dpeak ISSIGNAL peak

32、 : STD_LOGIC_VECTOR(5 downto 0);BEGINdout=peak;PROCESS (clk)BEGINIF (clkevent and clk=1) THEN IF (set=1) THEN peak=date; ELSE peak= max(date,peak); END IF;END IF;END PROCESS;END rtl;VHDL硬件描述語言二子程序的特點(diǎn):子程序的特點(diǎn): 子程序可以在結(jié)構(gòu)體或程序包的任何位置被調(diào)用,而且可以反子程序可以在結(jié)構(gòu)體或程序包的任何位置被調(diào)用,而且可以反復(fù)調(diào)用。復(fù)調(diào)用。 子程序是一個(gè)非重入的程序,即子程序返回后才能再被調(diào)用。子程

33、序是一個(gè)非重入的程序,即子程序返回后才能再被調(diào)用。在調(diào)用時(shí)子程序首先要進(jìn)行初始化,執(zhí)行結(jié)束后子程序終止;再在調(diào)用時(shí)子程序首先要進(jìn)行初始化,執(zhí)行結(jié)束后子程序終止;再調(diào)用時(shí)要再進(jìn)行初始化。因此,子程序內(nèi)部的值不能保持。調(diào)用時(shí)要再進(jìn)行初始化。因此,子程序內(nèi)部的值不能保持。 VHDL的子程序具有可重載性,即允許有許多重名的子程序,的子程序具有可重載性,即允許有許多重名的子程序,但這些子程序的參數(shù)類型和返回?cái)?shù)值類型是不同的。但這些子程序的參數(shù)類型和返回?cái)?shù)值類型是不同的。VHDL硬件描述語言二u 2.2.1 標(biāo)識(shí)符標(biāo)識(shí)符u 2.2.2 數(shù)據(jù)對象數(shù)據(jù)對象u 2.2.3 數(shù)據(jù)類型數(shù)據(jù)類型u 2.2.4 運(yùn)算符

34、與操作符運(yùn)算符與操作符u 2.2.5 屬性屬性VHDL硬件描述語言二標(biāo)識(shí)符規(guī)則標(biāo)識(shí)符規(guī)則: 標(biāo)識(shí)符規(guī)則是在書寫標(biāo)識(shí)符規(guī)則是在書寫VHDL程序時(shí)的一般文字規(guī)則。基本標(biāo)程序時(shí)的一般文字規(guī)則。基本標(biāo)識(shí)符由識(shí)符由字母字母、數(shù)字?jǐn)?shù)字以及以及下劃線下劃線字符組成,且具有以下特征要求:字符組成,且具有以下特征要求: 第一個(gè)字符必須是字母;第一個(gè)字符必須是字母; 最后一個(gè)字符不能是下劃線;最后一個(gè)字符不能是下劃線; 不允許連續(xù)兩個(gè)下劃線;不允許連續(xù)兩個(gè)下劃線; 在標(biāo)識(shí)符中大、小寫字母是等效的。在標(biāo)識(shí)符中大、小寫字母是等效的。 VHDL中的注釋文字一律為中的注釋文字一律為2個(gè)連續(xù)的連接線個(gè)連續(xù)的連接線“-”,可

35、以出,可以出現(xiàn)在任一語句后面,也可以出現(xiàn)在獨(dú)立行;現(xiàn)在任一語句后面,也可以出現(xiàn)在獨(dú)立行; VHDL的保留字(關(guān)鍵字)不能用于標(biāo)識(shí)符;的保留字(關(guān)鍵字)不能用于標(biāo)識(shí)符;2.2.1 標(biāo)識(shí)符標(biāo)識(shí)符VHDL硬件描述語言二如下標(biāo)識(shí)符是非法的:如下標(biāo)識(shí)符是非法的: _ tx_clk 8B10B large#number link_bar select rx_clk_例如:如下標(biāo)識(shí)符是合法的:例如:如下標(biāo)識(shí)符是合法的: tx_clk Three_state_Enable sel7D HIT_1124-標(biāo)識(shí)符必須起始于字母標(biāo)識(shí)符必須起始于字母-只能是字母、數(shù)字、下劃線只能是字母、數(shù)字、下劃線-不能有連續(xù)兩個(gè)下

36、劃線不能有連續(xù)兩個(gè)下劃線-關(guān)鍵字(保留字)不能用于標(biāo)識(shí)符關(guān)鍵字(保留字)不能用于標(biāo)識(shí)符-最后字符不能是下劃線最后字符不能是下劃線VHDL硬件描述語言二2.2.2 數(shù)據(jù)對象數(shù)據(jù)對象 在在VHDL中,數(shù)據(jù)對象是可以賦予一個(gè)值的客體。常用的數(shù)中,數(shù)據(jù)對象是可以賦予一個(gè)值的客體。常用的數(shù)據(jù)對象為據(jù)對象為常量常量、變量變量 和和信號(hào)信號(hào),在使用前必須給予說明。,在使用前必須給予說明。 常量(常量(CONSTANT) 常量常量是指在設(shè)計(jì)描述中不會(huì)變化的值。在是指在設(shè)計(jì)描述中不會(huì)變化的值。在VHDL描述中,一般描述中,一般用常量名代替數(shù)值。用常量名代替數(shù)值。常量說明語句的一般格式為:常量說明語句的一般格式為

37、: CONSTANT 常量名常量名,常量名,常量名:數(shù)據(jù)類型:數(shù)據(jù)類型 := 取值;取值; 例如:例如: CONSTANT width : integer : = 8 ; 常量所賦值和定義的數(shù)據(jù)類型應(yīng)一致。常量所賦值和定義的數(shù)據(jù)類型應(yīng)一致。 常量一旦賦值就不能再改變。常量一旦賦值就不能再改變。VHDL硬件描述語言二 變量(變量(VARIABLE) 變量是暫存數(shù)據(jù)的量。變量是暫存數(shù)據(jù)的量。變量說明語句的格式是:變量說明語句的格式是: VARIABLE 變量名變量名,變量名,變量名:數(shù)據(jù)類型:數(shù)據(jù)類型 :=初始值初始值; 例如:例如:VARIABLE count: INTEGER RANGE 0

38、TO 99 : =0 變量是一個(gè)變量是一個(gè)局部量局部量 ,它只用于進(jìn)程和子程序。變量必須在,它只用于進(jìn)程和子程序。變量必須在進(jìn)程進(jìn)程或子程序或子程序的說明區(qū)域中加以說明。的說明區(qū)域中加以說明。 變量賦值是變量賦值是直接的、非預(yù)設(shè)的直接的、非預(yù)設(shè)的 ,它在某一時(shí)刻僅包含一個(gè)值。,它在某一時(shí)刻僅包含一個(gè)值。變量的賦值變量的賦值立即生效,不存在延時(shí)行為立即生效,不存在延時(shí)行為。變量常用在實(shí)現(xiàn)某種運(yùn)。變量常用在實(shí)現(xiàn)某種運(yùn)算的賦值語句中。算的賦值語句中。 賦值語句中的表達(dá)式必須與目標(biāo)變量賦值語句中的表達(dá)式必須與目標(biāo)變量具有相同的數(shù)據(jù)類型具有相同的數(shù)據(jù)類型。變量賦值語句格式為:變量賦值語句格式為: 目標(biāo)變

39、量名目標(biāo)變量名 := 表達(dá)式;表達(dá)式;VHDL硬件描述語言二 信號(hào)(信號(hào)(SIGNAL) 信號(hào)是電子電路內(nèi)部硬件實(shí)體相互連接的抽象表示。信號(hào)能夠信號(hào)是電子電路內(nèi)部硬件實(shí)體相互連接的抽象表示。信號(hào)能夠代表連線,也可內(nèi)連元件,端口也是信號(hào)。代表連線,也可內(nèi)連元件,端口也是信號(hào)。信號(hào)說明語句的格式為:信號(hào)說明語句的格式為: SIGNAL 信號(hào)名信號(hào)名,信號(hào)名,信號(hào)名 :數(shù)據(jù)類型:數(shù)據(jù)類型 :=初始值初始值; 例如:例如: SIGNAL count: BIT_VECTOR(3 downto 0); 信號(hào)包括信號(hào)包括I/O引腳信號(hào)以及引腳信號(hào)以及IC內(nèi)部緩沖信號(hào),有硬件電路與之內(nèi)部緩沖信號(hào),有硬件電路與

40、之 對應(yīng),故對應(yīng),故信號(hào)之間的傳遞有實(shí)際的附加延時(shí)信號(hào)之間的傳遞有實(shí)際的附加延時(shí)。 信號(hào)通常在構(gòu)造體、包集合和實(shí)體中說明;信號(hào)信號(hào)通常在構(gòu)造體、包集合和實(shí)體中說明;信號(hào)不能在進(jìn)程中不能在進(jìn)程中 說明說明(但可以在進(jìn)程中使用)。(但可以在進(jìn)程中使用)。VHDL硬件描述語言二 硬件中的信號(hào)總是硬件中的信號(hào)總是同時(shí)同時(shí)工作的,即信號(hào)工作的,即信號(hào)同時(shí)同時(shí)在各個(gè)模塊中流在各個(gè)模塊中流動(dòng),這就是硬件電路的動(dòng),這就是硬件電路的并發(fā)性并發(fā)性 。HDL體現(xiàn)了實(shí)際電路中信號(hào)體現(xiàn)了實(shí)際電路中信號(hào)“同時(shí)同時(shí)”流動(dòng)的這種基本特性。流動(dòng)的這種基本特性。信號(hào)賦值語句格式為:信號(hào)賦值語句格式為: 目標(biāo)信號(hào)名目標(biāo)信號(hào)名 =

41、表達(dá)式;表達(dá)式; 賦值語句中的表達(dá)式必須與目標(biāo)信號(hào)賦值語句中的表達(dá)式必須與目標(biāo)信號(hào)具有相同的數(shù)據(jù)類型具有相同的數(shù)據(jù)類型。VHDL硬件描述語言二1. 變量變量 是一個(gè)局部量,只能用于進(jìn)程或子程序中;是一個(gè)局部量,只能用于進(jìn)程或子程序中; 信號(hào)信號(hào) 是一個(gè)全局量,它可以用來進(jìn)行進(jìn)程之間的通信。是一個(gè)全局量,它可以用來進(jìn)行進(jìn)程之間的通信。2. 變量賦值變量賦值 立即生效,不存在延時(shí)行為;立即生效,不存在延時(shí)行為; 信號(hào)賦值信號(hào)賦值 具有非立即性,信號(hào)之間的傳遞具有延時(shí)性。具有非立即性,信號(hào)之間的傳遞具有延時(shí)性。4. 信號(hào)賦值信號(hào)賦值 可以出現(xiàn)在進(jìn)程中,也可以直接出現(xiàn)在結(jié)構(gòu)體中,可以出現(xiàn)在進(jìn)程中,也可

42、以直接出現(xiàn)在結(jié)構(gòu)體中,但它們的但它們的運(yùn)行含義運(yùn)行含義不同:前者屬順序信號(hào)賦值,此時(shí)的賦值操作不同:前者屬順序信號(hào)賦值,此時(shí)的賦值操作要視進(jìn)程是否已被啟動(dòng);后者屬并行信號(hào)賦值,其賦值操作是各要視進(jìn)程是否已被啟動(dòng);后者屬并行信號(hào)賦值,其賦值操作是各自獨(dú)立并行發(fā)生的。自獨(dú)立并行發(fā)生的。3. 變量變量 用作進(jìn)程中暫存數(shù)據(jù)的單元;用作進(jìn)程中暫存數(shù)據(jù)的單元; 信號(hào)信號(hào) 用作電路中的信號(hào)連線。用作電路中的信號(hào)連線。VHDL硬件描述語言二5. 在進(jìn)程中在進(jìn)程中變量和信號(hào)的賦值形式與操作過程不同變量和信號(hào)的賦值形式與操作過程不同: 在變量的賦值語句中在變量的賦值語句中,該語句一旦被執(zhí)行,其值立即被賦予變,該語

43、句一旦被執(zhí)行,其值立即被賦予變量。在執(zhí)行下一條語句時(shí),該變量的值即為上一句新賦的值。量。在執(zhí)行下一條語句時(shí),該變量的值即為上一句新賦的值。 在信號(hào)的賦值語句中在信號(hào)的賦值語句中,該語句即使被執(zhí)行,其值不會(huì)使信號(hào)立,該語句即使被執(zhí)行,其值不會(huì)使信號(hào)立即發(fā)生代入,在下一條語句執(zhí)行時(shí),仍使用原來的信號(hào)值。直到即發(fā)生代入,在下一條語句執(zhí)行時(shí),仍使用原來的信號(hào)值。直到進(jìn)程結(jié)束之后,所有信號(hào)賦值的實(shí)際代入才順序進(jìn)行處理。因此,進(jìn)程結(jié)束之后,所有信號(hào)賦值的實(shí)際代入才順序進(jìn)行處理。因此,實(shí)際代入過程和賦值語句的執(zhí)行是分開進(jìn)行的。實(shí)際代入過程和賦值語句的執(zhí)行是分開進(jìn)行的。 如例如例12所示。所示。VHDL硬件描

44、述語言二例例12 12 信號(hào)和變量值代入的區(qū)別舉例信號(hào)和變量值代入的區(qū)別舉例 PROCESS (a,b,c,d)BEGIN d=a; x=b+d; d=c; y=b+d; END PROCESS;結(jié)果:結(jié)果:x=b+c; y=b+c;PROCESS (a,b,c)VARIABLE d:std_logic_vector(3 downto 0);BEGIN d:=a; x=b+d; d:=c; y=b+d;END PROCESS;結(jié)果:結(jié)果: x=b+a;y=b+c;-信號(hào)量的值是將進(jìn)程語句最后帶入的的信號(hào)量的值是將進(jìn)程語句最后帶入的的值作為最終值值作為最終值-變量的值一經(jīng)帶入則立即改變。變量的值

45、一經(jīng)帶入則立即改變。 VHDL硬件描述語言二2.2.3 數(shù)據(jù)類型數(shù)據(jù)類型 標(biāo)準(zhǔn)數(shù)據(jù)類型標(biāo)準(zhǔn)數(shù)據(jù)類型 用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型 數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換VHDL硬件描述語言二1. 標(biāo)準(zhǔn)數(shù)據(jù)類型標(biāo)準(zhǔn)數(shù)據(jù)類型u VHDL提供的提供的10種標(biāo)準(zhǔn)數(shù)據(jù)類型。種標(biāo)準(zhǔn)數(shù)據(jù)類型。(2 2)RealReal(實(shí)數(shù))。(實(shí)數(shù))。取值范圍為取值范圍為 1.0E+38 +1.0E+38。和整數(shù)一樣,。和整數(shù)一樣,實(shí)數(shù)能被約束。由于實(shí)數(shù)運(yùn)算需要大量的資源,因此綜合工具常常并不支持實(shí)數(shù)能被約束。由于實(shí)數(shù)運(yùn)算需要大量的資源,因此綜合工具常常并不支持實(shí)數(shù)類型。實(shí)數(shù)類型。(3 3)BitBit(位)。(位)。 只

46、有兩種取值,即只有兩種取值,即 0 和和 1 ,可用于描述信號(hào)的取值。,可用于描述信號(hào)的取值。(4 4)Bit_VectorBit_Vector(位矢量)。(位矢量)。 是用雙引號(hào)括起來的一組數(shù)據(jù),每位只是用雙引號(hào)括起來的一組數(shù)據(jù),每位只有兩種取值:有兩種取值:0 和和 1。在其前面可加以數(shù)制標(biāo)記,如。在其前面可加以數(shù)制標(biāo)記,如X(16進(jìn)制)、進(jìn)制)、B(2進(jìn)制、進(jìn)制、默認(rèn))、默認(rèn))、O(8進(jìn)制)等。位矢量常用于表示總線的狀態(tài)。進(jìn)制)等。位矢量常用于表示總線的狀態(tài)。(1 1)IntegerInteger(整數(shù))。(整數(shù))。 取值范圍為取值范圍為 (2311)(2311)。一個(gè))。一個(gè)整數(shù)類型和

47、要被綜合進(jìn)邏輯的信號(hào)或變量在其范圍上應(yīng)有約束。例如:整數(shù)類型和要被綜合進(jìn)邏輯的信號(hào)或變量在其范圍上應(yīng)有約束。例如:variable a: integer range 255 to 255;整數(shù)可通過語句內(nèi)帶符號(hào)矢量來表達(dá)給綜合工具。整數(shù)可通過語句內(nèi)帶符號(hào)矢量來表達(dá)給綜合工具。VHDL硬件描述語言二(5 5)BooleanBoolean(布爾量)。(布爾量)。 又稱邏輯量。有又稱邏輯量。有“真真”、“假假”兩種狀態(tài),兩種狀態(tài),分別用分別用TRUE和和FALSE標(biāo)記。用于關(guān)系運(yùn)算和邏輯運(yùn)算。標(biāo)記。用于關(guān)系運(yùn)算和邏輯運(yùn)算。(6 6)CharacterCharacter(字符)。(字符)。是用單引號(hào)括

48、起來的一個(gè)字母、數(shù)字、空格是用單引號(hào)括起來的一個(gè)字母、數(shù)字、空格或一些特殊字符(如或一些特殊字符(如$、%等)。字符區(qū)分大、小寫字母。等)。字符區(qū)分大、小寫字母。(7 7)StringString(字符串)。(字符串)。是用雙引號(hào)括起來的一個(gè)字符序列。字符串區(qū)是用雙引號(hào)括起來的一個(gè)字符序列。字符串區(qū)分大、小寫字母。常用于程序的提示和結(jié)果說明等。分大、小寫字母。常用于程序的提示和結(jié)果說明等。(8 8)TimeTime(時(shí)間)。(時(shí)間)。時(shí)間的取值范圍從時(shí)間的取值范圍從 (2311)(2311)。時(shí)間)。時(shí)間由整數(shù)值、一個(gè)以上空格以及時(shí)間單位組成。常用的時(shí)間單位有:由整數(shù)值、一個(gè)以上空格以及時(shí)間單

49、位組成。常用的時(shí)間單位有:fs、ns、s、ms、s、min、hr等。時(shí)間常用于指定時(shí)間延時(shí)和標(biāo)記仿真時(shí)刻。等。時(shí)間常用于指定時(shí)間延時(shí)和標(biāo)記仿真時(shí)刻。VHDL硬件描述語言二 上述上述10種數(shù)據(jù)類型是種數(shù)據(jù)類型是VHDL種標(biāo)準(zhǔn)的數(shù)據(jù)類型,在種標(biāo)準(zhǔn)的數(shù)據(jù)類型,在編程時(shí)可以直接引用。如果用戶需使用其它的數(shù)據(jù)類編程時(shí)可以直接引用。如果用戶需使用其它的數(shù)據(jù)類型,則必須進(jìn)行自定義。型,則必須進(jìn)行自定義。(9 9)NaturalNatural(自然數(shù))和(自然數(shù))和PositivePositive(正整數(shù))。(正整數(shù))。是整數(shù)類型的子是整數(shù)類型的子類型。自然數(shù)取值范圍為類型。自然數(shù)取值范圍為0 (2311);

50、正整數(shù)是大于);正整數(shù)是大于 0 的整數(shù)。的整數(shù)。(1010)Severity LevelSeverity Level(錯(cuò)誤等級)。(錯(cuò)誤等級)。錯(cuò)誤等級分為:錯(cuò)誤等級分為:NOTE(注意注意)、WARNING(警告)、(警告)、ERROR(出錯(cuò))、(出錯(cuò))、FAILURE(失?。┧募?,用于提示(失?。┧募?,用于提示系統(tǒng)的錯(cuò)誤等級。系統(tǒng)的錯(cuò)誤等級。 VHDL硬件描述語言二數(shù)據(jù)類型數(shù)據(jù)類型含含 義義整數(shù)整數(shù)整數(shù)整數(shù)32位,位, 取值范圍:取值范圍:(2311) (2311)實(shí)數(shù)實(shí)數(shù)浮點(diǎn)數(shù),取值范圍:浮點(diǎn)數(shù),取值范圍: -1.0e+38 1.0e+38位位邏輯邏輯0或或1位矢量位矢量位矢量,用雙引

51、號(hào)括起來的一組數(shù)據(jù)位矢量,用雙引號(hào)括起來的一組數(shù)據(jù)布爾量布爾量邏輯邏輯“真真” 或或“假假”,用,用TRUE和和FALSE標(biāo)記標(biāo)記字符字符ASCII字符字符字符串字符串字符矢量字符矢量時(shí)間時(shí)間時(shí)間單位時(shí)間單位fs,ps,ns,s,ms,sec,min,hr自然數(shù)、正整數(shù)自然數(shù)、正整數(shù)整數(shù)的子集:自然數(shù)取值范圍為整數(shù)的子集:自然數(shù)取值范圍為0 (2311);正);正整數(shù)是大于整數(shù)是大于0的整數(shù)的整數(shù)錯(cuò)誤等級錯(cuò)誤等級Note,warning,error,failure標(biāo)準(zhǔn)數(shù)據(jù)類型VHDL硬件描述語言二u IEEE庫庫STD_LOGIC_1164程序包中定義的程序包中定義的STD_LOGIC類型和類

52、型和STD_LOGIC_VECTOR類型。類型。STD_LOGIC類型的數(shù)據(jù)可以具有九種取值,其含義如下類型的數(shù)據(jù)可以具有九種取值,其含義如下:U:初始值:初始值X:不定態(tài):不定態(tài)0: 強(qiáng)制強(qiáng)制01: 強(qiáng)制強(qiáng)制1Z: 高阻態(tài)高阻態(tài)W:弱信號(hào)不定態(tài):弱信號(hào)不定態(tài)L:弱信號(hào):弱信號(hào)0H:弱信號(hào):弱信號(hào)1_:不可能情況(可忽略值):不可能情況(可忽略值)其中,其中,“X”方便了系統(tǒng)仿真,方便了系統(tǒng)仿真,“Z”方便了雙向總線的描述。方便了雙向總線的描述。VHDL硬件描述語言二STD_LOGIC_VECTOR類型定義如下類型定義如下: TYPE STD_LOGIC_VECTOR IS ARRAY (NA

53、TURAL RANGE ) OF STD_LOGIC;VHDL硬件描述語言二2. 用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型 VHDL允許用戶自己定義數(shù)據(jù)類型。允許用戶自己定義數(shù)據(jù)類型。常用的常用的用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型主要有:主要有: (1 1)枚舉()枚舉(EnumeratedEnumerated)類型。)類型。 通過列舉某類變量所有可能的通過列舉某類變量所有可能的取值來加以定義。對這些取值,一般使用自然語言中有相應(yīng)含義取值來加以定義。對這些取值,一般使用自然語言中有相應(yīng)含義的單詞或字符序列來代表,以便于閱讀和理解。的單詞或字符序列來代表,以便于閱讀和理解。自定義數(shù)據(jù)類型說明語句的

54、一般格式是:自定義數(shù)據(jù)類型說明語句的一般格式是: TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 ,數(shù)據(jù)類型名,數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義數(shù)據(jù)類型定義;枚舉類型定義的格式為:枚舉類型定義的格式為: TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS (元素(元素1,元素,元素2,);); 該數(shù)據(jù)類型括號(hào)中的值自左向右該數(shù)據(jù)類型括號(hào)中的值自左向右按升序排列,中間用逗號(hào)分隔。按升序排列,中間用逗號(hào)分隔。在在VHDL中,對其中每一個(gè)元素中,對其中每一個(gè)元素都賦予一個(gè)位置編號(hào),最左邊的都賦予一個(gè)位置編號(hào),最左邊的元素開始記為元素開始記為“0” ,向右依次遞,向右依次遞增增“1” 。這為。這為“屬性屬性”提供了一提供了一個(gè)訪問位

55、置編號(hào)的機(jī)制。個(gè)訪問位置編號(hào)的機(jī)制。VHDL硬件描述語言二例如,在程序包例如,在程序包STD_LOGIC_1164中對中對STD_LOGIC的定義為的定義為TYPE STD_LOGIC IS ( U ,X ,0 ,1 ,Z ,W ,L ,H ,_ ); (2) 數(shù)組(數(shù)組(ARRAY)類型。)類型。 又稱為向量,是多個(gè)相同類型的又稱為向量,是多個(gè)相同類型的數(shù)據(jù)集合。它可以是二維的和多維的。數(shù)據(jù)集合。它可以是二維的和多維的。數(shù)組類型定義的格式為:數(shù)組類型定義的格式為: TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS ARRAY (范圍)(范圍) OF 元素類型名;元素類型名; 范圍一項(xiàng)規(guī)定數(shù)組下標(biāo)的類型和

56、范圍。默認(rèn)的下標(biāo)類型是整型,范圍一項(xiàng)規(guī)定數(shù)組下標(biāo)的類型和范圍。默認(rèn)的下標(biāo)類型是整型,但也可以使用其它數(shù)據(jù)類型,這就需要在范圍中標(biāo)明下標(biāo)的類型。但也可以使用其它數(shù)據(jù)類型,這就需要在范圍中標(biāo)明下標(biāo)的類型。 例如:例如:TYPE count1 IS ARRAY ( STD_LOGIC _ DOWNTO U ) OF INTEGER; 多維數(shù)組需要用兩個(gè)以上的范圍來多維數(shù)組需要用兩個(gè)以上的范圍來描述,而且多維數(shù)組不能生成邏輯描述,而且多維數(shù)組不能生成邏輯電路,因此只能用于生成仿真圖形電路,因此只能用于生成仿真圖形及硬件的抽象模型。及硬件的抽象模型。VHDL硬件描述語言二(3) 紀(jì)錄紀(jì)錄(RECORD)

57、類型。類型。 是多個(gè)不同類型的數(shù)據(jù)集合。是多個(gè)不同類型的數(shù)據(jù)集合。 紀(jì)錄類型定義的格式為:紀(jì)錄類型定義的格式為:TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS RECORD元素名:元素名: 數(shù)據(jù)類型名;數(shù)據(jù)類型名;元素名:元素名: 數(shù)據(jù)類型名;數(shù)據(jù)類型名; END RECORD; 紀(jì)錄適用于描述總線、仿真等。對于記錄類型的對象進(jìn)行紀(jì)錄適用于描述總線、仿真等。對于記錄類型的對象進(jìn)行單元素賦值時(shí),可在記錄類型對象名后加點(diǎn)單元素賦值時(shí),可在記錄類型對象名后加點(diǎn)“”,然后再加,然后再加賦值元素的元素名。賦值元素的元素名。 VHDL硬件描述語言二(4)時(shí)間()時(shí)間(TIME)類型(物理類型)。表示時(shí)間的數(shù)據(jù)類型,

58、)類型(物理類型)。表示時(shí)間的數(shù)據(jù)類型, 在仿真時(shí)是必不可少的。在仿真時(shí)是必不可少的。 時(shí)間類型定義的一般格式為:時(shí)間類型定義的一般格式為:TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS 范圍;范圍;UNITS 基本單位;基本單位; 單位;單位;END UNITS; VHDL硬件描述語言二例如:例如:TYPE time IS range 1e18 TO 1e18;UNITS fs; ps=1000fs; ns=1000ps; s=1000ns; ms=1000s; set=1000ms; min=60set; hr=60min;END UNITS; 這里的基本單位是“fs”。時(shí)間是物理類型的數(shù)據(jù),當(dāng)然對

59、容量、阻抗值也可以做定義。VHDL硬件描述語言二(5) 子類型(子類型(SYBTYPE)。子類型是一個(gè)具有限制條件的類型,)。子類型是一個(gè)具有限制條件的類型,通常用來定義具有一定限制條件的基本類型的數(shù)據(jù)對象。通常用來定義具有一定限制條件的基本類型的數(shù)據(jù)對象。子類型定義的一般格式為:子類型定義的一般格式為: SYBTYPE 子類型名子類型名 IS 數(shù)據(jù)類型名數(shù)據(jù)類型名約束范圍約束范圍; 例如:如下例如:如下 Byte 被定義作為一個(gè)子類型,而后數(shù)據(jù)對象被定義被定義作為一個(gè)子類型,而后數(shù)據(jù)對象被定義為從屬于該子類型。為從屬于該子類型。SYBTYPE Byte IS Bit_Vector(7 dow

60、nto 0);SIGNAL Byte1, Byte2:Byte;SIGNAL Data1, Data2:Byte;SIGNAL Addr1, Addr2:Byte;VHDL硬件描述語言二3. 數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換 在在VHDL程序中,不同類型的對象不能代入,因此要進(jìn)行類型程序中,不同類型的對象不能代入,因此要進(jìn)行類型轉(zhuǎn)換。類型轉(zhuǎn)換的方法有:轉(zhuǎn)換。類型轉(zhuǎn)換的方法有:(1)類型標(biāo)記法。用類型名稱來實(shí)現(xiàn)關(guān)系密切的標(biāo)量類型之間的)類型標(biāo)記法。用類型名稱來實(shí)現(xiàn)關(guān)系密切的標(biāo)量類型之間的 轉(zhuǎn)換。轉(zhuǎn)換。 例如:例如:VARIABLE x:INTEGER;VARIABLE y:REAL; 使用類型標(biāo)記(即類型名)實(shí)現(xiàn)類型轉(zhuǎn)換時(shí),可采用賦值

溫馨提示

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

最新文檔

評論

0/150

提交評論