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

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

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

DUT 和 testbench 連接教程

jf_78858299 ? 來(lái)源:芯片驗(yàn)證工程師 ? 作者:驗(yàn)證哥布林 ? 2023-03-21 11:20 ? 次閱讀

我們知道,不論是哪一級(jí)的驗(yàn)證,最終都是通過 pin 連接到 DUT 上向其施加激勵(lì),對(duì)于 UVM 驗(yàn)證平臺(tái)中,使用虛接口來(lái)實(shí)現(xiàn) DUT 和驗(yàn)證平臺(tái)的通信。

為了簡(jiǎn)化模塊之間的連接和實(shí)現(xiàn)類和模塊之間的通信,以實(shí)現(xiàn)測(cè)試平臺(tái)的可重用性, SV 定義了接口的語(yǔ)法結(jié)構(gòu)??傮w來(lái)說(shuō),接口就是在 testbench 這邊定義了訪問的 DUT 的管腳的集合,通過對(duì)接口中管腳信號(hào)的操作,來(lái)實(shí)現(xiàn)對(duì) DUT 的管腳的操作, 這樣能夠?qū)崿F(xiàn)驗(yàn)證平臺(tái)和待測(cè)模塊的分離。

驗(yàn)證工程師和設(shè)計(jì)工程師只要定義好接口關(guān)系,就可以分別開展工作。 同時(shí)如果設(shè)計(jì)管腳發(fā)生變化,無(wú)需改變 testbench 這邊的虛接口,只需要在例化待測(cè)模塊時(shí),給接口綁定對(duì)應(yīng)的待測(cè)接口即可。

Testbench 和 DUT 是通過接口進(jìn)行數(shù)據(jù)交互的。接口僅僅是信號(hào)的一個(gè)集合,因此我們可以將 X_MAC 的所有信號(hào)定義為一個(gè)統(tǒng)一的接口,也可以將一個(gè)信號(hào)定義一個(gè)接口,這樣對(duì)于 X_MAC 模塊,就會(huì)有許許多多的接口。另外要注意的是,一個(gè)接口要對(duì)應(yīng)一個(gè) driver,因此,接口過多的話,就需要定義很多個(gè) driver。

同樣的,如果接口數(shù)量過少的話,就只需要定義較少的 driver。接口數(shù)量過多或過少,都不利于后期驗(yàn)證工作的開展。為了方面后續(xù)的工作,接口的個(gè)數(shù)合適為宜,總的原則是:

**1. 將相互關(guān)系緊密的信號(hào)放到同一個(gè)接口中。

****2. 要將同一個(gè)時(shí)鐘周期的信號(hào)放到同一個(gè)接口中。

****3. 將和同一個(gè)模塊連接的信號(hào)要放到同一個(gè)接口中。

**上面的三點(diǎn)基本上表達(dá)的是同一個(gè)意思, 這樣有利于后期方便激勵(lì)。

在接口的定義中需要注意的一個(gè)問題是:對(duì)于同一個(gè)信號(hào),其方向(input/output)對(duì)于 DUT 和對(duì)于 testbench 來(lái)說(shuō)是相反的, 在接口中需要定義信號(hào)的方向是針對(duì) testbench 的方向, 這一點(diǎn)需要注意。

下面是一個(gè)接口示例。

interface hello_if(input logic rxc,input logic txc);
logic [7:0] rxd_1;
logic [7:0] rxd_2;
logic rx_dv;
logic [7:0] txd;
logic tx_en;
//from model to DUT
clocking drv_cb @(posedge rxc);
output #1 rxd_1,rxd_2,rx_dv;
endclocking
clocking mon_cb @(posedge txc);
input #1 txd,tx_en;
endclocking
endinterface

首先,我們需要在 tb_top 模塊中例化接口和待測(cè) DUT,在例化 DUT 的時(shí)候,將 DUT 的接口和接口中定義的管腳綁定即可。如下圖所示:

module hello_tb_top;
import uvm_pkg::*;
import hello_pkg::*;
reg clk;
hello_if my_hello_if(clk,clk);//實(shí)例化接口
dut my_dut(.clk(clk),
.rxd_1(my_hello_if.rxd_1),
.rxd_2(my_hello_if.rxd_2),
.rx_dv(my_hello_if.rx_dv),
.txd(my_hello_if.txd),
.tx_en(my_hello_if.tx_en)
);//實(shí)例化 DUT,并將 DUT 的輸入輸出端口和 my_hello_if 連接在一起


