大規(guī)模集成電路硬件描述語言VHDL_第1頁
大規(guī)模集成電路硬件描述語言VHDL_第2頁
大規(guī)模集成電路硬件描述語言VHDL_第3頁
大規(guī)模集成電路硬件描述語言VHDL_第4頁
大規(guī)模集成電路硬件描述語言VHDL_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第五章 大規(guī)模集成電路硬件描述語言 (VHDL)80年代以來,采用計(jì)算機(jī)輔助設(shè)計(jì) CAD技術(shù)設(shè)計(jì)硬件電路在全世界范圍得到了普及和應(yīng)用。一開始,僅用 CAD來實(shí)現(xiàn)印刷板的布線,以后才慢慢實(shí)現(xiàn)了插件板級規(guī)模的設(shè)計(jì)和仿真,其中最具代表性的設(shè)計(jì)工具是OrCad和Tango,它們的出現(xiàn)使電子電路設(shè)計(jì)和印刷板布線工藝實(shí)現(xiàn)了自動化。但這種設(shè)計(jì)方法就其本身而言仍是自下而上的設(shè)計(jì)方法,即利用已有的邏輯器件來構(gòu)成硬件電路,它沒有脫離傳統(tǒng)的硬件設(shè)計(jì)思路。 隨著集成電路規(guī)模與復(fù)雜度的進(jìn)一步提高,特別是大規(guī)模、超大規(guī)模集成電路的系統(tǒng)集成,使得電路設(shè)計(jì)不斷向高層次的模塊式的設(shè)計(jì)方向發(fā)展,原有的電原理圖輸入方式顯得不夠嚴(yán)謹(jǐn)

2、規(guī)范,過多的圖紙和底層細(xì)節(jié)不利于從總體上把握和交流設(shè)計(jì)思想;再者,自下而上的設(shè)計(jì)方法使仿真和調(diào)試通常只能在系統(tǒng)硬件設(shè)計(jì)后期才能進(jìn)行,因而系統(tǒng)設(shè)計(jì)時存在的問題只有在后期才能較容易發(fā)現(xiàn),這樣,一旦系統(tǒng)設(shè)計(jì)存在較大缺陷,就有可能要重新設(shè)計(jì)系統(tǒng),使得設(shè)計(jì)周期大大增加。基于以上電原理圖輸入方式的缺陷,為了提高開發(fā)效率,增加已有成果的可繼承性并縮短開發(fā)時間,大規(guī)模專用集成電路 ASIC研制和生產(chǎn)廠家相繼開發(fā)了用于各自目的的硬件描述語言。其中最具代表性的就是美國國防部開發(fā)的VHDL語言和 Verilog公司開發(fā)的Verilog HDL以及日本電子工業(yè)振興協(xié)會開發(fā)的UDLI語言。 1987年12月10日, I

3、EEE標(biāo)準(zhǔn)化組織發(fā)布IEEE標(biāo)準(zhǔn)的VHDL,定為 IEEE Stdl0761987標(biāo)準(zhǔn)(該標(biāo)準(zhǔn)是從1983年8月美國空軍支持并開發(fā)的VHDL72版發(fā)展而來)。這使得VHDL成為唯一被IEEE標(biāo)準(zhǔn)化的HDL語言,這標(biāo)志著 VHDL被電子系統(tǒng)設(shè)計(jì)行業(yè)普遍接收并推廣為標(biāo)準(zhǔn)的HDL語言。許多公司因而紛紛使自己的開發(fā)工具與VHDL兼容。由此可見,使用 VHDL語言來設(shè)計(jì)數(shù)字系統(tǒng)在一定程度上是電子設(shè)計(jì)技術(shù)的大勢所趨。 利用VHDL設(shè)計(jì)硬件電路的優(yōu)點(diǎn)是: 1) 設(shè)計(jì)技術(shù)齊全、方法靈活、支持廣泛 VHDL語言可以支持自上而下和基于庫的設(shè)計(jì)方法,還支持同步電路、異步電路、 FPGA以及其他隨機(jī)電路的設(shè)計(jì)。目前大

4、多數(shù)EDA工具幾乎在不同程度上都支持VHDL語言。這給VHDL語言進(jìn)一步推廣和應(yīng)用創(chuàng)造了良好的環(huán)境。2)系統(tǒng)硬件描述能力強(qiáng) VHDL具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型直到門級電路。3)VHDL語言可以與工藝無關(guān)編程VHDL設(shè)計(jì)硬件系統(tǒng)時,可以編寫與工藝有關(guān)的信息。但是,與大多數(shù)HDL語言不同的是,當(dāng)門級或門級以上層次的描述通過仿真驗(yàn)證后,可以用相應(yīng)的工具將設(shè)計(jì)映射成不同的工藝(如MOS,CMOS等)。這樣,工藝更新時,就無須修改程序,只須修改相應(yīng)的映射工具即可。所以,在VHDL中,電路設(shè)計(jì)的編程可以與工藝相互獨(dú)立。4)VHDL語言標(biāo)準(zhǔn)、規(guī)范,易于共享和復(fù)用VHDL語言的語法

5、較嚴(yán)格,給閱讀和使用都帶來了極大的好處。再者,VHDL作為一種工業(yè)標(biāo)準(zhǔn),設(shè)計(jì)成果便于復(fù)用和交流,反過來也能進(jìn)一步推動VHDL語言的推廣和普及。5-1VHDL程序的基本結(jié)構(gòu)一個完整的VHDL語言程序通常包含實(shí)體(Entity),結(jié)構(gòu)體(Architecture),配置(Configuration),包(package)和庫(Library)5個部分。前四種是可分別編譯的源設(shè)計(jì)單元。庫存放已編譯的實(shí)體、結(jié)構(gòu)體、配置和包。實(shí)體用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為;包存放各設(shè)計(jì)模塊都能共享的數(shù)據(jù)類型、常數(shù)和子程序等;配置用于從庫中選取所需單元來支持系統(tǒng)的不同設(shè)計(jì),即對庫的使用;庫可由用戶生成或ASIC芯片制造

