EDA技術(shù)及應(yīng)用_第5章_3_2013_第1頁(yè)
EDA技術(shù)及應(yīng)用_第5章_3_2013_第2頁(yè)
EDA技術(shù)及應(yīng)用_第5章_3_2013_第3頁(yè)
EDA技術(shù)及應(yīng)用_第5章_3_2013_第4頁(yè)
EDA技術(shù)及應(yīng)用_第5章_3_2013_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1VHDLVHDL程序的常用語(yǔ)句程序的常用語(yǔ)句 5.3 VHDL5.3 VHDL并行語(yǔ)句(并行語(yǔ)句(Concurrent Statements) 并行語(yǔ)句是指語(yǔ)句的執(zhí)行順序與語(yǔ)句的書寫順序無(wú)關(guān),其執(zhí)行是并發(fā)執(zhí)并行語(yǔ)句是指語(yǔ)句的執(zhí)行順序與語(yǔ)句的書寫順序無(wú)關(guān),其執(zhí)行是并發(fā)執(zhí)行的語(yǔ)句,并行語(yǔ)句之間可以有信息的交流,也可以互為獨(dú)立、互不相關(guān)。行的語(yǔ)句,并行語(yǔ)句之間可以有信息的交流,也可以互為獨(dú)立、互不相關(guān)。每一個(gè)并發(fā)描述語(yǔ)句的內(nèi)部語(yǔ)句可以有兩種不同的運(yùn)行方式,即并行方式和每一個(gè)并發(fā)描述語(yǔ)句的內(nèi)部語(yǔ)句可以有兩種不同的運(yùn)行方式,即并行方式和順序方式。順序方式。VHDLVHDL結(jié)構(gòu)體中的并行語(yǔ)句主要有八種:

2、結(jié)構(gòu)體中的并行語(yǔ)句主要有八種:并行語(yǔ)句在結(jié)構(gòu)體中的使用格式如下:并行語(yǔ)句在結(jié)構(gòu)體中的使用格式如下: ARCHITECTURE ARCHITECTURE 結(jié)構(gòu)體名結(jié)構(gòu)體名 OFOF 實(shí)體名實(shí)體名 ISIS 說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句; BEGINBEGIN 并行語(yǔ)句并行語(yǔ)句; END ARCHITECTURE END ARCHITECTURE 結(jié)構(gòu)體名結(jié)構(gòu)體名; 1 1、進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句 2 2、塊語(yǔ)句、塊語(yǔ)句 3 3、并行信號(hào)賦值語(yǔ)句并行信號(hào)賦值語(yǔ)句 4 4、并行過(guò)程調(diào)用語(yǔ)句、并行過(guò)程調(diào)用語(yǔ)句 5 5、并行斷言語(yǔ)句、并行斷言語(yǔ)句 6 6、類屬語(yǔ)句、類屬語(yǔ)句 7 7、元件例化語(yǔ)句元件例化語(yǔ)句 8 8、生成

3、語(yǔ)句、生成語(yǔ)句 2并行語(yǔ)句運(yùn)行示意圖并行語(yǔ)句運(yùn)行示意圖塊語(yǔ)句塊語(yǔ)句并行語(yǔ)句并行語(yǔ)句并行語(yǔ)句順序語(yǔ)句1順序語(yǔ)句2 . 順序語(yǔ)句n進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句生生成成語(yǔ)語(yǔ)句句信號(hào)信號(hào)元元件件例例化化語(yǔ)語(yǔ)句句并并行行過(guò)過(guò)程程調(diào)調(diào)用用語(yǔ)語(yǔ)句句并并行行信信號(hào)號(hào)賦賦值值語(yǔ)語(yǔ)句句信號(hào)信號(hào)信號(hào)信號(hào)信號(hào)信號(hào)信號(hào)信號(hào)ARCHITECTUREEND ARCHITECTURE35.3.1 5.3.1 進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句( (Process Statement) )1. 1. 進(jìn)程語(yǔ)句格式進(jìn)程語(yǔ)句格式 PROCESSPROCESS語(yǔ)句結(jié)構(gòu)的一般表達(dá)格式如下:語(yǔ)句結(jié)構(gòu)的一般表達(dá)格式如下:一個(gè)結(jié)構(gòu)體中可以有多個(gè)進(jìn)程語(yǔ)句,同時(shí)并行執(zhí)行。一

4、個(gè)結(jié)構(gòu)體中可以有多個(gè)進(jìn)程語(yǔ)句,同時(shí)并行執(zhí)行。 進(jìn)程標(biāo)號(hào)進(jìn)程標(biāo)號(hào): : PROCESSPROCESS ( ( 敏感信號(hào)參數(shù)表敏感信號(hào)參數(shù)表 ) ) ISIS 進(jìn)程說(shuō)明部分;進(jìn)程說(shuō)明部分; BEGINBEGIN 順序描述語(yǔ)句;順序描述語(yǔ)句; END PROCESSEND PROCESS 進(jìn)程標(biāo)號(hào)進(jìn)程標(biāo)號(hào); ; 4ENTITY mul IS PORT (a, b, c, x, y : IN BIT; data_out : OUT BIT);END mul;ARCHITECTURE ex OF mul IS SIGNAL temp : BIT; BEGIN p_a: PROCESS (a, b, x)

5、 BEGIN IF (x = 0) THEN temp = a; ELSE temp = b; END IF; END PROCESS p_a; p_b: PROCESS(temp, c, y) BEGIN IF (y = 0) THEN data_out = temp; ELSE data_out = c; END IF; END PROCESS p_b;END ex;例:例:2選選12選選1abcxytempdata_out52.2.進(jìn)程語(yǔ)句要點(diǎn)進(jìn)程語(yǔ)句要點(diǎn)進(jìn)程的設(shè)計(jì)需要注意的問(wèn)題:進(jìn)程的設(shè)計(jì)需要注意的問(wèn)題: PROCESS PROCESS為一無(wú)限循環(huán)語(yǔ)句,為一無(wú)限循環(huán)語(yǔ)句,只有兩種狀態(tài):

6、執(zhí)行和等待只有兩種狀態(tài):執(zhí)行和等待 進(jìn)程必須由敏感信號(hào)的變化(變量不能作為敏感信號(hào))來(lái)啟動(dòng)或具有進(jìn)程必須由敏感信號(hào)的變化(變量不能作為敏感信號(hào))來(lái)啟動(dòng)或具有一個(gè)顯式的一個(gè)顯式的waitwait語(yǔ)句來(lái)激勵(lì)語(yǔ)句來(lái)激勵(lì) 使用了敏感表的進(jìn)程不能再含有等待語(yǔ)句使用了敏感表的進(jìn)程不能再含有等待語(yǔ)句 進(jìn)程語(yǔ)句本身是并行語(yǔ)句,但其內(nèi)部則為順序語(yǔ)句進(jìn)程語(yǔ)句本身是并行語(yǔ)句,但其內(nèi)部則為順序語(yǔ)句 信號(hào)是多個(gè)進(jìn)程間的通信線,是進(jìn)程間進(jìn)行聯(lián)系的重要途徑信號(hào)是多個(gè)進(jìn)程間的通信線,是進(jìn)程間進(jìn)行聯(lián)系的重要途徑 在任一進(jìn)程的說(shuō)明部分不能定義信號(hào)在任一進(jìn)程的說(shuō)明部分不能定義信號(hào) 一個(gè)進(jìn)程中只允許描述對(duì)應(yīng)于一個(gè)時(shí)鐘信號(hào)的同步時(shí)序邏

7、輯一個(gè)進(jìn)程中只允許描述對(duì)應(yīng)于一個(gè)時(shí)鐘信號(hào)的同步時(shí)序邏輯 進(jìn)程可以描述組合電路,最重要的是用它設(shè)計(jì)時(shí)序電路進(jìn)程可以描述組合電路,最重要的是用它設(shè)計(jì)時(shí)序電路6進(jìn)程工作原理示意圖進(jìn)程工作原理示意圖75.3.35.3.3并行信號(hào)賦值語(yǔ)句并行信號(hào)賦值語(yǔ)句( (Concurrent Signal Assignment Statement) ) 例如:例如: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and_gate IS PORT ( a,b : IN STD_LOGIC ; c : OUT STD_LOGIC); END and_gate; AR

8、CHITECTURE behave OF and_gate IS BEGIN c = a AND b ; END ARCHITECTURE behave;(1 1)簡(jiǎn)單信號(hào)賦值語(yǔ)句的格式:)簡(jiǎn)單信號(hào)賦值語(yǔ)句的格式: 賦值目標(biāo)賦值目標(biāo) = = 表達(dá)式表達(dá)式; ; 結(jié)構(gòu)體中的多條并發(fā)賦值語(yǔ)句是并行執(zhí)行的。結(jié)構(gòu)體中的多條并發(fā)賦值語(yǔ)句是并行執(zhí)行的。8(2 2) 條件信號(hào)賦值語(yǔ)句條件信號(hào)賦值語(yǔ)句( (Conditional Signal Assignment) )條件信號(hào)賦值語(yǔ)句的表達(dá)方式如下:條件信號(hào)賦值語(yǔ)句的表達(dá)方式如下:賦值目標(biāo)賦值目標(biāo) = = 表達(dá)式表達(dá)式 WHEN WHEN 條件條件1 1 E

