【正文】
用戶自定義的屬性 用戶自定義屬性的值在仿真中是不能改變的,也不能用于邏輯綜合。 ATTRIBUTE max_area OF fifo: ENTITY IS 。 END LOOP。 BEGIN FOR i IN vect39。RANGE[(n)] ?a39。BASE39。BASE39。BASE do_nothing: PROCESS(x) IS TYPE color IS (red,blue,green,yellow,brown,black)。039。TRANSACTION 屬性 39。QUIET具有與 39。STABLE需要建立一個額外的信號,這將使其使用更多的內(nèi)存。)) THEN …… END IF。139。039。EVENT) AND (clk=39。 d=NOT(b AND c)。 0 10 20 30 40 50 60 70 80 a b 如果屬性 39。 END ENTITY pulse_gen。 LIBRARY IEEE。 (2) 屬性 39。 ARCHITECTURE attr OF and2 IS begin c=a39。 BEGIN inta=TRANSPORT a after a_ipd。 PORT(a,b:IN STD_LOGIC。DELAYED屬性時,如果所說明的延時時間事先未加定義,那么實際的延時時間就被賦值為 0 ns。DELAYED可以建立一個所加信號的延遲版本。 ?s?QUIET[(time)] ——該屬性可建立一個布爾量,在括號內(nèi)的時間表達(dá)式所說明的時間內(nèi),若信號沒有被刷新,則屬性可以得到“真”的結(jié)果。DELAYED[(time)] ——該屬性將產(chǎn)生一個延時信號。LAST_EVENT類似。ACTIVE將返回布爾量,與屬性與 39。LAST_ACTIVE 屬性 39。 屬性 d39。LAST_EVENT=setup_time) REPORT ” SETUP VIOLATION” SEVERITY ERROR。 BEGIN setup_check: PROCESS (clk) BEGIN IF clk39。LAST_EVENT 建立時間 保持時間 建立時間和保持時間示例 建立時間檢查保證數(shù)據(jù)輸入信號在建立時間內(nèi)不發(fā)生變化;保持時間檢查保證在參考沿后面的一段規(guī)定的保持時間內(nèi)數(shù)據(jù)輸入信號不發(fā)生變化。LAST_EVENT 屬性 39。電平之前一定處于 39。LAST_VALUE=39。 IF (clk39。X39。 如果原來的電平為 39。139。 IF clk39。139。 LIBRARY IEEE, USE IEEE. STD_LDGIC_1164. ALL, ENTITY dff IS PORT( d,clk: IN STD_LOGIC。 3. 信號的函數(shù)屬性 ( 1) 屬性 39。 ?s?LAST_EVENT——該屬性得到一個時間類型的值,即從信號的前一個事件發(fā)生到現(xiàn)在所經(jīng)過的時間。時,觸發(fā)器輸出信號在時鐘邊沿到來時保持,則認(rèn)為觸發(fā)器輸出信號被刷新,但是沒有事件發(fā)生。139。 3. 信號的函數(shù)屬性 VHDL語言規(guī)定: 信號的值發(fā)生改變稱為發(fā)生了一個事件。 得到 0 right_range:=bit_range?RIGHT。 得到 0 END PROCESS。 BEGIN left_range:=bit_range?LEFT。HIGHT (n) 39。LOW(n) 39。 ?39。 ?39。 數(shù)組屬性函數(shù)可以分為 4種: ?39。這是因為,在枚舉數(shù)據(jù)time 中,最小值是 sec, time39。PRED時, y:=sec。 reverse_time39。 time39。 reverse_time39。 time39。 SUBTYPE revers_time IS time RANGE year DOWNTO sec。 39。LEFTOF(x)。SUCC(x)=39。SUCC(x)——得到輸入 x值的下一個值; ?39。 該返回值可能是枚舉類型數(shù)據(jù)的位置序號 , 也可能是信號有某種變化的指示 , 還可能是數(shù)組區(qū)間中的某一個值 。 len1=4 len2:=bit_strange’LENGTH。 屬性名 PROCESS(a) IS TYPE bit4 IS ARRAY (0 TO 3) OF BIT。 ?39。得到 FALSE END ARCHITECTURE time1。得到 min tim9=tim39。 得到 sec tim5=revers_tim?LEFT。 BEGIN tim1=tim?LEFT。 ARCHITECTURE time1 OF time IS TYPE tim IS (sec,min,hour,day,month,year)。 LOW表示標(biāo)量類或子類區(qū)間的底端 , 表示約束區(qū)間的最低值 。 標(biāo)量類型數(shù)值屬性的書寫格式為: 標(biāo)量類型 39。RIGHT—— 得到數(shù)據(jù)類或子類區(qū)間的最右端的值; ?T39。 數(shù)值屬性用來得到 標(biāo)量類型 或 數(shù)組類型 的有關(guān)值。 c=b。 b: IN STD_LOGIC。 雖然 VHDL提供了使用判決函數(shù)處理多驅(qū)動源問題的機制,但一般在設(shè)計具體的邏輯電路時,不允許對同一信號使用多個并發(fā)語句進(jìn)行賦值。 例如: ASSERT( sendB=?1?) REPORT”sendB timed out at ?1?” SEVERITY ERROR。 VHDL有 4個級別: FAILURE、 ERROR、 WARNING、 NOTE。 ARCHITECTURE … BEGIN PROCESS( z,q) IS BEGIN vector_to_int ( z, x_flag, q) ; …… END PROCESS; END ARCHITECTURE … 。 信號賦值語句 過程調(diào)用語句( Procedure Call) PROCEDURE 過程名(參數(shù) 1;參數(shù) 2; … ) IS [定義語句 ]; (變量等定義) BEGIN [順序處理語句 ]; (過程的語句) END [PROCEDURE] 過程名; 在構(gòu)造體或 BLOCK語句中的過程調(diào)用語句為并發(fā)過程調(diào)用語句。 END ARCHITECUTRE beh。 END ARCHITECTURE if_shift。 END GENERATE。 SIGNAL z:STD_LOGIC_VECTOR(1 to (len1))。 END ENTITY shift。 USE 。 從上例可以發(fā)現(xiàn),在移位寄存器的輸入端和輸出端的信號連接無法用 FOR—GENERATE語句來實現(xiàn),只能用兩條信號代入語句來完成。 dff1: dff PORT MAP (z(0),clk,z(1))。 g1:FOR i in 0 TO 3 GENERATE dffx: dff PORT MAP (z(i),clk,z(i+1))。 q: OUT STD_LOGIC)。 ENTITY shift IS PORT (a,clk: IN STD_LOGIC。 ?IF—GENERATE語句在條件為“真”時才執(zhí)行結(jié)構(gòu)內(nèi)部的語句,語句同樣是并發(fā)處理的,該結(jié)構(gòu)中沒有 ELSE項。 COMPONENT 語句及 PORT MAP 語句 GENERATE語句 GENERATE語句用來產(chǎn)生多個相同的結(jié)構(gòu), 有 FOR—GENERATE和 IF—GENERATE兩種形式: 標(biāo)號: FOR 變量 IN 不連續(xù)區(qū)間 GENERATE 并發(fā)處理語句 。該語句指定了本構(gòu)造體中所調(diào)用的是哪一個現(xiàn)成的邏輯描述模塊。 WHEN OTHERS=q=?X?。 PROCESS( sel) IS BEGIN CASE sel IS WHEN “00” = q=i0。 b。 q: OUT STD_LOGIC)。 END ARCHITECTURE behav。 AND b=?139。 AND b=?039。 ARCHITECTURE behav OF mux IS SIGNAL sel: INTEGER。 USE IEEE. STD_LOGIC_1164. ALL。 注意幾點: 條件信號賦值語句與 IF語句的不同之處在于 ,后者只能在進(jìn)程內(nèi)部使用 (因 為它們是順序語句 )。 a。 條件信號賦值 (Conditional Signal Assignment)語句 條件信號賦值語句也是并發(fā)描述語句 ,它可以根據(jù)不同條件將不同的多個表達(dá)式之一的值代入信號量 。 ( 2) BLOCK語句是一個獨立的子結(jié)構(gòu),可以包含PORT和 GENERIC語句。PROCESS語句是 VHDL語言中描述硬件系統(tǒng)并發(fā)行為的最基本的語句 。 END PROCESS A。 senda=?1? after 10 ns。 END PROCESS B。 B: PRCOESS BEGIN WAIT UNTIL senda=?0?。 senda=?1? after 10 ns。 在多條件等待時,表達(dá)式的值至少應(yīng)包含一個信號量的值;只有信號量的變化才能引起等待語句表達(dá)式的一次新的評價和計算。 4. 多條件 WAIT 語句 WAIT ON nmi, interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5181。 3. WAIT FOR WAIT FOR 時間表達(dá)式 。 ?表達(dá)式為布爾表達(dá)式,當(dāng)進(jìn)程執(zhí)行到該語句時將被掛起,直到表達(dá)式的值為“真”,進(jìn)程才被再次啟動。 wait on a,b。 Process Begin y=a and b。 1. WAIT ON [標(biāo)號 :] WAIT ON 敏感信號列表; 例如: WAIT ON a,b。如果有標(biāo)號說明,下一條要執(zhí)行的語句將是標(biāo)號所說明的語句。 如果 EXIT語句位于一個內(nèi)循環(huán) LOOP語句中 ,執(zhí)行 EXIT語句 , 程序僅僅退出內(nèi)循環(huán) , 而仍然留在外循環(huán)的 LOOP語句中 。 如果 EXIT后面沒有跟 標(biāo)號 和 WHEN條件 ,則程序執(zhí)行到該語句時就無條件地從 LOOP語句中跳出 ,結(jié)束循環(huán)狀態(tài) ,繼續(xù)執(zhí)行 LOOP 語句后繼的語句 , 7. 1. 6 EXIT語句 EXIT語句是 LOOP語句中使用的循環(huán)控制語句,執(zhí)行EXIT語句將結(jié)束循環(huán)狀態(tài),即從 LOOP語句中跳出,結(jié)束 LOOP語句的正常執(zhí)行。 ?NEXT語句用在 LOOP語句中,實現(xiàn) LOOP語句的內(nèi)部循環(huán)控制。 i:=1。 2. WHILELOOP [標(biāo)號 ]: WHILE 條件 LOOP 順序處理語句 。 END LOOP。 END ENTITY parity_check。 ASUM: FOR i IN 1 TO 9 LOOP sum:=i+sum; sum初始值為 0 END LOOP ASUM; LIBRARY IEEE。 優(yōu)先級編碼器真值表 input output 7 6 5 4 3 2 1 0 2 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 LOOP 語句的書寫格式一般有兩種 : 1. FOR LOOP LOOP語句 LOOP語句使程序能 進(jìn)行有規(guī)則的循環(huán),循環(huán)的次數(shù)受迭代算法控制。 ELSIF input(6)=?0? THEN y=“001”。 ELSIF input(2)=?0? THEN y=“101”。 h 9 7 7 F F F F F F F