6、商提供,以便共享。本章將對上述5部分作一詳細(xì)介紹。 5-1-1 VHDL程序的基本單元與構(gòu)成 VHDL程序的基本單元是設(shè)計(jì)實(shí)體和結(jié)構(gòu)體,它對應(yīng)于硬件電路中的某個基本模塊。該模塊可以是一個門,也可以是一個微處理器,甚至整個系統(tǒng)。但無論是簡單的還是復(fù)雜的數(shù)字電路,VHDL程序的基本構(gòu)成都是一樣的,都由實(shí)體和結(jié)構(gòu)體構(gòu)成。實(shí)體描述模塊的對外端口,結(jié)構(gòu)體描述模塊的內(nèi)部情況即模塊的行為和結(jié)構(gòu)。例1是一個如圖5-1所示半加器的VHDL描述。- The entity declarationentity Half_adder isport ( X Half_ SumX: in Bit ; Y adder Car

7、ryY: in Bit ;Sum : out Bit ;Carry : out Bit ) ;圖5-1半加器end Half_adder ;- The architecture body :architecture Behavioral_description of Half_adder isbeginprocess beginSum = X xor Y after 5 Ns ;Carry = X and Y after 5 Ns ;wait on X , Y ;end process ;end Behavioral_description例2描述了作為一個設(shè)計(jì)實(shí)體的二選一電路。entity

8、mux isgeneric(m:TIME:=1ns);port(d0,d1,sel: in BIT;q: out BIT);end mux;architecture connect of mux isSignal tmp:BIT; begin Cale: process(d0,dl,sel) variable tmpl,tmp2,tmp3:BIT; begin tmp1:=d0 and sel; tmp2:=d1 and (not sel); tmp3:=tmp1 or tmp2; tmp=tmp3; q A, Y = B, Sum = Temp_sum , Carry = Temp_carr

9、y_1 ) ;U1 : Half_adderport map (X = Temp_sum , Y = Carry_inSum = AB , Carry = Temp _Carry_2 ) ;U2 : Or_gateport map (In1 = Temp_carry_1, In2 = Temp_carry_2 ,Out1 = Carry_out ) ;end structure ;圖5-2 由半加器構(gòu)造的全加器說明: 在上述所有例子中,粗斜體(如end ) 表示該標(biāo)識符( end )為系統(tǒng)保留字。 In1: in Bit ; In2: in Bit; 可寫成In1:Bit; In2: Bit;

10、 因?yàn)閕n是缺省的I/O狀態(tài)。 - 為注釋行標(biāo)志, 該行其后的所有字符均為注釋內(nèi)容。 由component . end component ; 注明的一段為元件說明語句, 給出了該元件的外端口情況, 或者說是給出了一個元件的模板。 由 - component instantiation statements說明的為元件實(shí)例化語句部分。該語句將元件說明中的端口映射到實(shí)際元件中的端口, 即將模板映射到現(xiàn)實(shí)電路。下面對實(shí)體說明和結(jié)構(gòu)體的詳細(xì)情況進(jìn)行解釋說明:1、實(shí)體說明(Entity Declaration) 實(shí)體說明的一般形式是: entity 實(shí)體名 is 類屬參數(shù)說明 formal_gener

11、ic_clause 端口說明formal_port_clause 說明語句declarations begin 實(shí)體語句部分 end實(shí)體名;說明: 實(shí)體名和所有端口名都由字符串組成(稱為標(biāo)識符)。該字符串中的任意字符可以是“a”到“z”,“A”到“Z”,或數(shù)字“0”到“9”,以及下劃線“_”;字符串的第一個字符必須是字母,中間不包括空格,且最后一個字符不可以為下劃線,兩個下劃線不允許相鄰。 表示其中的部分是可選項(xiàng); 對VHDL而言,大小寫一視同仁,不加區(qū)分; 實(shí)體說明以 entity 實(shí)體名is開始,至 end實(shí)體名結(jié)束,最簡單的實(shí)體說明是: entity E is end;除此之外,其余各項(xiàng)

12、皆為可選項(xiàng); 類屬(Generic)語句必須放在端口語句之前,用于指定由環(huán)境決定的參數(shù)。例如,在數(shù)據(jù)類型說明上用于傳遞位矢長度、數(shù)組的位長以及器件的延遲時間等參數(shù)。類屬語句的一般形式為: generic(類屬參數(shù)名:子類型名:=初始值) 例如,在二選一電路的描述中的 generic(m:time:=1ns)指定了結(jié)構(gòu)體內(nèi)延時m的值為 lns。又如: entity AndGate is generic(N:Natural:=2); port(inputs: in Bit_vector(1 to N); result: out Bit); 一一類屬參數(shù)N規(guī)定了位矢量(Bit_Vector)inpu

13、ts的長度end AndGate; = 6 * GB3 端口(port)說明是關(guān)于設(shè)計(jì)實(shí)體之外部接口的描述,規(guī)定了端口的名稱、數(shù)據(jù)類型和輸入輸出方向。例如對二選一電路描述中的 port(do,d1,sel:in BIT; q:out B1T);其一般書寫格式是: port(端口名,端口名:方向子類型名bus:=初始值 ;端口名,端口名: 方向子類型名bus:=初始值) 其中方向用于定義外部引腳的信號方向是輸入還是輸出,共有五種方向: in,out,inout,buffer,1inkage。In表示信號自端口輸入到結(jié)構(gòu)體;out表示信號自結(jié)構(gòu)體輸出到端口;inout表示該端口是雙向的;buffe

