【正文】
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F M u x 12 5 6 39。 h 1 n o d e [ 3 2 . . 1 ]3 2 39。 h 1 1 39。 h 3 1 39。 WHEN 11111110 = y= 000。 WHEN 11101111 = y= 100。 WHEN OTHERS= y= XXXXXXXX。 WHEN 100 = y= 11101111。139。X39。 WHEN 1 = q=i1。因此在 IF語句的條件表達式中只能使用關系運算操作及邏輯運算操作的組合表達式。 ?每個 IF語句必須以 END IF結束。 ELSIF (sel=“10”) THEN y=input(2)。 y:OUT STD_LOGIC)。如果所有設置的條件都不滿足,則執(zhí)行 ELSE和 END IF之間的順序處理語句。 END PROCESS。當條件不滿足時,將執(zhí)行 ELSE和 END IF之間所界定的順序處理語句。如果條件成立,則 IF語句所包含的順序處理語句將被執(zhí)行;如果條件不成立,程序跳過 IF語句所包含的順序處理語句,而執(zhí)行 IF語句后面的語句。 VHDL語言中順序描述語句主要有: ?變量賦值語句; ?IF語句; ?CASE語句; ?LOOP語句; ?NEXT語句; ?EXIT語句; ?WAIT語句; ?斷言語句; ?NULL語句; 變量賦值語句 目的變量 :=表達式; 執(zhí)行該語句時,目的變量的值將由表達式所表達的新值代替; 表達式的數(shù)據(jù)類型、長度與目標變量必須一致; 表達式可以是變量、信號或字符。第 7章 VHDL基本描述語句 順序描述語句 并發(fā)描述語句 順并描述語句 屬性描述語句 順序描述語句 ( Sequential) ?順序描述語句像在一般的軟件語言中一樣,其語句是按出現(xiàn)的次序加以執(zhí)行的。 變量賦值語句只能在進程或子程序中使用; 變量賦值語句立即生效 變量賦值語句是對變量進行賦值的語句。 IF (clk?EVENT AND clk=?1?) THEN q=d。 ARCHITECTURE rtl OF mux IS BEGIN PROCESS (a,b,sel) IS BEGIN IF (sel=?1? ) THEN c=a。 END ARCHITECTURE rtl。 格式 1: LIBRARY IEEE; USE 。 END ENTITY mux4。 ELSE y=input(3)。 ELSIF語句作為 IF的后續(xù)語句,只需要 END IF 結束。 CASE 語句 CASE 條件表達式 IS WHEN 條件表達式取值 1 = 順序描述語句; WHEN 條件表達式取值 2 = 順序描述語句; …… WHEN 條件表達式取值 N = 順序描述語句; END CASE; CASE語句用來描述總線或編碼、譯碼的行為,從許多不同語句的序列中選擇其中之一執(zhí)行。 WHEN 2 = q=i2。與 39。的組合值,比如 XXXX01等 CASE 語句與 IF語句的區(qū)別: IF語句中的條件是按順序處理的; CASE語句中的條件(值)是并行處理的; 因此 IF語句可以描述優(yōu)先編碼電路,而 CASE語句不能; 例: 38譯碼器的 CASE描述 CASE indata IS WHEN 000 = y= 11111110 ; WHEN 001 = y= 11111101。 WHEN 101 = y= 11011111。 END CASE。 WHEN 11110111 = y= 011。 WHEN OTHERS= y= XXX。 h 1 1 39。 h 1 M u x 23 39。 h 0 0 0 0 0 0 0 0 a [ 7 . . 0 ]y [ 2 . . 0 ]y=“XXX”。 h 9 F F F 7 F F F 7 F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F y=“111”。 ELSIF input(3)=?0? THEN y=“100”。 ELSE y=“000”。 [標號 :] FOR 循環(huán)變量 IN 取值 范圍 LOOP 順序 處 理語句 。 USE IEEE. STD_LOGIC_1l64. ALL。 ARCHITECTURE rtl OF parity_check IS BEGIN PROCESS( a) IS VARIABLE tmp: STD_LOGIC ; BEGIN tmp:=39。 y=tmp。 END LOOP [標號 ] 。 sum:=0。 ?NEXT語句執(zhí)行時,將停止當前的迭代,而轉(zhuǎn)入下一次新的迭代。而 NEXT語句不結束 LOOP語句的執(zhí)行,只是結束一次循環(huán)。 2) EXIT語句后跟 LOOP語句的標號 此時 , 執(zhí)行 EXIT語句時 , 程序?qū)⑻了f明的標號 。如果無標號說明,下一條要執(zhí)行的語句是循環(huán)外的下一條語句。 WAIT ON 后面的信號只要有一個發(fā)生變化,進程將被執(zhí)行。 wait on a,b。 錯誤語句 End process。 ?該語句在表達式中將建立一個隱式的敏感信號表,當表中的任何一個信號量發(fā)生變化時,就立即對表達式進行一次評估。 表達式為時間表達式,當進程執(zhí)行到該語句時將被掛起,直到指定的等待時間到時,進程再開始執(zhí)行 WAIT FOR 語句后面的語句。s。 ARCHITECTURE wait_timeout OF wait_example IS SIGNAL senda:STD_LOGIC:=?0?。 WAIT UNTIL sendb=?0?。 sendb=?0? after 10 ns。 END ARCHITECTURE wait_timeout。 WAIT UNTIL (sendb=?0?) FOR 1 us。 7. NULL語句 NULL語句用來表示一種只占位置的空操作,該語句不執(zhí)行任何操作。 進程 (PROCESS)語句 PROCESS語句歸納起來有如下幾個特點 : ( 1)可以與同一構造體內(nèi)的其它進程并發(fā)執(zhí)行 ( 2)可使用構造體內(nèi)或?qū)嶓w內(nèi)定義的信號 ( 3)進程內(nèi)部的語句是順序執(zhí)行的 ( 4)進程的狀態(tài)有 2個,執(zhí)行和等待 ( 5)進程執(zhí)行的條件是敏感信號列表中的信號發(fā)生變化或者 WAIT語句滿足條件 ( 6)進程之間的通信通過信號進行傳遞 塊 (BLOCK)語句 BLOCK語句是一個并發(fā)語句,而且它所包含的一系列語句也是并發(fā)語句,因此塊語句中的并發(fā)語句的執(zhí)行與次序無關。在構造體的結構描述方式中實現(xiàn)高層次設計與低層次模塊的連接。 目的信號量 = 表達式 1 WHEN 條件 1 ELSE 表達式 2 WHEN 條件 2 ELSE 表達式 3 WHEN 條件 3 ELSE …… …… ELSE 表達式 n。 q=i0 WHEN sel= 00 ELSE il WHEN sel= 01 ELSE i2 WHEN sel= 10 ELSE i3 WHEN sel= 11 ELSE 39。 與 IF語句相比 ,條件信號賦值語句中的 ELSE是一定要有的 , 而 IF語句則可以有也可以沒有。 ENTITY mux IS PORT( il,i2,i3,a,b: IN STD_LOGIC。 BEGIN WITH sel SELECT q=i0 WHEN 0, il WHEN 1, i2 WHEN 2, i3 WHEN 3, ?X39。 ELSE 1 WHEN a=?139。 ELSE 3 WHEN a=?139。 LIBRARY IEEE。 END ENTITY mux。 WITH sel SELECT q=i0 WHEN “00”, il WHEN “10” i2 WHEN “01”, i3 WHEN “11”, ?X39。, WHEN “10” = q=i1。 END CASE。 元件標號名:元件名 [ GENERIC MAP(參數(shù)映射列表) ] PORT MAP (端口映射列表) 。 END GENERATE [標號名 ]; 標號: IF 條件 GENERATE 并發(fā)處理語句 。 GENERATE語句的典型應用場合是生成存儲器陣列和寄存器陣列等,另一種應用用于仿真狀態(tài)編譯機。 b: OUT STD_LOGIC)。 END COMPONENT dff。 END GENERATE。 dff2: dff PORT MAP (z(1),clk,z(2))。也就是說, FOR—GENERATE語句只能處理規(guī)則的構造體。 ENTITY shift IS GENERIC(len:INTEGER:=4)。 ARCHITECTURE if_shift OF shift IS COMPONENT dff IS PORT(d,clk: IN STD_LOGIC。 BEGIN g1:FOR i in 0 TO (len1) GENERATE g2:IF i=0 GENERATE dffx: dff PORT MAP (a,clk,z(i+1))。 g4:IF (i/=0) AND (i/=len1)) GENERATE dffx: dff PORT MAP (z(i),clk,z(i+1))。 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語言中存在一類語句,根據(jù)不同的使用場合,即可以作為順序執(zhí)行語句,又可作為并發(fā)執(zhí)行語句,在本教材中將該類語句稱為順并描述語句。 ARCHITECTURE beh OF a_var IS BEGIN PROCESS(a,i) IS BEGIN output=a(i)。如果過程調(diào)用語句在進程內(nèi),則為順序過程調(diào)用語句。 斷言( ASSERT)語句 ?ASSERT語句主要用于程序仿真、調(diào)試中的人機對話,它可以輸出一個文字串作為警告和錯誤信息 ?在執(zhí)行 ASSERT語句時,對條件進行判斷,如果條件為“真”,則向下執(zhí)行另一個語句;如果條件為“假”,則輸出錯誤信息和錯誤嚴重程度的級別。 ASSERT 條件 [RE