VHDL基本描述語句_第1頁
VHDL基本描述語句_第2頁
VHDL基本描述語句_第3頁
VHDL基本描述語句_第4頁
VHDL基本描述語句_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章VHDL基本描述語句主要內(nèi)容:1、順序語句

2、并行語句

重點(diǎn)內(nèi)容:順序語句和并行語句1第3章VHDL基本描述語句順序語句就是在語句的執(zhí)行過程中,語句的執(zhí)行順序是按照語句的書寫順序一個(gè)語句一個(gè)語句地執(zhí)行的。順序語句只能出現(xiàn)在進(jìn)程、過程和函數(shù)中,用以定義在進(jìn)程、過程和函數(shù)中所執(zhí)行的算法。并發(fā)語句是并行執(zhí)行的。例如進(jìn)程語句,在一個(gè)結(jié)構(gòu)體中的各進(jìn)程語句是并發(fā)執(zhí)行的。23.1VHDL中的順序描述語句賦值語句Wait語句If語句Case語句Loop語句Next語句Null語句斷言語句過程調(diào)用語句33.1.1信號代入語句和變量賦值語句信號代入語句的書寫格式:

目標(biāo)信號<=表達(dá)式;該語句表示將代入符號“<=”右邊表達(dá)式的值賦給左的目標(biāo)信號,注意代入符號兩邊的信號和表達(dá)式的數(shù)據(jù)型和長度必須保持一致。變量只能在VHDL源代碼的順序部分進(jìn)行說明和使用,只能出現(xiàn)在進(jìn)程、過程和函數(shù)內(nèi)。變量賦值語句的書寫格式:

目標(biāo)變量:=表達(dá)式;

43.1.2Wait語句在VHDL源代碼中的進(jìn)程總是處于兩種狀態(tài):執(zhí)行和掛起。Wait語句可以控制進(jìn)程的執(zhí)行或掛起。當(dāng)進(jìn)程執(zhí)行到wait語句時(shí)將被掛起,并等待wait語句條件滿足時(shí)進(jìn)程再次被執(zhí)行。有4種不同的方法來描述一個(gè)wait語句。

wait——無限等待

waiton——敏感信號量變化

waituntil——條件滿足

waitfor——時(shí)間到51.WAIT(無限等待語句)

這種形式的WAIT語句在關(guān)鍵字“WAIT”后面不帶任何信息,是無限等待的情況。2.WAITON信號表(敏感信號等待語句)第3章VHDL基本描述語句waiton語句的完整書寫格式:

waiton敏感信號[,敏感信號];

waiton語句使進(jìn)程掛起,直到敏感信號表中的某個(gè)信號發(fā)生了變化才能夠把進(jìn)程激活。6例[A]PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;例[B]PROCESS(a,b)BEGINy<=aANDb;

ENDPROCESS;

①在使用WAITON語句的進(jìn)程中,敏感信號量應(yīng)寫在進(jìn)程中的WAITON語句后面;②在不使用WAITON語句的進(jìn)程中,敏感信號量應(yīng)在開頭的關(guān)鍵詞PROCESS后面的敏感信號表中列出。

③VHDL規(guī)定,已列出敏感信號表的進(jìn)程不能使用任何形式的WAIT語句。

第3章VHDL基本描述語句3.1.2Wait語句7例:異步復(fù)位的D觸發(fā)器Libraryieee;Useieee.std_logic_1164.all;Entityreset_dff1isport(clk,reset:instd_logic;d:instd_logic;q:outstd_logic);Endentityreset_dff1;Architecturertlofreset_dff1isBegin

ProcessBeginif(reset=‘1’)thenq<=‘0’;elsif(clk’eventandclk=‘1’)thenq<=d;endif;

waitonclk,reset;

endprocess;Endrtl;3.1.2Wait語句process(reset,clk)Beginif(reset=‘1’)thenq<=‘0’;elsif(clk’eventandclk=‘1’)thenq<=d;endif;83.WAITUNTIL條件(條件等待語句)WAITUNTIL語句需滿足以下條件:①在條件表達(dá)式中所含的信號發(fā)生了變化;②此信號改變后,且滿足WAITUNTIL語句中表達(dá)式的條件。這兩個(gè)條件缺一不可,且必須按照上述順序來完成。第3章VHDL基本描述語句3.1.2Wait語句waituntil語句的完整書寫格式:

waituntil條件表達(dá)式;waituntil語句將使進(jìn)程掛起,直到該條件表達(dá)式返回一個(gè)為“true”的值,進(jìn)程才能夠再次被啟動。當(dāng)表達(dá)式中任何一個(gè)信號有事件發(fā)生時(shí),就會立即對該表達(dá)式進(jìn)行計(jì)算。9WAITUNTIL語句有以下三種表達(dá)方式:

WAITUNTIL信號=VALUE;

WAITUNTIL信號’EVENTAND信號=VALUE;

WAITUNTIL信號’STABLEAND信號=VALUE;例如:

WAITUNTILclock=“1”;

WAITUNTILrising_edge(clk);

WAITUNTILclk=‘1’ANDclk’EVENT;

WAITUNTILNOTclk’STABLEANDclk=“1”;

