EDA技術(shù)與VHDL設(shè)計(jì)(西電版)第8章 仿真測(cè)試平臺(tái)_第1頁(yè)
EDA技術(shù)與VHDL設(shè)計(jì)(西電版)第8章 仿真測(cè)試平臺(tái)_第2頁(yè)
EDA技術(shù)與VHDL設(shè)計(jì)(西電版)第8章 仿真測(cè)試平臺(tái)_第3頁(yè)
EDA技術(shù)與VHDL設(shè)計(jì)(西電版)第8章 仿真測(cè)試平臺(tái)_第4頁(yè)
EDA技術(shù)與VHDL設(shè)計(jì)(西電版)第8章 仿真測(cè)試平臺(tái)_第5頁(yè)
已閱讀5頁(yè),還剩94頁(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)介

第8章仿真測(cè)試平臺(tái)

8.1VHDL仿真概述8.2幾種常見(jiàn)的TestBench模型8.3ASSERT語(yǔ)句8.1VHDL仿真概述

當(dāng)一個(gè)設(shè)計(jì)完成后,需要對(duì)設(shè)計(jì)的正確性進(jìn)行測(cè)試和驗(yàn)證。前面的章節(jié)都是通過(guò)QuartusⅡ軟件自帶的圖形仿真工具進(jìn)行仿真驗(yàn)證的。但是,當(dāng)需要測(cè)試的向量很多時(shí),如果僅靠畫(huà)波形的手工方式,會(huì)相當(dāng)消耗精力。實(shí)際上,VHDL作為硬件描述語(yǔ)言,既可以用于電路系統(tǒng)的設(shè)計(jì),也可以用于電路系統(tǒng)的測(cè)試和驗(yàn)證。這時(shí)就可以使用測(cè)試平臺(tái)(TB,TestBench)來(lái)完成測(cè)試。TB其實(shí)就是一個(gè)與所設(shè)計(jì)的電路系統(tǒng)程序相對(duì)應(yīng)的鼓勵(lì)程序,用來(lái)為設(shè)計(jì)提供鼓勵(lì)。當(dāng)然,TB既可以采用VHDL語(yǔ)言,也可以采用Verilog語(yǔ)言來(lái)實(shí)現(xiàn)??偟貋?lái)說(shuō),VHDLTestBench就是一段用于驗(yàn)證設(shè)計(jì)功能正確性的VHDL代碼。一般來(lái)說(shuō),仿真器通常需要兩個(gè)輸入:設(shè)計(jì)塊(即DUT,DesignUnitTest)和鼓勵(lì)塊(即TB,TestBench)。TB能夠完成以下幾點(diǎn)目標(biāo):

(1)在測(cè)試中實(shí)例化DUT。

(2)為DUT產(chǎn)生鼓勵(lì)。

(3)產(chǎn)生參考輸出,并與DUT的輸出進(jìn)行比較。

(4)自動(dòng)提供測(cè)試通過(guò)或失敗的提示。

下面先以一個(gè)簡(jiǎn)單的實(shí)例來(lái)感性認(rèn)識(shí)TB的使用。設(shè)計(jì)一個(gè)具有異步清零功能的十進(jìn)制計(jì)數(shù)器,能夠完成0~9的計(jì)數(shù),并能夠產(chǎn)生進(jìn)位信號(hào)。第6章中曾采用狀態(tài)機(jī)的方式實(shí)現(xiàn)該例,本章采用IF語(yǔ)句實(shí)現(xiàn),具體代碼見(jiàn)例8-1。【例8-1】使用VHDL語(yǔ)言編寫(xiě)TB,由于測(cè)試設(shè)計(jì)只用來(lái)進(jìn)行仿真,不受綜合中僅能使用RTL語(yǔ)言子集這樣的語(yǔ)法約束。因此它可以使用所有的行為級(jí)結(jié)構(gòu),即所有根本語(yǔ)法都是適用的(包括一些不能被綜合的語(yǔ)法)。例8-1的十進(jìn)制計(jì)數(shù)器所對(duì)應(yīng)的TB見(jiàn)例8-2。【例8-2】從例8-2可總結(jié)出TB的根本結(jié)構(gòu):包含一個(gè)不需要定義輸入/輸出端口的空實(shí)體和一個(gè)帶有被測(cè)試元件聲明、例化、鼓勵(lì)產(chǎn)生的結(jié)構(gòu)體。例8-2的L5~L6是TB的實(shí)體定義,實(shí)體名為cnt_tb,它與外界沒(méi)有任何接口,只和DUT通過(guò)信號(hào)進(jìn)行連接,不需要定義輸入/輸出端口;L10~L15是被測(cè)試元件DUT的聲明;L17~L20聲明了與DUT相連接的信號(hào);L23是元件例化;L24確定了時(shí)鐘信號(hào)clk的周期為50ns,每隔25ns值取反,其初始值為“1〞(由L17定義);L25~L27確定了信號(hào)reset的取值,初始值為“0〞,240ns后取值為“1〞,360ns后取值為“0〞。