14、r說明端口可以輸出信號,且結(jié)構(gòu)體內(nèi)部可以利用該輸出信號;1inkage用于說明該端口無指定方向,可以與任何方向的信號連接。上例中的d0,d1,sel為輸入引腳,q為輸出引腳。 = 7 * GB3 說明語句(Declaration)可以包括:subprogram說明subprogram定義(或稱subprogram體)type說明subtype說明constant說明signal說明 file說明alias說明attribute說明attribute定義use語句disconnection定義用于對設(shè)計(jì)實(shí)體內(nèi)所用的信號、常數(shù)、數(shù)據(jù)類型和函數(shù)進(jìn)行定義,這種定義對該設(shè)計(jì)實(shí)體是可見的。2、結(jié)構(gòu)體(Ar

15、chitecture Body) 結(jié)構(gòu)體是對實(shí)體功能的具體描述,必須跟在實(shí)體后面。通常,先編譯實(shí)體后才能對結(jié)構(gòu)體進(jìn)行編譯,如果實(shí)體需要重新編譯,那么相應(yīng)的結(jié)構(gòu)體也應(yīng)重新編譯。 結(jié)構(gòu)體的一般結(jié)構(gòu)描述如下: Architecture 結(jié)構(gòu)體名 of 實(shí)體名 is 說明語句; begin 并行處理語句; end 結(jié)構(gòu)體名;說明: = 1 * GB3 結(jié)構(gòu)體的名稱應(yīng)是該結(jié)構(gòu)體的唯一名稱,of后緊跟的實(shí)體名表明了該結(jié)構(gòu)體所對應(yīng)的是哪一個實(shí)體。is用來結(jié)束結(jié)構(gòu)體的命名。結(jié)構(gòu)體名稱的命名規(guī)則與實(shí)體名的命名規(guī)則相同。 = 2 * GB3 說明語句的內(nèi)容除了實(shí)體說明中可有的說明項(xiàng)外,還可以包括元件說明(comp

16、onent)和組裝說明(或曰配置configuration) 語句。說明語句用于對結(jié)構(gòu)體內(nèi)所用的信號、常數(shù)、數(shù)據(jù)類型和函數(shù)進(jìn)行定義,且其定義僅對結(jié)構(gòu)體內(nèi)部可見。例如在對二選一電路的描述中:architecture connect of mux issignal tmp: BIT;- 對內(nèi)部信號tmp進(jìn)行定義- 信號定義和端口語句一樣,應(yīng)有信號名和數(shù)據(jù)類型的說明- 因它是內(nèi)部連接用的信號,故沒有也不需要方向說明begin. . .end connect;關(guān)于說明語句還會在后面繼續(xù)介紹。 = 3 * GB3 處于 begin和 end之間的并行處理語句(即各語句是并發(fā)執(zhí)行的),用于描述該設(shè)計(jì)實(shí)體(

17、模塊)的行為和結(jié)構(gòu)。包括block語句process語句Procedure調(diào)用語句assert語句assignment語句generate語句|component instance語句有關(guān)這部分語句的詳情也會在后面幾節(jié)中介紹。二選一電路描述中的進(jìn)程語句如下: cale: process(d0,d1,sel) variable tmp1,tmp2,tmp3:BIT; begin . . . end process; = 4 * GB3 一個實(shí)體可以有多個不同的結(jié)構(gòu)體。 即對外端口相同而內(nèi)部行為或結(jié)構(gòu)不同的模塊,其對應(yīng)的實(shí)體可以具有相同的實(shí)體說明和不同的結(jié)構(gòu)體。所以,一個給定的實(shí)體說明可以被多個設(shè)

18、計(jì)共享,而這些設(shè)計(jì)實(shí)體的結(jié)構(gòu)體不同。從這個意義上說,一個實(shí)體說明代表了一組端口相同的設(shè)計(jì)實(shí)體(如兩輸入端的“與非門”和兩輸入端的“或非門”等)。所以VHDL規(guī)定:對應(yīng)于同一實(shí)體的結(jié)構(gòu)體不允許同名,而對應(yīng)于不同實(shí)體的結(jié)構(gòu)體可以同名。 5-1-2 包(Package)、庫(Library)和配置(Configuration)1、包(package)在實(shí)體說明和結(jié)構(gòu)體中說明的數(shù)據(jù)類型、常量和子程序等只對相應(yīng)的結(jié)構(gòu)體可見,而不能被其他設(shè)計(jì)實(shí)體使用。為了提供一組可被多個設(shè)計(jì)實(shí)體共享的類型、常量和子程序說明,VHDL提供了包(Package)。包用來單純的羅列要用到的信號定義、常數(shù)定義、數(shù)據(jù)類型,元件語句

19、、函數(shù)定義和過程定義等,它是一個可編譯的設(shè)計(jì)單元,也是庫結(jié)構(gòu)中的一個層次。 包分為包說明(Package Declaration)和包體(Package Body)兩部分。 包說明的一般形式是,Package包名 is 說明語句; end 包名; 包體的一般形式是: Package body包名 is 說明語句;end 包名;說明: = 1 * GB3 包說明和相應(yīng)的包體的名稱必須一致。 = 2 * GB3 包說明中的說明語句可包括:subprogram說明 type說明subtype說明 constant說明signal說明file說明alias說明 attribute說明attribute

20、定義 use語句disconnection定義即除了不包括子程序體外,與實(shí)體說明中的說明語句情況相同。 包體中的說明語句可包括:subprogram定義type說明subtype說明 constant說明fi1e說明 alias說明use語句 VHDL中的subprogram(子程序)概念,與一般計(jì)算機(jī)高級語句中子程序的概念類似。子程序包括過程(procedure)和函數(shù)(function),分別由子程序說明和子程序體(子程序定義)兩部分組成。可以出現(xiàn)在相應(yīng)的實(shí)體說明、結(jié)構(gòu)體、包說明和包體中,供其它語句調(diào)用。包說明可定義數(shù)據(jù)類型,給出函數(shù)的調(diào)用說明,而在包體中才具體的描述實(shí)現(xiàn)該函數(shù)功能的語句(

21、即函數(shù)定義)和數(shù)據(jù)的賦值。這種分開描述的好處是,當(dāng)函數(shù)的功能需要作某些調(diào)整時,只要改變包體的相關(guān)語句就行了,這樣可以使重新編譯的單元數(shù)目盡可能少。 = 3 * GB3 可見性:包體中的子程序體和說明部分不能被其它VHDL元件引用,只對相應(yīng)的包說明可見,而包說明中的內(nèi)容才是通用的和可見的(當(dāng)然還必須用use子句才能提供這種可見性)。下面即為一個包說明及其相應(yīng)包體的例子:Package Logic is type Three_level_logic is (0,1,z); function lnvert (input:Three_1evel_logic)return Three_1evel_log