9、LSEELSE 表達(dá)式表達(dá)式 WHEN WHEN 條件條件2 2 ELSEELSE . . 表達(dá)式表達(dá)式 ;條件信號(hào)賦值語(yǔ)句的幾點(diǎn)說(shuō)明:條件信號(hào)賦值語(yǔ)句的幾點(diǎn)說(shuō)明:1 1)只有當(dāng)條件滿足時(shí),才能將該條件前面表達(dá)式的值賦給)只有當(dāng)條件滿足時(shí),才能將該條件前面表達(dá)式的值賦給目標(biāo)信號(hào);目標(biāo)信號(hào);2 2)對(duì)條件的判斷是有順序的,條件)對(duì)條件的判斷是有順序的,條件1 1具有最高的優(yōu)先級(jí);具有最高的優(yōu)先級(jí);3 3)條件表達(dá)式的值應(yīng)該是布爾型數(shù)值;)條件表達(dá)式的值應(yīng)該是布爾型數(shù)值;4 4)條件的最后一個(gè)表達(dá)式不含有)條件的最后一個(gè)表達(dá)式不含有when when 的子句。的子句。5 5)條件信號(hào)賦值語(yǔ)句允許條

10、件重疊。)條件信號(hào)賦值語(yǔ)句允許條件重疊。9例:例: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 -注意,第一句具有最高優(yōu)先級(jí)注意,第一句具有最高優(yōu)先級(jí) b WHEN p2 = 1 ELSE c ; END;10library ieee;use ieee.std_logic_1164.all;entity p_encoder isport(i:in std_logic_ve

11、ctor(7 downto 0);a:out std_logic_vector(2 downto 0);end;architecture behv of p_encoder isbegina=111 when i(7)=1 else110 when i(6)=1 else101 when i(5)=1 else100 when i(4)=1 else011 when i(3)=1 else010 when i(2)=1 else001 when i(1)=1 else000 when i(0)=1 else111 ;end;例:例:8 8輸入優(yōu)先編碼器輸入優(yōu)先編碼器11(3 3) 選擇信號(hào)賦值

12、語(yǔ)句選擇信號(hào)賦值語(yǔ)句( (Selected Signal Assignment) ) 選擇信號(hào)賦值語(yǔ)句的格式如下:選擇信號(hào)賦值語(yǔ)句的格式如下: WITH WITH 選擇表達(dá)式選擇表達(dá)式 SELECTSELECT 賦值目標(biāo)信號(hào)賦值目標(biāo)信號(hào) = = 表達(dá)式表達(dá)式1 1 WHEN WHEN 選擇值選擇值1 1, 表達(dá)式表達(dá)式2 2 WHEN WHEN 選擇值選擇值2 2, . . 表達(dá)式表達(dá)式n n WHEN WHEN 選擇值選擇值n n; 選擇信號(hào)賦值語(yǔ)句中也有敏感量,即關(guān)鍵字選擇信號(hào)賦值語(yǔ)句中也有敏感量,即關(guān)鍵字WITHWITH旁邊的選旁邊的選擇信號(hào)表達(dá)式,每當(dāng)選擇表達(dá)式的值發(fā)生變化時(shí),就啟動(dòng)此

13、語(yǔ)擇信號(hào)表達(dá)式,每當(dāng)選擇表達(dá)式的值發(fā)生變化時(shí),就啟動(dòng)此語(yǔ)句對(duì)各子句的選擇值同時(shí)進(jìn)行測(cè)試對(duì)比,沒(méi)有優(yōu)先級(jí)之分,若句對(duì)各子句的選擇值同時(shí)進(jìn)行測(cè)試對(duì)比,沒(méi)有優(yōu)先級(jí)之分,若有滿足條件的子句時(shí),就將此子句表達(dá)式中的值賦給賦值目標(biāo)有滿足條件的子句時(shí),就將此子句表達(dá)式中的值賦給賦值目標(biāo)信號(hào)。信號(hào)。 12例:例:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder IS PORT ( a, b, c : IN STD_LOGIC; data1,data2 : IN STD_LOGIC; dataout : OUT STD_LOGIC );END dec

14、oder;ARCHITECTURE cont 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”, -注意,每句最后使用逗號(hào)注意,每句最后使用逗號(hào) data1 OR data2 WHEN 001 , data1 NAND data2 WHEN 010 , data1 NOR data2 WHEN “011” , data1 XOR

15、data2 WHEN “100” , data1 XNOR data2 WHEN 101 , Z WHEN OTHERS ; -最后一句是分號(hào)最后一句是分號(hào)END cont ;13 WITH selt SELECTmuxout = 連接端口名,連接端口名,.) ;例化名例化名n n :元件名:元件名n n PORT MAPPORT MAP( 端口名端口名= = 連接端口名,連接端口名,.) ; 15例:按下圖電路,使用元件例化語(yǔ)句設(shè)計(jì)一個(gè)全加器例:按下圖電路,使用元件例化語(yǔ)句設(shè)計(jì)一個(gè)全加器=1=1 & &1COUTu5 cinbau4u3u2u1I2I1SUMI016程序程序1 1:調(diào)用庫(kù)中的