一般的,在一個(gè)進(jìn)程中使用了WAIT語句后,綜合器會綜合產(chǎn)生時(shí)序邏輯電路。時(shí)序邏輯電路的運(yùn)行依賴WAITUNTIL表達(dá)式的條件,同時(shí)還具有數(shù)據(jù)存儲的功能。第3章VHDL基本描述語句10例:同步復(fù)位的D觸發(fā)器Libraryieee;Useieee.std_logic_1164.all;Entityreset_dff3isport(clk,reset:instd_logic;d:instd_logic;q:outstd_logic);Endentityreset_dff3;Architecturertlofreset_dff3isBegin

Process

Beginwaituntilclk’eventandclk=‘1’;if(reset=‘1’)thenq<=‘0’;elsethenq<=d;endif;

endprocess;Endrtl;3.1.2Wait語句114.WAITFOR時(shí)間表達(dá)式(超時(shí)等待語句)例[A]:WAITFOR40ns;

在該語句中,時(shí)間表達(dá)式為常數(shù)40ns,當(dāng)進(jìn)程執(zhí)行到該語句時(shí),將等待40ns,經(jīng)過40ns之后,進(jìn)程執(zhí)行WAITFOR的后繼語句。例[B]:WAITFOR(a*(b+c));

在此語句中,(a*(b+c))為時(shí)間表達(dá)式,WAITFOR語句在執(zhí)行時(shí),首先計(jì)算表達(dá)式的值,然后將計(jì)算結(jié)果返回作為該語句的等待時(shí)間。

第3章VHDL基本描述語句125.多條件等待語句

Wait語句可以同時(shí)使用多個(gè)等待條件。在多條件等待語句的表達(dá)式中,至少應(yīng)該有一個(gè)值包含信號。例:waitonabuntil(c’eventandc=‘1’)for10ns;第3章VHDL基本描述語句13If語句是在VHDL描述硬件電路的過程中使用最頻繁的語句。If語句的完整書寫格式:

if<條件>then<順序語句>;

[elsif<條件>then<順序語句>;][elsif<條件>then<順序語句>;]……[else<順序語句>;]endif;從if開始到endif結(jié)束,endif要分開寫條件是一個(gè)布爾表達(dá)式,返回值為布爾類型。當(dāng)條件滿足時(shí)執(zhí)行接下來的順序語句;當(dāng)條件不滿足時(shí)就去執(zhí)行接下來的順序語句elsif子句或else子句或結(jié)束if語句。根據(jù)if語句的完整書寫格式,If語句的三種常用形式。3.1.3IF語句143.1.3IF語句1、門閂控制語句IF<條件>THEN

<順序語句>;

ENDIF;

第3章VHDL基本描述語句15

當(dāng)程序執(zhí)行到這種門閂控制型IF語句時(shí),首先判斷語句中所指定的條件是否成立。如果條件成立,則程序繼續(xù)執(zhí)行IF語句中所含的順序處理語句;如果條件不成立,程序?qū)⑻^IF語句所包含的順序處理語句,而向下執(zhí)行IF的后繼語句。

例:利用IF語句引入D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffISPORT(clk,d:INSTD_LOGIC;

q:OUTSTD_LOGIC);ENDdff;ARCHITECTURErtlOFdffISBEGIN

PROCESS(clk)

BEGIN

IF(clk’EVENTANDclk=’1’)

THEN

q<=d;

ENDIF;

ENDPROCESS;END

rtl;第3章VHDL基本描述語句162、二選一控制語句

IF<條件>THEN

<順序語句>;

ELSE

<

順序語句>;

ENDIF;

當(dāng)IF條件成立時(shí),程序執(zhí)行THEN和ELSE之間的順序語句部分;當(dāng)IF語句的條件得不到滿足時(shí),程序執(zhí)行ELSE和ENDIF之間的順序處理語句。即依據(jù)IF所指定的條件是否滿足,程序可以進(jìn)行兩條不同的執(zhí)行路徑。

第3章VHDL基本描述語句17例:二選一電路結(jié)構(gòu)體的描述ARCHITECTURErtlOFmux2ISBEGINPROCESS(a,b,s)BEGIN

IF(s=’1’)THEN

c<=a;

ELSE

c<=b;

ENDIF;ENDPROCESS;END

rtl;

第3章VHDL基本描述語句183、多選擇控制語句IF<條件>THEN

<順序語句>;

ELSEIF

<順序語句>;ELSEIF

<順序語句>;ELSE

<順序語句>;ENDIF;

這種多選擇控制的IF語句,實(shí)際上就是條件嵌套。它設(shè)置了多個(gè)條件,當(dāng)滿足所設(shè)置的多個(gè)條件之一時(shí),就執(zhí)行該條件后的順序處理語句。當(dāng)所有設(shè)置的條件都不滿足時(shí),程序執(zhí)行ELSE和ENDIF之間的順序處理語句。第3章VHDL基本描述語句19例:利用多選控制語句設(shè)計(jì)的四選一多路選擇器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);

sel:INSTD_LOGIC_VECTOR(1DOWNTO0);

y:OUTSTD_LOGIC);ENDmux4;第3章VHDL基本描述語句20ARCHITECTURErtlOFmux4ISBEGINPROCESS(input,sel)BEGIN

IF(sel=“00”)THENy<=input(0);

ELSIF(sel=“01”)THENy<=input(1);

ELSIF(sel=“10”)THENy<=input(2);

ELSEy<=input(3);

ENDIF;ENDPROCESS;ENDrtl;第3章VHDL基本描述語句213.1.4CASE語句第3章VHDL基本描述語句Case語句完整書寫形式:

