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

下載本文檔

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

文檔簡介

1、1210.1.1 賦值語句賦值語句信號(hào)賦值語句信號(hào)賦值語句變量賦值語句變量賦值語句信號(hào)代入語句:信號(hào)代入語句: 格式格式: 目的信號(hào)變量目的信號(hào)變量=信號(hào)變量表達(dá)式信號(hào)變量表達(dá)式 例例: a 順序語句;順序語句;When 選擇值選擇值 = 順序語句;順序語句;.【W(wǎng)HEN OTHERS =】;END CASE ;42)多條件選擇值的一般表達(dá)式:多條件選擇值的一般表達(dá)式: 選擇值選擇值 | |選擇值選擇值 3)選擇值)選擇值 表達(dá)方式:表達(dá)方式: (1 1)單個(gè)普通數(shù)值,如)單個(gè)普通數(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 語句舉例語句舉例5LIBRARY 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

3、_LOGIC; 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=0 ; z2=0; z3=0; z4=0; - z1=0 ; z2=0; z3=0; z4 z1 z1 z2 z2 z3 z

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

5、分相似的,不同之處:調(diào)用函數(shù)將返還一個(gè)指定數(shù)據(jù)類型的值,不同之處:調(diào)用函數(shù)將返還一個(gè)指定數(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)詳細(xì)內(nèi)容已講過)詳細(xì)內(nèi)容已講過1310.1.9 返回語句返回語句(RETURN)1)格式:)格式: 語句格式一語句格式一: RETURN; -只用于結(jié)束過程,并不返回任何值。只用于結(jié)束過程,并不返回任何值。

6、語句格式二語句格式二: RETURN 表達(dá)式;表達(dá)式; -只用于函數(shù),并返回一個(gè)值。只用于函數(shù),并返回一個(gè)值。2)舉例)舉例 例例1 過程調(diào)用返回例子過程調(diào)用返回例子 例例2 幻燈片幻燈片 60函數(shù)調(diào)用返回例子函數(shù)調(diào)用返回例子1410.1.10 空操作語句空操作語句(NULL) 1)語句格式:)語句格式:NULL;例:例:CASE Opcode IS CASE Opcode IS WHEN 001 = tmp := rega AND regb ; WHEN 001 = tmp := rega AND regb ; WHEN 101 = tmp := rega OR regb ; WHEN 10

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

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

9、tiations)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 實(shí)體名實(shí)體名 ISIS 說明語句說明語句 BEGIN BEGIN 并行語句并行語句 END E

10、ND 結(jié)構(gòu)體名結(jié)構(gòu)體名;1610.2.1 10.2.1 并行信號(hào)賦值語句并行信號(hào)賦值語句1. 1. 簡單信號(hào)賦值語句簡單信號(hào)賦值語句 格式:格式:賦值目標(biāo)賦值目標(biāo) = 表達(dá)式表達(dá)式例:例: 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;注:注:例中的五條信號(hào)賦值語句的例中的五條信號(hào)賦值語句的執(zhí)行是并行發(fā)生的。執(zhí)行是并行發(fā)生的。172. 2

11、. 條件信號(hào)賦值語句條件信號(hào)賦值語句賦值目標(biāo)賦值目標(biāo) = 表達(dá)式表達(dá)式1 WHEN 賦值條件賦值條件1 ELSE 表達(dá)式表達(dá)式2 WHEN 賦值條件賦值條件2 ELSE . 表達(dá)式表達(dá)式n ;1 1)格式:)格式:2)舉例:)舉例:18【例【例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的邏輯電路圖見的邏

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

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

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

15、例【例1】* 【例【例2】* 【例【例3】 舉例:舉例:2510.2.610.2.6 REPORT REPORT語句語句-報(bào)告相關(guān)信息語句。報(bào)告相關(guān)信息語句。-格式:格式: REPORT REPORT ;10.2.7 斷言語句斷言語句-時(shí)序仿真和程序調(diào)試的人機(jī)對(duì)話。時(shí)序仿真和程序調(diào)試的人機(jī)對(duì)話。-格式:格式: ASSERT REPORT SEVERITY2610.3 屬性描述與定義語句屬性描述與定義語句 可綜合屬性:可綜合屬性: LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、 LENGTH、EVENT及及STABLE。 格式:格式: 屬性測(cè)試項(xiàng)目名屬性測(cè)試項(xiàng)目名

16、 屬性標(biāo)識(shí)符屬性標(biāo)識(shí)符 1. 1. 信號(hào)類屬性信號(hào)類屬性 # ( (NOT clockSTABLE AND clock =1) NOT clockSTABLE AND clock =1) - - - - 不可綜合不可綜合 # # (clockEVENT AND clock =1) (clockEVENT AND clock =1) 以上兩語句的功能是一樣的。以上兩語句的功能是一樣的。注注 意意1)EVENT與與STABLE測(cè)試功能相反。測(cè)試功能相反。 2)語句)語句“NOT(clockSTABLE AND clock =1) ”的表達(dá)方式是不可綜合的。的表達(dá)方式是不可綜合的。272 2、數(shù)據(jù)區(qū)

