在满足某些条件后,我试图更改模拟的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(); 这是一个错误的电话。
任何其他人都建议在运行时更改详细程度。
答案 0 :(得分:1)
切勿使用未在语言参考手册中记录的功能在UVM中使用。他们可以(做)在任何版本的变化。我猜+ uvm_set_verbosity仅通过默认工作在时间0。
已经有function做您想要做的事情
E:\xampp\apache\conf\extra\httpd-vhosts.conf
我建议使用umm_top.set_report_verbosity_level_hier()
,开始测试,然后定义自己的开关用于激活的条件的设置。
如果需要特定的组件,请使用+UVM_VERBOSITY=UVM_LOW
(添加component_h.set_report_verbosity_level()
来设置其所有子组件)
您可以使用UVM的命令行处理器_hier
方法来指定要设置的组件的名称,然后使用umm_top.find()获取该组件的句柄。