VHDL課件3.ppt_第1頁
VHDL課件3.ppt_第2頁
VHDL課件3.ppt_第3頁
VHDL課件3.ppt_第4頁
VHDL課件3.ppt_第5頁
已閱讀5頁,還剩115頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 VHDL語法基礎(chǔ),3.1 順序語句 3.2 并發(fā)語句,3.1 順序語句,信號(hào)代入語句 變量賦值語句 WAIT語句 IF語句 CASE語句 LOOP語句 NEXT語句 EXIT語句 RETURN語句 NULL語句,順序語句 用在進(jìn)程或子程序中,用來定義進(jìn)程或子程序的行為 。 順序語句每一條語句的執(zhí)行(指仿真執(zhí)行)都是按語句排列的次序執(zhí)行的。,順序語句具有如下特征: 順序語句只能出現(xiàn)在進(jìn)程或子程序中。 順序語句描述的系統(tǒng)行為有時(shí)序流、控制流、條件分支和迭代算法等。 順序語句用于定義進(jìn)程、子程序等的算法。 順序語句的功能有算術(shù)、邏輯運(yùn)算;信號(hào)、變量的賦值;子程序調(diào)用等 。,3.1.1 IF語

2、句,門閂控制的IF語句的語法格式為: IF 條件 THEN 順序處理語句; END IF;,例:IF(a=1)THEN c=b; END IF;,該IF語句所描述的是一個(gè)門閂電路: 當(dāng)門閂控制信號(hào)量a =1時(shí),輸入信號(hào)量 b 任何值的變化都將被賦予輸出信號(hào)量 c 。既是說,此時(shí) c值與 b值是永遠(yuǎn)相等的。 當(dāng)a1時(shí), c= b語句不被執(zhí)行, c將維持原值不變,而不管信號(hào)量 b 值發(fā)生什么變化。 這種描述經(jīng)邏輯綜合,實(shí)際上可以生成一個(gè) D觸發(fā)器 。,順序語句,IF語句是一種條件 語句。其語句結(jié)構(gòu)有以下4種: 1. 門閂控制的IF語句; 2. 2選擇控制的IF語句; 3. 多選擇控制的IF語句;

3、4. 嵌套式的IF語句。,符號(hào),特性表,D觸發(fā)器,例3-1 設(shè)計(jì)D觸發(fā)器(下頁相關(guān)知識(shí)介紹)。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY dff IS PORT (clk, d: INSTD_LOGIC; q: OUTSTD_LOGIC); END dff; ARCHITECTURE rtl OF dff IS BEGIN PROCESS (clk) BEGIN IF (clkevent and clk=1) THEN q=d; END IF; END PROCESS ; END rtl;,順序語句,IF語句,2選擇控制的IF語句的語法

4、格式為: IF 條件 THEN 順序處理語句 l; ELSE 順序處理語句 2; END IF;,順序語句,例3-2 設(shè)計(jì)2選1的數(shù)據(jù)選擇器。 ARCHITECTURE rtl OF mux2_1 IS BEGIN PROCESS(a,b,sel) BEGIN IF (sel=1) THEN c=a; ELSE c=b; END IF; END PROCESS; END rtl;,順序語句,IF語句,多選擇控制的IF語句的語法格式為: IF 條件1 THEN 順序處理語句1; ELSIF 條件2 THEN 順序處理語句2; ELSIF 條件n THEN 順序處理語句n; ELSE 順序處理語句

5、n+l; END IF;,順序語句,例a 設(shè)計(jì)4選1的多路選擇器 ENTITY mux4_1 IS PORT(d : INSTD_LOGIC_VECTOR(3 DOWNTO 0); sel : INSTD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT STD_LOGIC); END mux4_1; ARCHITECTURE rtl OF mux4_1 IS BEGIN PROCESS (d, sel) BEGIN IF (sel=00) THEN y=d(0); ELSIF (sel=01) THEN y=d(1); ELSIF (sel=10) THEN y=d(2);

6、 ELSE y=d(3); END IF; END PROCESS; END rtl;,IF語句至少應(yīng)有一個(gè)條件句,條件句必須由布爾 表達(dá)式構(gòu)成。 IF語句根據(jù)條件句產(chǎn)生的判斷結(jié)果為 true 或 false , 有條件地選擇執(zhí)行其后的順序語句。 在IF語句的條件表達(dá)式中只能使用關(guān)系運(yùn)算操作 (=、/=、 = )及邏輯運(yùn)算操作的組 合表達(dá)式。,順序語句,【例b】 SIGNAL A,B,C,P1,P2,Z : std_logic; . IF (P1=1) THEN Z=A; -滿足此語句的執(zhí)行條件是(P1=1) ELSIF (P2=0) THEN Z=B; -滿足此語句的執(zhí)行條件是(P1=0)A

7、ND(P2=0) ELSE Z=C; -滿足此語句的執(zhí)行條件是(P1=0)AND(P2=1) END IF;,從本例可以看出, IF_THEN_ELSIF語句中順序語句的執(zhí)行條件具有向上相與的功能,有的邏輯設(shè)計(jì)恰好需要這種功能。例3-3正是利用了這一功能以十分簡潔的描述完成了一個(gè)8線_3線優(yōu)先編碼器的設(shè)計(jì)。 向上相與:寫在前面的條件句的優(yōu)先級(jí)高于后面的條件語句,次序不能顛倒。,8線3線優(yōu)先編碼器(為高電平時(shí)進(jìn)行編碼),例3-3 設(shè)計(jì)8線3線優(yōu)先編碼器(低電平時(shí)進(jìn)行編碼) LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY priencoder I

