新聞中心

        EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 編寫(xiě)高效的測(cè)試設(shè)計(jì)(testbenches)

        編寫(xiě)高效的測(cè)試設(shè)計(jì)(testbenches)

        作者: 時(shí)間:2008-06-26 來(lái)源:電子開(kāi)發(fā)網(wǎng) 收藏

          reset = 1;

        本文引用地址:http://www.104case.com/article/84843.htm

          data = 5’b00000;

          load = 0;

          sel = 2’b00;

          #200

          reset = 0;

          load = 1;

          #200

          data = 5’b00001;

          #100

          sel = 2’b01;

          load = 0;

          #200

          sel = 2’b10;

          #1000 $stop;

          end

          initial begin// this process block pipes the ASCII results to the

          //terminal or text editor

          $timeformat(-9,1,"ns",12);

          $display(" Time Clk Rst Ld SftRg Data Sel");

          $monitor("%t %b %b %b %b %b %b", $realtime,

          clock, reset, load, shiftreg, data, sel);

          end

          endmodule

          以上的設(shè)計(jì)實(shí)例化設(shè)計(jì),設(shè)置時(shí)鐘,提供激勵(lì)信號(hào)。所有的進(jìn)程塊在仿真時(shí)間零點(diǎn)開(kāi)始。英鎊標(biāo)記(#)說(shuō)明下一個(gè)激勵(lì)作用前的延遲。$stop命令使仿真器停止仿真(所有設(shè)計(jì)中都應(yīng)該包含一個(gè)停止命令)。最后,$monitor語(yǔ)句返回ascII格式的結(jié)果到屏幕或者管道輸出到一個(gè)文本編輯器。接后的是一個(gè)VHDL描述的的測(cè)試設(shè)計(jì),它實(shí)例化設(shè)計(jì)并提供激勵(lì)到上述用verilog描述的移位寄存器.

          library IEEE;

          use IEEE.std_logic_1164.all;

          entity testbench is

          end entity testbench;

          architecture test_reg of testbench is

          component shift_reg is

          port (clock : in std_logic;

          reset : in std_logic;

          load : in std_logic;

          sel : in std_logic_vector(1 downto 0);

          data : in std_logic_vector(4 downto 0);

          shiftreg : out std_logic_vector(4 downto 0));

          end component;

          signal clock, reset, load: std_logic;

          signal shiftreg, data: std_logic_vector(4 downto 0);

          signal sel: std_logic_vector(1 downto 0);

          constant ClockPeriod : TIME := 50 ns;

          begin

          UUT : shift_reg port map (clock => clock, reset => reset,

          load => load, data => data,

          shiftreg => shiftreg);

          process begin

          clock <= not clock after (ClockPeriod / 2);

          end process;

          process begin

          reset <= ’1’;

          data <= "00000";

          load <= ’0’;

          set <= "00";

          wait for 200 ns;

          reset <= ’0’;

          load <= ’1’;

          wait for 200 ns;

          data <= "00001";

          wait for 100 ns;

          sel <= "01";

          load <= ’0’;

          wait for 200 ns;

          sel <= "10";

          wait for 1000 ns;

          end process;

          end architecture test_reg;

          上述VHDL測(cè)試設(shè)計(jì)與之前提到的verilog測(cè)試設(shè)計(jì)的功能是相似的,如希望用一個(gè)命令來(lái)返回輸出到終端。在vhdl中,std_textio程序包被用于在終端上顯示信息, 它將被擱到下一節(jié)說(shuō)明。
        自動(dòng)驗(yàn)證

          推薦自動(dòng)實(shí)現(xiàn)測(cè)試結(jié)果的驗(yàn)證,尤其是對(duì)于較大的設(shè)計(jì)來(lái)說(shuō)。自動(dòng)化減少了檢查設(shè)計(jì)是否正確所要求的時(shí)間,也使人可能的犯錯(cuò)最少。

          一般有以下幾種常用的自動(dòng)測(cè)試驗(yàn)證的方法:

          1、數(shù)據(jù)庫(kù)比較。首先,要?jiǎng)?chuàng)建一個(gè)包含預(yù)期輸出(一個(gè)黃金向量文件)的數(shù)據(jù)庫(kù)文件。然后,仿真輸出被捕獲并與黃金向量文件中參考的向量比較(在 unix中的diff 工具可以用來(lái)比較ascii數(shù)據(jù)文件)。然而,因?yàn)閺妮敵龅捷斎胛募羔槢](méi)有提供,是這種方法的一個(gè)缺點(diǎn),使得跟蹤一個(gè)導(dǎo)致錯(cuò)誤輸出的原因比較困難。

          2、波形比較。波形比較可以自動(dòng)或是手動(dòng)的運(yùn)行。自動(dòng)的方法使用一個(gè)測(cè)試比較器來(lái)比較黃金波形與測(cè)試輸出波形。xilinx的hdl bencher工具可以用于執(zhí)行一個(gè)自動(dòng)波形比較(關(guān)于hdl bencher的相關(guān)信息,請(qǐng)參看

          http://www.xilinx.com/products/software/statecad/index.htm

          3、自較驗(yàn)測(cè)試。一個(gè)自較驗(yàn)測(cè)試檢查預(yù)期的結(jié)果與運(yùn)行時(shí)間的實(shí)際結(jié)果,并不是在仿真結(jié)束以后。因?yàn)橛杏玫腻e(cuò)誤跟蹤信息可以內(nèi)建在一個(gè)測(cè)試設(shè)計(jì)中,用來(lái)說(shuō)明哪些地方設(shè)計(jì)有誤,調(diào)試時(shí)間可以非常明顯地縮短。更多的關(guān)于自較驗(yàn)測(cè)試的信息在下一節(jié)說(shuō)明。
        自較驗(yàn)測(cè)試

          自較驗(yàn)測(cè)試通過(guò)在一個(gè)測(cè)試文檔中放置一系列的預(yù)期向量表來(lái)實(shí)現(xiàn)。運(yùn)行時(shí)間時(shí)間間隔將這些向量與定義好的實(shí)際仿真結(jié)果進(jìn)行比較。如果實(shí)際結(jié)果與預(yù)期結(jié)果匹配,仿真成功。如果結(jié)果不匹配,測(cè)試報(bào)告兩者的差異。

          為同步設(shè)計(jì)實(shí)現(xiàn)自較驗(yàn)測(cè)試更簡(jiǎn)單一些,因?yàn)榕c實(shí)現(xiàn)的結(jié)果相比較可以在一個(gè)時(shí)鐘沿或任何一個(gè)整數(shù)倍的時(shí)鐘周期后。比較的方法基于設(shè)計(jì)本身的特性。比如一個(gè)用于內(nèi)存I/O的測(cè)試應(yīng)該檢查每一次更新數(shù)據(jù)時(shí)的結(jié)果或者從一個(gè)內(nèi)存位置讀取。類似的,如果一個(gè)設(shè)計(jì)用了一個(gè)顯而易見(jiàn)的組合塊的數(shù)字,在預(yù)期結(jié)果描述時(shí),組合時(shí)延就必須要考慮。

          在自較驗(yàn)測(cè)試中,預(yù)期輸出與實(shí)際輸出在一個(gè)特定的運(yùn)行時(shí)間間隔比較以便提供自動(dòng)的錯(cuò)誤檢查。這個(gè)技術(shù)在小到中型的設(shè)計(jì)中非常好。但是,因?yàn)楫?dāng)設(shè)計(jì)復(fù)雜后,可能的輸出組合成指數(shù)倍的增長(zhǎng),為一個(gè)大型設(shè)計(jì)編寫(xiě)一個(gè)自較驗(yàn)測(cè)試設(shè)計(jì)是非常困難和非常費(fèi)時(shí)的。

          以下是一個(gè)用verilog和vhdl描述的自較驗(yàn)測(cè)試的簡(jiǎn)單的例子:

          Verilog例子

          下述的設(shè)計(jì)實(shí)例中,預(yù)期的結(jié)果被詳細(xì)說(shuō)明。后面的代碼,兩種結(jié)果被比較,比較的結(jié)果被返回終端。如果沒(méi)有錯(cuò)誤,一個(gè)“end of good simulation”消息會(huì)顯示。如果失配發(fā)生,根據(jù)期望與實(shí)際值的失配情況,錯(cuò)誤會(huì)被相應(yīng)報(bào)告。

          ‘timescale 1 ns / 1 ps

          module test_sc;

          reg tbreset, tbstrtstop;

          reg tbclk;

          wire [6:0] onesout, tensout;

          wire [9:0] tbtenthsout;

          parameter cycles = 25;

          reg [9:0] Data_in_t [0:cycles];

          // /////////////////////////////

          // Instantiation of the Design

          // /////////////////////////////

          stopwatch UUT (.CLK (tbclk), .RESET (tbreset), .STRTSTOP (tbstrtstop),

          .ONESOUT (onesout), .TENSOUT (tensout), .TENTHSOUT (tbtenthsout));

          wire [4:0] tbonesout, tbtensout;

          assign tbtensout = led2hex(tensout);

          assign tbonesout = led2hex(onesout);

          ///////////////////////////////////////////////////////////////

          //EXPECTED RESULTS

          ///////////////////////////////////////////////////////////////

          initial begin

          Data_in_t[1] =10’b1111111110;

          Data_in_t[2] =10’b1111111101;

          Data_in_t[3] =10’b1111111011;

          Data_in_t[4] =10’b1111110111;

          Data_in_t[5] =10 ’b1111101111;



        關(guān)鍵詞: 測(cè)試 HLL

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 临海市| 保康县| 页游| 淅川县| 大理市| 四川省| 鄂州市| 亚东县| 固镇县| 昌平区| 葫芦岛市| 丽江市| 筠连县| 中宁县| 平遥县| 彩票| 大宁县| 孝义市| 常山县| 宁晋县| 景宁| 合山市| 黎川县| 穆棱市| 明水县| 安新县| 军事| 蓝山县| 新巴尔虎右旗| 潞城市| 东莞市| 高安市| 达尔| 怀远县| 读书| 承德市| 桦甸市| 新昌县| 莱州市| 泌阳县| 浠水县|