【正文】
Bit); 一一類屬參數(shù)N規(guī)定了位矢量(Bit_Vector)inputs的長度end AndGate;⑥ 端口(port)說明是關于設計實體之外部接口的描述,規(guī)定了端口的名稱、數(shù)據(jù)類型和輸入輸出方向。 ⑦ 說明語句(Declaration)可以包括:subprogram說明subprogram定義(或稱subprogram體)type說明subtype說明constant說明signal說明 file說明alias說明attribute說明attribute定義use語句disconnection定義用于對設計實體內(nèi)所用的信號、常數(shù)、數(shù)據(jù)類型和函數(shù)進行定義,這種定義對該設計實體是可見的。is用來結束結構體的命名。例如在對二選一電路的描述中:architecture connect of mux issignal tmp: BIT。二選一電路描述中的進程語句如下: cale: process(d0,d1,sel) variable tmp1,tmp2,tmp3:BIT; begin . . . end process; ④ 一個實體可以有多個不同的結構體。所以VHDL規(guī)定:對應于同一實體的結構體不允許同名,而對應于不同實體的結構體可以同名。包用來單純的羅列要用到的信號定義、常數(shù)定義、數(shù)據(jù)類型,元件語句、函數(shù)定義和過程定義等,它是一個可編譯的設計單元,也是庫結構中的一個層次。 包體中的說明語句可包括:subprogram定義type說明subtype說明 constant說明fi1e說明 alias說明use語句 VHDL中的subprogram(子程序)概念,與一般計算機高級語句中子程序的概念類似。這種分開描述的好處是,當函數(shù)的功能需要作某些調(diào)整時,只要改變包體的相關語句就行了,這樣可以使重新編譯的單元數(shù)目盡可能少。 end invert。所以,包說明包含的是通用的、可見的說明;而包體包含的是專用的、不可見的說明。⑤ 包也可以只有—個包說明,因為如果包說明中既不創(chuàng)造子程序說明也無有待在包體中賦值的常數(shù)(deferred constant)時,包體就沒必要存在了。 ——an architecture of a microprocessor: architecture Structure_View of Processor is ——ponent說明語句 Component ALU port(…) end ponent;Component MUX port(…) end ponent;begin ——ponent實例化語句: A1: ALU port map(…);M1: MUX port map(…);M2: MUX port map(…);end Structure_View。 其中:configuration V4_27_87 of Processor is ... end V4_27_87。 將元件 MUX(M M2)組裝到庫Work中的實體Multiplex4 及相應的結構體Behavior上,使元件具有具體的行為或結構。組裝規(guī)則就是將元件實例化語句中的元件(如 M1,M2:MUX)組裝到實體Multiplex4 及其相應的結構體(Behavior)或已有的某個組裝說明上。 VHDL中有兩類庫元 基本元和輔助元。 IEEE庫中匯集著一些 IEEE認可的標準包集合,如STD_LOGIC_1164;STD庫是 VHDL的標準集。例如: Library IEEE。當一個源程序中出現(xiàn)兩個以上的實體時,庫語句應在每個實體說明語句前書寫。 庫使用說明use IEEE.STD_LOGIC_1164.a(chǎn)11;entity orl is. . .end or1。 采用 VHDL語言進行硬件設計時,采用自上而下的設計方法,逐步將設計內(nèi)容細化最后完成系統(tǒng)硬件的整體設計。 圖53中,處理器mp按功能被分為6個子模塊:mcu、 miu、 alu、bsu、 rfu、 bcu(具體功能見表5—1)。use EXTENSION. all。 a configuration of mp;configuration of V_5_30 of mp is use 。 for 1—4:bsu use entity work.bsu; end for。end V_5_30。5)如果子模塊又可以分成幾個小模塊,則將進行該系統(tǒng)的更次一層設計(方法相同),...如此細化下去,直到最底層設計。52 VHDL語言的基本數(shù)據(jù)類型和操作符 具有值的信息載體稱為對象( Object)。521 VHDL語言的對象和分類 VHDL中的對象主要有以下三種:信號(signal)、變量(variable)、常數(shù)(constant)。對象說明 每個對象都有類型,該類型決定可能取值的類型。③ 信號類別只有 bus或 register兩種類型,是可選項。信號是電子電路內(nèi)部硬件連接的抽象;變量沒有與硬件對應的器件。信號賦值可以加延時,使賦予信號的值在一段時間后代入。4)信號是全局量,可用于進行進程間的通信,可用于 architecture、 package、 entity的說明部分;變量是局部量,只能用于process、function、procedure 之中。另外,為使用戶設計方便,還可以由用戶自定義數(shù)據(jù)類型。標量類型(Scalar type) 標量類型是指其值能在一維數(shù)軸上從大到小排列的數(shù)據(jù)類型。 例如,用戶可自定義枚舉類型:type Switch_level is(‘0’,‘1’,‘x’);又如,VHDL預定義了枚舉類型,有: Character, Bit, Boolean, Severity_ 1evel(錯誤等級,用于提示系統(tǒng)當前的工作狀態(tài): NOTE,WARNING,ERROR, FAlLURE)。 VHDL中還可以自定義整數(shù)類型和浮點類型,它們分別是以上兩個類型的子集。物理量類型的定義包括一個域限制、一個基本單位和幾個次級單位。mm = 1000um。end units;Distance物理量的說明和運算,如X:Distance;X:=5A + 13um 50nm。 VHDL預定義了物理量類型TIME,放在Standard包中: Type Time is range (2**31 1) to (2**31 1) units fs; 毫微微秒 ps = 1000 fs; —微微秒 ns = 1000 ps; us = l000 ns。 hr = 60 min。復合類型有兩種:數(shù)組和記錄。它們被放在STD庫的 Standard包中。 inst:instruction; end record。這些操作符預定義為4類:算術運算符、邏輯運算符、關系運算符、連接運算符。將4個en相連為位矢量‘1111’賦入temp_b: temp_b:= en&en&en&en;167。行為描述是對系統(tǒng)書寫模型的描述,結構描述是對系統(tǒng)的子元件和子元件之間相互關系的描述。3)用途不同。 在用VHDL描述系統(tǒng)的行為時,按語句執(zhí)行順序可分為順序描述語句(Sequential Statement)和并發(fā)描述語句(Concurrent Statement)。一個典型的例子是: entity SRFF is port(s,r:in bit; q,qBar:out bit);end SRFF。 Wait on r,s。有四種wait語句以設置不同的條件:wait; 無限等待;wait on 信號名表。斷言語句(assertion_statement)斷言語句主要用于程序仿真,以便調(diào)試時進行人機對話,監(jiān)視系統(tǒng)當前工作狀態(tài)和給出警告或錯誤信息。② report后跟的是設計者寫的字符串,用于說明錯誤的原因,用“”括起來。在RS觸發(fā)器的行為描述中,錯誤級別為ERROR,模擬會終止。變量賦值語句一般形式為:目的變量:= 表達式; 說明:① 該語句表明將右邊的值賦予左邊的目的變量,但左右兩邊的類型必須相同。具體例子可以參考RS觸發(fā)器程序。其中,when 表達式可以有4種形式:when值 =>順序處理語句;when值|值|值|. . .值|=>順序處理語句;when others => 順序處理語句;when值to值=>順序處理語句; 表示在一定取值范圍內(nèi)執(zhí)行順序處理語句。 end case:循環(huán)語句(1oop)loop語句有兩種表達形式:① [標號:] for 循環(huán)變量 in 離散范圍 loop 順序處理語句 end loop [標號]; 例如,對數(shù)1 9進行累加運算: sum :=0。 assume: while ( i 10 ) loop sum:=sum + 1。167。其一般形式為: [標號:] process [(敏感信號表)] [進程說明部分]begin { 順序處理語句 } end process [標號];說明:① 敏感信號表中只要有一個信號發(fā)生變化,進程就將啟動。② 說明語句同結構體的說明語句,主要是對塊內(nèi)所要用到的對象加以說明。 reg: block signal qbus: Bit_vector(31 downto 0); begin … 并發(fā)語句 end block reg;end cpu_blk; 注意:塊語句與進程語句的最大區(qū)別是:塊的語句部分是并發(fā)執(zhí)行語句,進程的語句部分是順序執(zhí)行語句。并發(fā)信號賦值語句還可以分兩種形式:條件信號賦值語句和選擇信號賦值語句:第一種,條件信號賦值語句的一般形式是: 目的信號量<=表達式1 when條件 l else 表達式2 when條件2 else 表達式3 when條件3 else 表達式n;表示當 when后指定的條件滿足,則將相應表達式的值代入目的信號量;否則判斷下一個表達式的條件。第二種,選擇信號賦值語句如果說條件信號賦值語句與帶有if語句的進程等價,那么選擇信號賦值語句與帶有case語句的進程等價。 i3 when“11”。 end Invert_8 。 begin G : for I in 1 to 8 generate Inv : Inverter port map ( Inputs( I ), Outputs ( I ) ) 。如果改成下列映射形式, 就稱為 “命名映射” : Inv : Inverter port map ( I1 = Inputs( I ), O1 = Outputs( I ) ) 。只有在小路上發(fā)現(xiàn)有車時高速公路上的交通燈才有可能為紅燈。設計交通燈控制器按以下步驟進行:規(guī)格設計、產(chǎn)生詳細說明:首先要確定設計問題的特性。為了將這些信息編碼化,應該定義一個擁有燈的顏色類型和系統(tǒng)狀態(tài)類型的包。因為系統(tǒng)要控制四條路上的燈,所以需要兩個輸出信號分別控制公路燈和小路燈,稱作Highway_1ight和Farmroad_light,其值由 Color類型決定。這樣便可以定義實體:use work.entity Traffic_light_controller is generic(long_time :Time; short_time:Time); port( car_on_farmload:in boolean;Highway_light: out Color。每進入一個新狀態(tài),相應的定時器就開始工作,當超過 long_time和 short_time時,將修改狀態(tài)。when highway_1ight_yellow => if Time_out_short then start_timer:= not start_timer。when farmload_1ight_yellow => if Time_out_short then start_timer:= not start_timer。 選擇信號賦值語句完成所有狀態(tài)對輸出信號的控制; Highway_light_set: With Present_state selectHighway_1ight = green when Highway_ligh_green。 Yellow when Farmload_light_yellow。 end process。用VHDL文本描述語言設計一個1位全加器電路,一個4位16進制計數(shù)器