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

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

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

什么是UVM environment?

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

什么是UVM environment?

UVM environment包含多個可重用的驗證組件,并根據(jù)test case的需求進行相應的配置。例如,UVM environment可能具有多個agent(對應不同的interface)、scoreboard、functional coverage collector和一些checker。

對于一個復雜的數(shù)字系統(tǒng),UVM environment可能還集成其他一些較小的UVM environment,這些相對較小的驗證環(huán)境用于對各個子系統(tǒng)/模塊進行驗證。所以,被集成的子模塊/系統(tǒng)驗證環(huán)境中的很多組件和sequence都是可以復用的。

為什么驗證組件不直接放在test case中?

從技術上講,一些驗證組件可以直接在用戶定義的testcase(uvm_test類)中實例化。

class base_test extends uvm_test;  `uvm_component_utils(base_test)
apb_agent m_apb_agent; spi_agent m_spi_agent;
base_scoreboard m_base_scbd;
virtual function void build_phase(uvm_phase phase);// Instantiate agents and scoreboard endfunctionendclass

但是,不建議這樣做:test case不能夠復用,因為它們依賴于特定的驗證環(huán)境,針對每個testcase都開發(fā)一個uvm environment比較低效。 簡單來說,uvm environment存在的意義就是不同的testcase都使用同一套驗證環(huán)境代碼 ,是為了驗證環(huán)境的復用性考慮的。

因此,始終建議開發(fā)一個比較通用的,適用所有test case的驗證環(huán)境, 然后在多個test case中實例化該驗證環(huán)境類uvm environment。此外,不同的testcase可以配置、啟動、禁用驗證環(huán)境中的各種配置,可能是激勵的隨機機制、agent的active/passive模式,也可能是scoreboard的開關。

圖片

創(chuàng)建 UVM environment的步驟

  • 創(chuàng)建一個繼承自uvm_env的自定義類,注冊到工廠,并調(diào)用 new函數(shù)
// my_env is user-given name for this class that has been derived from "uvm_env"class my_env extends uvm_env;
// [Recommended] Makes this driver more re-usable `uvm_component_utils (my_env)
// This is standard code for all componentsfunction new (string name = "my_env", uvm_component parent = null);super.new (name, parent); endfunction
// Code for rest of the steps come hereendclass
  • 聲明和構建驗證環(huán)境中各個驗證組件


// apb_agnt and other components are assumed to be user-defined classes that already exist in TBapb_agnt  m_apb_agnt;func_cov   m_func_cov;scbd     m_scbd;env_cfg   m_env_cfg;
// Build components within the "build_phase"virtual function void build_phase (uvm_phase phase);super.build_phase (phase); m_apb_agnt = apb_agnt::type_id::create ("m_apb_agnt", this); m_func_cov = func_cov::type_id::create ("m_func_cov", this); m_scbd = scbd::type_id::create ("m_scbd", this);
// [Optional] Collect configuration objects from the test class if applicableif (uvm_config_db #(env_cfg)::get(this, "", "env_cfg", m_env_cfg)) `uvm_fatal ("build_phase", "Did not get a configuration object for env")
// [Optional] Pass other configuration objects to sub-components via uvm_config_dbendfunction

  • 在自定義uvm_env類的connect_phase中根據(jù)需要連接各個驗證組件


virtual function void connect_phase (uvm_phase phase);  // A few examples:// Connect analysis ports from agent to the scoreboard// Connect functional coverage component analysis ports// ...endfunction

UVM Environment 示例(對應上面提到的的驗證環(huán)境圖)