DUT和TB的結(jié)構(gòu)關(guān)系如圖8-1所示,它們之間通過(guò)內(nèi)部信號(hào)進(jìn)行交互。圖8-1DUT和TestBench結(jié)構(gòu)示意從本章開(kāi)始均采用不再自帶圖形仿真工具的QuartusⅡ11.1版本,直接調(diào)用Modelsim完成仿真的形式。本例需要將設(shè)計(jì)文件cnt.vhd和測(cè)試平臺(tái)文件cnt_tb.vhd都保存于同一文件夾、同一工程內(nèi)。設(shè)置設(shè)計(jì)文件cnt.vhd為頂層實(shí)體,然后選擇菜單Assignments→Settings,翻開(kāi)如圖8-2所示對(duì)話框。在左邊的Category欄中選擇EDAToolSettings→Simulation,即可翻開(kāi)仿真設(shè)置對(duì)話框。在其中選擇Compiletestbench,然后單擊TestBenches按鈕,翻開(kāi)圖8-3所示對(duì)話框。單擊New,添加測(cè)試文件,彈出圖8-4所示新建測(cè)試平臺(tái)設(shè)置對(duì)話框。在Testbenchname欄中輸入測(cè)試平臺(tái)實(shí)體的名稱,即cnt_tb,那么Toplevelmoduleintestbench欄也會(huì)出現(xiàn)相同的名稱。在UsetestbenchtoperformVHDLtimingsimulation前的方框內(nèi)打勾,那么Designinstancenameintestbench欄變亮,在其中填入例化名u1。Simulationperiod欄可根據(jù)需要選擇是根據(jù)鼓勵(lì)變化確定仿真時(shí)間還是自定義仿真時(shí)間,本例選擇Runsimulationuntilallvectorstimuliareused。在Filename欄右側(cè)單擊“…〞按鈕,添加測(cè)試平臺(tái)文件cnt_tb.vhd。設(shè)置完成后,單擊OK,會(huì)發(fā)現(xiàn)圖8-3所示的窗口已經(jīng)包含相關(guān)設(shè)置信息,如圖8-5所示,單擊OK返回。圖8-2仿真設(shè)置對(duì)話框圖8-3添加測(cè)試文件圖8-4新建測(cè)試平臺(tái)設(shè)置圖8-5已添加測(cè)試平臺(tái)圖8-6例8-1十進(jìn)制計(jì)數(shù)器仿真結(jié)果(1)圖8-7例8-1十進(jìn)制計(jì)數(shù)器仿真結(jié)果(2)8.2幾種常見(jiàn)的TestBench模型

TB產(chǎn)生鼓勵(lì)的方式,主要有以下三種:

(1)鼓勵(lì)直接在TB中產(chǎn)生。

(2)由其他硬件或軟件模型產(chǎn)生鼓勵(lì)。

(3)從單獨(dú)的文件中讀入鼓勵(lì)。很明顯,例8-1所采用的形式是鼓勵(lì)直接在TB中產(chǎn)生,該方式導(dǎo)致TB的可重用性比較差,只能針對(duì)該DUT。對(duì)于大型設(shè)計(jì),目前比較流行的形式是利用Matlab產(chǎn)生鼓勵(lì)文件,由TB讀入該鼓勵(lì)文件并將相應(yīng)的鼓勵(lì)信息傳遞給DUT,DUT產(chǎn)生的輸出可以以文件的形式進(jìn)行存儲(chǔ),或直接與Matlab產(chǎn)生的理想輸出進(jìn)行比較。下面以一個(gè)移位存放器的例子來(lái)講解幾種不同形式的TB模型。8.2.1簡(jiǎn)單TestBench

