《數(shù)字系統(tǒng)設(shè)計(jì)》第七章 testbech_第1頁(yè)
《數(shù)字系統(tǒng)設(shè)計(jì)》第七章 testbech_第2頁(yè)
《數(shù)字系統(tǒng)設(shè)計(jì)》第七章 testbech_第3頁(yè)
《數(shù)字系統(tǒng)設(shè)計(jì)》第七章 testbech_第4頁(yè)
《數(shù)字系統(tǒng)設(shè)計(jì)》第七章 testbech_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第六章測(cè)試平臺(tái)文件主講人:徐向民教授目錄VHDL仿真概述仿真測(cè)試平臺(tái)文件仿真響應(yīng)文件I/O的讀寫(xiě)VHDL仿真概述VHDL仿真器如modelsim需要以下輸入設(shè)計(jì)的描述(項(xiàng)目的VHDL程序)驅(qū)動(dòng)設(shè)計(jì)的激勵(lì)在VHDL本身是自激勵(lì)時(shí)則無(wú)需此輸入基本結(jié)構(gòu)VHDL仿真概述VHDL一般仿真過(guò)程首先,編寫(xiě)項(xiàng)目元件和激勵(lì)文件其次,編譯項(xiàng)目并且綜合再次,功能仿真最后,時(shí)序仿真仿真測(cè)試平臺(tái)文件測(cè)試平臺(tái)文件定義:可以用來(lái)驗(yàn)證所設(shè)計(jì)的硬件模型的正確性的VHDL模型。作用:為所測(cè)試的原件提供了激勵(lì)信號(hào),仿真結(jié)果可以以波形的方式顯示或存儲(chǔ)測(cè)試結(jié)果到文件中。激勵(lì)信號(hào)可以直接集成在測(cè)試平臺(tái)文件中,也可以從外部文件中加載。仿真測(cè)試平臺(tái)文件編寫(xiě)測(cè)試平臺(tái)文件的語(yǔ)言VHDL(VHSICHardwareDescriptionLanguage)VerilogHDLSystemVerilogSystemC……接下來(lái)將只講解使用VHDL語(yǔ)言編寫(xiě)測(cè)試平臺(tái)文件的方法仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件的結(jié)構(gòu)一個(gè)測(cè)試平臺(tái)文件的基本結(jié)構(gòu)如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYTEST_BENCHIS--測(cè)試平臺(tái)文件的空實(shí)體(不需要定義端口)ENDTEST_BENCH;

ARCHITECTURETB_BEHAVIOROFTEST_BENCHISCOMPONENTENTITY_UNDER_TEST

–被測(cè)試元件的聲明

PORT(list_of_port_their_types_and_modes);ENDCOMPONENT;

Local_signal_declarations;

--局部信號(hào)的聲明BEGINInstatiation:ENTITY_UNDER_TESTportmap(port_associations);

--被測(cè)試元件的例化或映射PROCESS()--產(chǎn)生時(shí)鐘信號(hào)

……ENDPROCESS;PROCESS()--產(chǎn)生激勵(lì)源

……ENDPROCESS;ENDTB_BEHAVIOR;仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件的結(jié)構(gòu)測(cè)試平臺(tái)文件包含的基本語(yǔ)句實(shí)體的定義語(yǔ)句不需要定義端口,只和被測(cè)試元件(DUT)通過(guò)內(nèi)部信號(hào)相連接所測(cè)試元件的例化語(yǔ)句產(chǎn)生時(shí)鐘信號(hào)語(yǔ)句產(chǎn)生激勵(lì)源語(yǔ)句仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生產(chǎn)生激勵(lì)信號(hào)的方式以一定的離散時(shí)間間隔產(chǎn)生激勵(lì)信號(hào)基于實(shí)體的狀態(tài)產(chǎn)生激勵(lì)信號(hào)

下面通過(guò)實(shí)例,講述激勵(lì)信號(hào)的產(chǎn)生時(shí)鐘信號(hào)一個(gè)周期性的激勵(lì)信號(hào)可以使用一個(gè)并行的信號(hào)賦值語(yǔ)句來(lái)建立;例如下面的語(yǔ)句即是建立周期為40ns的信號(hào)。A<=not

A

after

20

