VHDL基本語句用法_第1頁
VHDL基本語句用法_第2頁
VHDL基本語句用法_第3頁
VHDL基本語句用法_第4頁
VHDL基本語句用法_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、10.1.1 賦值語句賦值語句信號賦值語句信號賦值語句變量賦值語句變量賦值語句信號代入語句:信號代入語句: 格式格式: 目的信號變量目的信號變量=信號變量表達式信號變量表達式 例例: a 順序語句;順序語句;When 選擇值選擇值 = 順序語句;順序語句;.【W(wǎng)HEN OTHERS =】;END CASE ;2)多條件選擇值的一般表達式:多條件選擇值的一般表達式: 選擇值選擇值 | |選擇值選擇值 3)選擇值)選擇值 表達方式:表達方式: (1 1)單個普通數(shù)值,如)單個普通數(shù)值,如6 6。 (2 2)數(shù)值選擇范圍,如)數(shù)值選擇范圍,如(2 (2 TO 4)TO 4),表示取值為表示取值為 2

2、 2、3 3或或4 4。 (3 3)并列數(shù)值,如)并列數(shù)值,如3 3 5 5,表示取值為,表示取值為3 3或者或者5 5。 (4 4)混合方式,以上三種方式的混合。)混合方式,以上三種方式的混合。 4 4)CASE CASE 語句舉例語句舉例LIBRARY IEEELIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS ENTITY mux41 IS PORT (s4 PORT (s4,s3, s2s3, s2,s1 : IN STD_LOGIC;s1 : IN STD_LOG

3、IC; z4 z4,z3, z2z3, z2,z1 : OUT STD_LOGIC); z1 : OUT STD_LOGIC); END mux41 END mux41; ARCHITECTURE ARCHITECTURE activactiv OF mux41 IS OF mux41 IS SIGNAL sel : INTEGER RANGE 0 TO 15; SIGNAL sel : INTEGER RANGE 0 TO 15; BEGIN BEGIN z1 z1=0 ; z2=0; z3=0; z4=0; -=0 ; z2=0; z3=0; z4 = z1 z1=1 ; = z2 z2=

4、1 ; = z3 z3=1; z4 z4 = 實參表達式實參表達式 , 形參名形參名= = 實參表達式實參表達式) ) ;2 2)一個過程的調(diào)用將分別完成以下三個步驟:一個過程的調(diào)用將分別完成以下三個步驟:(1 1)將)將ININ和和INOUTINOUT模式的實參值賦給欲調(diào)用的過程中與它們對應(yīng)的形參;模式的實參值賦給欲調(diào)用的過程中與它們對應(yīng)的形參;(2 2)執(zhí)行這個過程;)執(zhí)行這個過程;(3 3)將過程中)將過程中ININ和和INOUTINOUT模式的形參值返回給對應(yīng)的實參。模式的形參值返回給對應(yīng)的實參。3)舉例)舉例 例例1 【例例2】2、函數(shù)調(diào)用、函數(shù)調(diào)用函數(shù)調(diào)用與過程調(diào)用是十分相似的,函

5、數(shù)調(diào)用與過程調(diào)用是十分相似的,不同之處:調(diào)用函數(shù)將返還一個指定數(shù)據(jù)類型的值,不同之處:調(diào)用函數(shù)將返還一個指定數(shù)據(jù)類型的值,函數(shù)的參量只能是輸入值。函數(shù)的參量只能是輸入值。1)格式:)格式: FUNCTION 函數(shù)名(參數(shù)表)函數(shù)名(參數(shù)表) RETURN 數(shù)據(jù)類型數(shù)據(jù)類型; - 函數(shù)首函數(shù)首 FUNCTION 函數(shù)名(參數(shù)表)函數(shù)名(參數(shù)表) RETURN 數(shù)據(jù)類型數(shù)據(jù)類型 IS - - 函數(shù)體函數(shù)體2 2)詳細內(nèi)容已講過)詳細內(nèi)容已講過10.1.9 返回語句返回語句(RETURN)1)格式:格式: 語句格式一語句格式一: RETURN; -只用于結(jié)束過程,并不返回任何值。只用于結(jié)束過程,并不

