VHDL數(shù)據(jù)對象和數(shù)據(jù)類型課件_第1頁
VHDL數(shù)據(jù)對象和數(shù)據(jù)類型課件_第2頁
VHDL數(shù)據(jù)對象和數(shù)據(jù)類型課件_第3頁
VHDL數(shù)據(jù)對象和數(shù)據(jù)類型課件_第4頁
VHDL數(shù)據(jù)對象和數(shù)據(jù)類型課件_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型

△類型用于三種數(shù)據(jù)對象:信號、變量和常量?!餍盘枌ο笫沁B接實體的主要機制,用信號在實體之間傳送信息?!髯兞繉ο笪挥谶M(jìn)程和子程序中,主要用于局部計算結(jié)果的暫存?!鞒A繉ο竺麛?shù)據(jù)類型的一種特殊值?!髡麛?shù)類型的行為和算術(shù)中整數(shù)相似,而實型類型行為和算術(shù)中的實數(shù)類似?!骺擅杜e類型是抽象數(shù)據(jù)類型,它描述用戶定義的操作并使模塊更可讀?!魑锢眍愋捅硎救缇嚯x、電流和時間一類的物理量?!鲝?fù)合類型由數(shù)組和記錄組成,數(shù)組是相同類型元素的分組,而記錄是不同類型元素的分組?!鲗ぶ奉愋拖笠话憔幊陶Z言中的指針?!魑募愋褪菑哪K中能讀和能寫特定類型的線性數(shù)據(jù)流?!髯宇愋湍軐绢愋图酉拗?。VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(1)VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(2)數(shù)據(jù)對象的分類:1信號:它表示把元件的裝配端口連在一起的互連線。2變量:用于對暫時數(shù)據(jù)的局部貯存,變量只在進(jìn)程內(nèi)部是可視的。3常量:顧名思義是規(guī)定的值。信號數(shù)據(jù)對象:把實體連在一起形成模塊,信號是實體間動態(tài)數(shù)據(jù)交換的手段,信號說明如下:SIGNALsignal_name:signal_type[:=initial_value];

即在關(guān)鍵詞SIGNAL后跟一個或者多個信號名,每個信號名將建一個新信號,用冒號:把信號名和信號的數(shù)據(jù)類型分隔開,信號數(shù)據(jù)類型規(guī)定信號包含的數(shù)據(jù)類型信息,最后信號還包含初始化信號指定的初值。實體說明部分、結(jié)構(gòu)體說明和程序包說明都能說明信號,全局信號在程序包中說明,它們被所屬的實體分享。USEWORK.std_logic_1164.ALL;PACKAGEsigdeclISTYPEbus_typeISARRAY(0to7)OFstd_logic;

SIGNALvcc

:std_logic:='1';

SIGNALground:std_logic:='0';FUNCTIONmagic_function(a:INbus_type)RETURNbus_type;ENDsigdecl;USEWORK.sigdecl.ALL;USEWORK.std_logic_1164.ALL;ENTITYboard_designisPORT(data_in:INbus_type;data_out:OUTbus_type);SIGNALsys_clk:std_logic:='1';ENDboard_design;ARCHITECTUREdata_flowOFboard_designIS

SIGNALint_bus:bus_type;CONSTANTdisconnect_value:bustype:=('X','X','X','X','X','X','X','X');BEGIN

int_bus<=data_inWHENsys_clk='1'ELSEint_bus;data_out<=magic_function(int_bus)WHENsys_clk='0'ELSEdisconnect_value;sys_clk<=NOT(sys_clk)after50ns;ENDdata_flow;在程序包中說明的全局信號在實體中說明的sys_clk在結(jié)構(gòu)體中說明的int_bus不能在主動進(jìn)程中說明信號!board_design的實體VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(3)在程序包sigdecl中說明的全局信號Vec和ground可被多個實體引用,為引用程序包,用VHDL的USE付句。USEwork.sigdecl;USEwork.sigdecl.ground;或USEwork.sigdecl.ALLsys_clk信號能被board_design實體內(nèi)和board_design實體的任何結(jié)構(gòu)體所引用,sys_clk信號對其實體全局化int_bus信號是結(jié)構(gòu)體局部信號,故它只能在data_flow結(jié)構(gòu)體中,或在結(jié)構(gòu)體的任何進(jìn)程語句中被引用。變量在進(jìn)程和子程序中做局部的數(shù)據(jù)存儲,處理信號值要花時間,而變量的賦值都是立即發(fā)生的:VARIABLEvariable_name,variable_name:variable_type[:=value];關(guān)鍵詞VARIABLE后跟著一個或多個變量名,每個名字建立一個新變量,結(jié)構(gòu)variable_type定義變量的數(shù)據(jù)類型,并且還可以指定一個可選的初值,只可以在進(jìn)程說明部分和子程序說明部分說明變量:VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(4)USEWORK.std_logic_1164.ALL;ENTITYand5ISPORT(a,b,c,d,e:INstd_logic;q:OUTstd_logic);ENDand5;ARCHITECTUREand5OFand5ISBEGINPROCESS(a,b,c,d,e)