ns;--產(chǎn)生一個(gè)周期為40ns的信號(hào)A仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生其對(duì)應(yīng)的時(shí)鐘波形如下圖時(shí)鐘信號(hào)是同步設(shè)計(jì)中最重要的信號(hào)之一。它既可以使用并行的信號(hào)賦值語(yǔ)句產(chǎn)生(如上面的語(yǔ)句),也可以使用時(shí)鐘產(chǎn)生的進(jìn)程來(lái)實(shí)現(xiàn)定義。當(dāng)使用并行的信號(hào)賦值語(yǔ)句時(shí),產(chǎn)生的時(shí)鐘信號(hào)可以是對(duì)稱(chēng)的或不對(duì)稱(chēng)的,但是信號(hào)的初始值不能為‘u’仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生如果使用進(jìn)程來(lái)定義信號(hào),也可以產(chǎn)生各種時(shí)鐘信號(hào),包括對(duì)稱(chēng)和不對(duì)稱(chēng)的。在大部分情況下,時(shí)鐘信號(hào)是一直運(yùn)行的,并且是對(duì)稱(chēng)的。當(dāng)定義不對(duì)稱(chēng)的時(shí)鐘信號(hào),如果使用并行信號(hào)幅值語(yǔ)句,則需要使用條件信號(hào)賦值語(yǔ)句;如果使用進(jìn)程,則比較簡(jiǎn)單,使用順序邏輯就可以。下面語(yǔ)句使用條件信號(hào)賦值語(yǔ)句,定義了一個(gè)25%占空比的時(shí)鐘信號(hào):W_CLK<='0'afterPERIOD/4

whenW_CLK='1'else

'1'after

3*PERIOD/4

whenW_CLK='0'else

'0';仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生上述兩個(gè)對(duì)稱(chēng)和不對(duì)稱(chēng)的時(shí)鐘信號(hào),也可以使用進(jìn)程來(lái)定義,如下:CLK_GEN1:

PROCESS

--產(chǎn)生對(duì)稱(chēng)的時(shí)鐘信號(hào),周期為40nsCONSTANTCLK_PERIOD:

TIME

:=

40NS;BEGIN CLK<='1';

WAIT

FORCLK_PERIOD/2; CLK<='0';

WAIT

FORCLK_PERIOD/2;END

PROCESS;CLK_GEN2:

PROCESS

--產(chǎn)生非對(duì)稱(chēng)的時(shí)鐘信號(hào),周期為40ns,占空比為25%CONSTANTCLK_PRTIOD:

TIME

:=

40NS;BEGIN CLK<='1';

WAIT

FORCLK_PERIOD/4; CLK<='0';

WAIT

FOR

3*CLK_PERIOD/4;END

PROCESS;仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生復(fù)位信號(hào)實(shí)現(xiàn)方式使用并行賦值語(yǔ)句在進(jìn)程中設(shè)定例如下面復(fù)位信號(hào)設(shè)置:仿真開(kāi)始時(shí),復(fù)位信號(hào)為’0’;經(jīng)過(guò)20ns后,復(fù)位信號(hào)變?yōu)椤?’;再經(jīng)過(guò)20ns后,復(fù)位信號(hào)變?yōu)椤?’。RESET<='0','1'after

20ns,'0'after

40ns;仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生再例如另一個(gè)復(fù)位信號(hào)設(shè)置實(shí)例,代碼如下:RESET<='0','1'after

100ns,'0'after

180ns,'1'after

210ns;RESET信號(hào)初始為’0’,經(jīng)過(guò)100ns后,變?yōu)椤?’;再經(jīng)過(guò)80ns,該信號(hào)變?yōu)椤?’;再經(jīng)過(guò)30ns,該信號(hào)返回到’1’。其波形如下:仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生周期信性信號(hào)可以在進(jìn)程中使用信號(hào)賦值語(yǔ)句實(shí)現(xiàn)信號(hào)的周期性信號(hào)設(shè)置。signalCLK1,LCK2:

STD_LOGIC

:='0';...TWO_PHASE:

PROCESSBEGIN CLK1<='1'after

5ns,'0'after

10ns,'1'after

20ns,'0'after

25ns; CLK2<='1'after

10ns,'0'after

20ns,'1'after

25ns,'0'after