6、返回任何值。 語句格式二語句格式二: RETURN 表達式;表達式; -只用于函數(shù),并返回一個值。只用于函數(shù),并返回一個值。2)舉例)舉例 例例1 過程調(diào)用返回例子過程調(diào)用返回例子 例例2 幻燈片幻燈片 60函數(shù)調(diào)用返回例子函數(shù)調(diào)用返回例子10.1.10 空操作語句空操作語句(NULL) 1)語句格式:)語句格式:NULL;例:例:CASE CASE OpcodeOpcode IS IS WHEN 001 = WHEN 001 = tmptmp := := regarega AND AND regbregb ; ; WHEN 101 = WHEN 101 = tmptmp := := rega

7、rega OR OR regbregb ; ; WHEN 110 = WHEN 110 = tmptmp := NOT := NOT regarega ; ; WHEN OTHERS = WHEN OTHERS = NULL NULL ; ; END CASE ; END CASE ;3)說明:)說明:在上例的在上例的CASE語句中,語句中,NULL用于排除一些不用的條件。用于排除一些不用的條件。 等同:等同:WHEN OTHERS = tmp := rega ;2 2)舉例:)舉例:10.210.2 并行語句并行語句 結(jié)構(gòu)體中的并行語句種類:結(jié)構(gòu)體中的并行語句種類:1 1、并行信號賦值語句(

8、、并行信號賦值語句(Concurrent Signal AssignmentsConcurrent Signal Assignments)。)。2 2、進程語句、進程語句( (Process Statements)Process Statements)。3 3、塊語句、塊語句( (Block Statements)Block Statements)。4 4、條件信號賦值語句、條件信號賦值語句( (Selected Signal Assignments)Selected Signal Assignments)。5 5、元件例化語句、元件例化語句( (Component Instantiation

9、s)Component Instantiations),其中包括類屬其中包括類屬 、 配置語句。配置語句。6 6、生成語句、生成語句( (Generate Statements)Generate Statements)。7 7、并行過程調(diào)用語句、并行過程調(diào)用語句( (Concurrent Procedure Calls)Concurrent Procedure Calls)。 并行語句位置:并行語句位置: ARCHITECTURE ARCHITECTURE 結(jié)構(gòu)體名結(jié)構(gòu)體名 OF OF 實體名實體名 ISIS 說明語句說明語句 BEGINBEGIN 并行語句并行語句 END END 結(jié)構(gòu)體名結(jié)

10、構(gòu)體名;.1 并行信號賦值語句并行信號賦值語句1. 1. 簡單信號賦值語句簡單信號賦值語句 格式:格式:賦值目標賦值目標 = 表達式表達式例:例: ARCHITECTURE curt OF bc1 IS SIGNAL s1, e, f, g, h : STD_LOGIC ; BEGIN output1 = a AND b ; output2 = c + d ; g = e OR f ; h = e XOR f ; s1 = g ; END curt;注:注:例中的五條信號賦值語句的例中的五條信號賦值語句的執(zhí)行是并行發(fā)生的。執(zhí)行是并行發(fā)生的。2. 2. 條件信號賦值語句條件信

11、號賦值語句賦值目標賦值目標 = 表達式表達式1 WHEN 賦值條件賦值條件1 ELSE 表達式表達式2 WHEN 賦值條件賦值條件2 ELSE . 表達式表達式n ;1 1)格式:)格式:2)舉例:)舉例:【例【例1】 ENTITY mux IS PORT ( a,b,c : IN BIT ; p1,p2 : IN BIT ; z : OUT BIT ); END mux; ARCHITECTURE behv OF mux IS BEGIN z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; END;例例1的邏輯電路圖見的邏輯電路圖見 圖圖13. 3.

12、選擇信號賦值語句選擇信號賦值語句WITH 選擇表達式選擇表達式 SELECT 賦值目標信號賦值目標信號 連接端口名,連接端口名,.) ; - - - - 元件例化元件例化(調(diào)用)語句(調(diào)用)語句。1 1)格式格式:(1 1) 元件聲明語句用于調(diào)用已生成的元件元件聲明語句用于調(diào)用已生成的元件, ,這些元件可能在庫中這些元件可能在庫中, , 也可能是預(yù)先編寫的元件實體描述也可能是預(yù)先編寫的元件實體描述. .;(2 2) 元件語句可以在元件語句可以在ARCHITECTURE,PACKAGEARCHITECTURE,PACKAGE和和BLOCKBLOCK的說明部分的說明部分. .(3 3)元件例化中,

