0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

使用三種自動化testbench驗證方法

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2020-11-20 11:26 ? 次閱讀

Testbench編寫指南(4)自動化驗證方法

自動化驗證testbench結果可以減少人工檢查的時間和可能犯的失誤,尤其對于比較大的設計。目前普遍使用三種自動化testbench驗證方法:

數(shù)據(jù)庫比較:首先創(chuàng)建一個包含預期輸出的數(shù)據(jù)庫文件(稱作golden
vector文件),然后捕獲仿真輸出與該文件中的參考向量作比較。但是由于沒有提供從輸出到輸入文件的指針,該方法的缺點是難以追蹤導致不正確輸出的錯誤源。

波形比較:將testbench輸出波形與預期波形作比較。Xilinx曾推出過一款HDL
Bencher的工具,可以執(zhí)行自動化的波形比較,不過目前由于該方法很少使用,Xilinx也下架了該工具。

自我檢查testbench設計:與前兩種方法不同,該方法實時檢查預期結果和實際結果,而不是仿真結束后才檢查。在testbench中插入錯誤追蹤信息可以顯示設計在哪里失敗,從而縮短調(diào)試時間。

本文將介紹最后一種自動化驗證方法。將一系列預期向量(比如由MATLAB等軟件產(chǎn)生)放在testbench文件中,在運行時間間隔與實際仿真結果比較,如果匹配則表明仿真成功;不匹配則報告結果不符。

比較時間可以選擇在每個時鐘邊沿,或者沒n個時鐘周期比較一次,總而言之要與設計相符合。比如內(nèi)存I/O的testbench應該在讀出或寫入一個新數(shù)據(jù)后就進行比較;如何設計使用了大量組合邏輯模塊,選取比較時間必須考慮組合邏輯延遲。
??對于中小型設計而言,自我檢查的testbench設計方法是一種不錯的選擇,但是對于復雜的大型設計,可能的輸出組合呈指數(shù)形式增加,編寫一個自我檢查testbench將會困難很多。下面給出一個自我檢查testbench的設計示例(來源于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]; // 實例化設計 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); //------------------------------------------------------------- // 預期結果 //------------------------------------------------------------- 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; // 等到全局復位結束 #100 GSR = 0; end //建立一個時鐘 initial begin tbclk = 0; //全局復位結束后開始產(chǎn)生時鐘信號 #100 forever #60 tbclk = ~tbclk; end //給出設計激勵 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 //------------------------------------------------------------- // 在每個時鐘的下降沿比較預期結果和實際結果 //------------------------------------------------------------- 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) ? ? ? ?// 每個下降沿檢查結果 ? ? ? ?$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

上述代碼中,將預期結果和實際結果的比較情況顯示在終端。該代碼模板可應用于任何設計的自我檢查testbench中,需要修改實例化接口和預期的輸出值。如果不需要在每個時鐘沿檢查一次數(shù)據(jù),則修改for循環(huán)的執(zhí)行條件。

責任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    179

    文章

    2947

    瀏覽量

    229540
  • 自動化
    +關注

    關注

    28

    文章

    5404

    瀏覽量

    78685
  • 數(shù)據(jù)庫

    關注

    7

    文章

    3716

    瀏覽量

    64052