8、S PORT(input : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END priencoder;,ARCHITECTURE rtl OF priencoder IS BEGIN PROCESS (input) BEGIN IF (input(7)= 1) THEN y= 111; ELSIF (input(6)= 1) THEN y= 110; ELSIF (input(5)= 1 ) THEN y= 101; ELSIF (input(4)= 1) THEN y= 100; ELSIF (

9、input(3)= 1 ) THEN y= 011; ELSIF (input(2)= 1) THEN y= 010; ELSIF (input(1)= 1 ) THEN y= 001; ELSE y= 000 ; END IF; END PROCESS; END rtl;,順序語句,IF 條件 THEN IF 條件 THEN : : END IF ; END IF ; 應(yīng)注意“END IF”語句的數(shù)量應(yīng)和嵌入式“IF”語句的數(shù)量一致。 還需要注意的是:所有IF語句的條件判斷輸出是布爾量,即是“真”或“假”。因此在IF語句的條件表達(dá)式中只能使用關(guān)系運(yùn)算操作及邏輯運(yùn)算操作的組合表達(dá)式。,嵌套式I

10、F語句,3.1.2 CASE語句,CASE語句的一般格式為: CASE 條件表達(dá)式 IS WHEN 條件表達(dá)式的值=順序處理語句; WHEN 條件表達(dá)式的值=順序處理語句; END CASE;,CASE語句可以用來描述總線或編碼、譯碼的行為,其功能是從眾多不同語句的序列中選擇其中之一執(zhí)行之。 IF語句也具有類似的功能,但CASE語句具有比IF語句更強(qiáng)的可讀性。,順序語句,CASE語句中條件表達(dá)式的值可以有以下4種不同的表示形式: WHEN 條件表達(dá)式的值=順序處理語句; WHEN 條件表達(dá)式的值 | 值 | 值=順序處理語句; WHEN 條件表達(dá)式的值 to 值=順序處理語句; WHEN OT

11、HERS=順序處理語句;,CASE語句是無序的,所有表達(dá)式的值都是并行處理的; CASE語句所有表達(dá)式的值都必須窮舉 ,且不能重復(fù) , 不能窮盡的值用 OTHERS 表示 ; CASE語句中至少要包含一個(gè)條件語句。 對(duì)任意項(xiàng) 輸入的條件表達(dá)式, VHDL不支持。 (即條件表達(dá)式的值不能含有X),順序語句,四選一數(shù)據(jù)選擇器,例3-4: 4選1多路選擇器 ENTITY mux4_1 IS PORT(d : INSTD_LOGIC_VECTOR(3 DOWNTO 0); sel : INSTD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT STD_LOGIC); END mux

12、4_1; ARCHITECTURE arch OF mux4_1 IS BEGIN PROCESS (d, sel) BEGIN CASE sel IS WHEN 00 =yyyyy=X; END CASE; END PROCESS; END arch;,CASE語句與 IF語句的區(qū)別 : 在IF語句中,先處理最起始的條件,如果不滿足,再處理下一個(gè)條件。 在CASE語句中,沒有值的順序號(hào),所有值是并行處理的。因此,在WHEN項(xiàng)中的值只能出現(xiàn)一次,且不能重復(fù)使用。,順序語句,3線8線譯碼器,輸入輸出邏輯關(guān)系,例3-5a:3-8譯碼器 LIBRARY ieee; USE ieee.std_logi

13、c_1164.ALL; ENTITY decode3_8 IS PORT(a,b,c : IN STD_LOGIC; g1,g2a,g2b : IN STD_LOGIC; y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END decode3_8;,順序語句,ARCHITECTURE rtl OF decode3_8 IS SIGNAL ind : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN indyyyyyyyyy=XXXXXXXX; END CASE; ELSE y=“11111111; END IF; END PROCESS; EN

14、D rtl;,順序描述語句,例3-5b:8-3編碼器 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY encoder8_3 IS PORT(input : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END encoder8_3; ARCHITECTURE rtl OF encoder8_3 IS BEGIN PROCESS (input) BEGIN CASE input IS WHEN 01111111 =yyyyyyyyy=“XXX; EN

15、D CASE; END PROCESS; END rtl;,該例中,當(dāng)某一項(xiàng)輸入同時(shí)出現(xiàn)兩個(gè)或兩個(gè)以上的0時(shí),y輸出值就將變成X(可能是0 也可能是1 )。在邏輯綜合時(shí)就認(rèn)為是不可能的輸出項(xiàng),從而就可以大大簡化邏輯電路的設(shè)計(jì)。在仿真時(shí)如果出現(xiàn)了不確定的X值,可以檢查是否出現(xiàn)了不正確的輸入。,順序語句,CASE語句存在以下問題 : 對(duì)相同的邏輯功能,一般經(jīng)綜合后, CASE語句比IF語句的描述耗用更多的硬件資源,而且對(duì)于有的邏輯, CASE語句無法描述,只能用IF語句來描述,這是因?yàn)镮F-THEN-ELSIF語句具有條件相與的功能和自然將邏輯值“_”包括進(jìn)去的功能,有利于邏輯化簡,而CASE語句

16、只有條件相或的功能。,順序語句,3.1.3 LOOP語句 LOOP語句的書寫格式一般有兩種:,FOR 循環(huán)變量形成的LOOP語句,其一般格式為: 循環(huán)標(biāo)號(hào):FOR 循環(huán)變量 IN 循環(huán)范圍 LOOP 順序處理語句; END LOOP 循環(huán)標(biāo)號(hào);,循環(huán)變量是一個(gè)臨時(shí)變量,屬于局部變量。循環(huán)變量只能作為賦值源,不能被賦值,它由LOOP語句自動(dòng)定義。 循環(huán)變量是一個(gè)整數(shù)變量,不用事先說明。 循環(huán)范圍是指循環(huán)變量在循環(huán)中依次取值的范圍。,順序語句,例3-6 奇偶校驗(yàn)電路 ENTITY parity_check IS PORT(a : INSTD_LOGIC_VECTOR(7 downto 0); y

17、: OUT STD_LOGIC); END parity_check; ARCHITECTURE rtl OF parity_check IS BEGIN PROCESS(a) VARIABLE tmp : STD_LOGIC; BEGIN tmp:=0; FOR i IN 0 to 7 LOOP tmp:=tmp XOR a(i); END LOOP; y=tmp; END PROCESS; END rtl;,順序語句,例3-6a 雙向移位寄存器 ENTITY shift ISPORT(clr,clk,load,ctr,sr,sl : INSTD_LOGIC;d: INSTD_LOGIC_V

18、ECTOR(7 downto 0);q: OUTSTD_LOGIC_VECTOR(7 downto 0);END shift; ARCHITECTURE arc OF shift IS SIGNAL a : STD_LOGIC_VECTOR(7 downto 0); BEGIN q=a; PROCESS(clr,clk) BEGIN IF (clr=0) THEN a=00000000;,順序語句,ELSIF (clkEVENT AND clk=1) THEN IF load=0 THEN a=d; ELSIF (load=1 AND ctr=0) THEN FOR i IN 7 downto

19、 1 LOOP a(i)=a(i-1); END LOOP; a(0)=sr; ELSIF (load=1 AND ctr=1) THEN FOR i IN 0 to 6 LOOP a(i)=a(i+1); END LOOP; a(7)=sl; END IF; END IF; END PROCESS; END arc;,順序語句,LOOP語句,WHILE條件下的LOOP語句,其格式為: 循環(huán)標(biāo)號(hào):WHILE 條件 LOOP 順序處理語句; END LOOP循環(huán)標(biāo)號(hào);,該語句中,如果條件為真,執(zhí)行順序處理語句; 否則,結(jié)束循環(huán)。,順序語句,例3-7 用WHILE條件下的LOOP語句描述奇偶校驗(yàn)電

20、路。 ARCHITECTURE behave OF parity_check IS BEGIN PROCESS(a) VARIABLE tmp : STD_LOGIC; VARIABLE i : INTEGER; BEGIN tmp:=0; i:=0; WHILE(i8) LOOP tmp:=tmp XOR a(i); i:=i+1; END LOOP; y=tmp; END PROCESS; END behave;,雖然上述的兩種描述都可以用來進(jìn)行邏輯綜合,但一般都不采用 WHILE-LOOP語句來進(jìn)行描述。,順序語句,NEXT語句 在LOOP語句中,NEXT語句用于跳出 本次循環(huán) 。,NE

21、XT語句的書寫格式為: NEXT 標(biāo)號(hào) WHEN 條件;,NEXT后面的“標(biāo)號(hào) ”表示下一次循環(huán)的起始位置 ; “WHEN 條件 ”是NEXT語句的執(zhí)行條件 。 NEXT后面若既無“標(biāo)號(hào)” ,又無“WHEN 條件”, 則程序 立即無條件 跳出本次循環(huán),從LOOP語句的起始位置轉(zhuǎn)入 下一次循環(huán)。,順序語句,例a: L1: WHILE i10 LOOP L2: WHILE j10 LOOP NEXT L1 WHEN i = j; END LOOP L2; END LOOP L1;,當(dāng) i = j 時(shí), NEXT語句被執(zhí)行,程序跳出內(nèi)循環(huán), 下一次從外循環(huán)開始執(zhí)行。,順序語句,例b: PROCESS

22、(a) CONSTANT maxlim :=255; BEGIN FOR i IN 0 to maxlim LOOP IF (done(i)=true) THEN NEXT; ELSE done(i)=true; END IF; q(i)=a(i) AND b(i); END LOOP; END PROCESS;,順序語句,EXIT語句 在LOOP語句中,用EXIT語句跳出并結(jié)束整個(gè)循環(huán)狀態(tài)(而不是僅跳出本次循環(huán)),繼續(xù)執(zhí)行LOOP語句后繼的語句。,EXIT語句的書寫格式為: EXIT 標(biāo)號(hào) WHEN 條件;,當(dāng) “WHEN條件”為真時(shí),跳出LOOP至程序標(biāo)號(hào)處。 如果EXIT后面無“標(biāo)號(hào)”和

23、“WHEN 條件”,則程序執(zhí)行到 該語句時(shí)即無條件從LOOP語句跳出,結(jié)束循環(huán)狀態(tài),繼 續(xù)執(zhí)行后繼語句。,順序語句,例a:PROCESS(a) VARIABLE int_a : INTEGER; BEGIN int_a:=a; FOR i IN 0 to maxlim LOOP IF (int_a =0) THEN EXIT; ELSE int_a := int_a -1; q(i)=3.1416/real(int_a*i); END IF; END LOOP; y=q; END PROCESS;,EXIT語句是一條很有用的控制語句,它提供了一個(gè)處理 保護(hù)、出錯(cuò)和警告等狀態(tài)的簡便方法。,順序語

24、句,3.1.4 信號(hào)代入語句,信號(hào)代入語句的語法格式為: 目的信號(hào)量=信號(hào)量表達(dá)式;,該語句表明,將右邊信號(hào)量表達(dá)式的值賦予左邊目的信號(hào)量。 例如:a= b; 該語句表示: 將信號(hào)量 b 的當(dāng)前值賦予目的信號(hào)量 a 。 需要指出的是: 1. 代入語句的符號(hào)“=”和關(guān)系運(yùn)算的小于等于符“=”相同,應(yīng)根據(jù)上下文的含義和說明正確判別其意義。 2. 信號(hào)代入語句符號(hào)兩邊的信號(hào)量的類型和長度應(yīng)該是一的。,順序語句,3.1.5 變量賦值語句,變量賦值語句的語法格式為: 目的變量 := 表達(dá)式;,該語句表明,目的變量的值將由表達(dá)式所表達(dá)的新值替代,但兩者的類型必須相同。目的變量的類型、范圍及初值應(yīng)事先說明。

25、右邊的表達(dá)式可以是變量、信號(hào)或字符。例如: a := 2; b := c+d; 注意:變量只在進(jìn)程或子程序中使用,無法傳遞到進(jìn)程之外。 它類似于一般高級(jí)語言的局部變量,只在局部范圍內(nèi)有效。,順序語句,3.1.6 WAIT語句,WAIT語句有以下四種形式: WAIT -無限等待 WAIT ON 敏感信號(hào)表; -敏感信號(hào)量變化,進(jìn)程啟動(dòng) WAIT UNTIL 條件表達(dá)式; -表達(dá)式成立時(shí),進(jìn)程啟動(dòng) WAIT FOR 時(shí)間表達(dá)式; -時(shí)間到,進(jìn)程啟動(dòng),WAIT語句是進(jìn)程(含過程)的同步語句,是進(jìn)程的啟動(dòng)點(diǎn)。在進(jìn)程(或過程)中,當(dāng)執(zhí)行到WAIT 等待語句時(shí),運(yùn)行程序?qū)⒈粧炱?,直到滿足此語句的結(jié)束掛起條

26、件后,將重新開始執(zhí)行進(jìn)程(或過程)中的程序。 WAIT作為進(jìn)程體的一條語句同進(jìn)程體內(nèi)的其它語句順序執(zhí)行。,未設(shè)置掛起條件,表示 永遠(yuǎn)掛起,即無限等待。,2. 敏感信號(hào)等待語句,即敏感信號(hào)一旦發(fā)生變化將結(jié)束掛起,再次啟動(dòng)進(jìn)程。VHDL規(guī)定,已列出敏感信號(hào)表的進(jìn)程中不能使用任何形式的WAIT語句。一般, WAIT語句可用于進(jìn)程中的任何地方。,3. 條件等待語句。被此語句掛起的進(jìn)程需滿足如下兩個(gè)條件才能結(jié)束掛起狀態(tài),重新啟動(dòng): 條件表達(dá)式中所含信號(hào)發(fā)生了變化; 此信號(hào)改變后,且滿足WAIT語句所設(shè)的條件。 兩條件缺一不可,且必須依照以上順序完成。,4. 超時(shí)等待語句(此語句不可綜合,故不再討論)。,

27、例 1:利用WAIT語句設(shè)計(jì)與非門電路。 nandx:PROCESS BEGIN y=a NAND b; WAIT ON a,b; END PROCESS nandx;,順序語句,3.1.7 RETURN語句 RETURN語句是一段子程序結(jié)束后,返回主程序的控制語句。,返回語句的兩種語法格式: RETURN; RETURN 條件表達(dá)式;,RETURN 用于函數(shù)和過程體內(nèi),用來結(jié)束最內(nèi)層函數(shù)或過程體的執(zhí)行。 第一種語法格式只能用于過程,它只是結(jié)束過程,并不返回任何值。 用于函數(shù)中的RETURN語句必須有條件表達(dá)式,并且必須返回一個(gè)值。 每一個(gè)函數(shù)必須至少包含一個(gè)返回語句,也可以擁有多個(gè)返回語句,

28、 但在函數(shù)調(diào)用時(shí)只有其中一個(gè)返回語句可以將值帶出。,順序語句,例a:RS觸發(fā)器 PROCEDURE rs (SIGNAL s,r: IN STD_LOGIC; SIGNAL q,nq: OUT STD_LOGIC) IS BEGIN IF (s =1 AND r =1) THEN REPORT Forbidden state:s and r are equal to 1 ; RETURN; ELSE q=s AND nq AFTER 5ns; nq=r AND q AFTER 5ns; END IF; END PROCEDURE rs;,當(dāng) r、s 同時(shí)為1時(shí),在IF語句中的RETURN語句將

29、中斷過程。 程序中的時(shí)間延遲語句和REPORT語句是不可綜合的。,順序語句,例b:函數(shù)opt 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;,順序語句,3.1.8 NULL語句,空操作語句的語法格式: NULL;,NULL語句不完成任何操作,類似于匯編語言中的 NOP語句,其作用只是使程序運(yùn)行流程跨入下一步語句的執(zhí)行。 NULL語句常用于CASE語句中,為滿足所有

30、可能的條件,利用NULL來表示所余的不用條件下的操作行為。,順序語句,例a: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;,該例類似于CPU內(nèi)部的指令譯碼器功能,“001”, “101”,“110”分別代表指令操作碼,對(duì)于它們所對(duì)應(yīng)在寄存器中的操作數(shù)的操作算法,CPU只對(duì)應(yīng)這三種指令作反應(yīng),當(dāng)出現(xiàn)其它碼時(shí)不作任何操作。 對(duì)于有的EDA工具,MAX+PLUS對(duì)NULL語句的

31、執(zhí)行會(huì)出現(xiàn)擅自加入鎖存器的情況,對(duì)此應(yīng)避免使用NULL語句,改用確定操作。如: WHEN others= tmp:= rega ;,順序語句,3.2 并行語句,并發(fā)語句主要包括: 進(jìn)程語句 BLOCK語句 并發(fā)代入語句 條件代入語句 選擇信號(hào)語句 ASSERT語句 COMPONENT語句 GENERATE語句,并行語句結(jié)構(gòu)是最具VHDL特色的。 在VHDL中,并行語句有多種語句格式,它們?cè)诮Y(jié)構(gòu)體中的執(zhí)行是同步進(jìn)行的,或者說是并行運(yùn)行的;其執(zhí)行方式與書寫順序無關(guān)。 在執(zhí)行中,并行語句之間可以有信息往來;也可以是互為獨(dú)立、互不相關(guān)、異步運(yùn)行(如多時(shí)鐘情況)。但每一并行語句內(nèi)部的語句運(yùn)行方式可以不同

32、,即有并行執(zhí)行方式(如塊語句)和順序執(zhí)行方式(如進(jìn)程語句)。,3.2.1 信號(hào)代入語句,順序語句有兩類: 一類是真正的順序語句,一類是可以做順序語句、又可以做并發(fā)語句、具有雙重特性的語句。這類語句放在進(jìn)程、子程序之外是并發(fā)語句,放在進(jìn)程、子程序之內(nèi)是順序語句。 注意:信號(hào)代入語句根據(jù)所在位置不同,可以做順序語句、又可以做并發(fā)語句。,信號(hào)代入語句分3種類型: 并行信號(hào)代入語句 條件信號(hào)代入語句 選擇信號(hào)代入語句,三種語句的共同點(diǎn)是:賦值目標(biāo)必須都是信號(hào),所有代入語句與其他并行語句一樣,在結(jié)構(gòu)體內(nèi)的執(zhí)行是同時(shí)發(fā)生的,與它們的書寫順序無關(guān)。,并行信號(hào)代入語句 并行信號(hào)代入語句實(shí)際上是一個(gè)縮寫的進(jìn)程。

33、,例如: ARCHITECTURE behav OF a_var IS BEGIN output= a(i); END behav; 可以等效于 ARCHITECTURE behav OF a_var IS BEGIN PROCESS(a,i) BEGIN output=a(i); END PROCESS; END behav;,并發(fā)描述語句,并行信號(hào)代入語句在仿真時(shí)刻同時(shí)運(yùn)行,它表征了各個(gè)獨(dú)立器件的獨(dú)立操作,從而真實(shí)地描述了實(shí)際硬件系統(tǒng)的工作情況。例如: a=b+c; d=e*f 并行信號(hào)代入語句可以仿真加法器、乘法器、除法器、比較器及各種邏輯電路的輸出。因此,“=”的右面可以是算術(shù)運(yùn)算表達(dá)

34、式,也可以是邏輯運(yùn)算表達(dá)式,或者是關(guān)系運(yùn)算表達(dá)式。,并發(fā)描述語句,條件信號(hào)代入語句 條件信號(hào)代入語句也是并發(fā)描述語句。,條件信號(hào)賦值語句的格式為: 目標(biāo)信號(hào) = 表達(dá)式1 WHEN 條件1 ELSE 表達(dá)式2 WHEN 條件2 ELSE 表達(dá)式n;,1. 條件信號(hào)代入語句與進(jìn)程中的IF語句相同,具有順序性,但ELSE不能省略。 2. 執(zhí)行該語句時(shí),每一賦值條件是按書寫的先后關(guān)系逐項(xiàng)測(cè)定的,一旦發(fā)現(xiàn)條件為“true”,立即將表達(dá)式的值賦予目標(biāo)信號(hào)。 3. 賦值條件的數(shù)據(jù)類型是布爾量。 4. 由于條件測(cè)試的順序性,條件信號(hào)代入語句的賦值具有優(yōu)先級(jí)別,其中第1子句優(yōu)先級(jí)別最高,依次類推。,并發(fā)描述語

35、句,例3-9:設(shè)計(jì)xor_gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY xor_gate IS PORT(a,b: in std_logic; c: out std_logic); end xor_gate; ARCHITECTURE data_flow OF xor_gate IS BEGIN C = 0WHEN a=0AND b=0ELSE 1WHEN a=0AND b=1ELSE 1WHEN a=1AND b=0ELSE 0WHEN a=1AND b=1ELSE 0; END data_flow;,例a:4選1多路選擇器 E

36、NTITY wmux4_1 IS PORT(i0, i1,i2,i3,a,b: INSTD_LOGIC; q: OUTSTD_LOGIC); END wmux4_1; ARCHITECTURE rtl OF wmux4_1 IS SIGNAL sel : STD_LOGIC_VECTOR(1 downto 0); BEGIN sel=b,并發(fā)描述語句,選擇信號(hào)代入語句,選擇信號(hào)賦值語句的格式為: WITH 條件表達(dá)式 SELECT 目標(biāo)信號(hào) = 表達(dá)式1 WHEN 條件1, 表達(dá)式2 WHEN 條件2, 表達(dá)式n WHEN 條件n;,1. 選擇信號(hào)語句與進(jìn)程中的CASE語句相似,但不能在進(jìn)程中

37、應(yīng)用。 2. 選擇信號(hào)語句具有敏感量,即WITH后面的選擇條件表達(dá)式。每當(dāng)選擇表達(dá)式的值發(fā)生變化,便啟動(dòng)該語句對(duì)各子句的選擇值(條件)進(jìn)行測(cè)試對(duì)比,當(dāng)發(fā)現(xiàn)有滿足條件的子句時(shí),就將此子句表達(dá)式的值賦予目標(biāo)信號(hào)。 3.與CASE語句相類似,該語句對(duì)子句條件選擇值具有同期性(非順序性)。 4. 不允許有條件重疊現(xiàn)象,也不允許存在條件涵蓋不全的情況。,并發(fā)描述語句,例3-10:設(shè)計(jì)xor_gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY xor_gateA IS PORT (sel:IN Bit_vector(0 TO 1); C: out

38、Bit); END ENTITY xor_gateA; ARCHITECTURE data_flow OF xor_gateA IS BEGIN WITH sel SELECT -選擇信號(hào)賦值語句 C =0 WHEN 00 | 11, 1 WHEN 01 | 10; END DATA_FLOW; 選擇信號(hào)賦值語句等效于一個(gè)進(jìn)程語句(如下),并發(fā)描述語句,- P1:PROCESS - BEGIN - CASE sel IS -此進(jìn)程目標(biāo)信號(hào)不同. -WHEN 00|11= c c=1; -END CASE; -WAIT ON sel; -END PROCESS P1; -END ARCHITEC

39、TURE data_flow;,例3-11:4選1多路選擇器 ENTITY smux4_1 IS PORT(i0, i1,i2,i3,a,b: INSTD_LOGIC; q: OUTSTD_LOGIC); END smux4_1; ARCHITECTURE behav OF smux4_1 IS SIGNAL sel : INTEGER; BEGIN WITH sel SELECT q= i0 WHEN 0, i1 WHEN 1, i2 WHEN 2, i3 WHEN 3, X WHEN OTHERS; sel=0 WHEN a=0AND b=0 ELSE 1 WHEN a=1AND b=0

40、ELSE 2 WHEN a=0AND b=1 ELSE 3 WHEN a=1AND b=1 ELSE 4; END behav;,并發(fā)描述語句,PROCESS語句是一種并發(fā)處理語句,在一個(gè)結(jié)構(gòu)體中多個(gè)PROCESS語句可以同時(shí)并行運(yùn)行。因此,PROCESS語句是VHDL中描述硬件系統(tǒng)并發(fā)行為的最常用、最基本的語句。,3.2.2 PROCESS語句,并發(fā)描述語句,PROCESS語句的表達(dá)格式如下: 進(jìn)程標(biāo)號(hào): PROCESS (敏感信號(hào)1,敏感信號(hào)2,) 進(jìn)程說明語句; BEGIN 順序描述語句; END PROCESS 進(jìn)程標(biāo)號(hào);, PROCESS語句的特點(diǎn): 多個(gè)進(jìn)程之間是并發(fā)執(zhí)行的。 進(jìn)程

41、內(nèi)部的所有語句都是順序執(zhí)行的。進(jìn)程實(shí)際上是用順序語句描述的一種進(jìn)行過程,也就是說進(jìn)程用于描述順序事件,它提供了一種用算法(順序語句)描述硬件行為的方法。 進(jìn)程中必須包含一個(gè)顯式的敏感信號(hào)表或者包含一個(gè)WAIT語句。 進(jìn)程可存取結(jié)構(gòu)體或?qū)嶓w所定義的信號(hào)。 進(jìn)程之間的通信是通過信號(hào)量傳遞來實(shí)現(xiàn)的。,3.2.2 PROCESS語句,并發(fā)描述語句,PROCESS語句要點(diǎn): (1) PROCESS語句結(jié)構(gòu)由三個(gè)關(guān)鍵部分組成,即進(jìn)程說明語句部分、順序描述語句部分和敏感信號(hào)參數(shù)表(可能有多個(gè)敏感信號(hào)). (2)雖然PROCESS語句結(jié)構(gòu)的括號(hào)內(nèi)容,如“進(jìn)程標(biāo)號(hào)”、“敏感信號(hào)表” 可以省略,但一般都需標(biāo)明至少

