第6章VHDL描述語句第十二十三十四周_第1頁
第6章VHDL描述語句第十二十三十四周_第2頁
第6章VHDL描述語句第十二十三十四周_第3頁
第6章VHDL描述語句第十二十三十四周_第4頁
第6章VHDL描述語句第十二十三十四周_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

FPGA原理及應(yīng)用電子信息工程學(xué)院主講教師:陳斌第6章VHDL描述語句6.1VHDL描述語句概述6.2VHDL的順序描述語句6.3VHDL的并行描述語句6.4元件現(xiàn)有的軟件編程語言(如機(jī)器語言、匯編語言)和結(jié)構(gòu)化語言(如C語言、面向?qū)ο笳Z言)至形式化語言——本質(zhì)上都是依據(jù)馮.諾依曼模型,由CPU以指令方式串行執(zhí)行,語句都是逐行順序執(zhí)行的,稱之為程序。VHDL代碼(模擬硬件電路的實際執(zhí)行方式),所有的邏輯門在任何時刻都處于執(zhí)行狀態(tài),稱之為代碼。按執(zhí)行順序可分為兩大類:并發(fā)(Concurrent)代碼順序(Sequential)代碼

6.1VHDL描述語句VHDL描述語句指的是VHDL結(jié)構(gòu)體內(nèi)部的各種描述語句。6.1VHDL描述語句結(jié)構(gòu)體的一般表達(dá)如下:ARCHITECTURE結(jié)構(gòu)體名稱OF實體名稱IS[說明語句]BEGIN

(功能描述語句)ENDARCHITECTURE結(jié)構(gòu)體名稱;組合邏輯VS并發(fā)執(zhí)行代碼時序邏輯VS順序執(zhí)行代碼6.1VHDL描述語句VHDL代碼本質(zhì)上是并發(fā)執(zhí)行的。(硬件電路本質(zhì))并發(fā)代碼又稱“數(shù)據(jù)流代碼”。為了實現(xiàn)某些功能兼具順序執(zhí)行特點的功能。如:時序邏輯功能的VHDL代碼能夠?qū)崿F(xiàn)順序執(zhí)行;如:process/function/procedure語句或結(jié)構(gòu)。6.1VHDL描述語句process/function/procedure內(nèi)部的代碼才是順序執(zhí)行的(往往在設(shè)計時序電路時),但這些語句或結(jié)構(gòu)之間仍然是并發(fā)執(zhí)行的。6.1VHDL描述語句例:一段包含3個并發(fā)描述語句的代碼并發(fā)代碼要點:

1、除衛(wèi)氏塊(guardedblock)外,僅使用并發(fā)描述語句無法實現(xiàn)同步時序電路(異步時序電路是可以的);2、通常只使用并發(fā)描述語句實現(xiàn)組合邏輯電路;順序代碼要點:1、要實現(xiàn)時序邏輯電路,必須使用順序描述語句;2、順序代碼可同時實現(xiàn)組合邏輯電路與時序邏輯電路。數(shù)字電路的代碼實現(xiàn)6.2順序描述語句VHDL本質(zhì)上是一種并發(fā)執(zhí)行的代碼,但是出于設(shè)計的需要,需要使用一些能夠順序執(zhí)行的語句塊,包括:PROCESS、FUNCTION、PROCEDURE。這些語句塊之間仍然是并發(fā)執(zhí)行的,但內(nèi)部是順序執(zhí)行的,稱為順序代碼,又稱行為描述代碼。幾種常見的順序描述語句:信號賦值語句、變量賦值語句、if語句、case語句、wait語句和null語句。使用順序代碼不但可以實現(xiàn)時序邏輯,還可以實現(xiàn)組合邏輯。

進(jìn)程(process)內(nèi)部的語句是一種順序描述語句,其內(nèi)部經(jīng)常包括if,wait,case或loop語句。特點:

1、進(jìn)程與進(jìn)程,或其它并發(fā)語句之間的并發(fā)性;

2、進(jìn)程內(nèi)部的順序性;

