跳转至

输入查询内容

    本页内容

    +UVM_STACKTRACE 不再输出报告调用栈(S10)

    影响范围

    脚本传入 +UVM_STACKTRACE 并依赖报告发生时的调用栈。普通 UVM 消息输出不因本条停止,缺少调用栈也不能用于判断测试通过。

    具体差异

    VCS 1.2 在 DISPLAY 时按选定 severity 输出调用栈。目标库仍设置 debug/info/warn/error/fatal 标志,但移除了消费这些标志的 $stack 调用。该结论来自两版源码,尚未独立对跑验证调用栈输出。

    修改方案

    将依赖 +UVM_STACKTRACE 的日志提取和排障步骤列为调试流程迁移项。提交最小触发测试、完整 VCS/Verdi 版本、编译/运行参数及缺少调用栈的日志片段,通过现有产品支持渠道确认目标构建可用的报告断点或调用栈方案。当前没有经过本项目验证、可直接替换此选项的通用命令;在方案确认前保留可复现问题的 1.2 调试构建。

    兼容措施与范围:兼容措施不恢复报告调用栈;当前没有已验证的通用替代命令,保留可复现问题的调试路径。

    已知限制KI-013

    迁移后验证

    选择能稳定触发一条已知 severity 消息的最小测试,在两库使用相同 +UVM_STACKTRACE 设置,分别检查消息和调用栈是否出现。升级构建后重复此检查;只有消息重新带出调用栈或经过验证的替代调试流程能定位同一调用点,才核销调试能力迁移。

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

    补充查阅

    扫描定位与记录结果

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

    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules S10
    

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

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

    源码与标准依据

    核查方式:源码核对。未单独进行 VCS 行为实测。

    VCS 内置 UVM-1.2uvm_report_server.svh:664uvm_report_server.svh:738–742(解析选项并在 DISPLAY 路径调用 $stack)

    VCS 内置 uvm-ieee-2020-2.0uvm_report_server.svh:646(仍解析选项);同文件无 $stack 调用

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

    src/vcs-uvm-1.2/base/uvm_report_server.svh
        if(first) begin
           clp = uvm_cmdline_processor::get_inst();
    
           void'(clp.get_arg_matches("+UVM_STACKTRACE", stack_args));
           //Take into account if option is specified multiple times.
           foreach(stack_args[i]) begin
              string temp;
              temp = stack_args[i].substr(16, stack_args[i].len()-1);
              // In case no additinal argument is specified
              if(temp == "") begin
                 error = 1; fatal = 1;
              end
              uvm_split_string(temp, ",", split_vals);
              //For all the comma sepearted options
              foreach(split_vals[i]) begin
                 case(split_vals[i])
                   "default" : begin error = 1; fatal = 1; end
                   "debug"   : begin debug = 1; end
                   "info"    : begin info  = 1; end
    

    src/vcs-uvm-1.2/base/uvm_report_server.svh
           uvm_severity l_severity;
           l_severity = report_message.get_severity();
           case (l_severity)
              UVM_DEBUG  : if(debug) $stack;
              UVM_INFO   : if(info)  $stack;
              UVM_WARNING: if(warn)  $stack;
              UVM_ERROR  : if(error) $stack;
              UVM_FATAL  : if(fatal) $stack;
           endcase 
           `endif
          $display("%s", composed_message);
        end
    
        // LOG action
        // if log is set we need to send to the file but not resend to the
        // display. So, we need to mask off stdout for an mcd or we need
        // to ignore the stdout file handle for a file handle.
        if(report_message.get_action() & UVM_LOG)
          if( (report_message.get_file() == 0) || 
    

    完整源码 · SHA256:cbcbf1ab721a8fdc21803b10a978096ca43ff300a5f96d85a2ede241942adcea

    src/vcs-uvm-ieee-2020-2.0/base/uvm_report_server.svh
        if(first) begin
           clp = uvm_cmdline_processor::get_inst();
    
           void'(clp.get_arg_matches("+UVM_STACKTRACE", stack_args));
           //Take into account if option is specified multiple times.
           foreach(stack_args[i]) begin
              string temp;
              temp = stack_args[i].substr(16, stack_args[i].len()-1);
              // In case no additinal argument is specified
              if(temp == "") begin
                 error = 1; fatal = 1;
              end
              uvm_split_string(temp, ",", split_vals);
              //For all the comma sepearted options
              foreach(split_vals[i]) begin
                 case(split_vals[i])
                   "default" : begin error = 1; fatal = 1; end
                   "debug"   : begin debug = 1; end
                   "info"    : begin info  = 1; end
    

    完整源码 · SHA256:be451854e400aaa5f89cbc5ffe30e9a5a4f7acadb9a10f63af848947c2bc7159

    术语解释 · 兼容配置

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

    版本适用范围