22、ic;end logic;package body Logic is function invert(1nput:Three_1evel_1ogic)return Three_level_logic is begin case lnput is whenO return1; when1 return0; whenz returnz; end case; end invert;end Logic;上例中,第一段是包說明,其中第三行是函數(shù)lnvert說明;第二段是包體,第二行開始函數(shù)的定義,給出了函數(shù)的行為。這部分內(nèi)容只對包說明(即第一段)可見。所以,包說明包含的是通用的、可見的說明;而包體包含的

23、是專用的、不可見的說明。 = 4 * GB3 在一個設(shè)計(jì)實(shí)體中加上use子句(在實(shí)體說明之前),可以使包說明中的內(nèi)容可見。 如: use IEEE.STD_LOGlC_1164a11;a11表示將IEEE庫中的 STD_LOGIC_1164包中的所有說明項(xiàng)可見。 又如, use Logic.Three_1evel_1ogic; 表示將用戶自定義的包Logic中的類型Three_1evel_1ogic對相應(yīng)的設(shè)計(jì)實(shí)體可見。 = 5 * GB3 包也可以只有個包說明,因?yàn)槿绻f明中既不創(chuàng)造子程序說明也無有待在包體中賦值的常數(shù)(deferred constant)時,包體就沒必要存在了。2、配置(

24、Configuration) 利用配置語句(又叫組裝說明),設(shè)計(jì)者可以為待設(shè)計(jì)的實(shí)體從資源文件(庫或包)中選擇不同行為和結(jié)構(gòu)的結(jié)構(gòu)體。在仿真某個實(shí)體時,可以利用配置語句選擇不同的結(jié)構(gòu)體,以便進(jìn)行性能對比得到最佳性能的結(jié)構(gòu)體。 配置語句的一般形式為: configuration 配置名 of實(shí)體名 is 配置說明部分: use子句或 attribute 定義; 語句說明;end 配置名;配置語句根據(jù)不同情況,其語句說明有繁有簡,以下以一個微處理器的配置為例作一些簡要說明。 an architecture of a microprocessor: architecture Structure_Vi

25、ew of Processor is component說明語句 Component ALU port() end component;Component MUX port() end component;begin component實(shí)例化語句: A1: ALU port map();M1: MUX port map();M2: MUX port map();end Structure_View; - a configuration of the microprocessor;1ibrary TTL.Work;configuration V4_27_87 of processor is us

26、e WorkAll; for Structure_View -組裝說明 for A1:ALU use configuration TTLSN74LSl81; end for; for Ml,M2:MUX use entity Multiplex4(Behavior); end for;end for;end V4_27_87; 其中:configuration V4_27_87 of Processor is. end V4_27_87; 屬于配置語句部分,為實(shí)體Processor選擇了結(jié)構(gòu)體Structure_View(用語句 for Structure_View ); 結(jié)構(gòu)體 Struct

27、ure_View僅給出了元件ALU、MUX的模板,而沒有給出任何實(shí)質(zhì)的行為或結(jié)構(gòu)描述,所以配置語句中又采用元件配置(Component Configuration),如 for A1: ALU use configuration TTLSN74LSl81; end for; 為元件ALU選擇標(biāo)準(zhǔn)庫TTL中的配置SN74LSl81; for Ml,M2:MUX use entity Multiplex4(Behavior); end for; 將元件 MUX(M1、 M2)組裝到庫Work中的實(shí)體Multiplex4 及相應(yīng)的結(jié)構(gòu)體Behavior上,使元件具有具體的行為或結(jié)構(gòu)。 類似元件配置的

28、語句也可用于結(jié)構(gòu)體中,稱組裝規(guī)則。例如,在原來的結(jié)構(gòu)體的說明部分增加一句: for M1, M2: MUX use entity Multiplex4(Behavior); 與在configuration V4_27_87中使用組裝說明的目的和意義相同。 組裝規(guī)則的一般形式是: for 元件例示標(biāo)號:元件名 use 對應(yīng)對象; 其中對應(yīng)對象可以是某個配置configuration或?qū)嶓wentity。組裝規(guī)則就是將元件實(shí)例化語句中的元件(如 M1,M2:MUX)組裝到實(shí)體Multiplex4 及其相應(yīng)的結(jié)構(gòu)體(Behavior)或已有的某個組裝說明上。這樣, = 1 * GB3 配置語句(組裝說

29、明)為要設(shè)計(jì)的實(shí)體選擇了結(jié)構(gòu)體, = 2 * GB3 元件配置或組裝規(guī)則將元件與某個實(shí)體及其相應(yīng)的結(jié)構(gòu)體對應(yīng)起來。3、庫 ( Library )庫是經(jīng)編譯后的數(shù)據(jù)的集合,它存放已經(jīng)編譯的實(shí)體、結(jié)構(gòu)體、包和配置。庫由庫元組成,庫元是可以獨(dú)立編譯的VHDL結(jié)構(gòu)。 VHDL中有兩類庫元- 基本元和輔助元。基本元包括實(shí)體說明、包說明和配置,輔助元為包體和結(jié)構(gòu)體。基本元對同一庫中其它基本元都是不可見的,必須用 use子句才能提供可見性。1) 庫的種類 在VHDL語言中存在的庫大致可以歸納為5種:IEEE庫、STD庫、ASIC庫、用戶定義的庫和WORK庫。 IEEE庫中匯集著一些 IEEE認(rèn)可的標(biāo)準(zhǔn)包集合