case<表達(dá)式>iswhen<選擇>=><順序語句>;

when<選擇>=><順序語句>;

……

whenothers=><順序語句>;

endcase;Case語句中如果表達(dá)式的值與某一個(gè)when語句的選擇值或與others值相匹配,則執(zhí)行它們后面所跟的順序執(zhí)行語句,執(zhí)行完順序語句后將結(jié)束該case語句。Case語句中的所有條件必須被枚舉,不允許when語句后的選擇有相同的。When語句后面的選擇值必須是表達(dá)式的所有取值,不能遺漏??梢岳胦thers來表示所有具有相同操作的選擇。Case語句中的when語句可以顛倒次序而不影響操作,但保留字others必須放在作后面。22當(dāng)執(zhí)行到CASE語句時(shí),首先計(jì)算CASE和IS之間的表達(dá)式的值,然后根據(jù)條件語句中與之相同的選擇值,執(zhí)行對應(yīng)的順序語句,最后結(jié)束CASE語句。第3章VHDL基本描述語句在case語句中的“when<選擇>=><順序語句>;”有四種表示形式:

When值=><順序語句>;When值|值|…|值=><順序語句>;--表示并行關(guān)系

When值to值=><順序語句>;--表示范圍

Whenothers=><順序語句>;23CASE語句需要注意的幾點(diǎn)(1)CASE語句中每一條語句的選擇值只能出現(xiàn)一次,即不能有相同選擇值的條件語句出現(xiàn)。(2)CASE語句執(zhí)行中必須選中,且只能選中所列條件語句中的一條,即CASE語句至少包含一個(gè)條件語句。(3)除非所有條件語句中的選擇值能完全覆蓋CASE語句中表達(dá)式的取值,否則最末一個(gè)條件語句中的選擇必須用“OTHERS”表示,它代表已給出的所有條件語句中未能列出的其他可能的取值。關(guān)鍵詞OTHERS只能出現(xiàn)一次,且只能作為最后一種條件取值。第3章VHDL基本描述語句24例:七段顯示譯碼器Libraryieee;Useieee.std_logic_1164.all;Entityse7isport(input:instd_logic_vector(3downto0);output:outstd_logic_vector(6downto0));Endse7;Architecturese7_arcofse7isBeginprocess(input)3.1.4CASE語句25

Begincaseinputiswhen“0000”=>output<=“0111111”;when“0001”=>output<=“0000110”;when“0010”=>output<=“1011011”;when“0011”=>output<=“1001111”;when“0100”=>output<=“1100110”;when“0101”=>output<=“1101101”;when“0110”=>output<=“1111101”;when“0111”=>output<=“0000111”;when“1000”=>output<=“1111111”;when“1001”=>output<=“1101111”;when“1010”=>output<=“1110111”;when“1011”=>output<=“1111100”;when“1100”=>output<=“0111001”;when“1101”=>output<=“1011110”;when“1110”=>output<=“1111001”;when“1111”=>output<=“1110001”;whenothers=>output<=“0000000”;endcase;endprocess;endse7_arc;3.1.4CASE語句例:七段顯示譯碼器Libraryieee;Useieee.std_logic_1164.all;Entityse7isport(input:instd_logic_vector(3downto0);output:outstd_logic_vector(6downto0));Endse7;Architecturese7_arcofse7isBeginprocess(input)26例3-8譯碼器

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoder3_8ISPORT(a,b,c,g1,g2a,g2b:INSTD_LOGIC;y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDdecoder3_8;ARCHITECTURErtlOFdecoder3_8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

indata<=c&b&a;

PROCESS(indata,g1,g2a,g2b)

BEGIN第3章VHDL基本描述語句27IF(g1=‘1’ANDg2a=‘0’ANDg2b=‘0’)THEN

CASEindataISWHEN“000”=>y<=“11111110”;

WHEN“001”=>y<=“11111101”;

WHEN“010”=>y<=“11111011”;

WHEN“011”=>y<=“11110111”;

WHEN“100”=>y<=“11101111”;

WHEN“101”=>y<=“11011111”;

WHEN“110”=>y<=“10111111”;

WHEN“111”=>y<=“01111111”;

WHENOTHERS=>y<=“XXXXXXXX”;ENDCASE;

ELSEy<=“11111111”;

ENDIF;

ENDPROCESS;

ENDrtl;第3章VHDL基本描述語句283.1.5LOOP語句

LOOP語句就是循環(huán)語句,它可以使包含的一組順序語句被循環(huán)執(zhí)行,其執(zhí)行的次數(shù)受迭代算法控制。在VHDL中常用來描述迭代電路的行為。第3章VHDL基本描述語句VHDL提供了兩種循環(huán)控制語句:

Forloop循環(huán)

Whileloop循環(huán)Forloop循環(huán)主要用于在規(guī)定重復(fù)數(shù)目的重復(fù)情況;whileloop循環(huán)將連續(xù)執(zhí)行操作直到控制條件被判斷為“false”。29第3章VHDL基本描述語句1.forloop循環(huán)

Forloop循環(huán)的完整書寫格式為:

[循環(huán)標(biāo)號:]for循環(huán)變量

in

離散范圍loop<順序處理語句>;

Endloop[循環(huán)標(biāo)號];循環(huán)標(biāo)號作為該forloop循環(huán)的標(biāo)志符;循環(huán)變量的值在每次的循環(huán)中都將發(fā)生變化;循環(huán)變量每取一個(gè)值,就要執(zhí)行一次循環(huán)體中的順序處理語句。離散范圍用來指定循環(huán)變量的取值范圍,循環(huán)變量的取值將從取值范圍最左邊的值開始并且遞增到取值范圍最右邊的值,實(shí)際上也是限定了循環(huán)的次數(shù)。離散范圍的值不一定指定為整數(shù)值,也可以是其他類型的。只是要保證數(shù)值是離散的就可以。30例:8位奇偶校驗(yàn)電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYparity_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDparity_check;第3章VHDL基本描述語句31BEGIN

tmp:=‘0’;

FORiIN0TO7LOOP

tmp:=tmpXORa(i);

ENDLOOP;

y<=tmp;

ENDPROCESS;ENDrtl;第3章VHDL基本描述語句ARCHITECTURErtlOFparity_checkISBEGIN

PROCESS(a)

VARIABLEtmp:STD_LOGIC

322.whileloop循環(huán)whileloop循環(huán)的完整書寫格式為:

[循環(huán)標(biāo)號:]while<條件>loop<順序處理語句>;

endloop[循環(huán)標(biāo)號];MAX+PlusII不支持whileloop語句。循環(huán)標(biāo)號用來作為該whileloop循環(huán)語句的標(biāo)志符;Whileloop循環(huán)語句當(dāng)檢測到保留字while后面的條件滿足時(shí)才去執(zhí)行順序處理語句。Whileloop循環(huán)語句在每次執(zhí)行前都要先檢查條件,如檢查出條件為“true”就去執(zhí)行循環(huán)體中的順序處理語句,執(zhí)行完后返回該循環(huán)的開始,將再次檢查條件;如果條件為“false”將結(jié)束循環(huán),去執(zhí)行whileloop循環(huán)語句后面的其他語句。3.1.5LOOP語句33例:8位奇偶校驗(yàn)電路的WHILE_LOOP設(shè)計(jì)形式

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYparity_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);