3、要么使用敏感信號列表(sensitivitylist),要么使用wait語句,二者不可同時使用。

4、進(jìn)程必須包含在主代碼段中,當(dāng)敏感信號列表中的某個信號發(fā)生變化,或者wait語句的條件滿足時,process內(nèi)部的代碼就順序執(zhí)行一次;1.進(jìn)程(process)[標(biāo)記:]process[(敏感信號表)]

[variablename:type[range][:=初始值]]begin{順序描述語句}

endprocess[標(biāo)記];語法結(jié)構(gòu):對臨時連線的賦值,不可綜合可選,增強(qiáng)代碼可讀性,命名規(guī)則:非關(guān)鍵字1.進(jìn)程(process)敏感信號表:進(jìn)程內(nèi)要讀取的所有敏感信號(包括端口)的列表。每一個敏感信號的變化,都將啟動進(jìn)程。

注意:若電路模塊對某輸入信號不“敏感”,則該輸入信號不必放入敏感信號列表中;如同步時序電路中只對clk和rst這兩個輸入信號敏感,而對data,addr等輸入信號不敏感,則敏感信號列表中只需放入clk和rst即可;1.進(jìn)程(process)在純組合邏輯電路中,電路模塊對任意一個輸入信號都是敏感的,所以如果要使用process來實現(xiàn)一段組合邏輯電路,則必須將所有的輸入信號都放入敏感信號列表。在使用順序代碼實現(xiàn)一個同步時序電路時,必須對某些信號邊沿的跳變進(jìn)行監(jiān)視(典型的是時鐘信號clock的上升沿或下降沿);通常使用EVENT來監(jiān)視一個信號是否發(fā)生了邊沿跳變;通常在process中使用敏感信號clk來實現(xiàn)同步時序電路。注意:1.進(jìn)程(process)例:帶有異步復(fù)位端的D觸發(fā)器data_inqrstclk功能描述:時序邏輯電路的基本單元當(dāng)輸入的時鐘信號為上升沿時,輸出信號q等于當(dāng)前輸入值;異步復(fù)位端rst(reset):rst=‘1’時q=‘0’;優(yōu)先級高于當(dāng)前輸入值、時鐘信號;實現(xiàn)代碼----------------------------------------LIBRARYieee;USEieee.std_logic_1164.all;----------------------------------------entitydffisport(d,clk,rst:INstd_logic;q:OUTstd_logic);enddff;-----------------------------------------任意一個信號發(fā)生變化時,process中的所有語句就執(zhí)行一次-----------------------------------------architecturebehaviorofdffisbeginprocess(clk,rst)begin

if(rst=‘1’)thenq<=0;else(clk’eventANDclk=‘1’)thenq<=d;endif;endprocess;endbehavior;-----------------------------------------16敏感信號表的特點:(1)同步進(jìn)程的敏感信號表中只有時鐘信號。

process(clk)beginif(clk’eventandclk=‘1’)then

ifreset=‘1’thendata<=“00”;else

data<=in_data;endif;endif;endprocess;1.進(jìn)程(process)17(2)異步進(jìn)程敏感信號表中除時鐘信號外,還有其它信號。例:

process(clk,reset)begin

ifreset=‘1’thendata<=“00”;elsif(clk’eventandclk=‘1’)thendata<=in_data;endif;endprocess;1.進(jìn)程(process)(3)如果有wait語句,則不允許有敏感信號表。

PROCESS(a,b)BEGIN--sequentialstatementsENDPROCESS;

PROCESSBEGIN

WAITON/Untilsignalx/signal_expr;//先

--sequentialstatements

//后

ENDPROCESS;1.進(jìn)程(process)信號名<=表達(dá)式;說明:信號賦值采用“<=”符號。如:a<=b;信號量表達(dá)式中可以有延時,如q<=aafter2ns;信號賦值語句即可以作為并行語句出現(xiàn)在結(jié)構(gòu)體中,也可以作為順序語句出現(xiàn)在進(jìn)程中。例如:signala:bit;signalb:std_logic_vector(3downto0);a<=‘1’after2ns;b<=“1100”2.信號賦值語句變量名:=表達(dá)式;說明:變量賦值采用“:=”符號。如:a:=b;變量表達(dá)式無延時;變量賦值語句只能作為順序語句出現(xiàn)在進(jìn)程中。例如:variablea:bit;variableb:std_logic_vector(3downto0);a:=‘1’;b:=“1100”;3.變量賦值語句(1)if語句的門閂控制舉例ifa>b