13、兩層端口名(信號)之間的關(guān)系為映射關(guān)系)元件例化中,兩層端口名(信號)之間的關(guān)系為映射關(guān)系: : 2 2)說明:)說明:3 3) 舉例:舉例: 例例11 , ,例例 2 ,例例 310.2.5 生成語句生成語句標號:標號: FOR 循環(huán)變量循環(huán)變量 IN 取值范圍取值范圍 GENERATE 說明說明 BEGIN 并行語句并行語句 END GENERATE 標號標號 ;2 2)格式格式:標號:標號: IF 條件條件 GENERATE 說明說明 Begin 并行語句并行語句 END GENERATE 標號標號 ;取值范圍的語句格式,有兩種形式:取值范圍的語句格式,有兩種形式:表達式表達式 TO 表

14、達式表達式 ; - 遞增方式,如遞增方式,如1 TO 5表達式表達式 DOWNTO 表達式表達式 ; -遞減方式,如遞減方式,如5 DOWNTO 13 3)說明說明:1 1)作用作用:復(fù)制作用,根據(jù)某些條件,設(shè)定好某一元件或設(shè)計單位,就可利用復(fù)制作用,根據(jù)某些條件,設(shè)定好某一元件或設(shè)計單位,就可利用 生成語句復(fù)制一組完全相同的并行元件或設(shè)計單位。生成語句復(fù)制一組完全相同的并行元件或設(shè)計單位。 生成語句生成語句四部分組成:四部分組成:(2 2)生成方式)生成方式(3 3)說明部分)說明部分(4 4)并行語句)并行語句(1 1)標號)標號* 【例【例1】* 【例【例2】* 【例【例3】 舉例:舉例

15、:10.2.610.2.6 REPORTREPORT語句語句-報告相關(guān)信息語句。報告相關(guān)信息語句。-格式:格式: REPORT REPORT ;10.2.7 斷言語句斷言語句-時序仿真和程序調(diào)試的人機對話。時序仿真和程序調(diào)試的人機對話。-格式:格式: ASSERT REPORT SEVERITY10.3 屬性描述與定義語句屬性描述與定義語句 可綜合屬性:可綜合屬性: LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、 LENGTH、EVENT及及STABLE。 格式:格式: 屬性測試項目名屬性測試項目名 屬性標識符屬性標識符 1. 1. 信號類屬性信號類屬性 # (

16、 (NOT clockSTABLE AND clock =1) NOT clockSTABLE AND clock =1) - - - - 不可綜合不可綜合 # # (clockEVENT AND clock =1)(clockEVENT AND clock =1) 以上兩語句的功能是一樣的。以上兩語句的功能是一樣的。注注 意意1)EVENT與與STABLE測試功能相反。測試功能相反。 2)語句)語句“NOT(clockSTABLE AND clock =1) ”的表達方式是不可綜合的。的表達方式是不可綜合的。2 2、數(shù)據(jù)區(qū)間類屬性、數(shù)據(jù)區(qū)間類屬性【例【例】.SIGNAL range1 : I

17、N STD LOGIC VECTOR (0 TO 7) ;.FOR i IN range1RANGE LOOP.3、數(shù)值類屬性、數(shù)值類屬性.PROCESS (clock, a, b);TYPE obj IS ARRAY (0 TO 15) OF BIT ;SIGNAL ele1, ele2, ele3, ele4 : INTEGER ;BEGIN ele1 = objRIGNT ; ele2 = objLEFT ; ele3 = objHIGH ; ele4 = objLOW ;.4 4、數(shù)組屬性、數(shù)組屬性LENGTHLENGTH.TYPE arry1 ARRAY (0 TO 7) OF BI

18、T ;VARIABLE wth: INTEGER;.wth1: =arry1LENGTH; - wth1 = 8.5、用戶定義屬性、用戶定義屬性ATTRIBUTE 屬性名屬性名 : 數(shù)據(jù)類型數(shù)據(jù)類型;ATTRIBUTE 屬性名屬性名 OF 對象名對象名 : 對象類型對象類型IS 值值;SynplifySynplify綜合器支持的特殊屬性都在綜合器支持的特殊屬性都在synplify.attributessynplify.attributes程序包中,程序包中,使用前加入下面語句:使用前加入下面語句:LIBRARY LIBRARY synplify;synplify;USE USE synplic