42、一個(gè)的敏感信號(hào)。這是因?yàn)楫?dāng)進(jìn)程中定義的任一敏感信號(hào)發(fā)生變化時(shí),進(jìn)程立即“啟動(dòng)”,即進(jìn)程中的順序語句就立刻順序執(zhí)行一次,當(dāng)進(jìn)程中最后一個(gè)語句執(zhí)行完成后,執(zhí)行過程將返回到第一個(gè)語句,以等待下一次敏感信號(hào)變化,如此循環(huán)往復(fù)以至無限。否則若不標(biāo)明敏感信號(hào),除了初始化階段,進(jìn)程永遠(yuǎn)不會(huì)被再次激活。,(3)進(jìn)程說明語句部分主要定義一些局部變量,可包括數(shù)據(jù)類型、常數(shù)、屬性、子程序等。但需注意,在進(jìn)程說明語句中不允許定義信號(hào)。 (4)在進(jìn)程中,只能將信號(hào)列入敏感信號(hào)表,而不能將變量列入敏感信號(hào)表,即進(jìn)程只對(duì)信號(hào)敏感,而對(duì)變量不敏感。 (5)進(jìn)程啟動(dòng)是由敏感信號(hào)表中的敏感信號(hào)的變化激活的,但也可用WAIT語句(

43、有四種書寫格式),替代敏感信號(hào)表的功能。,例3-12:利用進(jìn)程語句設(shè)計(jì)半加器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS PORT(a,b:in std_logic; sum,Carry :out std_logic); END half_adder; ARCHITECTURE behave OF half_adder IS BEGIN Padder: PROCESS(a,b) BEGIN Sum = a XOR b; Carry = a AND b; END PROCESS Padder; END behav

