【正文】
= Y= 1101111” 。9 End a1。 LOOP語句 一、單個(gè) LOOP語句 [LOOP標(biāo)號(hào) :] LOOP 順序語句 END LOOP [LOOP標(biāo)號(hào) ]; 例: L2 : LOOP a:= a + 1 。 EXIT L2 WHEN a 10。 END LOOP L2。 二、 FOR_LOOP語句 [LOOP標(biāo)號(hào) :] FOR 循環(huán)變量 IN 循環(huán)次數(shù)范圍 LOOP 順序語句; END LOOP [LOOP 標(biāo)號(hào) ] ; A7 A6 A5 A4 A3 A2 A1 A0 X O R 結(jié)果1 1 1 0 0 0 0 1 01 1 1 1 1 0 0 1 01 1 1 0 0 0 0 0 11 1 1 1 1 0 0 0 1例:試設(shè)計(jì)一個(gè)八位奇偶校驗(yàn)器 注: 0 XOR a = a LIBRARY IEEE。 USE 。 ENTITY JIOU IS PORT (a : IN STD_LOGIC_VECTOR(7DOWNTO 0)。 y: OUT STD_LOGIC)。 END JIOU。 ARCHITECTURE OPT OF JIOU IS SIGNAL tmp : STD_LOGIC。 BEGIN PROCESS (a) BEGIN tmp = ?0?。 FOR n IN 0 TO 7 LOOP tmp = tmp XOR a(n)。 END LOOP。 y = tmp。 END PROCESS。 END opt。 三 . WHILE_LOOP語句 [標(biāo)號(hào) :] WHILE 循環(huán)控制變量 LOOP 順序語句 END LOOP [標(biāo)號(hào) ]; 例 1: Shift1 : PROCESS (inputx) VARIABLE n : POSITIVE :=1 BEGIN L1 : WHILE n8 LOOP outputx(n)= input (n+8)。 n:= n+1。 END LOOP L1。 END PROCESS Shift1。 NEXT與 EXIT語句 NEXT。 NEXT LOOP 標(biāo)號(hào); NEXT LOOP 標(biāo)號(hào) WHEN 條件表達(dá)式; EXIT。 EXIT LOOP 標(biāo)號(hào); EXIT LOOP 標(biāo)號(hào) WHEN 條件表達(dá)式; 循環(huán)語句轉(zhuǎn)向控制 LIBRARY IEEE。 USE 。 ENTITY BIJIAO IS PORT (a : IN STD_LOGIC_VECTOR(0 TO 7)。 b : IN STD_LOGIC_VECTOR(0 TO 7)。 y: OUT STD_LOGIC)。 END BIJIAO。 ARCHITECTURE JIEGOU OF BIJIAO IS Signal tmp : STD_LOGIC_VECTOR(0 TO 7)。 Signal tmq : std_logic。 BEGIN PROCESS (a,b) BEGIN FOR n IN 0 TO 7 LOOP tmp(n)= a(n) xnor b(n)。 Next when (tmp(n)=?1?)。 tmq=?1?。 END LOOP。 y = tmq。 END PROCESS。 END JIEGOU。 NEXT語句 LIBRARY IEEE。 USE 。 ENTITY BIJIAO IS PORT (a : IN STD_LOGIC_VECTOR(0 TO 7)。 b : IN STD_LOGIC_VECTOR(0 TO 7)。 y: OUT STD_LOGIC)。 END BIJIAO。 ARCHITECTURE JIEGOU OF BIJIAO IS Signal tmp : STD_LOGIC_VECTOR(0 TO 7)。 BEGIN PROCESS (a,b) BEGIN FOR n IN 0 TO 7 LOOP tmp(n)= a(n) xnor b(n)。 EXIT when (tmp(n)=?0?)。 END LOOP。 y =?1?。 END PROCESS。 END JIEGOU。 EXIT語句 子程序及其調(diào)用 子程序概述 函數(shù) (Function) 過程( Procedure) 子程序調(diào)用 3. 5 返回語句( Return) 3. 6 空操作語句( NULL) 3. 7 其它語句 子程序概述 子程序是一個(gè) VHDL程序模塊,由順序語句構(gòu)成,用于完成 重復(fù)性的計(jì)算工作,子程序有兩種類型,即過程( Procedure) 和函數(shù)( Function)。子程序的使用方法只能通過子程序調(diào) 用及與子程序的界面端口進(jìn)行通信。每調(diào)用一次子程序都意 味著增加了一個(gè)硬件電路模塊,因此,在實(shí)際使用時(shí),要密 切關(guān)注和嚴(yán)格控制子程序的調(diào)用次數(shù)。 函數(shù) (Function) --函數(shù)首 Function 函數(shù)名 (參數(shù)表) Return 數(shù)據(jù)類型 Function 函數(shù)名 (參數(shù)表) Return 數(shù)據(jù)類型 IS 說明部分 Begin 順序語句 END Function 函數(shù)名; --函數(shù)體 注 :參數(shù)表中參量可以是變量、信號(hào)、常數(shù)(默認(rèn)) 無需定義參數(shù)的方向(默認(rèn)為“ 輸入 ”) 例 1 Entity func Is Port ( a: in bit_vector (0 to 2) 。 m : out bit_vector(0 to 2))。 End Entity func。 Architecture demo Of func Is Function sam ( x,y,z: bit) Return bit is Begin Return (x and y) or z End Function sam。 Begin Process (a) Begin m(0)=sam(a(0), a(1), a(2))。 m(1)=sam(a(2), a(0), a(1))。 m(0)=sam(a(1), a(2), a(0))。 End Process。 End Architecture demo。 函數(shù)體 輸入變量 注意:函數(shù)定 義的位置 函數(shù)調(diào)用 例 2 Function trans (value : bit_vector(0 to 3) ) Return bit_vector Is Begin Case value IS When “0000”= Return “1100”。 When “0101”= Return “1100”。 When Others= Return “1111”。 End Case。 End Function trans。 過程( Procedure) --過程首 Procedure 過程名 (參數(shù)表) Procedure 過程名 (參數(shù)表) IS 說明部分 Begin 順序語句 END Procedure 過程名; --過程體 注 :參數(shù)表中參量可以時(shí)變量、信號(hào)、常數(shù)(默認(rèn)) 參數(shù)的方向可以是 IN、 OUT、 INOUT 例 Procedure prg1 (variable value:inout bit_vector(0 to 3) ) Begin Case value IS When “0000”= Return “1100”。 When “0101”= Return “0000”。 When Others= Return “1111”。 End Case。 End Procedure Prg1。 子程序調(diào)用 例題 ENTITY liti IS PORT (a,b,c,d:in bit_vector(0 to 3)。 ra,rb,rc,rd:our bit_vector(0 to 3))。 END liti。 ARCHITECTURE muxes OF liti is Procedure sort(x,y:inout bit_vector(0 to 3)) is variable tmp:bit_vector(0 to 3)。 Begin If xy then tmp:=x。x:=y。y:=tmp。 END IF。 END SORT。 Begin Process (a,b,c,d) Begin sort (a,c)。 sort (b,d)。 sort (a,b)。 sort (c,d)。 sort (b,c)。 END process。 ra=a。 rb=b。 rc=c。 rd=d。 END muxes。 函數(shù)與過程對(duì)比 ? 過程可以返回多值,函數(shù)只能返回一個(gè)值。 ? 過程的參數(shù)為 IN、 OUT、 INOUT 函數(shù)的參數(shù)為 IN(默認(rèn) )。 ? 函數(shù)和過程均能產(chǎn)生新的電路模塊。 3. 5 返回語句( Return) Return 。 Return 表達(dá)式; 只能用于 Function Procedure rs (signal s ,r : in std_logic。 signal q, nq : inout std_logic) is Begin If (s=?1? and r=?1?) then Return Else q=s and nq Nq=s and q End if。 End procedure rs。 Function opt(a,b,opr:std_logic) return std_logic is Begin If (opr =?1?) then Return (a and b)。 Else Return (a or b)。 End if。 End Function opt。 Return 語句的作用就是結(jié)束當(dāng)前運(yùn)行的子程序,所不同的是過程無條件返回,并且不返回任何值。函數(shù)必須返回一個(gè)值 3. 6 空操作語句( NULL) CASE OPCODE IS WHEN “001” = tmp:=rega and regb。 WHEN “101” = tmp:=rega or regb。 WHEN “110” = tmp:=NOT rega。 WHEN OTHERS = NULL。 END CASE。 注: NULL語句有時(shí)會(huì)造成不必要的寄存器 3. 7 其它語句 clock? EVENT and clock =?1?。 功能: clock? EVENT 就是對(duì)信號(hào)在當(dāng)前的一個(gè)極小 的時(shí)間段內(nèi)電平是否發(fā)生變化進(jìn)行檢測(cè)。 例 1: Process (clock) If (clock?EVENT and clock=?1?) then Q=DATA End If。 End Process。 例 2: Process (clock) If (clock?EVENT and clock=?0?) then Q=DATA End If。 End Process。 例 3: Process (clock) If rising_edge (clock) then Q=DATA End If。 End Process。 與例 1等價(jià) 第四章 VHDL并行語句 并行語句概述 并行信號(hào)賦值語句 進(jìn)程語句( process) 并行語句概述 并行語句一般處于進(jìn)程( PROCESS)的外部。所有并行 語句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無關(guān)。 一、并行語句特點(diǎn) ; ; ,沒有其它的限制條件 二 、 基本的并行語