跳转至

输入查询内容

    本页内容

    report_summarize 签名与文件路由行为变化

    影响范围

    传入 report_summarize(0)、复用报告文件配置或依赖低 verbosity 下摘要路由的代码需核对。

    具体差异

    旧行为:传入的 file 参数被忽略,summary 始终走正常 UVM_INFO(UVM_LOW) 消息通道(可被该 id 的 action/file 配置影响);新行为:file==UVM_STDOUT 时以 UVM_INFO(UVM_NONE) 打出,否则临时切 UVM_LOG 写入指定文件。uvm_report_catcher::summarize() 同样新增 file 参数并按同策略路由(1.2 src/vcs-uvm-1.2/base/uvm_report_catcher.svh:693 → 2.0 src/vcs-uvm-ieee-2020-2.0/base/uvm_report_catcher.svh:645)。另新增 dump_server_state()uvm_report_server.svh:236)。

    修改方案

    推荐省略实参或显式用 UVM_STDOUT;旧 report_summarize(0) 在目标版走 UVM_LOG 到句柄 0,不再表达 stdout。传入有效文件时,目标只恢复 action,未恢复 UVM/REPORT/SERVER 的 ID 文件配置(src/vcs-uvm-ieee-2020-2.0/base/uvm_report_server.svh:959);需要复用原配置时调用方保存/恢复文件句柄。report_probe 已验证路由位、低 verbosity 可见性及恢复写法,未以捕获消息替代实际落盘集成验收。

    兼容措施与范围:现有入口无需兼容开关;这不表示两版行为相同,仍按本条条件和验证方法核对。

    迁移后验证

    分别输出到 stdout 和目标文件,检查摘要位置;summary 后发一条消息,验证报告文件设置被正确恢复。

    记录本条结果M04-007 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。

    • S31 · 启发式:report summary 与输出句柄路由。 普通 UVM_STDOUT 和默认/符号 stdout 摘要不报;定位数值比较、位运算及其他显式摘要文件参数。低 verbosity 摘要可见性仍需按条目验证。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules S31
    

    核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。

    扫描器下载、输入范围与报告说明

    源码与标准依据

    核查方式:源码与实测核对。实测仅覆盖本条所列场景。

    VCS 内置 UVM-1.2uvm_report_server.svh:172(声明 file = 0)、uvm_report_server.svh:878(实现忽略 file,恒以 uvm_info@UVM_LOW 打到标准输出)

    VCS 内置 uvm-ieee-2020-2.0uvm_report_server.svh:180uvm_report_server.svh:903file = UVM_STDOUT;实现拆为 report_summarizesummarizem_report_summarize 递归保护结构,uvm_report_server.svh:910/uvm_report_server.svh:915

    引用代码(高亮为引用行);上方行号链接可直接定位。

    src/vcs-uvm-1.2/base/uvm_report_server.svh
            //
            // The <run_test> method in uvm_top calls this method.
    
            pure virtual function void report_summarize(UVM_FILE file = 0);
    
    
    `ifndef UVM_NO_DEPRECATED 
    
            // Function- summarize
            //
    
            virtual function void summarize(UVM_FILE file=0);
              report_summarize(file);
            endfunction
    
    `endif
    
            // Function: set_server
            //
    

    src/vcs-uvm-1.2/base/uvm_report_server.svh
      //
      // The <run_test> method in uvm_top calls this method.
    
      virtual function void report_summarize(UVM_FILE file = 0);
        string id;
        string name;
        string output_str;
        string q[$];
    
        uvm_report_catcher::summarize();
        q.push_back("\n--- UVM Report Summary ---\n\n");
    
        if(m_max_quit_count != 0) begin
          if ( m_quit_count >= m_max_quit_count )
            q.push_back("Quit count reached!\n");
          q.push_back($sformatf("Quit count : %5d of %5d\n",m_quit_count, m_max_quit_count));
        end
    
        q.push_back("** Report counts by severity\n");
    

    完整源码 · SHA256:cbcbf1ab721a8fdc21803b10a978096ca43ff300a5f96d85a2ede241942adcea

    src/vcs-uvm-ieee-2020-2.0/base/uvm_report_server.svh
            // The <run_test> method in uvm_top calls this method.
    
            // @uvm-ieee 1800.2-2020 auto 6.5.1.2.17
            pure virtual function void report_summarize(UVM_FILE file = UVM_STDOUT);
    
            // Function -- NODOCS -- set_server
            //
            // Sets the global report server to use for reporting.
            //
            // This method is provided as a convenience wrapper around
            // setting the report server via the <uvm_coreservice_t::set_report_server>
            // method.
            //
            // In addition to setting the server this also copies the severity/id counts
            // from the current report_server to the new one
            //
            // | // Using the uvm_coreservice_t:
            // | uvm_coreservice_t cs;
            // | cs = uvm_coreservice_t::get();
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_report_server.svh
            endfunction
    
            // @uvm-compat Added for compatibility to uvm-1.1d
            function void dump_server_state();
              this.report_summarize();
            endfunction : dump_server_state
    endclass
    
    //------------------------------------------------------------------------------
    //
    // CLASS: uvm_default_report_server
    //
    // Default implementation of the UVM report server, as defined in section
    // 6.5.2 of 1800.2-2020
    //
    
    // @uvm-ieee 1800.2-2020 auto 6.5.2
    class uvm_default_report_server extends uvm_report_server;
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_report_server.svh
      //
      // The <run_test> method in uvm_top calls this method.
    
      virtual function void report_summarize(UVM_FILE file = UVM_STDOUT);
         m_report_summarize_in_stack = 1 ;
         summarize(file);
         m_report_summarize_in_stack = 0 ;
      endfunction
    
      // @uvm-compat
      virtual function void summarize(UVM_FILE file = UVM_STDOUT);
         if (!m_report_summarize_in_stack) report_summarize(file);
         else m_report_summarize(file);
      endfunction
    
      virtual function void m_report_summarize(UVM_FILE file = UVM_STDOUT);
        string id;
        string name;
        uvm_root root;
        uvm_action action;
    
        string output_str;
        string q[$];
    
        uvm_report_catcher::summarize(file);
        q.push_back("\n--- UVM Report Summary ---\n\n");
    
        if(m_max_quit_count != 0) begin
          if ( m_quit_count >= m_max_quit_count )
            q.push_back("Quit count reached!\n");
          q.push_back($sformatf("Quit count : %5d of %5d\n",m_quit_count, m_max_quit_count));
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_report_server.svh
      endfunction
    
    endclass
    
    
    `endif // UVM_REPORT_SERVER_SVH
    

    完整源码 · SHA256:be451854e400aaa5f89cbc5ffe30e9a5a4f7acadb9a10f63af848947c2bc7159

    src/vcs-uvm-1.2/base/uvm_report_catcher.svh
      // It prints the statistics for the active catchers.
    
    
      static function void summarize();
        string s;
        string q[$];
        if(do_report) begin
          q.push_back("\n--- UVM Report catcher Summary ---\n\n\n");
          q.push_back($sformatf("Number of demoted UVM_FATAL reports  :%5d\n", m_demoted_fatal));
          q.push_back($sformatf("Number of demoted UVM_ERROR reports  :%5d\n", m_demoted_error));
          q.push_back($sformatf("Number of demoted UVM_WARNING reports:%5d\n", m_demoted_warning));
          q.push_back($sformatf("Number of caught UVM_FATAL reports   :%5d\n", m_caught_fatal));
          q.push_back($sformatf("Number of caught UVM_ERROR reports   :%5d\n", m_caught_error));
          q.push_back($sformatf("Number of caught UVM_WARNING reports :%5d\n", m_caught_warning));
    
         `uvm_info_context("UVM/REPORT/CATCHER",`UVM_STRING_QUEUE_STREAMING_PACK(q),UVM_LOW,uvm_top)
        end
      endfunction
    

    完整源码 · SHA256:67029475e5c591f6cf17485d791c3b566ceb1b7110110c810c1eefbadd61fc28

    src/vcs-uvm-ieee-2020-2.0/base/uvm_report_catcher.svh
      // It prints the statistics for the active catchers.
    
    
      static function void summarize(UVM_FILE file = UVM_STDOUT);
        string s;
        uvm_root root = uvm_root::get();
        uvm_action action;
        string q[$];
        if(do_report) begin
          q.push_back("\n--- UVM Report catcher Summary ---\n\n\n");
          q.push_back($sformatf("Number of demoted UVM_FATAL reports  :%5d\n", m_demoted_fatal));
          q.push_back($sformatf("Number of demoted UVM_ERROR reports  :%5d\n", m_demoted_error));
          q.push_back($sformatf("Number of demoted UVM_WARNING reports:%5d\n", m_demoted_warning));
          q.push_back($sformatf("Number of caught UVM_FATAL reports   :%5d\n", m_caught_fatal));
          q.push_back($sformatf("Number of caught UVM_ERROR reports   :%5d\n", m_caught_error));
          q.push_back($sformatf("Number of caught UVM_WARNING reports :%5d\n", m_caught_warning));
          if(file == UVM_STDOUT) begin
             `uvm_info_context("UVM/REPORT/CATCHER",`UVM_STRING_QUEUE_STREAMING_PACK(q),UVM_LOW,root)
          end
    

    完整源码 · SHA256:582a41f3fbd378616bd73c580bcceb49750a8f7f7cbed81e70bb4aaceebc2e57

    术语解释 · 兼容配置

    返回Reporting / 命令行 · 迁移清单

    版本适用范围