1.移位存放器實(shí)例

簡(jiǎn)單的TB模型中只有相應(yīng)的DUT被例化,鼓勵(lì)在TB中直接產(chǎn)生,其模型結(jié)構(gòu)見(jiàn)圖8-8。例8-2即為一個(gè)簡(jiǎn)單的TB模型。例8-3是移位存放器DUT的VHDL代碼,例8-4是其對(duì)應(yīng)的簡(jiǎn)單TB。圖8-8簡(jiǎn)單TB模型【例8-3】【例8-4】例8-4的仿真結(jié)果見(jiàn)圖8-9和圖8-10。從圖8-9中可以明顯觀察到din變化的時(shí)間;圖8-10顯示在時(shí)鐘clk的上升沿時(shí),數(shù)據(jù)依次左移,最右位補(bǔ)“1〞的過(guò)程。圖8-10例8-4TB移位存放器仿真結(jié)果(2)圖8-9例8-4TB移位存放器仿真結(jié)果(1)2.直接產(chǎn)生鼓勵(lì)信號(hào)的各種方式

鼓勵(lì)信號(hào)一般可分為兩類:周期性的鼓勵(lì)信號(hào)和時(shí)序變化的鼓勵(lì)信號(hào)。周期性的鼓勵(lì)信號(hào)最典型的代表就是時(shí)鐘信號(hào),而時(shí)序變化的鼓勵(lì)信號(hào)包括復(fù)位信號(hào)reset、清零信號(hào)clear以及其他一些輸入信號(hào)等。

(1)周期性鼓勵(lì)信號(hào)的產(chǎn)生。時(shí)鐘信號(hào)是最典型的周期性信號(hào),既可以使用并行信號(hào)賦值語(yǔ)句來(lái)產(chǎn)生,也可以在進(jìn)程中產(chǎn)生;既可以產(chǎn)生占空比是50%的時(shí)鐘信號(hào),也可以產(chǎn)生占空比任意的時(shí)鐘信號(hào)。例8-5采用并行信號(hào)賦值語(yǔ)句中的條件信號(hào)賦值語(yǔ)句建立了一個(gè)占空比是75%的時(shí)鐘信號(hào)clk。【例8-5】

CONSTANTperiod:TIME:=50ns;

clk<=‘0’AFTER3*period/4WHENclk=‘1’ELSE

‘1’AFTERperiod/4WHENclk=‘0’ELSE

'0';將例8-5改為在進(jìn)程中實(shí)現(xiàn),見(jiàn)例8-6。

【例8-6】

CONSTANTperiod:TIME:=50ns;

PROCESS

BEGIN

clk<=‘1’;

WAITFOR3*period/4;

clk<=‘0’;

WAITFORperiod/4;

ENDPROCESS;仍然以移位存放器為例,二者仿真結(jié)果相同,見(jiàn)圖8-11,所不同的是時(shí)鐘信號(hào)clk的占空比由50%變?yōu)?5%。需要注意的是,如果采用例8-4所示并行信號(hào)賦值語(yǔ)句,那么時(shí)鐘信號(hào)的初值必須明確聲明為“1〞或者“0〞。

例8-7顯示了一個(gè)周期性的信號(hào),其周期為70ns,波形見(jiàn)圖8-12。一般來(lái)說(shuō),為實(shí)現(xiàn)信號(hào)的周期性變化,一般采用WAIT語(yǔ)句。圖8-11時(shí)鐘信號(hào)占空比為75%【例8-7】

PROCESS

BEGIN

s<=‘0’,

‘1’AFTER10ns,

‘0’AFTER20ns,

‘1’AFTER40ns,

‘0’AFTER45ns;

WAITFOR70ns;