16、元件例化,并使用名稱關(guān)聯(lián)方式調(diào)用庫(kù)中的元件例化,并使用名稱關(guān)聯(lián)方式library ieee;use ieee.std_logic_1164.all;entity fadd isport(a,b,cin:in std_logic;sum,cout:out std_logic);end;17ARCHITECTURE fadd_struc OF fadd IS COMPONENT and2 PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT; COMPONENT or2 PORT (in1,in2: in std_logic

17、; out: out std_logic); END COMPONENT; COMPONENT xor PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT;SIGNAL i0, i1, i2: std_logic; BEGIN18 u1: xor PORT MAP (in1=a, in2 =b, out =i0); u2: and2 PORT MAP (in1=a, in2 =b, out =i1); u3: xor PORT MAP (in1=i0, in2=cin, out=sum); u4: and2 PORT

18、MAP (in1=i0, in2=cin, out=i2); u5: or2 PORT MAP (in1=i1, in2=i2, out=cout);END fadd_struc; =1=1&1COUTu5 cinbau4u3u2u1I2I1SUMI019ARCHITECTURE fadd_struc OF fadd IS COMPONENT and2 PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT; COMPONENT or2 PORT (in1,in2: in std_logic; out: out std_l

19、ogic); END COMPONENT; COMPONENT xor PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT;SIGNAL i0, i1, i2: std_logic; BEGIN u1: xor PORT MAP (a, b, i0); u2: and2 PORT MAP (a, b, i1); u3: xor PORT MAP (i0, cin, sum); u4: and2 PORT MAP (i0, cin, i2); u5: or2 PORT MAP (i1, i2, cout);END fad

