新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 應用TEXTl0和MATLAB進行復雜數字系統仿真

        應用TEXTl0和MATLAB進行復雜數字系統仿真

        作者: 時間:2006-09-05 來源:網絡 收藏
        摘要:在基于FPGA的復雜測試中,設計者常常面臨各種挑戰。以數字圖像處理系統的為例。如果采用完備性測試方法,那么測試矢量的數量將是非常巨大的;如果采用常規方法.不僅效率不高.而且可能無法達到仿真測試的目的。針對這個難題,提出一種進行仿真測試的新方法.該方法應用TEXTIO和來輔助仿真測試過程,使問題得到較好的解決。以電視圖像實時多目標捕獲單元的仿真測試為例。全面、細致地討論這種新方法。
        關 鍵 詞:TEXTIO;;TestBench;仿真;測試激勵
        中圖分類號:TN707 文獻標識碼:A 文章編號:。1006―6977(2006)01―0004―04

        1 引言
        在對復雜進行仿真測試時,設計者常常面對測試向量數量龐大而難以實現的問題。以數字圖像處理系統的仿真測試為例,如果采用完備性測試方法.那么所需測試向量的數量將非常巨大,甚至無法實現:而采用測試向量波形圖或者用HDL語言描述等常用方法.不僅仿真測試工作的效率低下,而且工作量巨大。在數字圖像處理系統中,一幀320x240的數字圖像所產生的測試向量數量達到320x240x2=153 600個。無論采用完備性測試方法還是向量波形圖或者.HDL語言描述的方法,由于測試向量的數量極其巨大,采用這些方法都難以進行仿真測試。

        針對這個難題,筆者提出一種進行仿真測試的新方法.該方法應用TEXTI0和:來輔助仿真測試過程.使測試向量數量巨大、難以處理的難題得到很好的解決。以電視視頻系統中實時多目標捕獲單元的仿真測試為例.對這種新方法進行全面的討論。

        2 基于TEXTIO的VlII)L仿真
        2.1 TEXTIO的功能

        TEXXTl0是VHDL標準庫STD中的程序包(Package),它提供了VHDL與磁盤文件直接訪問的橋梁。TEXTIO定義了3種類型:LINE類型、TEXT類型及SIDE類型。TEXTI0在程序包中定義了一些訪問文件的過程(Procedure)。

        TEXTIO提供的基本過程有:
        (1)procedure READLNE(文件變量,行變量),用于從指定文件讀取一行數據到行變量中;
        (2)procedure WRITELNE(文件變量,行變量),用于向指定文件寫入行變量所包含的數據;
        (3)procedure READ(行變量,數據類型),用于從行變量中讀取相應數據類型的數據.根據參數的數據類型及參數個數的不同.有多種重載方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time數據類型的重載;
        (4)mcedure WRITE(行變量,數據變量,寫入方式,位寬),該過程將數據寫入行變量。其中,寫入方式表示寫在行變量的左邊還是右邊,其值只能為left或right,位寬表示寫入數據時占的位寬。例如write(Oufljne,OutData,left,2/表示將變量OutData寫入LINE 變量OutLine的左邊,占2個字節。

        2.2 仿真測試方案

        使用TEXTO和MNTLAB輔助TestBench進行復雜仿真的方案框圖如圖1所示。

        2.3 仿真測試步驟
        2.3.1 使用MATLAB生成測試激勵文件

        MATLAB是矩陣實驗室(Matrix Laboratory)的縮寫,是1984年MathWorks公司推出的軟件。經過20多年的發展,MATLAB已成為通用科技計算、圖視交互系統和程序語言,廣泛應用于研究和解決各種具體工程問題。

        在復雜數字系統仿真中,用戶可以利用MAT-LAB的強大處理功能生成測試激勵文件。測試激勵文件的數據格式由設計者自行定義。測試激勵文件應包含輸入信號的測試激勵數據.也可以包含輸出信號的期望輸出數據.這些內容常常以.ASCII碼表示。

        2.3.2 編寫TestBench

        TestBench是測試平臺程序。TEXTI0的使用是通過TestBench來進行的,TestBench利用TEXTIO讀取測試激勵文件或寫入仿真結果輸出。進行復雜數字系統仿真時,用戶根據測試的目的和要求設計TestBench。

        2.3.3 在Modelsim中進行仿真

        Modelsim是Model Technology(Mentor Graphics的子公司)的HDL(Hardware Description Language)仿真軟件。可以實現VHDL、Verilog及VHDL一Ver-ilog混合設計的仿真。Modelsim為’TestBench提供一種良好的HDL仿真環境。

        2.3.4 結果分析

        仿真結束后,仿真結果是否符合要求,用戶可以通過二種方法來判斷。一種是應用軟件自動判斷。即通過TestBench或其他軟件(如MATLAB)對仿真輸出結果和期望輸出結果進行對比,從而得到分析結果:另外一種是人工判斷.即設計者自行對仿真輸出結果和期望輸出結果進行對比,從而得到分析結果。

        3 仿真測試實例
        3.1 電視圖像實時目標捕獲單元功能

        電視圖像實時目標捕獲單元(以下簡稱待測單元)具有對電視圖像中的目標圖像進行實時捕獲的功能。本例將用TEXllO和MATLAB輔助Test-Bench對待測單元進行仿真測試。

        3.2 需要產生的測試信號及波形

        待測單元輸入信號的時序如圖2所示。其中,clk、vsy、hsy和ccd分別代表像素時鐘、數字化后的場同步、行同步和二值圖像信號。


        用戶設計的測試激勵信號即測試激勵文件中輸入信號的激勵數據,應符合圖2所示時序的要求。

        3.3 測試信號的產生

        在MATLAB的開發環境中.通過編程可以生成測試激勵文件。
        以下是生成測試激勵程序的核心代碼:
        image=imread(‘pic.bmp’); %讀取圖像文件
        [YN,XN]=size(image); %得到圖像大小
        FZ=20; %晶體振蕩器頻率(MHz)
        %定義常數 %對應于圖2所示的時序
        POSTIME=52.2; %行正程時間(μ8)
        NEGTIME=11.8; %行逆程時間(μs)
        HORTIME=64; %行正逆程總時間
        VSYTIME=1615; %場信號時間(μB)
        PPDOT=POSTIME*FZ/XN; %行正程時間*晶體振
        蕩器頻率,圖像X方向分辨率
        ……

        fid=fopen(‘TestVectors.inp’,‘W’) ;%指定測試激勵文件的文件名稱
        for j=1:1:YN;
        yy_j;xx=0;
        for i=l:1:HORTIME*FZ;
        %產生行同步激勵
        if(i(HFNTIME+HDLTIME)*FZ)(i>(HFNTIME+HDLTIME+HSYTIME)*FZ)
        hsy=l;
        else
        hsy=0;
        end;
        %產生像素時鐘激勵
        if clk==1
        clk=0;
        else
        clk=l;
        end;
        %產生CCD激勵
        if i>NEGTIME*FZ
        xx=round((i-NEGTIME*FZ)/PPDOT+0.45):
        ccd=round(image(yy,xx));
        else
        ccd=0;
        end;
        %將激勵寫入測試激勵文件
        fprintf md.‘%d%d%d%d%d%d、Il’,clk,ccd,hsy,vsy);
        end;
        end;
        產生的測試激勵文件名稱為TestVectors.inp,激勵內容以ASCII碼表示,信號之間用空格隔開,且一行代表一次激勵。下面是測試激勵文件中的一段內容,激勵包含clk,ccd,hsy,vsy 4個信號:
        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

        進行仿真時。TestBeneh應用TEXTIO通過逐行讀取測試激勵文件得到待測單元輸入信號的激勵。

        3.4 編寫TestBench

        TestBench調用TEXTIO讀取測試激勵文件得到激勵,然后將這些激勵分別驅動到待測單元的輸入端口。同時,TestBench讀取待測單元的輸出結果,調用TEXTIO將仿真輸出結果寫入文件名稱為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); 一一讀取一個值給信號vclk
        read(invees,ch); 一一讀取空格
        ……

        read(invees,wBy,good); 一讀取一個值給信號vvsy
        read(invecs,ch); 一讀取空格
        ……

        clk=vclk;一驅動待測單元的輸入信號clk
        ccd=vced;一驅動待測單元的輸入信號ccd
        hsy=vhsy;一驅動待測單元的輸入信號hsy
        vsy=wsy;一驅動待測單元的輸入信號vsy
        ……

        caseiis
        when 0=>out_string:=“frame_Yup0:”:一將目標0左上角Y坐標寫入仿真結果
        when 1=>out_string=“frame_Ydn0:”:一將目標0右下角Y坐標寫入仿真結果
        when 14=>out_strlng:=“frame_Xli3:”:一將目標3左上角X坐標寫入仿真結果
        when 15=>out_string:=“frame_Xrt3:”:一將目標3右下角X坐標寫入仿真結果
        when other8=>null;
        end case;
        write(outvees,string’(out_string));
        ……

        3.5 Modelsim中顯示的測試波形及測試結果
        在Modelsim提供的HDL仿真環境中,運行TestBeneh進行仿真測試,得到測試向量波形(如圖3所示)、仿真波形(如圖4所示)和仿真輸出結果文件ResuIt.out。對仿真輸出結果進行分析表明,仿真輸出的目標位置與輸入電視圖像中的目標位置完全一致。

        本例的結果分析是通過人工對比進行的。還可以將仿真預期輸出結果保存在測試激勵文件或其他文件中.TestBench調用TEXTIO讀取仿真預期輸出結果.并和仿真實際輸出結果進行對比,然后自動判斷結果是否正確。在某些場合下,例如對VHDL編寫的處理器進行仿真調試時,用戶可以將包括指令類型、源地址、目標地址在內的指令保存成文本文件。TestBench調用TEXTIO讀取這些指令。同時.TestBeneh調用TEXTIO將結果及中間變量保存成文本文件,以便設計者事后分析和查找問題的原因。

        4 結束語
        TEXTIO程序包使VHDL的仿真功能得到拓展。MATLAB是研究和解決工程問題的有力工具。在基于FPGA的復雜數字系統的仿真測試中,靈活應用TEXTIO和MATLAB等工具包能很好地解決仿真測試中面臨的測試向量龐大和難以處理的問題。

        三維掃描儀相關文章:三維掃描儀原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 商河县| 鹿邑县| 凌海市| 和田市| 凤翔县| 略阳县| 章丘市| 宾阳县| 河北区| 宿州市| 深圳市| 雷波县| 皋兰县| 琼中| 尉犁县| 和政县| 酒泉市| 枣庄市| 乐陵市| 饶河县| 出国| 长白| 桃江县| 政和县| 科技| 茶陵县| 句容市| 内江市| 洮南市| 名山县| 阜新市| 江永县| 平谷区| 濮阳市| 临沧市| 陈巴尔虎旗| 比如县| 图木舒克市| 定远县| 宜春市| 贡觉县|