theny<=‘1’endif;不完全語句產(chǎn)生時序電路。

3.if語句

只能用于順序代碼,只能在process、function和procedure中出現(xiàn)。沒有else描述!綜合后生成鎖存器(latch)!

(2)if語句的二選擇控制用條件來選擇兩條不同程序執(zhí)行的路徑。舉例ifa>b

theny<=‘1’;elsey<=‘0’;endif;完全語句產(chǎn)生組合電路。(3)if語句的多選擇控制舉例ifa>b

theny<=‘1’;elsifa=b

then

y<=‘0’;elsey<=‘0’;endif;(4)if條件表達(dá)式1

thenif條件表達(dá)式1

then………………………………endif;endif;這是一種多重IF語句嵌套式條件句。即可產(chǎn)生組合也可產(chǎn)生時序電路。----------------------------------------ENTITYmux41aISPORT(a,b,c,d:INBIT;s1,s2:INBIT;y:OUTBIT);ENDENTITYmux41a;----------------------------------------------------------------------------------------------ARCHITECTUREoneOFmux41aISSIGANALS:BIT_vector(1downto0);BEGINs<=s1&s2;process(a,b,c,d,s)beginIF(s=“00”)THENy<=a;ELSIF(s=“01”)THENy<=b;ELSIF(s=“10”)THENy<=c;ELSEy<=d;ENDIF;ENDPROCESS;ENDARCHITECTUREone;-----------------------------------------例:用IF-THEN-ELSE語句描述4選1數(shù)據(jù)選擇器case表達(dá)式iswhen選擇值1=>順序語句;when選擇值2=>順序語句;…………..

whenothers=>順序語句;endcase;

4.case語句------------------------------------ENTITYmux41aISPORT(a,b,c,d:INBIT;s1,s2:INBIT;y:OUTBIT);ENDENTITYmux41a;--------------------------------------------------------------------------ARCHITECTUREoneOFmux41aISSIGANALS:BIT_vector(1downto0);BEGINs<=s1&s2;process(a,b,c,d,s)begincasesiswhen“00”=>y<=a;when“01”=>y<=b;when“10”=>y<=c;whenothers=>y<=d;endcase;endprocess

;ENDARCHITECTUREone;-------------------------------------------------例:用case語句描述4選1數(shù)據(jù)選擇器進(jìn)程中的case注意事項:

*Case只能在進(jìn)程內(nèi)使用;*Case選擇值必須在選擇表達(dá)式的合法取值范圍內(nèi);*Case選擇值必須是互斥;不能由兩個相同的選擇值出現(xiàn);*Case選擇值必須覆蓋全面,否則需要用OTHERS來代替其他

可能取值;*Case各個選擇值之間的關(guān)系是并列的,沒有優(yōu)先權(quán)之分;IF語句由優(yōu)先權(quán)casesiswhen“00”=>y<=a;when“01”=>y<=b;when“10”=>y<=c;whenothers=>y<=d;endcase;用法與IF語句類似,且形式更加多樣。如果在process內(nèi)部使用了wait語句,則process就不能再使用敏感信號列表,并且wait語句是process內(nèi)部的第一條語句。wait條件滿足時,process內(nèi)部代碼就執(zhí)行一次。常用的三種語法:

waiton單個或多個信號;--敏感信號量變化

waituntil單個信號條件;--條件滿足(可綜合)

waitfortime;--時間到(只能仿真,不可綜合)

5.WAIT語句---------------------------------------------------------architecturecounterofcounterisbegin

process---沒有敏感信號列表

variabletemp:integerrange0to10;begin