20、d_struc; 程序程序2 2:調(diào)用庫(kù)中的元件例化,并使用位置關(guān)聯(lián)方式調(diào)用庫(kù)中的元件例化,并使用位置關(guān)聯(lián)方式=1=1&1COUTu5 cinbau4u3u2u1I2I1SUMI020ARCHITECTURE fadd_struc OF fadd IS COMPONENT and2a PORT (x,y: in std_logic; z: out std_logic); END COMPONENT; COMPONENT or2a PORT (x,y: in std_logic; z: out std_logic); END COMPONENT; COMPONENT xor2 PORT (x,y

21、: in std_logic; z: out std_logic); END COMPONENT;SIGNAL i0, i1, i2: std_logic; BEGIN u1: xor2 PORT MAP (a, b, i0); u2: and2a PORT MAP (a, b, i1); u3: xor2 PORT MAP (i0, cin, sum); u4: and2a PORT MAP (i0, cin, i2); u5: or2a PORT MAP (i1, i2, cout);END fadd_struc; 程序程序3 3:調(diào)用自己設(shè)計(jì)的元件例化,并使用位置關(guān)聯(lián)方式調(diào)用自己設(shè)計(jì)的元

22、件例化,并使用位置關(guān)聯(lián)方式=1=1&1COUTu5 cinbau4u3u2u1I2I1SUMI021library ieee;use ieee.std_logic_1164.all;entity and2a isport (x,y:in std_logic;z:out std_logic);end;architecture beh of and2a isbeginz=x and y;end;library ieee;use ieee.std_logic_1164.all;entity or2a isport (x,y:in std_logic;z:out std_logic);end;arch

23、itecture beh of or2a isbeginz=x or y;end;library ieee;use ieee.std_logic_1164.all;entity xor2 isport (x,y:in std_logic;z:out std_logic);end;architecture beh of xor2 isbeginz=x xor y;end;225.3.65.3.6類屬(類屬(Generic)語(yǔ)句)語(yǔ)句 ENTITY ENTITY 實(shí)體名實(shí)體名 ISIS GENERIC GENERIC (類屬表);類屬表); PORTPORT (端口表);端口表); END ENT

24、ITYEND ENTITY 文件名;文件名; 類屬語(yǔ)句用于不同層次之間的信息傳遞類屬語(yǔ)句用于不同層次之間的信息傳遞,類屬參量是一類屬參量是一種端口界面常數(shù),常以一種說(shuō)明的形式放在實(shí)體或塊結(jié)構(gòu)種端口界面常數(shù),常以一種說(shuō)明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說(shuō)明部分。類屬和常數(shù)不同,常數(shù)只能從設(shè)計(jì)實(shí)體體前的說(shuō)明部分。類屬和常數(shù)不同,常數(shù)只能從設(shè)計(jì)實(shí)體的內(nèi)部得到賦值,且不能再改變,而類屬的值可以從設(shè)計(jì)的內(nèi)部得到賦值,且不能再改變,而類屬的值可以從設(shè)計(jì)實(shí)體的外部提供。因此設(shè)計(jì)者可以從外面通過(guò)類屬參量重實(shí)體的外部提供。因此設(shè)計(jì)者可以從外面通過(guò)類屬參量重新設(shè)定新設(shè)定,從而容易的改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電從

25、而容易的改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。路結(jié)構(gòu)和規(guī)模。23 類屬語(yǔ)句包括類屬語(yǔ)句包括類屬說(shuō)明語(yǔ)句類屬說(shuō)明語(yǔ)句和和類屬映射語(yǔ)句類屬映射語(yǔ)句,書寫,書寫格式分別為:格式分別為: 類屬說(shuō)明語(yǔ)句的一般格式:類屬說(shuō)明語(yǔ)句的一般格式: GENERIC GENERIC (常數(shù)名:數(shù)據(jù)類型(常數(shù)名:數(shù)據(jù)類型 := =設(shè)定值設(shè)定值 ; 常數(shù)名:數(shù)據(jù)類型常數(shù)名:數(shù)據(jù)類型 := =設(shè)定值設(shè)定值 ););類屬映射語(yǔ)句的一般格式:類屬映射語(yǔ)句的一般格式: GENERIC MAP GENERIC MAP (類屬表)(類屬表)24library ieee;use ieee.std_logic_1164.al

