0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Easier UVM Code Generator Part 4:生成层次化的验证环境

芯片验证工程师 来源:芯片验证工程师 2023-06-06 09:13 次阅读

本文使用Easier UVM Code Generator生成包含多个agent和interface的uvm验证环境。通过在uvm代码生成器template 文件中设置参数,你可以将agent设置为在active 或passive 模式,并选择是在其自己的环境中、在顶层环境中实例化。

本文使用的示例有四个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

参数uvm_seqr_class可以设置为yes或no。默认值为 no,这意味着此agent的sequencer类将使用简单的typedef 定义:

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

如果参数设置为 yes,uvm代码生成器将创建一个新的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

参数agent_is_active可以设置为UVM_ACTIVE或UVM_PASSIVE。默认值为 UVM_ACTIVE。将 agent_is_active 标志设置为 UVM_PASSIVE 就是通过配置顶层验证环境来实现的。

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

如上所示,一个配置对象用于配置整个顶层验证环境。相应字段的值将从顶层配置对象复制到各个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)中设置这些相同的值。

换句话说,配置参数的值通过与组件关联的配置对象层次化地结构向下传递。

最后,agent从配置数据库中获取此字段的值:

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

参数 agent_has_env 可以设置为yes或 no。默认值为 no,这意味着此agent将从顶层环境实例化。如果agent_has_env设置为 yes,则agent将在其自己的env中实例化,该env将在顶层env实例化。

默认情况下,通过注册模型访问的代理将在自己的环境中实例化,所有其他代理将从顶级 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

如果我们现在对剩下的一个agent代理(serial)执行相同的操作,那么每个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,则参数 additional_agent 可用于指定要在该env中实例化的其他agent,而不是在其自己的env环境中或在顶层实例化。假设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

现在,可以在四个模板文件 bus1.tpl、bus2.tpl、clkndata.tpl 和 serial.tpl 中试验上述参数的值,并在每次更改后重新运行uvm代码生成器以查看其效果。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    19121
  • 生成器
    +关注

    关注

    7

    文章

    313

    浏览量

    20939
  • CLK
    CLK
    +关注

    关注

    0

    文章

    127

    浏览量

    17096

原文标题:Easier UVM Code Generator Part 4:生成层次化的验证环境

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    IC验证"UVM验证平台加入factory机制"(六)

      加入factory机制 上一节《IC验证"一个简单的UVM验证平台"是如何搭建的(五)》给出了一个只有driver、使用UVM搭建的验证
    发表于 12-08 12:07

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载中...

    等等,uvm将许多流程格式,标准,每个基于uvm验证平台,它的结构都大同小异,这使得验证
    发表于 01-21 16:00

    一种基于UVM的混合信号验证环境

    一种基于UVM的混合信号验证环境_耿睿
    发表于 01-07 21:39 1次下载

    参数UVM IP验证环境(上)

    参数的IP是可配置的,这意味着在不同的SOC中IP设计可以有不同的设计参数,设计参数可以对应到协议、端口号、端口名称、以及内部逻辑。大量的IP设计参数非常影响验证环境的构建,比如testbench
    发表于 09-15 14:37 6次下载
    参数<b class='flag-5'>化</b><b class='flag-5'>UVM</b> IP<b class='flag-5'>验证</b><b class='flag-5'>环境</b>(上)

    基于UVM的代码生成器的开发设计

    毋庸置疑,UVM大大提高了我们开发验证平台的效率。但同时,熟练掌握UVM搭建验证平台也并不是一件容易的事情。同时由于不同验证工程师搭建
    发表于 09-15 17:18 22次下载
    基于<b class='flag-5'>UVM</b>的代码<b class='flag-5'>生成</b>器的开发设计

    利用Systemverilog+UVM搭建soc验证环境

    利用Systemverilog+UVM搭建soc验证环境
    发表于 08-08 14:35 5次下载

    ASIC芯片设计之UVM验证

    百度百科对UVM的释义如下:通用验证方法学(Universal Verification Methodology, UVM)是一个以SystemVerilog类库为主体的验证平台开发框
    发表于 11-30 12:47 1431次阅读

    e² studio Code Generator 集成开发环境 用户手册:RL78 API Reference

    e² studio Code Generator 集成开发环境 用户手册:RL78 API Reference
    发表于 03-21 19:36 0次下载
    e² studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> 集成开发<b class='flag-5'>环境</b> 用户手册:RL78 API Reference

    CS+ Code Generator Tool 集成开发环境 用户手册: Pin View Rev.1.10

    CS+ Code Generator Tool 集成开发环境 用户手册: Pin View Rev.1.10
    发表于 03-21 20:04 0次下载
    CS+ <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool 集成开发<b class='flag-5'>环境</b> 用户手册: Pin View Rev.1.10

    个性地定制自己的uvm代码生成器模板和脚本

    使用uvm代码生成器创建基本的uvm验证环境框架,然后丢弃代码生成器模板并扩展和维护
    的头像 发表于 05-14 16:51 1935次阅读
    个性<b class='flag-5'>化</b>地定制自己的<b class='flag-5'>uvm</b>代码<b class='flag-5'>生成</b>器模板和脚本

    Easier UVM Code Generator Part 1: 运行仿真

    在运行uvm代码生成器后,我们现在可以开始运行仿真。同样,我们将命令行放入脚本文件中
    的头像 发表于 05-19 09:18 724次阅读

    Easier UVM Code Generator Part 2:添加用户定义的代码

    在本文中,我们将进一步实现monitor和coverage collector components,以便在仿真期间收集功能覆盖信息。
    的头像 发表于 05-20 09:45 701次阅读

    层次UVM TLM连接

    TLM接口的使用将验证环境中的每个组件与其他组件隔离。验证环境实例一个组件,并完成其ports/exports的连接,不需要进一步了解
    的头像 发表于 05-29 14:51 616次阅读
    <b class='flag-5'>层次</b><b class='flag-5'>化</b>的<b class='flag-5'>UVM</b> TLM连接

    e² studio Code Generator 集成开发环境 用户手册:RL78 API Reference

    e² studio Code Generator 集成开发环境 用户手册:RL78 API Reference
    发表于 07-07 19:36 0次下载
    e² studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> 集成开发<b class='flag-5'>环境</b> 用户手册:RL78 API Reference

    CS+ Code Generator Tool 集成开发环境 用户手册: Pin View Rev.1.10

    CS+ Code Generator Tool 集成开发环境 用户手册: Pin View Rev.1.10
    发表于 07-07 20:05 0次下载
    CS+ <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool 集成开发<b class='flag-5'>环境</b> 用户手册: Pin View Rev.1.10