【问题标题】:How to change verbosity of uvm components after certain condition如何在特定条件后更改 uvm 组件的详细程度
【发布时间】:2019-02-02 14:52:01
【问题描述】:

我正在尝试在满足某些条件后更改模拟的 UVM 详细程度。不同组件的详细程度选项通过命令行传递为 +uvm_set_verbosity。满足条件后,应使用命令行 +uvm_set_verbosity 选项运行模拟。直到那时,所有组件的模拟运行都以低详细度运行。

查看UVM库代码,似乎有一个函数叫m_set_cl_msg_args()。此函数调用其他三个似乎使用命令行参数的函数,例如:+uvm_set_verbosity、+uvm_set_action、+uvm_set_severity。

所以我所做的是从 uvm_coreservice 单例中获取 uvm_root 实例,然后使用 uvm_component 类中的 get_children() 函数递归地获取模拟中所有 uvm_components 的队列。然后在所有组件上调用 m_set_cl_msg_args() 函数。

我的代码如下:

    begin
     uvm_root r;
     uvm_coreservice_t cs_t;
     uvm_component array_uvm[$];
     cs_t = uvm_coreservice_t::get();
     r = cs_t.get_root();

     r.get_children(array_uvm);
     foreach(array_uvm[i])
       array_uvm[i].m_set_cl_msg_args();
    end

即使这段代码编译正确,但这并没有改变冗长。任何的想法 ? 此外,我能够打印 array_uvm 中的所有组件。所以我猜 array_uvm[i].m_set_cl_msg_args(); 这是一个错误的电话。

任何人有任何其他建议可以在运行时更改详细程度。

【问题讨论】:

    标签: system-verilog uvm


    【解决方案1】:

    您不应该使用未在语言参考手册中记录的 UVM 中的函数。他们可以(并且确实)在任何版本中进行更改。我猜 +uvm_set_verbosity 默认只在时间 0 有效。

    已经有function可以做你想做的事

    umm_top.set_report_verbosity_level_hier()
    

    我建议使用+UVM_VERBOSITY=UVM_LOW 开始您的测试,然后定义您自己的开关来激活条件设置。

    如果您想要特定组件,请使用component_h.set_report_verbosity_level()(添加_hier 以设置其所有子组件)

    您可以使用 UVM 的命令行处理器get_arg_values() 方法指定要设置的组件的名称,然后使用 umm_top.find() 获取组件的句柄。

    【讨论】:

    • 这个我试过了。但这里的问题是层次结构中的所有组件都会根据我们传递的参数改变它们的详细程度。有什么方法可以对某些特定组件执行此操作,也可以通过命令行来实现
    • 用获取特定组件的建议方法更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 2011-12-13
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多