17、間類屬性、數(shù)據(jù)區(qū)間類屬性【例【例】.SIGNAL range1 : IN 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 ;.284 4、數(shù)組屬性、數(shù)組屬性LENGTHL

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

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

20、 OUT BIT); END reginf; ARCHITECTURE maxpld OF reginf IS BEGIN PROCESS -高電平時(shí)鐘觸發(fā)高電平時(shí)鐘觸發(fā) BEGIN WAIT UNTIL clk = 1; q1 = d; END PROCESS; PROCESS -低電平時(shí)鐘觸發(fā)低電平時(shí)鐘觸發(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 =

21、1 THEN q3 = d; END IF; END PROCESS;32PROCESS (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

22、;( 續(xù))續(xù))例例10.2 寄存器寄存器 33PROCESS (clk, load, data) -上升沿觸發(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

23、= 1 THEN q7 = d; END IF;END PROCESS;END maxpld;例例10.2 寄存器(寄存器( 續(xù))續(xù))34LIBRARY 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

24、downto 0);begin qa=count_4(0); qb=count_4(1); qc=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

25、 復(fù)位;復(fù)位;en 計(jì)數(shù)控制;計(jì)數(shù)控制; clk 時(shí)鐘;時(shí)鐘; qa,qb,qc,qd 計(jì)數(shù)器輸出計(jì)數(shù)器輸出例例10.110.1 十二進(jìn)制同步計(jì)數(shù)器十二進(jìn)制同步計(jì)數(shù)器35LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -設(shè)計(jì)設(shè)計(jì)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 : PROC

26、ESS (CLK_S) BEGIN IF clk_s = 1 AND clk_sEVENT THEN q = d ; nq = NOT d; END IF; END PROCESS;END ARCHITECTURE a_rs_ff; 接下頁接下頁例例336LIBRARY 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_b

27、in_n;ARCHITECTURE behv OF cnt_bin_n IS COMPONENT d_ff 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 b

28、ehv;37LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY 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, O

29、EN, G , sigvec_save ) BEGIN IF OEN = 0 THEN Q = sigvec_save; ELSE Q = ZZZZZZZZ; END IF; IF G = 1 THEN Sigvec_save = D ; END IF; END PROCESS; END ARCHITECTURE two; 接下頁接下頁例例238(續(xù))(續(xù))ARCHITECTURE one OF SN74373 IS COMPONENT LatchPORT ( D, ENA : IN STD_LOGIC; Q : OUT STD_LOGIC ); END COMPONENT; SIGNAL s

30、ig_mid : STD_LOGIC_VECTOR( 8 DOWNTO 1 ); BEGIN GeLatch : 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個(gè)相同的電路模塊個(gè)相同的電路模塊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

31、 U TO U TP U Ta0 b 0 a1 b 1 a7 b 7 . . .40LIBRARY IEEE;USE 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

32、=set, b=qb, c=q); U2 : nand2 PORT MAP (a=reset, b=q, c=qb);END rsff1;例例 3 RS觸發(fā)器電路實(shí)現(xiàn)觸發(fā)器電路實(shí)現(xiàn)41 . 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

33、= s_time) ) ;-局部端口參量設(shè)定局部端口參量設(shè)定 PORT (pb : IN BIT; pb2 : INOUT BIT ); PORT (pb : 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ù)定

34、義 SIGNAL s1 : BIT ; SIGNAL s1 : BIT ; - - 局部信號(hào)定義局部信號(hào)定義 BEGINBEGIN 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 func ; END ARCHITECTURE func ;【例【例2】 塊語句例塊語句例4344LIBRARY IEEE;USE IE

35、EE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder 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

36、 instruction SELECT dataout = data1 AND data2 WHEN 000 , data1 OR data2 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】45.WITH selt SELECTmuxout out1 out1 out1 out110 ; - 當(dāng)當(dāng)a大于大于10時(shí)跳出循環(huán)時(shí)跳出循環(huán)

37、END LOOP L2; .例例.148【例例2 】循環(huán)語句舉例循環(huán)語句舉例 LIBRARY IEEE; USE IEEE.STD_LOGIC_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

38、); END LOOP ; y = tmp; END PROCESS; END opt; 49例例循環(huán)語句舉例循環(huán)語句舉例SIGNAL 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í)行以下三個(gè)信號(hào)賦值操作:此段程序等效于順序執(zhí)行以下三個(gè)信號(hào)賦值操作: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