30ns;

wait

for

35ns;END

PROCESS;上例定義了兩個(gè)周期性信號(hào),為了實(shí)現(xiàn)信號(hào)的周期性變化,后面使用一個(gè)WAIT語(yǔ)句。其波形如下:仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生使用延遲DELAYD可使用預(yù)定義屬性DELAYD關(guān)鍵詞來(lái)產(chǎn)生信號(hào)。如果已經(jīng)產(chǎn)生了一個(gè)時(shí)鐘信號(hào),在這個(gè)時(shí)鐘信號(hào)的基礎(chǔ)上,可以使用DELAYD來(lái)使已經(jīng)產(chǎn)生的時(shí)鐘信號(hào)延遲一定的時(shí)間,從而獲得另一個(gè)時(shí)鐘信號(hào)。假如我們已經(jīng)使用如下的語(yǔ)句定義了一個(gè)時(shí)鐘信號(hào)W_CLK:W_CLK<='1'after

30nswhenW_CLK='0'else'0'after

20ns;仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生然后可以使用如下的延遲語(yǔ)句獲得一個(gè)新的時(shí)鐘信號(hào)DLY_W_CLK,它比W_CLK延遲了10ns:DLY_W_CLK<=

W_CLK'DELAYED(10

ns);以上兩個(gè)時(shí)鐘信號(hào)波形如下:仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生一般的激勵(lì)信號(hào)所定義的普通的激勵(lì)信號(hào)來(lái)用作模型的輸入信號(hào);通常在進(jìn)程中定義;一般使用WAIT語(yǔ)句來(lái)定義。例如下面的激勵(lì)信號(hào)定義:SIGNALC:

STD_LOGIC

:='0';

...... STIMULI:

PROCESS

BEGIN

wait

for

80ns;仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生

C<='1';

wait

for

50ns; C<='0';

wait

for

60ns; C<='1';

wait

for

120ns; C<='0'

......

wait;

END

PROCESS;其波形如下:仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生動(dòng)態(tài)激勵(lì)信號(hào)動(dòng)態(tài)激勵(lì)信號(hào),就是被仿真的實(shí)體(DUT)的行為模型相關(guān),即DUT的輸入激勵(lì)信號(hào)受模型的行為所影響。如下信號(hào)的定義,模型的輸入信號(hào)Sig_A和模型輸出信號(hào)Count相關(guān)。PROCESS(Count)BEGIN

CASE

CountIS

when

2

=>

Sig_A<='1'after

10ns;

when

others

=>

Sig_A<='0'after

10ns;

END

CASE;END

PROCESS;仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生使用測(cè)試矢量將一組固定的輸入輸出矢量值存儲(chǔ)在一個(gè)常量表或一個(gè)ascii文件中,然后將這些值應(yīng)用到輸入信號(hào)從而產(chǎn)生激勵(lì)信號(hào);矢量的值序列可以使用多維數(shù)組或使用多列記錄來(lái)描述。如下面的數(shù)據(jù)表存儲(chǔ)了輸入矢量:CONSTANTNO_OF_BITS:

INTEGER

:=

4;CONSTANTNO_OF_VECTORS:

INTEGER

:=

5;TYPETABLE_TYPEIS

ARRAY

(1

TONO_OF_VECTORS)

OF

STD_LOGIC_VECTOR(1

TONO_OF_BITS);CONSTANTINPUT_VECTORS:TABLE_TYPE:=

("1001",

"1000",

"0010",

"0000",

"0110");SIGNALINPUTS:

STD_LOGIC_VECTOR(1

TO

NO_OF_BITS);SIGNALA,B,C:

STD_LOGIC;SIGNALD:

STD_LOGIC_VECTOR(0

TO

1);仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生假設(shè)所測(cè)試的實(shí)體(DUT)具有4個(gè)輸入:A、B、C和D信號(hào),如果以一般的時(shí)間間隔應(yīng)用測(cè)試矢量,則可以使用一個(gè)GENERATE語(yǔ)句,例:G1:

forJin

1

toNO_OF_VECTORSgenerate

INPUTS<=

INPUT_VECTORS(J)

after(VECTOR_PERIOD*J);END