19、ity.attributes.all;synplicity.attributes.all;6、說明、說明7、舉例、舉例* * 【例【例1 1】* * 【例【例2 2】 本章程序舉例本章程序舉例例例10.2 寄存器寄存器 結(jié)束結(jié)束例子:設(shè)計一個實體圖如圖,功能為例子:設(shè)計一個實體圖如圖,功能為32位計數(shù)器位計數(shù)器例例10.2 寄存器寄存器ENTITY reginf ISPORT(d, clk, clr, pre, load, data : IN BIT; q1, q2, q3, q4, q5, q6, q7 : OUT BIT); END reginf; ARCHITECTURE maxpld

20、OF reginf IS BEGIN PROCESS -高電平時鐘觸發(fā)高電平時鐘觸發(fā) BEGIN WAIT UNTIL clk = 1; q1 = d; END PROCESS; PROCESS -低電平時鐘觸發(fā)低電平時鐘觸發(fā) BEGIN WAIT UNTIL clk = 0; q2 = d; END PROCESS; PROCESS (clk, clr ) -上升沿觸發(fā)上升沿觸發(fā)/同步清除同步清除 BEGIN IF clr = 1 THEN q3 = 0; ELSIF clkEVENT AND clk = 1 THEN q3 = d; END IF; END PROCESS;PROCESS

21、(clk, clr) -下降沿觸發(fā)下降沿觸發(fā)/同步清除同步清除 BEGIN IF clr = 0 THEN q4 = 0; ELSIF clkEVENT AND clk = 0 THEN q4 = d; END IF; END PROCESS; PROCESS (clk, pre) -上升沿觸發(fā)上升沿觸發(fā)/同步預(yù)置同步預(yù)置”1” BEGIN IF pre = 1 THEN q5 = 1; ELSIF clkEVENT AND clk = 1 THEN q5 = d; END IF; END PROCESS;( 續(xù))續(xù))例例10.2 寄存器寄存器 PROCESS (clk, load, data

22、) -上升沿觸發(fā)上升沿觸發(fā)/同步預(yù)置數(shù)據(jù)同步預(yù)置數(shù)據(jù) BEGIN IF load = 1 THEN q6 = data; ELSIF clkEVENT AND clk = 1 THEN q6 = d; END IF;END PROCESS; PROCESS (clk, clr, pre) -上升沿觸發(fā)上升沿觸發(fā)/同步置同步置”1”和清除和清除 BEGIN IF clr = 1 THEN q7 = 0; ELSIF pre = 1 THEN q7 = 1; ELSIF clkEVENT AND clk = 1 THEN q7 = d; END IF;END PROCESS;END maxpld;

23、例例10.2 寄存器(寄存器( 續(xù))續(xù))LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count12 isport(clk,reset,en: in std_logic; qa,qb,qc,qd: out std_logic);end count12;architecture behave of count12 issignal count_4: std_logic_vector(3 downto 0);begin qa=count_4(0); qb=count_4(1); qc=

24、count_4(2); qd=count_4(3); process(clk,reset) begin if (reset=0) then count_4=0000; elsif(clkevent and clk=1) then if(en=1) then if(count_4=1011) then count_4=0000; else count_4=count_4+1; end if; end if; end if; end process;end behave;引腳定義引腳定義: reset 復(fù)位;復(fù)位;en 計數(shù)控制;計數(shù)控制; clk 時鐘;時鐘; qa,qb,qc,qd 計數(shù)器輸出

25、計數(shù)器輸出例例10.110.1 十二進制同步計數(shù)器十二進制同步計數(shù)器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -設(shè)計設(shè)計DFF元件元件 ENTITY d_ff IS PORT ( d, clk_s : IN STD_LOGIC ; q : OUT STD_LOGIC ; nq : OUT STD_LOGIC ); END ENTITY d_ff;ARCHITECTURE a_rs_ff OF d_ff IS BEGIN bin_rs_ff : PROCESS (CLK_S) BEGIN IF clk_s = 1 AND clk_sEVENT THEN

26、q = d ; nq = NOT d; END IF; END PROCESS;END ARCHITECTURE a_rs_ff; 接下頁接下頁例例3LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY cnt_bin_n is GENERIC (n : INTEGER := 6); PORT (q : OUT STD_LOGIC_VECTOR (0 TO n-1); in_1 : IN STD_LOGIC ); END ENTITY cnt_bin_n;ARCHITECTURE behv OF cnt_bin_n IS COMPONENT d_ff

