跳转至

输入查询内容

    本页内容

    日志与调试变化

    日志与调试变化

    核对日志解析、消息路由、录制与调用栈流程。调试输出变化与数据正确性分开判断,兼有其他影响的条目也会出现在对应索引。

    按症状排查 · 迁移核销清单 · 可运行示例

    Object / Factory

    规则 差异与修改方向
    S25 copy(null) 现在计为错误;普通 copy 调用可保留
    用户接口与行为 · 排查回归中对 copy(null) 的依赖;需要浅拷贝/引用拷贝语义的用 uvm_copier::set_recursion_policy 。
    S37 run_test、pre_abort 与命令行配置的执行顺序
    用户接口与行为 · 删除或修正启动日志指出的无效 +uvm_set_* 配置,逐项确认目标组件和读回值。旧 pre_abort 中必须执行的诊断保留在该钩子内,并检查子组件与父组件的调用顺序;需要围绕 run_test 添加处理时,使用 uvm_run_test_callback 的 pre_run_test/post_run_test,不能以 post_run_test 单独判定业务成功。
    S27 自定义打印、比较与录制:检查策略状态和输出
    用户接口与行为 · 保留业务 do_print/do_compare/do_record 钩子;其中调用的 printer/comparer/recorder API 分别按 M02-003 / M02-005 / M02-007 / M02-012 改写。每次独立对象操作核对策略状态,消息过滤按实际 comparer 发出的 MISCMP 路径配置;用返回值、输出内容和字段调用次数验证,不能只按日志数量判定成功。
    S26 工厂 name 覆盖延迟解析:TYPNTF 由 set 时推迟到 create 时
    用户接口与行为 · 保留已注册类型的按名 override;在建立 override 后实际执行一次 create,并检查返回非空及派生类型。若出现 TYPNTF,修正类型名或注册位置,不要仅因 set_override 没报错而忽略创建失败。
    C26 transaction 开始录制与组件回调的参数变化
    用户接口与行为 · transaction 普通 begin_tr(begin_time) 调用可保留;需要父子链接时目标可调用 tr.begin_tr(begin_time, parent_handle)。该 transaction 方法本身非 virtual,业务开始钩子使用 virtual protected function void do_begin_tr();组件侧的 do_begin_tr(uvm_transaction tr, string stream_name, int tr_handle) override 应将旧 integer 句柄形参同步为 int,并保留 super 调用。普通句柄变量无需扩大到 64 位。
    C17 组件配置与 transaction database 改用访问器
    用户接口与行为 · 将 obj.m_get_tr_database() 改为 obj.get_tr_database();派生类的 virtual function uvm_tr_database m_get_tr_database() 同步改名,方法体保留原数据库选择逻辑。通过 set_tr_database(db) 配置时检查读回对象身份。主库仍保留组件 set/get_config_*,无需因其不再报 deprecated warning 而重写调用;print_config_matches 可继续使用,或改用 get/set_print_config_matches。

    Comparer / Printer / Packer / Recorder

    规则 差异与修改方向
    C1 删除无效的打印宽度配置,使用 printer 访问器
    用户接口与行为 · 旧 printer knobs 类型和宽度字段需要改写;保留且行为符合需要的字段可继续使用,访问器改写为可选。
    S8 / C28 自定义比较:检查类型设置和不匹配消息数量
    用户接口与行为 · 类型检查由类型名改为 wrapper,不同类型名共用 wrapper 时可能漏检;顶层 compare 会重置 check_type,show_max=0 改为不限输出。
    S27 uvm_printer emit() 必须配 flush(),新增 UVM/PRINT/NO_FLUSH 检查
    用户接口与行为 · 直接拼装输出时,每次独立输出先 printer.flush(),再 print_field 等填入字段,最后保存 printer.emit() 返回值;下一次输出重新执行同样顺序。普通 obj.sprint(printer) 顶层已负责 flush,可保留该路径。
    S27 自定义 recorder 的对象递归与文本输出
    用户接口与行为 · 仅用于手工递归的 do_record_object override 可移除,由目标基类递归。需要自定义属性时保留该 override,但只保留一次递归入口:选择 super.do_record_object(name, value) 后,删除重复的 value.record(this)。自定义后端仍保留必要的写属性逻辑;文本后处理改为读取 inst_id,并核对嵌套对象身份。
    C19 uvm_tree_printer.newline 字段私有化;uvm_table_printer::calculate_max_widths 删除
    用户接口与行为 · 需要单行输出时使用 uvm_line_printer ;自定义换行规则需在派生 printer 中实现并对照输出。 set_separators 配置对象的起止分隔字符,不替代 newline。删除 calculate_max_widths() 调用后,验证目标自动列宽满足原输出契约。
    C26 重写 recorder、stream、database 方法时同步句柄类型
    用户接口与行为 · 普通 integer 变量存储 int 句柄无需因 64 位仿真而修改,两种整数都为 32 位四态。覆盖虚方法时须匹配目标版签名(参见 M06-007 的 VCS 类型检查);删除已失去调用入口的 m_get_handle override。
    D13 旧数组录制上限失效:显式控制记录项数
    用户接口与行为 · 目标库不再读取旧数组录制上限;需要限制记录项数时,在对象 do_record 中显式控制,并关闭该字段的自动录制。
    D14 旧录制取时开关失效:明确事务时间契约
    用户接口与行为 · 目标默认取时不再由旧 plusarg 切换;显式传入非零 time 可固定调用契约,不能借此恢复任意小数时间精度。

    Phase / Objection / Event

    规则 差异与修改方向
    S36 TEST_DONE 消息移除
    用户接口与行为 · 回归成功条件改为业务完成标志、预期事务数、检查器排空和错误结果同时满足。需要阶段时间戳时可观察 uvm_phase_cb::phase_state_change 的 UVM_PHASE_ENDED 状态;READY_TO_END 可能多次发生,report 总结也可能出现在异常终止路径,均不能单独代替成功判定。同步移除 TEST_DONE 日志匹配依赖。
    S36 / S37 自定义 phase 图:新增位置参数与诊断变化
    用户接口与行为 · 原有合法的四参数 add 调用可保留。调整 phase 图时保持 with/after/start_with 互斥、with/before/end_with 互斥,新增参数使用命名实参避免位置混淆。日志解析将 PH_ADD_PHASE 更新为 PH_BAD_ADD,并验证前驱/后继的实际执行顺序。
    S36 uvm_event 系 get_type_name() 返回值变化
    用户接口与行为 · 按 get_type_name() == "uvm_event" 分支的代码,若目的是判断类型,改为向实际 uvm_event#(T) 句柄 $cast 并检查返回值;若仅用于日志展示,则接受目标输出 uvm_pkg::uvm_event#(T),更新字符串匹配。不要靠该字符串区分不同的 T。
    S36 objection trace(+UVM_OBJECTION_TRACE)消息格式变化
    用户接口与行为 · 保留以 report ID 为入口的 trace 解析;旧依赖列位置的正则需加入位于操作数量之后、objection(s) 之前的 objection 名称字段,并避免将其当作对象路径。使用条目中的两版 trace 样本更新期望格式,核对 raise/drop 的对象、计数和 phase;统计不能依赖固定空格数。

    Reporting / 命令行

    规则 差异与修改方向
    S7 消息宏重写:新增 UVM_NO_ACTION 短路检查
    用户接口与行为 · 依赖 catcher 处理 NO_ACTION 消息时需调整入口或策略;消息宏会在进入 catcher 之前短路。
    S30 uvm_report_warning/uvm_report_error 默认 verbosity 改为 UVM_NONE
    用户接口与行为 · 核对直调 warning/error 的消息策略。2.0 中显式传高 verbosity 也不会恢复旧过滤,需通过 report action 或经过验证的 catcher 控制输出。
    S30 非 INFO 消息不再做 verbosity 过滤
    用户接口与行为 · 若有用 verbosity 压制 WARNING 的用法,改为明确的 action 或经过验证的 catcher 策略;仅 severity override 为 INFO 不会恢复入口处的过滤。
    C10b 删除:reporting 类中的 deprecated 方法
    用户接口与行为 · 把对象 get_report_server() 调用改为 uvm_report_server::get_server()。自定义格式移到 compose_report_message,自定义 action 处理移到 execute_report_message;新参数为 uvm_report_message,不能只把旧方法改名后保留原形参。具体目标签名与默认行为保留方式见下方。
    S31 report_summarize 签名与文件路由行为变化
    用户接口与行为 · stdout 使用默认参数或 UVM_STDOUT;显式文件摘要后,按后续输出需求保存并恢复报告文件配置。
    S31 UVM_FILE 相关常量值变化(UVM_STDOUT=1 → 32'h8000_0001)
    用户接口与行为 · 表达 UVM 标准输出时用 UVM_STDOUT 替代硬编码 1,比较改为 handle == UVM_STDOUT;标准错误用 UVM_STDERR。保留 $fopen 返回的实际句柄,不要把目标文件描述符与旧 MCD 掩码按位拼接。report_summarize 的 stdout 调用按 M04-007 省略参数或显式传 UVM_STDOUT。
    S36 消息时间戳默认由 $time 改为 $realtime
    用户接口与行为 · 日志时间戳解析由仅接受整数改为允许实际 $realtime 输出的小数形式;比较时按日志中的时间单位归一化,不截掉小数部分。时间解析与 severity、ID、消息内容分别处理,再更新回归基线;报告调用本身可保留。
    无扫描规则 report hooks 与 1.1d-compat 方法在 2.0 保留且不再受 UVM_NO_DEPRECATED 控制
    用户接口与行为 · 无。
    S10 +UVM_STACKTRACE 不再输出报告调用栈(S10)
    用户接口与行为 · 目标库仍解析 +UVM_STACKTRACE,但不再调用 $stack;依赖它定位报告来源的流程需要单独处理。

    Config DB / Resource DB

    规则 差异与修改方向
    D10 自定义 resource_converter 已删除
    用户接口与行为 · 改用派生资源类重写 m_value_as_string() / convert2string() ;未启用过该宏则无需改动。
    S41 Resource DB 追踪需显式开启
    用户接口与行为 · 目标 Resource DB 不再沿用 Verdi 自动追踪钩子;需要访问日志时显式加 +UVM_RESOURCE_DB_TRACE。

    Sequence / Sequencer

    规则 差异与修改方向
    C21 starting_phase 的直接赋值与锁定限制
    用户接口与行为 · 把 seq.starting_phase = phase 改为 seq.set_starting_phase(phase),读取改为 seq.get_starting_phase()。在 sequence 启动及相关 DAP 锁定前完成设置;锁定后的诊断应修正设置时机,不只修改消息过滤。

    RAL(寄存器模型)

    规则 差异与修改方向
    S38 后门访问告警:not contained within map 'Backdoor'
    用户接口与行为 · 字段调用不要求改成手工位操作。需要寄存器访问语义时保留 field.read/write,确认实际数据与副作用;若已定位为本库问题且必须消除告警,使用该最小实验核对工具修复。仅需直接取值或赋值时可选 peek/poke。reg 读写显式传伪 map 的情况按下方改为 null。
    S14 支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问(S14)
    用户接口与行为 · 字段访问需验证真实 byte strobe 与相邻硬件值;必要时使用显式总线或 frontdoor 访问并只预测目标字段。
    无扫描规则 失败访问不再更新寄存器镜像,新增 PREDICT_NOK 提示
    用户接口与行为 · 失败处理和 scoreboard 必须检查 status;不要继续依赖 1.2 失败后被更新的镜像。该提示不是要求无条件重新 predict,恢复值应由成功重试或可靠观测确定。

    TLM

    规则 差异与修改方向
    S43 TLM 接口未实现错误消息文本变化
    用户接口与行为 · 日志正则若匹配旧文案需放宽(建议匹配消息 id 而非正文)。

    Field Automation / 版本宏

    规则 差异与修改方向
    S4 版本宏与版本字符串的迁移
    用户接口与行为 · 版本分支应保持原来的精确版本或能力判断意图;旧版本宏不能统一替换为 POST 宏。

    Component / VCS 集成

    规则 差异与修改方向
    无扫描规则 uvm_driver 新增 seq_item_port 未连接告警(DRVCONNECT)
    用户接口与行为 · 正常连接的 driver 无需改动;确不需连接的,在构造函数加 set_report_severity_id_action(UVM_WARNING, "DRVCONNECT", UVM_NO_ACTION); (VCS 2.0 内置 README "Migrating from 1.2" 第 2 条官方建议)。
    D8 Verdi native_dumping 录制文件已删除
    用户接口与行为 · 引用旧 native_dumping 文件或安装其 recorder 的脚本,迁移到目标安装提供的标准 uvm_custom_install_verdi_recorder.sv 流程,并核对 DPI 与启动配置。在实际 Verdi 中确认所需事务、字段及父子关系完整后,再移除旧脚本。未引用这些旧文件的流程无需因此替换文件;现有实测未覆盖全部 Verdi 工作流。

    版本适用范围