【正文】
物理量類型定義的一般形式是:type 數(shù)據(jù)類型名 is 范圍units 基本單位;次級單位:end units。cm = 10mm。每個次級單位是一個整數(shù)乘以基本單位。自定義整型或浮點(diǎn)型的一般形式是: Type 數(shù)據(jù)類型 is 原數(shù)據(jù)類型名 約束范圍;其中,“約束范圍”用“range邊界1 to/downto邊界2”表示。這些預(yù)定義放在Standard包內(nèi)。標(biāo)量分整型(integer)、浮點(diǎn)型(float)、物理量型(physics)、枚舉型(Enumeration)。 VHDL的數(shù)據(jù)類型分四類,標(biāo)量類型(Scalar)、復(fù)合類型(Composite)、存取類型(Access)、文件類型(File)。從上面幾點(diǎn)不難看出,將變量和信號區(qū)別開來的根本出發(fā)點(diǎn)是它們對應(yīng)的物理意義不同。如:S1<=S2 after l0ns;S2的值經(jīng)過10ns的延時后才被代入Sl。2)賦值符號不同。對象說明的示例如下: constant Vcc: real:= 5.00。 constant,variable,signal三類對象說明的一般形式是: constant 常數(shù)名表:數(shù)據(jù)類型 [:= 表達(dá)式]; variable 變量名表:數(shù)據(jù)類型 [:= 表達(dá)式]; signal 信號名表:數(shù)據(jù)類型 [信號類別][:= 表達(dá)式];表5—2 三種對象的含義和說明場合對象類別含 義說明語句的場合信號說明全局量architecture,package,entity變量說明局部量process,function,procedure常數(shù)說明全局量以上均可說明:① 常數(shù)名表、變量名表和信號名表,是由一個標(biāo)識符或以“,”隔開的多個標(biāo)識符組成。它們的區(qū)別有:1)在電子電路設(shè)計(jì)中,這三類對象都與一定的物理對象相對應(yīng)。 VHDL中每個對象都具有一定的類型,類型決定對象可能取值的種類。這樣由上至下進(jìn)行系統(tǒng)硬件設(shè)計(jì)的好處是:在程序設(shè)計(jì)的每一步都可進(jìn)行仿真檢查、有利于盡早發(fā)現(xiàn)系統(tǒng)設(shè)計(jì)中存在的問題。 程序中,實(shí)體mp對處理器的外部引腳進(jìn)行了說明,結(jié)構(gòu)體則對處理器內(nèi)部結(jié)構(gòu)及相互關(guān)系進(jìn)行了描述:1)在結(jié)構(gòu)體的說明部分,使用元件說明語句(如 ponent mcu port (…); end ponent;)描述了子模塊的名稱(mcu)和端口(形式端口);2)在結(jié)構(gòu)體的語句部分,用元件實(shí)例化語句(1—1: 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ì)。 for 1—5: miu use entity work.miu; end for。 for struct_view for l—1:mcu use entity work.mcu; end for。library WORK;use ;. . .— entity declaration of mpentity mp is generic (...)。這些子模塊對應(yīng)于設(shè)計(jì)實(shí)體 mp中的各個元件,用結(jié)構(gòu)體中的 ponent說明語句對元件的名字和接口進(jìn)行說明: mcu miu alu bsu rfu bcu 圖53處理器的6大部分 表5—1處理器各部分的功能說明 TOP LEVEL。下面以設(shè)計(jì)一個小規(guī)模處理器mp為例,簡要說明VHDL程序的基本結(jié)構(gòu)。configuration s2 of orl is. . .end s2。例如:1ibrary IEEE: 庫使用說明use IEEE.STD_LOGIC_1164.ALL;entity and1 is. . . end andl;architecture rt1 of and1 is. . .end rt1。 Use IEEE.STD_LOGIC_1164.a(chǎn)ll。其中存放著的 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庫中?;驹▽?shí)體說明、包說明和配置,輔助元為包體和結(jié)構(gòu)體。這樣,①配置語句(組裝說明)為要設(shè)計(jì)的實(shí)體選擇了結(jié)構(gòu)體,②元件配置或組裝規(guī)則將元件與某個實(shí)體及其相應(yīng)的結(jié)構(gòu)體對應(yīng)起來。 類似元件配置的語句也可用于結(jié)構(gòu)體中,稱組裝規(guī)則。 屬于配置語句部分,為實(shí)體Processor選擇了結(jié)構(gòu)體Structure_View(用語句 for Structure_View … ); 結(jié)構(gòu)體 Structure_View僅給出了元件ALU、MUX的模板,而沒有給出任何實(shí)質(zhì)的行為或結(jié)構(gòu)描述,所以配置語句中又采用元件配置(Component Configuration),如 for A1: ALU use configuration TTL.SN74LSl81。 a configuration of the microprocessor;1ibrary ;configuration V4_27_87 of processor is use Work.All。配置(Configuration) 利用配置語句(又叫組裝說明),設(shè)計(jì)者可以為待設(shè)計(jì)的實(shí)體從資源文件(庫或包)中選擇不同行為和結(jié)構(gòu)的結(jié)構(gòu)體。④ 在一個設(shè)計(jì)實(shí)體中加上use子句(在實(shí)體說明之前),可以使包說明中的內(nèi)容可見。end Logic。 ③ 可見性:包體中的子程序體和說明部分不能被其它VHDL元件引用,只對相應(yīng)的包說明可見,而包說明中的內(nèi)容才是通用的和可見的(當(dāng)然還必須用use子句才能提供這種可見性)。子程序包括過程(procedure)和函數(shù)(function),分別由子程序說明和子程序體(子程序定義)兩部分組成。 包分為包說明(Package Declaration)和包體(Package Body)兩部分。167。 即對外端口相同而內(nèi)部行為或結(jié)構(gòu)不同的模塊,其對應(yīng)的實(shí)體可以具有相同的實(shí)體說明和不同的結(jié)構(gòu)體。 對內(nèi)部信號tmp進(jìn)行定義 信號定義和端口語句一樣,應(yīng)有信號名和數(shù)據(jù)類型的說明 因它是內(nèi)部連接用的信號,故沒有也不需要方向說明begin. . .end connect;關(guān)于說明語句還會在后面繼續(xù)介紹。結(jié)構(gòu)體名稱的命名規(guī)則與實(shí)體名的命名規(guī)則相同。結(jié)構(gòu)體(Architecture Body) 結(jié)構(gòu)體是對實(shí)體功能的具體描述,必須跟在實(shí)體后面。例如對二選一電路描述中的 port(do,d1,sel:in BIT; q:out B1T);其一般書寫格式是: port(端口名{,端口名}:[方向]子類型名[bus][:=初始值] {;端口名{,端口名}: [方向]子類型名[bus][:=初始值]}) 其中方向用于定義外部引腳的信號方向是輸入還是輸出,共有五種方向: in,out,inout,buffer,1inkage。② [ ]表示其中的部分是可選項(xiàng); ③ 對VHDL而言,大小寫一視同仁,不加區(qū)分; ④ 實(shí)體說明以 entity 實(shí)體名is開始,至 end[實(shí)體名]結(jié)束,最簡單的實(shí)體說明是: entity E is end;除此之外,其余各項(xiàng)皆為可選項(xiàng);⑤ 類屬(Generic)語句必須放在端口語句之前,用于指定由環(huán)境決定的參數(shù)。 ⑤ 由 ponent instantiation statements說明的為元件實(shí)例化語句部分。 因?yàn)閕n是缺省的I/O狀態(tài)。 ② In1: in Bit 。 U1 : Half_adder port map ( X = Temp_sum , Y = Carry_in Sum = AB , Carry = Temp _Carry_2 ) 。 ponent Or_gate port ( In1 : Bit : In2 : Bit 。 Y : in Bit 。 architecture Structure of Full_adder is signal declarations signal Temp_sum : Bit 。 Carry_in : in Bit 。entity mux isgeneric(m:TIME:=1ns); port(d0,d1,sel: in BIT;q: out BIT);end mux。 Carry = X and Y after 5 Ns 。 Sum : out Bit 。實(shí)體描述模塊的對外端口,結(jié)構(gòu)體描述模塊的內(nèi)部情況即模塊的行為和結(jié)構(gòu)。167。前四種是可分別編譯的源設(shè)計(jì)單元。4)VHDL語言標(biāo)準(zhǔn)、規(guī)范,易于共享和復(fù)用VHDL語言的語法較嚴(yán)格,給閱讀和使用都帶來了極大的好處。3)VHDL語言可以與工藝無關(guān)編程VHDL設(shè)計(jì)硬件系統(tǒng)時,可以編寫與工藝有關(guān)的信息。 利用VHDL設(shè)計(jì)硬件電路的優(yōu)點(diǎn)是: 1) 設(shè)計(jì)技術(shù)齊全、方法靈活、支持廣泛 VHDL語言可以支持自上而下和基于庫的設(shè)計(jì)方法,還支持同步電路、異步電路、 FPGA以及其他隨機(jī)電路的設(shè)計(jì)。 1987年12月10日, IEEE標(biāo)準(zhǔn)化組織發(fā)布IEEE標(biāo)準(zhǔn)的VHDL,定為 IEEE Stdl076—1987標(biāo)準(zhǔn)(該標(biāo)準(zhǔn)是從1983年8月美國空軍支持并開發(fā)的VHDL7.2版發(fā)展而來)。但這種設(shè)計(jì)方法就其本身而言仍是自下而上的設(shè)計(jì)方法,即利用已有的邏輯器件來構(gòu)成硬件電路,它沒有脫離傳統(tǒng)的硬件設(shè)計(jì)思路。一開始,僅用 CAD來實(shí)現(xiàn)印刷板的布線,以后才慢慢實(shí)現(xiàn)了插件板級規(guī)模的設(shè)計(jì)和仿真,其中最具代表性的設(shè)計(jì)工具是OrCad和Tango,它們的出現(xiàn)使電子電路設(shè)計(jì)和印刷板布線工藝實(shí)現(xiàn)了自動化。其中最具代表性的就是美國國防部開發(fā)的VHDL語言和 Verilog公司開發(fā)的Verilog HDL以及日本電子工業(yè)振興協(xié)會開發(fā)的UDL/I語言。由此可見,使用 VHDL語言來設(shè)計(jì)數(shù)字系統(tǒng)在一定程度上是電子設(shè)計(jì)技術(shù)的大勢所趨。2)系統(tǒng)硬件描述能力強(qiáng) VHDL具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型直到門級電路。所以,在VHDL中,電路設(shè)計(jì)的編程可以與工藝相互獨(dú)立。51 VHDL程序的基本結(jié)構(gòu)一個完整的VHDL語言程序通常包含實(shí)體(Entity),結(jié)構(gòu)體(Architecture),配置(Configuration),包(package)和庫(Library)5個部分。本章將對上述5部分作一詳細(xì)介紹。但無論是簡單的還是復(fù)雜的數(shù)字電路,VHDL程序的基本構(gòu)成都是一樣的,都由實(shí)體和結(jié)構(gòu)體構(gòu)成。 Y adder Carry Y: in Bit 。 The architecture body : architecture Behavioral_description of Half_adder is begin process begin Sum = X xor Y after 5 Ns 。 end Behavioral_description例2描述了作為一個設(shè)計(jì)實(shí)體的二選一電路。 B : in Bit 。 end Full_adder 。 local ponent declarations ponent Half_adder port ( X : in Bit 。 end ponent 。 ponent instantiation statements U0 : Half_adder port map ( X = A, Y = B, Sum = Temp_sum , Carry = Temp_carry_1 ) 。 圖52 由半加器構(gòu)造的全加器說明: ① 在上述所有例子中,粗斜體(如end ) 表示該標(biāo)識符( end )為系統(tǒng)保留字。 In2: Bit。 注明的一段為元件說明語句, 給出了該元件的外端口情況, 或者說是給出了一個元件的模板。該字符串中的任意字符可以是“a”到“z”,“A”到“Z”,或數(shù)字“0”到“9”,以及下劃線“_”;字符串的第一個字符必須是字母,中間不包括空格,且最后一個字符不可以為下劃線,兩個下劃線不允許相鄰。又如: entity AndGate is generic(N:Natural:=2); port(inputs: in Bit_vector(1 to N); result: out