44、e;,例3-13:由時(shí)鐘控制的進(jìn)程語句 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY sync_device IS PORT (ina,clk: IN Bit; outb: OUT Bit); END sync_device; ARCHITECTURE example OF sync_device IS BEGIN P1: PROCESS (CLK) BEGIN Outb = ina; - FMAX=100MHz END PROCESS P1; END Example;,由時(shí)鐘控制數(shù)據(jù)的傳輸速度,例3-14:可選擇邊沿的由時(shí)鐘控制的進(jìn)程語句

45、 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff IS PORT (clk,d: IN STD_LOGIC; q: OUT STD_LOGIC); END dff; ARCHITECTURE structure OF dff IS BEGIN P1:PROCESS(clk) BEGIN IF (clk EVENT AND clk=1) THEN q = d; END IF; END PROCESS P1; END structure;,3.2.4 模塊語句block 當(dāng)一個(gè)電路比較復(fù)雜時(shí),可考慮把它劃分為幾個(gè)模塊,這時(shí)就可以使用塊語句

46、。 塊語句的應(yīng)用類似于利用PROTEL畫電路原理圖時(shí),可以將一個(gè)總的原理圖分成多個(gè)子模塊,則這個(gè)總的原理圖成為一個(gè)由多個(gè)子模塊原理圖連接而成的頂層模塊圖。 事實(shí)上,將結(jié)構(gòu)體以模塊劃分的方法有好幾種。如元件例化語句的應(yīng)用,其區(qū)別只是后者涉及到新的實(shí)體和結(jié)構(gòu)體,且綜合后硬件結(jié)構(gòu)的邏輯層次有所增加。,實(shí)際上,結(jié)構(gòu)體本身就等價(jià)于一個(gè)BLOCK,或者說結(jié)構(gòu)體就是一個(gè)“功能塊”。因而能在結(jié)構(gòu)體的說明部分進(jìn)行說明的對(duì)象都能在BLOCK說明部分中進(jìn)行說明。 應(yīng)用塊語句的目的是改善并行語句結(jié)構(gòu),增加其可讀性,在邏輯電路圖上,一條塊語句對(duì)應(yīng)一個(gè)子電路圖。,Block語句的一般格式如下: 塊名:Block(保護(hù)表達(dá)

47、式) 類屬子句 -用于信號(hào)的映射及參數(shù)的定義,常用類屬接口表; -GENERIC語句、GENERIC_MAP語句、 端口子句 -PROT語句、PORT_MAP語句實(shí)現(xiàn),主要 端口接口表; -對(duì)該塊用到的客體加以說明??梢哉f -明的項(xiàng)目有USE子句,子程序說明及 BEGIN -子程序體,類型說明及常數(shù)說明、信 -號(hào)說明和元件說明 END Block塊標(biāo)號(hào);,模塊說明部分有點(diǎn)類似于實(shí)體的定義部分,它可包含由關(guān)鍵詞PORT、GENERIC、PORT MAP和GENERIC MAP引導(dǎo)的接口說明等語句,對(duì)BLOCK的接口設(shè)置以及與外界信號(hào)的連接狀況加以說明。 塊的類屬說明部分和接口說明部分的適用范圍僅