class my_top_env extends uvm_env;   `uvm_component_utils (my_env)
agent_apb m_apb_agt; agent_wishbone m_wb_agt;
env_register m_reg_env; env_analog m_analog_env [2];
scoreboard m_scbd;
function new (string name = "my_env", uvm_component parent); super.new (name, parent);endfunction
virtual function void build_phase (uvm_phase phase); super.build_phase (phase);// Instantiate different agents and environments here m_apb_agt = agent_apb::type_id::create ("m_apb_agt", this); m_wb_agt = agent_wishbone::type_id::create ("m_wb_agt", this);
m_reg_env = env_register::type_id::create ("m_reg_env", this); foreach (m_analog_env[i]) m_analog_env[i] = env_analog::type_id::create ($sformatf("m_analog_env%0d",m_analog_env[i]), this);
m_scbd = scoreboard::type_id::create ("m_scbd", this);endfunction
virtual function void connect_phase (uvm_phase phase);// Connect between different environments, agents, analysis ports, and scoreboard here endfunctionendclass

其中env_analog或env_register中也可以有一些agent和scoreboard。 可以看到UVM在可重用性方面很強大,主要取決于這種分層結構和TLM連接。 也正是因為這種復用,可以分別獨立驗證env_analog和env_register,而在更加上層的驗證環(huán)境my_top_env中,可能只需要關注子系統(tǒng)之間的交互。

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

    關注

    0

    文章

    181

    瀏覽量

    19121
  • 代碼
    +關注

    關注

    30

    文章

    4723

    瀏覽量

    68236
  • 數(shù)字系統(tǒng)

    關注

    0

    文章

    140

    瀏覽量

    20815
收藏 人收藏

    評論

    相關推薦

    數(shù)字IC驗證之“什么是UVM”“UVM的特點”“UVM提供哪些資源”(2)連載中...

    原文鏈接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章內(nèi)容主要講述兩個內(nèi)容,芯片驗證以及驗證計劃。那本章我們主要講述的內(nèi)容有介紹什么是uvm
    發(fā)表于 01-21 16:00

    什么是uvmuvm的特點有哪些呢

    大家好,我是一哥,上章內(nèi)容我們介紹什么是uvm?uvm的特點以及uvm為用戶提供了哪些資源?本章內(nèi)容我們來看一看一個典型的uvm驗證平臺應該是什么樣子的,來看一個典型的
    發(fā)表于 02-14 06:46

    談談UVM中的uvm_info打印

      uvm_info宏的定義如下:  `define uvm_info(ID,MSG,VERBOSITY) \  begin \  if (uvm_report_enabled(VERBOSITY
    發(fā)表于 03-17 16:41

    UVM中seq.start()和default_sequence執(zhí)行順序

      1. 問題  假如用以下兩種方式啟動sequence,方法1用sequence的start()方法啟動seq1,方法2用UVM的default_sequence機制啟動seq2。那么seq1
    發(fā)表于 04-04 17:15

    Creating An Efficient Verification Environment using Synopsy

    Verification environment is for no doubt most complex environment in ASIC Frontend Design
    發(fā)表于 07-25 14:41 ?0次下載

    Agilent Environment and Social

    Agilent Environment and Social Responsibility Report
    發(fā)表于 08-12 10:47 ?15次下載

    基于UVM的驗證平臺設計研究

    基于UVM的驗證平臺設計研究_王國軍
    發(fā)表于 01-07 19:00 ?4次下載

    Modelsim uvm庫編譯及執(zhí)行

    第一句話是設置uvm環(huán)境變量,指定uvm的dpi位置。 第二句話是創(chuàng)建work工作目錄。 第三句話是編譯源文件,并且通過-L指定幾個編譯庫。 第三句是執(zhí)行仿真,調(diào)用uvmuvm
    的頭像 發(fā)表于 12-01 11:25 ?3806次閱讀
    Modelsim <b class='flag-5'>uvm</b>庫編譯及執(zhí)行

    UVM實戰(zhàn)教材資料分享

    UVM實戰(zhàn)教材資料分享。
    發(fā)表于 05-05 15:51 ?17次下載

    UVM學習筆記(一)

    driver應該派生自uvm_driver,而uvm_driver派生自uvm_component。
    的頭像 發(fā)表于 05-26 14:38 ?1317次閱讀
    <b class='flag-5'>UVM</b>學習筆記(一)

    創(chuàng)建Environment

    uvm environment 類是一個包含多個可重用的驗證組件的類,它定義了測試用例所需的驗證組件的配置。
    的頭像 發(fā)表于 06-04 16:28 ?457次閱讀
    創(chuàng)建<b class='flag-5'>Environment</b>類

    UVM driver和sequencer的通信

    sequencer生成激勵數(shù)據(jù),并將其傳遞給driver執(zhí)行。UVM類庫提供了uvm_sequencer基類,其參數(shù)為request和response數(shù)據(jù)類型。
    的頭像 發(fā)表于 06-07 11:58 ?1581次閱讀
    <b class='flag-5'>UVM</b> driver和sequencer的通信

    UVMuvm_config_db機制背后的大功臣

    本次講一下UVM中的uvm_config_db,在UVM中提供了一個內(nèi)部數(shù)據(jù)庫,可以在其中存儲給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-20 17:28 ?1316次閱讀

    UVMuvm_config_db機制背后的大功臣

    本次講一下UVM中的uvm_config_db,在UVM中提供了一個內(nèi)部數(shù)據(jù)庫,可以在其中存儲給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-29 16:57 ?1197次閱讀

    一文詳解UVM設計模式

    本篇是對UVM設計模式 ( 二 ) 參數(shù)化類、靜態(tài)變量/方法/類、單例模式、UVM_ROOT、工廠模式、UVM_FACTORY[1]中單例模式的補充,分析靜態(tài)類的使用,UVM中資源池的
    的頭像 發(fā)表于 08-06 10:38 ?1567次閱讀
    一文詳解<b class='flag-5'>UVM</b>設計模式