Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 仅为uvm中的少数/序列/对象/接口设置详细度?_System Verilog_Uvm - Fatal编程技术网

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。使用中的方法调用更改详细性,以查看如何在代码中设置详细性。我没有把它包括在我最初的答案中,因为如果你只为解决少数情况而编写代码,它会造成维护混乱。