版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
EDA技術(shù)與VHDL第10章VHDL結(jié)構(gòu)8.1VHDL實(shí)體VHDL實(shí)體作為一個(gè)設(shè)計(jì)實(shí)體(獨(dú)立的電路功能結(jié)構(gòu))的組成部分,其功能是對(duì)這個(gè)設(shè)計(jì)實(shí)體與外部電路進(jìn)行接口描述。實(shí)體是設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元,實(shí)體說(shuō)明部分規(guī)定了設(shè)計(jì)單元的輸入輸出接口信號(hào)或引腳,它是設(shè)計(jì)實(shí)體對(duì)外的一個(gè)通信界面。實(shí)體的具體表述和用法已在前面有過(guò)詳細(xì)例解,這里不再重復(fù)。
KX康芯科技8.2VHDL結(jié)構(gòu)體1.結(jié)構(gòu)體的一般語(yǔ)言格式
ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS[說(shuō)明語(yǔ)句]BEGIN[功能描述語(yǔ)句]ENDARCHITECTURE結(jié)構(gòu)體名;
8.2VHDL結(jié)構(gòu)體2.結(jié)構(gòu)體說(shuō)明語(yǔ)句
3.功能描述語(yǔ)句結(jié)構(gòu)
進(jìn)程語(yǔ)句
信號(hào)賦值語(yǔ)句
子程序調(diào)用語(yǔ)句
元件例化語(yǔ)句
8.3VHDL子程序8.3.1VHDL函數(shù)
FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型--函數(shù)首FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型IS--函數(shù)體[說(shuō)明部分]BEGIN順序語(yǔ)句;ENDFUNCTION函數(shù)名;【例8-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEpackexpIS--定義程序包FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)首R(shí)ETURNSTD_LOGIC_VECTOR;FUNCTIONfunc1(a,b,c:REAL)--定義函數(shù)首R(shí)ETURNREAL;FUNCTION"*"(a,b:INTEGER)--定義函數(shù)首R(shí)ETURNINTEGER;FUNCTIONas2(SIGNALin1,in2:REAL)--定義函數(shù)首R(shí)ETURNREAL;END;PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)體RETURNSTD_LOGIC_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語(yǔ)句END;--結(jié)束PACKAGEBODY語(yǔ)句LIBRARYIEEE;--函數(shù)應(yīng)用實(shí)例USEIEEE.STD_LOGIC_1164.ALL;USEWORK.packexp.ALL;ENTITYaxampISPORT(dat1,dat2:INSTD_LOGIC_VECTOR(3DOWNTO0);dat3,dat4:INSTD_LOGIC_VECTOR(3DOWNTO0);out1,out2:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREbhvOFaxampISBEGINout1<=max(dat1,dat2);--用在賦值語(yǔ)句中的并行函數(shù)調(diào)用語(yǔ)句PROCESS(dat3,dat4)BEGINout2<=max(dat3,dat4);--順序函數(shù)調(diào)用語(yǔ)句ENDPROCESS;
END;KX康芯科技8.3VHDL子程序8.3.1VHDL函數(shù)
圖8-110-2例8-1的邏輯電路圖
8.3VHDL子程序【例8-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfuncISPORT(a:INSTD_LOGIC_VECTOR(0to2);m:OUTSTD_LOGIC_VECTOR(0to2));ENDENTITYfunc;ARCHITECTUREdemoOFfuncISFUNCTIONsam(x,y,z:STD_LOGIC)RETURNSTD_LOGICISBEGINRETURN(xANDy)ORz;ENDFUNCTIONsam;BEGINPROCESS(a)BEGINm(0)=sam(a(0),a(1),a(2));m(1)=sam(a(2),a(0),a(1));m(2)=sam(a(1),a(2),a(0));ENDPROCESS;
ENDARCHITECTUREdemo;8.3VHDL子程序8.3.2VHDL重載函數(shù)
【例8-3】(MaxplusII不支持本例)
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEpackexpIS--定義程序包FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)首R(shí)ETURNSTD_LOGIC_VECTOR;FUNCTIONmax(a,b:INBIT_VECTOR)--定義函數(shù)首R(shí)ETURNBIT_VECTOR;FUNCTIONmax(a,b:ININTEGER)--定義函數(shù)首R(shí)ETURNINTEGER;END;
PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)體RETURNSTD_LOGIC_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語(yǔ)句
FUNCTIONmax(a,b:ININTEGER)--定義函數(shù)體RETURNINTEGERISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語(yǔ)句
接下頁(yè)FUNCTIONmax(a,b:INBIT_VECTOR)--定義函數(shù)體RETURNBIT_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語(yǔ)句END;--結(jié)束PACKAGEBODY語(yǔ)句.--以下是調(diào)用重載函數(shù)max的程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEWORK.packexp.ALL;ENTITYaxampISPORT(a1,b1:INSTD_LOGIC_VECTOR(3DOWNTO0);a2,b2:INBIT_VECTOR(4DOWNTO0);a3,b3:ININTEGERRANGE0TO15;c1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);c2:OUTBIT_VECTOR(4DOWNTO0);c3:OUTINTEGERRANGE0TO15);END;ARCHITECTUREbhvOFaxampISBEGINc1<=max(a1,b1);--對(duì)函數(shù)max(a,b:INSTD_LOGIC_VECTOR)的調(diào)用
c2<=max(a2,b2);--對(duì)函數(shù)max(a,b:INBIT_VECTOR)的調(diào)用
c3<=max(a3,b3);--對(duì)函數(shù)max(a,b:ININTEGER)的調(diào)用
END;KX康芯科技【例8-4】LIBRARYIEEE;--程序包首USEIEEE.std_logic_1164.all;USEIEEE.std_logic_arith.all;PACKAGESTD_LOGIC_UNSIGNEDisfunction"+"(L:STD_LOGIC_VECTOR;R:INTEGER)returnSTD_LOGIC_VECTOR;function"+"(L:INTEGER;R:STD_LOGIC_VECTOR)returnSTD_LOGIC_VECTOR;function"+"(L:STD_LOGIC_VECTOR;R:STD_LOGIC)returnSTD_LOGIC_VECTOR;functionSHR(ARG:STD_LOGIC_VECTOR;COUNT:STD_LOGIC_VECTOR)returnSTD_LOGIC_VECTOR;...endSTD_LOGIC_UNSIGNED;
LIBRARYIEEE;--程序包體useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;packagebodySTD_LOGIC_UNSIGNEDisfunctionmaximum(L,R:INTEGER)returnINTEGERisbeginifLRthenreturnL;elsereturnR;endif;end;function"+"(L:STD_LOGIC_VECTOR;R:INTEGER)returnSTD_LOGIC_VECTORisVariableresult:STD_LOGIC_VECTOR(L’range);Beginresult:=UNSIGNED(L)+R;returnstd_logic_vector(result);end;...endSTD_LOGIC_UNSIGNED;KX康芯科技8.3VHDL子程序8.3.3VHDL轉(zhuǎn)換函數(shù)
函數(shù)名功能程序包:STD_LOGIC_1164to_stdlogicvector(A)由bit_vector類型的A轉(zhuǎn)換為std_logic_vectorto_bitvector(A)由std_logic_vector轉(zhuǎn)換為bit_vectorto_stdlogic(A)由bit轉(zhuǎn)換成std_logicto_bit(A)由std_logic轉(zhuǎn)換成bit程序包:STD_LOGIC_ARITHconv_std_logic_vector(A,位長(zhǎng))將整數(shù)integer轉(zhuǎn)換成std_logic_vector類型,A是整數(shù)conv_integer(A)將std_logic_vector轉(zhuǎn)換成整數(shù)integer程序包:STD_LOGIC_UNSIGNEDconv_integer(A)由std_logic_vector轉(zhuǎn)換成integer表8-1IEEE庫(kù)類型轉(zhuǎn)換函數(shù)表
8.3VHDL子程序8.3.3VHDL轉(zhuǎn)換函數(shù)
【例8-5】LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYexgISPORT(a,b:inbit_vector(3downto0);q:outstd_logic_vector(3downto0));end;architecturertlofexgisbeginq<=to_stdlogicvector(aandb);--將位矢量數(shù)據(jù)類型轉(zhuǎn)換成標(biāo)準(zhǔn)邏輯位矢量數(shù)據(jù)end;
8.3VHDL子程序8.3.3VHDL轉(zhuǎn)換函數(shù)
【例8-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;--注意使用了此程序包ENTITYaxampISPORT(a,b,c:INintegerrange0to15;q:OUTstd_logic_vector(3downto0));END;ARCHITECTUREbhvOFaxampISBEGINq<=conv_std_logic_vector(a,4)whenconv_integer(c)=8elseconv_std_logic_vector(b,4);END;
【例8-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEn_packISSUBTYPEnatISIntegerrange0to255;--定義一個(gè)Integer的子類型TYPEBit8ISarray(7downto0)OFstd_logic;--定義一個(gè)數(shù)據(jù)類型FUNCTIONnat_to_Bit8(s:nat)RETURNBit8;Endn_pack;PACKAGEBODYn_packISFUNCTIONnat_to_Bit8(s:nat)RETURNBit8ISVARIABLEDin:Integerrange255downto0;VARIABLERut:Bit8;VARIABLERig:Integer:=2**7;BEGINDin:=s;FORIin7downto0LOOPIFDin/Rig>1THENRut(i):='1';Din:=Din-Rig;ELSERut(i):='0';ENDIF;Rig:=Rig/2;ENDLOOP;RETURNRut;ENDnat_to_Bit8;ENDn_pack;
LIBRARYIEEE;--用戶定義轉(zhuǎn)換函數(shù)應(yīng)用實(shí)例USEIEEE.STD_LOGIC_1164.ALL;USEWORK.n_pack.ALL;ENTITYaxampISPORT(dat:INnat;--注意數(shù)據(jù)類型的定義ou:OUTBit8);--注意數(shù)據(jù)類型的定義END;ARCHITECTUREbhvOFaxampISBEGINou<=nat_to_Bit8(dat);END;8.3VHDL子程序8.3.4VHDL決斷函數(shù)
決斷函數(shù)輸入一般是單一變量,多個(gè)驅(qū)動(dòng)源的信號(hào)值組成非限定數(shù)組,如2個(gè)信號(hào)驅(qū)動(dòng)源,其信號(hào)值組成的數(shù)組是2個(gè)元素長(zhǎng)度;3個(gè)信號(hào)驅(qū)動(dòng)源信號(hào)值組成的數(shù)組是3個(gè)元素長(zhǎng)度,多個(gè)信號(hào)驅(qū)動(dòng)源信號(hào)值組成的未限定數(shù)組可依次類推。但決斷函數(shù)調(diào)用后返回的是單一信號(hào)值,稱斷信號(hào)值。
8.3VHDL子程序8.3.5VHDL過(guò)程
PROCEDURE過(guò)程名(參數(shù)表)--過(guò)程首
PROCEDURE過(guò)程名(參數(shù)表)IS[說(shuō)明部分]BIGIN--過(guò)程體
順序語(yǔ)句;ENDPROCEDURE過(guò)程名
8.3VHDL子程序8.3.5VHDL過(guò)程
PROCEDUREpro1(VARIABLEa,b:INOUTREAL);PROCEDUREpro2(CONSTANTa1:ININTEGER;
VARIABLEb1:OUTINTEGER);PROCEDUREpro3(SIGNALsig:INOUTBIT);8.3VHDL子程序8.3.5VHDL過(guò)程
【例8-8】PROCEDUREprg1(VARIABLEvalue:INOUTBIT_VECTOR(0TO7))ISBEGINCASEvalueISWHEN"0000"=>value:"0101";WHEN"0101"=>value:"0000";WHENOTHERS=>value:"1111";ENDCASE;ENDPROCEDUREprg1;8.3VHDL子程序8.3.5VHDL過(guò)程
【例8-9】
PROCEDUREcomp(a,r:INREAL;m:ININTEGER;v1,v2:OUTREAL)ISVARIABLEcnt:INTEGER;BEGINv1:=1.6*a;--賦初始值v2:=1.0;--賦初始值Q1:FORcntIN1TOmLOOPv2:=v2*v1;EXITQ1WHENv2>v1;--當(dāng)v2>v1,跳出循環(huán)LOOPENDLOOPQ1ASSERT(v2<v1)REPORT"OUTOFRANGE"--輸出錯(cuò)誤報(bào)告SEVERITYERROR;ENDPROCEDUREcomp;【例8-10】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEaxampIS--過(guò)程首定義PROCEDUREnand4a(SIGNALa,b,c,d:INSTD_LOGIC;SIGNALy:OUTSTD_LOGIC);ENDaxamp;PACKAGEBODYaxampIS--過(guò)程體定義PROCEDUREnand4a(SIGNALa,b,c,d:INSTD_LOGIC;SIGNALy:OUTSTD_LOGIC)ISBEGINy<=NOT(aANDbANDcANDd);RETURN;ENDnand4a;ENDaxamp;LIBRARYIEEE;--主程序USEIEEE.STD_LOGIC_1164.ALL;USEWORK.axamp.ALL;ENTITYEXISPORT(e,f,g,h:INSTD_LOGIC;x:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFEXISBEGINnand4a(e,f,g,h,x);并行調(diào)用過(guò)程END;8.3VHDL子程序8.3.6VHDL重載過(guò)程
【例8-11】
PROCEDUREcalcu(v1,v2:INREAL;SIGNALout1:INOUTINTEGER);PROCEDUREcalcu(v1,v2:ININTEGER;SIGNALout1:INOUTREAL);...calcu(20.15,1.42,signl);--調(diào)用第一個(gè)重載過(guò)程calcucalcu(23,320,sign2);--調(diào)用第二個(gè)重載過(guò)程calcu
...8.3VHDL子程序8.3.7子程序調(diào)用語(yǔ)句
1.過(guò)程調(diào)用
過(guò)程名[([形參名=>]實(shí)參表達(dá)式{,[形參名=>]實(shí)參表達(dá)式})];
(1)將IN和INOUT模式的實(shí)參值賦給欲調(diào)用的過(guò)程中與它們對(duì)應(yīng)的形參;(2)執(zhí)行這個(gè)過(guò)程;(3)將過(guò)程中IN和INOUT模式的形參值返回給對(duì)應(yīng)的實(shí)參。
8.3VHDL子程序8.3.7子程序調(diào)用語(yǔ)句
1.過(guò)程調(diào)用
【例8-12】PACKAGEdata_typesIS--定義程序包SUBTYPEdata_elementISINTEGERRANGE0TO3;--定義數(shù)據(jù)類型TYPEdata_arrayISARRAY(1TO3)OFdata_element;ENDdata_types;USEWORK.data_types.ALL;--打開(kāi)以上建立在當(dāng)前工作庫(kù)的程序包data_typesENTITYsortISPORT(in_array:INdata_array;out_array:OUTdata_array);ENDsort;ARCHITECTUREexmpOFsortISBEGINPROCESS(in_array)--進(jìn)程開(kāi)始,設(shè)data_types為敏感信號(hào)PROCEDUREswap(data:INOUTdata_array;--swap的形參名為data、low、highlow,high:ININTEGER)ISVARIABLEtemp:data_element;BEGIN--開(kāi)始描述本過(guò)程的邏輯功能
IF(data(low)>data(high))THEN--檢測(cè)數(shù)據(jù)temp:=data(low);data(low):=data(high);data(high):=temp;ENDIF;ENDswap;--過(guò)程swap定義結(jié)束VARIABLEmy_array:data_array;--在本進(jìn)程中定義變量my_arrayBEGIN--進(jìn)程開(kāi)始
my_array:=in_array;--將輸入值讀入變量swap(my_array,1,2);--my_array、1、2是對(duì)應(yīng)于data、low、high的實(shí)參
swap(my_array,2,3);--位置關(guān)聯(lián)法調(diào)用,
第2、第3元素交換swap(my_array,1,2);--位置關(guān)聯(lián)法調(diào)用,
第1、第2元素再次交換out_array<=my_array;ENDProcess;ENDexmp;
8.3VHDL子程序8.3.7子程序調(diào)用語(yǔ)句
1.過(guò)程調(diào)用
【例8-13】ENTITYsort4isGENERIC(top:INTEGER:=3);PORT(a,b,c,d:INBIT_VECTOR(0TOtop);ra,rb,rc,rd:OUTBIT_VECTOR(0TOtop));ENDsort4;ARCHITECTUREmuxesOFsort4ISPROCEDUREsort2(x,y:INOUTBIT_VECTOR(0TOtop))isVARIABLEtmp:BIT_VECTOR(0TOtop);BEGINIFx>yTHENtmp:=x;x:=y;y:=tmp;ENDIF;ENDsort2;BEGINPROCESS(a,b,c,d)VARIABLEva,vb,vc,vd:BIT_VECTOR(0TOtop);BEGINva:=a;vb:=b;vc:=c;vd:=d;sort2(va,vc);sort2(vb,vd);sort2(va,vb);sort2(vc,vd);sort2(vb,vc);ra<=va;rb<=vb;rc<=vc;rd<=vd;ENDPROCESS;ENDmuxes;
8.3VHDL子程序8.3.7子程序調(diào)用語(yǔ)句
1.過(guò)程調(diào)用
2.函數(shù)調(diào)用函數(shù)調(diào)用與過(guò)程調(diào)用是十分相似的,不同之處是,調(diào)用函數(shù)將返還一個(gè)指定數(shù)據(jù)類型的值,函數(shù)的參量只能是輸入值。
8.3VHDL子程序8.3.8并行過(guò)程調(diào)用語(yǔ)句
過(guò)程名(關(guān)聯(lián)參量名);
【例8-14】...PROCEDUREadder(SIGNALa,b:INSTD_LOGIC;--過(guò)程名為adderSIGNALsum:OUTSTD_LOGIC);...adder(a1,b1,sum1);--并行過(guò)程調(diào)用...--在此,a1、b1、sum1即為分別對(duì)應(yīng)于a、b、sum的關(guān)聯(lián)參量名PROCESS(c1,c2);--進(jìn)程語(yǔ)句執(zhí)行BEGINAdder(c1,c2,s1);--順序過(guò)程調(diào)用,在此c1、c2、s1即為分別對(duì)ENDPROCESS;--應(yīng)于a、b、sum的關(guān)聯(lián)參量名8.3VHDL子程序8.3.8并行過(guò)程調(diào)用語(yǔ)句
【例8-15】PROCEDUREcheck(SIGNALa:INSTD_LOGIC_VECTOR; --在調(diào)用時(shí)SIGNALerror:OUTBOOLEAN)IS --再定位寬VARIABLEfound_one:BOOLEAN:=FALSE; --設(shè)初始值BEGINFORiINa'RANGELOOP--對(duì)位矢量a的所有的位元素進(jìn)行循環(huán)檢測(cè)IFa(i)='1'THEN--發(fā)現(xiàn)a中有'1'IFfound_oneTHEN--若found_one為TRUE,則表明發(fā)現(xiàn)了一個(gè)以上的'1'ERROR<=TRUE;--發(fā)現(xiàn)了一個(gè)以上的'1',令found_one為TRUERETURN;--結(jié)束過(guò)程ENDIF;Found_one:=TRUE;--在a中已發(fā)現(xiàn)了一個(gè)'1'EndIF;EndLOOP;--再測(cè)a中的其他位
error<=NOTfound_one;--如果沒(méi)有任何'1'被發(fā)現(xiàn),error將被置TRUEENDPROCEDUREcheck;8.3VHDL子程序8.3.8并行過(guò)程調(diào)用語(yǔ)句
...CHBLK:BLOCKSIGNALs1:STD_LOGIC_VECTOR(0TO0);--過(guò)程調(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);--并行過(guò)程調(diào)用,關(guān)聯(lián)參數(shù)名為s1、e1Check(s2,e2);--并行過(guò)程調(diào)用,關(guān)聯(lián)參數(shù)名為s2、e2Check(s3,e3);--并行過(guò)程調(diào)用,關(guān)聯(lián)參數(shù)名為s3、e3Check(s4,e4);--并行過(guò)程調(diào)用,關(guān)聯(lián)參數(shù)名為s4、e4ENDBLOCK;...
8.4VHDL庫(kù)8.4.1庫(kù)的種類
1.
IEEE庫(kù)
2.
STD庫(kù)
3.
WORK庫(kù)
4.
VITAL庫(kù)
8.4VHDL庫(kù)8.4.2庫(kù)的用法
USE庫(kù)名.程序包名.項(xiàng)目名
;
USE庫(kù)名.程序包名.ALL;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.STD_ULOGIC;USEIEEE.STD_LOGIC_1164.RISING_EDGE;USEWORK.std_logic_1164.ALL;
8.5VHDL程序包定義程序包的一般語(yǔ)句結(jié)構(gòu)如下:PACKAGE程序包名IS--程序包首
程序包首說(shuō)明部分
END程序包名;PACKAGEBODY程序包名IS--程序包體
程序包體說(shuō)明部分以及包體內(nèi)
END程序包名;8.5VHDL程序包【例8-16】
PACKAGEpaclIS--程序包首開(kāi)始TYPEbyteISRANGE0TO255;--定義數(shù)據(jù)類型byteSUBTYPEnibbleISbyteRANGE0TO15;--定義子類型nibbleCONSTANTbyte_ff:byte:=255;--定義常數(shù)byte_ffSIGNALaddend:nibble;--定義信號(hào)addendCOMPONENTbyte_adder--定義元件PORT(a,b:INbyte;c:OUTbyte;overflow:OUTBOOLEAN);ENDCOMPONENT;FUNCTIONmy_function(a:INbyte)Returnbyte;--定義函數(shù)ENDpacl;--程序包首結(jié)束【例8-17】PACKAGEsevenISSUBTYPEsegmentsisBIT_VECTOR(0TO6);TYPEbcdISRANGE0TO9;ENDseven;USEWORK.seven.ALL;--WORK庫(kù)默認(rèn)是打開(kāi)的,ENTITYdecoderISPORT(input:bcd;drive:outsegments);ENDdecoder;ARCHITECTUREsimpleOFdecoderISBEGINWITHinputSELECTdrive<=B"1111110"WHEN0,B"0110000"WHEN1,B"1101101"WHEN2,B"1111001"WHEN3,B"0110011"WHEN4,B"1011011"WHEN5,B"1011111"WHEN6,B"1110000"WHEN7,B"1111111"WHEN8,B"1111011"WHEN9,
B"0000000"WHENOTHERS;ENDsimple;
KX康芯科技8.6VHDL配置配置語(yǔ)句的一般格式如下:CONFIGURATION配置名OF實(shí)體名IS配置說(shuō)明END配置名;8.7VHDL文字規(guī)則8.7.1數(shù)字
整數(shù):
5,678,0,156E2(=15600),45_234_287(=45234287)實(shí)數(shù):1.335,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499)以數(shù)制基數(shù)表示的文字:SIGNALd1,d2,d3,d4,d5,:INTEGERRANGE0TO255;d1<=10#170#;--(十進(jìn)制表示,等于170)d2<=16#FE#;--(十六進(jìn)制表示,等于254)d3<=2#1111_1110#;--(二進(jìn)制表示,等于254)d4<=8#376#;--(八進(jìn)制表示,等于254)d5<=16#E#E1;--(十六進(jìn)制表示,等于2#1110000#,等于224)物理量文字(VHDL綜合器不接受此類文字)
60s(60秒),100m(100米),k(千歐姆),177A(177安培)8.7VHDL文字規(guī)則8.7.2字符串
(1)文字字符串
"ERROR","BothSandQequalto1","X","BB$CC"(2)數(shù)位字符串B:二進(jìn)制基數(shù)符號(hào),表示二進(jìn)制位0或1,在字符串中的每位表示一個(gè)Bit。
O:八進(jìn)制基數(shù)符號(hào),在字符串中的每一個(gè)數(shù)代表一個(gè)八進(jìn)制數(shù),即代表一個(gè)3位(BIT)的二進(jìn)制數(shù)。
X:十六進(jìn)制基數(shù)符號(hào)(0~F),代表一個(gè)十六進(jìn)制數(shù),即一個(gè)4位的二進(jìn)制數(shù)。
data1<=B"1_1101_1110"--二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長(zhǎng)度是9data2<=O"15"--八進(jìn)制數(shù)數(shù)組,位矢數(shù)組長(zhǎng)度是6data3<=X"AD0"--十六進(jìn)制數(shù)數(shù)組,位矢數(shù)組長(zhǎng)度是12data4<=B"101_010_101_010"--二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長(zhǎng)度是12data5<="101_010_101_010"--表達(dá)錯(cuò)誤,缺B。data6<="0AD0"--表達(dá)錯(cuò)誤,缺X。8.7VHDL文字規(guī)則8.7.3標(biāo)識(shí)符
Decoder_1,F(xiàn)FT,Sig_N,Not_Ack,State0,Idle_Decoder_1 --起始為非英文字母2FFT --起始為數(shù)字Sig_#N --符號(hào)“#”不能成為標(biāo)識(shí)符的構(gòu)成Not-Ack --符號(hào)“-”不能成為標(biāo)識(shí)符的構(gòu)成RyY_RST_ --標(biāo)識(shí)符的最后不能是下劃線“_”data__BUS --標(biāo)識(shí)符中不能有雙下劃線return --關(guān)鍵詞
8.7VHDL文字規(guī)則8.7.4下標(biāo)名
標(biāo)識(shí)符(表達(dá)式)SIGNALa,b:BIT_VECTOR(0TO3);SIGNALm:INTEGERRANGE0TO3;SIGNALy,z:BIT;y<=a(m);--不可計(jì)算型下標(biāo)表示z<=b(3);--可計(jì)算型下標(biāo)表示8.8VHDL數(shù)據(jù)類型標(biāo)量型(ScalarType):
包括實(shí)數(shù)類型、整數(shù)類型、枚舉類型、時(shí)間類型。復(fù)合類型(CompositeType):
可以由小的數(shù)據(jù)類型復(fù)合而成,如可由標(biāo)量型復(fù)合而成。復(fù)合類型主要有數(shù)組型(Array)和記錄型(Record)。存取類型(AccessType):
為給定的數(shù)據(jù)類型的數(shù)據(jù)對(duì)象提供存取方式。文件類型(FilesType):
用于提供多值存取類型。
8.8VHDL數(shù)據(jù)類型8.8.1預(yù)定義數(shù)據(jù)類型
1.布爾(BOOLEAN)類型
TYPEBOOLEANIS(FALSE,TRUE);
2.位(BIT)數(shù)據(jù)類型
TYPEBITIS('0','1');
3.位矢量(BIT_VECTOR)類型
TYPEBIT_VECTORISARRAY(NaturalRange<>)OFBIT;8.8VHDL數(shù)據(jù)類型8.8.1預(yù)定義數(shù)據(jù)類型
4.字符(CHARACTER)類型
5.整數(shù)(INTEGER)類型
6.實(shí)數(shù)(REAL)類型
1.0十進(jìn)制浮點(diǎn)數(shù)0.0十進(jìn)制浮點(diǎn)數(shù)65971.333333十進(jìn)制浮點(diǎn)數(shù)65_971.333_3333與上一行等價(jià)8#43.6#e+4八進(jìn)制浮點(diǎn)數(shù)43.6E-4十進(jìn)制浮點(diǎn)數(shù)8.8VHDL數(shù)據(jù)類型7.字符串(STRING)類型
8.時(shí)間(TIME)類型
VARIABLEstring_var:STRING(1TO7);string_var:="abcd";
TYPEtimeISRANGE-2147483647TO2147483647unitsfs;--飛秒,VHDL中的最小時(shí)間單位ps=1000fs;--皮秒ns=1000ps;--納秒us=1000ns;--微秒ms=1000us;--毫秒sec=1000ms;--秒min=60sec;--分hr=60min;--時(shí)endunits;8.8VHDL數(shù)據(jù)類型8.8.1預(yù)定義數(shù)據(jù)類型
9.文件(FILES)類型
PROCEDUERReadline(F:INTEXT;L:OUTLINE);PROCEDUERWriteline(F:OUTTEXT;L:INLINE);PROCEDUERRead(L:INOUTLINE;Value:OUTstd_logic;Good:OUTBOOLEAN);PROCEDUERRead(L:INOUTLINE;Value:OUTstd_logic);PROCEDUERRead(L:INOUTLINE;Value:OUTstd_logic_vector;Good:OUTBOOLEAN);PROCEDUERRead(L:INOUTLINE;Value:OUTstd_logic_vector;PROCEDUERWrite(L:INOUTLINE;Value:INstd_logic;Justiaied:INSIDE:=Right;field;INWIDTH:=0);PROCEDUERWrite(L:INOUTLINE;Value:INstd_logic_vector,Justiaied:INSIDE:=Right;field;INWIDTH:=0);
8.8VHDL數(shù)據(jù)類型8.8.2IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量
1.標(biāo)準(zhǔn)邏輯位STD_LOGIC數(shù)據(jù)類型
2.標(biāo)準(zhǔn)邏輯矢量(STD_LOGIC_VECTOR)數(shù)據(jù)類型
STD_LOGIC_VECTOR類型定義如下:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;8.8VHDL數(shù)據(jù)類型8.8.3其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型
無(wú)符號(hào)型(UNSIGNED)有符號(hào)型(SIGNED)小整型(SMALL_INT)LIBRARYIEEE;USEIEEE.STD_LOIGC_ARITH.ALL;8.8VHDL數(shù)據(jù)類型8.8.3其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型
1.無(wú)符號(hào)數(shù)據(jù)類型(UNSIGNEDTYPE)UNSIGNED'("1000")VARIABLEvar:UNSIGNED(0TO10);SIGNALsig:UNSIGNED(5TO0);2.有符號(hào)數(shù)據(jù)類型(SIGNEDTYPE)SIGNED'("0101")代表+5,5SIGNED'("1011")代表–5
VARIABLEvar:SIGNED(0TO10);
8.8VHDL數(shù)據(jù)類型8.8.4VHDL數(shù)組類型
TYPE數(shù)組名ISARRAY(數(shù)組范圍)OF數(shù)據(jù)類型
;
TYPEstbISARRAY(7DOWNTO0)ofSTD_LOGIC;TYPExis(low,high);TYPEdata_busISARRAY(0TO7,x)ofBIT;TYPE數(shù)組名ISARRAY(數(shù)組下標(biāo)名RANGE)OF數(shù)據(jù)類型
;
8.8VHDL數(shù)據(jù)類型8.8.4VHDL數(shù)組類型
【例8-18】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYampISPORT(a1,a2:INBIT_VECTOR(3DOWNTO0);c1,c2,c3:INSTD_LOGIC_VECTOR(3DOWNTO0);b1,b2,b3:INTEGERRANGE0TO15;d1,d2,d3,d4:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDamp;d1<=TO_STDLOGICVECTOR(a1ANDa2);--(1)d2<=CONV_STD_LOGIC_VECTOR(b1,4)WHENCONV_INTEGER(b2)=9elseCONV_STD_LOGIC_VECTOR(b3,4);--(2)d3<=c1WHENCONV_INTEGER(c2)=8ELSEc3;--(3)d4<=c1WHENc2=8elsec3;--(4)8.8VHDL數(shù)據(jù)類型8.8.4VHDL數(shù)組類型
【例8-19】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdecoder3to8ISPORT(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDdecoder3to8;ARCHITECTUREbehaveOFdecoder3to8ISBEGINPROCESS(input)BEGINoutput<=(OTHERS=>'0');output(CONV_INTEGER(input))<='1';ENDPROCESS;ENDbehave;8.8.4VHDL數(shù)組類型
【例8-20】FUNCTIONTo_bit(s:std_ulogic;xmap:BIT:='0')RETURNBIT;FUNCTIONTo_bitvector(s:std_logic_vector;xmap:BIT:='0')RETURNBIT_VECTOR;FUNCTIONTo_bitvector(s:std_ulogic_vector;xmap:BIT:='0')RETURNBIT_VECTOR;下面是轉(zhuǎn)換函數(shù)To_bitvector的函數(shù)體:FUNCTIONTo_bitvector(s:std_logic_vector;xmap:BIT:='0')RETURNBIT_VECTORISALIASsv:std_logic_vector(s'LENGTH-1DOWNTO0)ISs;VARIABLEresult:BIT_VECTOR(s'LENGTH-1DOWNTO0);BEGINFORiINresult'RANGELOOPCASEsv(i)ISWHEN'0'|'L'=>result(i):='0';WHEN'1'|'H'=>result(i):='1';WHENOTHERS=>result(i):=xmap;ENDCASE;ENDLOOP;RETURNresult;END;8.9VHDL操作符8.9.1邏輯操作符(LogicalOperator)邏輯操作符(LogicalOperator)關(guān)系操作符(RelationalOperator)算術(shù)操作符(ArithmeticOperator)符號(hào)操作符(SignOperator)重載操作符(OverloadingOperator)AandBandCandD(AorB)xorC
類型操作符功能操作數(shù)數(shù)據(jù)類型算術(shù)操作符+加整數(shù)-減整數(shù)&并置一維數(shù)組*乘整數(shù)和實(shí)數(shù)(包括浮點(diǎn)數(shù))/除整數(shù)和實(shí)數(shù)(包括浮點(diǎn)數(shù))MOD取模整數(shù)REM取余整數(shù)SLL邏輯左移BIT或布爾型一維數(shù)組SRL邏輯右移BIT或布爾型一維數(shù)組SLA算術(shù)左移BIT或布爾型一維數(shù)組SRA算術(shù)右移
BIT或布爾型一維數(shù)組ROL邏輯循環(huán)左移
BIT或布爾型一維數(shù)組ROR邏輯循環(huán)右移
BIT或布爾型一維數(shù)組**乘方
整數(shù)ABS取絕對(duì)值
整數(shù)表8-2VHDL操作符列表
表8-2VHDL操作符列表
類型操作符功能操作數(shù)數(shù)據(jù)類型關(guān)系操作符=等于任何數(shù)據(jù)類型/=不等于任何數(shù)據(jù)類型<小于枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組>大于枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組<=小于等于枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組>=大于等于枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組邏輯操作符AND與BIT,BOOLEAN,STD_LOGICOR或BIT,BOOLEAN,STD_LOGICNAND與非BIT,BOOLEAN,STD_LOGICNOR或非BIT,BOOLEAN,STD_LOGICXOR異或BIT,BOOLEAN,STD_LOGICXNOR異或非BIT,BOOLEAN,STD_LOGICNOT非BIT,BOOLEAN,STD_LOGIC符號(hào)操作符+正
整數(shù)
-負(fù)
整數(shù)8.9VHDL操作符8.9.1邏輯操作符(LogicalOperator)運(yùn)算符優(yōu)先級(jí)NOT,ABS,**最高優(yōu)先級(jí)*,/,MOD,REM+(正號(hào)),
-(負(fù)號(hào))
+,
-
,
&
SLL,SLA,SRL,SRA,ROL,ROR
=,/=,<,<=,>,>=
AND,OR,NAND,NOR,XOR,XNOR最低優(yōu)先級(jí)表8-3VHDL操作符優(yōu)先級(jí)
8.9VHDL操作符8.9.1邏輯操作符(LogicalOperator)【例8-21】SIGNALa,b,c:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd,e,f,g:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALh,I,j,k:STD_LOGIC;SIGNALl,m,n,o,p:BOOLEAN;...a<=bANDc;--b、c相與后向a賦值,a、b、c的數(shù)據(jù)類型同屬4位長(zhǎng)的位矢量d<=eORfORg;--兩個(gè)操作符OR相同,不需括號(hào)h<=(iNANDj)NANDk;--NAND不屬上述三種算符中的一種,必須加括號(hào)l<=(mXORn)AND(oXORp);--操作符不同,必須加括號(hào)h<=iANDjANDk;--兩個(gè)操作符都是AND,不必加括號(hào)h<=iANDjORk;--兩個(gè)操作符不同,未加括號(hào),表達(dá)錯(cuò)誤a<=bANDe;--操作數(shù)b與e的位矢長(zhǎng)度不一致,表達(dá)錯(cuò)誤h<=iORl;--i的數(shù)據(jù)類型是位STD_LOGIC,而l的數(shù)據(jù)類型是...--布爾量BOOLEAN,因而不能相互作用,表達(dá)錯(cuò)誤8.9VHDL操作符8.9.2關(guān)系操作符(RelationalOperator)“=”(等于)“/=”(不等于)“>”(大于)“<”(小于)“>=”(大于等于)“<=”(小于等于)'1'='1';"101"="101";"1">"011";"101"<"110";
8.9VHDL操作符8.9.2關(guān)系操作符(RelationalOperator)【例8-22】ENTITYrelational_ops_1ISPORT(a,b:INBIT_VECTOR(0TO3);m:OUTBOOLEAN);ENDrelational_ops_1;ARCHITECTUREexampleOFrelational_ops_1ISBEGINoutput<=(a=b);ENDexample;8.9VHDL操作符8.9.2關(guān)系操作符(RelationalOperator)【例8-23】
ENTITYrelational_ops_2ISPORT(a,b:ININTEGERRANGE0TO3;m:OUTBOOLEAN);ENDrelational_ops_2;ARCHITECTUREexampleOFrelational_ops_2ISBEGINoutput<=(a>=b);ENDexample;8.9VHDL操作符8.9.3算術(shù)操作符(ArithmeticOperator)
類
別算術(shù)操作符分類1
求和操作符(Addingoperators)+(加),-(減),
(并置)2
求積操作符(Multiplyingoperators)*,/,MOD,REM3
符號(hào)操作符(Signoperators)+(正),
-(負(fù))4
混合操作符(Miscellaneousoperators)**,ABS5
移位操作符(Shiftoperators)SLL,SRL,SLA,SRA,ROL,ROR表8-4算術(shù)操作符分類表
8.9VHDL操作符8.9.3算術(shù)操作符(ArithmeticOperator)1.求和操作符
【例8-24】VARIABLEa,b,c,d,e,f:INTEGERRANGE0TO255;...a:=b+c;d:=e–f;【例8-25】PROCEDUREadding_e(a:ININTEGER;b:INOUTINTEGER)IS...b:=a+b;8.9VHDL操作符8.9.3算術(shù)操作符(ArithmeticOperator)1.求和操作符
【例8-26】PACKAGEexample_arithmeticISTYPEsmall_INtISRANGE0TO7;ENDexample_ari
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估與解決方案合同范本3篇
- 二零二五版股權(quán)激勵(lì)合同:某上市公司對(duì)高級(jí)管理人員股權(quán)激勵(lì)計(jì)劃3篇
- 2025年度時(shí)尚服飾店開(kāi)業(yè)活動(dòng)承包合同3篇
- 2025年度高端不銹鋼醫(yī)療器械制造委托合同3篇
- 二零二五版智能穿戴設(shè)備代加工合同范本2篇
- 二零二五年度環(huán)保型車間生產(chǎn)承包服務(wù)合同范本3篇
- 二零二五年高管子女教育援助與扶持合同3篇
- 2025年草場(chǎng)租賃與牧區(qū)基礎(chǔ)設(shè)施建設(shè)合同3篇
- 二零二五版涵洞工程勞務(wù)分包單價(jià)及工期延誤賠償合同3篇
- 二零二五版財(cái)務(wù)報(bào)表編制會(huì)計(jì)勞動(dòng)合同范本3篇
- GB/T 34241-2017卷式聚酰胺復(fù)合反滲透膜元件
- GB/T 12494-1990食品機(jī)械專用白油
- 運(yùn)輸供應(yīng)商年度評(píng)價(jià)表
- 成熙高級(jí)英語(yǔ)聽(tīng)力腳本
- 北京語(yǔ)言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 肺癌的診治指南課件
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)全冊(cè)完整版課件
- 商場(chǎng)裝修改造施工組織設(shè)計(jì)
- 統(tǒng)編版一年級(jí)語(yǔ)文上冊(cè) 第5單元教材解讀 PPT
- 加減乘除混合運(yùn)算600題直接打印
- ASCO7000系列GROUP5控制盤使用手冊(cè)
評(píng)論
0/150
提交評(píng)論