VARIABLEstate:std_logic;

VARIABLEdelay:time;BEGINstate:=aANDbANDcANDdANDe;IFstate='1'THENdelay:=4.5ns;ELSIFstate='0'THENdelay:=3ns;ELSEdelay:=4ns;ENDIF;q<=stateAFTERdelay;ENDPROCESS;ENDand5;△變量處理起來更快些,因為變量賦值是立即發(fā)生的,而信號卻必須為此事件作一個安排處置?!髯兞坑煤苌俚拇鎯ζ?,相反為了做一個調(diào)度安排和處理信號屬性,需要存儲更多的信號信息?!餍盘柨赡苄枰靡粋€WAIT語句,以便為相同執(zhí)行迭代做信號賦值的同步處理。用此兩個變量使程序的可讀性更好VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(5)常量對象是為特定的數(shù)據(jù)類型值所賦予的名稱,用常量的文件模塊容易更新。模塊需要在多個具體元件中放一個固定值就用常量。

CONSTANTPI:REAL:=3.1414;這種模塊的表示方式也變得更可讀。常量描述:

CONSTANTconstant_name,constant_name:type_name[:=value];VHDL也支持延遲常數(shù),常在程序包說明中說明常量,將在程序包體中指定常量的值。常量有和信號一樣的可視性規(guī)則:在程序包中說明的常量被全局化。在實體說明部分的常量被那個實體中任何結(jié)構(gòu)體引用在結(jié)構(gòu)體中的常量能被其結(jié)構(gòu)體內(nèi)部任何語句采用,包括為進(jìn)程語句采用。在進(jìn)程說明中說明的常量只能在進(jìn)程中使用。在數(shù)組和一些線性運算中經(jīng)常用常量表,VHDL的設(shè)計描述用常量表特別適于實現(xiàn)ROM網(wǎng)絡(luò)的電路與函數(shù)設(shè)計VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(6)數(shù)據(jù)類型規(guī)定數(shù)據(jù)對象的特征和取值的范圍,VHDL含有很寬范圍的數(shù)據(jù)類型,用它們可建立簡單的或者復(fù)雜的對象。一個新的數(shù)據(jù)類型必須先建立一個類型說明。類型說明規(guī)定類型名和類型的范圍,在程序包說明部分、實體說明部分、結(jié)構(gòu)體說明部分、子程序說明部分和進(jìn)程說明部分中都允許有類型說明。

TYPEtype_nameIStype_mark;類型標(biāo)志type_mark包容了規(guī)定類型的很廣泛的方法。VHDL數(shù)據(jù)類型圖示四大類是標(biāo)量類型、復(fù)合類型、尋址類型和文件類型。標(biāo)量類型包括所有簡單的類型,如象整數(shù)和實數(shù);復(fù)合類型包括數(shù)組和記錄;尋址類型在一般編輯語言中等價為指針;最后,文件類型用設(shè)計者定義的文件類型為設(shè)計者提供所說明的文件對象。VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(7)標(biāo)量類型描述一次持有一個值的對象,說明為標(biāo)量類型的對象在任何時間最多能持一種標(biāo)量值,整個對象范圍都可引用標(biāo)量類型,它包括四類類型:1整數(shù)類型

2實數(shù)類型

3可枚舉數(shù)類型

4物理類型整數(shù)類型嚴(yán)格地與算術(shù)整數(shù)相似,所有預(yù)定的算術(shù)函數(shù),像加、減、乘和除都適于整數(shù)類型,VHDL標(biāo)準(zhǔn)程序包規(guī)定整數(shù)的最小范圍:從-2,147,483,647到+2,147,483,6472的補碼表示方式規(guī)定整數(shù)的范圍從-2,147,483,648到+2,147,483,647