27、 PORT ( d, clk_s : IN STD_LOGIC; Q, NQ : OUT STD_LOGIC); END COMPONENT d_ff; SIGNAL s : STD_LOGIC_VECTOR(0 TO n); BEGIN s(0) = in_1; q_1 : FOR i IN 0 TO n-1 GENERATE dff : d_ff PORT MAP (s(i+1), s(I), q(i), s(i+1); END GENERATE; END ARCHITECTURE behv;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY

28、 SN74373 IS PORT ( D : IN STD_LOGIC_VECTOR ( 8 DOWNTO 1 ) ; OEN , G : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR (8 DOWNTO 1 ); END ENTITY SN74373;ARCHITECTURE two OF SN74373 IS SIGNAL sigvec_save : STD_LOGIC_VECTOR(8 DOWNTO 1); BEGIN PROCESS ( D, OEN, G , sigvec_save ) BEGIN IF OEN = 0 THEN Q = sigvec_

29、save; ELSE Q = ZZZZZZZZ; END IF; IF G = 1 THEN Sigvec_save = D ; END IF; END PROCESS; END ARCHITECTURE two; 接下頁接下頁例例2(續(xù))(續(xù))ARCHITECTURE one OF SN74373 IS COMPONENT LatchPORT ( D, ENA : IN STD_LOGIC; Q : OUT STD_LOGIC ); END COMPONENT; SIGNAL sig_mid : STD_LOGIC_VECTOR( 8 DOWNTO 1 ); BEGIN GeLatch :

30、FOR D(inNum) IN 1 TO 8 GENERATE Latchx : Latch PORT MAP ( D(inNum), G , sig_mid(inNum); END GENERATE; Q a(i),y=b(i);END GENERATE gen, .【例【例 1 】下圖下圖 是是 生成語句生成語句產(chǎn)生產(chǎn)生的的8個相同的電路模塊個相同的電路模塊C O M PIN P U TO U TP U TC O M PIN P U TO U TP U TC O M PIN P U TO U TP U Ta0 b 0 a1 b 1 a7 b 7 . . .LIBRARY IEEE;USE

31、IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY rs ISPORT (set, reset : IN BIT; q,qb : BUFFER BIT);END rs;ARCHITECTURE rsff1 OF rs IS COMPONENT nand2 PORT (a,b : IN BIT; c: OUT BIT ); END COMPONENT; BEGIN U1: nand2 PORT MAP (a=set, b=qb, c=q); U2 : nand2 PORT MAP (a=reset, b=q, c=qb);

32、END rsff1;例例 3 RS觸發(fā)器電路實現(xiàn)觸發(fā)器電路實現(xiàn) . b1 : BLOCK SIGNAL s1: BIT ; BEGIN S1 = a AND b ; b2 : BLOCK SIGNAL s2: BIT ; BEGIN s2 = c AND d ; b3 : BLOCK BEGIN Z = s2 ; END BLOCK b3 ; END BLOCK b2 ; y l_time,gb2 = s_timeGENERIC MAP (gb1 = l_time,gb2 = s_time) ) ;-局部端口參量設(shè)定局部端口參量設(shè)定 PORT (PORT (pbpb : IN BIT; pb2

33、 : INOUT BIT ); : IN BIT; pb2 : INOUT BIT ); - - 塊結(jié)構(gòu)中局部端口定義塊結(jié)構(gòu)中局部端口定義 PORT MAP (pb1 = b1, pb2 = a1 ) ; PORT MAP (pb1 = b1, pb2 = a1 ) ; - - 塊結(jié)構(gòu)端口連接說明塊結(jié)構(gòu)端口連接說明 CONSTANT delay : Time := 1 ms ; CONSTANT delay : Time := 1 ms ; - - 局部常數(shù)定義局部常數(shù)定義 SIGNAL s1 : BIT ; SIGNAL s1 : BIT ; - - 局部信號定義局部信號定義 BEGINBE

34、GIN s1 = pb1 AFTER delay ; s1 = pb1 AFTER delay ; pb2 = s1 AFTER gb1, b1 AFTER gb2 ; pb2 = s1 AFTER gb1, b1 AFTER gb2 ; END BLOCK Blk1 ;END BLOCK Blk1 ; END ARCHITECTURE END ARCHITECTURE funcfunc ; ;【例【例2】 塊語句例塊語句例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decode

35、r IS PORT ( a, b, c : IN STD_LOGIC; data1,data2 : IN STD_LOGIC; dataout : OUT STD_LOGIC );END decoder;ARCHITECTURE concunt OF decoder IS SIGNAL instruction : STD_LOGIC_VECTOR(2 DOWNTO 0) ; BEGIN instruction = c & b & a ; WITH instruction SELECT dataout = data1 AND data2 WHEN 000 , data1 OR d

36、ata2 WHEN 001 , data1 NAND data2 WHEN 010 , data1 NOR data2 WHEN 011 , data1 XOR data2 WHEN 100 , data1 XNOR data2 WHEN 101 , Z WHEN OTHERS ; END concunt ;【例【例2】.WITH selt SELECTmuxout out1 out1 out1 out110 ; - 當當a大于大于10時跳出循環(huán)時跳出循環(huán) END LOOP L2; .例例.1【例例2 】循環(huán)語句舉例循環(huán)語句舉例 LIBRARY IEEE; USE IEEE.STD_LOGIC

37、_1164.ALL;ENTITY p_check IS PORT ( a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); y : OUT STD_LOGIC );END p_check; ARCHITECTURE opt OF p_check 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; 例例循環(huán)語句舉例循環(huán)語句舉例SIGNA

38、L a, b, c : STD_LOGIC_VECTOR (1 TO 3);.FOR n IN 1 To 3 LOOP a(n) = b(n) AND c(n);END LOOP;例例3此段程序等效于順序執(zhí)行以下三個信號賦值操作:此段程序等效于順序執(zhí)行以下三個信號賦值操作:a(1)=b(1) AND c(1);a(2)=b(2) AND c(2); a (3) f); s3: b(k+8) := 0; k := k+1; NEXT LOOP L_y ; NEXT LOOP L_x ; .說明說明: 當當(ef) 時時,執(zhí)行,執(zhí)行NEXT L_x ,跳轉(zhuǎn)到,跳轉(zhuǎn)到L_x執(zhí)行,執(zhí)行,當當ef不成立