waituntil(clk’eventANDclk=‘1’);temp:=temp+1;if(temp=10)thentemp:=0;endif;digit<=temp;endprocess;endcounter;-------------------------------------------------------例:使用waituntil語句設(shè)計模10計數(shù)器----------------------------------------------LIBRARYieee;USEieee.std_logic_1164.all;--------------------------------------------entitycounterisport(clk:INstd_logic;digit:OUTintegerrange0to9);endcounter;----------------------------------------------第二條當(dāng)一段代碼需要多次重復(fù)、順序地執(zhí)行時,loop語句非常有效。只能在process、function和procedure中使用;與generate語句的最大不同:

generate語句復(fù)制建立某項操作的0個或多個備份,這些備份并行地執(zhí)行某項操作,與先后順序無關(guān);loop語句則按順序、循環(huán)地執(zhí)行某項操作。

6.LOOP語句LOOP語句的語法結(jié)構(gòu):FOR/LOOP:循環(huán)固定次數(shù)[label:]FOR循環(huán)變量

IN范圍

LOOP

(順序描述語句)

ENDLOOP[label];WHILE/LOOP:循環(huán)執(zhí)行直到某個條件不再滿足[label:]WHILE條件表達(dá)式

LOOP

(順序描述語句)

ENDLOOP[label];上/下界必須是靜態(tài)值,有一個計數(shù)比較模塊來加以控制EXIT:結(jié)束整個循環(huán)操作[label:]EXIT[label][WHEN條件表達(dá)式];NEXT:跳出本次循環(huán)操作[label:]NEXT[loop_label][WHEN條件表達(dá)式];例:FORiIN0TOdata’rangeLOOPcasedata(i)iswhen‘0’=>count:=count+1;

whenothers=>EXIT;endcase;ENDloop;6.3并行描述語句ARCHITECTURE結(jié)構(gòu)體名稱OF實體名稱IS[說明語句]BEGIN

(并行語句)ENDARCHITECTURE結(jié)構(gòu)體名稱;常用的并發(fā)描述語句,通常位于process、function和procedure之外,包括:

運(yùn)算操作符:邏輯運(yùn)算、算術(shù)運(yùn)算等WHEN語句(when/else或with/select/when)

塊(block)語句

生成(GENERATE)語句。1.并行信號賦值語句并行信號賦值語句的特點:賦值目標(biāo)必須為信號或端口;在結(jié)構(gòu)體內(nèi)是并行執(zhí)行的;在結(jié)構(gòu)體的進(jìn)程之外使用(1)簡單信號賦值語句

賦值目標(biāo)=表達(dá)式ARCHITECTUREcurtOFbc1ISSIGNALs1,e,f,g,h:STD_LOGIC;BEGINoutput1<=aandb;output2<=c+d;g<=eorf;h<=exorf;s1<=g;ENDARCHITECTUREcurt;以下結(jié)構(gòu)體中的五條信號賦值語句的執(zhí)行是并行發(fā)生的并行語句(2)條件信號賦值語句(數(shù)字邏輯具有優(yōu)先級)

條件信號賦值語句即為WHEN_ELSE條件信號賦值語句條件信號賦值語句的一般形式為:

目的信號量<=表達(dá)式1WHEN條件1ELSE

表達(dá)式2WHEN條件2ELSE………表達(dá)式n-1WHEN條件n-1ELSE

表達(dá)式n;應(yīng)該注意,由于條件測試的順序性,第一子句具有最高賦值優(yōu)先級,第二句其次,第三句最后。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41aISPORT(a,b,c,d:INBIT;s:INBIT

_vector(0TO1);y:OUTBIT);ENDENTITYmux41a;ARCHITECTUREoneOFmux41aISBEGIN

y<=aWHENs=“00”ELSEbWHENs=“01”ELSEcWHENs=“10”ELSEd;ENDARCHITECTUREone;例:4選1數(shù)據(jù)選擇器的VHDL語言(1)

實體

結(jié)構(gòu)體

------------------------------------------------庫

