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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

Testbench自動(dòng)化驗(yàn)證方法介紹

FPGA之家 ? 來(lái)源:FPGA之家 ? 2023-09-04 09:15 ? 次閱讀

??自動(dòng)化驗(yàn)證testbench結(jié)果可以減少人工檢查的時(shí)間和可能犯的失誤,尤其對(duì)于比較大的設(shè)計(jì)。目前普遍使用三種自動(dòng)化testbench驗(yàn)證方法:

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

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

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

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

??比較時(shí)間可以選擇在每個(gè)時(shí)鐘邊沿,或者沒(méi)n個(gè)時(shí)鐘周期比較一次,總而言之要與設(shè)計(jì)相符合。比如內(nèi)存I/O的testbench應(yīng)該在讀出或?qū)懭胍粋€(gè)新數(shù)據(jù)后就進(jìn)行比較;如何設(shè)計(jì)使用了大量組合邏輯模塊,選取比較時(shí)間必須考慮組合邏輯延遲。

??對(duì)于中小型設(shè)計(jì)而言,自我檢查的testbench設(shè)計(jì)方法是一種不錯(cuò)的選擇,但是對(duì)于復(fù)雜的大型設(shè)計(jì),可能的輸出組合呈指數(shù)形式增加,編寫一個(gè)自我檢查testbench將會(huì)困難很多。下面給出一個(gè)自我檢查testbench的設(shè)計(jì)示例(來(lái)源于xapp199):

