乐趣区

关于systemverilog:UVMC学习笔记四在SystemCC-layer的信息汇报控制

前言

在 uvmc 中能够提供对 uvm testbench 根本档次信息的打印和信息打印级别的管制,管制过程能够 systemC layer 实现操作

一. UVM testbench topology 例化档次信息打印

uvmc_print_topology(context,depth)
参数阐明:

context:开始打印拓扑的组件的层次结构门路。如果未指定,则拓扑打印将从 uvm_top 开始。能够应用通配符 (* 和) 指定多个组件, 例如“top.env.* .driver”。可通过将 contxt 括在前斜杠中来指定 POSIX 扩大正则表达式,例如“/a[hp]b/”。默认值:” (uvm_top)

depth:要打印的层次结构的级别数。如果没有指定,则打印从给定上下文开始的所有层次结构。默认值:-1(递归所有子元素)

例子:

void top::show_uvm_print_topology()
{
  cout << endl << endl << "Waiting for UVM to reach build phase..." << endl;
  uvmc_wait_for_phase("build", UVM_PHASE_STARTED);

  cout << endl << endl << "Topology before build phase:" << endl;
  uvmc_print_topology();

  uvmc_wait_for_phase("build", UVM_PHASE_ENDED);

  cout << endl << endl << "Topology after build phase:" << endl;
  uvmc_print_topology();}

打印后果:

Topology before build phase:
UVM_INFO /home/shawntan/Project/uvmc/uvmc-2.3.2/src/connect/sv/uvmc_commands.sv(502) @ 0 ns: reporter [TRACE/UVMC_CMD/PRINT_TOPOLOGY] Topology for component uvm_top:
----------------------------------------------------------------------
Name              Type                                     Size  Value
----------------------------------------------------------------------
<unnamed>         uvm_root                                 -     @172 
  prod_out        UVMC_PROXY_FOR_uvm_tlm_b_transport_port  -     @366 
  sb_actual_in    UVMC_PROXY_FOR_uvm_analysis_export       -     @382 
  e               env                                      -     @336 
    prod_out      uvm_tlm_b_transport_port                 -     @345 
    sb_actual_in  uvm_analysis_export                      -     @355 
----------------------------------------------------------------------
 
UVM_INFO /home/shawntan/Project/uvmc/uvmc-2.3.2/src/connect/sv/uvmc_commands.sv(208) @ 0 ns: reporter [UVMC_WAIT_FOR_PHASE] Waiting for phase 'build' to be 'UVM_EQ' to state 'UVM_PHASE_ENDED'. Currently its state is 'UVM_PHASE_EXECUTING'


Topology after build phase:
UVM_INFO /home/shawntan/Project/uvmc/uvmc-2.3.2/src/connect/sv/uvmc_commands.sv(502) @ 0 ns: reporter [TRACE/UVMC_CMD/PRINT_TOPOLOGY] Topology for component uvm_top:
-----------------------------------------------------------------------------
Name                     Type                                     Size  Value
-----------------------------------------------------------------------------
<unnamed>                uvm_root                                 -     @172 
  prod_out               UVMC_PROXY_FOR_uvm_tlm_b_transport_port  -     @366 
  sb_actual_in           UVMC_PROXY_FOR_uvm_analysis_export       -     @382 
  e                      env                                      -     @336 
    prod                 producer                                 -     @402 
      analysis_out       uvm_analysis_port                        -     @422 
      out                uvm_tlm_b_transport_port                 -     @412 
    prod_out             uvm_tlm_b_transport_port                 -     @345 
    sb                   scoreboard                               -     @432 
      actual_in          uvm_analysis_imp                         -     @441 
      exp_fifo           uvm_tlm_analysis_fifo #(T)               -     @461 
        analysis_export  uvm_analysis_imp                         -     @510 
        get_ap           uvm_analysis_port                        -     @500 
        get_peek_export  uvm_get_peek_imp                         -     @480 
        put_ap           uvm_analysis_port                        -     @490 
        put_export       uvm_put_imp                              -     @470 
      expect_in          uvm_analysis_export                      -     @451 
    sb_actual_in         uvm_analysis_export                      -     @355 