y:OUTSTD_LOGIC);ENDparity_check;ARCHITECTUREbehavOFparity_checkISBEGINPROCESS(a)

VARIABLEtmp:STD_LOGIC第3章VHDL基本描述語句34BEGIN

tmp:=‘0’;

i:=0;

WHILE(i<8)LOOP

tmp:=tmpXORa(i);

i:=i+1;

ENDLOOP;

y<=tmp;

ENDPROCESS;ENDbehav;第3章VHDL基本描述語句在該LOOP語句中,沒有給出循環(huán)次數(shù)的范圍,而是給出了循環(huán)執(zhí)行順序語句的條件;沒有自動遞增循環(huán)變量的功能,而是在順序處理語句中增加了一條循環(huán)次數(shù)計(jì)算語句,用于循環(huán)語句的控制。

循環(huán)控制條件為布爾表達(dá)式,當(dāng)條件為“真”時(shí),則進(jìn)行循環(huán),如果條件為“假”,則結(jié)束循環(huán)。ARCHITECTUREbehavOFparity_checkISBEGIN

PROCESS(a)

VARIABLEtmp:STD_LOGIC353.1.6next語句VHDL提供了兩種跳出循環(huán)的操作,一種是跳出本次循環(huán)的next語句,另一種是跳出整個(gè)循環(huán)的exit語句。Next語句用在loop循環(huán)語句的內(nèi)部,它可以有條件或者是無條件地結(jié)束當(dāng)前此次循環(huán)并開始下一次的循環(huán)。next語句的完整書寫格式為:

next[循環(huán)標(biāo)號][when條件];“循環(huán)標(biāo)號”表明了結(jié)束本次循環(huán)后下一次循環(huán)的起始位置?!皐hen條件”則表明了跳出本次循環(huán)的條件。當(dāng)“循環(huán)標(biāo)號”和“when條件”省略后則表明只要執(zhí)行到該next語句就立即無條件地跳出本次循環(huán),回到本loop循環(huán)語句地起始位置進(jìn)行下一次循環(huán)。36例:NEXT語句應(yīng)用舉例┇WHILEdata>1LOOPdata:=data+1;NEXTWHENdata=3data:=data*data;ENDLOOP;N1:FORiIN10DOWNTO1LOOPN2:FORjIN0TOiLOOPNEXTN1WHENi=j;

matrix(i,j):=j*i+1;

ENDLOOPN2;ENDLOOPN1;第3章VHDL基本描述語句37第3章VHDL基本描述語句VHDL提供了exit語句,允許設(shè)計(jì)人員從目前正在執(zhí)行的循環(huán)中跳出。Exit語句的完整書寫格式:

