精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

DUT 和 testbench 連接教程

jf_78858299 ? 來源:芯片驗證工程師 ? 作者:驗證哥布林 ? 2023-03-21 11:20 ? 次閱讀

我們知道,不論是哪一級的驗證,最終都是通過 pin 連接到 DUT 上向其施加激勵,對于 UVM 驗證平臺中,使用虛接口來實現 DUT 和驗證平臺的通信

為了簡化模塊之間的連接和實現類和模塊之間的通信,以實現測試平臺的可重用性, SV 定義了接口的語法結構。總體來說,接口就是在 testbench 這邊定義了訪問的 DUT 的管腳的集合,通過對接口中管腳信號的操作,來實現對 DUT 的管腳的操作, 這樣能夠實現驗證平臺和待測模塊的分離。

驗證工程師和設計工程師只要定義好接口關系,就可以分別開展工作。 同時如果設計管腳發生變化,無需改變 testbench 這邊的虛接口,只需要在例化待測模塊時,給接口綁定對應的待測接口即可。

Testbench 和 DUT 是通過接口進行數據交互的。接口僅僅是信號的一個集合,因此我們可以將 X_MAC 的所有信號定義為一個統一的接口,也可以將一個信號定義一個接口,這樣對于 X_MAC 模塊,就會有許許多多的接口。另外要注意的是,一個接口要對應一個 driver,因此,接口過多的話,就需要定義很多個 driver。

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

**1. 將相互關系緊密的信號放到同一個接口中。

****2. 要將同一個時鐘周期的信號放到同一個接口中。

****3. 將和同一個模塊連接的信號要放到同一個接口中。

**上面的三點基本上表達的是同一個意思, 這樣有利于后期方便激勵。

在接口的定義中需要注意的一個問題是:對于同一個信號,其方向(input/output)對于 DUT 和對于 testbench 來說是相反的, 在接口中需要定義信號的方向是針對 testbench 的方向, 這一點需要注意。

下面是一個接口示例。

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 模塊中例化接口和待測 DUT,在例化 DUT 的時候,將 DUT 的接口和接口中定義的管腳綁定即可。如下圖所示:

module hello_tb_top;
import uvm_pkg::*;
import hello_pkg::*;
reg clk;
hello_if my_hello_if(clk,clk);//實例化接口
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)
);//實例化 DUT,并將 DUT 的輸入輸出端口和 my_hello_if 連接在一起


initial begin//產生 DUT 需要的時鐘
  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();//啟動 UVM
end
endmodule

在例化 dut 時,我們將 dut 的管腳和虛接口的管腳綁定在一起。這樣,我們在 testbench 中對虛接口進行操作,也就對 DUT 的管腳進行了操作。在 testbench 中只有 driver 和 monitor 會對 DUT 進行激勵的加載和監聽,那么在 driver 和 monitor 那里如何訪問到這里的接口?

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

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);

我們在 uvm_top 模塊中,通過 uvm_config_db 的 set 語句將定義在 driver 中的虛接口和 uvm_top 模塊中的接口連接起來。在 driver 中首先需要定義一個虛接口:

virtual hello_if vif;

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

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

這樣, driver 通過虛接口實現了對 DUT 的操作。

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

    關注

    0

    文章

    181

    瀏覽量

    19144
  • PIN
    PIN
    +關注

    關注

    1

    文章

    303

    瀏覽量

    24239
  • DUT
    DUT
    +關注

    關注

    0

    文章

    189

    瀏覽量

    12348
收藏 人收藏

    評論

    相關推薦

    第一次寫Testbench文件,不知道哪里錯了,請大俠指點。

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

    testbench設置的問題

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

    請問怎么測量DUT的S參數?

    論文和應用筆記。但是沒有詳細描述如何進行后校準計算。他們只提到了所需的標準。 TRL =通過反射線。直通:我已經連接了沒有DUT的波導并測量了S參數(S11,S12,S21,S22)反射:將一個短路板
    發表于 08-19 13:24

    LFSR testbench V1.2

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

    Writing Testbench

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

    編寫高效率的testbench

    編寫高效率的testbench,學習編寫測試文件的小伙伴們。
    發表于 05-11 16:40 ?16次下載

    testbench_book

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

    testbench怎么寫_testbench經典教程VHDL

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

    簡單的Testbench設計

    testbench是一種驗證的手段。首先,任何設計都是會有輸入輸出的。但是在軟環境中沒有激勵輸入,也不會對你設計的輸出正確性進行評估。那么此時便有一種,模擬實際環境的輸入激勵和輸出校驗的一種“虛擬
    的頭像 發表于 03-08 14:35 ?2452次閱讀

    DUT輸入定向或隨機的激勵

    TestBench即測試平臺,是為了檢驗待測設計(design under test,DUT)而搭建的驗證環境。
    的頭像 發表于 02-24 17:19 ?962次閱讀
    對<b class='flag-5'>DUT</b>輸入定向或隨機的激勵

    UVM驗證平臺頂層有什么作用

    因為DUT是一個靜態的內容,所以testbench理應也是靜態的,其作為uvm驗證環境和DUT的全局根結點。
    的頭像 發表于 03-21 11:33 ?1269次閱讀

    典型的UVM Testbench架構

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

    芯片驗證需要圍繞DUT做什么?

    TestBench即測試平臺,是為了檢驗待測設計(design under test,DUT)而搭建的驗證環境。
    的頭像 發表于 06-12 17:38 ?2137次閱讀
    芯片驗證需要圍繞<b class='flag-5'>DUT</b>做什么?

    testbench是什么? testbench測試的機制是什么?

    廢話不多說直接上干貨,testbench就是對寫的FPGA文件進行測試的文件,可以是verilog也可以是VHDL。
    的頭像 發表于 06-28 16:44 ?4679次閱讀
    <b class='flag-5'>testbench</b>是什么? <b class='flag-5'>testbench</b>測試的機制是什么?

    編寫高效Testbench的指南和示例

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