EDA技術(shù)與VHDL 第8章 VHDL結(jié)構(gòu)_第1頁(yè)
EDA技術(shù)與VHDL 第8章 VHDL結(jié)構(gòu)_第2頁(yè)
EDA技術(shù)與VHDL 第8章 VHDL結(jié)構(gòu)_第3頁(yè)
EDA技術(shù)與VHDL 第8章 VHDL結(jié)構(gòu)_第4頁(yè)
EDA技術(shù)與VHDL 第8章 VHDL結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論