exit[循環(huán)標(biāo)號][when條件];“循環(huán)標(biāo)號”表明了要終止的loop循環(huán)標(biāo)號?!皐hen條件”則表明了終止本循環(huán)的條件。當(dāng)“循環(huán)標(biāo)號”和“when條件”省略后則表明只要執(zhí)行到該exit語句就立即無條件地跳出本循環(huán),繼續(xù)執(zhí)行l(wèi)oop循環(huán)語句后面的其他語句。3.1.7exit語句38Exit語句有三種基本的書寫格式:一種是沒有“循環(huán)標(biāo)志”或“when條件”的書寫格式。執(zhí)行該語句時(shí)只從當(dāng)前所屬的loop循環(huán)語句中跳出。一種是帶有“循環(huán)標(biāo)號”的書寫格式。當(dāng)執(zhí)行該語句時(shí),將終止循環(huán)標(biāo)號所指示的循環(huán)的執(zhí)行。一種是帶有“when條件”的書寫格式。當(dāng)執(zhí)行到該語句時(shí),只有當(dāng)條件為真時(shí)才會終止循環(huán)標(biāo)號所指示的循環(huán)的執(zhí)行或跳出當(dāng)前所屬的loop循環(huán)。第3章VHDL基本描述語句3.1.7exit語句39例:兩個(gè)元素位矢量a、b進(jìn)行比較,當(dāng)發(fā)現(xiàn)a與b不同時(shí),跳出循環(huán)比較程序并報(bào)告比較結(jié)果。SIGNALa,b:STD_LOGIC_VECTOR(0TO1);SIGNALa_less_than_b:BOOLEAN;┇a_less_than_b<=FALSE;FORiIN1TO0LOOPIF(a(i)=‘1’ANDb(i)=‘0’)THENa_less_than_b<=FALSE;EXIT;ELSEIF(a(i)=‘0’ANDb(i)=‘1’)THENa_less_than_b<=TRUE;EXIT;ELSENULLENDIF;ENDLOOP;第3章VHDL基本描述語句403.1.8斷言語句斷言語句可以對VHDL描述中的模型添加限制條件,為設(shè)計(jì)人員報(bào)告一條文本的字符串。斷言語句的書寫格式:

assert<條件>report<輸出信息>severity<出錯(cuò)級別>;在執(zhí)行過程中,斷言語句首先檢查條件的布爾表達(dá)式的真假。如果布爾表達(dá)式為“true”,則向下執(zhí)行另外一條語句。如果布爾表達(dá)式為“false”,斷言語句將輸出一條設(shè)計(jì)人員規(guī)定的字符串到標(biāo)準(zhǔn)輸出終端,并給出輸出字符串的出錯(cuò)級別。第3章VHDL基本描述語句41

3.1.9、REPORT語句

REPORT語句不增加硬件任何功能,但提供順序斷言語句的短格式,在仿真時(shí)使用REPORT語句可以提高程序的可讀性。REPORT語句的書寫格式為:REPORT輸出信息[SEVERITY出錯(cuò)級別];第3章VHDL基本描述語句42return語句Return語句只能用在函數(shù)和過程體中,主要用來結(jié)束當(dāng)前的最內(nèi)層的函數(shù)或者是過程體的執(zhí)行。在過程體中return語句不能有表達(dá)式;而函數(shù)體中的return語句必須有一個(gè)表達(dá)式,它也是結(jié)束函數(shù)體執(zhí)行的唯一條件。Return語句的書寫格式如下:

return[表達(dá)式];null語句Null語句表示一種只占位置的空操作,它不進(jìn)行任何動作,執(zhí)行該語句只是使源代碼去執(zhí)行下一個(gè)語句。Null語句的書寫格式如下:

null;例:casetmpiswhen0=>q<=d0;when1=>q<=d1;when2=>q<=d2;when3=>q<=d3;whenothers=>null;第3章VHDL基本描述語句433.2并行語句

在VHDL中,并行語句在結(jié)構(gòu)體中的執(zhí)行是同時(shí)并發(fā)執(zhí)行的,其書寫次序與其執(zhí)行順序并無關(guān)聯(lián),并行語句的執(zhí)行順序是由他們的觸發(fā)事件來決定的。第3章VHDL基本描述語句進(jìn)程語句塊語句并行信號代入并行斷言語句并行過程調(diào)用語句參數(shù)傳遞語句元件例化語句生成語句并行語句的種類:44第3章VHDL基本描述語句3.2.1并行信號代入語句信號代入語句有兩種:在結(jié)構(gòu)體中的進(jìn)程內(nèi)使用,作為一種順序語句;在結(jié)構(gòu)體中的進(jìn)程之外使用,是一種并行語句,稱之為并行信號代入語句。注意:一條信號代入語句和一個(gè)信號代入的進(jìn)程語句是等價(jià)的。45第3章VHDL基本描述語句3.2.1并行信號代入語句例:2輸入與門Libraryieee;Useieee.std_logic_1164.all;entityand_gateisport(a:instd_logic;b:instd_logic;y:outstd_logic);endand_gate;architecturebehaveofand_gateisbegin

y<=aandb;endbehave;Begin

process(a,b)beginy<=aandb;endprocess;Endbehave;等價(jià)于并行信號代入語句46第3章VHDL基本描述語句3.2.1并行信號代入語句信號代入語句有兩種:在結(jié)構(gòu)體中的進(jìn)程內(nèi)使用,作為一種順序語句;在結(jié)構(gòu)體中的進(jìn)程之外使用,是一種并行語句,稱之為并行信號代入語句。注意:一條信號代入語句和一個(gè)信號代入的進(jìn)程語句是等價(jià)的。47第3章VHDL基本描述語句3.2.1并行信號代入語句在VHDL中提供了三種并行信號代入語句:

?并發(fā)信號代入語句

?條件信號代入語句