-----------------------------------------------------------------------------

能够看到通过 phase 管制当前,build phase 前后所 print 的 testbench topology 的构建档次后果存在显著的差别

二 report 管制函数

  1. uvmc_report_enabled(verbosity,severity,id,context)
    该函数用于管制指定组件 contxt 中生成的报告具备 verbosity、severityid,设定胜利则返回 true
    用于精密管制组件的对应打印级别。如果UVM_INFOverbosity大于为其收回的组件配置的 verbosity,则疏忽该报告。低于该级别的报告不受影响。没有设置severityid的组件的行为报告形式默认为 UVM_NO_ACTION, 不思考任何已注册的report_catchers 的过滤。

    参数阐明:
    verbosity:打印冗余级别,和 UVM 的级别统一
    serverity:报告的信息的重大水平,默认UVM_INFO, 另外有UVM_WARNING, UVM_ERROR, UVM_FATAL
    Id : 报告的标识符字符串(自定义)。必须是齐全匹配的。如果没有指定,那么uvmc_report_enabled 仅在 UVM_NO_ACTION 是指定上下文中给定严重性的配置操作时才进行查看。默认值:”(wildcard)“
    context : 收回假如报告的组件的层次结构门路。如果没有指定,则上下文是全局的,即uvm_top。不是由组件收回的报告来自uvm_top。默认值:” 全局 ”
    示例:

    if (uvmc_report_enabled(UVM_HIGH, UVM_INFO, "PRINT_TRANS") {
    string detailed_msg;
    ...prepare message string here...
    uvmc_report(UVM_INFO, "PRINT_TRANS", detailed_msg, UVM_HIGH);
    }
    1. uvmc_set_report_verbosity(level,context,recurse)
      为组件在指定上下文中收回的所有 UVM_INFO-severity 报告设置运行时具体级别。来自组件上下文的任何报告,如果其具体水平超过此最大值,将被疏忽。
      SC 通过 uvmc_report 公布的报告只受全局上下文的具体级别设置的影响,即 context= ” “。要对 sc 公布的报告进行更细粒度的管制,请应用 uvm_top 注册一个uvm_report_catcher

      参数阐明:

      level:信息冗余程度。指定 UVM_NONE、UVM_LOW、UVM_MEDIUM、UVM_HIGH 或 UVM_FULL。必填的
      context:组件的档次门路。能够应用通配符 * 和? 指定多个组件,例如“top.env.*.driver”。能够通过将contxt 括在前斜杠中来指定 POSIX 扩大正则表达式,例如“/a[hp]b/”。默认值:” (uvm_top)
      recurse:如果为真,则设置匹配上下文的组件 child 节点的具体水平。默认值: 假

      例子:
      uvmc_set_report_verbosity(UVM_FULL) :设置所有组件的打印级别到 UVM _FULL
      uvmc_set_report_verbosity(UVM_NONE, "top.env.agent1.driver"); 为top.env.agent1.driver 禁用所有可过滤的信息报告。不蕴含 child 节点

      uvmc_set_report_verbosity(UVM_LOW, true);
      uvmc_set_report_verbosity(UVM_HIGH, "top.env.troublemaker"); 将所有组件的具体报告设置为 UVM_LOW,独自对top.env,troublemaker 设置 UVM_HIGH 的信息冗余度,最初一个示例中,递归标记被设置为 false,因而所有top.env,troublemaker 的 child 节点 (如果有的话) 都将放弃为 UVM_LOW 简短

      1. uvmc_report(severity,id,message,verbosity,context,filename,line)
        将报告发送到 UVM 进行解决,可能会受到简短、动作和流动报告捕获器的过滤,应用 UVM 报告机制而不是 $display 和其余非凡办法来确保输入的一致性,并管制是否收回报告,以及在收回报告时是否采取了任何操作。所有的报告办法都有雷同的参数,只是在 UVM_INFO-severity 报告中利用了冗余级别

      参数阐明:
      severity:报告重大水平: 指定 UVM_INFO、UVM_WARNING、UVM_ERRORUVM_FATAL。必须参数
      id: 报告 id 字符串(自定义),用于辨认和指标过滤。无关报表 id 如何影响筛选的详细信息,请参阅上下文形容。须要的参数
      Message: 音讯内容,如果须要,能够对单个字符串进行预格式化。必须参数
      Verbosity: 音讯冗余度,指定UVM_NONE、UVM_LOW、UVM_MEDIUM、UVM_HIGH 或 UVM_FULL。默认值:UVM_MEDIUM
      Context: 收回报告的 sc side 组件的层次结构门路。上下文字符串在 SV 端以层次结构名称的模式呈现在报告中,但它在所有状况下都不会在报告过滤中发挥作用。所有的 sc side 报告都是从 UVM 的全局上下文收回的,即uvm_top。要利用过滤器设置,请从该上下文中创立它们,例如 uvm_top.set_report_id_action()。固定了上下文之后,只有报告的 id 能够用来惟一地标识要过滤的 SC 报告。然而,报告捕获器是通过报告的上下文传递的,因而能够基于 SC 上下文和id. 默认“”
      filename: 收回报告的可选文件名。应用文件。如果指定,文件名将显示为报告的一部分。默认值:”“
      line: 收回报告的文件名中的可选行号。应用线。如果指定,行号将显示为报告的一部分。默认值:0

      示例:
      uvmc_report(UVM_INFO, "SC_READY", "SystemC side is ready");:发送一个全局 (uvm_top-source) 的信息报告给 UVM
      uvmc_report(UVM_INFO, "SC_READY", "SystemC side is ready",UVM_LOW, "", __FILE__, __LINE__); 收回雷同的报告,这次应用较低的简短度,文件名和行号

      UVM_LOW verbosity 并不意味着更低的输入。相同,如果运行时具体度设置不是 UVM_NONE,则打印具备 UVM_LOW 具体度的报告。应用 UVM_NONE verbosity 收回的报告不能通过运行时 verbosity 设置进行筛选。
      下一个示例从一个 sc side 生产者组件发送一个正告和信息报告。在 SV 中,咱们通过将其无效 ID 的操作设置为UVM_NO_ACTION 来禁用正告。咱们还将无效 ID 为 UVM_NONE 的信息音讯的具体度阈值设置为UVM_NONE。这导致 INFO 报告被过滤,作为运行时的冗余度

       class producer : public sc_module {
       ...
       void run_thread() {
       ...
       uvmc_report(UVM_WARNING, "TransEvent",
       "Generated error transaction.",, this.name());
       ...
       uvmc_report(UVM_INFO, "TransEvent",
       "Transaction complete.", UVM_HIGH, this.name());
       ...
       }
       }
       
       uvm_top.set_report_id_action("TransEvent@top/prod",UVM_NO_ACTION);
       uvm_top.set_report_id_verbosity("TransEvent@top/prod",UVM_NONE);
       uvm_top.set_report_id_verbosity("TransDump",UVM_NONE);

      最初一条语句禁用具备 ID“TransDump”的全局上下文 (uvm_top) 的所有报告。目前无奈应用通配符同时为多个上下文设置报表过滤器。此外,SC 的档次分隔符能够在模拟器中进行配置,因而可能会影响这些命令的上下文准确度
      几个等效 serverity 函数:
      uvmc_report_info()
      uvmc_report_warning()
      uvmc_report_error()
      uvmc_report_fatal()
      为方便使用uvmc_report 提供了一系列封装好的打印宏:
      UVMC_INFO (ID, message, verbosity, context);
      UVMC_WARNING (ID, message, context);
      UVMC_ERROR (ID, message, context);
      UVMC_FATAL (ID, message, context);
      在发送报告之前,宏首先调用 uvmc_report_enabled 来防止发送报告,如果报告的冗余度或操作会阻止它达到报告服务器的话。该报告则应用提供的文件名和行号参数调用 uvmc_report
      对这些宏的调用必须以分号完结,这合乎为SC_REPORT 宏建设的 SystemC 约定。UVMC 未来的版本可能会提供一个 UVMC sc_report_handler,您能够应用它将所有SC_REPORTs 重定向到 UVM
      示例:
      UVMC_ERROR("SC_TOP/NO_CFG","Missing required config object", name());

退出移动版