??自動化驗證testbench結(jié)果可以減少人工檢查的時間和可能犯的失誤,尤其對于比較大的設(shè)計。目前普遍使用三種自動化testbench驗證方法:
數(shù)據(jù)庫比較:首先創(chuàng)建一個包含預(yù)期輸出的數(shù)據(jù)庫文件(稱作goldenvector文件),然后捕獲仿真輸出與該文件中的參考向量作比較。但是由于沒有提供從輸出到輸入文件的指針,該方法的缺點是難以追蹤導(dǎo)致不正確輸出的錯誤源。
波形比較:將testbench輸出波形與預(yù)期波形作比較。Xilinx曾推出過一款HDL Bencher的工具,可以執(zhí)行自動化的波形比較,不過目前由于該方法很少使用,Xilinx也下架了該工具。
自我檢查testbench設(shè)計:與前兩種方法不同,該方法實時檢查預(yù)期結(jié)果和實際結(jié)果,而不是仿真結(jié)束后才檢查。在testbench中插入錯誤追蹤信息可以顯示設(shè)計在哪里失敗,從而縮短調(diào)試時間。
??本文將介紹最后一種自動化驗證方法。將一系列預(yù)期向量(比如由MATLAB等軟件產(chǎn)生)放在testbench文件中,在運(yùn)行時間間隔與實際仿真結(jié)果比較,如果匹配則表明仿真成功;不匹配則報告結(jié)果不符。
??比較時間可以選擇在每個時鐘邊沿,或者沒n個時鐘周期比較一次,總而言之要與設(shè)計相符合。比如內(nèi)存I/O的testbench應(yīng)該在讀出或?qū)懭胍粋€新數(shù)據(jù)后就進(jìn)行比較;如何設(shè)計使用了大量組合邏輯模塊,選取比較時間必須考慮組合邏輯延遲。
??對于中小型設(shè)計而言,自我檢查的testbench設(shè)計方法是一種不錯的選擇,但是對于復(fù)雜的大型設(shè)計,可能的輸出組合呈指數(shù)形式增加,編寫一個自我檢查testbench將會困難很多。下面給出一個自我檢查testbench的設(shè)計示例(來源于xapp199):
`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]; // 實例化設(shè)計 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); //------------------------------------------------------------- // 預(yù)期結(jié)果 //------------------------------------------------------------- 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; Data_in_t[6] =10'b1111011111; Data_in_t[7] =10'b1110111111; Data_in_t[8] =10'b1101111111; Data_in_t[9] =10'b1011111111; Data_in_t[10]=10'b0111111111; Data_in_t[11]=10'b1111111110; Data_in_t[12]=10'b1111111110; Data_in_t[13]=10'b1111111101; Data_in_t[14]=10'b1111111011; Data_in_t[15]=10'b1111110111; Data_in_t[16]=10'b1111101111; Data_in_t[17]=10'b1111011111; Data_in_t[18]=10'b1110111111; Data_in_t[19]=10'b1101111111; Data_in_t[20]=10'b1011111111; Data_in_t[21]=10'b0111111111; Data_in_t[22]=10'b1111111110; Data_in_t[23]=10'b1111111110; Data_in_t[24]=10'b1111111101; Data_in_t[25]=10'b1111111011; end reg GSR; assign glbl.GSR = GSR; initial begin GSR = 1; // 等到全局復(fù)位結(jié)束 #100 GSR = 0; end //建立一個時鐘 initial begin tbclk = 0; //全局復(fù)位結(jié)束后開始產(chǎn)生時鐘信號 #100 forever #60 tbclk = ~tbclk; end //給出設(shè)計激勵 initial begin tbreset = 1; tbstrtstop = 1; #240 tbreset = 0; tbstrtstop = 0; #5000 tbstrtstop = 1; #8125 tbstrtstop = 0; #500 tbstrtstop = 1; #875 tbreset = 1; #375 tbreset = 0; #700 tbstrtstop = 0; #550 tbstrtstop = 1; #100000 $stop; end //------------------------------------------------------------- // 在每個時鐘的下降沿比較預(yù)期結(jié)果和實際結(jié)果 //------------------------------------------------------------- integer i,errors; always @ (posedge tbclk) begin if (tbstrtstop) begin i = 0; errors = 0; end else begin for (i = 1; i <= cycles; i = i + 1) begin ? ? ? ?@(negedge tbclk) ? ? ? ?// 每個下降沿檢查結(jié)果 ? ? ? ?$display("Time%d ns; TBSTRTSTOP=%b; Reset=%h; Expected ? ? ? ?TenthsOut=%b; Actual TenthsOut=%b", $stime, tbstrtstop, tbreset, ? ? ? ?Data_in_t[i], tbtenthsout); ? ? ? ?if ( tbtenthsout !== Data_in_t[i] ) begin ? ? ? ? ? ?$display(" ------ERROR. A mismatch has occurred-----"); ? ? ? ? ? ?errors = errors + 1; ? ? ? ?end ? ?end ? ?if (errors == 0) ? ? ? ?$display("Simulation finished Successfully."); ? ?else if (errors > 1) $display("%0d ERROR! See log above for details.",errors); else $display("ERROR! See log above for details."); #100 $stop; end end endmodule
??上述代碼中,將預(yù)期結(jié)果和實際結(jié)果的比較情況顯示在終端。該代碼模板可應(yīng)用于任何設(shè)計的自我檢查testbench中,需要修改實例化接口和預(yù)期的輸出值。如果不需要在每個時鐘沿檢查一次數(shù)據(jù),則修改for循環(huán)的執(zhí)行條件。
審核編輯:劉清
-
比較器
+關(guān)注
關(guān)注
14文章
1813瀏覽量
108328 -
MATLAB仿真
+關(guān)注
關(guān)注
4文章
176瀏覽量
20250 -
HDL語言
+關(guān)注
關(guān)注
0文章
48瀏覽量
9081
原文標(biāo)題:Testbench編寫指南(4)自動化驗證方法
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
是德科技的 Type-C 測試解決方案為高速接口提供最廣泛的物理層自動化驗證
EDA形式化驗證漫談:仿真之外,驗證之內(nèi)
全自動煤炭氟氯離子化驗儀器DT-5A型
驗證方法簡介
老化驗證和封裝形式有關(guān)系嗎?
超大規(guī)模集成電路的自動化驗證方法
基于串空間的協(xié)議認(rèn)證屬性標(biāo)準(zhǔn)化驗證過程
VaaS平臺已支持區(qū)塊鏈平臺智能合約的形式化驗證
使用三種自動化testbench驗證方法
軟件的順序語句塊自動化規(guī)約與驗證研究
安世亞太:中國仿真如何進(jìn)行切實可行的工程化驗證
從小眾走向普及,形式化驗證對系統(tǒng)級芯片開發(fā)有多重要?

如何可靠、快速、自動地驗證處理器硬件

編寫高效Testbench的指南和示例

評論