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

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

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

Easier UVM Code Generator Part 4:生成層次化的驗證環(huán)境

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 2023-06-06 09:13 ? 次閱讀

本文使用Easier UVM Code Generator生成包含多個agent和interface的uvm驗證環(huán)境。通過在uvm代碼生成器template 文件中設置參數(shù),你可以將agent設置為在active 或passive 模式,并選擇是在其自己的環(huán)境中、在頂層環(huán)境中實例化。

本文使用的示例有四個interface/agent,其中兩個使用 register layer(bus1 和 bus2),兩個不使用(clkndata 和 serial)。這四個interface中每個interface template file都包含以下行,最初全部注釋掉:


Filename *.tpl
#uvm_seqr_class = yes
#agent_is_active = UVM_PASSIVE
#agent_has_env = yes
#additional_agent = serial

uvm_seqr_class

參數(shù)uvm_seqr_class可以設置為yes或no。默認值為 no,這意味著此agent的sequencer類將使用簡單的typedef 定義:

Filename clkndata_sequencer.sv
typedef uvm_sequencer #(data_tx) clkndata_sequencer_t;

如果參數(shù)設置為 yes,uvm代碼生成器將創(chuàng)建一個新的sequencer類:

Filename clkndata.tpl
...
uvm_seqr_class = yes
...

Filename clkndata_sequencer.sv
class clkndata_sequencer extends uvm_sequencer #(data_tx);


