System verilog 在特定条件下如何更改uvm组件的详细性

System verilog 在特定条件下如何更改uvm组件的详细性,system-verilog,uvm,System Verilog,Uvm,我试图在满足某些条件后更改模拟的UVM详细程度。不同组件的详细度选项以+uvm\u set\u详细度的形式通过命令行。满足条件后,模拟应使用命令行+uvm_set_verbosity选项运行。在此之前,所有组件的模拟都以低冗余度运行 查看UVM库代码,似乎有一个名为m_set_cl_msg_args()的函数。此函数调用其他三个似乎使用命令行参数的函数,如:+uvm_set_verbosity、+uvm_set_action、+uvm_set_severity 所以我所做的是从uvm_cores

我试图在满足某些条件后更改模拟的UVM详细程度。不同组件的详细度选项以+uvm\u set\u详细度的形式通过命令行。满足条件后,模拟应使用命令行+uvm_set_verbosity选项运行。在此之前,所有组件的模拟都以低冗余度运行

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

所以我所做的是从uvm_coreservice单例中获取uvm_根实例,然后使用uvm_组件类中的get_children()函数递归地获取模拟中所有uvm_组件的队列。然后在所有组件上调用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
尽管这段代码编译正确,但这并不会改变冗长性。有什么想法吗? 此外,我能够打印阵列中的所有组件。所以我猜 数组_uvm[i].m_set_cl_msg_args(); 这是一个错误的电话


任何人都有在运行时更改详细性的任何其他建议。

您不应该在UVM中使用语言参考手册中未记录的函数。他们可以(而且确实)在任何修订中进行更改。我猜+uvm_set_冗余在默认情况下仅在时间0时有效

已经有一个方法来做你想做的事

umm_top.set_report_verbosity_level_hier()
我建议使用
+UVM\u VERBOSITY=UVM\u LOW
启动测试,然后定义自己的开关以激活条件设置

如果需要特定组件,请使用
component\u h.set\u report\u verbosity\u level()
(添加
\u hier
以设置其所有子级)


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

我尝试过的这个方法。。但这里的问题是,层次结构中的所有组件都将根据我们传递的参数更改其详细程度。对于某些特定组件,是否有任何方法可以做到这一点,也可以通过命令行更新答案,并提供获取特定组件的建议方法。