版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
EDA技術(shù)與VHDL第10章VHDL結(jié)構(gòu)8.1VHDL實體VHDL實體作為一個設(shè)計實體(獨立的電路功能結(jié)構(gòu))的組成部分,其功能是對這個設(shè)計實體與外部電路進(jìn)行接口描述。實體是設(shè)計實體的表層設(shè)計單元,實體說明部分規(guī)定了設(shè)計單元的輸入輸出接口信號或引腳,它是設(shè)計實體對外的一個通信界面。實體的具體表述和用法已在前面有過詳細(xì)例解,這里不再重復(fù)。
KX康芯科技8.2VHDL結(jié)構(gòu)體1.結(jié)構(gòu)體的一般語言格式
ARCHITECTURE結(jié)構(gòu)體名OF實體名IS[說明語句]BEGIN[功能描述語句]ENDARCHITECTURE結(jié)構(gòu)體名;
8.2VHDL結(jié)構(gòu)體2.結(jié)構(gòu)體說明語句
3.功能描述語句結(jié)構(gòu)
進(jìn)程語句
信號賦值語句
子程序調(diào)用語句
元件例化語句
8.3VHDL子程序8.3.1VHDL函數(shù)
FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型--函數(shù)首FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型IS--函數(shù)體[說明部分]BEGIN順序語句;ENDFUNCTION函數(shù)名;【例8-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEpackexpIS--定義程序包FUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)首RETURNSTD_LOGIC_VECTOR;FUNCTIONfunc1(a,b,c:REAL)--定義函數(shù)首RETURNREAL;FUNCTION"*"(a,b:INTEGER)--定義函數(shù)首RETURNINTEGER;FUNCTIONas2(SIGNALin1,in2:REAL)--定義函數(shù)首RETURNREAL;END;PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)體RETURNSTD_LOGIC_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句END;--結(jié)束PACKAGEBODY語句LIBRARYIEEE;--函數(shù)應(yīng)用實例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);--用在賦值語句中的并行函數(shù)調(diào)用語句PROCESS(dat3,dat4)BEGINout2<=max(dat3,dat4);--順序函數(shù)調(diào)用語句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ù)首RETURNSTD_LOGIC_VECTOR;FUNCTIONmax(a,b:INBIT_VECTOR)--定義函數(shù)首RETURNBIT_VECTOR;FUNCTIONmax(a,b:ININTEGER)--定義函數(shù)首RETURNINTEGER;END;
PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD_LOGIC_VECTOR)--定義函數(shù)體RETURNSTD_LOGIC_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句
FUNCTIONmax(a,b:ININTEGER)--定義函數(shù)體RETURNINTEGERISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句
接下頁FUNCTIONmax(a,b:INBIT_VECTOR)--定義函數(shù)體RETURNBIT_VECTORISBEGINIFa>bTHENRETURNa;ELSERETURNb;ENDIF;ENDFUNCTIONmax;--結(jié)束FUNCTION語句END;--結(jié)束PACKAGEBODY語句.--以下是調(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);--對函數(shù)max(a,b:INSTD_LOGIC_VECTOR)的調(diào)用
c2<=max(a2,b2);--對函數(shù)max(a,b:INBIT_VECTOR)的調(diào)用
c3<=max(a3,b3);--對函數(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,位長)將整數(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庫類型轉(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;--定義一個Integer的子類型TYPEBit8ISarray(7downto0)OFstd_logic;--定義一個數(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)用實例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ù)輸入一般是單一變量,多個驅(qū)動源的信號值組成非限定數(shù)組,如2個信號驅(qū)動源,其信號值組成的數(shù)組是2個元素長度;3個信號驅(qū)動源信號值組成的數(shù)組是3個元素長度,多個信號驅(qū)動源信號值組成的未限定數(shù)組可依次類推。但決斷函數(shù)調(diào)用后返回的是單一信號值,稱斷信號值。
8.3VHDL子程序8.3.5VHDL過程
PROCEDURE過程名(參數(shù)表)--過程首
PROCEDURE過程名(參數(shù)表)IS[說明部分]BIGIN--過程體
順序語句;ENDPROCEDURE過程名
8.3VHDL子程序8.3.5VHDL過程
PROCEDUREpro1(VARIABLEa,b:INOUTREAL);PROCEDUREpro2(CONSTANTa1:ININTEGER;
VARIABLEb1:OUTINTEGER);PROCEDUREpro3(SIGNALsig:INOUTBIT);8.3VHDL子程序8.3.5VHDL過程
【例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過程
【例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"--輸出錯誤報告SEVERITYERROR;ENDPROCEDUREcomp;【例8-10】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEaxampIS--過程首定義PROCEDUREnand4a(SIGNALa,b,c,d:INSTD_LOGIC;SIGNALy:OUTSTD_LOGIC);ENDaxamp;PACKAGEBODYaxampIS--過程體定義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)用過程END;8.3VHDL子程序8.3.6VHDL重載過程
【例8-11】
PROCEDUREcalcu(v1,v2:INREAL;SIGNALout1:INOUTINTEGER);PROCEDUREcalcu(v1,v2:ININTEGER;SIGNALout1:INOUTREAL);...calcu(20.15,1.42,signl);--調(diào)用第一個重載過程calcucalcu(23,320,sign2);--調(diào)用第二個重載過程calcu
...8.3VHDL子程序8.3.7子程序調(diào)用語句
1.過程調(diào)用
過程名[([形參名=>]實參表達(dá)式{,[形參名=>]實參表達(dá)式})];
(1)將IN和INOUT模式的實參值賦給欲調(diào)用的過程中與它們對應(yīng)的形參;(2)執(zhí)行這個過程;(3)將過程中IN和INOUT模式的形參值返回給對應(yīng)的實參。
8.3VHDL子程序8.3.7子程序調(diào)用語句
1.過程調(diào)用
【例8-12】PACKAGEdata_typesIS--定義程序包SUBTYPEdata_elementISINTEGERRANGE0TO3;--定義數(shù)據(jù)類型TYPEdata_arrayISARRAY(1TO3)OFdata_element;ENDdata_types;USEWORK.data_types.ALL;--打開以上建立在當(dāng)前工作庫的程序包data_typesENTITYsortISPORT(in_array:INdata_array;out_array:OUTdata_array);ENDsort;ARCHITECTUREexmpOFsortISBEGINPROCESS(in_array)--進(jìn)程開始,設(shè)data_types為敏感信號PROCEDUREswap(data:INOUTdata_array;--swap的形參名為data、low、highlow,high:ININTEGER)ISVARIABLEtemp:data_element;BEGIN--開始描述本過程的邏輯功能
IF(data(low)>data(high))THEN--檢測數(shù)據(jù)temp:=data(low);data(low):=data(high);data(high):=temp;ENDIF;ENDswap;--過程swap定義結(jié)束VARIABLEmy_array:data_array;--在本進(jìn)程中定義變量my_arrayBEGIN--進(jìn)程開始
my_array:=in_array;--將輸入值讀入變量swap(my_array,1,2);--my_array、1、2是對應(yīng)于data、low、high的實參
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)用語句
1.過程調(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)用語句
1.過程調(diào)用
2.函數(shù)調(diào)用函數(shù)調(diào)用與過程調(diào)用是十分相似的,不同之處是,調(diào)用函數(shù)將返還一個指定數(shù)據(jù)類型的值,函數(shù)的參量只能是輸入值。
8.3VHDL子程序8.3.8并行過程調(diào)用語句
過程名(關(guān)聯(lián)參量名);
【例8-14】...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即為分別對ENDPROCESS;--應(yīng)于a、b、sum的關(guān)聯(lián)參量名8.3VHDL子程序8.3.8并行過程調(diào)用語句
【例8-15】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;8.3VHDL子程序8.3.8并行過程調(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;...
8.4VHDL庫8.4.1庫的種類
1.
IEEE庫
2.
STD庫
3.
WORK庫
4.
VITAL庫
8.4VHDL庫8.4.2庫的用法
USE庫名.程序包名.項目名
;
USE庫名.程序包名.ALL;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.STD_ULOGIC;USEIEEE.STD_LOGIC_1164.RISING_EDGE;USEWORK.std_logic_1164.ALL;
8.5VHDL程序包定義程序包的一般語句結(jié)構(gòu)如下:PACKAGE程序包名IS--程序包首
程序包首說明部分
END程序包名;PACKAGEBODY程序包名IS--程序包體
程序包體說明部分以及包體內(nèi)
END程序包名;8.5VHDL程序包【例8-16】
PACKAGEpaclIS--程序包首開始TYPEbyteISRANGE0TO255;--定義數(shù)據(jù)類型byteSUBTYPEnibbleISbyteRANGE0TO15;--定義子類型nibbleCONSTANTbyte_ff:byte:=255;--定義常數(shù)byte_ffSIGNALaddend:nibble;--定義信號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庫默認(rèn)是打開的,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配置配置語句的一般格式如下:CONFIGURATION配置名OF實體名IS配置說明END配置名;8.7VHDL文字規(guī)則8.7.1數(shù)字
整數(shù):
5,678,0,156E2(=15600),45_234_287(=45234287)實數(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ù)符號,表示二進(jìn)制位0或1,在字符串中的每位表示一個Bit。
O:八進(jìn)制基數(shù)符號,在字符串中的每一個數(shù)代表一個八進(jìn)制數(shù),即代表一個3位(BIT)的二進(jìn)制數(shù)。
X:十六進(jìn)制基數(shù)符號(0~F),代表一個十六進(jìn)制數(shù),即一個4位的二進(jìn)制數(shù)。
data1<=B"1_1101_1110"--二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是9data2<=O"15"--八進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是6data3<=X"AD0"--十六進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是12data4<=B"101_010_101_010"--二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是12data5<="101_010_101_010"--表達(dá)錯誤,缺B。data6<="0AD0"--表達(dá)錯誤,缺X。8.7VHDL文字規(guī)則8.7.3標(biāo)識符
Decoder_1,F(xiàn)FT,Sig_N,Not_Ack,State0,Idle_Decoder_1 --起始為非英文字母2FFT --起始為數(shù)字Sig_#N --符號“#”不能成為標(biāo)識符的構(gòu)成Not-Ack --符號“-”不能成為標(biāo)識符的構(gòu)成RyY_RST_ --標(biāo)識符的最后不能是下劃線“_”data__BUS --標(biāo)識符中不能有雙下劃線return --關(guān)鍵詞
8.7VHDL文字規(guī)則8.7.4下標(biāo)名
標(biāo)識符(表達(dá)式)SIGNALa,b:BIT_VECTOR(0TO3);SIGNALm:INTEGERRANGE0TO3;SIGNALy,z:BIT;y<=a(m);--不可計算型下標(biāo)表示z<=b(3);--可計算型下標(biāo)表示8.8VHDL數(shù)據(jù)類型標(biāo)量型(ScalarType):
包括實數(shù)類型、整數(shù)類型、枚舉類型、時間類型。復(fù)合類型(CompositeType):
可以由小的數(shù)據(jù)類型復(fù)合而成,如可由標(biāo)量型復(fù)合而成。復(fù)合類型主要有數(shù)組型(Array)和記錄型(Record)。存取類型(AccessType):
為給定的數(shù)據(jù)類型的數(shù)據(jù)對象提供存取方式。文件類型(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ù)(REAL)類型
1.0十進(jìn)制浮點數(shù)0.0十進(jìn)制浮點數(shù)65971.333333十進(jìn)制浮點數(shù)65_971.333_3333與上一行等價8#43.6#e+4八進(jìn)制浮點數(shù)43.6E-4十進(jìn)制浮點數(shù)8.8VHDL數(shù)據(jù)類型7.字符串(STRING)類型
8.時間(TIME)類型
VARIABLEstring_var:STRING(1TO7);string_var:="abcd";
TYPEtimeISRANGE-2147483647TO2147483647unitsfs;--飛秒,VHDL中的最小時間單位ps=1000fs;--皮秒ns=1000ps;--納秒us=1000ns;--微秒ms=1000us;--毫秒sec=1000ms;--秒min=60sec;--分hr=60min;--時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ù)類型
無符號型(UNSIGNED)有符號型(SIGNED)小整型(SMALL_INT)LIBRARYIEEE;USEIEEE.STD_LOIGC_ARITH.ALL;8.8VHDL數(shù)據(jù)類型8.8.3其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型
1.無符號數(shù)據(jù)類型(UNSIGNEDTYPE)UNSIGNED'("1000")VARIABLEvar:UNSIGNED(0TO10);SIGNALsig:UNSIGNED(5TO0);2.有符號數(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)符號操作符(SignOperator)重載操作符(OverloadingOperator)AandBandCandD(AorB)xorC
類型操作符功能操作數(shù)數(shù)據(jù)類型算術(shù)操作符+加整數(shù)-減整數(shù)&并置一維數(shù)組*乘整數(shù)和實數(shù)(包括浮點數(shù))/除整數(shù)和實數(shù)(包括浮點數(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取絕對值
整數(shù)表8-2VHDL操作符列表
表8-2VHDL操作符列表
類型操作符功能操作數(shù)數(shù)據(jù)類型關(guān)系操作符=等于任何數(shù)據(jù)類型/=不等于任何數(shù)據(jù)類型<小于枚舉與整數(shù)類型,及對應(yīng)的一維數(shù)組>大于枚舉與整數(shù)類型,及對應(yīng)的一維數(shù)組<=小于等于枚舉與整數(shù)類型,及對應(yīng)的一維數(shù)組>=大于等于枚舉與整數(shù)類型,及對應(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符號操作符+正
整數(shù)
-負(fù)
整數(shù)8.9VHDL操作符8.9.1邏輯操作符(LogicalOperator)運(yùn)算符優(yōu)先級NOT,ABS,**最高優(yōu)先級*,/,MOD,REM+(正號),
-(負(fù)號)
+,
-
,
&
SLL,SLA,SRL,SRA,ROL,ROR
=,/=,<,<=,>,>=
AND,OR,NAND,NOR,XOR,XNOR最低優(yōu)先級表8-3VHDL操作符優(yōu)先級
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位長的位矢量d<=eORfORg;--兩個操作符OR相同,不需括號h<=(iNANDj)NANDk;--NAND不屬上述三種算符中的一種,必須加括號l<=(mXORn)AND(oXORp);--操作符不同,必須加括號h<=iANDjANDk;--兩個操作符都是AND,不必加括號h<=iANDjORk;--兩個操作符不同,未加括號,表達(dá)錯誤a<=bANDe;--操作數(shù)b與e的位矢長度不一致,表達(dá)錯誤h<=iORl;--i的數(shù)據(jù)類型是位STD_LOGIC,而l的數(shù)據(jù)類型是...--布爾量BOOLEAN,因而不能相互作用,表達(dá)錯誤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
符號操作符(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年食品安全與法規(guī)常識測試題
- 2026年英語能力測試題閱讀理解技巧
- 2026年國際貿(mào)易實務(wù)專業(yè)期末考試試題集
- 2026年語言教學(xué)專家等級認(rèn)證聽力測試教學(xué)評估
- 2026年社會調(diào)查數(shù)據(jù)分析應(yīng)用題庫
- 2026年文學(xué)名著閱讀理解題及答案參考
- 2026年營養(yǎng)師專業(yè)知識測試題集
- 2026年教育心理學(xué)專業(yè)考試題目學(xué)生心理發(fā)展與教育策略題
- 2026年證券從業(yè)資格考試一本通及模擬試題
- 2026年國際經(jīng)濟(jì)法中級證書考試企業(yè)并購交易規(guī)則詳解
- 2026年山東水利職業(yè)學(xué)院單招綜合素質(zhì)筆試參考題庫含詳細(xì)答案解析
- 箱涵預(yù)制、安裝、現(xiàn)澆施工方案
- 2026屆杭州高級中學(xué)高二上數(shù)學(xué)期末聯(lián)考試題含解析
- 2026年陜西氫能產(chǎn)業(yè)發(fā)展有限公司所屬單位社會公開招聘備考題庫及1套參考答案詳解
- 2026年及未來5年中國無取向硅鋼片行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報告
- 棄土場規(guī)范規(guī)章制度
- 2026年水下機(jī)器人勘探報告及未來五至十年深海資源報告
- 2025年3月29日事業(yè)單位聯(lián)考(職測+綜應(yīng))ABCDE類筆試真題及答案解析
- 雙重預(yù)防體系建設(shè)自評報告模板
- 高血壓教學(xué)查房復(fù)習(xí)過程教案(2025-2026學(xué)年)
- 建設(shè)工程消防施工質(zhì)量通病及整改示例
評論
0/150
提交評論