26、l;entity fredevider isgeneric(n:integer:=4);port(clkin:in std_logic;clkout:out std_logic);end;Generic應(yīng)用舉例應(yīng)用舉例1 1:25architecture beh of fredevider issignal counter:integer range 0 to n;signal clk:std_logic;beginprocess(clkin)beginif rising_edge(clkin) thenif counter=n thenclk=not clk;counter=0;elseco

27、unter=counter+1;end if;end if;end process;clkout1) port map(clk,clk1);u2:fredevider generic map(n=4) port map(clk,clk2);u3:a_21mux port map(sel,clk1,clk2,clkout);end;U1U2U3285.3.85.3.8生成語(yǔ)句生成語(yǔ)句 (Generate Statement) 生成語(yǔ)句的主要功能是能夠進(jìn)行復(fù)制,簡(jiǎn)化有規(guī)則設(shè)計(jì)結(jié)構(gòu)的邏輯描述。生成語(yǔ)句的主要功能是能夠進(jìn)行復(fù)制,簡(jiǎn)化有規(guī)則設(shè)計(jì)結(jié)構(gòu)的邏輯描述。 生成語(yǔ)句的語(yǔ)句格式有如下兩種形式:生成語(yǔ)句

28、的語(yǔ)句格式有如下兩種形式:forfor語(yǔ)句形式語(yǔ)句形式 和和 IFIF語(yǔ)句形式語(yǔ)句形式標(biāo)號(hào):標(biāo)號(hào): ForFor 循環(huán)變量循環(huán)變量 ININ 取值范圍取值范圍 GenerateGenerate 說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句 并行語(yǔ)句并行語(yǔ)句 End GenerateEnd Generate 標(biāo)號(hào)標(biāo)號(hào) ; 對(duì)于對(duì)于forfor語(yǔ)句的結(jié)構(gòu),主要用來(lái)描述設(shè)計(jì)中的一些有規(guī)律的單元結(jié)構(gòu)。語(yǔ)句的結(jié)構(gòu),主要用來(lái)描述設(shè)計(jì)中的一些有規(guī)律的單元結(jié)構(gòu)。 生成參數(shù)(循環(huán)變量)是自動(dòng)產(chǎn)生的,它是一個(gè)局部變量,根據(jù)取值范生成參數(shù)(循環(huán)變量)是自動(dòng)產(chǎn)生的,它是一個(gè)局部變量,根據(jù)取值范圍自動(dòng)遞增或遞減。取值范圍的語(yǔ)句格式,有兩種形式:圍

29、自動(dòng)遞增或遞減。取值范圍的語(yǔ)句格式,有兩種形式: 表達(dá)式表達(dá)式 TO TO 表達(dá)式表達(dá)式 ; - ; - 遞增方式,如遞增方式,如 1 1 TO 5TO 5 表達(dá)式表達(dá)式 DOWNTO DOWNTO 表達(dá)式表達(dá)式 ; - ; - 遞減方式,如遞減方式,如 5 5 DOWNTO 1DOWNTO 1 其中的表達(dá)式必須是整數(shù)。其中的表達(dá)式必須是整數(shù)。 29 對(duì)于對(duì)于if if 語(yǔ)句的結(jié)構(gòu),主要用來(lái)描述設(shè)計(jì)中不規(guī)則的單元語(yǔ)句的結(jié)構(gòu),主要用來(lái)描述設(shè)計(jì)中不規(guī)則的單元結(jié)構(gòu),如某些邊界條件的特殊性。該語(yǔ)句中,若條件為真,結(jié)構(gòu),如某些邊界條件的特殊性。該語(yǔ)句中,若條件為真,則執(zhí)行生成語(yǔ)句中的并行語(yǔ)句,若為假則不

30、執(zhí)行該語(yǔ)句。則執(zhí)行生成語(yǔ)句中的并行語(yǔ)句,若為假則不執(zhí)行該語(yǔ)句。 標(biāo)號(hào):標(biāo)號(hào):IFIF 條件條件 GenerateGenerate 說(shuō)明說(shuō)明 并行語(yǔ)句并行語(yǔ)句 End GenerateEnd Generate 標(biāo)號(hào)標(biāo)號(hào) ;30兩種格式都由四部分組成:兩種格式都由四部分組成:(1 1)生成方式:有)生成方式:有forfor和和ifif語(yǔ)句結(jié)構(gòu),規(guī)定并行語(yǔ)句的語(yǔ)句結(jié)構(gòu),規(guī)定并行語(yǔ)句的 復(fù)制方式復(fù)制方式(2 2)說(shuō)明部分:對(duì)數(shù)據(jù)類型和數(shù)據(jù)對(duì)象等進(jìn)行一些說(shuō)明)說(shuō)明部分:對(duì)數(shù)據(jù)類型和數(shù)據(jù)對(duì)象等進(jìn)行一些說(shuō)明(3 3)并行語(yǔ)句:是復(fù)制的基本單元)并行語(yǔ)句:是復(fù)制的基本單元(4 4)標(biāo)號(hào):標(biāo)號(hào)是必須的)標(biāo)號(hào):標(biāo)