48、限于當(dāng)前BLOCK。所有這些在BLOCK內(nèi)部的說明對(duì)于這個(gè)塊的外部來說是完全不透明的,即不能適用于外部環(huán)境,但對(duì)于嵌套于內(nèi)層的塊卻是透明的。塊的說明部分可以定義的項(xiàng)目主要有:USE語句、子程序、數(shù)據(jù)類型、子類型、常數(shù)、信號(hào)、元件。 塊中的并行語句部分可包含結(jié)構(gòu)體中的任何并行語句結(jié)構(gòu)。BLOCK語句本身屬并行語句,BLOCK語句中所包含的語句也是并行語句。,BLOCK的應(yīng)用 BLOCK的應(yīng)用可使結(jié)構(gòu)體層次鮮明,結(jié)構(gòu)明確。利用BLOCK語句可以將結(jié)構(gòu)體中的并行語句劃分成多個(gè)并列方式的BLOCK,每一個(gè)BLOCK都像一個(gè)獨(dú)立的設(shè)計(jì)實(shí)體,具有自己的類屬參數(shù)說明和界面端口,以及與外部環(huán)境的銜接描述。 在

49、較大的VHDL程序的編程中,恰當(dāng)?shù)膲K語句的應(yīng)用對(duì)于技術(shù)交流、程序移值、排錯(cuò)和仿真都是十分有益的。,例3-16 半加器的設(shè)計(jì) example:Block -塊名example PORT(a,b: IN Bit; -端口接口表, S,c: OUT Bit); -參數(shù)的定義 PORT MAP (a,b,s,c);-信號(hào)的映射 BEGIN P1:PROCESS (a,b) IS -進(jìn)程1的標(biāo)號(hào)P1 BEGIN S = a XOR b; END PROCESS P1; P2:PROCESS (a,b) IS -進(jìn)程2的標(biāo)號(hào)P2 BEGIN C = a and b; END PROCESS P2; END

