【正文】
bit_range?LOW。 得到 0 END PROCESS。039。LAST_VALUE——該屬性得到信號(hào)的一個(gè)數(shù)值,即該值是信號(hào)最后一次改變以前的值。EVENT AND clk=39。THEN 該語(yǔ)句描述了一個(gè)時(shí)鐘脈沖的上升沿,上升沿的發(fā)生是由兩個(gè)條件約束的,即時(shí)鐘脈沖目前處于 39。但是原來(lái)的電平如果是 39。)AND (clk39。 ( 2) 屬性 39。 q: OUT STD_LOGIC)。 END dff。屬性 39。 信號(hào)類(lèi)屬性有 4種: ?s39。DELAYED 屬性 39。 ENTITY and2 IS GENERIC (a_ipd,b_ipd,c_opd:TIME)。 END ARCHITECTURE int_signals。屬性返回的值是一個(gè)布爾量。 END ARCHITECTURE pulse_gen。 IF( (clk39。STABLE) AND (clk=39。這是因?yàn)閷傩?39。 (4) 屬性 39。 t39。 a:=color_gun39。 FUNCTION vector_to_int(vect:STD_LOGIC_VECTOR) RETURN INTEGER IS VARIABLE result:INTEGER:=0。 . 用戶自定義的屬性 ATTRIBUTE 屬性名 :數(shù)據(jù)類(lèi)型名 /子類(lèi)型名; ATTRIBUTE 屬性名 OF 目標(biāo)名:目標(biāo)集合 IS 表達(dá)式; ATTRIBUTE max_area : REAL。用戶自定義的屬性主要用于從 VHDL到邏輯綜合及 ASIC的設(shè)計(jì)工具、動(dòng)態(tài)解析工具的數(shù)據(jù)的過(guò)渡。 RETURN result。REVERSE_RANGE[(n)] 屬性 39。RIGHT。發(fā)生改變時(shí),就觸發(fā)該BIT信號(hào)翻轉(zhuǎn)。STABLE相同的功能,但是兩者的區(qū)別在于,前者所加的信號(hào)只要被刷新,不管信號(hào)值是否發(fā)生改變,返回值為“假”。 上述兩種情況都能檢測(cè)出上升沿,但是,在 39。)) THEN …… END IF。 q=c AND d。 ARCHITECTURE pulse_gen OF pulse_gen IS BEGIN b=a39。STABLE 屬性 39。 intb=TRANSPORT b after b_ipd。 inta=TRANSPORT a after 5 ns。 ?s?TRANSACTION——該屬性可以建立一個(gè) BIT類(lèi)型信號(hào),當(dāng)屬性所加的信號(hào)刷新時(shí), 得到的 信號(hào)的值發(fā)生翻轉(zhuǎn)。 信號(hào)屬性 (Signal) 信號(hào)屬性用于產(chǎn)生一種特別的信號(hào),這個(gè)特別的信號(hào)是以所加屬性的信號(hào)為基礎(chǔ)而形成的。ACTIVE和 39。 END IF。 data ENTITY dff IS GENERIC (setup_time,hold_time:time:=5 ns)。039。EVENT AND clk=39。039。EVENT AND clk=39。 q: OUT STD_LOGIC)。 ?s?LAST_ACTIVE——該屬性得到一個(gè)時(shí)間類(lèi)型的值,即從信號(hào)的前一次被刷新到現(xiàn)在所經(jīng)過(guò)的時(shí)間。時(shí),觸發(fā)器輸出信號(hào)在時(shí)鐘邊沿到來(lái)時(shí)翻轉(zhuǎn),則認(rèn)為輸出信號(hào)發(fā)生了一個(gè)事件。 得到 31 uprange:=bit_range?HIGH。 得到 31 right_range:=bit_range?RIGHT。RIGHT(n) =39。RIGHT(n)——得到索引號(hào)為 n的區(qū)間的右端位置號(hào)。PRED(y)要求提供比 sec更小的值,已超出了定義范圍。LEFTOF(day)——得到 month。PRED(day)——得到 hous。 END t_time。 對(duì)于遞減區(qū)間來(lái)說(shuō): 39。PRED(x)——得到輸入 x值的前一個(gè)值; ?39。 len2=11 END PROCESS。ASCENDING (n)——得到布爾量。ASCENDING。 得到 sec tim2=tim?RIGHT。 當(dāng)數(shù)據(jù)類(lèi)的區(qū)間用( a TO b)來(lái)定義時(shí),那么 ba,此時(shí)‘ LEFT屬性的值通常等于’ LOW的值; 當(dāng)數(shù)據(jù)類(lèi)區(qū)間用( b DOWNTO a)來(lái)定義時(shí), ba,此時(shí)‘ LEFT屬性的值則與’ HIGH的屬性值相對(duì)應(yīng)。HIGH —— 得到到數(shù)據(jù)類(lèi)或子類(lèi)區(qū)間的高端值; ?T39。 END ARCHITECTURE rtl。 LIBRARY IEEE。 ASSERT 條件 [REPORT輸出信息 ] [SEVERITY級(jí)別 ]。如果過(guò)程調(diào)用語(yǔ)句在進(jìn)程內(nèi),則為順序過(guò)程調(diào)用語(yǔ)句。 DE N AQP R EC L RDE N AQP R EC L RDE N AQP R EC L RDE N AQP R EC L R\ g 1 : 0 : g 2 : d f f x \ g 1 : 1 : g 4 : d f f x \ g 1 : 2 : g 4 : d f f x \ g 1 : 3 : g 3 : d f f xacl kb 在 VHDL語(yǔ)言中存在一類(lèi)語(yǔ)句,根據(jù)不同的使用場(chǎng)合,即可以作為順序執(zhí)行語(yǔ)句,又可作為并發(fā)執(zhí)行語(yǔ)句,在本教材中將該類(lèi)語(yǔ)句稱為順并描述語(yǔ)句。 BEGIN g1:FOR i in 0 TO (len1) GENERATE g2:IF i=0 GENERATE dffx: dff PORT MAP (a,clk,z(i+1))。 ENTITY shift IS GENERIC(len:INTEGER:=4)。 dff2: dff PORT MAP (z(1),clk,z(2))。 END COMPONENT dff。 GENERATE語(yǔ)句的典型應(yīng)用場(chǎng)合是生成存儲(chǔ)器陣列和寄存器陣列等,另一種應(yīng)用用于仿真狀態(tài)編譯機(jī)。 元件標(biāo)號(hào)名:元件名 [ GENERIC MAP(參數(shù)映射列表) ] PORT MAP (端口映射列表) 。, WHEN “10” = q=i1。 END ENTITY mux。 ELSE 3 WHEN a=?139。 BEGIN WITH sel SELECT q=i0 WHEN 0, il WHEN 1, i2 WHEN 2, i3 WHEN 3, ?X39。 與 IF語(yǔ)句相比 ,條件信號(hào)賦值語(yǔ)句中的 ELSE是一定要有的 , 而 IF語(yǔ)句則可以有也可以沒(méi)有。 目的信號(hào)量 = 表達(dá)式 1 WHEN 條件 1 ELSE 表達(dá)式 2 WHEN 條件 2 ELSE 表達(dá)式 3 WHEN 條件 3 ELSE …… …… ELSE 表達(dá)式 n。 進(jìn)程 (PROCESS)語(yǔ)句 PROCESS語(yǔ)句歸納起來(lái)有如下幾個(gè)特點(diǎn) : ( 1)可以與同一構(gòu)造體內(nèi)的其它進(jìn)程并發(fā)執(zhí)行 ( 2)可使用構(gòu)造體內(nèi)或?qū)嶓w內(nèi)定義的信號(hào) ( 3)進(jìn)程內(nèi)部的語(yǔ)句是順序執(zhí)行的 ( 4)進(jìn)程的狀態(tài)有 2個(gè),執(zhí)行和等待 ( 5)進(jìn)程執(zhí)行的條件是敏感信號(hào)列表中的信號(hào)發(fā)生變化或者 WAIT語(yǔ)句滿足條件 ( 6)進(jìn)程之間的通信通過(guò)信號(hào)進(jìn)行傳遞 塊 (BLOCK)語(yǔ)句 BLOCK語(yǔ)句是一個(gè)并發(fā)語(yǔ)句,而且它所包含的一系列語(yǔ)句也是并發(fā)語(yǔ)句,因此塊語(yǔ)句中的并發(fā)語(yǔ)句的執(zhí)行與次序無(wú)關(guān)。 WAIT UNTIL (sendb=?0?) FOR 1 us。 sendb=?0? after 10 ns。 ARCHITECTURE wait_timeout OF wait_example IS SIGNAL senda:STD_LOGIC:=?0?。 表達(dá)式為時(shí)間表達(dá)式,當(dāng)進(jìn)程執(zhí)行到該語(yǔ)句時(shí)將被掛起,直到指定的等待時(shí)間到時(shí),進(jìn)程再開(kāi)始執(zhí)行 WAIT FOR 語(yǔ)句后面的語(yǔ)句。 錯(cuò)誤語(yǔ)句 End process。 WAIT ON 后面的信號(hào)只要有一個(gè)發(fā)生變化,進(jìn)程將被執(zhí)行。 2) EXIT語(yǔ)句后跟 LOOP語(yǔ)句的標(biāo)號(hào) 此時(shí) , 執(zhí)行 EXIT語(yǔ)句時(shí) , 程序?qū)⑻了f(shuō)明的標(biāo)號(hào) 。 ?NEXT語(yǔ)句執(zhí)行時(shí),將停止當(dāng)前的迭代,而轉(zhuǎn)入下一次新的迭代。 END LOOP [標(biāo)號(hào) ] 。 ARCHITECTURE rtl OF parity_check IS BEGIN PROCESS( a) IS VARIABLE tmp: STD_LOGIC ; BEGIN tmp:=39。 [標(biāo)號(hào) :] FOR 循環(huán)變量 IN 取值 范圍 LOOP 順序 處 理語(yǔ)句 。 ELSIF input(3)=?0? THEN y=“100”。 h 0 0 0 0 0 0 0 0 a [ 7 . . 0 ]y [ 2 . . 0 ]y=“XXX”。 h 1 1 39。 WHEN 11110111 = y= 011。 WHEN 101 = y= 11011111。與 39。 CASE 語(yǔ)句 CASE 條件表達(dá)式 IS WHEN 條件表達(dá)式取值 1 = 順序描述語(yǔ)句; WHEN 條件表達(dá)式取值 2 = 順序描述語(yǔ)句; …… WHEN 條件表達(dá)式取值 N = 順序描述語(yǔ)句; END CASE; CASE語(yǔ)句用來(lái)描述總線或編碼、譯碼的行為,從許多不同語(yǔ)句的序列中選擇其中之一執(zhí)行。 ELSE y=input(3)。 格式 1: LIBRARY IEEE; USE 。 ARCHITECTURE rtl OF mux IS BEGIN PROCESS (a,b,sel) IS BEGIN IF (sel=?1? ) THEN c=a。 變量賦值語(yǔ)句只能在進(jìn)程或子程序中使用; 變量賦值語(yǔ)句立即生效 變量賦值語(yǔ)句是對(duì)變量進(jìn)行賦值的語(yǔ)句。 VHDL語(yǔ)言中順序描述語(yǔ)句主要有: ?變量賦值語(yǔ)句; ?IF語(yǔ)句; ?CASE語(yǔ)句; ?LOOP語(yǔ)句; ?NEXT語(yǔ)句; ?EXIT語(yǔ)句; ?WAIT語(yǔ)句; ?斷言語(yǔ)句; ?NULL語(yǔ)句; 變量賦值語(yǔ)句 目的變量 :=表達(dá)式; 執(zhí)行該語(yǔ)句時(shí),目的變量的值將由表達(dá)式所表達(dá)的新值代替; 表達(dá)式的數(shù)據(jù)類(lèi)型、長(zhǎng)度與目標(biāo)變量必須一致; 表達(dá)式可以是變量、信號(hào)或字符。當(dāng)條件不滿足時(shí),將執(zhí)行 ELSE和 END IF之間所界定的順序處理語(yǔ)句。如果所有設(shè)置的條件都不滿足,則執(zhí)行 ELSE和 END IF之間的順序處理語(yǔ)句。 ELSIF (sel=“10”) THEN y=input(2)。因此在 IF語(yǔ)句的條件表達(dá)式中只能使用關(guān)系運(yùn)算操作及邏輯運(yùn)算操作的組合表達(dá)式。X39。 WHEN 100 = y= 11101111。 WHEN 11101111 = y= 100。 h 3 1 39。 h 1 n o d e [ 3 2 . . 1 ]3 2 39。 ELSIF input(2)=?0? THEN y=“101”。 優(yōu)先級(jí)編碼器真值表 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 語(yǔ)句的書(shū)寫(xiě)格式一般有兩種 : 1. FOR LOO