31、號(hào)是必須的下面是使用生成語(yǔ)句產(chǎn)生的下面是使用生成語(yǔ)句產(chǎn)生的8 8個(gè)相同的電路模塊的示例個(gè)相同的電路模塊的示例31 COMPONENT comp PORT ( INPUT : IN STD_LOGIC ; OUTPUT : OUT STD_LOGIC ); END COMPONENT ; SIGNAL a : STD_LOGIC_VECTOR(0 TO 7); SIGNAL b : STD_LOGIC_VECTOR(0 TO 7); gen : FOR i IN aRANGE GENERATE - aRANGEaRANGE為數(shù)據(jù)區(qū)間類屬性為數(shù)據(jù)區(qū)間類屬性 u1: comp PORT MAP (I

32、NPUT=a(i),OUTPUT=b(i); 名稱映射名稱映射 END GENERATE gen; .C O M PI N P U TO U T P U TC O M PI N P U TO U T P U TC O M PI N P U TO U T P U Ta 0 b 0 a 1 b 1 a 7 b 7 . . .32LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Latch_1 IS PORT( D : IN STD_LOGIC; ENA : IN STD_LOGIC; Q : OUT STD_LOGIC );END ENTITY Lat

33、ch_1 ;ARCHITECTURE one OF Latch_1 IS SIGNAL sig_save : STD_LOGIC; BEGIN PROCESS (D, ENA) BEGIN IF ENA = 1 THEN sig_save = D ; END IF ; Q = sig_save ; END PROCESS ;END ARCHITECTURE one; 下面為使用元件例化語(yǔ)句和下面為使用元件例化語(yǔ)句和FOR_GENERATEFOR_GENERATE語(yǔ)句完成一個(gè)語(yǔ)句完成一個(gè)8 8位三位三態(tài)鎖存器的設(shè)計(jì)的例子態(tài)鎖存器的設(shè)計(jì)的例子1. 1. 設(shè)計(jì)底層的設(shè)計(jì)底層的1 1位鎖存器:位鎖存器

34、:332. 2. 設(shè)計(jì)頂層的設(shè)計(jì)頂層的8 8位鎖存器位鎖存器LIBRARY 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 one OF SN74373 IS COMPONENT Latch_1 PORT ( D, ENA : IN STD_LOGIC; Q : O

35、UT STD_LOGIC ); END COMPONENT; SIGNAL sig_mid : STD_LOGIC_VECTOR( 8 DOWNTO 1 ); BEGIN GeLatch : FOR i IN 1 TO 8 GENERATE Latchx : Latch_1 PORT MAP (D(i),G,sig_mid(i); -位置映射位置映射 END GENERATE; Q = sig_mid WHEN OEN = 0 ELSE ZZZZZZZZ; -當(dāng)當(dāng)OEN=1時(shí),時(shí),Q(8)-Q(1)輸出狀態(tài)呈高阻態(tài)輸出狀態(tài)呈高阻態(tài)END ARCHITECTURE one; 345.4 5.4

36、順序語(yǔ)句(順序語(yǔ)句(Sequential Statements) 順序語(yǔ)句和并行語(yǔ)句是順序語(yǔ)句和并行語(yǔ)句是VHDLVHDL中的兩大基本描述語(yǔ)句系列。中的兩大基本描述語(yǔ)句系列。順序語(yǔ)句的特點(diǎn):順序語(yǔ)句的特點(diǎn):n 語(yǔ)句的執(zhí)行和書寫順序相同。語(yǔ)句的執(zhí)行和書寫順序相同。n 順序語(yǔ)句只能應(yīng)用在進(jìn)程和子程序中。順序語(yǔ)句只能應(yīng)用在進(jìn)程和子程序中。VHDLVHDL中常用的幾種順序描述語(yǔ)句:中常用的幾種順序描述語(yǔ)句:l 信號(hào)賦值語(yǔ)句(信號(hào)賦值語(yǔ)句(signal assignment statements) =l 變量賦值語(yǔ)句(變量賦值語(yǔ)句(variable assignment statements) :=:=

37、l wait wait語(yǔ)句語(yǔ)句l if if 語(yǔ)句語(yǔ)句l case case 語(yǔ)句語(yǔ)句l looploop語(yǔ)句語(yǔ)句l nextnext語(yǔ)句語(yǔ)句l exitexit語(yǔ)句語(yǔ)句-綜合器不支持綜合器不支持l null null 語(yǔ)句語(yǔ)句l return return 語(yǔ)句語(yǔ)句-綜合器不支持綜合器不支持l 斷言(斷言(assertionassertion)語(yǔ)句)語(yǔ)句-仿真時(shí)用仿真時(shí)用355.4.2 if5.4.2 if語(yǔ)句語(yǔ)句(If Statements)ifif語(yǔ)句是一種條件語(yǔ)句,其基本結(jié)構(gòu)有四種:語(yǔ)句是一種條件語(yǔ)句,其基本結(jié)構(gòu)有四種:1.1.ifif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)

38、句; end ifend if;2.2.ifif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)句; elseelse 順序語(yǔ)句;順序語(yǔ)句; end ifend if; 4.4.ifif 條件句條件句 thenthen ifif 條件句條件句 thenthen end ifend if; end ifend if;3.3.ifif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)句; elsifelsif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)句; elseelse 順序語(yǔ)句;順序語(yǔ)句; end ifend if;361.1.ifif 條件句條件句 thenthen 順序語(yǔ)句;順序

39、語(yǔ)句; end ifend if;注意:沒(méi)有注意:沒(méi)有ELSE的的IF語(yǔ)句,屬于不完備的語(yǔ)句,屬于不完備的IF語(yǔ)句,語(yǔ)句,在綜合時(shí)一般會(huì)生成一個(gè)時(shí)序電路。在綜合時(shí)一般會(huì)生成一個(gè)時(shí)序電路。 library ieee;use ieee.std_logic_1164.all;entity dff1 is port ( d,clk:in std_logic; q:out std_logic);end dff1;architecture rtl of dff1 isbegin process(clk) begin if clk event and clk=1 then q=d; end if;end p

40、rocess;end rtl;例:例:D D觸發(fā)器觸發(fā)器372.2.ifif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)句; elseelse 順序語(yǔ)句;順序語(yǔ)句; end ifend if; 注意:有注意:有ELSE的的IF語(yǔ)句,在綜合時(shí)一般會(huì)生成一語(yǔ)句,在綜合時(shí)一般會(huì)生成一個(gè)二選一的組合電路。個(gè)二選一的組合電路。 library ieee;use ieee.std_logic_1164.all;entity mux2 isport ( a,b,sel :in std_logic; c:out std_logic);end mux2;architecture rtl of mux2 i

