第5章VHDL基本構(gòu)與語(yǔ)法_第1頁(yè)
第5章VHDL基本構(gòu)與語(yǔ)法_第2頁(yè)
第5章VHDL基本構(gòu)與語(yǔ)法_第3頁(yè)
第5章VHDL基本構(gòu)與語(yǔ)法_第4頁(yè)
第5章VHDL基本構(gòu)與語(yǔ)法_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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)介

第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)第5 VHDL基本結(jié)構(gòu)與語(yǔ)VHDLVHDLVHDLLIBRARYPACKAGE:庫(kù)用于存儲(chǔ)預(yù)先完成的程序包和數(shù)據(jù)集合ARCHITECTURE:定義實(shí)體的實(shí)現(xiàn),即電路的具體描述??捎卸鄠€(gè)個(gè)結(jié)構(gòu)體。11個(gè)結(jié)構(gòu)體對(duì)實(shí)體起作用,其他結(jié)構(gòu)1個(gè)結(jié)構(gòu)體時(shí)不要實(shí)體。5-1】215-1。功能描述為S=0AY,S=1BYVHDLENTITYmux21a mux21a OUTEND

AABYS圖5-1例5-1功能示意AABYS圖5-2例5-1實(shí)體定ARCHITECTUREoneOFmux21a s=’0’ ENDone5-3實(shí)體定義本設(shè)計(jì)的輸入輸出端口/約定:[]

1ENTITY實(shí)體名IS ];] --端口定義(端口1:端口模 端口類型…端口n:端口模 端口類型--最后一個(gè)無(wú)分 ENDENTITYARCHITECTUREIEEESTDl076_1993版的語(yǔ)法要求,不帶為IEEESTD107619872ENTITY實(shí)體名 --此處無(wú)分 端口名:端口模 端口類型的子集,但不是由外部驅(qū)動(dòng), 圖5-4端口模式示意圖integerBOOLEANBIT、標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型std_logic、std_logic_vector5.2第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)PAGEPAGE3PAGEPAGE412VHDL3、格式:ARCHITECTUREOFISEND4ARCHITECTUREARCHITECTUREOFENDCONPONENTINSTANTIATIONS:元件調(diào)用,調(diào)用另一實(shí)體的BLOCK例題5-1注意:為“<=時(shí)間δay。在此不妨將δ看成是實(shí)際電路存在的固有延時(shí)量。VHDL2、條件判斷格式:位信號(hào)=注意:非“==。常用的關(guān)系操作符(Relational Operator)有“=”等于“/=”不等于“<”小于“<=”小于或等于“>”大于“>=”大于或等于。=、/=大即為大數(shù)。例位矢“1011”>"101011”1”>“011"。改進(jìn):對(duì)以上判斷錯(cuò)誤可用STD_LOGIC_ARITH的UNSIGNED解決,如: “011”,結(jié)果將判為TRUE。3WHEN-格式1:變量<=值1WHEN條件1 值2;當(dāng)滿足條件1,變量=值1,否則變量=值2。格式2:變量=值1WHEN條件 值2WHEN條件 …值n-1WHEN條件n- 5-2ARCHITECTUREarchmuxOFmux4ISy<=a0WHENs=“00”ELSEa1WHENs=“01”ELSEa2WHENs=“10”

