System verilog 仅为uvm中的少数/序列/对象/接口设置详细度?
如何控制某些组件的详细程度,以便仅将详细程度设置为少数组件 比如说,在验证特定功能时,测试涉及的组件/序列/对象/接口等很少。我只想将这些设置为System verilog 仅为uvm中的少数/序列/对象/接口设置详细度?,system-verilog,uvm,System Verilog,Uvm,如何控制某些组件的详细程度,以便仅将详细程度设置为少数组件 比如说,在验证特定功能时,测试涉及的组件/序列/对象/接口等很少。我只想将这些设置为UVM\u HIGH。我不想将全局严重性设置为UVM_HIGH,因为可能会出现大量不相关的调试消息,这可能会增加日志大小 有什么更干净的方法可以做到这一点?可以使用额外的命令行plusarg来触发它。基本上,要求是特定功能验证涉及的测试/组件/序列/对象/接口应采用全局严重性或特定功能严重性,具体取决于哪个更高 请注意,不能使用uvm_组件的内置报告方法
UVM\u HIGH
。我不想将全局严重性设置为UVM_HIGH
,因为可能会出现大量不相关的调试消息,这可能会增加日志大小
有什么更干净的方法可以做到这一点?可以使用额外的命令行plusarg来触发它。基本上,要求是特定功能验证涉及的测试/组件/序列/对象/接口应采用全局严重性或特定功能严重性,具体取决于哪个更高
请注意,不能使用
uvm_组件
的内置报告方法,因为uvm_info
语句可以位于uvm_对象
扩展类以及接口中。您可以通过命令行作为模拟参数来控制组件的详细程度。有两种选择:
+uvm\u设置\u详细程度=,,,
此选项用于指定希望应用详细程度开始的模拟时间+uvm\u set\u详细程度=,,时间,
comp
是组件的路径,支持通配符*
。示例:uvm\u test\u top.env.agnt.
id
是消息标识符。通过将id设置为\u all\u
冗长
是冗长的,例如UVM\u低
,UVM\u中
,UVM\u高
,等等。
阶段
是您希望将详细性应用到的阶段
关于更多细节,我建议阅读:
- 关于
- 克利福德·E·卡明斯
uvm\u report\u catcher
进行此操作。它与uvm_对象
和界面一起工作。您还可以使用get_id()
、get_message()
等API来匹配特定组件/对象,并且只能设置该组件/对象的详细程度
查看我在上的简单示例,我尝试了不同的方法,也想出了这种方法 不知道这对人们有多大帮助 使用运行时命令模拟此情况
+user\u verb=UVM\u LOW+UVM\u VERBOSITY=UVM\u MEDIUM
class user_class extends uvm_object;
string report_id = "user_class";
string user_verb;
typedef uvm_enum_wrapper#(uvm_verbosity) uvm_verbosity_wrapper_e;
uvm_verbosity current_verb;
uvm_verbosity USER_VERBOSITY=UVM_HIGH;
function new (string name="my_class");
super.new(name);
report_id = name;
//void'($value$plusargs("user_verb=%s",user_verb));
//void'(uvm_verbosity_wrapper_e::from_name (user_verb,USER_VERBOSITY));
if ($test$plusargs("user_verb")) begin
current_verb=uvm_top.get_report_verbosity_level(UVM_INFO,"current_verb"); USER_VERBOSITY=uvm_top.get_report_verbosity_level(UVM_INFO,"user_verb");
end
$display("user_verb = %s",user_verb);
$display("current_verb = %s",current_verb);
endfunction : new
task display;
`uvm_info(report_id,"This is my message",USER_VERBOSITY)
endtask
endclass: user_class
module top;
string id;
string report_id = "top";
user_class m_user_class;
initial begin
m_user_class = new("m_user_class");
m_user_class.display;
`uvm_info(report_id,"This is my message",UVM_LOW)
end
endmodule: top
如果你和我一样,有一个脚本可以为你运行模拟人生,那么可以在EDAPlayder上找到一个工作示例。命令行上的通配符可能会导致问题。这只需要用反斜杠转义
\*
谢谢Greg,但这需要跟踪参与功能验证的所有组件,并对每个组件使用plusarg。我想知道有没有办法用一个plusarg解决这个问题。我不介意在我的应用程序中添加额外的代码行TB@VineethVS,读4.2。使用中的方法调用更改详细性,以查看如何在代码中设置详细性。我没有把它包括在我最初的答案中,因为如果你只为解决少数情况而编写代码,它会造成维护混乱。