GENERATEG1;A<=INPUTS(1);B<=INPUTS(4);C<=INPUTS(1);D<=INPUTS(2

TO

3);仿真測(cè)試平臺(tái)文件——激勵(lì)信號(hào)的產(chǎn)生如果將信號(hào)應(yīng)用于任意時(shí)間間隔,則需要使用并行的信號(hào)賦值語(yǔ)句產(chǎn)生多個(gè)信號(hào)的波形;使用這種方法可以將一個(gè)矢量賦值給多個(gè)信號(hào),例如下面的代碼:INPUTS<=INPUT_VECTORS(1)

after

10ns;INPUT_VECTORS(2)

after

25ns;INPUT_VECTORS(3)

after

30ns;INPUT_VECTORS(4)

after

32ns;INPUT_VECTORS(5)

after

40ns;仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例下面的實(shí)例即為一個(gè)測(cè)試平臺(tái)文件以及他所測(cè)試的元件測(cè)試平臺(tái)文件時(shí)鐘周期為20ns,在一個(gè)時(shí)鐘波形產(chǎn)生進(jìn)程中定義。激勵(lì)信號(hào)波形在另一個(gè)進(jìn)程中產(chǎn)生。實(shí)體為一個(gè)空實(shí)體,沒(méi)有輸入輸出信號(hào)端口。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYS_MACHINE_TBISEND;

ARCHITECTUREBHVOFS_MACHINE_TBISCOMPONENTS_MACHINEPORT(CLK,RESET:INSTD_LOGIC;

STARE_INPUTS:INSTD_LOGIC_VECTOR

(0TO1);

COMB_OUTPUTS:OUTSTD_LOGIC_VECTOR

(0TO1)

);ENDCOMPONENT;

--INPUTSIGNALSIGNALCLK:

STD_LOGIC

:=

'0';

仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例SIGNALRESET:

STD_LOGIC

:='0';SIGNALSTARE_INPUTS:

STD_LOGIC_VECTOR

(0TO1)

:="00";--OUTPUTSIGNALSIGNALCOMB_OUTPUTS:

STD_LOGIC_VECTOR

(0TO1);

--TIMERPERIODDEFINECONSTANTCLK_PERIOD:

TIME

:=

20

NS;BEGIN

--componentinstantiation

DUT:S_MACHINEPORTMAP(CLK=>CLK,

RESET=>RESET,

STARE_INPUTS=>STARE_INPUTS,

COMB_OUTPUTS=>COMB_OUTPUTS);

--generateclocksignal

clk_gen:PROCESS

BEGIN仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例CLK<='1';WAITFORCLK_PERIOD/2;

CLK<='0';

WAITFORCLK_PERIOD/2;ENDPROCESS;

--drivesignal

TB:PROCESSBEGIN

WAITFOR20

NS;

RESET<='1';

WAITFOR20

NS;

RESET<=

'0';

WAITFOR210

NS;

STARE_INPUTS<="01";WAITFOR20

NS;

STARE_INPUTS<="10";

WAITFOR20

NS;

STARE_INPUTS<="11";WAITFOR20

NS;

STARE_INPUTS<="00";WAITFOR20

NS;

STARE_INPUTS<="11";WAITFOR20

NS;

STARE_INPUTS<="10";WAITFOR20

NS;

STARE_INPUTS<="01";WAITFOR20

NS;

STARE_INPUTS<="00";WAITFOR20

NS;WAIT;ENDPROCESS;END;仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例定義所測(cè)試元件的VHDL程序,該程序是一個(gè)簡(jiǎn)單的Mealy型狀態(tài)機(jī)演示程序IBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYS_MACHINEISPORT(CLK,RESET:INSTD_LOGIC;

STARE_INPUTS:INSTD_LOGIC_VECTOR(0TO1);

COMB_OUTPUTS:OUTSTD_LOGIC_VECTOR(0TO1)

);END;

ARCHITECTUREARTOFS_MACHINEISTYPESTATESIS(ST0,ST1,ST2,ST3);--defineSTATESasenumSIGNALCURRENT_STATE,NEXT_STATE:STATES;

BEGIN仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例

REG:PROCESS(RESET,CLK)BEGINIFRESET='1'THEN