ENDPROCESS;(2)時(shí)序變化的鼓勵(lì)信號(hào)的產(chǎn)生。時(shí)序變化的鼓勵(lì)信號(hào)也可以通過(guò)并行賦值語(yǔ)句和進(jìn)程兩種方式產(chǎn)生。例8-8采用并行賦值語(yǔ)句顯示了一個(gè)復(fù)位信號(hào)reset的變化,仿真開(kāi)始時(shí),其值為“0〞;60?ns后,其值變?yōu)椤?〞;再經(jīng)過(guò)30?ns后,其值變?yōu)椤?〞。例8-9在進(jìn)程中定義復(fù)位信號(hào)reset,采用WAIT語(yǔ)句來(lái)實(shí)現(xiàn)。二者仿真結(jié)果完全一致,如圖8-13所示。需要注意的是,例8-9中最后一句WAIT語(yǔ)句的作用,如果不加該條語(yǔ)句,仿真結(jié)果又會(huì)如何變化,請(qǐng)讀者自行分析。

【例8-8】

reset<=‘0’,

'1'AFTER60ns,

'0'AFTER90ns;【例8-9】

PROCESS

BEGIN

reset<='0';

WAITFOR60ns;

reset<='1';

WAITFOR30ns;

reset<='0';

WAIT;--一直等待

ENDPROCESS;圖8-13例8-8和例8-9復(fù)位信號(hào)reset仿真結(jié)果例8-10顯示了使用預(yù)定義屬性DELAYED來(lái)產(chǎn)生一個(gè)延時(shí)一定時(shí)間的鼓勵(lì)信號(hào)。信號(hào)s較信號(hào)reset延時(shí)50ns,仿真波形見(jiàn)圖8-14。

【例8-10】

s<=reset‘DELAYED(50ns);

還有一類比較特殊的鼓勵(lì)信號(hào),稱為動(dòng)態(tài)鼓勵(lì)信號(hào),即輸入的鼓勵(lì)信號(hào)與DUT的行為相關(guān),受其影響或由其決定。例8-11仍然以例8-3中的移位存放器為DUT,置數(shù)信號(hào)load由移位結(jié)果控制,當(dāng)移位結(jié)果全1時(shí),load=“1〞允許置數(shù)。圖8-14使用預(yù)定義屬性產(chǎn)生延時(shí)一定時(shí)間的鼓勵(lì)信號(hào)【例8-11】例8-11的仿真結(jié)果見(jiàn)圖8-15??梢钥吹?,當(dāng)q移位為“11111111〞時(shí),延時(shí)60ns后,load由“0〞變?yōu)椤?〞,允許置數(shù),重新將“00110011〞置入;q置數(shù)成功后,再次觸發(fā)進(jìn)程,此時(shí)由于q不等于“11111111〞,那么執(zhí)行L32,延時(shí)60ns后,load由“1〞變?yōu)椤?〞。圖8-15例8-11TB移位存放器仿真結(jié)果8.2.2帶有獨(dú)立源的TestBench

將產(chǎn)生鼓勵(lì)的模塊作為一個(gè)文件,與DUT一起,在TB中進(jìn)行例化,就稱為帶有獨(dú)立源的TB,其結(jié)構(gòu)模型見(jiàn)圖8-16。該模型比較適合于具有復(fù)雜輸入、簡(jiǎn)單輸出的設(shè)計(jì);鼓勵(lì)信號(hào)由獨(dú)立源Source產(chǎn)生。圖8-16帶有獨(dú)立源的TB模型仍然以例8-3所設(shè)計(jì)的移位存放器為DUT,在此,再設(shè)計(jì)一個(gè)計(jì)數(shù)器,其計(jì)數(shù)輸出作為移位存放器的置數(shù)初值,即移位存放器的鼓勵(lì)由計(jì)數(shù)器產(chǎn)生,結(jié)構(gòu)模型如圖8-17所示。當(dāng)置數(shù)信號(hào)load=“1〞時(shí),計(jì)數(shù)器count停止計(jì)數(shù),將當(dāng)前計(jì)數(shù)結(jié)果作為鼓勵(lì)信號(hào)傳遞給移位存放器;同時(shí),由于load=“1〞,移位存放器允許置數(shù),并將在下一個(gè)時(shí)鐘上升沿到來(lái)時(shí)開(kāi)始移位操作。計(jì)數(shù)器的VHDL代碼見(jiàn)例8-12,TB見(jiàn)例8-13。圖8-17由計(jì)數(shù)器產(chǎn)生鼓勵(lì)信號(hào)【例8-12】【例8-13】例8-13的仿真結(jié)果見(jiàn)圖8-18和圖8-19。其中,圖8-19是圖8-18當(dāng)load第二次由“0〞變“1〞時(shí)的放大。可以看到,當(dāng)?shù)谝淮蝜oad?=“1〞后,計(jì)數(shù)器進(jìn)行一次清零,重新開(kāi)始計(jì)數(shù),直到第二次load?=“1〞時(shí),計(jì)數(shù)結(jié)果為“00001111〞,將其傳遞給DUT作為置數(shù)初值,然后在時(shí)鐘信號(hào)clk的上升沿進(jìn)行移位。