30、,如STD_LOGIC_1164;STD庫是 VHDL的標(biāo)準(zhǔn)集。其中存放著的 STANDARD包是VHDL的標(biāo)準(zhǔn)配置,如定義了Boo1ean、Character等數(shù)據(jù)類型; ASIC庫存放著與邏輯門一一對應(yīng)的實(shí)體; 用戶為自身設(shè)計(jì)需要所開發(fā)的共用包集和實(shí)體等可以匯集在一起,定義為用戶定義庫; WORK庫是現(xiàn)行工作庫,設(shè)計(jì)者所描述的 VHDL語句不加任何說明時,都將存放在 WORK庫中,例如,用戶自定義的包在編譯后都會自動加入到W0RK庫中。2) 庫的使用前面提到的5類庫除了 WORK庫外,其他4類庫在使用前都必須作說明,用庫子句(Library)對不同庫中的庫元提出可見性。 Library的說

31、明總是放在設(shè)計(jì)單元的最前面,其一般形式為:Library庫名;接著用 use子句使庫中的包和包中的項(xiàng)可見。例如: Library IEEE; Use IEEESTD_LOGIC_1164all;也就是說,對于同一庫中不同的庫元,必須用use子句提供所需的可見性;而對于不同庫中的庫元,則必須用庫子句加上use子句來提供相應(yīng)的可見性。3) 庫的作用范圍 庫語句的作用范圍從一個實(shí)體說明開始到它所屬的結(jié)構(gòu)體和配置為止。當(dāng)一個源程序中出現(xiàn)兩個以上的實(shí)體時,庫語句應(yīng)在每個實(shí)體說明語句前書寫。例如:1ibrary IEEE: 庫使用說明use IEEESTD_LOGIC_1164ALL;entity and

32、1 is. . . end andl;architecture rt1 of and1 is. . .end rt1;configuration s1 of andl is. . .end s1;library IEEE;- 庫使用說明use IEEESTD_LOGIC_1164a11;entity orl is. . .end or1;configuration s2 of orl is. . .end s2; 5-1-3 設(shè)計(jì)實(shí)例 以上從設(shè)計(jì)硬件電路的角度出發(fā),介紹了完整的VHDL語言程序應(yīng)具備的5個部分:實(shí)體+結(jié)構(gòu)體,并配合以相應(yīng)的資源(包、庫、組裝說明)。 采用 VHDL語言進(jìn)行硬件設(shè)

33、計(jì)時,采用自上而下的設(shè)計(jì)方法,逐步將設(shè)計(jì)內(nèi)容細(xì)化最后完成系統(tǒng)硬件的整體設(shè)計(jì)。下面以設(shè)計(jì)一個小規(guī)模處理器mp為例,簡要說明VHDL程序的基本結(jié)構(gòu)。盡管 mp是小規(guī)模的處理器,但是仍考慮采用大規(guī)模電路自上而下的設(shè)計(jì)方法。所謂自上而下的設(shè)計(jì)方法,即先將要設(shè)計(jì)的硬件系統(tǒng)(如微處理器mp)看成一個頂部模塊,對應(yīng)于VHDL程序中的一個設(shè)計(jì)實(shí)體(entity mp);然后按一定的標(biāo)準(zhǔn)(如功能)將該系統(tǒng)分成多個子模塊,見圖5-3。 圖5-3中,處理器mp按功能被分為6個子模塊:mcu、 miu、 alu、bsu、 rfu、 bcu(具體功能見表51)。這些子模塊對應(yīng)于設(shè)計(jì)實(shí)體 mp中的各個元件,用結(jié)構(gòu)體中的

34、component說明語句對元件的名字和接口進(jìn)行說明: mcumiualubsurfubcu 圖5-3處理器的6大部分 表51處理器各部分的功能說明- TOP LEVEL;- Package declarationslibrary IEEE;use IEEE.STD_LOGIC_ll64all;use IEEE.STD_LOGIC_ll64 EXTENSION. all;library WORK;use WORK.mp_package.all;. . . entity declaration of mpentity mp is generic (.); port();begin. . .end

35、 mp; an architecture of mp; architecture struct_view of mp is component mcu port(); end component;component alu port(); end component;component bcu port(); end component;component bsu port(); end component;component miu port(); end component;component rfu port(); end component;begin l1: mcu port map

36、(); 12: alu port map(); 13: bcu port map(); 14: bsu port map(.); 15: miu port map(); 16: rfu port map();end struct_view;- a configuration of mp;configuration of V_5_30 of mp is use WORK.all; for struct_view for l1:mcu use entity workmcu; end for; for l2:alu use entity workalu; end for; for l3:bcu us

37、e entity workbcu; end for; for 14:bsu use entity workbsu; end for; for 15: miu use entity workmiu; end for; for l6:rfu use entity workrfu; end for; end for;end V_5_30; 程序中,實(shí)體mp對處理器的外部引腳進(jìn)行了說明,結(jié)構(gòu)體則對處理器內(nèi)部結(jié)構(gòu)及相互關(guān)系進(jìn)行了描述:1)在結(jié)構(gòu)體的說明部分,使用元件說明語句(如 component mcu port (); end component;)描述了子模塊的名稱(mcu)和端口(形式端口);2

38、)在結(jié)構(gòu)體的語句部分,用元件實(shí)例化語句(11: mcu port map();)將元件標(biāo)號、元件名稱的對應(yīng)關(guān)系進(jìn)行描述,給出形式端口與實(shí)體中的端口、實(shí)際信號以及各子元件間的連接關(guān)系;3)用 Configuration語句(如configuration V_5_30 of mp is end V_5_30;)或一些組裝規(guī)則將各個實(shí)際元件與器件庫中的特定實(shí)體對應(yīng)起來,從而使這個設(shè)計(jì)實(shí)體完成了該處理器的頂層設(shè)計(jì)。它描述了該處理器的外部端口和各個子模塊間的相互關(guān)系,建立了一個 VHDL的外部框架;4)所謂器件庫中的特定實(shí)體指的是與各個子模塊相對應(yīng)的各個設(shè)計(jì)實(shí)體,它們將各個子模塊的功能和行為細(xì)化。這種對