CURRENT_STATE<=ST0;ELSIF(CLK

='1'

AND

CLK'EVENT)THEN

CURRENT_STATE<=NEXT_STATE;ENDIF;ENDPROCESS;

COM:PROCESS(CURRENT_STATE,STARE_INPUTS)

--feedbacksignalBEGINCASECURRENT_STATEISWHENST0=>

COMB_OUTPUTS<="00";IFSTARE_INPUTS="00"THEN仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例

NEXT_STATE<=ST0;ELSE

NEXT_STATE<=ST1;ENDIF;WHENST1=>

COMB_OUTPUTS<="01";IFSTARE_INPUTS="00"THEN

NEXT_STATE<=ST1;ELSE

NEXT_STATE<=ST2;ENDIF;WHENST2=>

COMB_OUTPUTS<="10";IFSTARE_INPUTS="11"

THEN仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例

NEXT_STATE<=ST2;ELSENEXT_STATE<=ST3;ENDIF;WHENST3=>

COMB_OUTPUTS<="11";IFSTARE_INPUTS="11"THEN

NEXT_STATE<=ST3;ELSE

NEXT_STATE<=ST0;ENDIF;ENDCASE;ENDPROCESS;ENDART;仿真測(cè)試平臺(tái)文件——測(cè)試平臺(tái)文件舉例使用以上測(cè)試平臺(tái)文件對(duì)元件進(jìn)行功能仿真,仿真結(jié)果如下圖:從圖中可以看出,其時(shí)序是和我們寫(xiě)的testbench相對(duì)應(yīng)的。仿真響應(yīng)控制仿真無(wú)控制,則仿真會(huì)一直持續(xù)到時(shí)間等于設(shè)定的仿真時(shí)間;如果想在某個(gè)時(shí)間終止仿真,可使用斷言語(yǔ)句ASSERT來(lái)實(shí)現(xiàn);另外,ASSERT語(yǔ)句可以實(shí)現(xiàn)對(duì)某些值或行為作出響應(yīng)。仿真響應(yīng)斷言語(yǔ)句(ASSERT)最適合于執(zhí)行仿真的自動(dòng)響應(yīng);可以檢查一個(gè)條件并報(bào)告信息;根據(jù)所選擇的嚴(yán)重級(jí)別和仿真工具的設(shè)置,在A(yíng)SSERT語(yǔ)句報(bào)告了信息后,仿真可以繼續(xù)執(zhí)行(警告級(jí)別WARNING)或者停止(錯(cuò)誤ERROR或致命錯(cuò)誤FAILURE),默認(rèn)的嚴(yán)重級(jí)別為ERROR。仿真響應(yīng)實(shí)例使用斷言語(yǔ)句判斷仿真的時(shí)間,如果當(dāng)前時(shí)間為1000ns,則仿真完成,使用ERROR嚴(yán)重級(jí)別終止仿真過(guò)程。PROCESS

BEGIN

ASSERT(NOW

<=

1000ns)

REPORT

"Simulationcompletedsuccessfully"

SEVERITYERROR;END

PROCESS仿真響應(yīng)斷言語(yǔ)句判斷條件時(shí),如果條件的判斷結(jié)果為FALSE,則執(zhí)行后面的報(bào)告及嚴(yán)重級(jí)語(yǔ)句,否則仿真會(huì)忽略后面的報(bào)告和嚴(yán)重級(jí)語(yǔ)句并繼續(xù)執(zhí)行??梢允褂肁SSERT語(yǔ)句設(shè)定一個(gè)判斷條件,以便對(duì)仿真的某個(gè)結(jié)果或值做出響應(yīng),例如:PROCESS(q)BEGIN

ASSERT(q/=

"1001")

REPORT

"Theshiftergetstheresutl!!"

SEVERITYERROR;END

PROCESS;仿真響應(yīng)下面以一個(gè)實(shí)例來(lái)講述使用斷言語(yǔ)句來(lái)響應(yīng)一個(gè)仿真過(guò)程下面的程序?yàn)?位計(jì)數(shù)器的行為模型,計(jì)數(shù)器的位數(shù)為4位。方向由信號(hào)DIR決定,如果DIR為高電平,則正向計(jì)數(shù),如果DIR為低電平,則反向計(jì)數(shù)。計(jì)數(shù)結(jié)果保存在CT_RESULT信號(hào)中。LIBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALL;USE

IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNTERIS

PORT(CLK,CLR,DIR:

IN

STD_LOGIC;

CT_RESULT:

OUT

STD_LOGIC_VECTOR(3

DOWNTO

0));ENDCOUNTER;仿真響應(yīng)ARCHITECTUREBEHAVIORALOFCOUNTERIS

SIGNAL

TMP:

STD_LOGIC_VECTOR(3

DOWNTO

0);BEGIN

PROCESS(CLK,CLR)

BEGIN

IF(CLR='1')

THEN

TMP<=

"0000";

ELSIF(CLK'EVENT

ANDCLK='1')

THEN

IF(DIR='1')

THEN

TMP<=TMP+

1;

ELSE

TMP<=TMP-

1;

END

IF;

END

IF;

END

PROCESS;

CT_RESULT<=TMP;ENDBEHAVIORAL;仿真響應(yīng)下面的程序?yàn)闇y(cè)試平臺(tái),在程序中,一個(gè)斷言語(yǔ)句用于判斷計(jì)數(shù)結(jié)果是否等于”1001”。條件判斷使用了“不等于(/=)邏輯”,如果判斷條件為FALSE,即等于“1001”,則報(bào)告信息,并終止仿真。IBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALL;USE

IEEE.STD_LOGIC_UNSIGNED.ALL;USE

IEEE.NUMERIC_STD.ALL;ENTITYCOUNTER_TB_VHDISENDCOUNTER_TB_VHD;仿真響應(yīng)ENTITYCOUNTER_TB_VHDISENDCOUNTER_TB_VHD;ARCHITECTUREBEHAVIOROFCOUNTER_TB_VHDIS

COMPONENT

COUNTER

PORT(CLK:

IN

STD_LOGIC;

CLR:

IN

STD_LOGIC;

DIR:

IN

STD_LOGIC;

CT_RESULT:

OUT

STD_LOGIC_VECTOR(3

DOWNTO

0)

);

END

COMPONENT;

--INPUTSIGNAL

SIGNAL

CLK:

STD_LOGIC

:='0';

SIGNAL

CLR:

STD_LOGIC

:='0';

SIGNAL

DIR:

STD_LOGIC

:='0';仿真響應(yīng)--OUTPUTSIGNAL

SIGNAL

CT_RESULT:

STD_LOGIC_VECTOR(3

DOWNTO

0);

--CONSTANT

CONSTANT

CLK_PERIOD:

TIME

:=

40NS;BEGIN

DUT:COUNTERPORT

MAP(

CLK=>CLK,

CLR=>CLR,

DIR=>DIR,

CT_RESULT=>CT_RESULT);

CLK_GEN1:

PROCESS

--

BEGIN

仿真響應(yīng)CLK<='1';

WAIT

FORCLK_PERIOD/2;

CLK<='0';

WAIT

FORCLK_PERIOD/2;

END

PROCESS;

TB:

PROCESS

BEGIN

--WAIT100NSFORGLOBALRESETTOFINISH

CLR<='1';

DIR<='1';

WAIT

FOR

20NS;

CLR<='0';仿真響應(yīng) WAIT

FOR

280NS;

DIR<='0';

WAIT

FOR

320NS;

WAIT;

--WILLWAITFOREVER

END

PROCESS;

PROCESS(CT_RESULT)

BEGIN

ASSERT(CT_RESULT/=

"1001")

REPORT

"Thecountergetstonine!!"

SEVERITY

ERROR;

END

PROCESS;END