-----------------程序包(3)選擇信號賦值語句(數(shù)字邏輯不具有優(yōu)先級)WITH選擇表達(dá)式SELECT賦值目標(biāo)信號<=表達(dá)式1WHEN選擇值1,

表達(dá)式2

WHEN選擇值2,

..........................

表達(dá)式nWHEN選擇值n;應(yīng)該注意,選擇信號賦值語句對選擇值的對比測試是同時發(fā)生的,不具有優(yōu)先級;選擇信號賦值語句的選擇值不允許交叉重疊;也要避免出現(xiàn)選擇值覆蓋不全的現(xiàn)象。例:

4選1數(shù)據(jù)選擇器的VHDL語言(3)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41aISPORT(a,b,c,d:INBIT;s:INBIT

_vector(0TO1);y:OUTBIT);ENDENTITYmux41a;ARCHITECTUREoneOFmux41aISBEGIN

WITHsSELECT

y<=aWHEN“00”,bWHEN“01”,cWHEN“10”,

UNAFFECTEDWHENOTHERS;ENDARCHITECTUREone;注意:必須考慮所有可能出現(xiàn)的條件(condition),需經(jīng)常使用關(guān)鍵字OTHERS。若某些條件下不需要進(jìn)行任何操作,需使用UNAFFECTED。WHENvalue的三種描述方式:

whenvalue---對單個值進(jìn)行判斷

whenvalue1

to

value2---對取值范圍進(jìn)行判斷,

---多用于枚舉類型;

whenvalue1|value2|...---對多個值進(jìn)行判斷2.生成語句(GENERATE)—可用于并發(fā)描述生成語句的作用:復(fù)制建立某項操作的0個或多個備份,這些備份并行地執(zhí)行某項操作。并行結(jié)構(gòu),與先后順序無關(guān);而順序描述語句中循環(huán)執(zhí)行某項操作的LOOP語句則必須順序的執(zhí)行這些操作。

分為兩類:

for┅generate:采用一個離散的范圍決定

備份的數(shù)目。

If┅generate:有條件地生成0個或1個

備份。(1)for┅generate語句語法:range:整數(shù)表達(dá)式to

整數(shù)表達(dá)式

整數(shù)表達(dá)式downto

整數(shù)表達(dá)式

for---loop語句與for┅generate的比較:標(biāo)號:for循環(huán)變量inrange

generate{并行語句}

endgenerate[標(biāo)號];例:4位移位寄存器例:4位移位寄存器--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------元件的使用(實例化)元件的聲明4位移位寄存器的等效描述:(2)If┅generate語句語法:

if語句與If┅generate的區(qū)別:

1、If┅generate沒有類似于if語句的

else或

elsif分支語句。

2、if語句是順序語句,If┅generate為并行語句。標(biāo)號:if條件表達(dá)式generate{并行語句}endgenerate[標(biāo)號];注意1:GENERATE中循環(huán)操作的上界和下界必須是靜態(tài)的。如為非靜態(tài)參數(shù),則往往不可綜合。例:

signalchoice:integerrange0to3;

NotOK:FORiIN0TOchoiceGENERATE(并發(fā)描述語句)ENDGENERATE;注意2:GENERATE語句使用過程中的多值驅(qū)動問題。正確的用法:

OK:FORiIN0TO7GENERATE

output(i)<=‘1’when(a(i)ANDb(i))=‘1’ELSE‘0’;ENDGENERATE;錯誤的用法:

NotOK:FORiIN0TO7GENERATE

accum<=“1111”when(a(i)=‘1’)else“0000”;ENDGENERATE;在順序描述語句LOOP中則不存在多值驅(qū)動問題。

一個元件是一段結(jié)構(gòu)完整的代碼(包括庫聲明、實體和結(jié)構(gòu)體這些基本的組成部分),可以以一個獨立的.vhd文件存在。如果將這些代碼聲明為component,就可以被其它電路或主代碼調(diào)用,從而使代碼具有層次化的結(jié)構(gòu)。

