跳转至

输入查询内容

    差异查询

    按 API、宏名或症状查找变化;默认显示用户接口与行为,包含公开扩展接口。

    用户接口变化总览 · 字段自动化 · Sequence 动作宏

    筛选说明

    处理级别:命中后修改=使用了条目所述旧写法时改造;按条件核对=先判断配置与调用路径;可选采用/无需改动=不要求为本条强制改写。

    兼容机制:标签表示由哪一层提供支持,保留范围见条目。无需启用不表示没有行为差异;无兼容恢复表示需要按条目改写或验证。兼容措施说明

    同一差异只列一个主条目,旧 ID 可用于查询;条目数不等于待改代码数。

    M01-001
    事务开始/结束事件改用 get_event_pool()
    编译断点

    item.begin_event → item.get_event_pool().get("begin") ; item.end_event 同理。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C2 · 启发式
    M01-002
    component kill/status 删除与进程收尾
    编译断点

    先按接收者类型确认旧 component 接口;正常收尾改用显式完成握手与成对 objection。复位重启等确需跳转的流程按 M03-002 / M03-009 设计目标 phase,并自行处理事务、锁和检查器状态。仅对用户自己管理的进程使用 process::kill ,同时释放相关资源。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C3 · 启发式
    M01-004
    自定义 factory 子类需要补充虚方法
    编译断点

    直接继承 uvm_factory 时补 is_type_name_registered、is_type_registered、set_type_alias 和 set_inst_alias;四个方法必须使用同一注册/别名状态。能沿用默认工厂算法时,可继承 uvm_default_factory 并保留业务 override,具体签名与选择条件见下方代码。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C12 · 文本匹配
    M01-005
    copy(null) 现在计为错误;普通 copy 调用可保留
    日志/调试变化

    排查回归中对 copy(null) 的依赖;需要浅拷贝/引用拷贝语义的用 uvm_copier::set_recursion_policy 。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S25 · 启发式
    M01-007
    禁用自动字段配置:旧开关改为组件方法
    编译断点 高风险 · 静默/数据

    检索 disable_apply_cfg_settings / UVM_DISABLE_APPLY_CFG_SETTINGS 使用点并改 override;如脚本依赖 +UVM_DISABLE_APPLY_CFG_SETTINGS 需删除。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D5 · 文本匹配
    M01-008
    run_test、pre_abort 与命令行配置的执行顺序
    日志/调试变化 其他行为变化

    删除或修正启动日志指出的无效 +uvm_set_* 配置,逐项确认目标组件和读回值。旧 pre_abort 中必须执行的诊断保留在该钩子内,并检查子组件与父组件的调用顺序;需要围绕 run_test 添加处理时,使用 uvm_run_test_callback 的 pre_run_test/post_run_test,不能以 post_run_test 单独判定业务成功。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S37 · 启发式
    M01-009
    自定义打印、比较与录制:检查策略状态和输出
    日志/调试变化 其他行为变化

    保留业务 do_print/do_compare/do_record 钩子;其中调用的 printer/comparer/recorder API 分别按 M02-003 / M02-005 / M02-007 / M02-012 改写。每次独立对象操作核对策略状态,消息过滤按实际 comparer 发出的 MISCMP 路径配置;用返回值、输出内容和字段调用次数验证,不能只按日志数量判定成功。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S27 · 启发式
    M01-010
    工厂 name 覆盖延迟解析:TYPNTF 由 set 时推迟到 create 时
    日志/调试变化 其他行为变化

    保留已注册类型的按名 override;在建立 override 后实际执行一次 create,并检查返回非空及派生类型。若出现 TYPNTF,修正类型名或注册位置,不要仅因 set_override 没报错而忽略创建失败。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S26 · 启发式
    M01-012
    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 位。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:C26 · 启发式
    M01-014
    自定义 coreservice:新增虚方法与初始化时机
    编译断点 高风险 · 静默/数据

    自定义 coreservice 补齐目标签名。只有库尚未初始化时,uvm_init(custom_cs) 才能安装;不能把“用户 initial 第一行”视为满足此前提。默认 VCS Verdi 集成在 src/vcs-uvm-ieee-2020-2.0/base/uvm_globals.svh:629 / :643 的静态变量初始化调用 root getter,实测 initial 中安装被忽略;仅关闭 UVM_NO_VERDI_RECORD 对应集成后,本探针安装成功。关闭录制不是通用迁移要求,有 Verdi 需求时优先通过现有 coreservice 的服务访问器定制单项能力,整体替换须单独设计初始化与已有引用的迁移。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C23 · 启发式
    M01-015
    组件配置与 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。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C17 · 文本匹配
    M01-016
    callback 注册与重复 catcher 调用次数
    高风险 · 静默/数据

    注册按句柄管理;反复 get_all 前清空输出队列。utility_probe 先注册全局 catcher 再注册实例 catcher,全局调用次数为 1 / 2,实例均为 1;先完成实例注册再添加全局 catcher,两库均各调用一次。这个顺序替代仅覆盖初始化后注册集合固定的场景;后续动态创建实例或增删 catcher 必须重新核对,不能以 get_all 的去重结果推断执行路径只调用一次(S23)。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S23 · 启发式
    M02-001
    pack 位流格式改变:检查外部接收端与历史数据
    编译断点 高风险 · 静默/数据

    同版 pack/unpack 仍需验证实际对象类型、空对象和数组长度;跨边界流必须与保留的 1.2 golden 逐位对照。可用 uvm_compat_packer 配合显式 do_pack/do_unpack 固定契约,或统一升级两端格式。不能将替换 packer 本身作为位流兼容性验收。

    用户接口与行为 · 按条件核对 · compat 包扫描:S6 · 文本匹配 / S44 · 启发式
    M02-002
    uvm_packer 状态存取 API 重命名与签名变更
    编译断点 其他行为变化

    把 get_bits/get_bytes/get_ints 改为 get_packed_bits/get_packed_bytes/get_packed_ints,把 put_ 改为 set_packed_ ,reset() 改为 flush();同名 get_packed_bits 的返回值调用必须改为 ref 数组调用。目标状态流包含迭代器元数据,外部位流协议按 M02-001 单独迁移。

    用户接口与行为 · 命中后修改 · compat 包扫描:C18 · 启发式
    M02-003
    删除无效的打印宽度配置,使用 printer 访问器
    编译断点 日志/调试变化

    删除旧 knobs 类型引用,改通过 printer 访问器配置。已被 1.2 忽略的宽度赋值可直接删除;只有确有输出截断需求时才另行实现。保留字段按实际 printer 类型选访问器: mcd/prefix/show_radix/default_radix 对应 set_file/set_line_prefix/set_radix_enabled/set_default_radix ; set_indent 、 set_separators 需核对具体 printer 子类,不能对任意基类句柄照搬。

    用户接口与行为 · 命中后修改 · 主库保留扫描:C1 · 文本匹配
    M02-004
    打印整数时显式传位宽,避免把 UVM_HEX 当宽度
    编译断点 高风险 · 静默/数据

    保留现有 do_print 的字段选择,按目标原型改写,例如 `uvm_print_named_int("nm", val, $bits(val), UVM_HEX, integral, printer) ;或直接调用 printer.print_field_int("nm", val, $bits(val), UVM_HEX) (不超过 64 位)。已有 field automation 的字段不要再重复注册或打印;改用 field 宏前需单独明确 copy/compare/pack 等操作意图。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C13 · 文本匹配 / S16 · 启发式
    M02-005
    自定义比较:检查类型设置和不匹配消息数量
    编译断点 高风险 · 静默/数据 日志/调试变化

    uvm_comparer::init() 改用 uvm_comparer::get_default() 获取默认实例;需要清理状态时另调 flush() 。 不能用较大的 show_max 恢复静默 ,它只放宽输出数量;可在 severity 为 UVM_INFO 时将 comparer verbosity 设为高于报告阈值,或在报告配置中针对 MISCMP 设置 action,并保留 compare 返回值与 result 检查。顶层 obj.compare(rhs, comparer) 对显式传入和默认 comparer 都会先 flush() ,本实现将 check_type 重置为 1;确需跨类型比较时,可先 flush() 、再 set_check_type(0) ,然后直接调用 comparer.compare_object(name, lhs, rhs) ,由调用方管理独立比较之间的清理。

    用户接口与行为 · 按条件核对 · 主库保留扫描:S8 · 文本匹配 / C28 · 启发式
    M02-006
    uvm_printer emit() 必须配 flush(),新增 UVM/PRINT/NO_FLUSH 检查
    日志/调试变化 其他行为变化

    直接拼装输出时,每次独立输出先 printer.flush(),再 print_field 等填入字段,最后保存 printer.emit() 返回值;下一次输出重新执行同样顺序。普通 obj.sprint(printer) 顶层已负责 flush,可保留该路径。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S27 · 启发式
    M02-007
    自定义 recorder 的对象递归与文本输出
    日志/调试变化 其他行为变化

    仅用于手工递归的 do_record_object override 可移除,由目标基类递归。需要自定义属性时保留该 override,但只保留一次递归入口:选择 super.do_record_object(name, value) 后,删除重复的 value.record(this)。自定义后端仍保留必要的写属性逻辑;文本后处理改为读取 inst_id,并核对嵌套对象身份。

    用户接口与行为 · 按条件核对 · 主库保留扫描:S27 · 启发式
    M02-008
    uvm_tree_printer.newline 字段私有化;uvm_table_printer::calculate_max_widths 删除
    编译断点 日志/调试变化

    需要单行输出时使用 uvm_line_printer ;自定义换行规则需在派生 printer 中实现并对照输出。 set_separators 配置对象的起止分隔字符,不替代 newline。删除 calculate_max_widths() 调用后,验证目标自动列宽满足原输出契约。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C19 · 启发式
    M02-012
    重写 recorder、stream、database 方法时同步句柄类型
    编译断点 日志/调试变化

    普通 integer 变量存储 int 句柄无需因 64 位仿真而修改,两种整数都为 32 位四态。覆盖虚方法时须匹配目标版签名(参见 M06-007 的 VCS 类型检查);删除已失去调用入口的 m_get_handle override。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:C26 · 启发式
    M02-016
    旧数组录制上限失效:显式控制记录项数
    编译断点 日志/调试变化

    先确认需要记录全部元素还是限定元素;需要上限时,给对应字段的 field FLAG 加 UVM_NORECORD ,在 do_record(uvm_recorder recorder) 中按显式上限调用 record_field_int/record_object 等对应接口。调用旧 getter 的代码改读自己维护的配置;验证记录内容后再删除旧 plusarg。已有手工录制字段不要同时启用自动录制。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:D13 · 文本匹配
    M02-017
    旧录制取时开关失效:明确事务时间契约
    日志/调试变化

    若只需目标默认取时,删除失效 plusarg 后核对实际事务时间;若已有明确的整数时间契约,在调用 stream.open_recorder(name, recorded_time, type_name) 时传入按项目单位换算的非零 time。原先依赖小数分辨率或 Verdi 展示的路径需核对源 timeunit/timeprecision、time 转换和后端;没有已验证的通用开关替换。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:D14 · 文本匹配
    M03-001
    event 回调改用 uvm_callbacks 注册和删除
    编译断点 其他行为变化

    确认接收者为 event 后替换注册/删除调用。旧 ev.add_callback(cb) 对应 uvm_callbacks#(uvm_event#(T), uvm_event_callback#(T))::add(ev, cb) ;旧 ev.add_callback(cb, 0) 表示插到队首,须显式传第三参 UVM_PREPEND 。删除用同一特化类型的 ::delete(ev, cb) 。核对回调顺序及 pre_trigger 的阻止触发返回值。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C4 · 启发式
    M03-002
    stop 机制整体删除:stop_phase / enable_stop_interrupt / stop_request / force_stop
    编译断点 其他行为变化

    把旧 stop_phase 中必须执行的收尾任务移到显式停止握手:停止产生新事务,等待在途事务与检查器排空,再成对 drop 实际 phase 的 objection。 end_prematurely() / jump() 会改变 phase 执行流程,不能自动完成这些任务;仅在确需提前结束或重启阶段时单独设计并验证。旧 stop_timeout 应改为握手超时检查,不能直接等同于整个测试的 set_timeout。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C3 · 启发式
    M03-003
    旧 test_done 不再保持 run 存活
    高风险 · 静默/数据

    检查 uvm_test_done 相关结束控制,保留 raise/drop 的配对、计数与收尾条件,改用实际 run_phase(uvm_phase phase) 参数调用 phase.raise_objection(this) / phase.drop_objection(this) 。 phase.get_objection() 返回 objection 对象,不是 phase 句柄;sequence 中需要由调用方传入 phase,或确认 get_starting_phase() 返回了所需的非空 phase。

    用户接口与行为 · 命中后修改 · 主库保留扫描:S2 · 文本匹配
    M03-004
    TEST_DONE 消息移除
    日志/调试变化

    回归成功条件改为业务完成标志、预期事务数、检查器排空和错误结果同时满足。需要阶段时间戳时可观察 uvm_phase_cb::phase_state_change 的 UVM_PHASE_ENDED 状态;READY_TO_END 可能多次发生,report 总结也可能出现在异常终止路径,均不能单独代替成功判定。同步移除 TEST_DONE 日志匹配依赖。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S36 · 启发式
    M03-005
    uvm_phase::max_ready_to_end_iter 公共字段删除,改为访问器;get_ready_to_end_count() 删除
    编译断点 其他行为变化

    将 phase.max_ready_to_end_iter = n 改为 phase.set_max_ready_to_end_iterations(n),读字段改为 phase.get_max_ready_to_end_iterations()。旧 get_ready_to_end_count() 无等价公开替代;若它参与退出判断,改为明确的业务完成条件,若仅用于统计则在自己的回调中计数。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C20 · 启发式
    M03-006
    通过 get_objection() 获取 task phase 的 objection
    其他行为变化

    用 get_objection() 代替直接访问 phase_done 字段;不要假设其非空。

    用户接口与行为 · 按条件核对 · 无需启用扫描:C20 · 启发式
    M03-008
    自定义 phase 图:新增位置参数与诊断变化
    日志/调试变化 其他行为变化

    原有合法的四参数 add 调用可保留。调整 phase 图时保持 with/after/start_with 互斥、with/before/end_with 互斥,新增参数使用命名实参避免位置混淆。日志解析将 PH_ADD_PHASE 更新为 PH_BAD_ADD,并验证前驱/后继的实际执行顺序。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S36 · 启发式 / S37 · 启发式
    M03-009
    phase.jump(null) 与跳转状态查询
    其他行为变化

    原本用 jump(null) 取消或结束运行的代码需改写:正常结束按 M03-003 释放实际 phase 的 objection,需要跳转时传入明确且合法的前驱/后继 phase。仅未激活节点的 set_jump_phase(null) 路径用于清除挂起状态;不要将其推广至激活节点。查询方向使用 is_jumping_forward()/is_jumping_backward(),提前结束状态使用 is_ending_prematurely()。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S28 · 启发式
    M03-011
    uvm_event#(T) trigger 默认数据机制:新增 set/get_default_data,reset 清数据
    高风险 · 静默/数据

    需要在 reset 后使用上一次数据时,在 reset 前读取并保存到用户变量;后续消费该变量,不再向已 reset 的 event 取旧值。若业务需要默认数据,显式设置 set_default_data 并按默认值语义读取;两种意图不能混用。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S29 · 启发式
    M03-012
    uvm_event 系 get_type_name() 返回值变化
    日志/调试变化

    按 get_type_name() == "uvm_event" 分支的代码,若目的是判断类型,改为向实际 uvm_event#(T) 句柄 $cast 并检查返回值;若仅用于日志展示,则接受目标输出 uvm_pkg::uvm_event#(T),更新字符串匹配。不要靠该字符串区分不同的 T。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S36 · 启发式
    M03-014
    objection trace(+UVM_OBJECTION_TRACE)消息格式变化
    日志/调试变化

    保留以 report ID 为入口的 trace 解析;旧依赖列位置的正则需加入位于操作数量之后、objection(s) 之前的 objection 名称字段,并避免将其当作对象路径。使用条目中的两版 trace 样本更新期望格式,核对 raise/drop 的对象、计数和 phase;统计不能依赖固定空格数。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S36 · 启发式
    M04-001
    消息宏重写:新增 UVM_NO_ACTION 短路检查
    高风险 · 静默/数据 日志/调试变化

    需要 catcher 统计或修改的消息,入口 action 不应先设为 UVM_NO_ACTION;让消息进入 catcher,再由 catcher 按业务规则处理并决定继续 THROW 或停止 CAUGHT。不依赖 catcher 的禁用消息可保持 NO_ACTION;改写后检查每条消息的 catcher 次数及最终计数/路由,过滤发生在不同阶段时不可只对照屏幕文本。 自定义消息宏需要接入目标报告流程时,按 uvm_report_begin / uvm_report_end 的成对结构封装原消息生成逻辑,并保留 severity、ID、verbosity 与 action 意图;使用该包装不会恢复 NO_ACTION 消息进入 catcher 的旧路径。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S7 · 文件级同现
    M04-002
    uvm_report_warning/uvm_report_error 默认 verbosity 改为 UVM_NONE
    日志/调试变化

    核对直调 warning/error 的消息策略。2.0 中显式传高 verbosity 也不会恢复旧过滤,需通过 report action 或经过验证的 catcher 控制输出。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S30 · 启发式
    M04-003
    非 INFO 消息不再做 verbosity 过滤
    日志/调试变化

    若有用 verbosity 压制 WARNING 的用法,改为明确的 action 或经过验证的 catcher 策略;仅 severity override 为 INFO 不会恢复入口处的过滤。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S30 · 启发式
    M04-004
    旧全局配置、timeout 和 stop 函数需要改写
    编译断点 高风险 · 静默/数据

    全局配置调用优先改为 uvm_root::get().set_config_int/object/string(...) ,保留原实参与 object 的 clone 标志;这些组件方法在目标主库仍存在(M01-015),不需要 deprecated 开关。统一改用 config_db 时,必须同步类型、作用域和克隆契约,详见下面的映射。timeout 改 uvm_root::get().set_timeout(...) ;stop 的收尾超时按 M03-002 单独设计。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C10a · 文本匹配 / C10c · 启发式
    M04-005
    删除:reporting 类中的 deprecated 方法
    编译断点 日志/调试变化

    把对象 get_report_server() 调用改为 uvm_report_server::get_server()。自定义格式移到 compose_report_message,自定义 action 处理移到 execute_report_message;新参数为 uvm_report_message,不能只把旧方法改名后保留原形参。具体目标签名与默认行为保留方式见下方。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C10b · 文本匹配
    M04-007
    report_summarize 签名与文件路由行为变化
    日志/调试变化 其他行为变化

    推荐省略实参或显式用 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 可见性及恢复写法,未以捕获消息替代实际落盘集成验收。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S31 · 启发式
    M04-008
    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。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S31 · 启发式
    M04-009
    消息时间戳默认由 $time 改为 $realtime
    日志/调试变化

    日志时间戳解析由仅接受整数改为允许实际 $realtime 输出的小数形式;比较时按日志中的时间单位归一化,不截掉小数部分。时间解析与 severity、ID、消息内容分别处理,再更新回归基线;报告调用本身可保留。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S36 · 启发式
    M04-011
    get_arg_matches 重用统一匹配接口,/regex/ 仍保留正则语义
    其他行为变化

    正常 /regex/ 用法无需为此改写为 glob。自行编译且关闭 DPI 的环境单独核对匹配支持范围。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S41 · 启发式
    M04-013
    uvm_object_globals 字段标志位重构
    高风险 · 静默/数据

    将硬编码 FLAG 数字改为对应的 UVM_COPY/COMPARE/PRINT/PACK/RECORD 及禁用位符号,不能按旧数字直接复制掩码。只禁用部分操作的声明按 M09-002 保留禁用位并显式启用其他所需操作;自动配置等自定义位另外核对目标编码。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S3 · 启发式
    M04-014
    report hooks 与 1.1d-compat 方法在 2.0 保留且不再受 UVM_NO_DEPRECATED 控制
    日志/调试变化

    无。

    用户接口与行为 · 无需改动 · 主库保留扫描:无对应规则
    M04-016
    删除:uvm_vector_to_string;uvm_cmdline_proc 由 const 变为可写
    编译断点

    uvm_vector_to_string(value, size, radix, radix_str) 改为 uvm_bitstream_to_string(value, size, radix, radix_str),原实参顺序与格式意图保持;例如 text = uvm_bitstream_to_string(value, 32, UVM_HEX, "h")。不要借此改用 int 截断宽值。uvm_cmdline_proc 的普通只读使用可保留。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D7 · 文本匹配
    M04-018
    +uvm_set_config_int 宽值经 32 位字符串转换被截断
    高风险 · 静默/数据

    目标版本的宽配置使用 +uvm_set_config_bitstream=uvm_test_top,wide_value,0x1234567801234567 ,该替代已保持完整 64 位;也可在测试中以明确类型调用 config_db::set。必须断言实际读回配置,不能只看 Applying config 日志。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S18 · 启发式
    M04-019
    +UVM_STACKTRACE 不再输出报告调用栈(S10)
    日志/调试变化

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

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S10 · 文本匹配
    M05-001
    uvm_resource#(T) 自管理接口 set() / set_override() / get_by_name() / get_by_type() 被删除
    编译断点

    rsrc.set() → uvm_resource_pool::get().set_scope(rsrc, scope) rsrc.set_override(ovr) :默认 name+type 双置顶用 rp.set_override(rsrc, scope) ;仅 name/type 时分别用 set_name_override / set_type_override ;ovr=0 用 set_scope 。保留原掩码意图,不能无条件替换为双置顶。 uvm_resource#(T)::get_by_name(scope, name, rpterr) → uvm_resource_db#(T)::get_by_name(scope, name, rpterr) uvm_resource#(T)::get_by_type(scope, type_handle) :仅在 type_handle 就是 T 的类型句柄时改用 uvm_resource_db#(T)::get_by_type(scope) ;动态类型句柄应保留 pool 查询和 cast/null 检查。 自定义资源子类型中使用了 `UVM_RESOURCE_GET_FCNS 的,删除该宏调用,改用 uvm_resource_db / uvm_resource_pool 查询。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C7 · 启发式
    M05-002
    资源构造 scope 仍有效;对象 set() 删除后改由 pool 入池
    编译断点 其他行为变化

    显式 new(name, "scope") 可保留;将资源对象的 rsrc.set() 改为 rp.set_scope(rsrc, "scope") ,或使用主库保留的 rp.set(rsrc) 。普通资源两版都必须入池才能由数据库查询;无需仅为迁移删除构造 scope。连续示例见 M05-001,未直接操作 scope 的普通 config_db 用户无需为本条改写。

    用户接口与行为 · 命中后修改 · 主库保留扫描:C7 · 启发式
    M05-003
    uvm_config_db#(T)::set 改进非空 context 下 /regex/ 拼接,优先级来源改为 coreservice
    其他行为变化

    常规 uvm_config_db#(T)::set(cntxt, "env.*", ...) 用法无需改动; uvm_resource_base::default_precedence 在默认 coreservice 下仍有效,新代码推荐 uvm_resource_pool::set_default_precedence() 。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S42 · 启发式
    M05-004
    resource precedence 的设置时机与保留写法
    高风险 · 静默/数据

    旧字段写法无强制迁移;新代码推荐 uvm_resource_pool::set_default_precedence(...) 或 uvm_coreservice_t::get().set_resource_pool_default_precedence(...) ,以及 rp.set_precedence(r, p) / rp.get_precedence(r) 。后一组实例级操作在资源入池后执行。

    用户接口与行为 · 按条件核对 · 主库保留扫描:S5 · 启发式 / S15 · 启发式
    M05-005
    uvm_resource_pool 重构:set 系列改名 set_scope/set_override,新增 get_scope/delete 等 API
    高风险 · 静默/数据

    rp.set(rsrc) / 默认双置顶 rp.set_override(rsrc) 可继续使用。注意 2.0 rp.set(rsrc, override) 只检查 override 是否非零,旧 name-only/type-only 掩码会变为双置顶,须显式改用对应的单侧 override API。需要删除资源时使用新 delete() 。

    用户接口与行为 · 按条件核对 · 主库保留扫描:S15 · 启发式
    M05-008
    自定义 resource_converter 已删除
    编译断点 日志/调试变化

    改用派生资源类重写 m_value_as_string() / convert2string() ;未启用过该宏则无需改动。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D10 · 文本匹配
    M05-010
    resource_db::get_by_name 在 2.0 可能选中较低优先级资源(S11)
    高风险 · 静默/数据

    审计直接使用 resource_db / resource_pool 按名查询并依赖优先级的代码;可使用 lookup_name(scope, name, type_handle) 后 get_highest_precedence() 并检查 null、转换类型。该替代不复刻 DB 的全部审计记录,应在封装边界采用。不要仅因 config_db 内部使用资源池就推断普通 config_db::get 同样受影响。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S11 · 启发式
    M05-011
    资源特化类删除返回子类型的静态 get_by_name/get_by_type
    编译断点

    按值类型使用 resource_db#(T)::get_by_name/get_by_type;结果为 uvm_resource#(T)。需要原特化子类型时显式检查 null 与 cast,不要假设池中同型资源都是该子类。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C16 · 文本匹配
    M05-012
    Resource DB 追踪需显式开启
    日志/调试变化

    需要 Resource DB 访问日志时,在仿真命令加入 +UVM_RESOURCE_DB_TRACE ;代码控制可在相关访问前调用 uvm_resource_db_options::turn_on_tracing() 。已有显式开启配置可保留;不需要该日志的环境无需增加开关。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S41 · 启发式
    M06-001
    内置 sequence 库整体删除(uvm_random_sequence / uvm_exhaustive_sequence / uvm_simple_sequence)
    编译断点 高风险 · 静默/数据

    将旧内置类型改为自己的具体 sequence;需要候选集随机选择时用 uvm_sequence_library,显式登记候选类型并检查选中次数。字符串 default_sequence 改为 phase 路径下的 wrapper/instance 配置,完整代码见 M06-002;普通显式启动可写 seq = my_seq::type_id::create("seq"); seq.start(target_seqr)。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S1 · 启发式 / D11 · 文本匹配
    M06-002
    字符串 default_sequence 不再启动激励
    编译断点 高风险 · 静默/数据

    全局扫描 default_sequence 字符串 config、 count / max_random_count 等字段及 add_sequence 等调用,迁移到 phase default sequence( uvm_config_db#(uvm_object_wrapper)::set(this, "<path>.<phase>_phase", "default_sequence", ...) )。已是 phase 式写法的 不用动 。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S1 · 启发式
    M06-003
    uvm_sequence_base 废弃的 sequence-library 方法删除
    编译断点

    旧库管理不再放在 uvm_sequence_base 上:把候选类型登记移到具体 uvm_sequence_library,通过 add_typewide_sequence 登记类型,用 get_sequence(idx) 查询并检查索引。若只启动固定 sequence,直接 type_id::create 后 start(target_seqr),避免仅为保留旧方法名再造序列库。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C22 · 启发式
    M06-004
    不要直接 new sequence/sequencer 抽象基类
    编译断点

    直接构造 uvm_sequence_base 的代码改用具体业务 sequence,或在确需通用具体 sequence 时使用 uvm_compat_proxy_sequence#(REQ,RSP) 。直接构造 uvm_sequencer_base / uvm_sequencer_param_base 的代码需改成匹配 REQ/RSP 的 uvm_sequencer#(REQ,RSP) 或业务派生 sequencer;声明基类句柄不要求改写。

    用户接口与行为 · 命中后修改 · compat 包扫描:C8 · 文本匹配
    M06-007
    自定义 sequence 仲裁函数改用 int 签名
    编译断点 其他行为变化

    2.0 派生 sequencer 的返回类型和形参改为 int / int avail_sequences[$] ;直接调用时也同步队列元素类型。若同一源码必须支持两版,以库版本宏选择签名。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C14 · 文本匹配
    M06-008
    响应队列溢出默认不报错,需要显式开启
    高风险 · 静默/数据

    需要检测响应丢失的 sequence 显式调用 set_response_queue_error_report_disabled(0) (双库可用),或目标版 set_response_queue_error_report_enabled(1) ;同时检查消费速度和队列深度。不能仅靠默认 UVM_ERROR 计数验收。

    用户接口与行为 · 按条件核对 · 主库保留扫描:S17 · 启发式
    M06-009
    UVM_SEQ_ARB_TYPE typedef 默认不可用
    编译断点

    改用 uvm_sequencer_arb_mode ,或加 +define+UVM_ENABLE_DEPRECATED_API 。

    用户接口与行为 · 命中后修改 · deprecated 开关扫描:C21 · 启发式
    M06-011
    多个 sequence 同时 lock 时授权顺序改变
    其他行为变化

    保留 lock/unlock 的配对流程;回归不再假定一次调度同时授权所有排队 lock。对并发 sequence 按实际授权与完成顺序判定;若业务必须固定先后,用显式握手表达依赖,并验证每个请求最终获准、锁最终释放。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S34 · 启发式
    M06-012
    driver 等待请求时 kill sequence:核对后续仲裁
    其他行为变化

    普通请求等待流程可保留。存在多级 sequencer 堆叠时,在目标 sequencer 的 build_phase 读取配置之前,通过 uvm_config_db#(int)::set 配置其 wait_for_sequences_count,逐级验证计数满足传播需要;kill 等待中的 sequence 后,检查下一笔请求仍能被 driver 消费。具体配置读取位置见源码依据,不把固定延迟当通用补偿。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S34 · 启发式
    M06-013
    sequence.kill() 清理仲裁请求、锁与路由,保留已排队响应
    其他行为变化

    保留 sequence.kill();确认跨 sequencer 仲裁请求和锁已清理后,才移除针对这些残留的旧补偿。若业务要求即时丢弃已排队响应,继续显式调用 clear_response_queue;需要检查或消费响应的流程先完成对应处理。driver/scoreboard 在途事务仍按业务协议收尾,再验证后续请求与响应链路。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S34 · 启发式
    M06-014
    starting_phase 的直接赋值与锁定限制
    日志/调试变化 其他行为变化

    把 seq.starting_phase = phase 改为 seq.set_starting_phase(phase),读取改为 seq.get_starting_phase()。在 sequence 启动及相关 DAP 锁定前完成设置;锁定后的诊断应修正设置时机,不只修改消息过滤。

    用户接口与行为 · 按条件核对 · 主库保留扫描:C21 · 启发式
    M06-017
    sequence_library 的选择边界与类型名
    高风险 · 静默/数据

    动态缩减候选集的 USER 模式须检查索引范围; tests/uvm_review/library_migrated.sv 派生带选择前边界检查的 select_sequence,在相同场景两库均返回 0。固定候选集的普通用法无需因此改写。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S20 · 启发式
    M06-019
    uvm_push_sequencer 未消费被 peek 的请求,第二笔激励失败
    高风险 · 静默/数据

    优先评估改用常规 pull sequencer/driver。保留 push 流程时, push_probe.sv 的派生类在安全选择之后显式消费 FIFO,再 put 与通知完成;这是绑定目标库内部接口的局部修复,需固定版本并回归 kill、响应及背压场景,不能仅屏蔽 fatal。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S19 · 启发式
    M07-001
    寄存器 path 类型更名,旧别名仍可使用
    新增/接口调整

    uvm_path_e / UVM_DEFAULT_PATH 等旧名称在主库保留,可继续使用。采用新命名时将类型改为 uvm_door_e、默认值改为 UVM_DEFAULT_DOOR;无需仅为改名重写所有 read/write/mirror 调用,访问语义仍按具体 RAL 风险验证。

    用户接口与行为 · 按条件核对 · 主库保留扫描:无对应规则
    M07-002
    get_local_map/get_default_map 移除 caller 调试形参(含 Xcheck_accessX)
    编译断点

    删除调用点的 caller 实参,并同步派生类的方法原型。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C9 · 启发式
    M07-003
    uvm_reg_backdoor 变为抽象类;wait_for_change 由 local 变 public
    编译断点 其他行为变化

    基类句柄可保留,new 的对象改为具体派生 backdoor。派生类实现 write(uvm_reg_item rw) 以及 read_func(rw) 或 read(rw),执行真实硬件访问并设置 status;不能只声明空子类绕过抽象类错误,基类默认 write/read_func 会报 fatal。将实例通过 rg.set_backdoor(bd) 挂到寄存器,使用 factory 时注册具体类型并检查 override 后的实际对象。需要 codec/callback 的访问按 M07-023 保留回调链。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C25 · 启发式
    M07-004
    内置复位测试按 has_reset() 跳过字段
    高风险 · 静默/数据

    自研复位测试用 field.has_reset() 判断是否存在 reset 值;镜像比较前保存原 get_compare(),对无 reset 字段临时 set_compare(UVM_NO_CHECK),比较后恢复原值。保留用户明确登记的 block/reg 排除,字段级排除单独核对实际名称。递归遍历采用每层本地寄存器加直接子块递归,避免叶寄存器重复 mirror。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S32 · 启发式
    M07-005
    后门访问告警:not contained within map 'Backdoor'
    日志/调试变化 其他行为变化

    字段调用不要求改成手工位操作。需要寄存器访问语义时保留 field.read/write,确认实际数据与副作用;若已定位为本库问题且必须消除告警,使用该最小实验核对工具修复。仅需直接取值或赋值时可选 peek/poke。reg 读写显式传伪 map 的情况按下方改为 null。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S38 · 启发式
    M07-006
    内置 reg/mem sequence 的随机数据序列变化
    其他行为变化

    保留内置 sequence 调用;回归允许因 uvm_reg_randval 随机源变化而出现同 seed 的数据序列变化,使用访问约束、合法地址及 scoreboard 判定结果。外部 golden 若要求固定激励,应显式提供并保存激励数据,不能只凭同 seed 假定两库逐拍相同。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S38 · 启发式
    M07-007
    get_access() 返回的访问权限字符串变化
    其他行为变化

    若自研 sequence 根据 get_access(map) 决定跳过或预测,按目标 WO map 的返回值更新分支:WRC/WRS→WO、W1SRC→W1S、W0SRC→W0S、W1CRS→W1C、W0CRS→W0C、WCRS→WC、WSRC→WS。按折算后的写副作用执行和预测,不能统一当普通 WO;RO 分支原有处理可保留。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S33 · 启发式
    M07-011
    uvm_mem::get_addresses 增加越界检查
    其他行为变化

    正常范围内的 get_addresses 调用可保留;调用前检查 offset < mem.get_size(),超出模型范围时在用户逻辑中报告并停止该访问。删除依赖越界地址返回值的后续总线操作,分别验证最后一个合法 offset 与第一个越界 offset。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S39 · 启发式
    M07-012
    uvm_reg_predictor:type_name 由静态变量改为静态函数;新增 flush()
    编译断点

    新代码显式调用 type_name() ;移除对原可写 type_name 字段的赋值。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C27 · 启发式
    M07-013
    类抽象性调整(uvm_reg/uvm_reg_block/uvm_reg_file/uvm_reg_cbs 去 virtual;uvm_vreg_cbs/uvm_vreg_field_cbs 加 virtual)
    编译断点 其他行为变化

    将直接构造的 uvm_vreg_cbs / uvm_vreg_field_cbs 换成自己的具体派生类:构造函数接收 string name 并调用 super.new(name),原回调方法体迁入对应 override。uvm_callbacks 注册的对象仍指向原 vreg/field,传入新派生实例;原本已经使用具体回调类的代码可保留。uvm_reg/uvm_reg_block/uvm_reg_file/uvm_reg_cbs 的抽象限制放宽不要求反向修改已有派生类。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C25 · 启发式
    M07-014
    静态按名查找函数去 m_ 前缀(m_get_reg_by_full_name / m_get_field_by_full_name)
    编译断点

    uvm_reg::m_get_reg_by_full_name(name) 改为 uvm_reg::get_reg_by_full_name(name);uvm_reg_field::m_get_field_by_full_name(name) 改为 uvm_reg_field::get_field_by_full_name(name)。保留原完整层级名,并在解引用查询结果前检查 null。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C24 · 文本匹配
    M07-018
    uvm_reg_array / uvm_reg_array_md 文件删除(UVM_SPARSE_ARRAY 扩展终止)
    编译断点

    若环境定义了 UVM_SPARSE_ARRAY ,需移除该 define 并改用普通 uvm_reg 数组建模。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D3 · 文本匹配
    M07-019
    uvm_reg_address_config 与 get_registers_filtered_by_address 移除(UVM_REG_ENABLE_ADDRESS_EXCLUSION 扩展终止)
    编译断点 高风险 · 静默/数据

    若定义了 UVM_REG_ENABLE_ADDRESS_EXCLUSION ,改用 resource 排除机制。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D4 · 文本匹配
    M07-020
    大端 map 的整宽反转可能破坏数据,单拍也受影响(S13)
    高风险 · 静默/数据

    大端环境迁移前必须检查 adapter 两侧数据和总线 beat。示例 +BE_ADAPTER_COMPENSATION 在目标版本的 adapter 写入口反转回原数据,读出口预反转,以抵消目标库操作;它仅为本机固定宽度、地址映射和 response 契约验证过的处理方案,不能直接套用到任意桥接/层级 map。部署前与总线端序契约、有效位宽一并验证,也可采用经过验证的用户 frontdoor。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S13 · 启发式
    M07-021
    支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问(S14)
    高风险 · 静默/数据 日志/调试变化

    有 W1C、RC 或硬件自主更新字段的寄存器必须核对真实访问粒度。可使用显式 bus sequence 或经过验证的用户 frontdoor 实现 byte strobe,访问成功后只预测目标字段; +DIRECT_FIELD_WRITE 演示该固定映射场景。禁止仅屏蔽 warning 后将整寄存器访问视为等价。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S14 · 启发式
    M07-022
    失败访问不再更新寄存器镜像,新增 PREDICT_NOK 提示
    日志/调试变化 其他行为变化

    失败处理和 scoreboard 必须检查 status;不要继续依赖 1.2 失败后被更新的镜像。该提示不是要求无条件重新 predict,恢复值应由成功重试或可靠观测确定。

    用户接口与行为 · 按条件核对 · 无需启用扫描:无对应规则
    M07-023
    后门编解码可能失效:同时检查硬件值与读回值
    高风险 · 静默/数据

    单 codec、受控回调链可在 pre_write/post_read 直接更新 rw.value,停用旧 encode/decode;相同探针两版均恢复硬件 54、读值 1。多 codec 的 decode 原为逆序调用,post_read 为正序,不能机械迁移,需在自定义 backdoor 中显式维持编码顺序、逆序解码与写回,并另行验证。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S22 · 启发式
    M07-024
    predictor 仅继承首拍 status,后续拍失败仍可能更新镜像(S24)
    高风险 · 静默/数据

    monitor/scoreboard 必须聚合完整事务的失败状态。示例在两拍全部成功时才通过公开 predict 更新镜像,两版均在任一拍失败时保留原值;该例限定普通 RW、串行、小端、全字节访问,复杂副作用字段、乱序、多 master 需按总线协议建模,不能把它视作完整 predictor 的通用替换。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S24 · 启发式
    M07-025
    私有 reg-bank 覆盖率改为构造时声明
    编译断点 其他行为变化

    对初始化时可确定的能力,把原构造能力与各次 add_coverage 参数合并为位掩码,通过 new(name, parent, has_coverage) 第三参传入;再用 set_coverage 选择当前启用项。不能用 set_coverage 冒充扩充能力。若运行中才增加能力,需调整模型生命周期或维护自己的模型实现;没有给存量对象追加能力的已验证通用替代。只使用其他保留接口时无需因此整体替换 reg-bank。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:D6 · 文本匹配
    M08-001
    uvm_tlm_fifo::flush() 不再向 get_ap 广播,VCS 两项队列实测存在残留(S9)
    高风险 · 静默/数据

    在已确保没有并发 producer / 阻塞 consumer 的复位或清场边界,使用 while (fifo.try_get(item)) 排空并断言 fifo.used()==0 ;该公开方法将 mailbox 返回值归一成 bit,且保留 get_ap 广播。若刻意不需要广播,应在用户派生类中实现明确的排空策略并单独验证。并发场景须先停止参与方,不可仅将 flush 换成循环后宣称等价。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S9 · 启发式
    M08-002
    uvm_tlm_generic_payload::do_compare() 全面重写
    高风险 · 静默/数据

    使用 extension 的 scoreboard 显式检查两侧键集合,并逐项比较每个 extension,结果与 GP 基本字段比较共同决定匹配。 semantic_probe.sv 的 extensions_equal() 演示了派生 GP 访问受保护集合的方案;实际环境也可对已知 extension 类型逐项检查。依赖日志的断言同步核对消息 ID、数量和 severity;不能仅凭 compare 输出安静就判断相等。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S12 · 启发式
    M08-003
    uvm_tlm_generic_payload do_pack/do_unpack 无条件打包 m_dmi,打包流布局变化
    高风险 · 静默/数据

    跨版本交换时升级两端契约或显式保留旧格式;更换 compat packer 不会撤销 GP 自身新增的 m_dmi。 serialization_probe 中相同 GP 在 compat packer 下仍由 240 位变为 241 位,1.2 默认流不携带 DMI 状态。两版已有的预分配 data 数组解包风险也应核对 UVM_TLM_GP_BUF_OVERFLOW_FIX ,不要仅凭同版闭环就免测。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S6 · 文本匹配 / S44 · 启发式
    M08-004
    派生 TLM FIFO 的字段自动配置默认停止
    高风险 · 静默/数据 其他行为变化

    需要维持派生字段自动赋值时,在派生 FIFO 中 override virtual function bit use_automatic_config() 并返回 1;已有 build_phase 仍须保留业务逻辑和所需的 super 调用。未依赖派生字段自动配置的普通 FIFO 传输无需为本条改写。字段 FLAG 的使能方式另按 M09-002 核对。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:S35 · 启发式
    M08-005
    kill 阻塞 get 进程后,FIFO 的 can_get() 恢复
    其他行为变化

    先在实际阻塞 get 被 kill 的流程验证后续 can_get/get 能恢复,再移除针对旧计数泄漏的补偿;FIFO 清场另按 M08-001 验证,不能由本条推断 flush 已无风险。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:无对应规则
    M08-006
    TLM2 socket 基类全部改为 virtual class
    编译断点

    基类句柄可保留,构造对象改为对应具体 socket。阻塞发起端用 uvm_tlm_b_initiator_socket#(T),阻塞目标端用 uvm_tlm_b_target_socket#(IMP,T) 并提供实现 b_transport 的 IMP;非阻塞端使用 uvm_tlm_nb_initiator_socket / uvm_tlm_nb_target_socket 并实现相应方向的 nb_transport。透传端改用对应的 uvm_tlm_{b,nb} passthrough {initiator,target}_socket。保留原 payload/phase 类型参数和连接方向,不要只删除 _base 后忽略新增的 IMP 参数。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C25 · 启发式
    M08-007
    uvm_tlm_time 更名 uvm_time,文件同步更名,库内保留 typedef
    编译断点

    仅使用 uvm_tlm_time 类型时可保留声明。自行组织库文件的构建将 tlm2/uvm_tlm2_time.svh 引用改为 tlm2/uvm_tlm_time.svh;使用 VCS 内置库和 import uvm_pkg::* 的用户代码不必额外 include 该类文件,避免重复定义。

    用户接口与行为 · 按条件核对 · 主库保留扫描:D9 · 文本匹配
    M08-008
    TLM 组件的工厂创建与类型名
    其他行为变化

    普通 FIFO 和 req_rsp 传输调用可保留;根据 transport_channel 的 get_type_name() 输出匹配日志时,改为目标 uvm_tlm_transport_channel #(REQ,RSP)。类型判断优先使用实际类型句柄或 $cast;采用新 factory 创建能力时验证 override 后对象身份和一次完整请求/响应。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S36 · 启发式
    M08-009
    TLM 接口未实现错误消息文本变化
    日志/调试变化

    日志正则若匹配旧文案需放宽(建议匹配消息 id 而非正文)。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S43 · 启发式
    M08-011
    port.get_connected_to / get_provided_to 返回容器改为 port 句柄
    编译断点

    将容器声明为与端口 IF 参数匹配的 uvm_port_base#(IF) list[string] ,并调整后续访问;若需要旧 proxy 容器,可经 port.get_comp() 调用其查询接口。

    用户接口与行为 · 命中后修改 · 主库保留扫描:C15 · 启发式
    M09-002
    uvm_field_* automation:显式启用需要的字段操作
    高风险 · 静默/数据

    审计全部 field FLAG 的实际操作意图,包括部分正向位、自定义宏和纯数字。若要保留旧版“除禁用项外都执行”,使用 UVM_ALL_ON | 原禁用位 ;若有意只执行部分操作,列出每个需要的正向位及对应禁用约束。S3 会计算受支持 FLAG 表达式的六类操作使能并报告未知表达式;宏展开、set 操作及实际数据行为仍需核对,不能仅凭零命中或没有 NO_FLAG 核销。legacy field 开关作为过渡时仍需验证实际操作。

    用户接口与行为 · 命中后修改 · legacy field 开关扫描:S3 · 启发式
    M09-003
    工厂创建的对象需要带 name 参数的构造函数
    编译断点

    对需要 factory/create 的类补齐默认 name 构造参数并转发给 super;先核对 1.2 构建是否依赖 UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR ,勿将所有无参类都计为新增断点。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:C6 · 启发式 / D15 · 文本匹配
    M09-004
    uvm_do* 动作宏:约束、sequencer 与优先级的迁移
    编译断点 高风险 · 静默/数据

    uvm_do_with(x,{...}) → uvm_do(x, get_sequencer(), -1, {...}) 或手工 start_item/randomize/finish_item;过渡期可 +define+UVM_ENABLE_DEPRECATED_API 。

    用户接口与行为 · 命中后修改 · deprecated 开关扫描:C5 · 文本匹配
    M09-005
    旧 sequence 注册宏改为 object/component 注册
    编译断点

    uvm_sequence_utils(TYPE,SEQR) 改为 `uvm_object_utils(TYPE) ;原宏还声明了 typed p_sequencer,需要该成员时保留 `uvm_declare_p_sequencer(SEQR) 。只有确需使用具体 uvm_sequence_library 时才加 `uvm_add_to_seq_lib(TYPE, LIBTYPE) ,LIBTYPE 是 library 类型,不能直接填旧 SEQR。 uvm_sequencer_utils(TYPE) 改 `uvm_component_utils(TYPE) ;package 宏改为匹配的 package / endpackage 。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D1 · 文本匹配
    M09-006
    注册宏的 type_name 改为函数形式
    其他行为变化

    普通读取可保留;新目标代码可显式写 T::type_name() 。重复声明或要求变量的用法单独核对,跨版本代码不能把旧常量机械改成函数调用。 需要可写字符串、ref 实参或缓存类型名时,先复制到自有 string 变量;不要仅因 type_name 的实现变化给 comparator/pair 补 factory 注册。registry 初始化另见 M01-006,抽象组件注册见 M10-003,predictor 的旧可写成员及 flush 见 M07-012。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:C27 · 启发式
    M09-007
    废弃开关极性翻转:UVM_NO_DEPRECATED(opt-out)→ UVM_ENABLE_DEPRECATED_API(opt-in)
    其他行为变化

    按原意检查构建开关。原先定义 UVM_NO_DEPRECATED 是排除旧接口,不能机械改成启用 UVM_ENABLE_DEPRECATED_API;仅当确实需要目标版保留的旧宏时开启新开关。

    用户接口与行为 · 按条件核对 · deprecated 开关扫描:D2 · 文本匹配
    M09-008
    版本宏与版本字符串的迁移
    编译断点 高风险 · 静默/数据 日志/调试变化

    逐个确认分支意图。需要“恰为 1.2”与“支持 1.2 以后能力”时条件不同,不能一律把 UVM_VERSION_1_2 替换为 UVM_POST_VERSION_1_2。跨库签名示例见 semantic_probe 的目标宏分支;SV 预处理器没有 C 风格数值 #if ,可用构建定义区分受支持版本。 日志解析脚本用两版实际版本文本校验前缀和分隔规则;删除对旧 copyright 参数的直接引用,版权文本以所用库随附声明为准,不把它当版本判断接口。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S4 · 文本匹配
    M09-015
    字段自动配置的查询模式与操作位宽
    其他行为变化

    默认注册字段的自动配置可保留。确需扩大资源查询范围时,在相关库编译前定义 +define+UVM_COMPONENT_CONFIG_MODE_DEFAULT=CONFIG_STRICT 并重建,检查实际选中值;该模式不会发现任意未注册成员。自定义操作位使用 UVM_FIELD_FLAG_SIZE 管理位宽并核对保留位,不能把扩大 FLAG 位宽当作恢复旧 FLAG 语义。

    用户接口与行为 · 按条件核对 · 无需启用扫描:S40 · 启发式
    M10-001
    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 条官方建议)。

    用户接口与行为 · 按条件核对 · 无兼容恢复扫描:无对应规则
    M10-003
    抽象组件的工厂注册与 type_name 使用
    其他行为变化

    普通 get_type_name() 或无参 type_name 读取可保留。若需要可写字符串或 ref 实参,先复制类型名到自己的 string 变量,停止将目标 type_name 当变量写入或重复声明;同源例子见 M09-006。通过抽象基类 factory 创建时,先设置具体类 override,再检查实际对象类型。

    用户接口与行为 · 按条件核对 · 无需启用扫描:C27 · 启发式
    M10-006
    正则接口与缓存:删除的调试 API 和匹配风险
    编译断点 高风险 · 静默/数据

    删除对 uvm_dump_re_cache() 的调用(若有)。保留缓存默认关闭:目标缓存只以表达式字符串为键,未区分 deglob( src/vcs-uvm-ieee-2020-2.0/dpi/uvm_regex.svh:46,59 )。utility_probe 先用 uvm_re_match("a.*","abc") 再用 uvm_is_match,同样代码在两库默认模式第二次均不匹配,目标开启缓存后错误匹配。混合 regex/glob 的查找结果可能依赖调用顺序,不能将缓存开关作为无条件性能优化(S21)。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:S21 · 启发式 / D7 · 文本匹配
    M10-007
    旧 FGP 类与集成文件已删除
    编译断点

    若环境引用 uvm_fgp_thread_object / uvm_fgpinit_phase ,需联系 Synopsys 确认替代方案;否则无

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D8 · 文本匹配
    M10-008
    Verdi native_dumping 录制文件已删除
    编译断点 日志/调试变化

    引用旧 native_dumping 文件或安装其 recorder 的脚本,迁移到目标安装提供的标准 uvm_custom_install_verdi_recorder.sv 流程,并核对 DPI 与启动配置。在实际 Verdi 中确认所需事务、字段及父子关系完整后,再移除旧脚本。未引用这些旧文件的流程无需因此替换文件;现有实测未覆盖全部 Verdi 工作流。

    用户接口与行为 · 命中后修改 · 无兼容恢复扫描:D8 · 文本匹配

    版本适用范围