仅为uvm中的少数/序列/对象/接口设置详细程度?

时间:2016-03-22 11:11:27

标签: system-verilog uvm

如何控制某些组件的详细程度,以便我可以只为少数组件设置详细程度?

让我们说,例如在验证特定功能时,测试中涉及很少的组件/序列/对象/接口等。我想将这些的详细程度设置为UVM_HIGH。我不想将全局严重性设置为UVM_HIGH,因为可能会出现大量不相关的调试消息,这可能会增加日志大小。

这样做更干净的方法是什么?可以使用额外的命令行 - plusarg来触发它。基本上,要求是特定功能验证所涉及的测试/组件/序列/对象/接口应该采用全局严重性或特定于功能的严重性,具体取决于哪个更高。

请注意,不能使用uvm_component的内置报表方法,因为uvm_info语句可以在uvm_object扩展类和接口内。

3 个答案:

答案 0 :(得分:4)

您可以从命令行控制组件的详细程度作为模拟参数。有两种选择:

  • +uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase>
  • +uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<phase>这个允许您指定希望应用详细程度的模拟时间

comp是组件的路径,支持通配符*。示例:uvm_test_top.env.agnt.*
id是消息标识符。您可以通过将ID设置为_ALL_来应用于组件范围内的所有消息 verbosity是冗长的,例如UVM_LOWUVM_MEDIUMUVM_HIGHphase是您希望应用详细程度的阶段。

有关详细信息,我建议阅读:

答案 1 :(得分:2)

您可以使用uvm_report_catcher。它适用于uvm_object和接口。您还可以使用get_id()get_message()等API来匹配特定组件/对象,并且只能设置该组件/对象的详细程度。

here on edaplaygroud

上查看我的简单示例

答案 2 :(得分:0)

我尝试了不同的方式,也提出了这种方式。

不确定对人们有多大帮助。

使用运行时命令+user_verb=UVM_LOW +UVM_VERBOSITY=UVM_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

可以在edaplayground here

找到一个工作示例