需要注意的是,如果采用帶有獨(dú)立源的TB模型,那么在QuartusⅡ軟件中設(shè)置TB時(shí),需要添加產(chǎn)生鼓勵(lì)的源文件,如圖8-20所示。圖8-19例8-13TB仿真結(jié)果(2)圖8-18例8-13TB仿真結(jié)果(1)圖8-20添加產(chǎn)生鼓勵(lì)的源文件當(dāng)然,如果鼓勵(lì)的變化與電路的行為相關(guān),即節(jié)中提到的動(dòng)態(tài)鼓勵(lì)信號(hào),那么帶有獨(dú)立源Source的動(dòng)態(tài)鼓勵(lì)模型框圖如圖8-21所示。如果輸出端較為復(fù)雜,也需要由單獨(dú)的模塊(輸出模塊Sink)產(chǎn)生或者變化,那么模型框圖可變?yōu)槿鐖D8-22所示,該模型也可以由電路影響鼓勵(lì)的變化。圖8-21電路響應(yīng)影響鼓勵(lì)變化圖8-22帶有獨(dú)立源和輸出模塊的TB模型8.2.3使用TEXTIO的TestBench

對(duì)于大型設(shè)計(jì)工程,輸入、輸出比較復(fù)雜,單靠輸入波形或直接產(chǎn)生鼓勵(lì)的形式難以驗(yàn)證結(jié)果的正確性。這時(shí),采用文本文件存儲(chǔ)鼓勵(lì)的形式更加方便,能夠有效地提高效率。TEXTIO是VHDL標(biāo)準(zhǔn)庫(kù)STD中的一個(gè)程序包,它提供了VHDL與磁盤(pán)文件直接訪問(wèn)的橋梁,可以利用它來(lái)讀取存儲(chǔ)在磁盤(pán)中的文件或者將仿真數(shù)據(jù)寫(xiě)入磁盤(pán)文件并存儲(chǔ)。TEXTIO的使用是通過(guò)TB來(lái)進(jìn)行的,即可以在TB中調(diào)用TEXTIO來(lái)進(jìn)行仿真。常用的做法是,將所有的輸入鼓勵(lì)保存在文件中,仿真時(shí),可以直接讀取文件中的鼓勵(lì)數(shù)據(jù)產(chǎn)生相應(yīng)的波形或是將仿真結(jié)果存儲(chǔ)到文件中;也可以將其他軟件計(jì)算出來(lái)的結(jié)果保存在另一個(gè)文件中,自動(dòng)將仿真結(jié)果與預(yù)先計(jì)算的結(jié)果進(jìn)行比較,給出一定的信息來(lái)確定結(jié)果的正確與否。使用TEXTIO的TB模型見(jiàn)圖8-23。圖8-23使用TEXTIO的TB模型1.TEXTIO概述