41、sbegin process(a,b,sel)begin if sel=1 then c=a; else c=b; end if;end process;end rtl;例:例:2 2選選1 1數(shù)據(jù)選擇器數(shù)據(jù)選擇器383.3.ifif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)句; elsifelsif 條件句條件句 thenthen 順序語(yǔ)句;順序語(yǔ)句; elseelse 順序語(yǔ)句;順序語(yǔ)句; end ifend if; 這種多選擇控制的這種多選擇控制的IFIF語(yǔ)句,它設(shè)置了多個(gè)條件,當(dāng)滿足所設(shè)的多語(yǔ)句,它設(shè)置了多個(gè)條件,當(dāng)滿足所設(shè)的多個(gè)條件之一時(shí),就執(zhí)行該條件后的順序語(yǔ)句,并不再判斷

42、其它條件,個(gè)條件之一時(shí),就執(zhí)行該條件后的順序語(yǔ)句,并不再判斷其它條件,直接結(jié)束直接結(jié)束ifif語(yǔ)句的執(zhí)行。當(dāng)所設(shè)置的條件都不滿足時(shí),程序執(zhí)行語(yǔ)句的執(zhí)行。當(dāng)所設(shè)置的條件都不滿足時(shí),程序執(zhí)行elseelse和和end ifend if之間的順序語(yǔ)句。之間的順序語(yǔ)句。 此語(yǔ)句用于有優(yōu)先級(jí)的條件判斷,因此各條件式中的條件可以重此語(yǔ)句用于有優(yōu)先級(jí)的條件判斷,因此各條件式中的條件可以重疊。如果所需判斷的條件沒(méi)有優(yōu)先級(jí)的差別,且條件之間沒(méi)有重疊的疊。如果所需判斷的條件沒(méi)有優(yōu)先級(jí)的差別,且條件之間沒(méi)有重疊的情況,建議使用情況,建議使用casecase語(yǔ)句。語(yǔ)句。 39例:四選一的數(shù)據(jù)選擇器。例:四選一的數(shù)據(jù)選

43、擇器。 library ieee;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_1164.all;entity mux4 isentity mux4 isport (input:in std_logic_vector(3 downto 0);port (input:in std_logic_vector(3 downto 0); sel:in std_logic_vector(1 downto 0); sel:in std_logic_vector(1 downto 0); y: out std_logic); y: o

44、ut std_logic);end mux4;end mux4;architecture rtl of mux4 isarchitecture rtl of mux4 isbeginbeginprocess(sel,input)process(sel,input)40beginbegin ifif sel=“00” sel=“00” thenthen y=input(0); y=input(0); elsifelsif sel=“01” sel=“01” thenthen y=input(1); y=input(1); elsifelsif sel=“10” sel=“10” thenthen