50、 Block example;,【增加例子】 例如設(shè)計(jì)一個(gè)電路,它包含有一個(gè)半加器,一個(gè)半減器,分別 計(jì)算輸入信號(hào)值的A+B及A-B的結(jié)果。下表是該電路的真值表。,與門,異或門,與門,異或門,半加器 半減器,Half Subtractor,Half Adder,Carry=AB,Sum=A B,Borrow=AB,Differ=A B,A,B,+,+,半加法器: Sum=AB Carry=AB 半減法器 Difference= AB Borrow=AB 思路:若是將加法器與減法器分成兩個(gè)功能模塊,這時(shí)就可以使用BLOCK語句將電路分成兩個(gè)方塊。 LIBRARY IEEE; USE IEEE.S

51、TD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CH ; PORT(A,B : IN STD_LOGIC; Carry,Sum,Borrow,Difference : OUT STD_LOGIC); END CH ;,Architecture a of CH IS BEGIN HALF_ADDER : BLOCK BEGIN Sum=A XOR B; Carry=A AND B; END BLOCK HALF_ADDER ; HALF_Subtractor : BL

52、OCK Begin Difference=A XOR B; Borrow= NOT A AND B; END BLOCK HALF_Subtractor; END a ;,模塊間的信號(hào)傳遞和端口映射 Block塊是可以嵌套的,內(nèi)層Block塊可以使用外層Block所定義的信號(hào),外層Block塊不能使用內(nèi)層Block塊定義的信號(hào)。 Block塊是一個(gè)獨(dú)立的子結(jié)構(gòu),可以包含PORT語句、GENERIC語句,允許設(shè)計(jì)者通過這兩個(gè)語句將Block塊內(nèi)的信號(hào)變化傳遞給Block塊的外部信號(hào)。同樣,也可以將Block塊的外部信號(hào)變化傳遞給Block塊的內(nèi)部信號(hào)。 PORT語句和GENERIC語句允許在一個(gè)