initial begin//產(chǎn)生 DUT 需要的時(shí)鐘
  clk = 0;
  forever begin
    #10;clk = ~clk;
  end
end
//assign physical interface to virtual interface
initial begin//通過 config_db 的 set 方式將 my_if 通知 driver 和 monitor
//從而 Driver 和 monitor 可以直接和 DUT 通信。
uvm_config_db#(virtual hello_if)::set(null,"uvm_test_top.env.input_agt.drv","hello_if",my_hello_if);
uvm_config_db#(virtual hello_if)::set(null,"uvm_test_top.env.output_agt.mon","hello_if",my_hello_if);
run_test();//啟動(dòng) UVM
end
endmodule

在例化 dut 時(shí),我們將 dut 的管腳和虛接口的管腳綁定在一起。這樣,我們?cè)?testbench 中對(duì)虛接口進(jìn)行操作,也就對(duì) DUT 的管腳進(jìn)行了操作。在 testbench 中只有 driver 和 monitor 會(huì)對(duì) DUT 進(jìn)行激勵(lì)的加載和監(jiān)聽,那么在 driver 和 monitor 那里如何訪問到這里的接口?

首先我們看到上面的代碼中有如下的語(yǔ)句

uvm_config_db#(virtual hello_if)::set(null,"uvm_test_top.env.input_agt.drv","hello_if",my_hello_if);
uvm_config_db#(virtual hello_if)::set(null,"uvm_test_top.env.output_agt.mon","hello_if",my_hello_if);

我們?cè)?uvm_top 模塊中,通過 uvm_config_db 的 set 語(yǔ)句將定義在 driver 中的虛接口和 uvm_top 模塊中的接口連接起來(lái)。在 driver 中首先需要定義一個(gè)虛接口:

virtual hello_if vif;

這里的虛接口的意思是,這個(gè)接口在 driver 這里是不存在的,這里只是一個(gè)句柄,通過虛接口, testbench 能訪問到 uvm_top 中定義的實(shí)體接口,從而訪問到DUT。隨后在 driver 中通過 uvm_config_db 的 get 操作將 driver 中的虛接口和uvm_top 中的實(shí)體接口連接起來(lái)。