(函數(shù)和過程則只能存放在包集或主代碼中,不能以獨立的.vhd文件存在并被調(diào)用。)6.4元件(component)元件是一種進(jìn)行代碼分割、代碼共享和代碼重用的方法。例如,可以將常用的觸發(fā)器、乘法器、加法器和基本門電路存放為多個.vhd文件,然后將這些代碼聲明為元件并存放到一個庫中,從而可以供所有的設(shè)計者方便地調(diào)用。在使用(實例化)一個元件之前,必須先對該元件進(jìn)行聲明。元件的聲明:component元件名

ISport(端口聲明);endcomponent;6.4元件(component)可在以下部分聲明元件:

結(jié)構(gòu)體(Architecture)包集(Package)塊(Block)被聲明元件的來源:

VHDL設(shè)計實體;其它HDL設(shè)計實體;另外一種標(biāo)準(zhǔn)格式的文件,如EDIF或XNF;廠商提供的工藝庫中的元件、IP核。6.4元件(component)元件的實例化(componentinstantiation)

定義:把低層元件安裝(調(diào)用)到當(dāng)前層次設(shè)計實體內(nèi)部的過程。label:元件名稱

portmap(端口列表);

端口列表將元件預(yù)定義的端口和實例化時的實際端口關(guān)聯(lián)起來。6.4元件(component)例:以一個反相器為例,該反相器已經(jīng)完成設(shè)計(文件inverter.vhd)并編譯到了庫work中。調(diào)用過程:----------元件聲明-----------componentinverterisport(a:INstd_logic;b:outstd_logic);endcomponent;----------------元件實例化---------u1:inverterportmap(x,y);位置映射,端口的排列順序必須一一對應(yīng)6.4元件(component)元件聲明的兩種位置(或兩種方法):a.在主代碼段中聲明b.在包集package中聲明例:

在主代碼中聲明元件abcd設(shè)計步驟:1、編寫幾個基本組成模塊(inverter/nand_2/nand_3)的.vhd文件;2、在主代碼中將這幾個基本組成模塊聲明為元件;3、在主代碼中實例化這些元件。----------------文件inverter.vhd-------------libraryieee;useieee.std_logic_1164.all;entityinverterisport(a:instd_logic;b:outstd_logic);endinverter;architectureinverterofinverterisbeginb<=NOTa;endinverter;------------------------------------------------具體實現(xiàn)(1):三個待聲明的.vhd文件----------------文件nand_2.vhd-------------libraryieee;useieee.std_logic_1164.all;entitynand_2isport(a,b:instd_logic;c:outstd_logic);endnand_2;architecturenand_2ofnand_2isbeginc<=NOT(aANDb);endnand_2;----------------------------------------------------------------文件nand_3.vhd-------------libraryieee;useieee.std_logic_1164.all;entitynand_3isport(a,b,c:instd_logic;d:outstd_logic);endnand_3;architecturenand_3ofnand_3isbegind<=NOT(aANDbANDc);endnand_3;------------------------------------------------注意:文件名、實體名必須一致!具體實現(xiàn)(2):主.vhd文件,將前三個文件的代碼作為元件加以實例化,用以實現(xiàn)新的功能。----------------主文件project.vhd-------------libraryieee;useieee.std_logic_1164.all;entityprojectisport(a,b,c,d:instd_logic;x,y:outstd_logic);endproject;architecturestructuralofprojectis-------------元件在主代碼中的聲明-------componentinverterisport(a:instd_logic;b:outstd_logic);endcomponent;--對應(yīng)文件inverter.vhd--------------------------------------------componentnand_2isport(a,b:instd_logic;c:outstd_logic);endcomponent;--對應(yīng)文件nand_2.vhd

---------------------------------------------componentnand_3isport(a,b,c:instd_logic;d:outstd_logic);endcomponent;--對應(yīng)文件nand_3.vhd------------------------------------------------注意:主文件名與其實體名必須一致,元件名稱必須與元件所在文件的文件名及文件中的實體名一致!----------------------------signalw:std_logic;begin

u1:inverterportmap(b,w);

u2:nand_2portmap(a,b,x);