53、新的設(shè)計(jì)中使用Block塊。新設(shè)計(jì)的塊完成新的功能,PORT和GENERIC的端口名不一致,在塊中采用PORT和GENERIC映射就能解決這個(gè)問題。例如為增加ALU功能,在設(shè)計(jì)中采用GENERIC映射產(chǎn)生參數(shù),就能建立一個(gè)ALU新模塊。,Block語句嵌套 LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL; PACKAGE BIT32 IS TYPE tw32 IS ARRAY (31 DOWN TO 0)OF STD_LOGIC; END BIT32; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.BIT32.ALL; ENT

54、ITY CPU IS PORT(CLK,interrupt: IN STD_LOGIC; addr: OUT TW32;-上面已定義 data: INOUT TW32); END CPU;,ARCHITECTURE CPU_BLK OF CPU IS SIGNAL addr_bus,data_bus: TW32;-類型已定義過. BEGIN ALU:Block -塊標(biāo)記ALU SIGNAL AD_bus:TW32; BEGIN -ALU行為描述; register8:Block -塊標(biāo)記register8 SIGNAL BIDIR_bus;TW32; BEGIN REGISTER1:Block

55、 -嵌套塊標(biāo)記register1 SIGNAL AD_bus:TW32;-內(nèi)層塊信號(hào)使用了外層塊 BEGIN ,-REGISTER1的行為描述 END Block REGISTER1; -REGISTER8的其余描述語句 END Block register8; -ALU的其余描述語句 END Block ALU; -CPU_blk的其余描述 END ARCHITECTURE cpu_blk; -實(shí)體cpu的其他結(jié)構(gòu)體描述,子程序是主程序調(diào)用它以后,能將處理結(jié)果返回給主程序的模塊。子程序可以反復(fù)調(diào)用。調(diào)用時(shí),首先要初始化,執(zhí)行結(jié)束后,子程序就終止。子程序內(nèi)部的值不能保持,子程序返回,才能被再次