?選擇信號代入語句481.并發(fā)信號代入語句信號代入語句在結(jié)構(gòu)體的進(jìn)程外出現(xiàn)時(shí),它作為并發(fā)語句的形式出現(xiàn)。并發(fā)信號代入語句在結(jié)構(gòu)體中是并行執(zhí)行的,它們的執(zhí)行順序與書寫順序無關(guān)。并發(fā)信號代入語句是靠時(shí)間驅(qū)動的,只有代入符號“<=”右邊的對象有事件發(fā)生時(shí)才會執(zhí)行該語句。常用來進(jìn)行加法器、乘法器、除法器和比較器等許多邏輯電路的描述。3.2.1并行信號代入語句第3章VHDL基本描述語句49Libraryieee;Useieee.std_logic_1164.all;

entityadd_1isport(A:instd_logic;B:instd_logic;Cin:instd_logic;Co:outstd_logic;S:outstd_logic);endadd_1;architecturedataflowofadd_1issignaltmp1,tmp2:std_logic;Begin

tmp1<=AxorB;tmp2<=tmp1andCin;S<=tmp1xorCin;Co<=tmp2or(AandB);enddataflow;并發(fā)信號代入語句3.2.1并行信號代入語句50條件信號代入語句也是一種并發(fā)描述語句,是根據(jù)不同的表達(dá)式代入目的信號的語句書寫格式:

<目的信號><=<表達(dá)式1>when<條件1>else<表達(dá)式2>when<條件2>else<表達(dá)式3>when<條件3>else……<表達(dá)式n-1>when<條件>else<表達(dá)式n>;功能說明:當(dāng)VHDL源代碼執(zhí)行到該語句時(shí)要先進(jìn)行條件判斷,如果條件滿足,就將條件前面的那個(gè)表達(dá)式的值代入目的信號;如果條件不滿足,就去判斷下一個(gè)條件;最后一個(gè)表達(dá)式?jīng)]有條件,也就是說在前面條件都不滿足時(shí),就將該表達(dá)式的值代入目的信號。3.2.1并行信號代入語句

2.條件信號代入語句51例:采用條件代入語句描述的七段顯示譯碼器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYse7ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);output:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDse7;第3章VHDL基本描述語句52第3章VHDL基本描述語句Architecturertlofse7isBegin

output<="0111111"wheninput="0000"else"0000110"wheninput="0001"else"1011011"wheninput="0010"else"1001111"wheninput="0011"else

"1100110"wheninput="0100"else

"1101101"wheninput="0101"else

"1111101"wheninput="0110"else"0000111"wheninput="0111"else"1111111"wheninput="1000"else

"1101111"wheninput="1001"else"1110111"wheninput="1010"else"1111100"wheninput="1011"else

"1011110"wheninput="1101"else

"1111001"wheninput="1110"else"1110001"wheninput="1111"else

"0111001"wheninput="1100"else"0000000";Endrtl;在七段數(shù)碼管結(jié)構(gòu)體中,用一個(gè)條件代入語句來完成所有狀態(tài)的顯示譯碼。在保留字WHEN的前面是驅(qū)動顯示數(shù)碼管的七位位矢量;在保留字WHEN的后面是譯碼的條件。53第3章VHDL基本描述語句條件信號代入語句與if語句的區(qū)別:(1)If語句是順序語句,只能在進(jìn)程中使用;條件信號代入語句是并行語句,必須用在進(jìn)程之外。(2)If語句中else是可有可無的;條件信號代入語句中的else語句是必須有的。(3)If語句能嵌套使用;條件信號代入語句不能嵌套,不能生成鎖存器。(4)使用if語句來描述不需要太多硬件知識;使用條件信號代入語句則要求設(shè)計(jì)人員具有較多的硬件電路的知識。2.條件信號代入語句543.選擇信號代入語句第3章VHDL基本描述語句選擇信號代入語句的書寫格式:With<表達(dá)式>select<目的信號><=<表達(dá)式1>when<條件1>,

<表達(dá)式2>when<條件2>,

<表達(dá)式3>when<條件3>,

