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

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

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

什么是UVM environment?

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

什么是UVM environment?

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

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

為什么驗(yàn)證組件不直接放在test case中?

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

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不能夠復(fù)用,因?yàn)樗鼈円蕾囉谔囟ǖ尿?yàn)證環(huán)境,針對(duì)每個(gè)testcase都開發(fā)一個(gè)uvm environment比較低效。 簡(jiǎn)單來說,uvm environment存在的意義就是不同的testcase都使用同一套驗(yàn)證環(huán)境代碼 ,是為了驗(yàn)證環(huán)境的復(fù)用性考慮的。

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

圖片

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

  • 創(chuàng)建一個(gè)繼承自u(píng)vm_env的自定義類,注冊(cè)到工廠,并調(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
  • 聲明和構(gòu)建驗(yàn)證環(huán)境中各個(gè)驗(yà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ù)需要連接各個(gè)驗(yàn)證組件


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 示例(對(duì)應(yīng)上面提到的的驗(yàn)證環(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在可重用性方面很強(qiáng)大,主要取決于這種分層結(jié)構(gòu)和TLM連接。 也正是因?yàn)檫@種復(fù)用,可以分別獨(dú)立驗(yàn)證env_analog和env_register,而在更加上層的驗(yàn)證環(huán)境my_top_env中,可能只需要關(guān)注子系統(tǒng)之間的交互。

聲明:本文內(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

    文章

    182

    瀏覽量

    19171
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68616
  • 數(shù)字系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    20851
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是uvm_reg_field?

    uvm_reg_field是什么
    發(fā)表于 12-17 06:10

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

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

    什么是uvm?uvm的特點(diǎn)有哪些呢

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

    談?wù)?b class='flag-5'>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. 問題  假如用以下兩種方式啟動(dòng)sequence,方法1用sequence的start()方法啟動(dòng)seq1,方法2用UVM的default_sequence機(jī)制啟動(dòng)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的驗(yàn)證平臺(tái)設(shè)計(jì)研究

    基于UVM的驗(yàn)證平臺(tái)設(shè)計(jì)研究_王國(guó)軍
    發(fā)表于 01-07 19:00 ?4次下載

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

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

    UVM學(xué)習(xí)筆記(一)

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

    創(chuàng)建Environment

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

    UVM driver和sequencer的通信

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

    UVMuvm_config_db機(jī)制背后的大功臣

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

    UVMuvm_config_db機(jī)制背后的大功臣

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

    一文詳解UVM設(shè)計(jì)模式

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