39、; NEXT LOOP L_x ; .說明說明: 當(dāng)當(dāng)(ef) 時(shí)時(shí),執(zhí)行,執(zhí)行NEXT L_x ,跳轉(zhuǎn)到,跳轉(zhuǎn)到L_x執(zhí)行,執(zhí)行,當(dāng)當(dāng)ef不成立不成立時(shí),執(zhí)行時(shí),執(zhí)行s3語句語句52SIGNAL 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(

40、i)=1) THEN a_less_then_b = TRUE ; - a b時(shí)時(shí) ,由,由EXIT跳出循環(huán)比較程序,并報(bào)告結(jié)果。跳出循環(huán)比較程序,并報(bào)告結(jié)果。531)WAIT ON 信號(hào)表結(jié)構(gòu)信號(hào)表結(jié)構(gòu) -用于仿真用于仿真SIGNAL s1,s2 : STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2 ;-執(zhí)行到此句被掛起來,待執(zhí)行到此句被掛起來,待s1,s2s1,s2任一信號(hào)改變,進(jìn)程才重新開始。任一信號(hào)改變,進(jìn)程才重新開始。END PROCESS ;2 2) WAIT_ON WAIT_ON 結(jié)構(gòu)結(jié)構(gòu) -用于仿真用于仿真 LOOP Wait on enable; E