TEXTIO是VHDL標(biāo)準(zhǔn)庫(kù)STD中的一個(gè)程序包;當(dāng)然,Synopsys公司參加IEEE庫(kù)中的std_logic_textio程序包也定義了相關(guān)內(nèi)容。所不同的是,定義在STD庫(kù)中的TEXTIO程序包針對(duì)INTEGER、BIT、BIT_VECTOR、STRING、TIME等定義在VHDL標(biāo)準(zhǔn)程序包STANDARD中的預(yù)定義數(shù)據(jù)類型;而std_logic_textio程序包針對(duì)定義在IEEE庫(kù)中的STD_ULOGIC、STD_LOGIC以及它們的矢量類型的預(yù)定義數(shù)據(jù)類型。TEXTIO提供了用于訪問(wèn)文件的過(guò)程,具有重載性,即過(guò)程名相同,但參數(shù)類型或個(gè)數(shù)不同,詳細(xì)定義請(qǐng)參見(jiàn)附錄A。

PROCEDUREREADLINE(指定文件,行變量);表示從指定文件讀取一行數(shù)據(jù)到行變量中。

PROCEDUREREAD(行變量,數(shù)據(jù)變量,[GOOD]);表示從指定行讀取相應(yīng)數(shù)據(jù)類型的數(shù)據(jù)。GOOD為可選項(xiàng),返回BOOLEAN類型,用于說(shuō)明過(guò)程是否正確執(zhí)行,正確那么返回TURE。

PROCEDUREWRITELINE(指定文件,行變量);表示向指定文件寫(xiě)入行變量所包含的數(shù)據(jù)。

PROCEDUREWRITE(行變量,數(shù)據(jù)變量,寫(xiě)入方式,位寬);表示將數(shù)據(jù)寫(xiě)入行變量;寫(xiě)入方式表示寫(xiě)在行變量的左邊還是右邊,其值只能是left或者right;位寬表示寫(xiě)入數(shù)據(jù)時(shí)所占的寬度。

在TEXTIO中定義了幾種數(shù)據(jù)類型,包括:數(shù)據(jù)類型LINE、TEXT、SIDE和子類型WIDTH。

(1)數(shù)據(jù)類型LINE。其源代碼定義如下:

TYPELINEISACCESSSTRING;定義LINE為存取類型的變量,它表示該變量是指向字符串的指針,是TEXTIO中所有操作的根本單元。讀文件時(shí),先按行(LINE)讀出一行數(shù)據(jù),再對(duì)LINE操作來(lái)讀取各種不同數(shù)據(jù)類型的數(shù)據(jù);寫(xiě)文件時(shí),先將各種數(shù)據(jù)類型組合成LINE,再將LINE寫(xiě)入文件。需要注意的是,只有變量才可以是存取類型,而信號(hào)那么不能是存取類型。例8-14聲明了兩個(gè)變量line_in和line_out,其類型都是LINE。

【例8-14】

VARIABLEline_in:LINE;

VARIABLEline_out:LINE;(2)數(shù)據(jù)類型TEXT。其源代碼定義如下:

TYPETEXTISFILEOFSTRING;

定義TEXT是文件類型,長(zhǎng)度可變。例8-15和例8-16都定義了兩個(gè)文件類型的變量file_input和file_output,用于訪問(wèn)對(duì)應(yīng)的文件datain.txt和dataout.txt。不同的是,例8-15采用的是VHDL87標(biāo)準(zhǔn),而例8-16采用的是VHDL93標(biāo)準(zhǔn),兩個(gè)標(biāo)準(zhǔn)在文件使用方面有較大的差異,使用時(shí)應(yīng)注意選擇相應(yīng)的標(biāo)準(zhǔn)?!纠?-15】

FILEfile_input :TEXTISIN“datain.txt〞;

FILEfile_output :TEXTISOUT“dataout.txt〞;

【例8-16】

FILEfile_input :TEXTOPENREAD_MODEIS“datain.txt〞;

FILEfile_output :TEXTOPENWRITE_MODEIS"dataout.txt";(3)數(shù)據(jù)類型SIDE。其源代碼定義如下:

TYPESIDEIS(right,left);

定義了SIDE為一種枚舉類型,取值只有right和left兩種,分別表示將數(shù)據(jù)從左和從右寫(xiě)入行變量中。例8-17顯示了將output_data從左邊寫(xiě)入LINE變量line_out,位寬為8。

【例8-17】

WRITE(line_out,output_data,left,8);

(4)子類型WIDTH。其源代碼定義如下:

SUBTYPEWIDTHISNATURAL;

