【正文】
邊沿到來時(shí)保持,則認(rèn)為觸發(fā)器輸出信號(hào)被刷新,但是沒有事件發(fā)生。 3. 信號(hào)的函數(shù)屬性 信號(hào)的函數(shù)屬性用來得到信號(hào)的行為信息。 信號(hào)屬性函數(shù)共有 5種: ?s39。EVENT —— 如果在當(dāng)前仿真周期內(nèi)事件發(fā)生了, 屬性是一個(gè)為“真”的布爾量;否則為“假”; ?s?ACTIVE——如果在當(dāng)前仿真周期內(nèi)信號(hào)被刷新,屬性是 一個(gè)為“真”的布爾量,否則為“假”。 ?s?LAST_EVENT——該屬性得到一個(gè)時(shí)間類型的值,即從信號(hào)的前一個(gè)事件發(fā)生到現(xiàn)在所經(jīng)過的時(shí)間。 ?s?LAST_ACTIVE——該屬性得到一個(gè)時(shí)間類型的值,即從信號(hào)的前一次被刷新到現(xiàn)在所經(jīng)過的時(shí)間。 ?s39。LAST_VALUE——該屬性得到信號(hào)的一個(gè)數(shù)值,即該值是信號(hào)最后一次改變以前的值。 3. 信號(hào)的函數(shù)屬性 ( 1) 屬性 39。EVENT和 39。LAST_VALUE 屬性 39。EVENT通常用于確定時(shí)鐘信號(hào)的邊沿,用它可以檢查信號(hào)是否處于某一個(gè)特殊值,以及信號(hào)是否剛好已發(fā)生變化。 LIBRARY IEEE, USE IEEE. STD_LDGIC_1164. ALL, ENTITY dff IS PORT( d,clk: IN STD_LOGIC。 q: OUT STD_LOGIC)。 END ENTITY dff, ARCHITECTURE dff OF dff IS BEGIN PROCESS (clk) IS BEGIN IF clk39。EVENT AND clk=39。139。THEN q=d: END IF。 END PROCESS。 END ARCHITECTURE dff。 IF clk39。EVENT AND clk=39。139。THEN 該語句描述了一個(gè)時(shí)鐘脈沖的上升沿,上升沿的發(fā)生是由兩個(gè)條件約束的,即時(shí)鐘脈沖目前處于 39。139。電平,而且時(shí)鐘脈沖剛剛從其他電平變?yōu)?39。139。電平。 如果原來的電平為 39。039。,那么邏輯是正確的。但是原來的電平如果是 39。X39。,那么該語句也同樣認(rèn)為出現(xiàn)了上升沿,顯然這種情況是錯(cuò)誤的。為了避免出現(xiàn)這種邏輯錯(cuò)誤,最好使用屬性39。LAST_VALUE。 IF (clk39。EVENT AND clk=39。139。)AND (clk39。LAST_VALUE=39。039。) THEN 修改后的語句保證時(shí)鐘脈沖在變成 39。139。電平之前一定處于 39。039。狀態(tài)。 ( 2) 屬性 39。LAST_EVENT 屬性 39。LAST_EVENT可得到信號(hào)上各種事件發(fā)生以來所經(jīng)過的時(shí)間。該屬性常用于檢查定時(shí)時(shí)間,如檢查建立時(shí)間、保持時(shí)間和脈沖寬度等。 ( 2) 屬性 39。LAST_EVENT 建立時(shí)間 保持時(shí)間 建立時(shí)間和保持時(shí)間示例 建立時(shí)間檢查保證數(shù)據(jù)輸入信號(hào)在建立時(shí)間內(nèi)不發(fā)生變化;保持時(shí)間檢查保證在參考沿后面的一段規(guī)定的保持時(shí)間內(nèi)數(shù)據(jù)輸入信號(hào)不發(fā)生變化。 data ENTITY dff IS GENERIC (setup_time,hold_time:time:=5 ns)。 PORT(d,clk: IN STD_LOGIC。 q: OUT STD_LOGIC)。 BEGIN setup_check: PROCESS (clk) BEGIN IF clk39。EVENT AND clk=39。139。 THEN ASSERT(d39。LAST_EVENT=setup_time) REPORT ” SETUP VIOLATION” SEVERITY ERROR。 END IF。 END PROCESS setup_check。 END dff。 屬性 d39。LAST_EVENT將返回一個(gè)信號(hào) d自最近一次變化以來到現(xiàn)在 clk 事件發(fā)生時(shí)( clk的上升沿)為止所經(jīng)過的時(shí)間。 ( 3) 屬性 39。ACTIVE 和 39。LAST_ACTIVE 屬性 39。ACTIVE和 39。LAST_ACTIVE在信號(hào)被刷新時(shí)被觸發(fā),不管信號(hào)值是否發(fā)生改變。屬性 39。ACTIVE將返回布爾量,與屬性與 39。EVENT類似。屬性 39。LAST_ACTIVE返回一個(gè)時(shí)間值,與 39。LAST_EVENT類似。 信號(hào)屬性 (Signal) 信號(hào)屬性用于產(chǎn)生一種特別的信號(hào),這個(gè)特別的信號(hào)是以所加屬性的信號(hào)為基礎(chǔ)而形成的。 信號(hào)屬性不能用于子程序中,否則程序在編譯時(shí)會(huì)出現(xiàn)編譯錯(cuò)誤信息。 信號(hào)類屬性有 4種: ?s39。DELAYED[(time)] ——該屬性將產(chǎn)生一個(gè)延時(shí)信號(hào)。其信號(hào)類型與該屬性所加的信號(hào)相同,即以屬性所加的信號(hào)為參考信號(hào),經(jīng)括號(hào)內(nèi)的時(shí)間表達(dá)式所確定的時(shí)間延時(shí)后所得到的延遲信號(hào)。 ?s39。STABLE[(time)] ——該屬性可建立一個(gè)布爾信號(hào),在括號(hào)內(nèi)的時(shí)間表達(dá)式所說明的時(shí)間內(nèi),若參考信號(hào)沒有發(fā)生事件,則該屬性可得到“真”的結(jié)果。 ?s?QUIET[(time)] ——該屬性可建立一個(gè)布爾量,在括號(hào)內(nèi)的時(shí)間表達(dá)式所說明的時(shí)間內(nèi),若信號(hào)沒有被刷新,則屬性可以得到“真”的結(jié)果。 ?s?TRANSACTION——該屬性可以建立一個(gè) BIT類型信號(hào),當(dāng)屬性所加的信號(hào)刷新時(shí), 得到的 信號(hào)的值發(fā)生翻轉(zhuǎn)。 (1) 屬性 39。DELAYED 屬性 39。DELAYED可以建立一個(gè)所加信號(hào)的延遲版本。為實(shí)現(xiàn)同樣的功能,也可以用傳送延時(shí)賦值語句( Transport delay)來實(shí)現(xiàn)。兩者不同的是,后者要求編程人員用傳送延時(shí)賦值的方法記入程序中,而且?guī)в袀魉脱訒r(shí)賦值語句的信號(hào)是一個(gè)新的信號(hào),它必須在程序中加以說明。 在使用 39。DELAYED屬性時(shí),如果所說明的延時(shí)時(shí)間事先未加定義,那么實(shí)際的延時(shí)時(shí)間就被賦值為 0 ns。 inta=TRANSPORT a after 5 ns。 LIBRARY IEEE; USE 。 ENTITY and2 IS GENERIC (a_ipd,b_ipd,c_opd:TIME)。 PORT(a,b:IN STD_LOGIC。 c:OUT STD_LOGIC)。 END ENTITY and2。 ARCHITECTURE int_signals OF and2 IS SIGNAL inta,intb:STD_LOGIC。 BEGIN inta=TRANSPORT a after a_ipd。 intb=TRANSPORT b after b_ipd。 c=inta AND intb after c_opd。 END ARCHITECTURE int_signals。 ARCHITECTURE attr OF and2 IS begin c=a39。DELAYED(a_ipd) AND b39。DELAYED(b_ipd) after c_opd。 END ARCHITECUTRE attr。 (2) 屬性 39。STABLE 屬性 39。STABLE用來確定信號(hào)對應(yīng)的有效電平,即它可以在一個(gè)指定的時(shí)間間隔中,確定信號(hào)是否正好發(fā)生改變或者沒有發(fā)生改變。屬性返回的值是一個(gè)布爾量。 LIBRARY IEEE。 USE 。 ENTITY pulse_gen IS PORT(a: IN STD_LOGIC。 b: OUT boolean)。 END ENTITY pulse_gen。 ARCHITECTURE pulse_gen OF pulse_gen IS BEGIN b=a39。STABLE(10 ns)。 END ARCHITECTURE pulse_gen。 0 10 20 30 40 50 60 70 80 a b 如果屬性 39。STABLE 后面跟的括號(hào)中的時(shí)間值被說明為 0 ns或者未加說明,那么當(dāng)信號(hào) a發(fā)生改變時(shí),輸出信號(hào) b在對應(yīng)的時(shí)間位置將產(chǎn)生 δ寬度的低電平。 ARCHITECTURE rtl OF entity_1 IS SIGNAL c,d:STD_LOGIC。 BEGIN c=NOT(a)。 d=NOT(b AND c)。 q=c AND d。 END ARCHITECTURE rtl。 IF( (clk39。EVENT) AND (clk=39。139。) AND (clk39。LAST_VALUE=39。039。)) THEN …… END IF。 IF(NOT (clk39。STABLE) AND (clk=39。139。) AND (clk39。LAST_VALUE=39。039。)) THEN …… END IF。 上述兩種情況都能檢測出上升沿,但是,在 39。EVENT情況下,在內(nèi)存有效利用及速度方面將更加有效。這是因?yàn)閷傩?39。STABLE需要建立一個(gè)額外的信號(hào),這將使其使用更多的內(nèi)存。另外,對新的信號(hào)來說,是否需要該值都要求對其進(jìn)行刷新。 (3) 屬性 39。QUIET 屬性 39。QUIET具有與 39。STABLE相同的功能,但是兩者的區(qū)別在于,前者所加的信號(hào)只要被刷新,不管信號(hào)值是否發(fā)生改變,返回值為“假”。而后者必須是信號(hào)值發(fā)生改變才返回“假”。 (4) 屬性 39。TRANSACTION 屬性 39。TRANSACTION將建立一個(gè)數(shù)據(jù)類型為 BIT的信號(hào),當(dāng)屬性所加的信號(hào)每次從 39。139?;?39。039。發(fā)生改變時(shí),就觸發(fā)該BIT信號(hào)翻轉(zhuǎn)。 類型屬性 利用該屬性可以得到所加數(shù)據(jù)類型的基類,僅僅作為其它屬性的前綴來使用,即必須結(jié)合數(shù)值屬性或函數(shù)屬性來表示。 t39。BASE do_nothing: PROCESS(x) IS TYPE color IS (red,blue,green,yellow,brown,black)。 SUBTYPE color_gun IS color RANGE red TO black。 VARIABLE a:color。 BEGIN a:=color_gun39。BASE39。RIGHT。a=black。 a:=color_gun39。BASE39。SUCC(green)。a=yellow 區(qū)間屬性 (RANGE) 區(qū)間屬性僅用于受約束的數(shù)組類型數(shù)據(jù),并且可返回所選擇輸入?yún)?shù)的索引區(qū)間。 ?a39。RANGE[(n)] ?a39。REVERSE_RANGE[(n)] 屬性 39。RANGE[(n)]將返回一個(gè)由參數(shù) n所指出的第 n個(gè)數(shù)據(jù)區(qū)間,而’ REVERSE_RANGE將返回一個(gè)次序顛倒的數(shù)據(jù)區(qū)間。 FUNCTION vector_to_int(vect:STD_LOGIC_VECTOR) RETURN INTEGER IS VARIABLE result:INTEGER:=0。 BEGIN FOR i IN vect39。RANGE LOOP result:=result*2。 IF vect(i)=?1? THEN result:=result+1。 END IF。 END LOOP。 RETURN result。 END vector_to_int。 . 用戶自定義的屬性 ATTRIBUTE 屬性名 :數(shù)據(jù)類型名 /子類型名; ATTRIBUTE 屬性名 OF 目標(biāo)名:目標(biāo)集合 IS 表達(dá)式; ATTRIBUTE max_area : REAL。 ATTRIBUTE max_area OF fifo: ENTITY IS 。 ATTRIBUTE capacitance : cap。 ATTRIBUTE capacitance OF clk, reset: SIGNAL IS 20 pF。 在對要使用的屬性進(jìn)行說明以后,接著就可以對數(shù)據(jù)類型、信號(hào)、變量、實(shí)體、構(gòu)造體、配置、子程序、元件、標(biāo)號(hào)進(jìn)行具體的描述。 用戶自定義的屬性 用戶自定義屬性的值在仿真中是不能改變的,也不能用于邏輯綜合。用戶自定義的屬性主要用于從 VHDL到邏輯綜合及 ASIC的設(shè)計(jì)工具、動(dòng)態(tài)解析工具的數(shù)據(jù)的過渡。