【正文】
1, 表達(dá)式 2 WHEN 條件 2, …… 表達(dá)式 n WHEN條件 n。 并發(fā) ( Concurrent) 描述語句 在 VHDL語言中能進(jìn)行并發(fā)處理的語句有: 進(jìn)程 (PROCESS)語句 塊 (BLOCK)語句 選擇信號號代入 (Selective Signal Assignment )語句 條件信號代入 (Conditional Signal Assignment)語句 COMPONENT語句和 PORT MAP語句 GENERATE語句 進(jìn)程語句是一種并發(fā)處理語句 ,在一個(gè)構(gòu)造體中多個(gè) PROCESS語句可以同時(shí)并發(fā)運(yùn)行 。 ASSERT (sendb=?1?) REPORT”sendb timed out at ?1?” SEVERITY ERROR。 END PROCESS A。s; 只要上述 3個(gè)條件中一個(gè)或多個(gè)滿足,進(jìn)程將再次啟動,繼續(xù)執(zhí)行 WAIT語句的后繼語句。 例如: WAIT UNTIL((x*10)100)。 WAIT ON語句與進(jìn)程敏感信號列表的關(guān)系 Process(a,b) IS Begin y=a and b。 進(jìn)程狀態(tài)的變化受 WAIT語句的控制,當(dāng)進(jìn)程執(zhí)行到WAIT語句時(shí),就將被掛起,并設(shè)置好再次執(zhí)行的條件。 EXIT語句具有 3種基本書寫格式 : 1) EXIT語句沒有 “ 循環(huán)標(biāo)號 ” 或 “ WHEN條件 ” 當(dāng)條件為 “ 真 ” 執(zhí)行 EXIT語句時(shí) , 程序?qū)慈缦马樞驁?zhí)行:執(zhí)行 EXIT, 程序?qū)膬H僅當(dāng)前所屬的 LOOP語句中退出 。 END LOOP sbcd; FORLOOP與 WHILELOOP的區(qū)別舉例: NEXT 語句 NEXT [標(biāo)號 ] [WHEN條件 ]。 END ARCHITECTURE rtl。 y: OUT STD_LOGIC)。 END PROCESS。 ELSIF input(1)=?0? THEN y=“110”。 h 1 1 39。 B U F ( D C )0S E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XB U F ( D C )co m b ~0M u x 03 39。 WHEN 11011111 = y= 101。 WHEN 011 = y= 11110111。 END CASE; CASE語句的注意問題: 1)每個(gè)條件表達(dá)式的取值唯一,值不能重復(fù); 2)所有的值都必須列出; 3)用 WHEN OTHERS列出其他所有可能值; 4)條件表達(dá)式的取值是平級的,與書寫順序無關(guān); 5)不支持優(yōu)先級電路的描述 6)條件表達(dá)式的取值不能是 不能使用任意值 39。 ?IF語句描述時(shí)鐘邊沿時(shí),只能使用單分支操作 IF語句格式,即不能含有 ELSE項(xiàng) ?IF語句的條件判斷輸出是布爾量,即真( TRUE)或假( FALSE)。 ELSIF (sel=“01”) THEN y=input(1)。 分支 1 ELSIF 分支條件表達(dá)式 2 THEN 順序處理語句; 分支 2 ………… ELSIF分支條件表達(dá)式 N THEN 順序處理語句; 分支 N ELSE 順序處理語句; 分支 N+1 END IF; 在這種多選擇控制的IF語句中,設(shè)置了多個(gè)條件,當(dāng)滿足所設(shè)置的多個(gè)條件之一時(shí),就執(zhí)行該條件后跟的順序處理語句。分支 1 ELSE 順序處理語句; 分支 2 END IF; 在這種格式的 IF語句中,當(dāng) IF語句所指定的條件滿足時(shí),將執(zhí)行 THEN和 ELSE之間所界定的順序語句。 ?順序描述語句所涉及到的系統(tǒng)行為有時(shí)序流、條件、控制和迭代等; ?順序描述語句的功能操作有算術(shù)、邏輯運(yùn)算,信號和變量的賦值,子程序調(diào)用等。 變量賦值語句的格式: IF語句 1. 單分支操作 IF語句 IF 分支條件表達(dá)式 THEN 順序處理語句; 分支操作 END IF; IF (a=?1?) THEN c=b。 ELSE c=b。 ENTITY mux4 IS PORT ( input :IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 END IF; END PROCESS; END ARCHITECTURE rtl。 格式: 當(dāng) CASE和 IS之間的表達(dá)式的取值滿足 WHEN指定的條件表達(dá)式的值時(shí),程序?qū)?zhí)行后跟的,由符號 =所指的順序處理語句。039。 WHEN 110 = y= 10111111。 WHEN 11111011 = y= 010。 h 1 M u x 13 39。 3個(gè) 4input LUT S E L [ 7 . . 0 ]D A T A [ 2 5 5 . . 0 ]O U TM U XS E L [ 7 . . 0 ]D A T A [ 2 5 5 . . 0 ]O U TM U XS E L [ 7 . . 0 ]D A T A [ 2 5 5 . . 0 ]O U TM U XM u x 22 5 6 39。 ELSIF input(4)=?0? THEN y=“011”。 END LOOP [ 標(biāo)號 ]。039。 在該 LOOP語句中 ,如果條件為 真 ,則進(jìn)行循環(huán) 。 NEXT 語句 ?“標(biāo)號”表明下一次迭代的起始位置; ?“ WHEN 條件”表明 NEXT語句的執(zhí)行條件; ?如果 NEXT語句后面 “標(biāo)號”和“ WHEN條件”都沒有,則只要執(zhí)行到該語句就立即無條件跳出本次循環(huán),從 LOOP語句的起始位置進(jìn)入下一次循環(huán)。 3) EXIT語句后跟“ WHEN條件”語句 當(dāng)程序執(zhí)行到該語句時(shí),只有所說明的” WHEN條件”為“真”時(shí),才跳出循環(huán)的 LOOP語句。 Process(a,b) IS Begin y=a and b。 如果 PROCESS語句已含有敏感信號量說明,則進(jìn)程中不能再使用 WAIT ON語句。 例如: WAIT FOR 20 ns。 SIGNAL sendb:STD_LOGIC。 WAIT UNTIL senda=?1?。 ASSERT (sendb=?0?) REPORT”sendb timed out at ?0?” SEVERITY ERROR。 塊名: BLOCK [衛(wèi)式布爾表達(dá)式 ] [IS] [類屬參數(shù)說明 ] [類屬參數(shù)映射 ] [端口說明 ] [端口映射 ] [說明語句 ] BEGIN 并發(fā)描述語句; END BLOCK [塊名 ]。 ARCHITECTURE rtl OF mux4 IS SIGNAL sel: STD_LOGIC_VECTOR( l DOWNTO 0)。 與 IF語句不同的是 ,條件信號賦值語句不能進(jìn)行 嵌套。 WHEN OTHERS。 AND b=?139。 ARCHITECTURE behav OF mux IS SIGNAL sel: STD_LOGIC_VECTOR(1 DOWNTO 0)。, WHEN “01” = q=i2。 元件標(biāo)號名加在元件名的前面,在該構(gòu)造體的說明中該標(biāo)號名一定是唯一的。 d q clk d q clk d q clk d q clk clk a Z(0) DFF X(0) DFF X(1) DFF X(2) DFF X(3) Z(1) Z(2) Z(3) Z(4) b 4位移位寄存器原理框圖 LIBRARY IEEE。 SIGNAL z:STD_LOGIC_VECTOR(0 to 4)。 dff3: dff PORT MAP (z(2),clk,z(3))。 PORT (a,clk: IN STD_LOGIC。 END GENERATE。 VHDL語言中順并描述語句主要有: ?信號賦值語句; ?過程調(diào)用語句; ?斷言語句 ?報(bào)告語句 順并描述語句 信號賦值語句 目的信號 =表達(dá)式; ?信號賦值語句可以在進(jìn)程中內(nèi)部使用,此時(shí)它作為順序語句形式出現(xiàn);信號賦值語句也可以在構(gòu)造體的進(jìn)程之外使用,此時(shí)它作為并發(fā)語句出現(xiàn)。 過程名(實(shí)際參數(shù)表); 過程語句的調(diào)用格式: ?并發(fā)過程調(diào)用語句實(shí)際上是一個(gè)過程調(diào)用進(jìn)程的簡寫 。 在構(gòu)造體或 BLOCK語句使用的 ASSERT語句為并發(fā)ASSERT語句。 USE 。 屬性描述語句 VHDL語言中預(yù)定義的屬性類型有以下幾種: ? 數(shù)值屬性 ? 函數(shù)屬性 ? 信號屬性 ? 數(shù)據(jù)類型類屬性 ? 數(shù)據(jù)范圍類屬性 除預(yù)定義屬性外,用戶可以自定義屬性。LOW —— 得到數(shù)據(jù)類或子類區(qū)間的低端值; ?T39。 對于整數(shù)和實(shí)數(shù)來說,數(shù)值的位置序號值與數(shù)本身的值相等,而對于枚舉類型、數(shù)組類型等用戶自定義的數(shù)據(jù)來說,在說明中較早出現(xiàn)的數(shù)據(jù),其位置序號值低于較后說明的數(shù)據(jù)。 得到 year tim3=tim?HIGH。 得到 TRUE tim10=revers_tim39。當(dāng)一個(gè)數(shù)組按升序定義時(shí),返回值為 TRUE,否則為 FALSE。 2. 數(shù)組 類型數(shù)值屬性 函數(shù)屬性 所謂函數(shù)屬性是指以函數(shù)的形式 , 讓設(shè)計(jì)人員得到有關(guān)數(shù)據(jù)類型或信號等的某些信息 。LEFTOF(x)——得到鄰接輸入 x值左邊的值; ?39。SUCC(x)=39。 time39。 time39。 (year, month, day, hous,min,sec) 如果一個(gè)枚舉類型數(shù)據(jù)的極限值被傳遞給屬性 39。 2. 數(shù)組類型的函數(shù)屬性 利用數(shù)組類型的函數(shù)屬性可得到數(shù)組區(qū)間的信息。 ?39。HIGHT(n) 遞減區(qū)間: 39。 得到 0 uprange:=bit_range?HIGH。 得到 31 lowrange:=bit_range?LOW。當(dāng) J=K=39。 ?s39。 END ENTITY dff, ARCHITECTURE dff OF dff IS BEGIN PROCESS (clk) IS BEGIN IF clk39。139。那么邏輯是正確的。139。狀態(tài)。 PORT(d,clk: IN STD_LOGIC。 END PROCESS setup_check。LAST_ACTIVE在信號被刷新時(shí)被觸發(fā),不管信號值是否發(fā)生改變。 信號屬性不能用于子程序中,否則程序在編譯時(shí)會出現(xiàn)編譯錯(cuò)誤信息。 (1) 屬性 39。 LIBRARY IEEE; USE 。 c=inta AND intb after c_opd。STABLE用來確定信號對應(yīng)的有效電平,即它可以在一個(gè)指定的時(shí)間間隔中,確定信號是否正好發(fā)生改變或者沒有發(fā)生改變。STABLE(10 ns)。 END ARCHITECTURE rtl。 IF(NOT (clk39。EVENT情況下,在內(nèi)存有效利用及速度方面將更加有效。而后者必須是信號值發(fā)生改變才返回“假”。 類型屬性 利用該屬性可以得到所加數(shù)據(jù)類型的基類,僅僅作為其它屬性的前綴來使用,即必須結(jié)合數(shù)值屬性或函數(shù)屬性來表示。a=black。RANGE[(n)]將返回一個(gè)由參數(shù) n所指出的第 n個(gè)數(shù)據(jù)區(qū)間,而’ REVERSE_RANGE將返回一個(gè)次序顛倒的數(shù)據(jù)區(qū)間。 END vector_to_int。