`timescale 1 ns / 1 ps
module test_sc;

// 信號(hào)申明
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í)例化設(shè)計(jì)
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

//建立一個(gè)時(shí)鐘
initial begin
  tbclk = 0;
  //全局復(fù)位結(jié)束后開始產(chǎn)生時(shí)鐘信號(hào)
  #100 forever #60 tbclk = ~tbclk; 
end

//給出設(shè)計(jì)激勵(lì)
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

//-------------------------------------------------------------
// 在每個(gè)時(shí)鐘的下降沿比較預(yù)期結(jié)果和實(shí)際結(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)
 ? ? ? ?// 每個(gè)下降沿檢查結(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é)果和實(shí)際結(jié)果的比較情況顯示在終端。該代碼模板可應(yīng)用于任何設(shè)計(jì)的自我檢查testbench中,需要修改實(shí)例化接口和預(yù)期的輸出值。如果不需要在每個(gè)時(shí)鐘沿檢查一次數(shù)據(jù),則修改for循環(huán)的執(zhí)行條件。






審核編輯:劉清

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

    關(guān)注

    14

    文章

    1651

    瀏覽量

    107220
  • MATLAB仿真
    +關(guān)注

    關(guān)注

    4

    文章

    176

    瀏覽量

    19928
  • HDL語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    8916

原文標(biāo)題:Testbench編寫指南(4)自動(dòng)化驗(yàn)證方法

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    是德科技的 Type-C 測(cè)試解決方案為高速接口提供最廣泛的物理層自動(dòng)化驗(yàn)證

    over Type-C 進(jìn)行無(wú)限制的自動(dòng)化驗(yàn)證,是是德科技高速驗(yàn)證系統(tǒng)的重要組成部分。N7018A 能夠?qū)⒆畲蠊β试O(shè)置為高達(dá) 100 W,并將設(shè)備設(shè)置為交替模式(DisplayPort 和 Thunderbolt)。
    發(fā)表于 09-22 20:01 ?2294次閱讀

    EDA形式化驗(yàn)證漫談:仿真之外,驗(yàn)證之內(nèi)

    “在未來(lái)五年內(nèi)仿真將逐漸被淘汰,僅用于子系統(tǒng)和系統(tǒng)級(jí)驗(yàn)證。與此同時(shí),形式化驗(yàn)證方法已經(jīng)開始處理一些系統(tǒng)級(jí)任務(wù)。隨著技術(shù)發(fā)展,更多Formal相關(guān)的商業(yè)標(biāo)準(zhǔn)化會(huì)推出?!?Intel?fellow
    的頭像 發(fā)表于 09-01 09:10 ?1423次閱讀

    自動(dòng)煤炭氟氯離子化驗(yàn)儀器DT-5A型

    `全自動(dòng)煤炭氟氯離子化驗(yàn)儀器DT-5A型 全自動(dòng)煤炭氟氯離子化驗(yàn)儀器DT-5A型 英特儀器煤炭氟氯分析儀,電腦氟氯化驗(yàn)設(shè)備,測(cè)試氟氯離子的設(shè)
    發(fā)表于 07-01 08:44

    驗(yàn)證方法簡(jiǎn)介

    上是基于 Verisity Design 在 2001 年開發(fā)的用于 e 驗(yàn)證語(yǔ)言的eRM(e Reuse Methodology)。UVM 類庫(kù)為SystemVerilog 語(yǔ)言,如序列和數(shù)據(jù)自動(dòng)化功能(打包、復(fù)制、比較
    發(fā)表于 02-13 17:03

    化驗(yàn)證和封裝形式有關(guān)系嗎?

    無(wú)關(guān),任何形式的封裝,皆需要做老化實(shí)驗(yàn)。蘇試宜特提供客戶量身訂制全方位的一站式服務(wù), 從老化驗(yàn)證的硬件設(shè)計(jì)/制造到樣品調(diào)試/實(shí)驗(yàn)/報(bào)告, 蘇試宜特都可以協(xié)助客戶完成。
    發(fā)表于 09-13 09:46

    硬件驗(yàn)證方法簡(jiǎn)明介紹

    硬件驗(yàn)證方法簡(jiǎn)明介紹本書“硬件驗(yàn)證方法簡(jiǎn)明介紹”是“半導(dǎo)體 IP 核——不僅僅是設(shè)計(jì)”系列叢書中
    發(fā)表于 11-26 20:43

    超大規(guī)模集成電路的自動(dòng)化驗(yàn)證方法

    超大規(guī)模集成電路的自動(dòng)化驗(yàn)證方法 隨著數(shù)字邏輯的設(shè)計(jì)復(fù)雜度的提高,驗(yàn)證的困難度也逐級(jí)上升。本文結(jié)合作者在一款以太網(wǎng)交換芯片項(xiàng)目中的實(shí)踐經(jīng)驗(yàn),提
    發(fā)表于 03-17 18:24 ?23次下載

    基于串空間的協(xié)議認(rèn)證屬性標(biāo)準(zhǔn)化驗(yàn)證過(guò)程

    針對(duì)目前串空間理論依賴分析人員主觀判斷、無(wú)法使用自動(dòng)化工具進(jìn)行驗(yàn)證的問(wèn)題,提出了基于串空間理論的協(xié)議認(rèn)證屬性標(biāo)準(zhǔn)化驗(yàn)證過(guò)程。首先為協(xié)議消息項(xiàng)定義類型標(biāo)簽,對(duì)串空間及認(rèn)證測(cè)試?yán)碚撨M(jìn)行擴(kuò)展;然后通過(guò)判斷
    發(fā)表于 01-07 12:13 ?0次下載

    VaaS平臺(tái)已支持區(qū)塊鏈平臺(tái)智能合約的形式化驗(yàn)證

    VaaS形式化驗(yàn)證平臺(tái),采用了多種形式化驗(yàn)證方法,具有驗(yàn)證效率高、自動(dòng)化程度高、人工參與度低、易于使用、支持多個(gè)合約開發(fā)語(yǔ)言、可支持大容量區(qū)
    發(fā)表于 12-14 10:18 ?1102次閱讀

    使用三種自動(dòng)化testbench驗(yàn)證方法

    自我檢查testbench設(shè)計(jì):與前兩種方法不同,該方法實(shí)時(shí)檢查預(yù)期結(jié)果和實(shí)際結(jié)果,而不是仿真結(jié)束后才檢查。在testbench中插入錯(cuò)誤追蹤信息可以顯示設(shè)計(jì)在哪里失敗,從而縮短調(diào)試時(shí)
    的頭像 發(fā)表于 11-20 11:26 ?3750次閱讀

    軟件的順序語(yǔ)句塊自動(dòng)化規(guī)約與驗(yàn)證研究

    軟件的形式化驗(yàn)證是保障軟件可證明性、可靠性和安全性的重要手段,但傳統(tǒng)形式化驗(yàn)證腳本的生成過(guò)程復(fù)雜且需要形式化驗(yàn)證專家的大量手工驗(yàn)證。為提高證明效率,構(gòu)建一種
    發(fā)表于 06-03 14:31 ?5次下載

    安世亞太:中國(guó)仿真如何進(jìn)行切實(shí)可行的工程化驗(yàn)證

    的工程化驗(yàn)證更尤為關(guān)鍵。 中國(guó)仿真工程化驗(yàn)證的無(wú)效路徑 過(guò)去企業(yè)一般有兩種方法進(jìn)行工程化驗(yàn)證,一是用實(shí)驗(yàn)的方法,二是通過(guò)多年用戶現(xiàn)場(chǎng)觀察工程
    的頭像 發(fā)表于 01-24 11:06 ?1366次閱讀

    從小眾走向普及,形式化驗(yàn)證對(duì)系統(tǒng)級(jí)芯片開發(fā)有多重要?

    形式化驗(yàn)證作為一種全新的驗(yàn)證方法,近年來(lái)在芯片開發(fā)中快速發(fā)展,正逐漸取代傳統(tǒng)的仿真方法。 雖然仿真在系統(tǒng)級(jí)驗(yàn)證方面仍然發(fā)揮著重要的作用,但對(duì)
    的頭像 發(fā)表于 04-21 19:35 ?668次閱讀
    從小眾走向普及,形式<b class='flag-5'>化驗(yàn)證</b>對(duì)系統(tǒng)級(jí)芯片開發(fā)有多重要?

    如何可靠、快速、自動(dòng)驗(yàn)證處理器硬件

    你是否會(huì)遇到以下問(wèn)題:bug可能比較微妙,不直觀,無(wú)法手動(dòng)推斷;或者在被觀察到之前就被激活很久了,傳統(tǒng)的模擬設(shè)計(jì)需要花很長(zhǎng)時(shí)間自動(dòng);驗(yàn)證工作量隨著設(shè)計(jì)復(fù)雜性的增加而增加,人工推理和手動(dòng)編寫屬性不再可行,等等。目前驗(yàn)證CPU的主流
    的頭像 發(fā)表于 11-16 12:29 ?613次閱讀
    如何可靠、快速、<b class='flag-5'>自動(dòng)</b>地<b class='flag-5'>驗(yàn)證</b>處理器硬件

    編寫高效Testbench的指南和示例

    Testbench驗(yàn)證HDL設(shè)計(jì)的主要手段,本文提供了布局和構(gòu)建高效Testbench的指南以及示例。另外,本文還提供了一種示例,可以為任何設(shè)計(jì)開發(fā)自檢Testbench
    的頭像 發(fā)表于 10-29 16:14 ?267次閱讀
    編寫高效<b class='flag-5'>Testbench</b>的指南和示例