……<表達(dá)式n>when<條件n>;功能說明:當(dāng)VHDL源代碼執(zhí)行到該語句時(shí),目的信號根據(jù)表達(dá)式的當(dāng)前值來進(jìn)行表達(dá)式代入。當(dāng)表達(dá)式的值符合某個(gè)條件時(shí),就將條件前的信號代入目的信號;如果條件不符合,語句繼續(xù)向下判斷,直到找到滿足的條件為止。選擇信號代入語句與case語句一樣,必須把表達(dá)式的值在條件中都列出來。55LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(d0:INSTD_LOGIC_VECTOR(7DOWNTO0);

d1:INSTD_LOGIC_VECTOR(7DOWNTO0);

d2:INSTD_LOGIC_VECTOR(7DOWNTO0);

d3:INSTD_LOGIC_VECTOR(7DOWNTO0);

s0:INSTD_LOGIC;

s1:INSTD_LOGIC;

q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDmux4;第3章VHDL基本描述語句例:四選一8位總線選擇器56ARCHITECTURErtlOFmux4ISSIGNALcomb:STD_LOGIC_VECTOR(1DOWNTO0);;BEGIN

comb<=s1&s0;

WITH

combSELECT

q<=d0WHEN“00”;

d1WHEN“01”;

d2WHEN“10”d3WHENOTHERS;ENDrtl;第3章VHDL基本描述語句例:四選一8位總線選擇器573.2.2并行斷言語句并行斷言語句和順序斷言語句書寫格式一致、功能一致。并行斷言語句用在結(jié)構(gòu)體中,順序斷言語句只能用在進(jìn)程、函數(shù)和過程中。任何并行斷言語句都對應(yīng)著一個(gè)等價(jià)的被動進(jìn)程語句,被動進(jìn)程語句沒有輸出,并行斷言語句的執(zhí)行將不會引起任何事件的發(fā)生,只是在斷言條件為“false”時(shí)給出一條信息報(bào)告。58例:Libraryieee;

Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitymaxisport(in1:instd_logic_vector(7downto0);in2:instd_logic_vector(7downto0);in3:instd_logic_vector(7downto0);q:instd_logic_vector(7downto0));Endmax;Architecturebehaveofexampleissignalcomb:std_logic_vector(1downto0);Beginassertfalse;report“Thisentityisaexampletodescriptassertstatement”severitynote;Endbehave;

3.2.2并行斷言語句593.2.4并行過程調(diào)用語句過程調(diào)用語句在進(jìn)程內(nèi)執(zhí)行時(shí),它是一種順序語句;過程調(diào)用語句在結(jié)構(gòu)體中的進(jìn)程之外執(zhí)行時(shí),它作為并發(fā)語句的形式出現(xiàn)。作為并行過程調(diào)用語句,在結(jié)構(gòu)體中它們是并行執(zhí)行的,執(zhí)行順序與書寫順序無關(guān)。60例:求最大值libraryieee;useieee.std_logic_1164.all;entitymaxisport(in1:instd_logic_vector(7downto0);in2:instd_logic_vector(7downto0);in3:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endmax;architecturertlofmaxis3.2.4并行過程調(diào)用語句61ARCHITECTURErtlOFmaxIS

PROCEDURE

maximun(a,b:INSTD_LOGIC_VECTOR;

SIGNALc:OUTSTD_LOGIC_VECTOR)IS

VARIABLEtemp:STD_LOGIC_VECTOR(a’RANGE);

BEGIN

IF(a>b)THENtemp:=a;

ELSE

temp

:=b;

ENDIF;

c<=temp;

END

maximun;

SIGNALtmp1,tmp2:STD_LOGIC_VECTOR(7DOWNTO0);

BEGINmaximun(in1,in2,tmp1);

maximun(tmp1,in3,tmp2);

q<=tmp2;ENDrtl;3.2.4并行過程調(diào)用語句62

塊(BLOCK)語句可以看作是結(jié)構(gòu)體中的子模塊,塊語句把許多并行語句組合在一起形成一個(gè)子模塊,而它本身也是一個(gè)并行語句。1、基本結(jié)構(gòu)

[塊標(biāo)號:]BLOCK[保護(hù)表達(dá)式][類屬子句[類屬接口表;]];

[端口子句[端口接口表;]];

[塊說明部分]BEGIN<并行語句1><并行語句2>┇ENDBLOCK[塊標(biāo)號];第3章VHDL基本描述語句

3.2.5塊語句63例:利用塊語句描述的全加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYaddISPORT(A:INSTD_LOGIC;

B:INSTD_LOGIC;

Cin:INSTD_LOGIC;

Co:OUTSTD_LOGIC;

S:OUTSTD_LOGIC);ENDadd;第3章VHDL基本描述語句64ARCHITECTUREdataflowOFaddISBEGINex:BLOCKPORT(a_A:INSTD_LOGIC;

a_B:INSTD_LOGIC;

a_Cin:INSTD_LOGIC;

a_Co:OUTSTD_LOGIC;

a_S:OUTSTD_LOGIC);

PORTMAP(a_A=>A,a_B=>B,a_Cin=>Cin,

a_Co=>Co,a_S=>S);

SIGNALtmp1,tmp2:STD_LOGIC;第3章VHDL基本描述語句65BEGINlabel1:PROCESS(a_A,a_B)BEGINtmp1<=a_AXORa_B;ENDPROCESSlabel1;

label2:PROCESS(tmp1,a_Cin)

BEGINtmp2<=tmp1ANDa_Cin

;

ENDPROCESSlabel2;

label3:PROCESS(tmp1,a_Cin)

BEGINa_S<=tmp1XORa_Cin

ENDPROCESSlabel3;第3章VHDL基本描述語句66

label4:PROCESS(a_A,a_B,tmp2)BEGINa_Co<=tmp2OR(a_AANDa_B);ENDPROCESSlabel4;ENDBLOCKex;ENDdataflow;

在上面的例子中,結(jié)構(gòu)體內(nèi)含有4個(gè)進(jìn)程語句,這4個(gè)進(jìn)程語句是并行關(guān)系,共同形成了一個(gè)塊語句。第3章VHDL基本描述語句672、模塊間的信號傳遞和端口映射在編寫VHDL程序時(shí),會遇到塊內(nèi)的信號或參數(shù)要傳遞到塊外去,塊外的信號或參數(shù)要傳遞到塊內(nèi)去的情況。解決以上問題的辦法是合理使用PORT和PORTMAP語句。

PORT和PORTMAP語句可以作為塊頭的定義語句,可以用來擴(kuò)展或增加塊的功能。例:LIBRARYieee;USEieee.std_logic_1164.all;PACKAGEmathISTYPEtw32ISARRAY(31DOWNTO0)OFstd_logicFUNCTIONtw_add(a,b:tw32)RETURNtw32;FUNCTIONtw_sub(a,b:tw32)RETURNtw32;

第3章VHDL基本描述語句68ENDmath;USEwork.math.all;ENTITYcpuIS

PORT(clk,interrupt:INstd_logic;add:OUTtw32;

comt:ININTEGER;data:INOUTtw32);ENDcpu;ARCHITECTUREcpu_blkOFcpuISSIGNALaddr_bus,data_bus:tw32;BEGINALU:BLOCK

PORT(a_bus,b_bus:INtw32;

c_bus:ININTEGER;

第3章VHDL基本描述語句69

d_out:OUTtw32);PORTMAP(a_bus=>addr_bus;

b_bus=>data_bus;

c_bus=>comt;

d_out=>data)BEGIN

d_out<=tw_add(a_bus,b_bus)WHEN

c_bus=0ELSE

tw_sub(a_bus,b_bus)WHENc_bus=1ELSE

a_bus;ENDBLOCKALU;ENDcpu_blk;

第3章VHDL基本描述語句703、模塊并發(fā)性及執(zhí)行條件語句的并發(fā)執(zhí)行分為兩類:一類是無條件并發(fā)執(zhí)行,另一類是有條件并發(fā)執(zhí)行。有條件并發(fā)執(zhí)行的BLOCK稱為GUARDEDBLOCK。

例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffbISPORT(d,clk:INbit;

g,gb:OUTbit);ENDdffb;ARCHITECHTUREexampleOFdffbISBEGIN

第3章VHDL基本描述語句71

B1:BLOCK(clk=‘1’)BEGINg<=GUARDEDd;

gb<=GUARDEDNOT(d);ENDBOLOCKB1;ENDexample;第3章VHDL基本描述語句723.2.6參數(shù)傳遞語句參數(shù)傳遞語句(generic)主要用來傳遞信息給設(shè)計(jì)實(shí)體的某個(gè)具體元件,如用來定義端口寬度、器件延遲時(shí)間等參數(shù)后并將這些參數(shù)傳遞給設(shè)計(jì)實(shí)體。這些參數(shù)是待定的,在模擬時(shí),只要generic語句將待定參數(shù)初始化即可。73例:兩輸入與門Libraryieee;useieee.std_logic_1164.all;Entityand2is

generic(delay:time:=10ns);Port(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDand2;ARCHITECTUREbehaveOFand2ISBEGINc<=aandbafter(delay);ENDbehave;3.2.6參數(shù)傳遞語句74例:例化元件來改變參數(shù)值libraryieee;useieee.std_logic_1164.all;entityexampleISport(a1,b1,a2,b2:instd_logic;out1,out2:outstd_logic);endexample;architecturebehaveofexampleis

componentand2

generic(delay:time);port(a,b:instd_logic;c:outstd_logic);endcomponent;Beginu1:and2genericmap(6ns)

portmap(a1,b1,out1);u2:and2genericmap(8ns)portmap(a2,b2,out2);Endbehave;3.2.6參數(shù)傳遞語句參數(shù)匹配命令genericmap將二輸入與門中的延遲時(shí)間參數(shù)分別映射為6ns和8ns,以滿足不同工藝、不同材料器件的要求。元件例化語句:將端口a映射到信號a1,端口b映射到b1,端口c映射到out1。753.2.7元件例化語句結(jié)構(gòu)體描述方式就是在多層次的設(shè)計(jì)中,通過調(diào)用庫中的元件或是已經(jīng)設(shè)計(jì)好的模塊來完成設(shè)計(jì)實(shí)體功能的描述。在結(jié)構(gòu)體中,描述只表示元件(或模塊)和元件(或模塊)之間的互連關(guān)系,就像網(wǎng)表一樣。描述元件間的互連關(guān)系就是用元件例化語句實(shí)現(xiàn)的。在進(jìn)行元件例化時(shí),首先要進(jìn)行例化元件的說明,元件說明部分使用component語句,說明在結(jié)構(gòu)體中所調(diào)用的模塊。如果所調(diào)用的模塊在元件庫中并不存在時(shí),必須要首先進(jìn)行元件的創(chuàng)建,然后將其放在工作庫中,通過調(diào)用工作庫來引用該元件。元件例化語句是一種應(yīng)用十分廣泛的語句,主要用于模塊化的設(shè)計(jì)。76component語句的書寫格式為:component<引用元件名>[generic<參數(shù)說明>;]port<端口說明>;endcomponent;其中:“引用元件名”用來指定結(jié)構(gòu)體中的例化元件,該元件必須已經(jīng)存在于調(diào)用的工作庫中;generic語句表示需要參數(shù)傳遞說明。component語句對要引用的元件說明以后,就可以在結(jié)構(gòu)體中進(jìn)行元件例化以使用該元件,元件例化語句的書寫格式為:<標(biāo)號名:><元件名>[genericmap(參數(shù)映射)]portmap(端口映射);其中:標(biāo)號名是元件例化的唯一標(biāo)志。映射語句把元件的參數(shù)和端口與實(shí)際連接的信號對應(yīng)起來,以進(jìn)行元件的應(yīng)用。3.2.7元件例化語句771.位置映射:portmap語句中實(shí)際信號的書寫順序與component語句中端口說明中的書寫順序保持一致。3.2.7元件例化語句映射方法:位置映射

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論