u3:nand_3portmap(w,c,d,y);endstructural;------------------------------------------------設(shè)計步驟:1、編寫幾個基本組成模塊(inverter/nand_2/nand_3)的.vhd文件;2、創(chuàng)建一個包集文件,在該包集中將這幾個基本組成模塊聲明為元件;3、在主代碼中use該包集;4、在主代碼中實例化這些元件。例:在包集中聲明元件abcd雖多了一個包集文件,但可避免在主代碼中每實例化一個元件就聲明一次,在有多個project時很方便!具體實現(xiàn):省略前三個.vhd文件----------------主文件project.vhd-------------libraryieee;useieee.std_logic_1164.all;usework.my_components.all;entityprojectisport(a,b,c,d:instd_logic;x,y:outstd_logic);endproject;architecturestructuralofprojectis----------------------------signalw:std_logic;beginu1:inverterportmap(b,w);u2:nand_2portmap(a,b,x);u3:nand_3portmap(w,x,c,d,y);endstructural;------------------------------------------------------包集文件my_components.vhd----------libraryieee;useieee.std_logic_1164.all;packagemy_componentsis-------------元件在包集中的聲明-------componentinverterisport(a:instd_logic;b:outstd_logic);endcomponent;--對應(yīng)文件inverter.vhd--------------------------------------------componentnand_2isport(a,b:instd_logic;c:outstd_logic);endcomponent;--對應(yīng)文件nand_2.vhd---------------------------------------------componentnand_3isport(a,b,c:instd_logic;d:outstd_logic);endcomponent;--對應(yīng)文件nand_3.vhd------------------------------------------------endmy_components;------------------------------------------------注意:主文件中包集名稱必須與包集文件名及包集文件中包集定義名一致!例:1位二進(jìn)制全加器的VHDL設(shè)計(p75-76)通過該圖可以看見,要實現(xiàn)全加器,需要調(diào)用半加器和或元件,因此需要先寫出半加器的程序和或的程序。

LIBRARYIEEE;--或門邏輯描述

USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor2a;ARCHITECTUREfulOFor2aISBEGIN

c<=aORb;ENDARCHITECTUREfu1;(1)或門邏輯描述------------------------------------------------------------------------------------------------加數(shù)輸入和輸出進(jìn)位輸出absoco0000011010101101半加器:即只有兩個加數(shù)相加,而無進(jìn)位標(biāo)志一起相加的加法運(yùn)算。半加器真值表(2)半加器設(shè)計描述LIBRARYIEEE;--半加器描述(1)USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderIS

PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisBEGIN

so<=aXORb;co<=aANDb;ENDARCHITECTUREfh1;結(jié)構(gòu)體(2)半加器設(shè)計描述------------------------------------------------------------------------------------------------------------------------------ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderis

SIGNALabc:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN

abc<=a&b;PROCESS(abc)BEGIN

CASEabcISWHEN"00"=>so<='0';co<='0';WHEN"01"=>so<='1';co<='0';WHEN"10"=>so<='1';co<='0';WHEN"11"=>so<='0';co<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREfh1;2.進(jìn)程語句1.信號語句---(2)半加器設(shè)計描述-------------------------------------------------------------------------------------------------半加器采用case語句的RTL圖全加器即兩個加數(shù)和一個進(jìn)位一起做加法,共三個輸入信號。加數(shù)輸入和輸出進(jìn)位輸出ainbinsumcout00110011010101010110100100010111進(jìn)位輸入cin00001111(3)全加器設(shè)計描述異或全加器的描述(方法1)1位二進(jìn)制全加器頂層設(shè)計描述,采用元件例化及層次化設(shè)計。LIBRARYIEEE;--1位二進(jìn)制全加器頂層設(shè)計描述USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderIS

PORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;1位二進(jìn)制全加器的實體---------------------------------------------------------------------------------------ARCHITECTUREfd1OFf_adderISCOMPONENTor2aPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTh_adderPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;BEGINu1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);u2:h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2aPORTMAP(a=>d,b=>f,c=>cout);ENDARCHITECTUREfd1;調(diào)用半加器聲明語句調(diào)用或

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論