應用TEXTl0和MATLAB進(jìn)行復雜數字系統仿真
關(guān) 鍵 詞:TEXTIO;MATLAB;TestBench;仿真;測試激勵
中圖分類(lèi)號:TN707 文獻標識碼:A 文章編號:。1006―6977(2006)01―0004―04
1 引言
在對復雜數字系統進(jìn)行仿真測試時(shí),設計者常常面對測試向量數量龐大而難以實(shí)現的問(wèn)題。以數字圖像處理系統的仿真測試為例,如果采用完備性測試方法.那么所需測試向量的數量將非常巨大,甚至無(wú)法實(shí)現:而采用測試向量波形圖或者用HDL語(yǔ)言描述等常用方法.不僅仿真測試工作的效率低下,而且工作量巨大。在數字圖像處理系統中,一幀320x240的數字圖像所產(chǎn)生的測試向量數量達到320x240x2=153 600個(gè)。無(wú)論采用完備性測試方法還是向量波形圖或者.HDL語(yǔ)言描述的方法,由于測試向量的數量極其巨大,采用這些方法都難以進(jìn)行仿真測試。
針對這個(gè)難題,筆者提出一種進(jìn)行仿真測試的新方法.該方法應用TEXTI0和:MATLAB來(lái)輔助仿真測試過(guò)程.使測試向量數量巨大、難以處理的難題得到很好的解決。以電視視頻系統中實(shí)時(shí)多目標捕獲單元的仿真測試為例.對這種新方法進(jìn)行全面的討論。
2 基于TEXTIO的VlII)L仿真
2.1 TEXTIO的功能
TEXXTl0是VHDL標準庫STD中的程序包(Package),它提供了VHDL與磁盤(pán)文件直接訪(fǎng)問(wèn)的橋梁。TEXTIO定義了3種類(lèi)型:LINE類(lèi)型、TEXT類(lèi)型及SIDE類(lèi)型。TEXTI0在程序包中定義了一些訪(fǎng)問(wèn)文件的過(guò)程(Procedure)。
TEXTIO提供的基本過(guò)程有:
(1)procedure READLNE(文件變量,行變量),用于從指定文件讀取一行數據到行變量中;
(2)procedure WRITELNE(文件變量,行變量),用于向指定文件寫(xiě)入行變量所包含的數據;
(3)procedure READ(行變量,數據類(lèi)型),用于從行變量中讀取相應數據類(lèi)型的數據.根據參數的數據類(lèi)型及參數個(gè)數的不同.有多種重載方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time數據類(lèi)型的重載;
(4)mcedure WRITE(行變量,數據變量,寫(xiě)入方式,位寬),該過(guò)程將數據寫(xiě)入行變量。其中,寫(xiě)入方式表示寫(xiě)在行變量的左邊還是右邊,其值只能為left或right,位寬表示寫(xiě)入數據時(shí)占的位寬。例如write(Oufljne,OutData,left,2/表示將變量OutData寫(xiě)入LINE 變量OutLine的左邊,占2個(gè)字節。
2.2 仿真測試方案
使用TEXTO和MNTLAB輔助TestBench進(jìn)行復雜數字系統仿真的方案框圖如圖1所示。
2.3 仿真測試步驟
2.3.1 使用MATLAB生成測試激勵文件
MATLAB是矩陣實(shí)驗室(Matrix Laboratory)的縮寫(xiě),是1984年MathWorks公司推出的軟件。經(jīng)過(guò)20多年的發(fā)展,MATLAB已成為通用科技計算、圖視交互系統和程序語(yǔ)言,廣泛應用于研究和解決各種具體工程問(wèn)題。
在復雜數字系統仿真中,用戶(hù)可以利用MAT-LAB的強大處理功能生成測試激勵文件。測試激勵文件的數據格式由設計者自行定義。測試激勵文件應包含輸入信號的測試激勵數據.也可以包含輸出信號的期望輸出數據.這些內容常常以.ASCII碼表示。
2.3.2 編寫(xiě)TestBench
TestBench是測試平臺程序。TEXTI0的使用是通過(guò)TestBench來(lái)進(jìn)行的,TestBench利用TEXTIO讀取測試激勵文件或寫(xiě)入仿真結果輸出。進(jìn)行復雜數字系統仿真時(shí),用戶(hù)根據測試的目的和要求設計TestBench。
2.3.3 在Modelsim中進(jìn)行仿真
Modelsim是Model Technology(Mentor Graphics的子公司)的HDL(Hardware Description Language)仿真軟件??梢詫?shí)現VHDL、Verilog及VHDL一Ver-ilog混合設計的仿真。Modelsim為’TestBench提供一種良好的HDL仿真環(huán)境。
2.3.4 結果分析
仿真結束后,仿真結果是否符合要求,用戶(hù)可以通過(guò)二種方法來(lái)判斷。一種是應用軟件自動(dòng)判斷。即通過(guò)TestBench或其他軟件(如MATLAB)對仿真輸出結果和期望輸出結果進(jìn)行對比,從而得到分析結果:另外一種是人工判斷.即設計者自行對仿真輸出結果和期望輸出結果進(jìn)行對比,從而得到分析結果。
3 仿真測試實(shí)例
3.1 電視圖像實(shí)時(shí)目標捕獲單元功能
電視圖像實(shí)時(shí)目標捕獲單元(以下簡(jiǎn)稱(chēng)待測單元)具有對電視圖像中的目標圖像進(jìn)行實(shí)時(shí)捕獲的功能。本例將用TEXllO和MATLAB輔助Test-Bench對待測單元進(jìn)行仿真測試。
3.2 需要產(chǎn)生的測試信號及波形
待測單元輸入信號的時(shí)序如圖2所示。其中,clk、vsy、hsy和ccd分別代表像素時(shí)鐘、數字化后的場(chǎng)同步、行同步和二值圖像信號。
用戶(hù)設計的測試激勵信號即測試激勵文件中輸入信號的激勵數據,應符合圖2所示時(shí)序的要求。
3.3 測試信號的產(chǎn)生
在MATLAB的開(kāi)發(fā)環(huán)境中.通過(guò)編程可以生成測試激勵文件。
以下是生成測試激勵程序的核心代碼:
image=imread(‘pic.bmp’); %讀取圖像文件
[YN,XN]=size(image); %得到圖像大小
FZ=20; %晶體振蕩器頻率(MHz)
%定義常數 %對應于圖2所示的時(shí)序
POSTIME=52.2; %行正程時(shí)間(μ8)
NEGTIME=11.8; %行逆程時(shí)間(μs)
HORTIME=64; %行正逆程總時(shí)間
VSYTIME=1615; %場(chǎng)信號時(shí)間(μB)
PPDOT=POSTIME*FZ/XN; %行正程時(shí)間*晶體振
蕩器頻率,圖像X方向分辨率
……
fid=fopen(‘TestVectors.inp’,‘W’) ;%指定測試激勵文件的文件名稱(chēng)
for j=1:1:YN;
yy_j;xx=0;
for i=l:1:HORTIME*FZ;
%產(chǎn)生行同步激勵
if(i(HFNTIME+HDLTIME)*FZ)(i>(HFNTIME+HDLTIME+HSYTIME)*FZ)
hsy=l;
else
hsy=0;
end;
%產(chǎn)生像素時(shí)鐘激勵
if clk==1
clk=0;
else
clk=l;
end;
%產(chǎn)生CCD激勵
if i>NEGTIME*FZ
xx=round((i-NEGTIME*FZ)/PPDOT+0.45):
ccd=round(image(yy,xx));
else
ccd=0;
end;
%將激勵寫(xiě)入測試激勵文件
fprintf md.‘%d%d%d%d%d%d、Il’,clk,ccd,hsy,vsy);
end;
end;
產(chǎn)生的測試激勵文件名稱(chēng)為T(mén)estVectors.inp,激勵內容以ASCII碼表示,信號之間用空格隔開(kāi),且一行代表一次激勵。下面是測試激勵文件中的一段內容,激勵包含clk,ccd,hsy,vsy 4個(gè)信號:
0 0 1 1―clk=0 eed=0 hsy=l vsy=l
1 0 1 1―clk=l ccd=0 hsy=l vsy=1
…
0 0 0 1――clk=O ccd=0 hsy=0 vsy=1
…
進(jìn)行仿真時(shí)。TestBeneh應用TEXTIO通過(guò)逐行讀取測試激勵文件得到待測單元輸入信號的激勵。
3.4 編寫(xiě)TestBench
TestBench調用TEXTIO讀取測試激勵文件得到激勵,然后將這些激勵分別驅動(dòng)到待測單元的輸入端口。同時(shí),TestBench讀取待測單元的輸出結果,調用TEXTIO將仿真輸出結果寫(xiě)入文件名稱(chēng)為Re-sult.out的仿真結果輸出文件。
以下是TestBeneh的核心代碼:
testprocess:process
file vector_file:text open read_mode is“TestVectors.
inp”:一指定測試激勵文件
file output_file:text open write_mode is“Reset.out”:
一指定仿真結果輸出文件
variable invecs,outvecs:line;
variable good:boolean;
variable eh:eharacter;
……
while not endfile(veetor_file)loop
readline(veetor_file.invecs);一讀出測試激勵文件一行內容.得到激勵
read(invees,vclk,good); 一一讀取一個(gè)值給信號vclk
read(invees,ch); 一一讀取空格
……
read(invees,wBy,good); 一讀取一個(gè)值給信號vvsy
read(invecs,ch); 一讀取空格
……
clk=vclk;一驅動(dòng)待測單元的輸入信號clk
ccd=vced;一驅動(dòng)待測單元的輸入信號ccd
hsy=vhsy;一驅動(dòng)待測單元的輸入信號hsy
vsy=wsy;一驅動(dòng)待測單元的輸入信號vsy
……
caseiis
when 0=>out_string:=“frame_Yup0:”:一將目標0左上角Y坐標寫(xiě)入仿真結果
when 1=>out_string=“frame_Ydn0:”:一將目標0右下角Y坐標寫(xiě)入仿真結果
when 14=>out_strlng:=“frame_Xli3:”:一將目標3左上角X坐標寫(xiě)入仿真結果
when 15=>out_string:=“frame_Xrt3:”:一將目標3右下角X坐標寫(xiě)入仿真結果
when other8=>null;
end case;
write(outvees,string’(out_string));
……
3.5 Modelsim中顯示的測試波形及測試結果
在Modelsim提供的HDL仿真環(huán)境中,運行TestBeneh進(jìn)行仿真測試,得到測試向量波形(如圖3所示)、仿真波形(如圖4所示)和仿真輸出結果文件ResuIt.out。對仿真輸出結果進(jìn)行分析表明,仿真輸出的目標位置與輸入電視圖像中的目標位置完全一致。
本例的結果分析是通過(guò)人工對比進(jìn)行的。還可以將仿真預期輸出結果保存在測試激勵文件或其他文件中.TestBench調用TEXTIO讀取仿真預期輸出結果.并和仿真實(shí)際輸出結果進(jìn)行對比,然后自動(dòng)判斷結果是否正確。在某些場(chǎng)合下,例如對VHDL編寫(xiě)的處理器進(jìn)行仿真調試時(shí),用戶(hù)可以將包括指令類(lèi)型、源地址、目標地址在內的指令保存成文本文件。TestBench調用TEXTIO讀取這些指令。同時(shí).TestBeneh調用TEXTIO將結果及中間變量保存成文本文件,以便設計者事后分析和查找問(wèn)題的原因。
4 結束語(yǔ)
TEXTIO程序包使VHDL的仿真功能得到拓展。MATLAB是研究和解決工程問(wèn)題的有力工具。在基于FPGA的復雜數字系統的仿真測試中,靈活應用TEXTIO和MATLAB等工具包能很好地解決仿真測試中面臨的測試向量龐大和難以處理的問(wèn)題。
評論