当前位置: 首页 > news >正文

#UVM# 关于 config_db 机制中的直线非直线设置和获取讲解

在 UVM 验证环境中,uvm_config_db 是一种强大的机制,用于在不同组件之间传递配置参数。根据你的描述,我们可以结合UVM 树结构来解释直线和非直线的设置与获取。

UVM 树结构示例

假设 UVM 树结构如下:

uvm_test_top
├── env
│   ├── i_agt
│   │   └── drv (driver)
│   ├── scb (scoreboard)
│   └── ref_model (reference model)

其中,driver 的路径为 uvm_test_top.env.i_agt.drv

直线设置与非直线设置

  1. 直线设置

    • 如果在 uvm_test_topenvi_agt 中对 driver 的某些变量进行设置,这种设置称为直线设置

    • 例如,在 env 中设置 driverpre_num 参数:

function void env::build_phase(uvm_phase phase);
    super.build_phase(phase);
    uvm_config_db#(int)::set(this, "i_agt.drv", "pre_num", 100);
endfunction
  • 这种设置方式符合 UVM 的层次结构,路径清晰且易于管理。

非直线设置

  • 如果在其他组件(如 scoreboardreference model)中对 driver 的某些变量进行设置,则称为非直线设置

  • 例如,在 scoreboard 中设置 driverpre_num 参数:

function void my_scoreboard::build_phase(uvm_phase phase);
    super.build_phase(phase);
    uvm_config_db#(int)::set(this.m_parent, "i_agt.drv", "pre_num", 200);
endfunction

或者:

function void my_scoreboard::build_phase(uvm_phase phase);
    super.build_phase(phase);
    uvm_config_db#(int)::set(uvm_root::get(), "uvm_test_top.env.i_agt.drv", "pre_num", 200);
endfunction
  • 非直线设置可能会带来风险,因为 UVM 并未明文规定同一级别组件(如 scbi_agt)的 build_phase 执行顺序。因此,当 driver 获取参数时,scoreboardbuild_phase 可能尚未执行,导致参数设置失败。

直线获取与非直线获取

  1. 直线获取

    • driver 中通过 uvm_config_db::get 获取其他组件设置的参数,称为直线获取

    • 例如,在 driver 中获取 pre_num 参数:

function void my_driver::build_phase(uvm_phase phase);
    super.build_phase(phase);
    int pre_num;
    void'(uvm_config_db#(int)::get(this, "", "pre_num", pre_num));
    `uvm_info("my_driver", $sformatf("pre_num = %0d", pre_num), UVM_LOW)
endfunction

非直线获取

  • 如果在其他组件(如 reference model)中获取其他组件设置给 driver 的参数值,则称为非直线获取

  • 例如,在 reference model 中获取 driverpre_num 参数:

function void my_ref_model::build_phase(uvm_phase phase);
    super.build_phase(phase);
    int pre_num;
    void'(uvm_config_db#(int)::get(this.m_parent, "i_agt.drv", "pre_num", pre_num));
    `uvm_info("my_ref_model", $sformatf("pre_num = %0d", pre_num), UVM_LOW)
endfunction
  • 这种方式同样需要确保路径正确,并且设置操作在获取操作之前完成。

注意事项

  • 路径正确性:无论是直线还是非直线设置/获取,路径必须正确。可以使用 get_full_name() 或相对路径来确保路径的准确性。

  • 执行顺序:非直线设置可能会因执行顺序问题导致失败。建议尽量避免非直线设置,除非有明确的必要。

  • 调试:如果设置或获取失败,可以使用 uvm_config_db::check_config_usage 来检查配置参数的使用情况。

相关文章:

  • 《UE5_C++多人TPS完整教程》学习笔记35 ——《P36 武器类(Weapon Class)》
  • 软考 中级软件设计师 考点笔记总结 day01
  • 编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(中)
  • qt 操作多个sqlite文件
  • RuoYi框架添加自己的模块(学生管理系统CRUD)
  • 【VUE2】第三期——样式冲突、组件通信、异步更新
  • DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!
  • Spring Boot与Axon Framework整合教程
  • 南京SMT贴片加工核心工艺解析
  • 智慧城市智慧社区项目建设方案
  • 虚拟路由冗余协议(VRRP)技术详解:原理、应用与配置实践
  • 个人电脑本地部署DeepSeek来离线使用
  • 中小企业Windows双因素认证的“轻量化”安全解决方案
  • 在ArcMap中通过Python编写自定义工具(Python Toolbox)实现点转线工具
  • 出现“ping不通但可以远程连接”的情况可能由以下原因导致
  • 企业如何选择研发项目进度管理软件?盘点15款实用工具
  • Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术
  • 艺嘉美学:匠心编织户外休闲新风尚
  • STM32F10XXX标准库函数及外设结构体
  • 蓝桥备赛(13)- 链表和 list(下)
  • 如何做产品网站推广/湛江seo推广外包
  • 成都移动网站建设/附近的电脑培训班在哪里
  • jsp网站建设/网店代运营需要多少钱
  • 郑州网站建设推销/百度seo网站优化
  • 动态网站开发 PHP/源码网
  • wordpress响应式concise主题/拼多多关键词优化步骤