39、各個子模塊的VHDL設(shè)計(jì)是該系統(tǒng)的次一層設(shè)計(jì)。5)如果子模塊又可以分成幾個小模塊,則將進(jìn)行該系統(tǒng)的更次一層設(shè)計(jì)(方法相同),.如此細(xì)化下去,直到最底層設(shè)計(jì)。這樣由上至下進(jìn)行系統(tǒng)硬件設(shè)計(jì)的好處是:在程序設(shè)計(jì)的每一步都可進(jìn)行仿真檢查、有利于盡早發(fā)現(xiàn)系統(tǒng)設(shè)計(jì)中存在的問題。 因?yàn)?VHDL是一種結(jié)構(gòu)嚴(yán)密、語法嚴(yán)謹(jǐn)?shù)恼Z言,為了更靈活地掌握這種硬件設(shè)計(jì)方法,從總體上把握全局,而不至于被其中繁多的語法混淆思路、迷失設(shè)計(jì)方向,在前面充分討論了 VHDL程序的基本框架和設(shè)計(jì)思路的基礎(chǔ)上,下面再接下來討論VHDL語言的數(shù)據(jù)類型、操作符和對硬件系統(tǒng)的描述方式。 5-2VHDL語言的基本數(shù)據(jù)類型和操作符 具有值的信息

40、載體稱為對象( Object)。 VHDL中每個對象都具有一定的類型,類型決定對象可能取值的種類。 VHDL語言象其它高級語言一樣,具有多種數(shù)據(jù)類型。 5-2-1 VHDL語言的對象和分類 VHDL中的對象主要有以下三種:信號(signal)、變量(variable)、常數(shù)(constant)。它們的區(qū)別有:1)在電子電路設(shè)計(jì)中,這三類對象都與一定的物理對象相對應(yīng)。例如,信號對應(yīng)硬件設(shè)計(jì)中的某一條硬件連接線,常數(shù)代表數(shù)字電路中的電源和地,變量與硬件的對應(yīng)關(guān)系不太直接,通常代表暫存某些值的載體;2)變量和信號的區(qū)別在于:變量的賦值被立即執(zhí)行,信號的賦值則有可能延時,具體見下面第2點(diǎn)。3) 三種對

41、象的含義和說明場合不同,見表52。1、對象說明 每個對象都有類型,該類型決定可能取值的類型。 constant,variable,signal三類對象說明的一般形式是: constant 常數(shù)名表:數(shù)據(jù)類型 := 表達(dá)式; variable 變量名表:數(shù)據(jù)類型 := 表達(dá)式; signal 信號名表:數(shù)據(jù)類型 信號類別:= 表達(dá)式;表52 三種對象的含義和說明場合對象類別含 義說明語句的場合信號說明全局量architecture,package,entity變量說明局部量process,function,procedure常數(shù)說明全局量以上均可說明: = 1 * GB3 常數(shù)名表、變量名表和信

42、號名表,是由一個標(biāo)識符或以“,”隔開的多個標(biāo)識符組成。 = 2 * GB3 “:= 表達(dá)式”為常數(shù)、變量、信號賦初值。通常常數(shù)賦值在常數(shù)說明時進(jìn)行,且常數(shù)一旦被賦值就不能改變。 = 3 * GB3 信號類別只有 bus或 register兩種類型,是可選項(xiàng)。對象說明的示例如下: constant Vcc: real:= 500;variable x,y: integer Range 0 to 255:= 10; signal ground :Bit:=0;2、變量和信號的區(qū)別1)物理意義不同。信號是電子電路內(nèi)部硬件連接的抽象;變量沒有與硬件對應(yīng)的器件。2)賦值符號不同。信號賦值用“”符號(如S

43、1S2),變量賦值用“:=”符號(如 temp3:= templ + temp2 ;)。3)變量賦值不能加延時,且語句一旦被執(zhí)行,其值立即被賦予變量。信號賦值可以加延時,使賦予信號的值在一段時間后代入。如:S1S2 after l0ns;S2的值經(jīng)過10ns的延時后才被代入Sl。而有延時的變量賦值是不合法的。如 temp3:= temp1 + temp2 after l0ns,是非法的。4)信號是全局量,可用于進(jìn)行進(jìn)程間的通信,可用于 architecture、 package、 entity的說明部分;變量是局部量,只能用于process、function、procedure 之中。從上面幾

44、點(diǎn)不難看出,將變量和信號區(qū)別開來的根本出發(fā)點(diǎn)是它們對應(yīng)的物理意義不同。5-2-2 數(shù)據(jù)類型 VHDL提供了多種標(biāo)準(zhǔn)的數(shù)據(jù)類型,放在STD庫的 Standard包中。另外,為使用戶設(shè)計(jì)方便,還可以由用戶自定義數(shù)據(jù)類型。 VHDL的數(shù)據(jù)類型分四類,標(biāo)量類型(Scalar)、復(fù)合類型(Composite)、存取類型(Access)、文件類型(File)。限于篇幅,本文僅介紹最常用的前兩種類型。后兩種Access和 File類型在具體使用時,可以查閱有關(guān)手冊。1、標(biāo)量類型(Scalar type) 標(biāo)量類型是指其值能在一維數(shù)軸上從大到小排列的數(shù)據(jù)類型。標(biāo)量分整型(integer)、浮點(diǎn)型(float)