39、不成立時,執(zhí)行時,執(zhí)行s3語句語句SIGNAL a, b : STD_LOGIC_VECTOR (1 DOWNTO 0);SIGNAL a_less_then_b : Boolean;. a_less_then_b = FALSE ; - 設(shè)初始值設(shè)初始值 FOR i IN 1 DOWNTO 0 LOOP IF (a(i)=1 AND b(i)=0) THEN a_less_then_b b EXIT ; ELSIF (a(i)=0 AND b(i)=1) THEN a_less_then_b = TRUE ; - a b時時 ,由,由EXIT跳出循環(huán)比較程序,并報告結(jié)果。跳出循環(huán)比較程序,并

40、報告結(jié)果。1)WAIT ON 信號表結(jié)構(gòu)信號表結(jié)構(gòu) -用于仿真用于仿真SIGNAL s1,s2 : STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2 ;-執(zhí)行到此句被掛起來,待執(zhí)行到此句被掛起來,待s1,s2s1,s2任一信號改變,進程才重新開始。任一信號改變,進程才重新開始。END PROCESS ;2 2) WAIT_ON WAIT_ON 結(jié)構(gòu)結(jié)構(gòu) -用于仿真用于仿真 LOOP Wait on enable; EXIT WHEN enable =1; END LOOP; 3) WAIT_UNTIL條件表達式結(jié)構(gòu)條件表達式結(jié)構(gòu) -用于綜合用于綜合 . Wait un

41、til enable =1; .【例【例1】 例例 2)、)、3)中:)中: 待待enable上升沿。(即:兩條件上升沿。(即:兩條件enable改變改變AND nable=1同時滿足同時滿足)例例 2 WAIT語句舉例語句舉例【例【例2】用一個硬件求實現(xiàn)平均值的功能用一個硬件求實現(xiàn)平均值的功能.PROCESSBEGINWAIT UNTIL clk =1;ave = a;WAIT UNTIL clk =1;ave = ave + a;WAIT UNTIL clk =1;ave = ave + a;WAIT UNTIL clk =1;ave = (ave + a)/4 ;END PROCESS

42、; 【例【例3】-用用WAIT語句實現(xiàn)具有同步復(fù)位功能語句實現(xiàn)具有同步復(fù)位功能 PROCESSPROCESS BEGIN BEGIN rst_looprst_loop : LOOP : LOOP WAIT UNTILWAIT UNTIL clock =1 AND clockEVENT; - clock =1 AND clockEVENT; - 等待時鐘信號等待時鐘信號 NEXT NEXT rst_looprst_loop WHEN ( WHEN (rstrst=1); - =1); - 檢測復(fù)位信號檢測復(fù)位信號rstrst x = a ; - x = a ; - 無復(fù)位信號,執(zhí)行賦值操作無復(fù)位

43、信號,執(zhí)行賦值操作 WAIT UNTILWAIT UNTIL clock =1 AND clockEVENT; - clock =1 AND clockEVENT; - 等待時鐘信號等待時鐘信號 NEXT NEXT rst_looprst_loop When ( When (rstrst=1); - =1); - 檢測復(fù)位信號檢測復(fù)位信號rstrst y = b ; - y ) data(highdata(high) THEN - ) THEN - 檢測數(shù)據(jù)檢測數(shù)據(jù) temp := temp := data(lowdata(low) ;) ; data(lowdata(low) := ) :=