原文標題:Testbench編寫指南(4)自動化驗證方法

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TI RF Transceiver EVM自動化環(huán)境搭建方法

    電子發(fā)燒友網(wǎng)站提供《TI RF Transceiver EVM自動化環(huán)境搭建方法.pdf》資料免費下載
    發(fā)表于 09-04 09:35 ?0次下載
    TI RF Transceiver EVM<b class='flag-5'>自動化</b>環(huán)境搭建<b class='flag-5'>方法</b>

    OTA自動化測試解決方案——實車級OTA測試系統(tǒng)PAVELINK.OTABOX

    ,并簡單介紹北匯信息的實車級OTA自動化測試解決方案——PAVELINK.OTABOX。實車級OTA自動化系統(tǒng)目前,OTA自動化測試系統(tǒng)的落地方式主要包含以下三種
    的頭像 發(fā)表于 07-11 08:26 ?461次閱讀
    OTA<b class='flag-5'>自動化</b>測試解決方案——實車級OTA測試系統(tǒng)PAVELINK.OTABOX

    機械自動化和電氣自動化區(qū)別是什么

    機械自動化和電氣自動化是現(xiàn)代工業(yè)生產(chǎn)中兩個重要的領域,它們在許多方面有著密切的聯(lián)系,但也存在一些明顯的區(qū)別。 一、基本概念 機械自動化 機械自動化是指利用機械設備、傳感器、控制系統(tǒng)等技
    的頭像 發(fā)表于 07-01 09:33 ?2793次閱讀

    機械自動化自動化的一

    引言 自動化技術是指利用控制裝置對生產(chǎn)過程進行控制,以實現(xiàn)生產(chǎn)過程的自動化。機械自動化自動化技術的一,它主要涉及到使用機械設備和控制系統(tǒng)
    的頭像 發(fā)表于 07-01 09:32 ?1173次閱讀

    機械制造與自動化自動化類嗎

    機械制造與自動化自動化領域的一個重要分支,它涉及到機械設計、制造、檢測、控制等多個方面,是現(xiàn)代制造業(yè)的核心組成部分。 機械制造與自動化是指利用計算機、機器人、傳感器等自動化設備和技術
    的頭像 發(fā)表于 06-11 11:18 ?1097次閱讀

    工業(yè)自動化自動化區(qū)別是什么

    工業(yè)自動化自動化是兩個密切相關但又有所區(qū)別的概念。在這篇文章中,我們將詳細探討它們之間的區(qū)別,以及它們在現(xiàn)代工業(yè)生產(chǎn)中的應用。 一、自動化的定義 自動化是指通過使用機器、計算機和其他
    的頭像 發(fā)表于 06-11 11:13 ?1185次閱讀

    菱M70 PLC增加注解的三種方法簡析

    菱M70 PLC增加注解的三種方法
    的頭像 發(fā)表于 02-26 09:59 ?905次閱讀
    <b class='flag-5'>三</b>菱M70 PLC增加注解的<b class='flag-5'>三種方法</b>簡析

    傳統(tǒng)激光功率衰減的三種方法

    傳統(tǒng)激光功率衰減通常使用以下三種方法,分別為中性密度衰減片衰減法、偏振衰減法、鍍膜光學鏡片衰減法。
    的頭像 發(fā)表于 01-20 10:42 ?1426次閱讀
    傳統(tǒng)激光功率衰減的<b class='flag-5'>三種方法</b>

    異步電機主要的三種調(diào)速方法解析

    異步電機主要的三種調(diào)速方法解析
    的頭像 發(fā)表于 01-07 17:50 ?1972次閱讀
    異步電機主要的<b class='flag-5'>三種</b>調(diào)速<b class='flag-5'>方法</b>解析

    LabVIEW與Tektronix示波器實現(xiàn)電源測試自動化

    LabVIEW與Tektronix示波器實現(xiàn)電源測試自動化 在現(xiàn)代電子測試與測量領域,自動化測試系統(tǒng)的構建是提高效率和精確度的關鍵。本案例介紹了如何利用LabVIEW軟件結合Tektronix
    發(fā)表于 12-09 20:37

    電源的三種常用冷卻方法

    在電源領域,散熱至關重要,它可直接影響電源性能、可靠性和壽命。隨著電子元件的尺寸不斷縮小,功率越來越大,有效的冷卻方法對于防止過熱和確保最佳功能至關重要。在本文中,我們將深入獨具吸引力的電源冷卻領域,并探討三種常用方法的優(yōu)缺點:
    的頭像 發(fā)表于 12-03 10:29 ?813次閱讀

    通過網(wǎng)絡方法提高制造自動化系統(tǒng)的能源效率

    電子發(fā)燒友網(wǎng)站提供《通過網(wǎng)絡方法提高制造自動化系統(tǒng)的能源效率.pdf》資料免費下載
    發(fā)表于 11-27 11:51 ?0次下載
    通過網(wǎng)絡<b class='flag-5'>化</b><b class='flag-5'>方法</b>提高制造<b class='flag-5'>自動化</b>系統(tǒng)的能源效率

    修復鋰電池的三種方法

    電子發(fā)燒友網(wǎng)站提供《修復鋰電池的三種方法.doc》資料免費下載
    發(fā)表于 11-15 10:40 ?5次下載
    修復鋰電池的<b class='flag-5'>三種方法</b>

    如何用三種不同的方法來用按鈕控制燈光

    在電子和自動化中,一個常見的任務是使用按鈕來控制燈的開/關狀態(tài)。這可以用不同的方式實現(xiàn),取決于設備的類型和涉及的邏輯。在本文中,我們將比較使用單片機、PLC和硬件連接來實現(xiàn)這個任務的三種方法。我們將討論每種方法的優(yōu)缺點,以及所需
    的頭像 發(fā)表于 11-10 11:47 ?2246次閱讀
    如何用<b class='flag-5'>三種</b>不同的<b class='flag-5'>方法</b>來用按鈕控制燈光

    基于CAN總線的自動化儀表的通訊模塊的設計方法

    電子發(fā)燒友網(wǎng)站提供《基于CAN總線的自動化儀表的通訊模塊的設計方法.pdf》資料免費下載
    發(fā)表于 10-18 09:26 ?0次下載
    基于CAN總線的<b class='flag-5'>自動化</b>儀表的通訊模塊的設計<b class='flag-5'>方法</b>