數(shù)據(jù)類型WIDTH用于指定寫(xiě)入LINE變量的位寬。2.移位存放器實(shí)例

這里仍然以例8-3移位存放器的例子,采用TEXTIO的方法來(lái)實(shí)現(xiàn)測(cè)試驗(yàn)證,其原理框圖如圖8-24所示。文件datain.txt提供移位存放器的置數(shù)初值din,在傳遞給DUT之前,進(jìn)行數(shù)據(jù)類型的變化,由BIT_VECTOR變化為符合DUT中聲明的數(shù)據(jù)類型STD_LOGIC_VECTOR。再按照時(shí)鐘節(jié)拍,將DUT的輸出數(shù)據(jù)寫(xiě)入到輸出文件dataout.txt。當(dāng)然,在寫(xiě)入前,也需要進(jìn)行數(shù)據(jù)類型的變換。圖8-24使用TEXTIO的移位存放器TB原理框圖首先將存儲(chǔ)輸入鼓勵(lì)的datain.txt文件保存于移位存放器工程同一文件夾下,datain.txt文件內(nèi)有三個(gè)鼓勵(lì)輸入,分別是:“00001101〞、“00000101〞和“00001001〞,見(jiàn)圖8-25。對(duì)于大型設(shè)計(jì),更好的方式是采用C語(yǔ)言或者M(jìn)atlab產(chǎn)生鼓勵(lì)。例8-18讀取datain.txt中的鼓勵(lì),并將其傳遞給信號(hào)din,作為置數(shù)初值。圖8-25提供鼓勵(lì)的文件datain.txt【例8-18】例8-18中L5聲明了STD庫(kù)中的TEXTIO程序包。L28~L35確定了4次有效的置數(shù)信號(hào)(load=“1〞)。進(jìn)程p0從datain.txt讀出鼓勵(lì),并傳遞給din,使用了斷言語(yǔ)句ASSERT,當(dāng)文件讀完后,會(huì)出現(xiàn)警告信息。進(jìn)程p1將DUT的輸出經(jīng)過(guò)轉(zhuǎn)化后寫(xiě)入文件dataout.txt。需要注意的是,L55聲明了文件類型變量file_out,可以訪問(wèn)的對(duì)應(yīng)保存輸出結(jié)果的文件是dataout.txt,這里必須要寫(xiě)明文件路徑和文件名,且在工程同一文件夾內(nèi)保存有空dataout.txt文件。例8-18的仿真結(jié)果如圖8-26和圖8-27所示??梢钥吹剑?0001101〞、“00000101〞、“00001001〞分別被作為初值置入,然后在時(shí)鐘信號(hào)clk的上升沿開(kāi)始進(jìn)行移位操作。在1200ns時(shí),由于文件數(shù)據(jù)已經(jīng)讀完,執(zhí)行斷言語(yǔ)句L47~L49,在Modelsim的Transcript窗口顯示文件結(jié)束的警告信息,如圖8-28所示。

例8-18也可翻開(kāi)IEEE庫(kù)中的std_logic_textio程序包,直接對(duì)數(shù)據(jù)類型STD_LOGIC進(jìn)行操作,防止數(shù)據(jù)類型的轉(zhuǎn)換,請(qǐng)讀者自行完成相應(yīng)的代碼和仿真測(cè)試。圖8-27例8-18TB仿真結(jié)果(2)圖8-26例8-18TB仿真結(jié)果(1)圖8-28文件結(jié)束的警告信息在工程保存目錄下找到文件dataout.txt,翻開(kāi)文件即可觀察輸出結(jié)果,如圖8-29所示。

如果改變datain.txt中的鼓勵(lì)數(shù)據(jù),如將“00001101〞改為“00000111〞,那么仿真結(jié)果也會(huì)發(fā)生改變,見(jiàn)圖8-30。輸出結(jié)果文件dataout.txt也會(huì)發(fā)生相應(yīng)的改變,如圖8-31所示。圖8-29文件dataout.txt仿真輸出結(jié)果圖8-30改變鼓勵(lì)后文件dataout.txt仿真輸出結(jié)果圖8-31改變鼓勵(lì)數(shù)據(jù)后

溫馨提示

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