41、XIT WHEN enable =1; END LOOP; 3) WAIT_UNTIL條件表達(dá)式結(jié)構(gòu)條件表達(dá)式結(jié)構(gòu) -用于綜合用于綜合 . Wait until enable =1; .【例【例1】 例例 2)、)、3)中:)中: 待待enable上升沿。(即:兩條件上升沿。(即:兩條件enable改變改變AND nable=1同時(shí)滿足同時(shí)滿足)54例例 2 WAIT語句舉例語句舉例【例【例2】用一個(gè)硬件求實(shí)現(xiàn)平均值的功能用一個(gè)硬件求實(shí)現(xiàn)平均值的功能.PROCESSBEGINWAIT UNTIL clk =1;ave = a;WAIT UNTIL clk =1;ave = ave + a;WA

42、IT UNTIL clk =1;ave = ave + a;WAIT UNTIL clk =1;ave = (ave + a)/4 ;END PROCESS ;55 【例【例3】-用用WAIT語句實(shí)現(xiàn)具有同步復(fù)位功能語句實(shí)現(xiàn)具有同步復(fù)位功能 PROCESSPROCESS BEGIN BEGIN rst_loop : LOOP rst_loop : LOOP WAIT UNTILWAIT UNTIL clock =1 AND clockEVENT; - clock =1 AND clockEVENT; - 等待時(shí)鐘信號(hào)等待時(shí)鐘信號(hào) NEXT rst_loop WHEN (rst=1); - NE

43、XT rst_loop WHEN (rst=1); - 檢測(cè)復(fù)位信號(hào)檢測(cè)復(fù)位信號(hào)rstrst x = a ; - x = a ; - 無復(fù)位信號(hào),執(zhí)行賦值操作無復(fù)位信號(hào),執(zhí)行賦值操作 WAIT UNTILWAIT UNTIL clock =1 AND clockEVENT; - clock =1 AND clockEVENT; - 等待時(shí)鐘信號(hào)等待時(shí)鐘信號(hào) NEXT rst_loop When (rst=1); - NEXT rst_loop When (rst=1); - 檢測(cè)復(fù)位信號(hào)檢測(cè)復(fù)位信號(hào)rstrst y = b ; - y data(high) THEN - IF (data(lo

44、w) data(high) THEN - 檢測(cè)數(shù)據(jù)檢測(cè)數(shù)據(jù) temp := data(low) ;temp := data(low) ; data(low) := data(high); data(low) := data(high); data(high) := temp ; data(high) := temp ; END IF END IF ; END END swapswap ; - ; - 過程過程swapswap結(jié)束結(jié)束VARIABLE my_array : data_array ; VARIABLE my_array : data_array ; BEGIN - BEGIN -

45、進(jìn)程開始進(jìn)程開始 my_array := in_array ; - my_array := in_array ; - 將輸入值讀入變量將輸入值讀入變量swapswap(my_array, 1, 2); (my_array, 1, 2); - my_array- my_array、1 1、2 2是對(duì)應(yīng)于是對(duì)應(yīng)于datadata、lowlow、highhigh的實(shí)參的實(shí)參 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

46、_array, 1, 2); -第第1 1第第2 2元素再次交換元素再次交換 out_array = my_array ;out_array y THEN tmp := x; x := y; y := tmp; IF x y THEN tmp := x; x := y; y := tmp; END IF; END IF;END sort2;END sort2;BEGINBEGIN PROCESS (a, b, c, d) PROCESS (a, b, c, d) VARIABLE va, vb, vc, vd : BIT_VECTOR(0 TO top); VARIABLE va, vb, v

47、c, vd : BIT_VECTOR(0 TO top);BEGINBEGIN va := a; vb := b; vc := c; vd := d; va := a; vb := b; vc := c; vd := d; sort2(va, vc); sort2(vb, vd); sort2(va, vc); sort2(vb, vd); sort2(va, vb); sort2(vc, vd); sort2(va, vb); sort2(vc, vd); sort2(vb, vc); sort2(vb, vc); ra = va; rb = vb; rc = vc; rd = vd; ra

48、 = va; rb = vb; rc = vc; rd = vd; END PROCESS; END PROCESS;END muxes;END muxes; 例例2 過程調(diào)用舉例過程調(diào)用舉例59PROCEDURE rs (SIGNAL 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

49、 = s AND q AFTER 5 ns ; END IF ;END PROCEDURE rs ; 例例1 當(dāng)信號(hào)當(dāng)信號(hào)s =1 AND r =1滿足時(shí),滿足時(shí), RETURN 將中斷過程。60 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 ; 例例2 61.PROCEDURE adder(SIGNAL a, b :IN STD_LOGIC ; -過

50、程名為過程名為adder SIGNAL sum : OUT STD_LOGIC ); . adder(a1,b1,sum1) ; - 并行過程調(diào)用并行過程調(diào)用 . - 在此,在此,a1、b1、sum1即為分別對(duì)應(yīng)于即為分別對(duì)應(yīng)于a、b、sum的關(guān)聯(lián)參量名的關(guān)聯(lián)參量名 PROCESS( c1,c2) ; - 進(jìn)程語句執(zhí)行進(jìn)程語句執(zhí)行 BEGIN Adder(c1,c2,s1) ; - 順序過程調(diào)用,在此順序過程調(diào)用,在此c1、c2、s1即為分別對(duì)即為分別對(duì) 應(yīng)于應(yīng)于a、b、sum的關(guān)聯(lián)參量名的關(guān)聯(lián)參量名 END PROCESS ; 【例【例1 1】62 PROCEDURE check (SIGN

51、AL a : IN STD_LOGIC_VECTOR; SIGNAL error : OUT BOOLEAN ) IS - 在調(diào)用時(shí)再定位寬在調(diào)用時(shí)再定位寬 VARIABLE found_one : BOOLEAN := FALSE ; - 設(shè)初始值設(shè)初始值 BEGIN FOR i IN aRANGE LOOP - 對(duì)位矢量對(duì)位矢量a的所有的位元素進(jìn)行循環(huán)檢測(cè)的所有的位元素進(jìn)行循環(huán)檢測(cè) IF a(i) = 1 THEN - 發(fā)現(xiàn)發(fā)現(xiàn)a中有中有 1 IF found_one THEN - 若若found_one為為TRUE,表明發(fā)現(xiàn)了一個(gè)以上的表明發(fā)現(xiàn)了一個(gè)以上的1 ERROR = TRUE;

52、- 發(fā)現(xiàn)了一個(gè)以上的發(fā)現(xiàn)了一個(gè)以上的1,令,令found_one為為TRUE RETURN; - 結(jié)束過程結(jié)束過程 END IF; Found_one := TRUE; - 在在a中已發(fā)現(xiàn)了一個(gè)中已發(fā)現(xiàn)了一個(gè)1 End IF; End LOOP; - 再測(cè)再測(cè)a中的其它位中的其它位 error = NOT found_one; - 如果沒有任何如果沒有任何1 被發(fā)現(xiàn),被發(fā)現(xiàn),error 將被置將被置TRUE END PROCEDURE check; 【例【例2 2】63. CHBLK:BLOCK SIGNAL s1: STD_LOGIC_VECTOR (0 TO 0); -過程調(diào)用前設(shè)定位矢尺

53、寸過程調(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 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ù)名為并行過程

54、調(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】 64【例【例1】奇偶校驗(yàn)判別信號(hào)發(fā)生器,利用屬性函數(shù)奇偶校驗(yàn)判別信號(hào)發(fā)生器,利用屬性函數(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(

55、bus_size-1 DOWNTO 0); even_numbits, odd_numbits : OUT STD_LOGIC ) ;END parity ; ARCHITECTURE behave OF parity ISBEGINPROCESS (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

56、 = NOT temp;END PROCESS;END behave;65LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cntbuf IS PORT( Dir: IN STD_LOGIC; Clk,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; ATTRIBU

57、TE PINNUM OF Clr: signal is 2; ATTRIBUTE PINNUM OF Dir: signal is 3; ATTRIBUTE PINNUM OF OE: signal is 11; ATTRIBUTE PINNUM OF Q: signal is 17,16,15,14;END cntbuf;【例【例2】66ENTITY 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:

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論