




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章VHDL基本描述語句主要內容:1、順序語句
2、并行語句
重點內容:順序語句和并行語句1第3章VHDL基本描述語句順序語句就是在語句的執(zhí)行過程中,語句的執(zhí)行順序是按照語句的書寫順序一個語句一個語句地執(zhí)行的。順序語句只能出現(xiàn)在進程、過程和函數(shù)中,用以定義在進程、過程和函數(shù)中所執(zhí)行的算法。并發(fā)語句是并行執(zhí)行的。例如進程語句,在一個結構體中的各進程語句是并發(fā)執(zhí)行的。23.1VHDL中的順序描述語句賦值語句Wait語句If語句Case語句Loop語句Next語句Null語句斷言語句過程調用語句33.1.1信號代入語句和變量賦值語句信號代入語句的書寫格式:
目標信號<=表達式;該語句表示將代入符號“<=”右邊表達式的值賦給左的目標信號,注意代入符號兩邊的信號和表達式的數(shù)據(jù)型和長度必須保持一致。變量只能在VHDL源代碼的順序部分進行說明和使用,只能出現(xiàn)在進程、過程和函數(shù)內。變量賦值語句的書寫格式:
目標變量:=表達式;
43.1.2Wait語句在VHDL源代碼中的進程總是處于兩種狀態(tài):執(zhí)行和掛起。Wait語句可以控制進程的執(zhí)行或掛起。當進程執(zhí)行到wait語句時將被掛起,并等待wait語句條件滿足時進程再次被執(zhí)行。有4種不同的方法來描述一個wait語句。
wait——無限等待
waiton——敏感信號量變化
waituntil——條件滿足
waitfor——時間到51.WAIT(無限等待語句)
這種形式的WAIT語句在關鍵字“WAIT”后面不帶任何信息,是無限等待的情況。2.WAITON信號表(敏感信號等待語句)第3章VHDL基本描述語句waiton語句的完整書寫格式:
waiton敏感信號[,敏感信號];
waiton語句使進程掛起,直到敏感信號表中的某個信號發(fā)生了變化才能夠把進程激活。6例[A]PROCESSBEGINy<=aANDb;WAITONa,b;ENDPROCESS;例[B]PROCESS(a,b)BEGINy<=aANDb;
ENDPROCESS;
①在使用WAITON語句的進程中,敏感信號量應寫在進程中的WAITON語句后面;②在不使用WAITON語句的進程中,敏感信號量應在開頭的關鍵詞PROCESS后面的敏感信號表中列出。
③VHDL規(guī)定,已列出敏感信號表的進程不能使用任何形式的WAIT語句。
第3章VHDL基本描述語句3.1.2Wait語句7例:異步復位的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語句需滿足以下條件:①在條件表達式中所含的信號發(fā)生了變化;②此信號改變后,且滿足WAITUNTIL語句中表達式的條件。這兩個條件缺一不可,且必須按照上述順序來完成。第3章VHDL基本描述語句3.1.2Wait語句waituntil語句的完整書寫格式:
waituntil條件表達式;waituntil語句將使進程掛起,直到該條件表達式返回一個為“true”的值,進程才能夠再次被啟動。當表達式中任何一個信號有事件發(fā)生時,就會立即對該表達式進行計算。9WAITUNTIL語句有以下三種表達方式:
WAITUNTIL信號=VALUE;
WAITUNTIL信號’EVENTAND信號=VALUE;
WAITUNTIL信號’STABLEAND信號=VALUE;例如:
WAITUNTILclock=“1”;
WAITUNTILrising_edge(clk);
WAITUNTILclk=‘1’ANDclk’EVENT;
WAITUNTILNOTclk’STABLEANDclk=“1”;
一般的,在一個進程中使用了WAIT語句后,綜合器會綜合產(chǎn)生時序邏輯電路。時序邏輯電路的運行依賴WAITUNTIL表達式的條件,同時還具有數(shù)據(jù)存儲的功能。第3章VHDL基本描述語句10例:同步復位的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時間表達式(超時等待語句)例[A]:WAITFOR40ns;
在該語句中,時間表達式為常數(shù)40ns,當進程執(zhí)行到該語句時,將等待40ns,經(jīng)過40ns之后,進程執(zhí)行WAITFOR的后繼語句。例[B]:WAITFOR(a*(b+c));
在此語句中,(a*(b+c))為時間表達式,WAITFOR語句在執(zhí)行時,首先計算表達式的值,然后將計算結果返回作為該語句的等待時間。
第3章VHDL基本描述語句125.多條件等待語句
Wait語句可以同時使用多個等待條件。在多條件等待語句的表達式中,至少應該有一個值包含信號。例:waitonabuntil(c’eventandc=‘1’)for10ns;第3章VHDL基本描述語句13If語句是在VHDL描述硬件電路的過程中使用最頻繁的語句。If語句的完整書寫格式:
if<條件>then<順序語句>;
[elsif<條件>then<順序語句>;][elsif<條件>then<順序語句>;]……[else<順序語句>;]endif;從if開始到endif結束,endif要分開寫條件是一個布爾表達式,返回值為布爾類型。當條件滿足時執(zhí)行接下來的順序語句;當條件不滿足時就去執(zhí)行接下來的順序語句elsif子句或else子句或結束if語句。根據(jù)if語句的完整書寫格式,If語句的三種常用形式。3.1.3IF語句143.1.3IF語句1、門閂控制語句IF<條件>THEN
<順序語句>;
ENDIF;
第3章VHDL基本描述語句15
當程序執(zhí)行到這種門閂控制型IF語句時,首先判斷語句中所指定的條件是否成立。如果條件成立,則程序繼續(xù)執(zhí)行IF語句中所含的順序處理語句;如果條件不成立,程序將跳過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;
當IF條件成立時,程序執(zhí)行THEN和ELSE之間的順序語句部分;當IF語句的條件得不到滿足時,程序執(zhí)行ELSE和ENDIF之間的順序處理語句。即依據(jù)IF所指定的條件是否滿足,程序可以進行兩條不同的執(zhí)行路徑。
第3章VHDL基本描述語句17例:二選一電路結構體的描述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語句,實際上就是條件嵌套。它設置了多個條件,當滿足所設置的多個條件之一時,就執(zhí)行該條件后的順序處理語句。當所有設置的條件都不滿足時,程序執(zhí)行ELSE和ENDIF之間的順序處理語句。第3章VHDL基本描述語句19例:利用多選控制語句設計的四選一多路選擇器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<表達式>iswhen<選擇>=><順序語句>;
when<選擇>=><順序語句>;
……
whenothers=><順序語句>;
endcase;Case語句中如果表達式的值與某一個when語句的選擇值或與others值相匹配,則執(zhí)行它們后面所跟的順序執(zhí)行語句,執(zhí)行完順序語句后將結束該case語句。Case語句中的所有條件必須被枚舉,不允許when語句后的選擇有相同的。When語句后面的選擇值必須是表達式的所有取值,不能遺漏??梢岳胦thers來表示所有具有相同操作的選擇。Case語句中的when語句可以顛倒次序而不影響操作,但保留字others必須放在作后面。22當執(zhí)行到CASE語句時,首先計算CASE和IS之間的表達式的值,然后根據(jù)條件語句中與之相同的選擇值,執(zhí)行對應的順序語句,最后結束CASE語句。第3章VHDL基本描述語句在case語句中的“when<選擇>=><順序語句>;”有四種表示形式:
When值=><順序語句>;When值|值|…|值=><順序語句>;--表示并行關系
When值to值=><順序語句>;--表示范圍
Whenothers=><順序語句>;23CASE語句需要注意的幾點(1)CASE語句中每一條語句的選擇值只能出現(xiàn)一次,即不能有相同選擇值的條件語句出現(xiàn)。(2)CASE語句執(zhí)行中必須選中,且只能選中所列條件語句中的一條,即CASE語句至少包含一個條件語句。(3)除非所有條件語句中的選擇值能完全覆蓋CASE語句中表達式的取值,否則最末一個條件語句中的選擇必須用“OTHERS”表示,它代表已給出的所有條件語句中未能列出的其他可能的取值。關鍵詞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ī)定重復數(shù)目的重復情況;whileloop循環(huán)將連續(xù)執(zhí)行操作直到控制條件被判斷為“false”。29第3章VHDL基本描述語句1.forloop循環(huán)
Forloop循環(huán)的完整書寫格式為:
[循環(huán)標號:]for循環(huán)變量
in
離散范圍loop<順序處理語句>;
Endloop[循環(huán)標號];循環(huán)標號作為該forloop循環(huán)的標志符;循環(huán)變量的值在每次的循環(huán)中都將發(fā)生變化;循環(huán)變量每取一個值,就要執(zhí)行一次循環(huán)體中的順序處理語句。離散范圍用來指定循環(huán)變量的取值范圍,循環(huán)變量的取值將從取值范圍最左邊的值開始并且遞增到取值范圍最右邊的值,實際上也是限定了循環(huán)的次數(shù)。離散范圍的值不一定指定為整數(shù)值,也可以是其他類型的。只是要保證數(shù)值是離散的就可以。30例:8位奇偶校驗電路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)標號:]while<條件>loop<順序處理語句>;
endloop[循環(huán)標號];MAX+PlusII不支持whileloop語句。循環(huán)標號用來作為該whileloop循環(huán)語句的標志符;Whileloop循環(huán)語句當檢測到保留字while后面的條件滿足時才去執(zhí)行順序處理語句。Whileloop循環(huán)語句在每次執(zhí)行前都要先檢查條件,如檢查出條件為“true”就去執(zhí)行循環(huán)體中的順序處理語句,執(zhí)行完后返回該循環(huán)的開始,將再次檢查條件;如果條件為“false”將結束循環(huán),去執(zhí)行whileloop循環(huán)語句后面的其他語句。3.1.5LOOP語句33例:8位奇偶校驗電路的WHILE_LOOP設計形式
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ù)計算語句,用于循環(huán)語句的控制。
循環(huán)控制條件為布爾表達式,當條件為“真”時,則進行循環(huán),如果條件為“假”,則結束循環(huán)。ARCHITECTUREbehavOFparity_checkISBEGIN
PROCESS(a)
VARIABLEtmp:STD_LOGIC353.1.6next語句VHDL提供了兩種跳出循環(huán)的操作,一種是跳出本次循環(huán)的next語句,另一種是跳出整個循環(huán)的exit語句。Next語句用在loop循環(huán)語句的內部,它可以有條件或者是無條件地結束當前此次循環(huán)并開始下一次的循環(huán)。next語句的完整書寫格式為:
next[循環(huán)標號][when條件];“循環(huán)標號”表明了結束本次循環(huán)后下一次循環(huán)的起始位置?!皐hen條件”則表明了跳出本次循環(huán)的條件。當“循環(huán)標號”和“when條件”省略后則表明只要執(zhí)行到該next語句就立即無條件地跳出本次循環(huán),回到本loop循環(huán)語句地起始位置進行下一次循環(huán)。36例:NEXT語句應用舉例┇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語句,允許設計人員從目前正在執(zhí)行的循環(huán)中跳出。Exit語句的完整書寫格式:
exit[循環(huán)標號][when條件];“循環(huán)標號”表明了要終止的loop循環(huán)標號?!皐hen條件”則表明了終止本循環(huán)的條件。當“循環(huán)標號”和“when條件”省略后則表明只要執(zhí)行到該exit語句就立即無條件地跳出本循環(huán),繼續(xù)執(zhí)行l(wèi)oop循環(huán)語句后面的其他語句。3.1.7exit語句38Exit語句有三種基本的書寫格式:一種是沒有“循環(huán)標志”或“when條件”的書寫格式。執(zhí)行該語句時只從當前所屬的loop循環(huán)語句中跳出。一種是帶有“循環(huán)標號”的書寫格式。當執(zhí)行該語句時,將終止循環(huán)標號所指示的循環(huán)的執(zhí)行。一種是帶有“when條件”的書寫格式。當執(zhí)行到該語句時,只有當條件為真時才會終止循環(huán)標號所指示的循環(huán)的執(zhí)行或跳出當前所屬的loop循環(huán)。第3章VHDL基本描述語句3.1.7exit語句39例:兩個元素位矢量a、b進行比較,當發(fā)現(xiàn)a與b不同時,跳出循環(huán)比較程序并報告比較結果。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描述中的模型添加限制條件,為設計人員報告一條文本的字符串。斷言語句的書寫格式:
assert<條件>report<輸出信息>severity<出錯級別>;在執(zhí)行過程中,斷言語句首先檢查條件的布爾表達式的真假。如果布爾表達式為“true”,則向下執(zhí)行另外一條語句。如果布爾表達式為“false”,斷言語句將輸出一條設計人員規(guī)定的字符串到標準輸出終端,并給出輸出字符串的出錯級別。第3章VHDL基本描述語句41
3.1.9、REPORT語句
REPORT語句不增加硬件任何功能,但提供順序斷言語句的短格式,在仿真時使用REPORT語句可以提高程序的可讀性。REPORT語句的書寫格式為:REPORT輸出信息[SEVERITY出錯級別];第3章VHDL基本描述語句42return語句Return語句只能用在函數(shù)和過程體中,主要用來結束當前的最內層的函數(shù)或者是過程體的執(zhí)行。在過程體中return語句不能有表達式;而函數(shù)體中的return語句必須有一個表達式,它也是結束函數(shù)體執(zhí)行的唯一條件。Return語句的書寫格式如下:
return[表達式];null語句Null語句表示一種只占位置的空操作,它不進行任何動作,執(zhí)行該語句只是使源代碼去執(zhí)行下一個語句。Null語句的書寫格式如下:
null;例:casetmpiswhen0=>q<=d0;when1=>q<=d1;when2=>q<=d2;when3=>q<=d3;whenothers=>null;第3章VHDL基本描述語句433.2并行語句
在VHDL中,并行語句在結構體中的執(zhí)行是同時并發(fā)執(zhí)行的,其書寫次序與其執(zhí)行順序并無關聯(lián),并行語句的執(zhí)行順序是由他們的觸發(fā)事件來決定的。第3章VHDL基本描述語句進程語句塊語句并行信號代入并行斷言語句并行過程調用語句參數(shù)傳遞語句元件例化語句生成語句并行語句的種類:44第3章VHDL基本描述語句3.2.1并行信號代入語句信號代入語句有兩種:在結構體中的進程內使用,作為一種順序語句;在結構體中的進程之外使用,是一種并行語句,稱之為并行信號代入語句。注意:一條信號代入語句和一個信號代入的進程語句是等價的。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;等價于并行信號代入語句46第3章VHDL基本描述語句3.2.1并行信號代入語句信號代入語句有兩種:在結構體中的進程內使用,作為一種順序語句;在結構體中的進程之外使用,是一種并行語句,稱之為并行信號代入語句。注意:一條信號代入語句和一個信號代入的進程語句是等價的。47第3章VHDL基本描述語句3.2.1并行信號代入語句在VHDL中提供了三種并行信號代入語句:
?并發(fā)信號代入語句
?條件信號代入語句
?選擇信號代入語句481.并發(fā)信號代入語句信號代入語句在結構體的進程外出現(xiàn)時,它作為并發(fā)語句的形式出現(xiàn)。并發(fā)信號代入語句在結構體中是并行執(zhí)行的,它們的執(zhí)行順序與書寫順序無關。并發(fā)信號代入語句是靠時間驅動的,只有代入符號“<=”右邊的對象有事件發(fā)生時才會執(zhí)行該語句。常用來進行加法器、乘法器、除法器和比較器等許多邏輯電路的描述。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ù)不同的表達式代入目的信號的語句書寫格式:
<目的信號><=<表達式1>when<條件1>else<表達式2>when<條件2>else<表達式3>when<條件3>else……<表達式n-1>when<條件>else<表達式n>;功能說明:當VHDL源代碼執(zhí)行到該語句時要先進行條件判斷,如果條件滿足,就將條件前面的那個表達式的值代入目的信號;如果條件不滿足,就去判斷下一個條件;最后一個表達式?jīng)]有條件,也就是說在前面條件都不滿足時,就將該表達式的值代入目的信號。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ù)碼管結構體中,用一個條件代入語句來完成所有狀態(tài)的顯示譯碼。在保留字WHEN的前面是驅動顯示數(shù)碼管的七位位矢量;在保留字WHEN的后面是譯碼的條件。53第3章VHDL基本描述語句條件信號代入語句與if語句的區(qū)別:(1)If語句是順序語句,只能在進程中使用;條件信號代入語句是并行語句,必須用在進程之外。(2)If語句中else是可有可無的;條件信號代入語句中的else語句是必須有的。(3)If語句能嵌套使用;條件信號代入語句不能嵌套,不能生成鎖存器。(4)使用if語句來描述不需要太多硬件知識;使用條件信號代入語句則要求設計人員具有較多的硬件電路的知識。2.條件信號代入語句543.選擇信號代入語句第3章VHDL基本描述語句選擇信號代入語句的書寫格式:With<表達式>select<目的信號><=<表達式1>when<條件1>,
<表達式2>when<條件2>,
<表達式3>when<條件3>,
……<表達式n>when<條件n>;功能說明:當VHDL源代碼執(zhí)行到該語句時,目的信號根據(jù)表達式的當前值來進行表達式代入。當表達式的值符合某個條件時,就將條件前的信號代入目的信號;如果條件不符合,語句繼續(xù)向下判斷,直到找到滿足的條件為止。選擇信號代入語句與case語句一樣,必須把表達式的值在條件中都列出來。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并行斷言語句并行斷言語句和順序斷言語句書寫格式一致、功能一致。并行斷言語句用在結構體中,順序斷言語句只能用在進程、函數(shù)和過程中。任何并行斷言語句都對應著一個等價的被動進程語句,被動進程語句沒有輸出,并行斷言語句的執(zhí)行將不會引起任何事件的發(fā)生,只是在斷言條件為“false”時給出一條信息報告。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并行過程調用語句過程調用語句在進程內執(zhí)行時,它是一種順序語句;過程調用語句在結構體中的進程之外執(zhí)行時,它作為并發(fā)語句的形式出現(xiàn)。作為并行過程調用語句,在結構體中它們是并行執(zhí)行的,執(zhí)行順序與書寫順序無關。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并行過程調用語句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并行過程調用語句62
塊(BLOCK)語句可以看作是結構體中的子模塊,塊語句把許多并行語句組合在一起形成一個子模塊,而它本身也是一個并行語句。1、基本結構
[塊標號:]BLOCK[保護表達式][類屬子句[類屬接口表;]];
[端口子句[端口接口表;]];
[塊說明部分]BEGIN<并行語句1><并行語句2>┇ENDBLOCK[塊標號];第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;
在上面的例子中,結構體內含有4個進程語句,這4個進程語句是并行關系,共同形成了一個塊語句。第3章VHDL基本描述語句672、模塊間的信號傳遞和端口映射在編寫VHDL程序時,會遇到塊內的信號或參數(shù)要傳遞到塊外去,塊外的信號或參數(shù)要傳遞到塊內去的情況。解決以上問題的辦法是合理使用PORT和PORTMAP語句。
PORT和PORTMAP語句可以作為塊頭的定義語句,可以用來擴展或增加塊的功能。例: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ù)后并將這些參數(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ù)分別映射為6ns和8ns,以滿足不同工藝、不同材料器件的要求。元件例化語句:將端口a映射到信號a1,端口b映射到b1,端口c映射到out1。753.2.7元件例化語句結構體描述方式就是在多層次的設計中,通過調用庫中的元件或是已經(jīng)設計好的模塊來完成設計實體功能的描述。在結構體中,描述只表示元件(或模塊)和元件(或模塊)之間的互連關系,就像網(wǎng)表一樣。描述元件間的互連關系就是用元件例化語句實現(xiàn)的。在進行元件例化時,首先要進行例化元件的說明,元件說明部分使用component語句,說明在結構體中所調用的模塊。如果所調用的模塊在元件庫中并不存在時,必須要首先進行元件的創(chuàng)建,然后將其放在工作庫中,通過調用工作庫來引用該元件。元件例化語句是一種應用十分廣泛的語句,主要用于模塊化的設計。76component語句的書寫格式為:component<引用元件名>[generic<參數(shù)說明>;]port<端口說明>;endcomponent;其中:“引用元件名”用來指定結構體中的例化元件,該元件必須已經(jīng)存在于調用的工作庫中;generic語句表示需要參數(shù)傳遞說明。component語句對要引用的元件說明以后,就可以在結構體中進行元件例化以使用該元件,元件例化語句的書寫格式為:<標號名:><元件名>[genericmap(參數(shù)映射)]portmap(端口映射);其中:標號名是元件例化的唯一標志。映射語句把元件的參數(shù)和端口與實際連接的信號對應起來,以進行元件的應用。3.2.7元件例化語句771.位置映射:portmap語句中實際信號的書寫順序與component語句中端口說明中的書寫順序保持一致。3.2.7元件例化語句映射方法:位置映射
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國氫冷渦輪發(fā)電機組行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國氣塞母線槽行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國植物保護機械行業(yè)市場深度調研及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025-2030年中國柑橘類水果涂料行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國極簡首飾行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國機頂盒行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國機場除雪車行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 一步到位的2025年主管護師考試試題及答案
- 2025-2030年中國智能水產(chǎn)品行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國智能頭盔行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 老年人智能手機培訓課件
- 高端醫(yī)療健康中心行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 2025年中國人壽招聘筆試筆試參考題庫附帶答案詳解
- 2025年河北承德辰飛供電服務有限公司招聘筆試參考題庫含答案解析
- 視覺訓練原理與概述吳飛課件
- 中藥藥膳餐廳連鎖經(jīng)營行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 深圳高級中學(集團)2025屆高三第三次診斷考數(shù)學試題+答案
- 黃金卷02(天津專用)備戰(zhàn)2025年中考英語模擬卷
- 個人對賭協(xié)議合同范本
- 公立醫(yī)院成本核算指導手冊
- 第16課《有為有不為》公開課一等獎創(chuàng)新教學設計
評論
0/150
提交評論