if(!uvm_config_db#(virtual hello_if)::get(this,"","hello_if", vif))
`uvm_fatal("hello_driver","Error in Geting interface");

這樣, driver 通過虛接口實(shí)現(xiàn)了對(duì) DUT 的操作。

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

    關(guān)注

    0

    文章

    181

    瀏覽量

    19092
  • PIN
    PIN
    +關(guān)注

    關(guān)注

    1

    文章

    302

    瀏覽量

    23990
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    12208
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    第一次寫Testbench文件,不知道哪里錯(cuò)了,請(qǐng)大俠指點(diǎn)。

    Testbench代碼:module fulladd4_tb;reg [3:0] a,b;reg cin;wire [3:0] sum;wire cout;fulladd4_dut (.sum(sum
    發(fā)表于 04-04 19:00

    testbench 設(shè)計(jì)教程

    testbench 設(shè)計(jì)教程
    發(fā)表于 09-12 12:06

    testbench設(shè)置的問題

    本帖最后由 平漂流 于 2017-5-21 11:09 編輯 如圖,看Verilog仿真視頻教程里面,在testbench設(shè)置時(shí)候,直接復(fù)制“blocking_vlg_tst”到top
    發(fā)表于 05-21 11:04

    請(qǐng)問怎么測(cè)量DUT的S參數(shù)?

    論文和應(yīng)用筆記。但是沒有詳細(xì)描述如何進(jìn)行后校準(zhǔn)計(jì)算。他們只提到了所需的標(biāo)準(zhǔn)。 TRL =通過反射線。直通:我已經(jīng)連接了沒有DUT的波導(dǎo)并測(cè)量了S參數(shù)(S11,S12,S21,S22)反射:將一個(gè)短路板
    發(fā)表于 08-19 13:24

    LFSR testbench V1.2

    LFSR testbench The LFSR testbench can help you understand the LFSR basics: 1. Change
    發(fā)表于 05-14 11:18 ?50次下載

    Writing Testbench

    Writing Testbench:The Quebec Bridge Company was formed in 1887 and for the nextthirteen years, very
    發(fā)表于 07-10 17:30 ?0次下載
    Writing <b class='flag-5'>Testbench</b>

    編寫高效率的testbench

    編寫高效率的testbench,學(xué)習(xí)編寫測(cè)試文件的小伙伴們。
    發(fā)表于 05-11 16:40 ?16次下載

    testbench_book

    verilog Testbench
    發(fā)表于 12-13 22:20 ?3次下載

    testbench怎么寫_testbench經(jīng)典教程VHDL

     testbench是一種驗(yàn)證的手段。首先,任何設(shè)計(jì)都是會(huì)有輸入輸出的。但是在軟環(huán)境中沒有激勵(lì)輸入,也不會(huì)對(duì)你設(shè)計(jì)的輸出正確性進(jìn)行評(píng)估。那么此時(shí)便有一種,模擬實(shí)際環(huán)境的輸入激勵(lì)和輸出校驗(yàn)的一種“虛擬
    發(fā)表于 12-01 17:22 ?5.5w次閱讀
    <b class='flag-5'>testbench</b>怎么寫_<b class='flag-5'>testbench</b>經(jīng)典教程VHDL

    簡(jiǎn)單的Testbench設(shè)計(jì)

    testbench是一種驗(yàn)證的手段。首先,任何設(shè)計(jì)都是會(huì)有輸入輸出的。但是在軟環(huán)境中沒有激勵(lì)輸入,也不會(huì)對(duì)你設(shè)計(jì)的輸出正確性進(jìn)行評(píng)估。那么此時(shí)便有一種,模擬實(shí)際環(huán)境的輸入激勵(lì)和輸出校驗(yàn)的一種“虛擬
    的頭像 發(fā)表于 03-08 14:35 ?2338次閱讀

    對(duì)DUT輸入定向或隨機(jī)的激勵(lì)

    TestBench即測(cè)試平臺(tái),是為了檢驗(yàn)待測(cè)設(shè)計(jì)(design under test,DUT)而搭建的驗(yàn)證環(huán)境。
    的頭像 發(fā)表于 02-24 17:19 ?881次閱讀
    對(duì)<b class='flag-5'>DUT</b>輸入定向或隨機(jī)的激勵(lì)

    UVM驗(yàn)證平臺(tái)頂層有什么作用

    因?yàn)?b class='flag-5'>DUT是一個(gè)靜態(tài)的內(nèi)容,所以testbench理應(yīng)也是靜態(tài)的,其作為uvm驗(yàn)證環(huán)境和DUT的全局根結(jié)點(diǎn)。
    的頭像 發(fā)表于 03-21 11:33 ?1207次閱讀

    典型的UVM Testbench架構(gòu)

    UVM類庫(kù)提供了通用的代碼功能,如component hierarchy、transaction level model(TLM),configuration database等等,使用戶能夠創(chuàng)建任何類型的Testbench架構(gòu)。
    的頭像 發(fā)表于 05-22 10:14 ?1894次閱讀
    典型的UVM <b class='flag-5'>Testbench</b>架構(gòu)

    芯片驗(yàn)證需要圍繞DUT做什么?

    TestBench即測(cè)試平臺(tái),是為了檢驗(yàn)待測(cè)設(shè)計(jì)(design under test,DUT)而搭建的驗(yàn)證環(huán)境。
    的頭像 發(fā)表于 06-12 17:38 ?1892次閱讀
    芯片驗(yàn)證需要圍繞<b class='flag-5'>DUT</b>做什么?

    testbench是什么? testbench測(cè)試的機(jī)制是什么?

    廢話不多說(shuō)直接上干貨,testbench就是對(duì)寫的FPGA文件進(jìn)行測(cè)試的文件,可以是verilog也可以是VHDL。
    的頭像 發(fā)表于 06-28 16:44 ?4106次閱讀
    <b class='flag-5'>testbench</b>是什么? <b class='flag-5'>testbench</b>測(cè)試的機(jī)制是什么?