VHDL整數(shù)定義的范圍是對0值對稱的。ARCHITECTUREtestOFtestISBEGINPROCESS(X)VARIABLEa:INTEGER;VARIABLEb:int_type;BEGINa:=1;--ok1a:=-1;--ok2a:=1.0;--error3ENDPROCESS;ENDtest;VHDL很強的數(shù)據(jù)類型為賦值提供了一種校驗操作VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(8)實數(shù)類型模仿描述數(shù)學(xué)上實數(shù)對象,它們表示整數(shù)值和分?jǐn)?shù)值范圍的數(shù)。標(biāo)準(zhǔn)庫中標(biāo)準(zhǔn)程序包指定實數(shù)的最小范圍從-1.0E+38到+1.0E+38。ARCHITECTUREtestOFtestISsignala:REAL;BEGINa<=1.0;--ok1a<=1;--error2a<=-1.0E10;--ok3a<=1.5E-20;--ok4a<=5.3ns;--error5NEDtest;可枚舉數(shù)據(jù)類型是非常強的抽象建模工具,可用它嚴(yán)格表式一個特定操作所需的值,由于可枚舉類型的所有字面值都由用戶定義,如字母的字面值、標(biāo)識符字符串a(chǎn)bc,a和black和用引號括起來的單個字符字面值(`X',`1'和`0’)。對四態(tài)仿真值系統(tǒng)典型的可枚舉類型表示如下:

TYPEfourvalIS(`X',`0',`1',`Z');。`X'不定態(tài)值。`0'邏輯值0或值為假。`1'邏輯值1或值為真。`Z'三態(tài)值或收集被開路的值把邏輯值`1'和`0'與整數(shù)值的1和0的字面值分開,在可枚舉類型中用1和0將是一個錯誤,因為這些是整形值VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(9)TYPEclolr

IS(red,yellow,blue,green,orange);在Color類型中的類型值全都是標(biāo)識符。標(biāo)識符表示該類型的一種唯一值,因此,類型中的所有標(biāo)識符必須是唯一的。

標(biāo)識符在類型中出現(xiàn)由左向右的次序決定此型中的標(biāo)識符類型位序,如red有0的位序碼,yellow屬于1,以此類推2,3,...等??擅杜e類型典型的用法可把一個微處理器的全部指令表示成一個可枚舉類型:PACKAGEinstrISTYPEinstructionIS(add,sub,lda,ldb,sta,stb,outa,xfr);ENDinstr;USEWORK.instr.ALL;ENTITYmpISPORT(instr:INinstruction;addr:ININTEGER;data:INOUTINTEGER);ENDmp;ARCHITECTUREmpOFmpISBEGINPROCESS(instr)TYPEregtypeISARRAY(0TO255)OFINTEGER;VARIABLEa,b:INTEGER;VARIABLEreg:regtype;VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(10)BEGIN--selectinstructiontoexecuteCASEinstrisWHENlda=>a:=data;--loadaaccumulatorWHENldb=>b:=data;--loadbaccumulatorWHENadd=>a:=a+b;--addaccumulatorsWHENsub=>a:=a-b;--subtractaccumulatorsWHENsta=>reg(addr):=a;--putaaccuminregarrayWHENstb=>reg(addr):=b;--putbaccuminregarrayWHENouta=>data<=a;--outputaaccum

WHENxfr=>--transferbtoaa:=b;ENDCASE;ENDPROCESS;ENDmp;該模塊接收一個指令流(instr),一個尋址流(addr)和一個數(shù)據(jù)流(data),根據(jù)instr的可枚舉的值去執(zhí)行相適應(yīng)的指令,用一個CASE語句選執(zhí)行的指令、執(zhí)行語句并將等待下一個指令的處理。用可枚舉數(shù)據(jù)類型的狀態(tài)機例子。USEWORK.std_logic_1164.ALL;ENTITYtraffic_lightISPORT(sensor:INstd_logic;clock:INstd_logic;red_light:OUTstd_logic;green_light:OUTstd_logic;yellow_light:OUTstd_logic);ENDtraffic_light;ARCHITECTUREsimpleOFtraffic_lightISTYPEt_stateis(red,green,yellow);SIGNALpresent_state,next_state,:t_state;BEGIN

PROCESS(present_state,sensor)BEGINCASEpresent_stateISWHENgreen=>

next_state<=yellow;red_light<='0';green_light<='1';yellow_light<='0';VHDL的數(shù)據(jù)對象和數(shù)據(jù)類型(11)S1HW綠燈亮S3FR綠燈亮S4FR黃燈亮S2HW黃燈亮car_on_short=falseorTimed_out_long=Truecar_on_Farmroad=TrueandTimed_out_short=TrueTimed_out_short=TrueTimed_out_long=True交通控制燈的狀態(tài)轉(zhuǎn)移圖

鄉(xiāng)間公路FL高速公路HLWHENred=>red_light<='1';green_light<='0';yellow_light<='0';IF(sensor='1')THEN

next_state<=green;ELSEnest_state<=red;ENDIF;WHENyellow=>red_light<='0';green_light<='0';yellow_light<='1';

next_state<=red;ENDCASE;ENDPROCESS;PROCESSBEGINWAITUNTILclock'EVENTandclock='1';present_state<=next_state;ENDPROCESS;ENDsimple;該狀態(tài)機由兩個進(jìn)程描述,一個進(jìn)程算到下一個邏輯狀態(tài)的轉(zhuǎn)換條件,鐘控進(jìn)程鎖存下一狀態(tài)到當(dāng)前狀態(tài)TLC設(shè)計的規(guī)范與步驟設(shè)計在FR(Farmroad縮寫為FR)與HW(Highway縮寫為HW)十字交叉口的TLC(TLC--TrafficLightController)自然語言描述:在FR與HW的十字交叉口(見圖1)靠FR的兩邊各設(shè)一個汽車檢測器,用以檢查FR上是否有汽車過往?檢測出有汽車(Car_on_FR--C_O_F)作為系統(tǒng)的一個輸入信號。TLC向FR和HW上的兩組交通燈各發(fā)出兩個控制信號;控制FR的交通燈(Farmroad_Light縮寫為FL),和控制HW上的交通燈(Highway_Light縮寫為HL)。FR上檢測到有汽車行駛則HW上交通燈為紅燈,相反FR上的交通燈應(yīng)保持綠燈亮且維持亮綠燈的時間不能超過一個給定的長時間(Long_Time-LT)間隔。HW上保持綠燈亮的時間也不應(yīng)比這個給定長時間間隔短。亮紅燈轉(zhuǎn)為亮綠燈之間有一段亮黃燈時間,黃燈亮?xí)r間不超過給定的短時間間隔(Short_Time-ST)。反之,從亮綠燈到亮紅燈的轉(zhuǎn)換亦同。

FL

鄉(xiāng)間高速HL

公路

公路圖9_1HW和FR交叉路口的交通燈上述設(shè)計規(guī)范要完成三方面的設(shè)計描述:定義頂層的接口(I/O);描述底層的行為功能;設(shè)計驗證方案(即設(shè)計仿真的激勵與輸出仿真結(jié)果)。為此,TLC的設(shè)計分以下幾步:

定義設(shè)計用的程序包,程序包中描述設(shè)計用的數(shù)據(jù)類型、子類型、函數(shù)和過程等。設(shè)計頂層符號的接口(即輸入和輸出端口)并說明其數(shù)據(jù)類屬。設(shè)計電路的行為功能,對具體的控制過程與方式進(jìn)行描述。設(shè)計仿真方案,開發(fā)激勵矢量為整個系統(tǒng)的正常工作設(shè)計一個具體的定時系統(tǒng)。為映射具體(物理)實現(xiàn)方式進(jìn)行描述,因為此例打算用PLA電路實現(xiàn),故應(yīng)描述一個TLC的積之和的函數(shù)。把設(shè)計規(guī)范從自然語言轉(zhuǎn)換為機器接受的硬件描述語言是設(shè)計描述。可用4個有限狀態(tài)來描述交通燈的控制行為,故TLC的設(shè)計是一個有限狀態(tài)機。它有4個狀態(tài):1)初始狀態(tài)(S1);HW亮綠色交通燈時,鄉(xiāng)間道路的紅色交通燈亮。2)第二個狀態(tài)(S2);HW變?yōu)辄S色交通燈亮的等待切換狀態(tài)。3)第三個狀態(tài)(S3);HW紅色交通燈亮?xí)r,鄉(xiāng)間道路的綠色交通燈亮。4)第四個狀態(tài)(S4);FR變?yōu)辄S色交通燈亮的等待切換狀態(tài)。須指出,HW上燈為綠色時相反在鄉(xiāng)間道路上是紅色。

S1HW綠燈亮S3FR綠燈亮S4FR黃燈亮S2HW黃燈亮car_on_short=falseorTimed_out_long=Truecar_on_Farmroad=TrueandTimed_out_short=TrueTimed_out_short=TrueTimed_out_long=True交通控制燈的狀態(tài)轉(zhuǎn)移圖表1交通控制燈的狀態(tài)轉(zhuǎn)移表當(dāng)前轉(zhuǎn)移條件下一 輸出狀態(tài)狀態(tài)狀態(tài)高速公路鄉(xiāng)間公路亮燈顏色亮燈顏色S1Car_on_Farmroad=TRUE

Timed_out_long=TRUE

S2

綠紅

S2Timed_out_short=TRUE

S3

黃紅

S3Car_on_Farmroad=FALSE

Time_out_short=TRUE

S4

紅綠

S4Time_out_short=TRUE S1

紅黃 對4個狀態(tài),3個信號(一個輸入,二個輸出)需建立兩種數(shù)據(jù)類型的設(shè)計對象;一種是系統(tǒng)的可枚舉數(shù)據(jù)類型,即:

typestateis(Highway_Light_Green,Highway_Light_Yellow,Farmway_Light_Green,Farmway_Light_Yellow);另一種燈亮顏色的可枚舉數(shù)據(jù)類型,即:

typeColoris(Green,Yellow,Red,Unknown);控制亮燈時間設(shè)置兩個時間常量(即LT和ST),可用類屬向?qū)嶓w傳遞這種設(shè)計信息,這兩個常量都是時間類型的數(shù)據(jù)。為使系統(tǒng)正常動作,配合控制器工作的定時器Timer應(yīng)該產(chǎn)生三個信號:新狀態(tài)的啟動信號(StartTime-TS)、超過短定時常數(shù)(Timed_out_short-TOS)的輸出信號超過長定時常數(shù)(Timed_out_Long_TOL)的輸出信號它們與(C_O_F)都作為系統(tǒng)狀態(tài)轉(zhuǎn)換的控制條件須指出,C_O_F信號的數(shù)據(jù)類型是布爾類型的,它只有有汽車(TRUE)和沒有汽車(FALSE)兩種。歸納一下:這是個4個狀態(tài)的有限狀態(tài)機的設(shè)計;它有3種信號端口;為設(shè)計定義了兩種數(shù)據(jù)類型(可枚舉數(shù)據(jù)類型的狀態(tài)變量和燈的顏色控制信號;布爾數(shù)據(jù)類型說明的鄉(xiāng)間公路上汽車有無的檢測);還定義了兩種控制常量(即綠燈亮的最長持續(xù)時間和黃燈亮的最短保持時間)。下面我們可以先用VHDL語言為設(shè)計描述一個程序包(Package)。把該設(shè)計公用部分的資源均放在程序包中說明,然后轉(zhuǎn)入實體(定義端口、類屬和數(shù)據(jù)類型)描述,最后在結(jié)構(gòu)體中說明交通燈控制器的行為。PACKAGETraffic_packageISTYPEColorIS(Green,Yellow,Red,Unknown);TYPEStateIS(Highway_light_Green,Highway_light_Yellow,Farmroad_light_Green,Farmroad_light_Yellow);ENDTraffic_package;

USEWork.Traffic_package.all;

ENTITYTraffic_Light_ControllerISGENERIC(long_time:Time;Short_time:Time);PORT(Car_on_Farmroad:INBOLLEAN;Highway_light:OUTColor;Farmroad_light:OUTColor);ENDTraffic_light_controller;

ARCHITECTURE

SpecificationOFTraffic_Light_ControllerISSIGNALpresent_state:state:=Highway_light_Green;

SIGNALTimed_out_long:Boolean:=FALSE;SIGNALTimed_out_short:Boolean:=FALSE;SIGNALStart_timer:Boolean:=FALSE

BEGIN

Controller_Process:PROCESSBEGINCASEpresent_stateISWHENHighway_light_Green=>IFCar_on_FarmroadANDTimed_Out_LongTHENStart_Timer<=NOTStart_timer;

present_state<=Highway_light_Yellow;ENDIF;WHENHighway_light_Yellow=>IFTimed_out_shortTHENStart_Timer<=NOTStart_Timer;

present_start<=Farmroad_Light_Green;ENDIF;WHENFarmroad_light_Green=>IFNOTCar_on_FarmroadorTimed_out_longTHENStart_timer<=NOTStart_timer;

Present_state<=Farmroad_light_Yellow;ENDIF;WHENFarmroad_light_Yellow=>IFTimed_out_shortthenStart_Timer<=NOTStart_Timer;

Present_state<=Highway_light_Green;ENDIF;ENDCASE;

WaitonCar_on_Farmroad,Timed_out_long,Timed_out_short;

ENDPROCESS;--下面用賦值語句設(shè)置高速公路燈上的類型。--Highway_light_set:

WITHPresent_stateSELECTHighway_light<=GreenWHENHighway_light_Green,YellowWHENHighway_light_Yellow,RedWHENFarmroad_light_Green|

Farmroad_light_Yellow;

--Farmroad_light_set:WITHPresent_stateselectFarmroad_light<=GreenWHENFarmroad_light_Green,YellowWHENFarmroad_light_Yellow,RedWHENHighway_light_Green|

Highway_Light_Yellow;

--Timer_Process:PROCESSBEGINTimed_out_long<=FALSE,TRUEafterLong_Time;Timed_out_short<=FALSE,TRUEafterShort_Time;WAITonState_Timer;ENDPROCESS;

ENDSpecification;設(shè)計一個測試方案驗證設(shè)計描述的正確性。主要為系統(tǒng)仿真測試設(shè)計一個激勵信號:USEWork.Traffic_Package.all;ENTITYTLC_testISENDTLC_Test;ARCHITECTURETestofTLC_testISSIGNALCar_on_Farm_road:Bollean:=FALSE;SIGNALHighway:Color:=Green;SIGNALFarmroad:Color:=Red;COMPONENTTLCGENERIC(long_Time:Time;short_Time:Time);PORT(Car_on_Farmroad:INBoolean;Highway_light:OUTColor;Farmroad_light:OUTColor);ENDCOMPONENT;BEGIN

GENERICMAP(5ns,2ns);PORTMAP(Car_on_Farm_Road,Highway,Farmroad);

Car_on_Farm_Road<=FALSE,TRUEAFTER1ns,FALSEAFTER10ns,FALSEAFTER20ns;ENDTest;現(xiàn)在有了兩個符號實體;一個是TLC的實體,一個是TLC_Test的實體。下面將采用VHDL中的配置語句將它們連在一起。USEWork.allCONFIGURATIONSpecOFTLC_TestISForTestFORController:TLCUSEENTITYWork.TLC(specification);ENDFOR;ENDFOR;ENDspec;

這個配置語句把TLC設(shè)計規(guī)范所建立的行為描述與交通燈測試模塊連接起來了。因此可以用TLC_test模塊所規(guī)定的激勵信號Car_on_Farm_Road,對TLC的設(shè)計描述進(jìn)行測試驗證。并給出了如下的仿真結(jié)果。前面的設(shè)計描述是可仿真的,但不是可綜合的。對設(shè)計描述細(xì)化,使其變?yōu)橛瞄T級網(wǎng)表表達(dá)的形式。選擇預(yù)定義的數(shù)據(jù)類型Bit建立可綜合的設(shè)計描述首先要把原來的可枚舉數(shù)據(jù)類型轉(zhuǎn)換為預(yù)定義的Bit數(shù)據(jù)類型,Bit預(yù)定義數(shù)據(jù)類型是IEEESystem1076和IEEE1164所支持的預(yù)定義數(shù)據(jù)類型。新的程序包把與數(shù)據(jù)類型有關(guān)的定義和操作打包,要重寫內(nèi)部信號的各種操作,并把從端口傳給電路的值的數(shù)據(jù)類型轉(zhuǎn)換成bit數(shù)據(jù)類型,反過來把電路經(jīng)端口輸出的值從Bit數(shù)據(jù)類型還原為原來的數(shù)據(jù)類型。數(shù)據(jù)類型的轉(zhuǎn)換函數(shù)和按Bit數(shù)據(jù)類型定義的常量:

USEWork.Traffic_Package.all;PACKAGEdesign_packageis

SUBTYPEdata_typeISBIT;TYPEstate_bitISARRAY(0TO1)OFdata_type;TYPEcolor_bitISARRAY(0TO1)OFdata_type;

CONSTANTGreen_light:colre_bits:=B“00”;CONSTANTYellow_light:colre_bits:=B“01”;CONSTANTRed_light:colre_bits:=B“10”;CONSTANTUnknown_light:colre_bits:=B“11”;CONSTANTHG_state:state_bits:=B“00”;CONSTANTHY_state:state_bits:=B“01”;CONSTANTFG_state:state_bits:=B“11”;CONSTANTFY_state:state_bits:=B“10”;

FUNCTIONbits_to_color(bits_in:INcolor_bits)RETURNcolor;

FUNCTIONcolor_to_bits(color_in:INcolor)RETURNcolor_bits;FUNCTIONbits_to_state(bits_in:INstate_bits)

RETURNstate;

FUNCTIONstate_to_bits(state_in:INstate)RETURNstate_bits;FUNCTIONbit_to_boolean(bit_in:INbit)RETURNboolean;FUNCTIONboolean_to_bits(boolean_in:INboolean)RETURNbit;

ENDdesign_package;描述系統(tǒng)狀態(tài)Typestate_Bit是Bit數(shù)據(jù)類型的數(shù)組和TypeColor_Bits是Bit預(yù)定義數(shù)據(jù)類型的數(shù)組,它們替代原來系統(tǒng)狀態(tài)和亮燈顏色的可枚舉數(shù)據(jù)類型。子數(shù)據(jù)類型Data_type也是預(yù)定義Bit類型。端口發(fā)生6種數(shù)據(jù)類型的轉(zhuǎn)換,對應(yīng)有6個轉(zhuǎn)換函數(shù),轉(zhuǎn)換函數(shù)的功能在程序包體中定義。說明了8個常量。

PACKAGEBODYdesign_packageISFUNCTIONbits_to_color(bits_in:INcolor_bits)RETURNcolorISBEGINCASEbits_inISWHENGreen_Light=>RETURNGreen;WHENYellow_Light=>RETURNYellow;WHENRed_Light=>RETURNRed;WHENothers=>RETURNUnknown;ENDCASE;ENDbits_to_color;

FUNCTIONcolor_to_bits(color_in:INcolor)RETURNcolor_bitsISBEGINCASEcolor_inISWHENGreen=>RETURNGreen_Light;WHENYellow=>RETURNYellow_Light;WHENRed=>RETURNRed_Light;WHENother=>RETURNUnknown_Light;ENDCASE;ENDcolor_to_bits;FUNCTIONbits_to_state(bits_in:INstate_bits)RETURNstateISBEGINCASEbits_inISWHENHG_state=>RETURNHighway_Light_Green;WHENHY_state=>RETURNHighway_Light_Yellow;WHENFG_state=>RETURNFarmroad_Light_Green;WHENFY_state=>RETURNFarmroad_Light_Yellow;ENDCASE;ENDbits_to_state;FUNCTIONstate_to_bits(state_in:INstate)RETURNstate_bitsISBEGINCASEstate_inISWHENHighway_Light_Green=>RETURNHG_state;WHENHighway_Light_Yellow=>RETURNHY_state;WHENFarmroad_Light_Green=>RETURNFG_state;WHENFarmroad_Light_Yellow=>RETURNFY_state;ENDCASE;ENDstate_to_bits;

FUNCTIONbits_to_boolean(bits_in:INbit)RETURNbooleanISBEGINIFbits_in=‘0’THENRETURNFALSE;ELSERETURNTRUE;ENDIF;ENDbits_to_boolean;FUNCTIONboolean_to_bits(boolean_in:INboolean)RETURNbitsISBEGINIFboolean_in=FALSETHENRETURN`0`;ELSERETURN`1`;ENDIF;ENDboolean_to_bits:ENDdesign_package;用新的數(shù)據(jù)類型改寫TLC的電路描述TLC的另一種細(xì)化電路的結(jié)構(gòu)體(revised):USEWork.design_package.all;ARCHITECTURErevisedOFTLCIS

SIGNALpresent_state:state:=Highway_light_Green;

SIGNALTimed_out_long,

Timed_out_short:data_type:=`0`;SIGNALstart_Timer:data_type:=`0`;BEGIN--controller_processPROCESSVARIABLEFramroad_car_detect:data_type;

BEGINCASEpresent_stateISWHENHighway_Light_Green=>IFcar_on_FarmroadANDTimed_out_long=`1`THENstate_Timer<=TRANSPORTNOTstate_Timer;present_state<=TRANSPORTHighway_Light_Yellow;ENDIF;WHENHighway_Light_Yellow=>

IFTimed_out_short=`1`THENStart_Timer<=TRANSPORTNOTStart_Timer;present_state<=TRANSPORTFarmroad_Light_Green;ENDIF;

WHENFarmroad_Light_Green=>

IFNOTcar_on_FarmroadANDTimed_out_long=‘1’THENstart_Timer<=TRANSPORTNOTstart_Timer;present_state<=TRANSPORTFarmroad_Light_Yellow;ENDIF;

WHENFarmroad_Light_Yellow=>IFTimed_out_short=‘1’THENstart_Timer<=TRANSPORTNOTstart_Timer;

present_state<=TRANSPORTHighway_Light_Green;ENDIF;ENDCASE;WAITONcar_on_Farmroad,Timed_out_long,Timed_on_short;ENDPROCESS;

--Highway_light_set:withPresent_stateselectHighway_light<=GreenWHENHighway_light_Green,YellowWHENHighway_light_Yellow,

RedWHENFarmroad_light_Green|Farmroad_light_Yellow;

--Farmroad_light_set:withPresent_stateselect

Farmroad_light<=GreenWHENFarmroad_light_Green,

YellowWHENFarmroad_light_Yellow,RedWHENHighway_light_Green|Highway_Light_Yellow;--Timer_processPROCESSBEGINTimed_out_short<=TRANSPORT‘0’,‘1’AFTERshort_Time;Timed_out_long<=TRANSPORT‘0’,’1’AFTERlong_Time;WAITONstart_Timer;ENDPROCESS;ENDrevised;對Timer(定時器)建立如下實體與結(jié)構(gòu)體描述:USEWork.design_package.all;ENTITYTimerISGENERIC(long_Time:Time;short_Time:Time);PORT(start:INdata_type;TL,TS:OUTdata_type);ENDTimerARCHITECTUREbehaviorOFTimerISBEGINPROCESS(state)BEGINTL<=TRANSPORT‘0’,‘1’AFTERlong_Time;TS<=TRANSPORT‘0’,‘1’AFTERshort_Time;ENDPROCESS;ENDbehavior;對TLC實體的structure_1結(jié)構(gòu)體描述如下:ARCHITECTUREstructure_1OFTLCISSIGNALpresent_state:state:=Highway_light_Green;

SIGNALTimed_out_long,Timed_out_short:data_type:=`0`;SIGNALstart_Timer:data_type:=`0`;COMPONENTTimer_sectionGENERIC(long_Time,short_Time:time);PORT(start:INdata_type;TL,TS:OUTdata_type);ENDCOMPONENT;BEGINPROCESSBEGINCASEpresent_stateIS

WHENHighway_Light_Green=>

IFcar_on_FarmroadANDTimed_out_long=‘1’THENstate_Timer<=TRANSPORTNOTstate_Timer;present_state<=TRANSPORTHighway_Light_Yellow;ENDIF;

WHENHighway_Light_Yellow=>IFTimed_out_short=‘1’THENstate_Timer<=TRANSPORTNOTstate_Timer;present_state<=TRANSPORTFarmroad_Light_Green;ENDIF;

WHENFarmroad_Light_Green=>IFNOTcar_on_FarmroadORTimed_out_long=‘1’THENstart_Timer<=TRANSPORTNOTstart_Timer;

present_state<=TRANSPORTFarmroad_Light_Yellow;ENDIF;

WHENFarmroad_Light_Yellow=>IFTimed_out_short=‘1’THENstart_Timer<=TRANSPORTNOTstart_Timer;present_state<=TRANSPORTHighway_Light_Green;ENDIF;ENDCASE;WAITONcar_on_Farmroad,Timed_out_long,Timed_on_short;ENDPROCESS;

--Highway_light_set:

withPresent_stateselectHighway_light<=GreenWHENHighway_light_Green,YellowWHENHighway_light_Yellow,RedWHENFarmroad_light_Green|Farmroa

_light_Yellow;--Farmroad_light_set:withPresent_stateselectFarmroad_light<=GreenWHENFarmroad_light_Green,YellowWHENFarmroad_light_Yellow,RedWHENHighway_light_Green|Highway_Light_Yellow;--Timer_struct:Timer_sectionGENERICMAP(long_Time,short_Time);PORTMAP(start_Time,Timed_out_long,Timed_out_short);ENDstructuer_1;為Timer實體的結(jié)構(gòu)體structure_1,做了struct1的配置:USEWork.all;CONFIGURATIONstruct1OFTLC_TESTISFORTestFORcontroller:TLCUSEENTITYWork.TLC(structure_1);FORstructure_1;FORTimer_struct:Timer_sectionUSEENTITYWork.Timer(behavior);ENDFOR;ENDFOR;ENDFOR;ENDFOR;ENDstruct1;控制器元件的設(shè)計細(xì)化:在頂層TLC實體下,分出實體(TL_controller)和Timer實體。實體(TL_controller)的接口:Car_on_Farmroad、(HL)與(FL),Timer實體接口:Start_timer、TL和TS。綜合起來,該控制器有三個輸入(Car_on_Farmroad簡寫為C,兩個超時輸入記以TL和TS)和三個輸出(一個啟動計時器為ST,兩個燈控制為HL和FL)??刂破鲗嶓w的VHDL描述為

USEWork.Traffic_package.all;USEWork.design_package.all;ENTITYTL_controllerISPORT(C,TL,TS:INdata_type;HL,FL:OUTcolor_bits;ST:OUTdata_type);ENDTL_controller;現(xiàn)在用bit表示,以便提取具體實現(xiàn)的電路結(jié)構(gòu)。

ARCHITECTUREbehaviorOFTL_controllerIS

SIGNALcontroller_state:state_bits:=Highway_light_Green;BEGIN--controller_processPROCESSVriablelast_ST:DATA_TYPE:=‘0’;BEGINCASEcontroller_stateIS

WHENHG_state=>IFC=‘1’ANDTL=‘1’THENlast_ST:=NOTlast_ST;ST<=TRANSPORTlast_ST;controller_state<=TRANSPORTHY_state;ENDIF;

WHENHY_state=>IFTS=‘1’THENlast_ST:=NOTlast_ST;ST<=TRANSPORTlast_ST;controller_state<=TRANSPORTFG_state;ENDIF;

WHENFG_state=>IFC=‘0’ANDTL=‘1’THENlast_ST:=NOTlast_ST;ST<=TRANSPORTlast_ST;controller_state<=TRANSPORTFY_state;ENDIF;

WHENFY_state=>IFTS=‘1’THENlast_ST:=NOTlast_ST;ST<=TRANSPORTlast_ST;controller_state<=TRANSPORTHG_state;ENDIF;ENDCASE;

WAITONC,TL,TS;ENDPROCESS;

--Highway_light:withcontroller_stateselectHL<=Green_lightWHENHG_state,Yellow_lightWHENHY_state,Red_lightWHENFG_stateFY_state;

--Farmroad_light:withcontroller_stateselectFL<=Green_LightWHENFG_state,Yellow_LightWHENFY_state,Red_LightWHENHG_state|HY_state;ENDbehavior;用底層兩個結(jié)構(gòu)體描述頂層TLC的structure_2結(jié)構(gòu)體。USEWork.design.package.all;ARCHITECTUREstructure_2OFTLCISSIGNALTimed_out_long,Timed_out_short:data_type:=‘0’;SIGNALstart_Timer:data_type:=‘0’;

COMPONENTTimer_sectionGENERIC(long_Time,short_Time:time);PORT(start:INdata_type;TL,TS:OUTdata_type);ENDCOMPONENT;

COMPONENTController_sectionPORT(C,TL,TS:INdata_type;HL,FL:OUTcolor_bitsST:OUTdata_type);ENDCOMPONENT;BEGIN--Traffic_Light:controller_sectionPORTMAP(bit_to_boolean(car_on_framroad),Timed_out_long,Timer_out_short,bits_to_color(HL)=>Highway_Ligh,bits_to_color(FL)=>Framroad_Ligh,ST=>state_Timer);--Timer_struct:Timer_sectionGENERICMAP(long_Timeshort_Time);PORTMAP(start_TimeTimed_out_long,Timed_out_short);ENDstructuer_2;

這是一種結(jié)構(gòu)化的結(jié)構(gòu)體,在結(jié)構(gòu)體說明中用了對Timer和Controller的元件說明,在結(jié)構(gòu)體語句中用元件具體裝配語句把它們連接起來。用配置語句出新的元件清單和連接關(guān)系。

USEWork.all;CONFIGURATIONstruct2OFTLC_TESTISFORTestFORcontroller:TLCUSEENTITYTLC(structure_2);FORstructure_2;USEWork.all;FORTraffic_Light:controller_sectionUSEENTITYWork.TL_controller(behavior);ENDFORFORTimer_struct:Timer_sectionUSEENTITYWork.Timer(behavior);ENDFOR;

溫馨提示

  • 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

提交評論