`uvm_component_utils(clkndata_sequencer)
  ...
endclass

agent_is_active

參數(shù)agent_is_active可以設置為UVM_ACTIVE或UVM_PASSIVE。默認值為 UVM_ACTIVE。將 agent_is_active 標志設置為 UVM_PASSIVE 就是通過配置頂層驗證環(huán)境來實現(xiàn)的。

Filename clkndata.tpl
...
agent_is_active = UVM_PASSIVE
...

Filename top_tb.sv
module top_tb;
  ...
  top_config env_config;


  initial
  begin
    env_config = new("env_config");
    ...
    env_config.is_active_clkndata = UVM_PASSIVE;
    ...
    uvm_config_db #(top_config)::set(null, "uvm_test_top.m_env", "config", env_config);

如上所示,一個配置對象用于配置整個頂層驗證環(huán)境。相應字段的值將從頂層配置對象復制到各個agent的配置對象,在本例中為 clkndata,在 env 的build_phase方法中:

Filename top_env.sv


class top_env extends uvm_env;
  ...
  clkndata_config   m_clkndata_config;
  top_config        m_config;
  ...
endclass


function void top_env::build_phase(uvm_phase phase);
if (!uvm_config_db #(clkndata_config)::get(this, "", "config", m_config))
    ...
m_clkndata_config           = new("m_clkndata_config");
  ...
m_clkndata_config.is_active = m_config.is_active_clkndata;
  ...
uvm_config_db #(clkndata_config)::set(this, "m_clkndata_agent", "config", m_clkndata_config);

上面的build_phase方法從其自己的配置(m_config) 中獲取值,并在其子配置(例如 m_clkndata_config)中設置這些相同的值。

換句話說,配置參數(shù)的值通過與組件關(guān)聯(lián)的配置對象層次化地結(jié)構(gòu)向下傳遞。

最后,agent從配置數(shù)據(jù)庫中獲取此字段的值:

Filename clkndata_agent.sv


function void clkndata_agent::build_phase(uvm_phase phase);
if (!uvm_config_db #(clkndata_config)::get(this, "", "config", m_config))
    ...
  ...
if (get_is_active() == UVM_ACTIVE)
  begin
    m_driver    = clkndata_driver::create("m_driver", this);
    m_sequencer = clkndata_sequencer::create("m_sequencer", this);
  end
endfunction


function uvm_active_passive_enum clkndata_agent::get_is_active();
  ...
  m_is_active = m_config.is_active;
  ...
return uvm_active_passive_enum'(m_is_active);
endfunction

agent_has_env

參數(shù) agent_has_env 可以設置為yes或 no。默認值為 no,這意味著此agent將從頂層環(huán)境實例化。如果agent_has_env設置為 yes,則agent將在其自己的env中實例化,該env將在頂層env實例化。

默認情況下,通過注冊模型訪問的代理將在自己的環(huán)境中實例化,所有其他代理將從頂級 env 實例化:

Filename top_env.sv
class top_env extends uvm_env:
...
// Child environments and associated objects
bus1_env         m_bus1_env;
bus2_env         m_bus2_env;


bus1_env_config  m_bus1_env_config;
bus2_env_config  m_bus2_env_config;


// Child agents and associated objects
clkndata_config    m_clkndata_config;
clkndata_agent     m_clkndata_agent;
clkndata_coverage  m_clkndata_coverage;


serial_config      m_serial_config;
serial_agent       m_serial_agent;
serial_coverage    m_serial_coverage;
...  
endclass

在相應的template 文件中將agent_has_env設置為 yes 會將 clkndata agent移動到其自己的env中:


Filename clkndata.tpl
...
agent_has_env = yes
...


Filename top_env.sv
class top_env extends uvm_env:
...
// Child environments and associated objects
clkndata_env     m_clkndata_env;
bus1_env         m_bus1_env;
bus2_env         m_bus2_env;


clkndata_config  m_clkndata_config;
bus1_env_config  m_bus1_env_config;
bus2_env_config  m_bus2_env_config;


// Child agents and associated objects
serial_config    m_serial_config;
serial_agent     m_serial_agent;
serial_coverage  m_serial_coverage;
...  
endclass

如果我們現(xiàn)在對剩下的一個agent代理(serial)執(zhí)行相同的操作,那么每個agent都將放入自己的 env 中:

Filename serial.tpl
...
agent_has_env = yes
...

Filename top_env.sv
class top_env extends uvm_env:
...
// Child environments and associated objects
clkndata_env     m_clkndata_env;
bus1_env         m_bus1_env;
bus2_env         m_bus2_env;
serial_env       m_serial_env;


clkndata_config  m_clkndata_config;
bus1_env_config  m_bus1_env_config;
bus2_env_config  m_bus2_env_config;
serial_config    m_serial_config;
...  
endclass

additional_agent

如果agent具有自己的env,則參數(shù) additional_agent 可用于指定要在該env中實例化的其他agent,而不是在其自己的env環(huán)境中或在頂層實例化。假設serial沒有自己的 env,則可以在 clkndataagent的 env 中實例化:

文件名 clkndata.tpl

...
agent_has_env = yes
additional_agent = serial
...

文件名 clkndata_env.sv

class clkndata_env extends uvm_env:
  ...
  clkndata_config    m_clkndata_config;
  clkndata_agent     m_clkndata_agent;
  clkndata_coverage  m_clkndata_coverage;
  
  serial_config      m_serial_config;
  serial_agent       m_serial_agent;
  serial_coverage    m_serial_coverage;
  ...  
endclass

現(xiàn)在,可以在四個模板文件 bus1.tpl、bus2.tpl、clkndata.tpl 和 serial.tpl 中試驗上述參數(shù)的值,并在每次更改后重新運行uvm代碼生成器以查看其效果。





審核編輯:劉清

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

    關(guān)注

    0

    文章

    181

    瀏覽量

    19088
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    313

    瀏覽量

    20844
  • CLK
    CLK
    +關(guān)注

    關(guān)注

    0

    文章

    125

    瀏覽量

    17040

原文標題:Easier UVM Code Generator Part 4:生成層次化的驗證環(huán)境

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    IC驗證"UVM驗證平臺加入factory機制"(六)

      加入factory機制 上一節(jié)《IC驗證"一個簡單的UVM驗證平臺"是如何搭建的(五)》給出了一個只有driver、使用UVM搭建的驗證
    發(fā)表于 12-08 12:07

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

    等等,uvm將許多流程格式,標準,每個基于uvm驗證平臺,它的結(jié)構(gòu)都大同小異,這使得驗證
    發(fā)表于 01-21 16:00

    一種基于UVM的混合信號驗證環(huán)境

    一種基于UVM的混合信號驗證環(huán)境_耿睿
    發(fā)表于 01-07 21:39 ?1次下載

    參數(shù)UVM IP驗證環(huán)境(上)

    參數(shù)的IP是可配置的,這意味著在不同的SOC中IP設計可以有不同的設計參數(shù),設計參數(shù)可以對應到協(xié)議、端口號、端口名稱、以及內(nèi)部邏輯。大量的IP設計參數(shù)非常影響驗證環(huán)境的構(gòu)建,比如testbench
    發(fā)表于 09-15 14:37 ?6次下載
    參數(shù)<b class='flag-5'>化</b><b class='flag-5'>UVM</b> IP<b class='flag-5'>驗證</b><b class='flag-5'>環(huán)境</b>(上)

    基于UVM的代碼生成器的開發(fā)設計

    毋庸置疑,UVM大大提高了我們開發(fā)驗證平臺的效率。但同時,熟練掌握UVM搭建驗證平臺也并不是一件容易的事情。同時由于不同驗證工程師搭建
    發(fā)表于 09-15 17:18 ?22次下載
    基于<b class='flag-5'>UVM</b>的代碼<b class='flag-5'>生成</b>器的開發(fā)設計

    利用Systemverilog+UVM搭建soc驗證環(huán)境

    利用Systemverilog+UVM搭建soc驗證環(huán)境
    發(fā)表于 08-08 14:35 ?5次下載

    ASIC芯片設計之UVM驗證

    百度百科對UVM的釋義如下:通用驗證方法學(Universal Verification Methodology, UVM)是一個以SystemVerilog類庫為主體的驗證平臺開發(fā)框
    發(fā)表于 11-30 12:47 ?1379次閱讀

    e2 studio Code Generator 集成開發(fā)環(huán)境 用戶手冊:RL78 API Reference

    e2 studio Code Generator 集成開發(fā)環(huán)境 用戶手冊:RL78 API Reference
    發(fā)表于 03-21 19:36 ?0次下載
    e2 studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> 集成開發(fā)<b class='flag-5'>環(huán)境</b> 用戶手冊:RL78 API Reference

    CS+ Code Generator Tool 集成開發(fā)環(huán)境 用戶手冊: Pin View Rev.1.10

    CS+ Code Generator Tool 集成開發(fā)環(huán)境 用戶手冊: Pin View Rev.1.10
    發(fā)表于 03-21 20:04 ?0次下載
    CS+ <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool 集成開發(fā)<b class='flag-5'>環(huán)境</b> 用戶手冊: Pin View Rev.1.10

    個性地定制自己的uvm代碼生成器模板和腳本

    使用uvm代碼生成器創(chuàng)建基本的uvm驗證環(huán)境框架,然后丟棄代碼生成器模板并擴展和維護
    的頭像 發(fā)表于 05-14 16:51 ?1797次閱讀
    個性<b class='flag-5'>化</b>地定制自己的<b class='flag-5'>uvm</b>代碼<b class='flag-5'>生成</b>器模板和腳本

    Easier UVM Code Generator Part 1: 運行仿真

    在運行uvm代碼生成器后,我們現(xiàn)在可以開始運行仿真。同樣,我們將命令行放入腳本文件中
    的頭像 發(fā)表于 05-19 09:18 ?663次閱讀

    Easier UVM Code Generator Part 2:添加用戶定義的代碼

    在本文中,我們將進一步實現(xiàn)monitor和coverage collector components,以便在仿真期間收集功能覆蓋信息。
    的頭像 發(fā)表于 05-20 09:45 ?618次閱讀

    層次UVM TLM連接

    TLM接口的使用將驗證環(huán)境中的每個組件與其他組件隔離。驗證環(huán)境實例一個組件,并完成其ports/exports的連接,不需要進一步了解
    的頭像 發(fā)表于 05-29 14:51 ?570次閱讀
    <b class='flag-5'>層次</b><b class='flag-5'>化</b>的<b class='flag-5'>UVM</b> TLM連接

    e2 studio Code Generator 集成開發(fā)環(huán)境 用戶手冊:RL78 API Reference

    e2 studio Code Generator 集成開發(fā)環(huán)境 用戶手冊:RL78 API Reference
    發(fā)表于 07-07 19:36 ?0次下載
    e2 studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> 集成開發(fā)<b class='flag-5'>環(huán)境</b> 用戶手冊:RL78 API Reference

    CS+ Code Generator Tool 集成開發(fā)環(huán)境 用戶手冊: Pin View Rev.1.10

    CS+ Code Generator Tool 集成開發(fā)環(huán)境 用戶手冊: Pin View Rev.1.10
    發(fā)表于 07-07 20:05 ?0次下載
    CS+ <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool 集成開發(fā)<b class='flag-5'>環(huán)境</b> 用戶手冊: Pin View Rev.1.10