45、、物理量型(physics)、枚舉型(Enumeration)。1)枚舉類型枚舉類型的定義格式為:type 數(shù)據(jù)類型名 is (元素,元素,)。它定義的是一組由括號括起的標(biāo)識符或字符表。 例如,用戶可自定義枚舉類型:type Switch_level is(0,1,x);又如,VHDL預(yù)定義了枚舉類型,有: Character, Bit, Boolean, Severity_ 1evel(錯誤等級,用于提示系統(tǒng)當(dāng)前的工作狀態(tài): NOTE,WARNING,ERROR, FAlLURE)。這些預(yù)定義放在Standard包內(nèi)。2)整數(shù)類型和浮點(diǎn)類型 VHDL定義的整型和浮點(diǎn)型與我們一般理解的整數(shù)和實(shí)

46、數(shù)相同。在VHDL中已預(yù)定義的整數(shù)范圍是-(231-1)(231-1);預(yù)定義的實(shí)數(shù)范圍是-1.0*1038 1.0*1038。 VHDL中還可以自定義整數(shù)類型和浮點(diǎn)類型,它們分別是以上兩個類型的子集。自定義整型或浮點(diǎn)型的一般形式是: Type 數(shù)據(jù)類型 is 原數(shù)據(jù)類型名 約束范圍;其中,“約束范圍”用“range邊界1 to/downto邊界2”表示。例如:定義一個用于數(shù)碼顯示的只能取09的整數(shù):Type digit is integer range 0 to 9;定義一個只能取 -104 104的實(shí)數(shù):type current is real range -1E4 to 1E4;3)物理

47、量類型一個物理量類型的數(shù)據(jù)應(yīng)包含整數(shù)和單位兩部分。物理量類型的定義包括一個域限制、一個基本單位和幾個次級單位。每個次級單位是一個整數(shù)乘以基本單位。例如,定義一個名為 Distance的物理量類型:type Distance is range 0 to lEl6units - 基本單位A;angstrom埃- 次級單位 nm = 10A;um = 1000nm;mm = 1000um;cm = 10mm;m = 1000mm;km 1000m;end units;Distance物理量的說明和運(yùn)算,如X:Distance;X:5A + 13um - 50nm;由上面的例子可以看出,物理量類型定義

48、的一般形式是:type 數(shù)據(jù)類型名 is 范圍units 基本單位;次級單位:end units;說明: = 1 * GB3 物理量類型的范圍最大為-(231-1)(231-1),且必須包含1,否則基本單位就沒有意義了。 = 2 * GB3 次級單位是一個整數(shù)乘以基本單位。 VHDL預(yù)定義了物理量類型TIME,放在Standard包中: Type Time is range -(2*31 - 1) to (2*31 - 1) units fs; -毫微微秒 ps = 1000 fs; 微微秒 ns = 1000 ps; us = l000 ns; ms = 1000 us; sec = 100

49、0 ms; min = 60 sec; hr = 60 min;end units;在系統(tǒng)仿真時,時間數(shù)據(jù)用于描述信號延時。2、復(fù)合類型復(fù)合類型即其值可分成更小對象的類型。復(fù)合類型有兩種:數(shù)組和記錄。1)數(shù)組類型(Array) 數(shù)組是類型相同的數(shù)據(jù)集合在一起所形成的新的數(shù)據(jù)類型,它可以是一維的、二維的或多維的。 數(shù)組定義的一般形式是:type 數(shù)組類型名 is array (下標(biāo)范圍) of 原數(shù)據(jù)類型名;說明: = 1 * GB3 下標(biāo)范圍的限定必須用整數(shù)或枚舉類型來表示,如:type My_ word is array (integer 0 to 31) of Bit;用整數(shù)下標(biāo)定義一個3

50、2位長的字;又如,先定義type instruction is(ADD,SUB,INC,SRL,SRF,CDA,LDB,XFR);枚舉類型,再定義數(shù)組下標(biāo)取值范圍是枚舉量:type insflag is array (instruction ADD to SRF) of Integer; = 2 * GB3 VHDL中預(yù)定義的數(shù)組類型有字符串 string和位矢量 bit_vector。它們被放在STD庫的 Standard包中。2)記錄類型 記錄是將不同類型數(shù)據(jù)和數(shù)據(jù)名組織在一起而形成的新類型。定義記錄類型的一般形式為:type 數(shù)據(jù)類型名 is record 元素名:數(shù)據(jù)類型名;元素名:數(shù)

51、據(jù)類型名; . . .end record; 例如: type bank is record -定義一個bank記錄 r0: integer; inst:instruction; end record; 記錄的使用:signal r_bank: bank; - 定義一個bank類型的信號r_bank signal result: integer;result= r_bankr0; - 用“”表示對記錄的引用5-2-3 VHDL語言的運(yùn)算操作符VHDL為構(gòu)成計(jì)算的表達(dá)式提供了23個操作符。這些操作符預(yù)定義為4類:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、連接運(yùn)算符。按優(yōu)先級由低到高的順序如表53所示。

52、表53 VHDL的操作符操作符類型操作符功能邏輯運(yùn)算符AND邏輯與OR邏輯或NAND邏輯與非NOR邏輯或非XOR邏輯異或關(guān)系運(yùn)算符等號/=不等號小于大于小于等于大于等于算術(shù)運(yùn)算符+、-加、減連接運(yùn)算符連接算術(shù)運(yùn)算符+、-正、負(fù)*乘除MOD求模REM取余*指數(shù)邏輯運(yùn)算符NOT求反算術(shù)運(yùn)算符ABS取絕對值 VHDL的操作符的意義、用法和高級語言基本相同。值得注意的是連接運(yùn)算符用于位的連接,如signal temp_b: bit_vector(3 downto 0);signal en: bit:= 1; - &將4個en相連為位矢量1111賦入temp_b: temp_b:= enenenen;5

