【正文】
。 END GENERATE u4。 END GENERATE u23。 END GENERATE u1。 SIGNAL x : std_logic_vector (0 TO 2 )。 END body。 BEGIN dff4: FOR i IN 3 DOWNTO 0 GENERATE u: dff PORT MAP (d (i), clk, clrn, prn, q (i))。 q : OUT std_logic)。 END dff_4。 d: IN std_logic_vector (0 TO 3 )。 生成語句格式: 標(biāo)號(hào): FOR 循環(huán)變量 IN 取值范圍 GENERATE 說明語句; BEGIN 并行語句; END GENERATE[標(biāo)號(hào) ]; 或: 標(biāo)號(hào): IF 條件 GENERATE 說明語句; BEGIN 并行語句; END GENERATE [標(biāo)號(hào) ]; 【 例 714】 利用 GENERATE語句產(chǎn)生如圖的 4D觸發(fā)器。只有相同數(shù)據(jù)類型的量才能互相傳遞和運(yùn)算。 【 例 711】 1位全加器說明元件例化與調(diào)用的方法 半加器設(shè)計(jì): LIBRARY IEEE; USE IEEE. STD_LOGIC_1164. ALL; ENTITY halfadder IS PORT (a,b: IN STD_LOGIC; co,so: OUT STD_LOGIC); END halhadder; ARCHITECTURE fhl OF halfadder is BEGIN sO = a XOR b; cO = a AND b; END fhl。 2) PORT MAP是端口映射 /連接的意思.其中的“ 端口名 ” 是在元件定義語句中的端口名, “ 連接端口名 ” 則是頂層系統(tǒng)中.準(zhǔn)備與接入的元件的端口相連的通信線名,或者是頂層系統(tǒng)的信號(hào)名。如果元件在程序包中定義,元件聲明語句必須放在程序包包頭內(nèi)。 底層文件可經(jīng)過 元件例化 ,變成一個(gè)元件,頂層文件可對(duì)此元件調(diào)用并進(jìn)行端口連接。這樣可幾人分工協(xié)作,提高工作效率。 【 例 78】 數(shù)據(jù)轉(zhuǎn)換子程序 PROCEDURE prgl(VARIABLE value: INOUT BIT_VECTOR(0 TO 3)) IS BEGIN CASE value IS WHEN “0000”= value: =”0101”; WHEN “0101”=value: =“0000”; WHEN OTHERS=value: =“1111”; END CASE; END PROCEDURE prgl; 過程調(diào)用 調(diào)用格式:過程名(變量表); 變量表順序按過程定義的變量表順序 【 例 610】 重載過程與過程調(diào)用 PROCEDURE calcu ( v1, v2: IN REAL; SIGNAL out1: INOUT INTEGER) ; PROCEDURE calcu ( v1, v2: In INTEGER; SIGNAL outl: INOUT REAL) ; …… Calcu (, , signl) ; 調(diào)用第一個(gè)過程 calcu calcu(23, 320, sign2); 調(diào)用第二個(gè)過程 calcu …… 先介紹再調(diào)用 元件例化與調(diào)用 在龐大的系統(tǒng)設(shè)計(jì)中,常常將系統(tǒng)分割成幾個(gè)模塊,每個(gè)模塊完成某一特定的功能。如果沒有指定模式,則默認(rèn)為 IN。 END FUNCTION max; 結(jié)束 FUNCTION語句 END; 結(jié)束 PACKAGE BODY語句 重載函數(shù)的調(diào)用 LIBRARY IEEE ; USE IEEE. STD_LOGIC_1164. ALL; USE WORK. ; ENTITY axamp IS PORT( a1, b1: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 【 例 77】 重載函數(shù) LIBRARY IEEE; USE IEEE. STD_LOGIC_1164. ALL; PACKAGE packexp IS; 定義程序包 定義函數(shù)首 FUNCTION max(a, b: IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR; FUNCTION max(a, b: IN BIT_VECTOR) 定義函數(shù)首 RETURN BIT_VECTOR。以此定義的函數(shù)稱為重載函數(shù)。 一旦函數(shù)被調(diào)用,就將執(zhí)行這部分語句。 【 例 76】 在程序包中定義,在應(yīng)用程序中調(diào)用的例子。 E、參數(shù)表格式:參數(shù)名:數(shù)據(jù)類型; 如: FUNCTION max(a, b : STD_LOGIC) RETURN STD_LOGIC; 2)函數(shù)體定義 FUNCTION 函數(shù)名 (輸入?yún)?shù)表 ) RETURN 數(shù)據(jù)類型 IS 函數(shù)體 [說明部分 ] BEGIN 順序語句; RETURN 返回變量名; END [FUNCTION] 函數(shù)名; 3)如果要將一個(gè)己編制好的函數(shù)并入程序包,函數(shù)首必須放在程序包的說明部分,而函數(shù)體需放在程序包的包體內(nèi)。新功能的定義是靠函數(shù)體來完成的, D、參數(shù)表是用來定義輸入值的,所以不必以顯式表示參數(shù)的方向。 ? 函數(shù)首定義: FUNCTION 函數(shù)名 (輸入?yún)?shù)表 ) RETURN 數(shù)據(jù)類型 A、在進(jìn)程、結(jié)構(gòu)體中不必定義,在程序包中必須定義 B、函數(shù)首相當(dāng)于標(biāo)簽,入庫的是函數(shù)體 C、函數(shù)名可以是普通的標(biāo)識(shí)符,也可以是運(yùn)算符,運(yùn)算符必須加上雙引號(hào),這就是所謂的 運(yùn)算符重載 。 ? 轉(zhuǎn)換函數(shù)用于從一種數(shù)據(jù)類型到另一種數(shù)據(jù)類型的轉(zhuǎn)換,如在元件例化語句中利用轉(zhuǎn)換函數(shù)可允許不同數(shù)據(jù)類型的信號(hào)和端口間進(jìn)行映射。 ? 預(yù)定義函數(shù)是庫中現(xiàn)成的、具有專用功能的函數(shù),如決斷函數(shù)、轉(zhuǎn)換函數(shù)等。 應(yīng)該注意,綜合后的子程序?qū)⒂成溆谀繕?biāo)芯片中的一個(gè)相應(yīng)的電路模塊,且每一次調(diào)用都將在硬件結(jié)構(gòu)中產(chǎn)生對(duì)應(yīng)于具有相同結(jié)構(gòu)的不同的模塊。 由于只有在程序包中定義的子程序可被其他不同的設(shè)計(jì)所調(diào)用,所以一般應(yīng)該將子程序放在程序包中。 子程序只能通過子程序調(diào)用及子程序的界面端口進(jìn)行數(shù)據(jù)傳遞,不能像進(jìn)程那樣可以從本結(jié)構(gòu)體的并行語句或進(jìn)程結(jié)構(gòu)中直接讀取信號(hào)值或者向信號(hào)賦值。 子程序 SUBPROGRAM 子程序是一個(gè) VHDL程序模塊,與其他軟件語言程序中的子程序的目的相似,能更有效地完成重復(fù)性的工作。在使用本程序包之前,需加語句 U