s圖5-5例5-4功第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)PAGEPAGE5PAGEPAGE6 b。z<=aWHENPl='1'bWHENP2='1'ELSEWHEN-ELSEVHDLVHDL進(jìn)程語(yǔ)句[標(biāo)號(hào):]PROCESS(敏感信號(hào)表[聲明區(qū) [順序語(yǔ)句END [標(biāo)號(hào) 進(jìn)程結(jié)束‘0‘1)5-35-1IFTHEN-ELSE-ENDIF OF IFS='O' ENDIF;ENDENDWAIT6.2WAIT*2.塊語(yǔ)句 ENDBLOCK[塊名5-4】8ENTITYCOMPIS(a,b:ININTEGERRANGE0T0aequalb,agreatb,alessb:OUTEND p1:aequalb<=‘1’WHENa=bELSE‘0’;agreatb<=‘1’WHENa>bELSE‘0’;alessb<=‘1’WHENa<bELSE‘0’;END 第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)PAGEPAGE7PAGEPAGE83.35.15.1WITH-SELECT-WITH選擇表達(dá)式賦值目標(biāo)信號(hào)〈=表達(dá)式WHEN表達(dá)式WHEN…表達(dá)式WHEN5-55-2WITH-SELECT-WHEN ss注意:句未全 而不 sOTHERS- 4.生成語(yǔ)句(參6.1節(jié)NULLIFTHEN-ELSE-ENDIFIF語(yǔ)句只能在進(jìn)程中使用,它根據(jù)一個(gè)或一組條件的布爾運(yùn)算而選擇某特定的執(zhí)行格式:IF 條件1 賦值語(yǔ)句1; 賦值語(yǔ)句2; 5-3IF語(yǔ)句可嵌套。1(IF后嵌套): 條件 2THEN…ELSE…END 嵌套格式2(在ELSE后嵌套): 條件1 2THEN…ELSE…END 注意:每一個(gè)“IF”語(yǔ)句都必須有一個(gè)對(duì)應(yīng)的“ENDIF”語(yǔ)句。3(ELSEELSE):IF1THEN…ELSIF2THEN…ELSE…END注意:ELSIFIFENDIF【例5-6】例5-2的四選一數(shù)據(jù)選擇器的IF實(shí)現(xiàn)。實(shí)體略。 s=“00”THENELSIFs=“01”THENy<=a1; --ELSEIFELSIFELSIFs=“10”THENy<=a2; y<=a3;END CASE_WHEN語(yǔ)句程序的可讀性比較好。CASE_WHENCASE屬于順序語(yǔ)句,必須放在進(jìn)程中,格式是:CASE表達(dá)式ISWhen選擇 …When選擇 第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)PAGEPAGE9END的含義相當(dāng)于“THEN”(或“于是“)。CASEWHEN條件句中的選擇值必須在表達(dá)式的取值范圍內(nèi)OTHERS表示以上己列的所有條件句中未能列出的其他可能的取值;OTHERS,且只能作為最后一種條件取值CASE【例5-7】例5-2的四選一數(shù)據(jù)選擇器的CASE實(shí)現(xiàn)。實(shí)體略。 PROCESS(s,a0,a1,a2,a3) WHEN“00”=> THEN的作用,WHEN“01”=>WHEN“10”=>y<=a2; OTHERS=>y<=a3; CASE語(yǔ)句中條件句的次序是不重要的,其執(zhí)行過(guò)程接近于并行方式。一般地,對(duì)完CASEIF語(yǔ)句描述耗用更多的硬件資源。LOOPFOR_LOOP[LOOP標(biāo)號(hào) FOR循環(huán)變量IN循環(huán)次數(shù)范圍ENDLOOP[LOOP標(biāo)號(hào)【例5-8】奇偶測(cè)試電路 GENERIC(bussize:integer:=8); --8; std_logic_vector(bussize-1 0);even_num,odd_num : OUT PROCESS(databus) tmp:std_logic;tmp:= INdatabus’low --循環(huán)變量i是一個(gè)臨時(shí)變量,tmp:= databus --odd_flag奇標(biāo)志 tmp;--even_flag偶標(biāo)志 NULLNULL標(biāo)識(shí)符

VHDL可以是常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字統(tǒng)稱為標(biāo)識(shí)符。由英文字母“a”到“z”、“A”到“Z”、數(shù)字“O”到“9”以及下劃線“_”組成。使用時(shí)應(yīng)注意以下幾點(diǎn):1、不區(qū)分大小寫;2、須以字母開(kāi)頭,如20040516錯(cuò)誤:3、下劃線只能在中間,不能以它開(kāi)頭或結(jié)尾,如DEcoder_和_Decoder4、下劃線不能連用,如 5、不能用關(guān)鍵詞,如IN*6、取名最好有實(shí)際意義。如a_h_l、show_new_state、COUNTER_A等是有效的短標(biāo)識(shí)符,而a%b_1、show-new-state等是非法標(biāo)識(shí)符。5-1VHDL的常用保留字(又稱關(guān)鍵字),它們?cè)赩HDL中有特殊的含義,不能作為標(biāo)識(shí)符出現(xiàn)。此外,不同的綜合系統(tǒng)還定義了各自的子程序,子程序名也不能作為標(biāo)識(shí)符出現(xiàn)。對(duì)于邏輯綜合而言,并不是所有的保留字都有意義。5-1常用保留字第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)DataVHDL種參數(shù))必須嚴(yán)格限定其類型和取值范圍,相同類型才能相互傳遞。VHDL1、位類型‘0BIT、位矢量()位矢量是基于BITSIGNALa:bit_vector(7 SIGNALb:bit_vector(0 TO7);排列指示關(guān)鍵詞“TO'’b(1)、b(2)…b(7)。 a(0)<=’0’;a(7)<=’1’a07a(7downto1)<=a(6downto0);a、布爾類取值是:true(false(VHDL‘1’和‘O’truefalse。(FALSE,TRUE;、整數(shù)(Integer):在VHDL中,整數(shù)可取值范圍從-(231-1)到(231-1。要用TYPE數(shù)據(jù)類型名ISRANGE約束范圍;如:TYPEintISRANGE-10TO10;INTEGER作為無(wú)符號(hào)數(shù)處理。 - 十進(jìn)制整數(shù)- 2*103=2000,E10 10101*5、正整數(shù)(Positive):正整數(shù)是整數(shù)的一個(gè)子類型,包括整數(shù)中的非零和非負(fù)的數(shù)值。*6*7(Real:在VHDL1.0E+38到1.0E+38的實(shí)現(xiàn)相當(dāng)復(fù)雜,目前在電路規(guī)模上難以承受。通常情況下,實(shí)數(shù)類型僅能在VHDL仿真器中使用,綜合器中不支持實(shí)數(shù)。其格式同整數(shù)類型。實(shí)數(shù)常量的書寫必須含小數(shù)。如1.0十進(jìn)制浮點(diǎn)0.0十進(jìn)制浮點(diǎn) 43.6E- *81ps第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)STANDARD程序包中也定義了時(shí)間。定義如下:TYPEtimeISRANGE ps=1000ns=1000us=1000ms=1000--min=60--hr=60--end *9‘A*10d;*112、IEEEIEEE的程序包std_logic_1164中定義了兩個(gè)非常重要的數(shù)據(jù)類型std_logic和‘0(0‘1(1‘Z(‘X(‘W(‘L(0‘H(1(‘U(IFCASE語(yǔ)句部分。5-95-2CASE --std_logic必須聲明庫(kù)及程序包 ENTITY PORT(s:INstd_logic_vector(1DOWNTOa0,a1,a2,a3:INstd_logic_vector(7DOWNTO0);y:OUTstd_logic_vector(7DOWNTO0));END PROCESS(s,a0,a1,a2,a3) WHEN“00”=>WHEN“01”=>WHEN“10”=>WHEN“11”=>y<=a3; OTHERS=>NULL;--Sstd_logic9種取值,281--OTHERS用于剩余取值的處理。 3枚舉類型(Enumerated除了上述一些標(biāo)準(zhǔn)的預(yù)定義數(shù)據(jù)類型外,如整數(shù)類型、Boolean類型、標(biāo)準(zhǔn)邏輯位類TYPEIS(枚舉文字,枚舉文字…….;如:TYPEcolorIS(red,green,yellow,STD_LOGIC一樣使用。TYPEcolorIS(red,green,yellow,TYPElevelISSIGNALb:第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)…VARIABLE采用枚舉法,在編譯時(shí)取數(shù)范圍自動(dòng)編碼,如上例中類型a的四個(gè)值red、green、VHDL綜合器綜合。TYPEISARRAY(索引范圍OF類型名稱TYPEaISARRAY(integer0TO9)OF5.4.95-27。*3) 子類型 基本數(shù)據(jù)類 約束范圍SUBTYPETYPE所定義的原數(shù)據(jù)類型的一個(gè)子集,它滿足原數(shù)據(jù)類型的所 *4)記錄類型(RecodeTYPEIS… RECODE記錄類型名CONSTANTLEN:TYPEarraylogicISARRAY(99DOWNTO0)OFstd_logic_vector(7DOWNTOTYPEtableISa:integerRANGE0TOLEN;c:std_logic_vector(7DWNTOEND操作符 參6.1算術(shù)操作符(Arithmetic+-*/**乘方MOD求模REMABSSLL邏輯左移、SRL邏輯右移SLA算術(shù)左移、SRA算術(shù)右移ROL循環(huán)左移、ROR關(guān)系操作符(RelationOperators):參5.1.3關(guān)系操作符的作用是將相同數(shù)據(jù)類型的數(shù)據(jù)對(duì)象進(jìn)行數(shù)值比較,并將結(jié)果以BOOLEANTRUEFALSE邏輯操作符(Logic7AND(與)、OR(或)、NAND(與非)、NOR(或非),XOR(異或)、XNOR(NOT(取反)。3BIT、BOOLEANSTDLOGICXOR這三個(gè)算符中的一種,則不需使用括號(hào);【例5-10】邏輯操作符使用注意事項(xiàng):不加括號(hào)的條件和數(shù)據(jù)類型、長(zhǎng)度。 STD_LOGIC_VECTOR(3 STD_LOGIC_VECTOR(1 DOWNTO 0); …a<=bANDc; --b、ca賦值,a、b、c4位長(zhǎng)的位矢量d<=eORfORg;--AND、OR、XOR1個(gè),不需括號(hào)h<=(iNANDj)NANDk;--NANDAND、OR、XOR,雖相同也要括號(hào)。l<=(mXORn)AND(oXORp);--操作符不同,須加括號(hào)a<=bAND --be的位矢h<=iORl;--iSTD_LOGIClBoolean第5第5 VHDL基本結(jié)構(gòu)與語(yǔ) s)) (b END 連接操作符(Concatenation”01如:o1<’0’&a(7downto1); --a右移1位給o1o2<=o1(6downto0)&‘0’; --o1左移1位給o2o3<=o1&o2; --o1、o2合并a<='1’&'0'&d(1)&'1';--元素與元素并置,并置后的數(shù)組長(zhǎng)度為4IFa&d=“101011” .——在IF條件句中可以使用并置符在邏輯綜合中,VHDL常用的數(shù)據(jù)對(duì)象(DataObjects)信號(hào)當(dāng)表達(dá)式太長(zhǎng)或?yàn)楸阌诶斫猓部稍O(shè)中間信號(hào)變量或中間變量5-de【例5-12】ARCHITECTURE OFmux21a de

b圖5-6例5-11綜合后的門電SIGNAL信號(hào)名:數(shù)據(jù)類型[:=初始值如:SIGNAL DOWNTO0)目標(biāo)信號(hào)名<=表達(dá)式;如:q<=count;變量=VARIABLE變量名:數(shù)據(jù)類型[:=初始值];如:VARIABLEa:integer:=0;常量CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達(dá)式;如:CONSTANTmod:integer:=6;5-2BCD【例5-13】一位BCD碼的加法器。 (op1,op2 :IN 0TO9; :OUT 0TO31); adjustnuminteger --SIGNALbinaddintegerRANGE0TO -- tmpinteger:= -- tmp --第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)tmp:= 信號(hào)與變量聲明的形式與位置不同:信號(hào)聲名為SIGNAL…,變量聲明為變量賦值為“:=VHDL設(shè)計(jì)中,可以使用信號(hào)和變量。考慮到信號(hào)的行為更接近于硬件,需要到5-14 PORT(a,b,c x, STD_LOGIC d:std_logic_logic;sig:PROCESS(a,b, --ignored!! --overrides

C圖5-7例5-13的電路實(shí) 5-7所示。5-15 PORT(a,b,c: x, VAR:PROCESS(a,b, d:d:= d:=b; 5-8所示。VHDL

AX B圖5-8例5-14的電路實(shí)*1.sdown:INstd_logic_vector(8downto0); outstd_logic_vector(0to8);sdown’left=8;sdown’right=0;sdown’low=0;sdown’high=8;sdown’length=9; 第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)果剛好有事件發(fā)生在該屬性所附著的信號(hào)上(即信號(hào)有變化TRUE,否則為clk’eventandclk=’1’ 時(shí)鐘clk的上升沿。即時(shí)鐘變化了,且其值為1(從0變1。clk’eventand 時(shí)鐘clk的下降沿。即時(shí)鐘變化了,且其值為0(從1變0rising_edge(clk)clk的上升沿,clk’eventandclk=’1’等效;falling_edge(clk)clk的下降沿,clk’eventandclk=’0’等效。STD_LOGIC*3.’RANGE屬性,其生成一個(gè)限制性數(shù)據(jù)對(duì)象的范圍。如:SIGNALdata:std_logic_vector(15DOWNTO0);data’RANGE=15DOWNTO0注意:maxplusII常用電路VHDLD觸發(fā)5-16DLIBRARYUSEENTITYDFF1 CLK:IN :INSTD_LOGIC; ARCHITECTUREbhvOFDFFl1S CLK’EVENTANDCLK=‘1’THENENDIF;ENDEND語(yǔ)句的描述引進(jìn)寄存器元件,從而構(gòu)成時(shí)序電路VHDL描述時(shí)序電路最重要的途LIBRARYieee;USE (a,b: std_logic;c: PROCESS(a,b)IF(a=‘1’ANDb=‘1’) --無(wú)ELSE,其他時(shí)為0的表達(dá) END

a ELSEC<=C5-9。MAX+plusIIA、B1之前,CA、1A、B如何變化,C1【例5-18】1位數(shù)據(jù)比較器的錯(cuò)誤描述。 第第5 VHDL基本結(jié)構(gòu)與語(yǔ)

OUT a1>bl

ELSIFal<blTHEN ql<=’0’a1=b1時(shí),q1作何操作EHDIF; 5-105-18原意是設(shè)計(jì)一個(gè)純組合電路的比較器,但是由于在條件語(yǔ)句中漏掉了給出當(dāng)ENTITYCOMP_GOODISPORT(al:INBIT;b1:INq1:OUTBIT <=’1’ <=’O’END

圖5-11例5-18綜合后的門電5-20】8 PORT(data1,data2:IN std_logic_vector(7 0);ci:IN result:OUTstd_logic_vector(7 co:OUT halfadd,fulladd:std_logic_vector(8 halfadd<=data1+data ci=‘0’ result<=fulladd(7 5-21】HEX-LED std_logic_vector(3 0); : OUTstd_logic_vector(6 WHEN"0000"=>led<=WHEN"0001"=>led<=WHEN"0010"=>led<=WHEN"0011"=>led<=第5第5 VHDL基本結(jié)構(gòu)與語(yǔ)WHEN"0100"=>led<=WHEN"0101"=>led<=WHEN"0110"=>led<=WHEN"0111"=>led<=WHEN"1000"=>led<=WHEN"1001"=>led<=WHEN"1010"=>led<=WHEN"1011"=>led<=WHEN"1100"=>led<=WHEN"1101"=>led<=WHEN"1110"=>led<=WHEN"1111"=>led<="1110001";WHENOTHERS=>NULL; encoder PORT(d: std_logic_vector(7 q OUTstd_logic_vector(2 1xxxxxx11101xxxxx1xxxxxx11101xxxxx110001xxxx1010001xxx10000001xx011000001x010000000100100000000000000000000q<=d(7)=d(6)=d(5)=d(4)=d(3)=d(2)=d(1)=d(0)=“000” encoder d(7)=‘1’THENq<=“111”;ELSIFd(6)=‘1’THENq<=“110”;ELSIFd(5)=‘1’THENq<=“101”;ELSIFd(4)=‘1’THENq<=“100”;ELSIFd(3)=‘1’THENq<=“011”;ELSIFd(2)=‘1’THENq<=“010”;ELSIFd(1)=‘1’THENq<=“001”;ELSEq<=“00”;ENDIF;END 5-24 GENERIC(bussize:integer:=8); std_logic_vector(bussize-1 0); : IN std_logic;第5第5 VHDL基本結(jié)構(gòu)與語(yǔ) std_logic_vector(bussize-1 0)); oe_en= (OTHERS=>--注意此處的“Z” 5-255-12 (sin,clk

圖5-12 q1,q0 :std_logic --q1,q0不可為變量。PROCESS(clk) clk=‘1’ (NOT(q1)); (RES=1(MODE=11(MODE=10,(MODE=00 std_logic_vector 0sl_in,sr_in,reset,clk : IN std_logic; --sl_in左移數(shù)據(jù)輸入,sr_in右移數(shù)據(jù)輸入 std_logic_vector(1 0); std_logic_vector(7 0)); PROCESS(clk) clk=‘1’) (reset=‘1’) qout<=(OTHERS=> -- “01”=>qout<=sr_in&qout 1 -- “10”qout<=qout 0)& -- “11” -- --“NULL”表示無(wú)操作 M=605-27600,進(jìn)位輸入/

溫馨提示

  • 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)論