53、-3 VHDL結(jié)構(gòu)體的描述方式 研究微電子器件的兩個基本問題是它的執(zhí)行功能和邏輯功能。相應(yīng)的,VHDL程序?qū)τ布到y(tǒng)的描述分為行為描述和結(jié)構(gòu)描述。行為描述和結(jié)構(gòu)描述的區(qū)別是:1)與硬件的對應(yīng)關(guān)系不同。行為描述是對系統(tǒng)書寫模型的描述,結(jié)構(gòu)描述是對系統(tǒng)的子元件和子元件之間相互關(guān)系的描述。在與硬件的對應(yīng)關(guān)系上,結(jié)構(gòu)描述更明顯、更具體。2)語句不同。行為描述的基本語句是進(jìn)程語句,結(jié)構(gòu)描述的基本語句是元件實(shí)例化語句。3)用途不同。行為描述方式用于系統(tǒng)數(shù)學(xué)模型或系統(tǒng)工作原理的仿真,而結(jié)構(gòu)描述方式用于進(jìn)行多層次的結(jié)構(gòu)設(shè)計(jì),能做到與電原理圖的一一對應(yīng),可以進(jìn)行邏輯綜合。 下面將對VHDL的行為描述語句做一個介

54、紹。至于結(jié)構(gòu)描述語句(包括component語句和元件實(shí)例化語句),前面已有所表述,這里就不再介紹了。 在用VHDL描述系統(tǒng)的行為時,按語句執(zhí)行順序可分為順序描述語句(Sequential Statement)和并發(fā)描述語句(Concurrent Statement)。5-3-1 順序描述語句(Sequential Statement)順序執(zhí)行語句只能出現(xiàn)在進(jìn)程 process或子程序 program中,用于定義進(jìn)程或子程序的算法。順序描述語句有以下幾種: wait語句、斷言(assert)語句、信號賦值語句、變量賦值語句、過程調(diào)用、if語句、 Case語句、循環(huán)語句(loop)、next語句

55、、 exit語句、 return語句、 null語句。一個典型的例子是: entity SRFF is port(s,r:in bit; q,qBar:out bit);end SRFF; architecture behavior of SRFF is begin process variable Last_state:bit:=0; begin -下面是順序執(zhí)行語句 assert not( s =land r =1) report“Both s and r equal to 1” severity Error if s =0and r =0 then Last_State:= Last_S

56、tate; elsif s =0and r =1 then Last_State:=0; else Last_State:=1; end if q = Last_State after 2ns;qBar = not q; Wait on r,s;end process;end SRFF; 下面逐一介紹這些順序描述語句:1、wait語句 進(jìn)程在仿真進(jìn)行中的兩個狀態(tài)-激活、暫停-的變化受 wait語句控制。有四種wait語句以設(shè)置不同的條件:wait; 無限等待;wait on 信號名表; 當(dāng)信號名表中任一信號發(fā)生變化時,進(jìn)程結(jié)束暫停狀態(tài),被激活;wait until 條件; 只當(dāng)條件成立時,進(jìn)程

57、才重新激活; wait for時間表達(dá)式; 時間限定,時間到則被激活; 在上面RS觸發(fā)器的行為描述程序中, wait on r,s;表示信號r,s中任一個發(fā)生變化都將使進(jìn)程被激活。2、斷言語句(assertion_statement)斷言語句主要用于程序仿真,以便調(diào)試時進(jìn)行人機(jī)對話,監(jiān)視系統(tǒng)當(dāng)前工作狀態(tài)和給出警告或錯誤信息。斷言語句的一般形式是:assert 條件report輸出信息severity等級說明: = 1 * GB3 當(dāng)執(zhí)行assert語句時,就會對條件進(jìn)行判斷。如果條件為真,則執(zhí)行assert以后的另一個語句;反之,如果條件為假,則表示系統(tǒng)出錯,輸出錯誤信總和錯誤嚴(yán)重等級。例如,

58、在RS觸發(fā)器的行為描述程序中,條件not( s =land r = 1)為真,即 s和r不同時為1時,系統(tǒng)不出錯,跳過assert語句;反之,當(dāng)條件為假,即s和r同時為1時,則執(zhí)行assert語句。 = 2 * GB3 report后跟的是設(shè)計(jì)者寫的字符串,用于說明錯誤的原因,用“”括起來。例如,在RS觸發(fā)器的行為描述中,report“Both s and r equal to 1”說明出現(xiàn)了 RS觸發(fā)器的r和s同時為1的錯誤。 = 3 * GB3 severity后跟的是錯誤嚴(yán)重程度的級別。 VHDL中分為4個級別:FAILLURE、ERROR、WARNING、NOTE。在RS觸發(fā)器的行為描

59、述中,錯誤級別為ERROR,模擬會終止。3、信號賦值語句 信號賦值語句的一般形式為:目的信號量= 信號量表達(dá)式;說明: = 1 * GB3 信號賦值語句用于將右邊信號量表達(dá)式的值賦予左邊的信號量,而且=兩邊信號量的類型和長度應(yīng)該一致。如ab; = 2 * GB3 信號量表達(dá)式中可以有延時。如RS觸發(fā)器程序中,q= Last_state after 2ns;4、變量賦值語句一般形式為:目的變量:= 表達(dá)式; 說明: = 1 * GB3 該語句表明將右邊的值賦予左邊的目的變量,但左右兩邊的類型必須相同。 = 2 * GB3 右邊的表達(dá)式,可以是變量、信號或字符常量,如Last_state:=0。5

60、、if語句 其基本意義和用法同高級語言。其一般形式為: if條件 then 順序處理語句 elsif 條件 then 順序處理語句 else順序處理語句 endif;具體例子可以參考RS觸發(fā)器程序。6、case語句 case語句與 if語句功能類似,用于根據(jù)指定的條件執(zhí)行某些語句。但case語句的可讀性比 if語句強(qiáng)。 case語句的一般形式是: case 表達(dá)式 is when 條件表達(dá)式1 = 順序處理語句 when 條件表達(dá)式2 = 順序處理語句. . .end case;其中,when 表達(dá)式可以有4種形式:when值 =順序處理語句;when值|值|值|. . .值|=順序處理語句;

溫馨提示

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

最新文檔

評論

0/150

提交評論