56、調(diào)用。 在VHDL語言中,子程序(subprogram)分兩類: (1) 過程(PROCEDURE) (2) 函數(shù)(FUNCTION) 過程語句的一般書寫格式為: PROCEDURE 過程名(參數(shù)1;參數(shù)2;) IS 定義語句;-變量定義 BEGIN 順序處理語句 END 過程名; -過程語句,3.2.5 過程語句,PROCEDURE Bitvector_to_integer (z: IN STD_LOGIC_VECTER; X_flag: OUT Boolean; q: INOUT INTEGER) IS BEGIN Q := 0; X_falg := FALSE; FOR i IN Z R

57、ANGE LOOP Q := q 2; IF (Z(i) = 1) THEN Q := q + 1; ELSEIF (Z(i) /= 0 ) THEN X_flag := TRUE; ENDIF; END LOOP; END Bitvector_to_integer;,調(diào)用規(guī)則如下: 并發(fā)過程調(diào)用語句是個(gè)完整的語句,獨(dú)立的行為表現(xiàn)形式,在語句前面可以加標(biāo)號(hào)。 并發(fā)過程調(diào)用語句應(yīng)帶IN,OUT,INOUT參數(shù),列于過程名后跟的括號(hào)內(nèi)。 并發(fā)過程調(diào)用可以有多個(gè)返回值,這些值通過過程中所定義的輸出參數(shù)帶回。 過程調(diào)用舉例: ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS BEGIN Bitvector_to_integer(z,X_ftag,q);-過程參數(shù)定義. END,【例a】 PROCEDURE check(SIGNAL a : IN STD_LOGIC_VECTOR; - 在調(diào)用時(shí) SIGNAL error : OUT BOOLEAN ) IS - 再定位寬 VARIABLE found_one : BOOLEAN := FALSE ; - 設(shè)初始值 BEGIN FOR i IN aRANGE LOOP - 對(duì)位矢量a的所有的位元素進(jìn)行循環(huán)檢測(cè) IF a(i) =

溫馨提示

  • 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)論