44、 data(highdata(high);); data(highdata(high) := temp ;) := temp ; END IF END IF ; END END swapswap ; ; - - 過程過程swapswap結(jié)束結(jié)束VARIABLEVARIABLE my_arraymy_array : : data_arraydata_array ; ; BEGIN BEGIN - - 進程開始進程開始 my_array := in_array ; my_array := in_array ; - 將輸入值讀入變量將輸入值讀入變量swapswap(my_array, 1, 2);

45、(my_array, 1, 2); - my_array my_array、1 1、2 2是對應(yīng)于是對應(yīng)于datadata、lowlow、highhigh的實參的實參 swap(my_array, 2, 3); swap(my_array, 2, 3); - - 位置關(guān)聯(lián)法調(diào)用,位置關(guān)聯(lián)法調(diào)用, 第第2 2第第3 3元素交換元素交換 swap(my_array, 1, 2); swap(my_array, 1, 2); - -第第1 1第第2 2元素再次交換元素再次交換 out_array = my_array ;out_array y THEN IF x y THEN tmptmp := x

46、; x := y; y := := x; x := y; y := tmptmp; ; END IF; END IF;END sort2;END sort2;BEGINBEGIN PROCESS (a, b, c, d) PROCESS (a, b, c, d) VARIABLE VARIABLE vava, , vbvb, , vcvc, , vdvd : BIT_VECTOR(0 TO top); : BIT_VECTOR(0 TO top);BEGINBEGIN vava := a; := a; vbvb := b; := b; vcvc := c; := c; vdvd := d; :