45、 y=input(2); y=input(2); elseelse y=input(3) y=input(3); end if;end if;end process;end process;end rtl;end rtl;41例:用例:用IFIF語(yǔ)句設(shè)計(jì)一個(gè)語(yǔ)句設(shè)計(jì)一個(gè)3838譯碼器。譯碼器。 LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decode3_8 ISENTITY decode3_8 IS PORT ( a,b,c: IN STD_LOGIC; POR

46、T ( a,b,c: IN STD_LOGIC; y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decode3_8;END decode3_8;ARCHITECTURE one OF decode3_8 ISARCHITECTURE one OF decode3_8 ISSIGNAL comb: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL comb: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINBEGIN comb=c & b & a;

47、 comb=c & b & a;42process(comb)process(comb)beginbegin ifif comb=“000” comb=“000” then then y=“11111110”y=“11111110”; elsifelsif comb=“001” comb=“001” then then y=“11111101” y=“11111101”; elsifelsif comb=“010” comb=“010” thenthen y=“11111011” y=“11111011”; elsif elsif comb=“011” comb=“011” thenthen

48、y=“11110111” y=“11110111”; elsifelsif comb=“100” comb=“100” thenthen y=“11101111” y=“11101111”; elsifelsif comb=“101” comb=“101” thenthen y=“11011111” y=“11011111”; elsifelsif comb=“110” comb=“110” then then y=“10111111” y=“10111111”; elsifelsif comb=“111” comb=“111” then then y=“01111111 y=“0111111

49、1” ; elseelse y=“11111111” y=“11111111”; end if;end if;end process;end process;end one;end one;43LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(2 TO 0) );END coder;ARCHITECTURE behav OF coder IS BEGIN PROCESS (din) BEG

50、IN IF (din(7)=0) THEN output = 000 ; ELSIF (din(6)=0) THEN output = 001 ; ELSIF (din(5)=0) THEN output = 010 ; ELSIF (din(4)=0) THEN output = 011 ; ELSIF (din(3)=0) THEN output = 100 ; ELSIF (din(2)=0) THEN output = 101 ; ELSIF (din(1)=0) THEN output = 110 ; ELSE output = 111 ; END IF ; END PROCESS

51、; END behav;例:優(yōu)先編碼器描述例:優(yōu)先編碼器描述444.4.ifif 條件句條件句 thenthen ifif 條件句條件句 thenthen end ifend if; end ifend if;IfIf語(yǔ)句可以嵌套,但層數(shù)不宜過(guò)多。語(yǔ)句可以嵌套,但層數(shù)不宜過(guò)多。45library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter10 isport(en,reset,clk:in std_logic;q:buffer std_logic_vector(3 downto

52、0);co:out std_logic);end counter10;architecture behav of counter10 isbeginprocess(clk,reset,en)beginif reset=1 thenq=0000;elsif clkevent and clk=1 thenif en=1 thenif q1001 then q=q+1;else q=0000;end if;end if;end if;end process;co= 順序語(yǔ)句;順序語(yǔ)句; When When 選擇值選擇值 = 順序語(yǔ)句;順序語(yǔ)句; . . When Others= When Other

53、s= 順序語(yǔ)句;順序語(yǔ)句; END CASEEND CASE ;選擇值可以有四種不同的表達(dá)方式:選擇值可以有四種不同的表達(dá)方式: 單個(gè)普通數(shù)值,如單個(gè)普通數(shù)值,如6 6。 數(shù)值選擇范圍,如數(shù)值選擇范圍,如(2 TO 4)(2 TO 4),表示取值為,表示取值為2 2、3 3或或4 4。 并列數(shù)值,如并列數(shù)值,如3 3 5 5,表示取值為,表示取值為3 3或者或者5 5。 WHEN OTHERSWHEN OTHERS, CASE CASE語(yǔ)句也只能在進(jìn)程中使用,當(dāng)執(zhí)行到語(yǔ)句也只能在進(jìn)程中使用,當(dāng)執(zhí)行到CASECASE語(yǔ)句時(shí),首先計(jì)語(yǔ)句時(shí),首先計(jì)算算CASECASE和和ISIS之間的表達(dá)式的值,然

54、后根據(jù)條件語(yǔ)句中與之相對(duì)應(yīng)的之間的表達(dá)式的值,然后根據(jù)條件語(yǔ)句中與之相對(duì)應(yīng)的選擇值來(lái)執(zhí)行相應(yīng)的順序語(yǔ)句,最后結(jié)束選擇值來(lái)執(zhí)行相應(yīng)的順序語(yǔ)句,最后結(jié)束CASECASE語(yǔ)句。語(yǔ)句。47使用使用CASE CASE 語(yǔ)句需要注意:語(yǔ)句需要注意:(1 1)條件句的取值必須在表達(dá)式的取值范圍之內(nèi);)條件句的取值必須在表達(dá)式的取值范圍之內(nèi);(2 2)除非所有條件句中的選擇值能完整覆蓋)除非所有條件句中的選擇值能完整覆蓋CASECASE語(yǔ)句中的所有語(yǔ)句中的所有表達(dá)式的取值表達(dá)式的取值, ,否則最后一個(gè)條件句中的選擇值必須為否則最后一個(gè)條件句中的選擇值必須為OTHERSOTHERS;(3 3)CASECASE語(yǔ)句的每一條件句的取值只能出現(xiàn)一次,不能有相同語(yǔ)句的每一條件句的取值只能出現(xiàn)一次,不能有相同選擇值的條件句的出現(xiàn);選擇值的條件句的出現(xiàn);(4 4)CASECASE語(yǔ)句執(zhí)行中必須選中且只能選擇一個(gè)條件句,這表明語(yǔ)句執(zhí)行中必須選中且只能選擇一個(gè)條件句,這表明CASECASE語(yǔ)句至少要包含一個(gè)條件句。語(yǔ)句至少要包含一個(gè)條件句。48例:例:3-83-8譯碼器譯碼器 library ieee; use ieee.std_logic_1164.all; entity decoder is port(a,b,c,G1,G2A,G2B : in std_logic; y: out

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論