;仿真響應(yīng)以上測(cè)試文件在Modelsim中的仿真波形如下:當(dāng)計(jì)數(shù)到”1001”,在Modelsim的信息欄輸出所要報(bào)告的信息,如下:文件I/O的讀寫(xiě)從文件加載數(shù)據(jù)或?qū)?shù)據(jù)存儲(chǔ)到文件中例如用戶(hù)定義的測(cè)試矢量可以保存在文件中,然后在仿真時(shí)從文件中讀取這些測(cè)試矢量。另外,仿真的結(jié)果可以保存在文件中。VHDL’93的文件I/O讀寫(xiě)主要是用于仿真,綜合工具并不支持文件I/O的讀寫(xiě)。如果想在仿真時(shí)進(jìn)行文件操作,必須包括標(biāo)準(zhǔn)庫(kù)STD中的TEXTIO定義的程序庫(kù),該程序庫(kù)中包含了文件啊你輸入輸出所需要的基本子程序(函數(shù)和過(guò)程)。文件I/O的讀寫(xiě)定義文件文件的兩個(gè)類(lèi)型Integer:文件中的數(shù)據(jù)是以二進(jìn)制存取的,不能被人識(shí)別,只有integer型的數(shù)據(jù)能夠存入這列文件。String:文件是以ascii碼形式讀取的,可以被人識(shí)別;integer、bit_vector(xdowntoy)、string(xdownto1)、std_logic_vector(xdowntoo)、bit等都可以被存入此類(lèi)文件。定義語(yǔ)法FILEFILEIN:

TEXT;TYPEINTEGERFILEIS

FILE

OF

INTEGER;

FILEFILEIN:INTEGERFILE;文件I/O的讀寫(xiě)打開(kāi)文件定義文件句柄后就可以在程序中打開(kāi)指定文件,同時(shí)指定打開(kāi)模式。FILE_OPEN(fstatus,

filefile_handle:file_type,filename:

string,openmode);fstatus:指示當(dāng)前文件狀態(tài),使用前要定義VARIABLEFSTATUS:

FILE_OPEN_STATUS;文件狀態(tài)一般包含:OPEN_OK、STATUS_ERROR、NAME_ERROR、MODE_ERROR;file_handle:是上一步定義的文件句柄filein;filename:是以雙引號(hào)括起的文件名,如”datain.txt”;openmode:指打開(kāi)該文件的模式,文件打開(kāi)模式有以下三種:read_mode、write_mode、append_mode。文件I/O的讀寫(xiě)讀寫(xiě)文件打開(kāi)文件后就可以對(duì)文件進(jìn)行讀寫(xiě)操作,其語(yǔ)句格式如下:READ(file_handle,

value

:

type);WRITE(file_handle,

value

:

type);使用以上語(yǔ)句只能寫(xiě)入指定類(lèi)型的數(shù)據(jù),如integer類(lèi)型的只能寫(xiě)入integer型數(shù)據(jù)。如果寫(xiě)入其他類(lèi)型需要遵循以下步驟:定義line型變量:variablebuf:

line;將需要寫(xiě)入的數(shù)據(jù)寫(xiě)入line變量:write(buf,

value);從line變量把數(shù)據(jù)寫(xiě)入文件:writeline(file_handle,buf);文件I/O的讀寫(xiě)關(guān)閉文件在文件讀寫(xiě)完畢后,需使用file_close(file_handle);關(guān)閉文件。ENDFILE(file_handle);判斷在文件操作中是否讀取到文件的末尾。文件I/O的讀寫(xiě)VHDL’93標(biāo)準(zhǔn)包括如下重要的文件I/O操作子程序FILE_OPEN(…)READLIEN(…)READ(…)WRITELINE(…)WRITE(…)ENDFILE(…)FILE_CLOSE(…)文件I/O的讀寫(xiě)下面舉一個(gè)例子,使用了上面介紹的各種語(yǔ)法LIBRARY

IEEE;USE

STD.TEXTIO.ALL;USE

IEEE.STD_LOGIC_TEXTIO.ALL;USE

IEEE.STD_LOGIC_1164.ALL;USE

IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTESTINISEND

ENTITYTESTIN;ARCHITECTURERTLOFTESTINISBEGIN

PROCESS

IS

FILE

FILE_OUT1,FILE_IN:

TEXT;

--定義text類(lèi)型的文件句柄

VARIABLE

FSTATUS1,FSTATUS2:

FILE_OPEN_STATUS;

--定義文件狀態(tài)指示變量文件I/O的讀寫(xiě) VARIABLE

COUNT:

INTEGER

:=

5;

--integer型

VARIABLE

STRINGDATA:

STRING(5

DOWNTO

1)

:=

“SCUTE”;

--string型

VARIABLE

VECTORDATA:

BIT_VECTOR(5

DOWNTO

0)

:=

“001000”;

--bit_vector型

VARIABLE

VALUE

:

STD_LOGIC_VECTOR(3

DOWNTO

0)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論