【正文】
取值范圍是枚舉量:type insflag is array (instruction ADD to SRF) of Integer; ② VHDL中預定義的數(shù)組類型有字符串 string和位矢量 bit_vector。1)數(shù)組類型(Array) 數(shù)組是類型相同的數(shù)據(jù)集合在一起所形成的新的數(shù)據(jù)類型,它可以是一維的、二維的或多維的。復合類型復合類型即其值可分成更小對象的類型。end units。 min = 60 sec。 ms = 1000 us。② 次級單位是一個整數(shù)乘以基本單位。由上面的例子可以看出,物理量類型定義的一般形式是:type 數(shù)據(jù)類型名 is 范圍units 基本單位;次級單位:end units。km = 1000m。cm = 10mm。um = 1000nm。每個次級單位是一個整數(shù)乘以基本單位。2) 定義一個只能取 104 ~ 104的實數(shù):type current is real range 1E4 to 1E4; 3)物理量類型一個物理量類型的數(shù)據(jù)應包含整數(shù)和單位兩部分。自定義整型或浮點型的一般形式是: Type 數(shù)據(jù)類型 is 原數(shù)據(jù)類型名 約束范圍;其中,“約束范圍”用“range邊界1 to/downto邊界2”表示。在VHDL中已預定義的整數(shù)范圍是(2311)~(2311);*1038 ~ *1038。這些預定義放在Standard包內(nèi)。它定義的是一組由括號括起的標識符或字符表。標量分整型(integer)、浮點型(float)、物理量型(physics)、枚舉型(Enumeration)。后兩種Access和 File類型在具體使用時,可以查閱有關(guān)手冊。 VHDL的數(shù)據(jù)類型分四類,標量類型(Scalar)、復合類型(Composite)、存取類型(Access)、文件類型(File)。522 數(shù)據(jù)類型 VHDL提供了多種標準的數(shù)據(jù)類型,放在STD庫的 Standard包中。從上面幾點不難看出,將變量和信號區(qū)別開來的根本出發(fā)點是它們對應的物理意義不同。如 temp3:= temp1 + temp2 after l0ns,是非法的。如:S1<=S2 after l0ns;S2的值經(jīng)過10ns的延時后才被代入Sl。3)變量賦值不能加延時,且語句一旦被執(zhí)行,其值立即被賦予變量。2)賦值符號不同。 signal ground :Bit:=‘0’;變量和信號的區(qū)別1)物理意義不同。對象說明的示例如下: constant Vcc: real:= 5.00。通常常數(shù)賦值在常數(shù)說明時進行,且常數(shù)一旦被賦值就不能改變。 constant,variable,signal三類對象說明的一般形式是: constant 常數(shù)名表:數(shù)據(jù)類型 [:= 表達式]; variable 變量名表:數(shù)據(jù)類型 [:= 表達式]; signal 信號名表:數(shù)據(jù)類型 [信號類別][:= 表達式];表5—2 三種對象的含義和說明場合對象類別含 義說明語句的場合信號說明全局量architecture,package,entity變量說明局部量process,function,procedure常數(shù)說明全局量以上均可說明:① 常數(shù)名表、變量名表和信號名表,是由一個標識符或以“,”隔開的多個標識符組成。3) 三種對象的含義和說明場合不同,見表5—2。它們的區(qū)別有:1)在電子電路設計中,這三類對象都與一定的物理對象相對應。 167。 VHDL中每個對象都具有一定的類型,類型決定對象可能取值的種類。 167。這樣由上至下進行系統(tǒng)硬件設計的好處是:在程序設計的每一步都可進行仿真檢查、有利于盡早發(fā)現(xiàn)系統(tǒng)設計中存在的問題。這種對各個子模塊的VHDL設計是該系統(tǒng)的次一層設計。 程序中,實體mp對處理器的外部引腳進行了說明,結(jié)構(gòu)體則對處理器內(nèi)部結(jié)構(gòu)及相互關(guān)系進行了描述:1)在結(jié)構(gòu)體的說明部分,使用元件說明語句(如 ponent mcu port (…); end ponent;)描述了子模塊的名稱(mcu)和端口(形式端口);2)在結(jié)構(gòu)體的語句部分,用元件實例化語句(1—1: mcu port map(…);)將元件標號、元件名稱的對應關(guān)系進行描述,給出形式端口與實體中的端口、實際信號以及各子元件間的連接關(guān)系;3)用 Configuration語句(如configuration V_5_30 of mp is … end V_5_30;)或一些組裝規(guī)則將各個實際元件與器件庫中的特定實體對應起來,從而使這個設計實體完成了該處理器的頂層設計。 end for。 for 1—5: miu use entity work.miu; end for。 for l—3:bcu use entity work.bcu; end for。 for struct_view for l—1:mcu use entity work.mcu; end for?!?an architecture of mp; architecture struct_view of mp is ponent mcu port(...); end ponent;ponent alu port(...); end ponent;ponent bcu port(...); end ponent;ponent bsu port(...); end ponent;ponent miu port(...); end ponent;ponent rfu port(...); end ponent;begin l—1: mcu port map(...); 1—2: alu port map(...); 1—3: bcu port map(...); 1—4: bsu port map(...); 1—5: miu port map(...); 1—6: rfu port map(...);end struct_view。library WORK;use ;. . .— entity declaration of mpentity mp is generic (...)。use .a(chǎn)ll。這些子模塊對應于設計實體 mp中的各個元件,用結(jié)構(gòu)體中的 ponent說明語句對元件的名字和接口進行說明: mcu miu alu bsu rfu bcu 圖53處理器的6大部分 表5—1處理器各部分的功能說明 TOP LEVEL。所謂自上而下的設計方法,即先將要設計的硬件系統(tǒng)(如微處理器mp)看成一個頂部模塊,對應于VHDL程序中的一個設計實體(entity mp);然后按一定的標準(如功能)將該系統(tǒng)分成多個子模塊,見圖53。下面以設計一個小規(guī)模處理器mp為例,簡要說明VHDL程序的基本結(jié)構(gòu)。 513 設計實例 以上從設計硬件電路的角度出發(fā),介紹了完整的VHDL語言程序應具備的5個部分:實體+結(jié)構(gòu)體,并配合以相應的資源(包、庫、組裝說明)。configuration s2 of orl is. . .end s2。library IEEE。例如:1ibrary IEEE: 庫使用說明use IEEE.STD_LOGIC_1164.ALL;entity and1 is. . . end andl;architecture rt1 of and1 is. . .end rt1。3) 庫的作用范圍 庫語句的作用范圍從一個實體說明開始到它所屬的結(jié)構(gòu)體和配置為止。 Use IEEE.STD_LOGIC_1164.a(chǎn)ll。 Library的說明總是放在設計單元的最前面,其一般形式為:Library庫名;接著用 use子句使庫中的包和包中的項可見。其中存放著的 STANDARD包是VHDL的標準配置,如定義了Boo1ean、Character等數(shù)據(jù)類型; ASIC庫存放著與邏輯門一一對應的實體; 用戶為自身設計需要所開發(fā)的共用包集和實體等可以匯集在一起,定義為用戶定義庫; WORK庫是現(xiàn)行工作庫,設計者所描述的 VHDL語句不加任何說明時,都將存放在 WORK庫中,例如,用戶自定義的包在編譯后都會自動加入到W0RK庫中。1) 庫的種類 在VHDL語言中存在的庫大致可以歸納為5種:IEEE庫、STD庫、ASIC庫、用戶定義的庫和WORK庫?;驹▽嶓w說明、包說明和配置,輔助元為包體和結(jié)構(gòu)體。庫由庫元組成,庫元是可以獨立編譯的VHDL結(jié)構(gòu)。這樣,①配置語句(組裝說明)為要設計的實體選擇了結(jié)構(gòu)體,②元件配置或組裝規(guī)則將元件與某個實體及其相應的結(jié)構(gòu)體對應起來。 組裝規(guī)則的一般形式是: for 元件例示標號:元件名 use 對應對象; 其中對應對象可以是某個配置configuration或?qū)嶓wentity。 類似元件配置的語句也可用于結(jié)構(gòu)體中,稱組裝規(guī)則。 為元件ALU選擇標準庫TTL中的配置SN74LSl81; for Ml,M2:MUX use entity Multiplex4(Behavior); end for。 屬于配置語句部分,為實體Processor選擇了結(jié)構(gòu)體Structure_View(用語句 for Structure_View … ); 結(jié)構(gòu)體 Structure_View僅給出了元件ALU、MUX的模板,而沒有給出任何實質(zhì)的行為或結(jié)構(gòu)描述,所以配置語句中又采用元件配置(Component Configuration),如 for A1: ALU use configuration TTL.SN74LSl81。 for Ml,M2:MUX use entity Multiplex4(Behavior); end for;end for;end V4_27_87。 a configuration of the microprocessor;1ibrary ;configuration V4_27_87 of processor is use Work.All。 配置語句的一般形式為: configuration 配置名 of實體名 is [配置說明部分: use子句或 attribute 定義;] [語句說明;]end [配置名];配置語句根據(jù)不同情況,其語句說明有繁有簡,以下以一個微處理器的配置為例作一些簡要說明。配置(Configuration) 利用配置語句(又叫組裝說明),設計者可以為待設計的實體從資源文件(庫或包)中選擇不同行為和結(jié)構(gòu)的結(jié)構(gòu)體。 又如, use ; 表示將用戶自定義的包Logic中的類型Three_1evel_1ogic對相應的設計實體可見。④ 在一個設計實體中加上use子句(在實體說明之前),可以使包說明中的內(nèi)容可見。這部分內(nèi)容只對包說明(即第一段)可見。end Logic。package body Logic is function invert(1nput:Three_1evel_1ogic)return Three_level_logic is begin case lnput is when‘O’=> return‘1’; when‘1’=> return‘0’; when‘z’=> return‘z’; end case。 ③ 可見性:包體中的子程序體和說明部分不能被其它VHDL元件引用,只對相應的包說明可見,而包說明中的內(nèi)容才是通用的和可見的(當然還必須用use子句才能提供這種可見性)。包說明可定義數(shù)據(jù)類型,給出函數(shù)的調(diào)用說明,而在包體中才具體的描述實現(xiàn)該函數(shù)功能的語句(即函數(shù)定義)和數(shù)據(jù)的賦值。子程序包括過程(procedure)和函數(shù)(function),分別由子程序說明和子程序體(子程序定義)兩部分組成。② 包說明中的說明語句可包括:subprogram說明 type說明subtype說明 constant說明signal說明file說明alias說明 attribute說明attribute定義 use語句disconnection定義即除了不包括子程序體外,與實體說明中的說明語句情況相同。 包分為包說明(Package Declaration)和包體(Package Body)兩部分。為了提供一組可被多個設計實體共享的類型、常量和子程序說明,VHDL提供了包(Package)。167。從這個意義上說,一個實體說明代表了一組端口相同的設計實體(如兩輸入端的“與非門”和兩輸入端的“或非門”等)。 即對外端口相同而內(nèi)部行為或結(jié)構(gòu)不同的模塊,其對應的實體可以具有相同的實體說明和不同的結(jié)構(gòu)體。包括block語句process語句Procedure調(diào)用語句assert語句assig