版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1第10章
VHDL基本語句1第10章1第10章1第10章210.1順序語句
10.1.1賦值語句
信號賦值語句變量賦值語句10.1.2IF語句
10.1.3CASE語句
單個普通數(shù)值,如6。數(shù)值選擇范圍,如(2TO4)。并列數(shù)值,如310。混合方式,以上三種方式的混合。
VHDL有6種基本順序語句:賦值語句、流程控制語句、等待語句、子程序調(diào)用語句、返回語句、空操作語句.多條件選擇值表達(dá)式的4種形式210.1順序語句10.1.1賦值語句信號賦值語210.1順序語句10.1.1賦值語句信號賦值語3(1)IF
條件句THEN
順序語句
ELSIF
條件句THEN
順序語句
…
ELSE
順序語句
ENDIF;(2)IF
條件句THEN
順序語句
ELSE
順序語句
ENDIF;2.IF語句完全I(xiàn)F語句(3)IF
條件句THEN
順序語句
ENDIF;(4)IF
條件句THEN
順序語句
ELSIF
條件句THEN
順序語句
ENDIF;不完全I(xiàn)F語句3(1)IF條件句THEN2.IF語句完全3(1)IF條件句THEN2.IF語句完全42.CASE
語句CASE<表達(dá)式>ISWhen<選擇值1>=><順序語句>;When<選擇值2>=><順序語句>;...Whenothers
=><順序語句(或NULL)>;ENDCASE;?選擇值可以有四種不同的表達(dá)方式:
單個普通數(shù)值:如6。
數(shù)值選擇范圍:如(2TO4),表示取值為2、3或4。
并列數(shù)值:如35,表示取值為3或者5。
混合方式:以上三種方式的混合。CASE語句的格式:42.CASE語句CASE<表達(dá)式>IS?選擇42.CASE語句CASE<表達(dá)式>IS?選擇5?用CASE語句應(yīng)該注意三個問題:(1)關(guān)鍵字WHEN的數(shù)量不作限制,但不容許兩個語句用一個值;(2)所有WHEN后面的值在CASE語句中合起來的值是值域中的全部;(3)WHEN語句的次序可以任意排定。
?CASE語句是VHDL提供的另一種形式的控制語句,每當(dāng)單個表達(dá)式的值在多個起作用的項(xiàng)中選擇時,用此語句是較合適的,它根據(jù)所給表達(dá)式的值或域,選擇“=>”后面的執(zhí)行語句。5?用CASE語句應(yīng)該注意三個問題:(5?用CASE語句應(yīng)該注意三個問題:(6[例]:用VHDL設(shè)計(jì)7段16進(jìn)制譯碼器用CASE語句完成真值表的功能向7段數(shù)碼管輸出信號,最高位控制小數(shù)點(diǎn)6[例]:用VHDL設(shè)計(jì)7段16進(jìn)制譯碼器用CASE語句完成6[例]:用VHDL設(shè)計(jì)7段16進(jìn)制譯碼器用CASE語句完成7注意,此語句必須加入4位加法計(jì)數(shù)器7段譯碼器8位總線輸出信號輸出one;7注意,此語句必須加入4位加法7段譯碼器8位總線輸出信號輸出7注意,此語句必須加入4位加法7段譯碼器8位總線輸出信號輸出8KX康芯科技【例10-1】LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux41ISPORT(s4,s3,s2,s1:INSTD_LOGIC;z4,z3,z2,z1:OUTSTD_LOGIC);ENDmux41;
ARCHITECTUREactivOFmux41ISSIGNALsel:INTEGERRANGE0TO110;BEGINPROCESS(sel,s4,s3,s2,s1)BEGINsel<=0;--輸入初始值
IF(s1='1')THENsel<=sel+1;ELSIF(s2='1')THENsel<=sel+2;ELSIF(s3='1')THENsel<=sel+4;ELSIF(s4='1')THENsel<=sel+8;ELSENULL;--注意,這里使用了空操作語句
ENDIF;z1<='0';z2<='0';z3<='0';z4<='0';--輸入初始值
CASEselISWHEN0=>z1<='1';--當(dāng)sel=0時選中
WHEN13=>z2<='1';--當(dāng)sel為1或3時選中
WHEN4To72=>z3<='1';--當(dāng)sel為2、4、5、6或7時選中
WHENOTHERS=>z4<='1';--當(dāng)sel為8~110中任一值時選中
ENDCASE;
ENDPROCESS;
ENDactiv;
4選1選擇器:根據(jù)4位輸入碼來確定4位輸出中哪一位輸出為1.8KX康芯科技【例10-1】4選1選擇器:根據(jù)4位輸入碼來確8KX康芯科技【例10-1】4選1選擇器:根據(jù)4位輸入碼來確910.1順序語句
10.1.3CASE語句【例10-2】SIGNALvalue:INTEGERRANGE0TO110;SIGNALout1:STD_LOGIC;...CASEvalueIS--缺少以WHEN引導(dǎo)的條件句
ENDCASE;
...CASEvalueISWHEN0=>out1<='1';--value2~110的值未包括進(jìn)去
WHEN1=>out1<='0';ENDCASE...CASEvalueISWHEN0TO10=>out1<='1';--選擇值中10~10的值有重疊
WHEN10TO110=>out1<='0';ENDCASE;910.1順序語句10.1.3CASE語句【例10910.1順序語句10.1.3CASE語句【例101010.1順序語句
10.1.3CASE語句與IF語句相比,CASE語句組的程序可讀性比較好,這是因?yàn)樗褩l件中所有可能出現(xiàn)的情況全部列出來了,可執(zhí)行條件一目了然.而且CASE語句的執(zhí)行過程即條件性是獨(dú)立的,排它的,而不像IF語句那樣有一個逐項(xiàng)條件順序比較的過程.CASE中條件句的次序是不重要的,其運(yùn)行方式更接近于并行方式.一般地,綜合后對相同的邏輯功能,CASE語句比IF語句的描述耗用更多的硬件資源,不但如此,對于有的邏輯,CASE語句無法描述.1010.1順序語句10.1.3CASE語句與IF1010.1順序語句10.1.3CASE語句與IF1110.1.4LOOP語句(1)單個LOOP語句,其語法格式如下:
[LOOP標(biāo)號:]LOOP
順序語句
ENDLOOP[LOOP標(biāo)號
];...L2:LOOPa:=a+1;EXITL2WHENa>10;--當(dāng)a大于10時跳出循環(huán)
ENDLOOPL2;...1110.1.4LOOP語句(1)單個LOOP語句,1110.1.4LOOP語句(1)單個LOOP語句,1210.1.4LOOP語句(2)FOR_LOOP語句,語法格式如下:
[LOOP標(biāo)號:]FOR循環(huán)變量IN循環(huán)次數(shù)范圍
LOOP
順序語句
ENDLOOP[LOOP標(biāo)號];
FOR后的”循環(huán)變量”是一個臨時變量,屬LOOP語句的局部變量,不必事先定義.這個變量只能作為賦值源,不能被賦值,它由LOOP語句自動定義.使用時應(yīng)當(dāng)注意,在LOOP語句范圍內(nèi)不要再使用其他與此循環(huán)變量同名的標(biāo)識符.“循環(huán)次數(shù)范圍”規(guī)定LOOP語句中的順序語句被執(zhí)行次數(shù).循環(huán)變量從范圍初值開始,每執(zhí)行完一次順序增1,直至最大值.1210.1.4LOOP語句(2)FOR_LOOP語1210.1.4LOOP語句(2)FOR_LOOP語13【例10-4】LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;ENTITYp_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDp_check;
ARCHITECTUREoptOFp_checkISSIGNALtmp:STD_LOGIC;BEGINPROCESS(a)BEGINtmp<='0';FORnIN0TO7LOOPtmp<=tmpXORa(n);ENDLOOP;y<=tmp;ENDPROCESS;ENDopt;奇校驗(yàn)就是看2進(jìn)制數(shù)的1的個數(shù)為奇數(shù)
就在校驗(yàn)位填0
偶數(shù)就填1
使1的個數(shù)變成奇數(shù)個.偶校驗(yàn)相反
把1的個數(shù)變成偶數(shù).
然后傳送數(shù)據(jù),接收后在做相應(yīng)的奇偶校驗(yàn)判斷是否有位傳送錯誤13【例10-4】奇校驗(yàn)就是看2進(jìn)制數(shù)的1的個數(shù)為奇數(shù)
13【例10-4】奇校驗(yàn)就是看2進(jìn)制數(shù)的1的個數(shù)為奇數(shù)
11410.1.4LOOP語句【例10-5】SIGNALa,b,c:STD_LOGIC_VECTOR(1TO3);...FORnIN1To3LOOPa(n)<=b(n)ANDc(n);ENDLOOP;此段程序等效于順序執(zhí)行以下三個信號賦值操作:a(1)<=b(1)ANDc(1);a(2)<=b(2)ANDc(2);a(3)<=b(3)ANDc(3);1410.1.4LOOP語句【例10-5】1410.1.4LOOP語句【例10-5】1410.11510.1順序語句
10.1.10NEXT語句NEXT;
--第一種語句格式NEXTLOOP標(biāo)號;
--第二種語句格式NEXTLOOP標(biāo)號
WHEN條件表達(dá)式;
--第三種語句格式
對于第一種格式,當(dāng)LOOP內(nèi)的順序語句執(zhí)行到NEXT語句時,即刻無條件終止當(dāng)前的循環(huán),跳回到本次循環(huán)LOOP語句處,開始下一次循環(huán).對于第二種格式,與第一種功能基本相似.只是在有多重LOOP語句嵌套時,前者可以跳轉(zhuǎn)到指定標(biāo)號的LOOP語句處.對于第三種格式,分句”WHEN條件表達(dá)式”是NEXT執(zhí)行的條件,如果條件表達(dá)式為TRUE,則執(zhí)行NEXT語句,進(jìn)入跳轉(zhuǎn)操作,否則繼續(xù)向下執(zhí)行.1510.1順序語句10.1.10NEXT語句N1510.1順序語句10.1.10NEXT語句N1610.1順序語句
10.1.10NEXT語句【例10-6】...L1:FORcnt_valueIN1TO8LOOPs1:a(cnt_value):='0';NEXTWHEN(b=c);s2:a(cnt_value+8):='0';ENDLOOPL1;1610.1順序語句10.1.10NEXT語句【1610.1順序語句10.1.10NEXT語句【1710.1順序語句
10.1.10NEXT語句【例10-7】...L_x:FORcnt_valueIN1TO8LOOPs1:a(cnt_value):='0';k:=0;L_y:LOOPs2:b(k):='0';NEXTL_xWHEN(e>f);s3:b(k+8):='0';k:=k+1;NEXTLOOPL_y;NEXTLOOPL_x;...嵌套LOOP語句跳轉(zhuǎn)到標(biāo)號處1710.1順序語句10.1.10NEXT語句【1710.1順序語句10.1.10NEXT語句【1810.1.6EXIT語句EXIT;
--第一種語句格式EXITLOOP標(biāo)號;
--第二種語句格式EXITLOOP標(biāo)號
WHEN條件表達(dá)式;--第三種語句格式
EXIT的每種格式都與NEXT語句的格式和功能類似.所不同的是,NEXT是跳轉(zhuǎn)到LOOP語句的起點(diǎn),而EXIT是跳轉(zhuǎn)方向是LOOP標(biāo)號制定的LOOP循環(huán)語句的結(jié)束處,即完全跳出指定的循環(huán),并開始執(zhí)行此循環(huán)外的語句.這就是說,NEXT語句是轉(zhuǎn)向LOOP語句的起始點(diǎn),而EXIT語句則是轉(zhuǎn)向LOOP語句的終點(diǎn).1810.1.6EXIT語句EXIT;1810.1.6EXIT語句EXIT;1910.1.6EXIT語句【例10-8】SIGNALa,b:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALa_less_then_b:Boolean;...a_less_then_b<=FALSE;--設(shè)初始值
FORiIN1DOWNTO0LOOPIF(a(i)='1'ANDb(i)='0')THENa_less_then_b<=FALSE;--a>bEXIT;ELSIF(a(i)='0'ANDb(i)='1')THENa_less_then_b<=TRUE;--a<bEXIT;ELSENULL;ENDIF;ENDLOOP;--當(dāng)
i=1時返回LOOP語句繼續(xù)比較
1910.1.6EXIT語句【例10-8】1910.1.6EXIT語句【例10-8】1910.12010.1順序語句
10.1.7WAIT語句WAIT;
--第一種語句格式WAITON信號表;
--第二種語句格式
WAITUNTIL條件表達(dá)式;
--第三種語句格式WAITFOR時間表達(dá)式;
--第四種語句格式,超時等待語句
2010.1順序語句10.1.7WAIT語句WA2010.1順序語句10.1.7WAIT語句WA2110.1.7WAIT語句WAIT;
--第一種語句格式WAITON信號表;
--第二種語句格式
WAITUNTIL條件表達(dá)式;
--第三種語句格式WAITFOR時間表達(dá)式;
--第四種語句格式,超時等待語句
第一種語句格式中,未設(shè)置停止掛起條件的表達(dá)式,表示永遠(yuǎn)掛起第二種格式稱為敏感信號等待語句,在信號表中列出的信號是等待語句的敏感信號,當(dāng)處于等待狀態(tài)時,敏感信號的任何變化將結(jié)束掛起,再次啟動進(jìn)程.(已列出敏感量的進(jìn)程中不能使用任何形式的WAIT語句).
一般地,WAIT語句可用于進(jìn)程中的任何地方.2110.1.7WAIT語句WAIT;2110.1.7WAIT語句WAIT;2210.1順序語句
10.1.7WAIT語句【例10-9】SIGNALs1,s2:STD_LOGIC;...PROCESSBEGIN...WAITONs1,s2;ENDPROCESS;
2210.1順序語句10.1.7WAIT語句【例2210.1順序語句10.1.7WAIT語句【例2310.1.7WAIT語句【例10-10】(a)WAIT_UNTIL結(jié)構(gòu)
(b)WAIT_ON結(jié)構(gòu)
...LOOPWaituntilenable='1';Waitonenable;...EXITWHENenable='1';
ENDLOOP;WAIT_UNTIL結(jié)構(gòu)稱為條件等待語句,相對于第二種語句格式,條件等待語句格式中又多了一種重新啟動進(jìn)程的條件,即被此語句掛起的進(jìn)程需順序滿足如下兩個條件,進(jìn)程才能脫離掛起狀態(tài).在條件表達(dá)式中所含的信號發(fā)生了改變此信號改變后,且滿足WAIT語句所設(shè)的條件等效2310.1.7WAIT語句【例10-10】WAIT_2310.1.7WAIT語句【例10-10】WAIT_2410.1.7WAIT語句WAITUNTIL信號=Value;--(1)WAITUNTIL信號’EVENTAND信號=Value;--(2)WAITUNTILNOT信號’STABLEAND信號=Value;--(3)WAITUNTILclock='1';WAITUNTILrising_edge(clock);WAITUNTILNOTclock’STABLEANDclock='1';WAITUNTILclock='1'ANDclock’EVENT;一般地,只有WAIT_UNTIL格式的等待語句可以被綜合器接受(其余格式語句只能在VHDL仿真器中使用),3種表達(dá)方式:如果設(shè)clock為時鐘信號輸入端,以下4條語句所設(shè)的進(jìn)程啟動條件都是時鐘上升沿,所以他們對應(yīng)的硬件結(jié)構(gòu)是一樣的.與ENENT函數(shù)相反,在δ時間內(nèi)無事件發(fā)生2410.1.7WAIT語句WAITUNTIL信2410.1.7WAIT語句WAITUNTIL信2510.1順序語句
10.1.7WAIT語句【例10-11】PROCESSBEGINWAITUNTILclk='1';ave<=a;WAITUNTILclk='1';ave<=ave+a;WAITUNTILclk='1';ave<=ave+a;WAITUNTILclk='1';ave<=(ave+a)/4;ENDPROCESS;完成硬件求平均的功能.4個時鐘脈沖后將獲得4個數(shù)值的平均值.1個脈沖2個脈沖2510.1順序語句10.1.7WAIT語句【例2510.1順序語句10.1.7WAIT語句【例2610.1順序語句
10.1.7WAIT語句【例10-12】PROCESSBEGINrst_loop:LOOPWAITUNTILclock='1'ANDclock’EVENT;--等待時鐘信號NEXTrst_loopWHEN(rst='1');--檢測復(fù)位信號rstx<=a;--無復(fù)位信號,執(zhí)行賦值操作WAITUNTILclock='1'ANDclock’EVENT;--等待時鐘信號NEXTrst_loopWhen(rst='1');--檢測復(fù)位信號rsty<=b; --無復(fù)位信號,執(zhí)行賦值操作
ENDLOOPrst_loop;ENDPROCESS;2610.1順序語句10.1.7WAIT語句【例2610.1順序語句10.1.7WAIT語句【例27【例10-13】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshifterISPORT(data:INSTD_LOGIC_VECTOR(7DOWNTO0);shift_left:INSTD_LOGIC;shift_right:INSTD_LOGIC;clk:INSTD_LOGIC;reset:INSTD_LOGIC;mode:INSTD_LOGIC_VECTOR(1DOWNTO0);qout:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDshifter;ARCHITECTUREbehaveOFshifterISSIGNALenable:STD_LOGIC;BEGIN
27【例10-13】27【例10-13】27【例10-13】28
BEGINPROCESSBEGINWAITUNTIL(RISING_EDGE(clk));--等待時鐘上升沿
IF(reset='1')THENqout<="00000000";ELSECASEmodeISWHEN"01"=>qout<=shift_right&qout(7DOWNTO1);--右移
WHEN"10"=>qout<=qout(6DOWNTO0)&shift_left;--左移
WHEN"11"=>qout<=data;--并行加載
WHENOTHERS=>NULL;ENDCASE;ENDIF;ENDPROCESS;ENDbehave;2828282910.1順序語句
10.1.9RETURN語句RETURN;--用于過程RETURN表達(dá)式;
--用于函數(shù),有返回值
【例10-16】PROCEDURErs(SIGNALs,r:INSTD_LOGIC;SIGNALq,nq:INOUTSTD_LOGIC)ISBEGINIF(s='1'ANDr='1')THENREPORT"Forbiddenstate:sandrarequualto'1'";RETURN;ELSEq<=sANDnqAFTER5ns;nq<=sANDqAFTER5ns;ENDIF;ENDPROCEDURErs;2910.1順序語句10.1.9RETURN語句2910.1順序語句10.1.9RETURN語句3010.1順序語句
【例10-17】FUNCTIONopt(a,b,opr:STD_LOGIC)RETURNSTD_LOGICISBEGINIF(opr='1')THENRETURN(aANDb);ELSERETURN(aORb);ENDIF;ENDFUNCTIONopt;10.1.10空操作語句
CASEOpcodeISWHEN"001"=>tmp:=regaANDregb;WHEN"101"=>tmp:=regaORregb;WHEN"110"=>tmp:=NOTrega;WHENOTHERS=>NULL;ENDCASE;3010.1順序語句【例10-17】10.1.103010.1順序語句【例10-17】10.1.103110.2并行語句
并行信號賦值語句(ConcurrentSignalAssignments)。
進(jìn)程語句(ProcessStatements)。
塊語句(BlockStatements)。條件信號賦值語句(SelectedSignalAssignments)。元件例化語句(ComponentInstantiations),其中包括類屬配置語句。生成語句(GenerateStatements)。并行過程調(diào)用語句(ConcurrentProcedureCalls)。ARCHITECTURE結(jié)構(gòu)體名
OF實(shí)體名
IS
說明語句
BEGIN
并行語句ENDARCHITECTURE
結(jié)構(gòu)體名
3種形式:簡單信號賦值條件信號賦值選擇信號賦值3110.2并行語句
3110.2并行語句
32[例]:2選1多路選擇器的VHDL描述LIBRARYieee;USEieee.std_logic_1164.all;ENTITYmux21aIS
PORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGIN
y<=(aAND(NOTs))OR(bANDs);
ENDARCHITECTUREone;實(shí)體結(jié)構(gòu)體1.簡單的信號賦值語句
?
賦值語句的格式:<對象>=<表達(dá)式>32[例]:2選1多路選擇器的VHDL描述LIBRARY32[例]:2選1多路選擇器的VHDL描述LIBRARY33[例]:下面的兩個結(jié)構(gòu)體在功能上是等價的。ENTITYexeIS
PORT(a1,a2:INBIT;
b1,b2:OUTBIT);
ENDexe;ARCHITECTUREexe_arc1OFexeIS
BEGIN
b1<=a1ANDb2;
b2<=(NOTa1)ORa2;
ENDexe_arc1;ARCHITECTUREexe_arc2OFexeIS
BEGIN
b2<=(NOTa1)ORa2;
b1<=a1ANDb2;
ENDexe_arc2;a1a2b1b233[例]:下面的兩個結(jié)構(gòu)體在功能上是等價的。ENTITY33[例]:下面的兩個結(jié)構(gòu)體在功能上是等價的。ENTITY34將第一個滿足WHEN后賦值條件所對應(yīng)的表達(dá)式的值,賦給賦值目標(biāo)信號。條件信號賦值語句的格式如下:
<賦值目標(biāo)信號><=<表達(dá)式1>WHEN<賦值條件1>ELSE
<表達(dá)式2>WHEN<賦值條件2>ELSE
…<表達(dá)式n>;2.條件賦值語句數(shù)據(jù)類型:布爾量條件測試的順序性34將第一個滿足WHEN后賦值條件所對應(yīng)的表達(dá)式的值,賦給賦34將第一個滿足WHEN后賦值條件所對應(yīng)的表達(dá)式的值,賦給賦35LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYmux4IS
PORT(I0,I1,I2,I3,A,B:INstd_logic;
Q:OUTstd_logic);
ENDmux4;ARCHITECTUREmux4_arcOFmux4IS
BEGIN
Q<=I0WHENA=‘0’ANDB=‘0’ELSE
I1WHENA=‘1’ANDB=‘0’ELSE
I2WHENA=‘0’ANDB=‘1’ELSE
I3;ENDmux4_arc;[例]:四路數(shù)據(jù)選擇器VHDL程序I0I1I2I3AQmux4B35LIBRARYieee;35LIBRARYieee;36當(dāng)選擇信號的值滿足條件的子句時,將此子句表達(dá)式中的值賦給賦值目標(biāo)信號。選擇信號賦值語句的格式如下:
WITH<選擇表達(dá)式>SELECT
<賦值目標(biāo)><=<表達(dá)式1>WHEN<選擇值1>,<表達(dá)式2>WHEN<選擇值2>,…<表達(dá)式n>WHEN<選擇值n>;
3.選擇信號賦值語句:包含所有的值條件測試的同期性36當(dāng)選擇信號的值滿足條件的子句時,將此子句表達(dá)式中的值賦給36當(dāng)選擇信號的值滿足條件的子句時,將此子句表達(dá)式中的值賦給3710.2.1并行信號賦值語句
選擇信號賦值語句本身不能在進(jìn)程中應(yīng)用,但其功能卻與進(jìn)程中CASE語句的功能相似.CASE語句的執(zhí)行依賴于進(jìn)程中敏感信號的改變而啟動進(jìn)程,而且要求CASE語句中各子句的條件不能有重疊,必須包含所有的條件.
選擇信號語句中也有敏感量,即關(guān)鍵詞WITH旁的選擇表達(dá)式,每當(dāng)選擇表達(dá)式的值發(fā)生變化時,就將啟動此語句對各子句的選擇值進(jìn)行測試對比,當(dāng)發(fā)現(xiàn)有滿足條件的子句時,就將此子句表達(dá)式中的值賦給賦值目標(biāo)信號.
選擇信號語句對子句條件選擇值的測試具有同期性,不允許有條件重疊的現(xiàn)象,也不允許存在條件涵蓋不全的情況.3710.2.1并行信號賦值語句選擇信號賦值語句3710.2.1并行信號賦值語句選擇信號賦值語句38[例]:四路數(shù)據(jù)選擇器VHDL程序ENTITYselsIS
PORT(d0,d1,d2,d3:INSTD_LOGIC;
s:INSTD_LOGIC_VECTOR(1DOWNTO0);out1:OUTSTD_LOGIC);
ENDsels;ARCHITECTUREsels_arcOFselsISBEGIN
WITHsSELECT
out1<=d0WHEN“00”,
d1WHEN“01”,
d2WHEN“10”,
d3WHENothers;
ENDsels_arc;d0d1d2d3sout1sels38[例]:四路數(shù)據(jù)選擇器VHDL程序ENTITYsel38[例]:四路數(shù)據(jù)選擇器VHDL程序ENTITYsel39LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYmux4IS
PORT(I0,I1,I2,I3,A,B:INstd_logic;
Q:OUTstd_logic);
ENDmux4;ARCHITECTUREmux4_arcOFmux4IS
SIGNALsel:INTEGERRANGE0TO3;
BEGIN
WITHselSELECT
Q<=I0WHEN0,
I1
WHEN1,
I2
WHEN2,
I3WHEN3;
sel<=0WHENA=‘0’ANDB=‘0’ELSE
1WHENA=‘1’ANDB=‘0’ELSE
2WHENA=‘0’ANDB=‘1’ELSE
3;ENDmux4_arc;[例]:四路數(shù)據(jù)選擇器VHDL程序I0I1I2I3AQmux4B39LIBRARYieee;39LIBRARYieee;40KX康芯科技【例10-19】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdecoderISPORT(a,
b,
c:INSTD_LOGIC;data1,data2:INSTD_LOGIC;dataout:OUTSTD_LOGIC);ENDdecoder;ARCHITECTUREconcuntOFdecoderISSIGNALinstruction:STD_LOGIC_VECTOR(2DOWNTO0);
BEGINinstruction<=c&b&a;WITHinstructionSELECTdataout<=data1ANDdata2WHEN"000",
data1ORdata2WHEN"001",
data1NANDdata2WHEN"010",
data1NORdata2WHEN"011",
data1XORdata2WHEN"100",
data1XNORdata2WHEN"101",
'Z'WHENOTHERS;ENDconcunt;40KX康芯科技【例10-19】40KX康芯科技【例10-19】40KX康芯科技【例10-14110.2并行語句
10.2.1并行信號賦值語句
3.選擇信號賦值語句...WITHseltSELECTmuxout<=aWHEN0|1,--0或1bWHEN2TO10,--2或3,或4或10cWHEN6,dWHEN7,'Z'WHENOTHERS;...注意:選擇信號賦值語句的每一子句結(jié)尾是逗號,最后一句是分號;而條件賦值語句每一子句的結(jié)尾沒有任何標(biāo)點(diǎn),只有最后一句有分號.4110.2并行語句
4110.2并行語句
42PROCESS組成PROCESS語句結(jié)構(gòu)進(jìn)程說明順序描述語句敏感信號參數(shù)表簡單賦值語句進(jìn)程啟動語句子程序調(diào)用語句順序描述語句進(jìn)程跳出語句42PROCESS組成PROCESS語句結(jié)構(gòu)進(jìn)程說明順序描42PROCESS組成PROCESS語句結(jié)構(gòu)進(jìn)程說明順序描Somethingwhichyoucan■
SomethingwhichyoucanusewithinProcessonly-IF-THEN-ELSIF-ENDIF-
CASE-WHEN-OTHERS-
LOOP-FORSomethingwhichyoucan■SomSomethingwhichyoucan■SomIf-then-elsesyntaxIF__expressionTHEN__statement;__statement;ELSIF__expressionTHEN__statement;__statement;ELSE__statement;__statement;ENDIF;if(a=‘1’)thenc<=“111”;elsif(b=‘0’)thenc<=“101”elsec<=“000”;endif;If-then-elsesyntaxIF__expresIf-then-elsesyntaxIF__expresCase-When-OthersCASE__expressionIS
WHEN
__constant_value=> __statement; __statement;
WHEN__constant_value=> __statement; __statement;
WHENOTHERS=> __statement; __statement;ENDCASE;CASEinstructionISwhen“00”=>accum<=‘0’;when“01”=>accum<=‘1’;whenothers=>accum<=‘Z’;ENDCASE;Case-When-OthersCASE__expCase-When-OthersCASE__expLoop-For__loop_label:FOR__index_variableIN__rangeLOOP__statement;__statement;ENDLOOP__loop_label;FORiIN1to10LOOPi_squared(i):=i*i;ENDLOOP;Loop-For__loop_label:FORiILoop-For__loop_label:FORiI473)進(jìn)程語句要點(diǎn):(1)PROCESS為一無限循環(huán)語句(3)進(jìn)程中的順序語句具有明顯的順序/并行運(yùn)行雙重性(2)進(jìn)程必須由敏感信號的變化來啟動(4)進(jìn)程語句本身是并行語句(5)信號是多個進(jìn)程間的通信線(6)一個進(jìn)程中只允許描述對應(yīng)于一個時鐘信號的同步時序邏輯
473)進(jìn)程語句要點(diǎn):(1)PROCESS為一無限循環(huán)語句473)進(jìn)程語句要點(diǎn):(1)PROCESS為一無限循環(huán)語句4810.2并行語句
10.2.2塊語句結(jié)構(gòu)
BLOCK語句應(yīng)用知識一種將結(jié)構(gòu)體中的并行描述語句進(jìn)行組合的方法,它的主要目的是改善并行語句及其結(jié)構(gòu)的可讀性,或是利用BLOCK的保護(hù)表達(dá)式關(guān)閉某些信號。BLOCK語句的表達(dá)格式如下:塊標(biāo)號
:BLOCK[(塊保護(hù)表達(dá)式)]
接口說明
類屬說明
BEGIN
并行語句ENDBLOCK塊標(biāo)號
;
4810.2并行語句
4810.2并行語句
4910.2并行語句
10.2.2塊語句結(jié)構(gòu)
【例10-21】...
b1:BLOCKSIGNALs1:BIT;BEGINS1<=aANDb;
b2:BLOCKSIGNALs2:BIT;BEGINs2<=cANDd;
b3:BLOCKBEGINZ<=s2;ENDBLOCKb3;ENDBLOCKb2;y<=s1;ENDBLOCKb1;...4910.2并行語句
4910.2并行語句
50【例10-22】LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INstd_logic;sum,cout:OUTstd_logic);ENDf_adder;ARCHITECTUREe_adOFf_adderISSIGNALso1,co1,co2:std_logic;BEGINh_adder1:BLOCK--半加器u1BEGINPROCESS(ain,bin)BEGINso1<=NOT(ainXOR(NOTbin));co1<=ainANDbin;ENDPROCESS;ENDBLOCKh_adder1;h_adder2:BLOCK--半加器u2SIGNALso2:std_logic;BEGINso2<=NOT(so1XOR(NOTcin));co2<=so1andcin;sum<=so2;ENDBLOCKh_adder2;or2:BLOCK--或門u3BEGINPROCESS(co2,co1) BEGINcout<=co2ORco1;ENDPROCESS;ENDBLOCKor2;ENDe_ad;
50【例10-22】50【例10-22】50【例10-22】5110.2并行語句
10.2.3并行過程調(diào)用語句
過程名(關(guān)聯(lián)參量名);【例10-23】...PROCEDUREadder(SIGNALa,b:INSTD_LOGIC;--過程名為adderSIGNALsum:OUTSTD_LOGIC);...adder(a1,b1,sum1);--并行過程調(diào)用
...--在此,a1、b1、sum1即為分別對應(yīng)于a、b、sum的關(guān)聯(lián)參量名
PROCESS(c1,c2);--進(jìn)程語句執(zhí)行
BEGINAdder(c1,c2,s1);--順序過程調(diào)用,在此c1、c2、s1即為分別
--對應(yīng)于a、b、sum的關(guān)聯(lián)參量名ENDPROCESS;5110.2并行語句
5110.2并行語句
5210.2并行語句
10.2.3并行過程調(diào)用語句
【例10-24】PROCEDUREcheck(SIGNALa:INSTD_LOGIC_VECTOR;--在調(diào)用時
SIGNALerror:OUTBOOLEAN)IS--再定位寬
VARIABLEfound_one:BOOLEAN:=FALSE;--設(shè)初始值
BEGINFORiINa'RANGELOOP--對位矢量a的所有的位元素進(jìn)行循環(huán)檢測
IFa(i)='1'THEN--發(fā)現(xiàn)a中有
'1'IFfound_oneTHEN--若found_one為TRUE,則表明發(fā)現(xiàn)了一個以上的'1'ERROR<=TRUE;--發(fā)現(xiàn)了一個以上的'1',令found_one為TRUERETURN;--結(jié)束過程
ENDIF;Found_one:=TRUE;--在a中已發(fā)現(xiàn)了一個'1'EndIF;EndLOOP;--再測a中的其他位
error<=NOTfound_one;--如果沒有任何'1'被發(fā)現(xiàn),error將被置TRUEENDPROCEDUREcheck;
5210.2并行語句10.2.3并行過程調(diào)用語句5210.2并行語句10.2.3并行過程調(diào)用語句5310.2并行語句
10.2.3并行過程調(diào)用語句
...CHBLK:BLOCKSIGNALs1:STD_LOGIC_VECTOR(0TO0);--過程調(diào)用前設(shè)定位矢尺寸
SIGNALs2:STD_LOGIC_VECTOR(0TO1);SIGNALs3:STD_LOGIC_VECTOR(0TO2);SIGNALs4:STD_LOGIC_VECTOR(0TO3);SIGNALe1,e2,e3,e4:Boolean;BEGINCheck(s1,e1);--并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s1、e1Check(s2,e2);--并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s2、e2Check(s3,e3);--并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s3、e3Check(s4,e4);--并行過程調(diào)用,關(guān)聯(lián)參數(shù)名為s4、e4ENDBLOCK;
...5310.2并行語句10.2.3并行過程調(diào)用語句5310.2并行語句10.2.3并行過程調(diào)用語句5410.2并行語句
10.2.10生成語句
生成語句可以簡化為有規(guī)則設(shè)計(jì)結(jié)構(gòu)的邏輯描述。生成語句有一種復(fù)制作用,在設(shè)計(jì)中,只要根據(jù)某些條件,設(shè)定好某一元件或設(shè)計(jì)單位,就可以利用生成語句復(fù)制一組完全相同的并行元件或設(shè)計(jì)單元電路結(jié)構(gòu)。生成語句有以下兩種形式:[標(biāo)號:]FOR循環(huán)變量
IN取值范圍
GENERATE
說明
BEGIN
并行語句
ENDGENERATE[標(biāo)號];5410.2并行語句10.2.10生成語句生成5410.2并行語句10.2.10生成語句生成5510.2并行語句
10.2.10生成語句
[標(biāo)號:]IF條件GENERATE
說明
Begin
并行語句
ENDGENERATE[標(biāo)號];
這兩種語句格式都是由如下4部分組成:1。生成方式:有FOR和IF兩種結(jié)構(gòu),用于規(guī)定并行語句的復(fù)制方式。5510.2并行語句10.2.10生成語句[標(biāo)5510.2并行語句10.2.10生成語句[標(biāo)5610.2并行語句
10.2.10生成語句
2.說明部分:對元件數(shù)據(jù)類型、子程序、數(shù)據(jù)對象做一些局部說明。3.并行語句:生成語句結(jié)構(gòu)中的并行語句是用來“復(fù)制”的基本單元,主要包括元件、進(jìn)程語句、塊語句、并行過程調(diào)用語句、并行信號賦值語句,甚至生成語句,這表示生成語句允許存在嵌套結(jié)構(gòu),因而可用于生成元件的多維陣列結(jié)構(gòu)。4.標(biāo)號:并非必需的5610.2并行語句10.2.10生成語句2.說5610.2并行語句10.2.10生成語句2.說5710.2并行語句
10.2.10生成語句
表達(dá)式TO表達(dá)式;--遞增方式,如1TO10表達(dá)式DOWNTO表達(dá)式;--遞減方式,如10DOWNTO1【例10-210】...COMPONENTcompPORT(x:INSTD_LOGIC;
y:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALa:STD_LOGIC_VECTOR(0TO7);SIGNALb:STD_LOGIC_VECTOR(0TO7);...gen:FORiINa’RANGEGENERATEu1:compPORTMAP(x=>a(i),y=>b(i));ENDGENERATEgen,...5710.2并行語句10.2.10生成語句表達(dá)式5710.2并行語句10.2.10生成語句表達(dá)式5810.2并行語句
10.2.10生成語句
圖10-3生成語句產(chǎn)生的8個相同的電路模塊
5810.2并行語句10.2.10生成語句圖105810.2并行語句10.2.10生成語句圖105910.2并行語句
10.2.10生成語句
【例10-26】鎖存器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLatchISPORT(D,ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYLatch;ARCHITECTUREoneOFLatchISSIGNALsig_save:STD_LOGIC;BEGINPROCESS(D,ENA)BEGINIFENA='1'THENsig_save<=D;ENDIF;Q<=sig_save;ENDPROCESS;ENDARCHITECTUREone;5910.2并行語句10.2.10生成語句【例15910.2并行語句10.2.10生成語句【例160KX康芯科技【例10-27】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSN74373ISPORT(D:INSTD_LOGIC_VECTOR(8DOWNTO1);OEN,G:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(8DOWNTO1));ENDENTITYSN74373;ARCHITECTUREtwoOFSN74373ISSIGNALsigvec_save:STD_LOGIC_VECTOR(8DOWNTO1);BEGINPROCESS(D,OEN,G,sigvec_save)BEGINIFOEN='0'THENQ<=sigvec_save;ELSEQ<="ZZZZZZZZ";ENDIF;IFG='1'THENSigvec_save<=D;ENDIF;ENDPROCESS;ENDARCHITECTUREtwo;ARCHITECTUREoneOFSN74373ISCOMPONENTLatchPORT(D,ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALsig_mid:STD_LOGIC_VECTOR(8DOWNTO1);BEGINGeLatch:FORiNumIN1TO8GENERATELatchx:LatchPORTMAP(D(iNum),G,sig_mid(iNum));ENDGENERATE;Q<=sig_midWHENOEN='0'ELSE"ZZZZZZZZ";--當(dāng)OEN=1時,Q(8)~Q(1)輸出狀態(tài)呈高阻態(tài)ENDARCHITECTUREone;
60KX康芯科技【例10-27】60KX康芯科技【例10-27】60KX康芯科技【例10-261KX康芯科技【例10-28】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYd_ffISPORT(d,clk_s:INSTD_LOGIC;q:OUTSTD_LOGIC;nq:OUTSTD_LOGIC);ENDENTITYd_ff;ARCHITECTUREa_rs_ffOFd_ffISBEGINbin_p_rs_ff:PROCESS(CLK_S)BEGINIFclk_s='1'ANDclk_s'EVENTTHENq<=d;nq<=NOTd;ENDIF;ENDPROCESS;ENDARCHITECTUREa_rs_ff;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcnt_bin_nisGENERIC(n:INTEGER:=6);PORT(q:OUTSTD_LOGIC_VECTOR(0TOn-1);in_1:INSTD_LOGIC);ENDENTITYcnt_bin_n;(接下頁)61KX康芯科技【例10-28】61KX康芯科技【例10-28】61KX康芯科技【例10-262ARCHITECTUREbehvOFcnt_bin_nISCOMPONENTd_ffPORT(d,clk_s:INSTD_LOGIC;Q,NQ:OUTSTD_LOGIC);ENDCOMPONENTd_ff;SIGNALs:STD_LOGIC_VECTOR(0TOn);BEGINs(0)<=in_1;q_1:FORiIN0TOn-1GENERATEdff:d_ffPORTMAP(s(i+1),s(I
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東石油化工學(xué)院《Andoid基礎(chǔ)編程》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等??茖W(xué)校《第一外國語英》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東農(nóng)工商職業(yè)技術(shù)學(xué)院《生物制藥學(xué)科前沿進(jìn)展》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名幼兒師范??茖W(xué)校《促銷策略》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名健康職業(yè)學(xué)院《英國文學(xué)下》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《美國社會與文化》2023-2024學(xué)年第一學(xué)期期末試卷
- 一年級數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)集錦
- 大腦的奧秘:神經(jīng)科學(xué)導(dǎo)論(復(fù)旦大學(xué))學(xué)習(xí)通測試及答案
- 【2022屆走向高考】高三數(shù)學(xué)一輪(北師大版)基礎(chǔ)鞏固:第8章-第1節(jié)-簡單幾何體及其三視圖和直觀圖
- 2022韶山市高考英語閱讀理解及書面表達(dá)精煉(8)及答案
- 單位紅頭文件模板(各類通知、任命通知公函紅頭文件)
- Linux操作系統(tǒng)應(yīng)用(麒麟系統(tǒng))PPT完整全套教學(xué)課件
- 精神壓力分析系統(tǒng)心率變異分析系統(tǒng)-健康管理師團(tuán)隊(duì)課件
- 正說藏傳佛教課件
- 管理科學(xué)技術(shù)名詞
- 醫(yī)美整形BOTOX除皺抗衰專場活動規(guī)劃方案
- 基于單片機(jī)的飛機(jī)發(fā)動機(jī)轉(zhuǎn)速在線檢測系統(tǒng)
- 蒸汽壓力流速流量管徑關(guān)系
- 水墨中式中國風(fēng)書香校園PPT模板
- 2023年新教材人教版高中生物選擇性必修3《生物技術(shù)與工程》全冊各章節(jié)課時練習(xí)題及章末檢測含答案解析
- 生鮮連鎖超市運(yùn)營實(shí)戰(zhàn)手冊
評論
0/150
提交評論