47、= d; sort2(va, sort2(va, vcvc); sort2(vb, ); sort2(vb, vdvd);); sort2(va, sort2(va, vbvb); sort2(vc, ); sort2(vc, vdvd);); sort2(vb, sort2(vb, vcvc);); rara = = vava; ; rbrb = = vbvb; ; rcrc = = vcvc; rd = ; rd = vdvd; ; END PROCESS; END PROCESS;END END muxesmuxes; ; 例例2 過程調(diào)用舉例過程調(diào)用舉例PROCEDURE rs (SI

48、GNAL s , r : IN STD_LOGIC ; SIGNAL q , nq : INOUT STD_LOGIC) IS BEGIN IF ( s =1 AND r =1) THEN REPORT Forbidden state : s and r are quual to 1; RETURN ; ELSE q = s AND nq AFTER 5 ns ; nq = s AND q AFTER 5 ns ; END IF ;END PROCEDURE rs ; 例例1 當信號當信號s =1 AND r =1滿足時,滿足時, RETURN 將中斷過程。 FUNCTION opt (a,

49、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 ; 例例2 .PROCEDURE adder(SIGNAL a, b :IN STD_LOGIC ; -過程名為過程名為adder SIGNAL sum : OUT STD_LOGIC ); . adder(a1,b1,sum1) ; - 并行過程調(diào)用并行過程調(diào)用 . - 在此,在此,a1、b1、sum1即為分別對應(yīng)于即為分別對應(yīng)于a、b、

50、sum的關(guān)聯(lián)參量名的關(guān)聯(lián)參量名 PROCESS( c1,c2) ; - 進程語句執(zhí)行進程語句執(zhí)行 BEGIN Adder(c1,c2,s1) ; - 順序過程調(diào)用,在此順序過程調(diào)用,在此c1、c2、s1即為分別對即為分別對 應(yīng)于應(yīng)于a、b、sum的關(guān)聯(lián)參量名的關(guān)聯(lián)參量名 END PROCESS ; 【例【例1 1】 PROCEDURE check (SIGNAL a : IN STD_LOGIC_VECTOR; SIGNAL error : OUT BOOLEAN ) IS - 在調(diào)用時再定位寬在調(diào)用時再定位寬 VARIABLE found_one : BOOLEAN := FALSE ; -

51、 設(shè)初始值設(shè)初始值 BEGIN FOR i IN aRANGE LOOP - 對位矢量對位矢量a的所有的位元素進行循環(huán)檢測的所有的位元素進行循環(huán)檢測 IF a(i) = 1 THEN - 發(fā)現(xiàn)發(fā)現(xiàn)a中有中有 1 IF found_one THEN - 若若found_one為為TRUE,表明發(fā)現(xiàn)了一個以上的表明發(fā)現(xiàn)了一個以上的1 ERROR = TRUE; - 發(fā)現(xiàn)了一個以上的發(fā)現(xiàn)了一個以上的1,令,令found_one為為TRUE RETURN; - 結(jié)束過程結(jié)束過程 END IF; Found_one := TRUE; - 在在a中已發(fā)現(xiàn)了一個中已發(fā)現(xiàn)了一個1 End IF; End LO

52、OP; - 再測再測a中的其它位中的其它位 error = NOT found_one; - 如果沒有任何如果沒有任何1 被發(fā)現(xiàn),被發(fā)現(xiàn),error 將被置將被置TRUE END PROCEDURE check; 【例【例2 2】. CHBLK:BLOCK SIGNAL s1: STD_LOGIC_VECTOR (0 TO 0); -過程調(diào)用前設(shè)定位矢尺寸過程調(diào)用前設(shè)定位矢尺寸 SIGNAL s2: STD_LOGIC_VECTOR (0 TO 1); SIGNAL s3: STD_LOGIC_VECTOR (0 TO 2); SIGNAL s4: STD_LOGIC_VECTOR (0 TO

53、 3); SIGNAL e1, e2, e3, e4: Boolean; BEGIN Check (s1, e1); - 并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s1、e1 Check (s2, e2); - 并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s2、e2 Check (s3, e3); - 并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s3、e3 Check (s4, e4); - 并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s4、e4 END BLOCK; . * 【例【例3】 【例【例1】奇偶校驗判別信號發(fā)生器,利用屬性函數(shù)奇偶校驗判別信號發(fā)生器

54、,利用屬性函數(shù) low low 和和highhighLIBRARY IEEE; -PARITY GENERATORUSE IEEE.STD_LOGIC_1164.ALL;ENTITY parity IS GENERIC (bus_size : INTEGER := 8 ); PORT (input_bus : IN STD_LOGIC_VECTOR(bus_size-1 DOWNTO 0); even_numbits, odd_numbits : OUT STD_LOGIC ) ;END parity ; ARCHITECTURE behave OF parity ISBEGINPROCESS

55、 (input_bus) VARIABLE temp: STD_LOGIC;BEGIN temp := 0; FOR i IN input_busLOW TO input_busHIGH LOOPtemp := temp XOR input_bus( i ) ; END LOOP ; odd_numbits = temp ; even_numbits = NOT temp;END PROCESS;END behave;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cntbuf IS PORT( Dir: IN STD_LOGIC; Clk,

56、Clr,OE: IN STD_LOGIC; A,B: INOUT STD_LOGIC_VECTOR (0 to 1); Q: INOUT STD_LOGIC_VECTOR (3 downto 0) ); ATTRIBUTE PINNUM : STRING; ATTRIBUTE PINNUM OF Clk: signal is 1; ATTRIBUTE PINNUM OF Clr: signal is 2; ATTRIBUTE PINNUM OF Dir: signal is 3; ATTRIBUTE PINNUM OF OE: signal is 11; ATTRIBUTE PINNUM OF

57、 Q: signal is 17,16,15,14;END cntbuf;【例【例2】ENTITY mux IS PORT (d0,d1,sel: IN BIT; q: OUT BIT); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3: BIT; BEGIN cale: BLOCK BEGIN tmp1=d0 AND sel; tmp2=d1 AND (NOT sel); tmp3=tmp1 OR tmp2; qa, in_b=b,out_s=v,out_co=u);U2: h_adder port map (in_a=v, in_b=ci,out_s=s,out_co=w);U3: o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論