- 开始迁移
- 扫描代码
本页内容
- 1. 运行扫描
- 2. 从条目反查规则
- 3. 解读报告并核销
- 4. 扫描边界
- 规则与覆盖范围
- C1 · printer knobs 宽度字段 / uvm_printer_knobs 类型名删除
- C2 · uvm_transaction::begin_event/end_event 字段删除
- C3 · kill/stop 机制删除(kill/do_kill_all/stop_phase/enable_stop_interrupt/stop_request/force_stop/stop_timeout)
- C4 · uvm_event::add_callback/delete_callback 删除
- C5 · uvm_do_* 宏移入 deprecated(需 +define+UVM_ENABLE_DEPRECATED_API 或改写)
- C6 · 无参构造函数:核对旧版 constructor 兼容宏及 factory 注册
- C7 · uvm_resource#(T) 自管理接口删除(set/set_override/get_by_name/get_by_type/UVM_RESOURCE_GET_FCNS)
- C8 · uvm_sequence_base 新增抽象限制;uvm_sequence 在 1.2 已抽象
- C9 · map 查询删除 caller 形参,核对显式实参与 override
- C10a · 全局仿真控制函数删除(uvm_test_done/global_stop_request/set_global_timeout/set_global_stop_timeout)
- C10b · reporting deprecated 方法删除(get_report_server/process_report/compose_message)
- C10c · 全局 set_config_int/object/string 删除(注意:组件方法仍可用)
- C11 · field automation 旧钩子不再被调用,status container/scope stack 删除
- C12 · 自定义 uvm_factory 子类须补 4 个 pure virtual
- C13 · uvm_print_* 宏数字后缀变体删除、签名重排
- C14 · 自定义 user_priority_arbitration 旧 integer 签名在 VCS 2.0 不匹配
- C15 · port 连接查询的 ref 容器类型变化
- C16 · 资源特化类的静态查询删除
- S1 · 旧 default_sequence 机制待核对(标准 phase wrapper/instance 无需迁移)
- S2 · uvm_test_done_objection 孤儿化(raise/drop 不再门控 run phase)
- S3 · field FLAG 的启用操作发生变化,或表达式需要展开
- S4 · UVM_VERSION_1_2 等版本宏删除,`ifdef 静默走 else 分支
- S5 · default_precedence 兼容字段核对(原静默失效结论已撤销)
- S6 · packer big_endian/use_metadata 删除,位流布局不兼容
- S7 · 消息宏对 UVM_NO_ACTION 短路:catcher 不再能捕获被抑制消息
- S8 · uvm_comparer show_max==0 语义反转(0=不限量)
- S9 · uvm_tlm_fifo::flush() 广播变化,VCS 两项 FIFO 实测残留一项
- S10 · +UVM_STACKTRACE 不再输出报告调用栈
- S11 · resource_db 按名查询可能选择较低优先级资源
- S12 · TLM generic payload 比较可能漏检 extension
- S13 · 大端 reg map 可能丢失数据,单拍也受影响
- S14 · 字段独立访问可能退化为整寄存器访问
- S15 · resource 单侧 override 掩码与入池前 precedence 需核对
- S16 · 旧两参 uvm_print_int 的 radix 可能被当成位宽
- S17 · sequence 响应溢出默认关闭报错
- S18 · 命令行 set_config_int 超过 32 位可能截断
- S19 · push sequencer 第二笔请求可能报错或重复发送
- S20 · sequence library 动态缩减 max 可能先返回越界索引
- S21 · 正则缓存键未区分 regex 与 glob 模式
- S22 · backdoor encode/decode 数组修改未写回
- S23 · 全局和实例 catcher 混用可能重复调用
- S24 · 多拍 predictor 未聚合后续拍失败状态
- D1 · uvm_deprecated_defines.svh 整文件删除(uvm_sequence_utils/uvm_package 等)
- D2 · UVM_NO_DEPRECATED 开关失效(极性翻转为 opt-in)
- D3 · UVM_SPARSE_ARRAY / uvm_reg_array(VCS 私有扩展,2.0 悬空引用编译失败)
- D4 · UVM_REG_ENABLE_ADDRESS_EXCLUSION / uvm_reg_address_config(VCS 私有扩展删除)
- D5 · disable_apply_cfg_settings / +UVM_DISABLE_APPLY_CFG_SETTINGS(VCS 1.2 私有开关删除)
- D6 · snps_uvm_reg_bank(Synopsys 私有 reg-bank 扩展,API 有变)
- D7 · uvm_vector_to_string / uvm_dump_re_cache 删除
- D8 · VCS FGP / native_dumping 相关(uvm_fgp_*/vcs_uvm_alt/native_dumping)
- D9 · 直接 include 旧文件路径(uvm_tlm2_time.svh 等已更名/删除)
- D10 · uvm_resource_converter / UVM_USE_RESOURCE_CONVERTER 删除
- D11 · 内置 sequence 库删除(uvm_random_sequence/uvm_exhaustive_sequence/uvm_simple_sequence)
- D12 · uvm_random_stimulus 降级为 @uvm-compat(非标准 API)
- C17 · m_get_tr_database 改名
- C18 · packer 旧状态 API 与无参 get_packed_bits
- C19 · tree/table printer 的换行字段或列宽方法删除
- C20 · phase 公共状态改为访问器
- C21 · sequence starting_phase 与旧仲裁类型
- C22 · sequence_base 旧库管理方法
- C23 · 自定义 coreservice 的虚方法与安装入口
- C24 · RAL 按完整名称查询去掉 m_ 前缀
- C25 · 直接构造目标抽象 backdoor、callback 或 socket 基类
- C26 · 录制虚方法的 integer 签名或已删 m_get_handle
- C27 · type_name 被当作可写变量
- C28 · comparer 旧初始化与摘要接口
- D13 · VCS 数组录制上限接口与运行开关删除
- D14 · VCS 旧 recorder 取时开关删除
- D15 · 旧 object 构造兼容开关删除
- D16 · 直接包含 policy 宏的旧宿主文件
- D17 · 直接依赖 UVM 内部表、执行入口或状态字段
- S25 · copy 显式传入 null
- S26 · 按名称设置 factory override 的解析时机
- S27 · 手工 printer 输出或自定义 recorder 递归
- S28 · phase 跳转显式传入 null
- S29 · event 触发数据读取与 reset 生命周期
- S30 · warning/error/fatal 报告的 verbosity 过滤变化
- S31 · report summary 与输出句柄路由
- S32 · 自研复位检查与旧字段排除资源
- S33 · 按字段访问权限字符串选择策略
- S34 · sequence lock/kill 与等待请求流程
- S35 · 派生 TLM FIFO 的字段自动配置
- S36 · 旧消息标识、类型字符串和日志开关
- S37 · pre_abort 与自定义 phase 图
- S38 · RAL Backdoor 伪 map、内置 sequence 访问次数与随机激励
- S39 · memory 地址查询的越界路径
- S40 · 自定义 field 操作位宽或自动配置查询模式
- S41 · 无 DPI 构建与 Resource DB 隐式追踪依赖
- S42 · config_db 非空 context 的正则作用域
- S43 · 日志脚本包含旧 TLM 未实现接口文案
- S44 · pack/unpack 位流边界与 GP 布局
扫描代码与核对覆盖
先用扫描器找出旧写法和适用线索,再按命中条目处理。脚本能检查已知名称、调用参数和部分 field FLAG 表达式,并给出修改建议;它不自动改写源文件。差异条目用 M01-001 这样的 ID 标识,扫描报告用 C2 这样的规则 ID 标识;一个规则可以关联多个条目,一个条目也可以对应多个规则。
扫描自己的 SoC 代码使用 uvm_migration_scan.py,仅支持 VCS 内置 uvm-1.2 → uvm-ieee-2020-2.0。 团队统一维护脚本与同目录的 uvm_migration_scan.yaml,运行脚本即自动读取这份配置。示例包里的三个 run_*_review.py 用于复现手册附带的实验,详见脚本分工。
1. 运行扫描
团队将 YAML 中的 check_path 设置为实际工程目录,模板预填 [/project/tb]。从仓库或工具包根目录执行:
不传 --output-dir 时使用 YAML 的 output_dir。每次固定生成 migration-report.json、migration-report.csv 和 migration-report.summary.json;零命中仍输出空 JSON 数组和 CSV 表头。CSV 为带 BOM 的 UTF-8。
下载脚本与配套 YAML须放在同一目录,也可直接使用完整工具包。需要 uv、Python 3.11+ 和 PyYAML,仓库已固定依赖;独立工具目录可用 uv run --with pyyaml==6.0.3 ./uvm_migration_scan.py 运行。扫描不需要 VCS 或 license。
相对输入路径以 check_path 为基准,绝对路径直接使用。多个根目录分别拼接相对输入,缺失路径报错,重复文件只扫描一次。配置中的相对根目录及输出目录以 YAML 所在目录为基准,命令行指定的相对输出目录以当前工作目录为基准。
默认扫描全部文本,所有文件执行同一套所选迁移规则。.sh/.py/.inc、Makefile 和隐藏文件不会因文件名而减少规则;需要排除的输入由团队在 YAML 中维护。目录符号链接不递归,二进制按内容跳过;文本按 UTF-8 读取,无法读取或解码时报告错误。本次配置、扫描脚本和报告自动排除,已有非报告文件会拒绝覆盖。
默认 .sv/.svh/.v/.vh 使用 slash 去注释,.sh/.py/.yaml/.yml 使用 hash,其他文件保留注释;范围可在下方配置。普通双引号字符串中的 API 名不算调用,配置键、plusarg、日志特征和实际 include 仍可匹配。扫描不执行脚本,不展开 filelist、include、宏、条件编译或完整 here-doc;同名 API 和未生效分支仍需人工核对。
团队 YAML 配置
脚本只读取自身目录的同名 YAML,不读取当前工作目录中的其他配置;通过软链接调用时以实际脚本所在目录为准。配置缺失或无效时直接报错。团队在脚本中统一维护迁移规则,在 YAML 中维护扫描范围、去注释、兼容声明和豁免。
下面是项目配置示例;目录、文件和后缀排除默认均为空,仅在需要时启用。例如不想扫 Shell/Python 文件,就设置 exclude_suffix: [.sh, .py]。这些文件一旦排除,其中的 API、生成代码和构建开关也全部不再检查。
| 配置 | 匹配与优先级 |
|---|---|
version |
YAML 配置格式版本,固定为整数 1,不是 UVM 版本。 |
migration |
固定为 from: uvm-1.2、to: uvm-ieee-2020-2.0;其他版本或不完整声明返回 2。省略整项时采用同一固定路径,报告摘要始终记录此声明。 |
check_path |
项目根目录列表,模板为 [/project/tb];相对根目录基于 YAML 所在目录。不提供 path 时扫描这些根目录;提供相对 path 时分别以这些根目录为基准,绝对 path 直接使用。 |
output_dir |
YAML 中的相对输出目录基于 YAML 所在目录;--output-dir 覆盖该值,CLI 的相对输出路径基于当前工作目录。 |
exclude_dirs |
Python 正则 search 匹配以 / 分隔的绝对目录路径;命中后不再遍历子树。显式文件的父目录及符号链接目标也按此检查。 |
exclude_files |
Python 正则 search 只匹配文件名;需要整名匹配时加 ^、$。文件符号链接的目标名也检查。 |
exclude_suffix |
按最后一个扩展名精确匹配,不区分大小写;不接受正则或 glob。 |
include_suffix |
空列表时所有文本执行全部所选规则;仅在显式填写时限定后缀,--ext 覆盖该列表。排除项始终生效,显式输入文件也不例外。 |
rules |
空列表表示不限制规则,执行全部内置迁移检查;--rules 覆盖该列表。 |
remove_comments |
默认按常见后缀执行 slash/hash 去注释;各模式通过后缀和文件名限定范围,无 enabled 开关。 |
waivers |
集中维护已核对的豁免项,默认空列表;豁免发生在命中后,文件仍参与其他检查。 |
空列表在筛选条件中表示“不限制”:包括顶层和注释范围的 include_suffix、rules、注释范围的 include_files。exclude_*: [] 表示没有排除项,waivers: [] 表示没有豁免项。去注释范围省略 include_suffix 时采用该模式的默认后缀,显式写 [] 则取消后缀限制;两种范围都为 [] 时,该模式处理所有已选文本。YAML 空值 null 不等同于 [];这些列表应明确写成 []。
迁移规则在脚本中维护,并关联差异条目及回归测试。YAML 仅接受本文列出的配置项;未知或重复配置键、错误类型、不支持的迁移路径、无效规则 ID 或正则返回 2。
按文件范围去除注释
同一份配置可以针对 SV 使用 slash 语法、针对 Shell/Python/YAML 使用 hash 语法。默认配置如下,可以直接修改后缀列表:
两种模式互相独立:slash 去除 // 与 /* ... */,hash 去除引号外、未转义的 # 到行尾。上例 .sv 不会应用 hash,保留 #(...) 参数化和 #10 延时;.sh/.py 不会应用 slash。交付模板和脚本内置默认范围相同;省略 remove_comments、某个模式或该模式的 include_suffix 均采用相应默认后缀,显式列表会替换默认列表。
每个模式可配置 include_suffix 与 include_files。后缀精确匹配、不区分大小写;文件名使用 Python 正则 search,不含目录。两个条件都填写时取交集;include_files 省略或为 [] 时不限制文件名。要给无后缀的 Makefile 和 Shell 脚本应用 hash,设置该模式 include_suffix: [] 和 include_files: ['^(Makefile|.*\.sh)$']。要使某个模式不处理任何文件,可设 include_files: ['(?!)'](永不匹配的正则)。注释范围只决定预处理方式,不改变该文件执行哪些迁移规则。
去注释用空格替换原字符,保留换行和命中原始行号。slash 模式保留双引号字符串及 SV 数字/类型转换使用的单引号;hash 模式还识别普通单引号、三引号与反斜杠转义。两者同时命中时一起处理,block 内的 # 不会吞掉结束标记。此处理不是完整的 Shell/Python/Tcl 解析器,例如未引用的 Shell 参数展开 ${#args}、here-doc 和复杂嵌入语言不保证被正确识别;相应文件应保留注释或拆开扫描。不要将 hash 模式无范围地启用到含 SV 的混合工程。
团队维护的 waive
默认 waivers: [],没有预置豁免。团队确认具体误报或适用例外后,再在共享 YAML 中登记。exclude_* 会使文件不进入扫描;waive 只过滤符合条件的命中,同文件的其他规则仍执行。
每项字段如下,匹配条件同时成立才生效:
| 字段 | 约定 |
|---|---|
id |
必填、唯一的豁免标识,便于追溯。 |
rule |
必填、单个内置规则 ID,如 C2;不接受规则通配符。 |
path |
必填正则;对相对于 YAML 所在目录、以 / 分隔的文件路径做 search。需要精确限定时加 ^、$。 |
lines |
可选行号列表,省略或 [] 表示不限制行号;0 表示文件级命中。代码移动后需随之核对。 |
reason |
必填、非空的核对理由。 |
JSON/CSV 保留所有命中,并在 waivers 中记录匹配的 ID、原因和行号。完整覆盖某项命中的所有位置时,标为 status=waived、suppressed=true,终端明细与退出码忽略该项。未知 FLAG 的合并提示若只豁免部分 related_lines,整条仍显示且返回命中退出码;报告注明已匹配的部分位置。
摘要保存每个 waiver 的匹配项数,零匹配也保留,便于复核过期路径或行号。兼容过滤和 waive 同时适用时,status 为 waived,compatibility 仍保留兼容依据。只有被过滤项时退出码可为 0;豁免不表示源码已修改或行为已验证。
根据实际兼容选项过滤
compatibility 表示本次输入所对应构建中已确认生效的条件:true 为启用、false 为未启用、null 为未确认。扫描器不会因文件中出现一个 define 就推断整个工程生效;不同构建配置分别执行扫描。
| 配置声明 | 可以标记为 compat_covered 的命中 |
仍保留的检查 |
|---|---|---|
UVM_ENABLE_DEPRECATED_API: true |
C5 对应旧动作宏 | D1 已删除注册宏;约束、sequencer、parent、优先级仍按 M09-004 验证。 |
UVM_LEGACY_FIELD_MACRO_SEMANTICS: true |
S3 中由可解析的操作符号 FLAG 导致的操作使能变化 | 未知表达式、数值掩码、其他位语义及同一行混合未覆盖项;实际字段操作仍按 M09-002 验证。 |
uvm_compat_pkg_compiled: true |
仅登记,不自动标记任何命中被覆盖 | 实际对象是否使用兼容类型、旧 API 及位流契约仍需检查。 |
默认仍显示兼容依赖并返回命中退出码。设置 hide_compat_covered: true 后,终端和退出码只计未过滤项;JSON/CSV 仍包含全部命中,以 status、compatibility、suppressed 标记过滤依据。仅有已过滤项时可返回 0,表示当前配置下没有未过滤线索,不表示完成迁移或行为验证。未知类型、未确认配置不会自动过滤。
2. 从条目反查规则
例如 M01-001 对应 C2 · 启发式,匹配 begin_event / end_event,包括类内省略接收者的继承成员。需要确认接收者是否为 uvm_transaction 或其派生类;同名自定义字段可能误报。
--rules 接受逗号分隔的规则 ID,例如 C2,S3;不指定时使用 YAML 的 rules,两者都未限定时执行全部规则。按规则扫描用于单项复核,完整迁移仍需全规则扫描和无规则条目核对。
3. 解读报告并核销
终端报告包含所选规则、报告项数、文件行号、对应差异条目和修改建议;参数或 FLAG 分析会给出具体原因。JSON 保留原有数组格式和字段,related_lines 保存合并提示的全部使用行号。CSV 包含相同命中及字段,entry_ids/related_lines 使用空格分隔,waivers 为 JSON 数组文本。D6 指向正式条目 M07-025。
| 报告字段 | 示例与用途 |
|---|---|
id |
C2,关联规则与核销清单 |
entry_ids |
["M01-001"],定位具体改法 |
file / line |
原文件与行号;文件级规则 line=0 |
text |
命中的代码线索 |
kind |
hit 文本匹配、heuristic 启发式、file 文件级同现 |
category |
本处的风险分类;未知 FLAG、构造依赖或 FIFO 接收者可为“提示”,明确操作变化仍按风险报告 |
reason |
参数异常、FLAG 缺失操作、未解析表达式或作用域内声明关联 |
fix |
对应修改建议,便于脚本生成处理任务 |
related_lines |
同文件相同未知 FLAG 表达式的全部使用行号,包含 line;普通命中为空数组 |
status / compatibility |
active、compat_covered 或 waived;compatibility 独立记录适用的兼容选项 |
suppressed |
是否由兼容配置或完整豁免从终端和退出码中过滤;JSON/CSV 中仍保留 |
waivers |
匹配的团队豁免 ID、原因和行号;未匹配时为空数组 |
摘要文件记录有效配置、实际扫描文件、跳过路径及原因、错误、命中和过滤计数、每个 waiver 的匹配项数,以及 complete、exit_code。effective_config.check_path 保存解析后的项目根目录,input_paths 保存本次实际选择的绝对输入路径,便于区分全量扫描与局部扫描。目录剪枝只记该目录,不宣称已枚举其内部文件。文本读取失败时保留其他文件的结果,摘要标为不完整并返回 2;无可扫描文本也返回 2。参数或配置错误发生在扫描之前,不生成新报告,不能将已有报告当成本次结果。
退出码 0 表示所选输入、规则、兼容与豁免条件下没有未过滤命中,1 表示有未过滤命中(包含待确认提示),2 表示配置、输入、读取或输出失败。CI 应分别处理,不能把 1 当作脚本异常,也不能把 0 当作兼容证明;按 JSON 的 category 区分提示与风险,同时核对 suppressed 和摘要。
先看 reason:明确旧名称、旧参数或 FLAG 缺失操作可直接按 fix 定位修改;同名方法、继承和并发入口属于适用线索,需结合上下文判断。对同一条目集中处理全部命中,在迁移清单记录结果。报告中的命中数不等于必须修改的代码数。
以下判断已交给脚本。涉及注释夹在名称/参数之间的语法时,应确认相应文件在 slash 去注释范围内;默认覆盖 .sv/.svh/.v/.vh:
- C9 跳过参数数量符合目标的 map 查询,只提示显式
caller或额外参数;S16 只提示两参打印宏的位宽/进制歧义。 - C3/C4/C10b/C15 识别带接收者和继承调用,允许点号附近空白、换行和注释;C10c 排除显式成员调用及已识别的组件继承调用。通用方法名仍须核对实际对象。
- C6 支持
function new();和function new;。已识别注册宏或显式 registry 的类列为编译风险候选,核对旧 constructor 开关;其余构造降为“提示”。仅直接 new 的类可保留,自定义 create、项目包装宏和外部 registry 需确认,不因看不到注册就自动核销。 - C7/C8/C18/C25 按调用处可见声明关联 resource、抽象基类和 packer;支持标准
uvm_pkg::限定、类成员后声明、简单this、局部遮蔽,以及循环体可解析时的 for 局部作用域。跨对象层级路径不借用同名局部变量。用户包中的同名类型保留包身份。 - C7/C8/C16/S11 的静态调用会配对嵌套类型参数;D1 同时覆盖
uvm_sequence_utils_begin/end和uvm_sequencer_utils_begin/end,不匹配用户增加后缀的宏名。 - C27 排除自有局部变量、形参和普通下标读取;注册宏与同名成员声明冲突仍提示。
- S30 覆盖 wrapper 和直接
uvm_report(),按位置/命名参数读取 severity、verbosity 和入口检查开关;排除已知 INFO、普通默认 fatal、显式UVM_NONE/0,动态 severity 保留检查线索。此筛选以正常非负 verbosity 阈值为界,负阈值等定制过滤另行核对。 - S34 排除已识别的
process.kill(),C3 同时排除已识别的 process/sequence 接收者;S39 排除寄存器地址查询,S33 排除 memory/vreg 权限查询,C22 排除已识别的 sequence library 的 get_sequence 调用。类型未知时保留启发式提示。 - S31 排除普通
UVM_STDOUT使用和默认/符号 stdout 摘要;检查数值比较、位运算和其他显式摘要文件参数。低 verbosity 下摘要可见性仍按 M04-007 验证。 - S3 对明确操作变化逐处报告;同文件相同未知表达式合并为一条“提示”,保留全部使用行号,展开后复扫。支持已知常量的
uvm_pkg::限定写法:uvm_pkg::UVM_ALL_ON、UVM_ALL_ON | UVM_NOCOPY、UVM_DEFAULT | 0不报警;uvm_pkg::UVM_NOCOPY仍报告缺失操作。其他包中的同名常量和自定义宏保留待确认提示。非零数值掩码即使六种操作使能一致,仍提示核对其他操作位。不同文件独立确认,避免混淆编译宏环境。 - S1/S42 共用 config_db 参数解析,支持位置、命名和混合参数;合法 phase wrapper/instance 设置不报旧 default_sequence。S42 跳过普通 glob 和显式 null context,只提示非 null 或待确认 context 与字面
/regex/的配置组合;动态 scope 字符串仍需另查。 - S9 按
flush()调用行报告,包括 FIFO 派生类的继承调用。已知 packer/printer 等无关接收者不报;未知接收者降为“提示”,即使文件内没有直接 FIFO 声明也保留核对入口。旧报告中的kind=file,line=0改为kind=heuristic和实际行号,按文件/行号核销的外部工具需重新关联 S9。
4. 扫描边界
| 标识 | 可以确认什么 | 后续核对 |
|---|---|---|
| 有扫描规则 · 文本匹配 | 出现规则所列的标识或调用形态 | 类型、预处理分支、使用条件和迁移后行为 |
| 有扫描规则 · 启发式 | 出现疑似风险写法 | 人工判断是否真正受影响,排查未覆盖变体 |
| 有扫描规则 · 文件级同现 | 两个文本出现在同一文件 | 是否属于同一对象或相关调用路径;跨文件关系可能漏报 |
| 无对应规则 | 当前没有直接检测该条目的规则 | 按用户接口条目的旧写法和触发条件检视,并执行验证;纯实现记录与新增功能不作为必做改造 |
未配置直接规则的用户条目并不都要求手工修改:
| 条目 | 未增加规则的原因与所需处理 |
|---|---|
| 保留 report hooks(M04-014)、保留 path 别名(M07-001) | 常规使用可保留,不为有效 API 制造批量改名告警;类型反射等特殊依赖按条目核对。 |
| 失败访问与镜像(M07-022) | 需要失败状态、访问路径及镜像更新的运行证据;仅扫描 read/write 会把正常 RAL 调用全部报出。 |
| FIFO 阻塞进程被 kill(M08-005) | 依赖阻塞进程身份和终止时序;仅凭 kill/can_get 不能确定旧补偿是否可删除。 |
| driver 未连接告警(M10-001) | 连接可跨组件、条件配置及运行期建立;需 elaboration/仿真确认,不能根据局部缺少 connect 判为未连接。 |
脚本不能证明事务完成、检查器有效、位流一致或寄存器镜像正确。作用域和同文件简单继承关联不是 elaboration;typedef、复杂声明、跨文件继承、类外方法定义及条件编译仍需人工核对。默认按常见后缀处理注释,再使用 UVM 文本规则查找线索,不执行 Shell/Tcl/Makefile,也不解析其他语言的完整字符串或 here-doc 语义。S3 计算范围为 copy/compare/print/record/pack/unpack 的 FLAG 使能,不模拟各宏全部数据类型差异、set 操作、用户宏展开或 legacy 构建。带扫描规则的行为风险仍需要双库观测与回归。规则关联率不代表真实 SoC 问题检出率。
规则与覆盖范围
91 个规则关联 116 个差异条目;用户接口与行为中,107/112 个条目有定位规则。其余包含无需改写的保留接口和依赖运行状态的事项,见下方说明。关联数量不代表检出率,也不等于完成行为核销。
C1 · printer knobs 宽度字段 / uvm_printer_knobs 类型名删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:删除宽度字段引用(2.0 列宽自动计算);类型引用改 accessor。
C2 · uvm_transaction::begin_event/end_event 字段删除
检测方式:启发式。匹配 begin_event/end_event,包括类内省略接收者的继承成员;仍需区分同名用户字段,events 池的直接访问未完整覆盖。
文本候选模式(另有参数及类型检查)
命中后的处理:改用 item.get_event_pool().get("begin"/"end")。
M01-001 · 事务开始/结束事件改用 get_event_pool()
C3 · kill/stop 机制删除(kill/do_kill_all/stop_phase/enable_stop_interrupt/stop_request/force_stop/stop_timeout)
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:确认旧 component 接口后用完成握手、检查器排空和成对 objection 收尾;sequence.kill/process.kill 另按原语义核对。
M01-002 · component kill/status 删除与进程收尾 · M03-002 · stop 机制整体删除
C4 · uvm_event::add_callback/delete_callback 删除
检测方式:启发式。识别带接收者及类内继承调用,允许点号附近的空白和注释;通用 callback 方法名仍需确认属于 uvm_event。
文本候选模式(另有参数及类型检查)
命中后的处理:确认 event 接收者后改用 uvm_callbacks#(uvm_event#(T), uvm_event_callback#(T))::add/delete;保留 event_callback 派生类型,append=0 改 UVM_PREPEND。
M03-001 · event 回调改用 uvm_callbacks 注册和删除
C5 · uvm_do_* 宏移入 deprecated(需 +define+UVM_ENABLE_DEPRECATED_API 或改写)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按 M09-004 完整映射直接改写;需保留旧宏时临时加 +define+UVM_ENABLE_DEPRECATED_API,两种方式均验证原约束、sequencer 和优先级。
C6 · 无参构造函数:核对旧版 constructor 兼容宏及 factory 注册
检测方式:启发式。识别有/无括号的无参构造;已知注册宏和显式 registry 关联为编译风险候选。未确认依赖及自定义 create 降为提示,直接 new 的无参类可保留;项目包装宏、外部 registry 和继承仍需核对。
文本候选模式(另有参数及类型检查)
命中后的处理:确认 factory/create 依赖及旧 constructor 开关后,为对象构造补 string name 并转发 super.new(name);未知依赖先核对。
M09-003 · 工厂创建的对象需要带 name 参数的构造函数
C7 · uvm_resource#(T) 自管理接口删除(set/set_override/get_by_name/get_by_type/UVM_RESOURCE_GET_FCNS)
检测方式:启发式。覆盖静态查询、UVM_RESOURCE_GET_FCNS,以及调用处可见 resource 句柄的 set/set_override;支持标准包限定、嵌套特化、类成员后声明和可解析的 for 作用域,typedef、复杂层级路径与跨文件类型仍需核对。
文本候选模式(另有参数及类型检查)
命中后的处理:对象 set/query 改走 pool/DB;显式构造 scope 仍有效,两版都需入池,特殊 precedence 在入池后设置。
M05-001 · uvm_resource#(T) 自管理接口 set() / set_override() / get_by_name() / get_by_type() 被删除 · M05-002 · 资源构造 scope 仍有效
C8 · uvm_sequence_base 新增抽象限制;uvm_sequence 在 1.2 已抽象
检测方式:文本匹配。覆盖规则所列直接构造与 type_id::create,支持先声明后赋值;使用调用处可见声明,typedef、宏、类外定义与跨文件类型仍可能漏报。
命中后的处理:改用 uvm_compat_pkg::uvm_compat_proxy_sequence#(REQ,RSP) 或具体 sequence 类。
M06-004 · 不要直接 new sequence/sequencer 抽象基类
C9 · map 查询删除 caller 形参,核对显式实参与 override
检测方式:启发式。解析嵌套参数和命名 caller;参数数量符合目标的普通 get_local_map/get_default_map/Xcheck_accessX 调用不触发此规则。仍需区分同名用户方法。
文本候选模式(另有参数及类型检查)
命中后的处理:删除实际传入的 caller 及 override 形参;未带 caller 的普通调用保留。
M07-002 · get_local_map/get_default_map 移除 caller 调试形参
C10a · 全局仿真控制函数删除(uvm_test_done/global_stop_request/set_global_timeout/set_global_stop_timeout)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:结束控制改为实际 phase 的成对 raise/drop 与完成条件;set_global_timeout 改 root.set_timeout,stop 收尾超时单独设计。
M04-004 · 旧全局配置、timeout 和 stop 函数需要改写
C10b · reporting deprecated 方法删除(get_report_server/process_report/compose_message)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:get_report_server → uvm_report_server::get_server();自定义 server 重写 execute_report_message/compose_report_message。
M04-005 · 删除 reporting 类中的 deprecated 方法
C10c · 全局 set_config_int/object/string 删除(注意:组件方法仍可用)
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:全局配置可转 root 同名组件方法;改 config_db 时同步类型、scope 与克隆契约;未限定的组件成员调用需辨别。
M04-004 · 旧全局配置、timeout 和 stop 函数需要改写
C11 · field automation 旧钩子不再被调用,status container/scope stack 删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改写为 override do_execute_op(uvm_field_op op)。
M01-003 · __m_uvm_field_automation 签名变更 · M04-006 · 删除 uvm_status_container 与 uvm_scope_stack 类
C12 · 自定义 uvm_factory 子类须补 4 个 pure virtual
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:补 is_type_registered/is_type_name_registered/set_type_alias/set_inst_alias 实现。
M01-004 · 自定义 factory 子类需要补充虚方法
C13 · uvm_print_* 宏数字后缀变体删除、签名重排
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按新原型改写(VALUE,SIZE,RADIX,VALUE_TYPE,PRINTER),建议直接用 printer.print_* API。
C14 · 自定义 user_priority_arbitration 旧 integer 签名在 VCS 2.0 不匹配
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:返回值与队列形参改 int,直接调用实参队列同步类型。
M06-007 · 自定义 sequence 仲裁函数改用 int 签名
C15 · port 连接查询的 ref 容器类型变化
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:直接 port 查询改用 uvm_port_base#(IF) 关联数组;proxy 上查询仍用旧容器。
M08-011 · port.get_connected_to / get_provided_to 返回容器改为 port 句柄
C16 · 资源特化类的静态查询删除
检测方式:文本匹配。按括号配对识别特化资源的静态查询,支持标准包限定和嵌套参数;用户包同名类型不按标准 UVM 类型处理。
命中后的处理:使用 resource_db#(T) 查询并检查 null/cast;子类型不再有静态查询。
M05-011 · 资源特化类删除返回子类型的静态 get_by_name/get_by_type
S1 · 旧 default_sequence 机制待核对(标准 phase wrapper/instance 无需迁移)
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:字符串式改为 phase wrapper/instance 配置;其他命中核对类型与作用域。
M06-001 · 内置 sequence 库整体删除 · M06-002 · 字符串 default_sequence 不再启动激励
S2 · uvm_test_done_objection 孤儿化(raise/drop 不再门控 run phase)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改用 phase.raise_objection(this)/drop_objection。
M03-003 · 旧 test_done 不再保持 run 存活
S3 · field FLAG 的启用操作发生变化,或表达式需要展开
检测方式:启发式。按两版常量计算受支持的 FLAG 位运算,支持已知常量的 uvm_pkg:: 限定写法,明确操作变化逐处报告;同文件相同未知表达式合并为提示,related_lines 保留全部行号。uvm_pkg::UVM_ALL_ON、UVM_DEFAULT | 0 不报警;其他数值掩码按需提示并关联 M04-013。未模拟 field 宏全部类型差异、set 操作、用户预处理或 legacy 构建;须验证所需操作。
命中后的处理:按报告列出的缺失操作保留原禁用意图并补正向位;未知 FLAG 展开后复扫,过渡开关及改写结果按 M09-002 验证。
M09-002 · uvm_field_* automation · M04-013 · uvm_object_globals 字段标志位重构
S4 · UVM_VERSION_1_2 等版本宏删除,`ifdef 静默走 else 分支
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对精确版本与能力分支意图;勿机械替换成 POST 宏,逐库验证预处理结果。
S5 · default_precedence 兼容字段核对(原静默失效结论已撤销)
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:默认 coreservice 下仍有效;新代码推荐 set_default_precedence(),自定义 coreservice 需核对。
M05-004 · resource precedence 的设置时机与保留写法
S6 · packer big_endian/use_metadata 删除,位流布局不兼容
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:compat packer 仅部分恢复旧流;嵌套对象/GP 须显式契约并与 1.2 golden 逐位比对。
M02-001 · pack 位流格式改变 · M08-003 · uvm_tlm_generic_payload do_pack/do_unpack 无条件打包 m_dmi
S7 · 消息宏对 UVM_NO_ACTION 短路:catcher 不再能捕获被抑制消息
检测方式:文件级同现。仅检查同一文件的两个文本是否同时出现;跨文件 catcher 配置可能漏报,同文件也不能证明消息依赖关系。
同一文件同时包含:uvm_report_catcher 和 UVM_NO_ACTION。
命中后的处理:审计 demote 类 catcher 对 NO_ACTION 消息的依赖。
S8 · uvm_comparer show_max==0 语义反转(0=不限量)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:0 不再静音,按 verbosity/action 控制输出并检查返回值;另按 M02-005 核对类型名与 wrapper,本规则不覆盖类型判据变化。
S9 · uvm_tlm_fifo::flush() 广播变化,VCS 两项 FIFO 实测残留一项
检测方式:启发式。按调用行识别 TLM FIFO 的 flush,包括同文件派生类的继承调用;排除已知 packer/printer 等无关接收者。未知接收者降为提示,须核对跨文件继承、typedef 和实际对象。
文本候选模式(另有参数及类型检查)
命中后的处理:确认 TLM FIFO 后,在无并发清场边界使用 while(fifo.try_get(item)) 并断言 used()==0;保留 get_ap 广播。
M08-001 · uvm_tlm_fifo::flush() 不再向 get_ap 广播
S10 · +UVM_STACKTRACE 不再输出报告调用栈
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:保留可复现问题的旧调试构建,提交最小触发测试和工具/库版本确认目标调用栈流程;目前无已验证的通用替代命令。
M04-019 · +UVM_STACKTRACE 不再输出报告调用栈
S11 · resource_db 按名查询可能选择较低优先级资源
检测方式:启发式。按括号配对识别 resource_db 静态查询,支持嵌套类型参数;多个同名资源的实际优先级仍需验证。
命中后的处理:同名同类型多个资源时核对优先级;可 lookup_name 后 get_highest_precedence 并检查类型。
M05-010 · resource_db::get_by_name 在 2.0 可能选中较低优先级资源
S12 · TLM generic payload 比较可能漏检 extension
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:显式核对两侧 extension 键集合并逐项比较,不能只做双向 GP compare。
M08-002 · uvm_tlm_generic_payload::do_compare() 全面重写
S13 · 大端 reg map 可能丢失数据,单拍也受影响
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对总线宽度与 uvm_reg_data_t 整宽,包含32位寄存器/32位总线单拍;检查实际数据,补偿须独立验证。
S14 · 字段独立访问可能退化为整寄存器访问
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对 byte strobe、相邻字段与镜像;必要时用显式 bus sequence/frontdoor。
M07-021 · 支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问
S15 · resource 单侧 override 掩码与入池前 precedence 需核对
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:使用显式 set_name_override/set_type_override;特殊 precedence 在入池后设置。
M05-004 · resource precedence 的设置时机与保留写法 · M05-005 · uvm_resource_pool 重构
S16 · 旧两参 uvm_print_int 的 radix 可能被当成位宽
检测方式:启发式。只报告两参 uvm_print_int 的 SIZE/RADIX 歧义,省略默认参数及三参目标签名不因此报错。
文本候选模式(另有参数及类型检查)
命中后的处理:核对第二参是 SIZE,目标写法为 `uvm_print_int(value, $bits(value), UVM_HEX)。
S17 · sequence 响应溢出默认关闭报错
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:显式 set_response_queue_error_report_disabled(0),并核对响应消费及深度。
S18 · 命令行 set_config_int 超过 32 位可能截断
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:目标宽值改 set_config_bitstream,并断言 config_db 读回值。
M04-018 · +uvm_set_config_int 宽值经 32 位字符串转换被截断
S19 · push sequencer 第二笔请求可能报错或重复发送
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对请求 FIFO 消费;评估 pull 流程或经验证的派生修复,不能只屏蔽 SQRSNDREQGNI。
M06-019 · uvm_push_sequencer 未消费被 peek 的请求
S20 · sequence library 动态缩减 max 可能先返回越界索引
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:动态候选集在选择前验证索引,必要时派生带边界检查的选择器。
M06-017 · sequence_library 的选择边界与类型名
S21 · 正则缓存键未区分 regex 与 glob 模式
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:混合 uvm_re_match/uvm_is_match 时保留默认关闭缓存,核对匹配顺序。
S22 · backdoor encode/decode 数组修改未写回
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:确认是 reg callback;单 codec 可直接在 pre_write/post_read 改 rw.value,多 codec 保持逆序解码。
S23 · 全局和实例 catcher 混用可能重复调用
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:固定注册集合可先实例后全局;动态注册须实测实际调用次数。
M01-016 · callback 注册与重复 catcher 调用次数
S24 · 多拍 predictor 未聚合后续拍失败状态
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:monitor 聚合整次事务状态;每拍成功且事务完整后才预测。
M07-024 · predictor 仅继承首拍 status
D1 · uvm_deprecated_defines.svh 整文件删除(uvm_sequence_utils/uvm_package 等)
检测方式:文本匹配。覆盖 sequence/sequencer_utils 及其 begin/end 宏族;忽略普通诊断字符串中的宏名,保留真实宏调用。
文本候选模式(另有参数及类型检查)
命中后的处理:uvm_sequence_utils → uvm_object_utils +uvm_add_to_seq_lib;uvm_package → 显式 package。
M09-005 · 旧 sequence 注册宏改为 object/component 注册
D2 · UVM_NO_DEPRECATED 开关失效(极性翻转为 opt-in)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按是否需要保留 deprecated API 选择新开关;旧 opt-out 意图不能机械改为 opt-in。
D3 · UVM_SPARSE_ARRAY / uvm_reg_array(VCS 私有扩展,2.0 悬空引用编译失败)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:移除该 define,改用普通 uvm_reg 数组建模。
M07-018 · uvm_reg_array / uvm_reg_array_md 文件删除
D4 · UVM_REG_ENABLE_ADDRESS_EXCLUSION / uvm_reg_address_config(VCS 私有扩展删除)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改用 NO_REG_TESTS 等标准 resource 排除机制。
M07-019 · uvm_reg_address_config 与 get_registers_filtered_by_address 移除
D5 · disable_apply_cfg_settings / +UVM_DISABLE_APPLY_CFG_SETTINGS(VCS 1.2 私有开关删除)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改为在基类 override use_automatic_config() 返回 0。
D6 · snps_uvm_reg_bank(Synopsys 私有 reg-bank 扩展,API 有变)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:add_coverage 改为构造时声明能力,set_coverage 只控制启用;私有 predictor 不是静态 type_name() 替换,path 别名可保留。
M07-025 · 私有 reg-bank 覆盖率改为构造时声明
D7 · uvm_vector_to_string / uvm_dump_re_cache 删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:uvm_vector_to_string → uvm_bitstream_to_string;dump_re_cache 直接删除。
M04-016 · 删除 uvm_vector_to_string · M10-006 · 正则接口与缓存
D8 · VCS FGP / native_dumping 相关(uvm_fgp_*/vcs_uvm_alt/native_dumping)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:FGP 替代待 Synopsys 确认;引用 native_dumping 的脚本迁至标准 recorder,验证 DPI、事务字段与父子关系。
M10-007 · 旧 FGP 类与集成文件已删除 · M10-008 · Verdi native_dumping 录制文件已删除
D9 · 直接 include 旧文件路径(uvm_tlm2_time.svh 等已更名/删除)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改 include uvm_tlm_time.svh(类名 uvm_tlm_time 有 typedef 兜底)。
M08-007 · uvm_tlm_time 更名 uvm_time
D10 · uvm_resource_converter / UVM_USE_RESOURCE_CONVERTER 删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:删除该 define;转换需求改用派生资源类重写 m_value_as_string()。
M05-008 · 自定义 resource_converter 已删除
D11 · 内置 sequence 库删除(uvm_random_sequence/uvm_exhaustive_sequence/uvm_simple_sequence)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改用 uvm_sequence_library 或显式 sequence。
D12 · uvm_random_stimulus 降级为 @uvm-compat(非标准 API)
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:可继续用;建议排期替换为 sequence 方式。
M10-005 · uvm_random_stimulus 降级为 @uvm-compat 兼容 API
C17 · m_get_tr_database 改名
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:调用及 override 改为 get_tr_database,保留数据库选择逻辑。
M01-015 · 组件配置与 transaction database 改用访问器
C18 · packer 旧状态 API 与无参 get_packed_bits
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:确认 packer 后按条目改 get_packed_/set_packed_;状态流不能直接当跨版本载荷。
M02-002 · uvm_packer 状态存取 API 重命名与签名变更
C19 · tree/table printer 的换行字段或列宽方法删除
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:单行输出使用 uvm_line_printer;删除 calculate_max_widths 后核对自动列宽。
M02-008 · uvm_tree_printer.newline 字段私有化
C20 · phase 公共状态改为访问器
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:max_ready_to_end_iter 改 get/set_max_ready_to_end_iterations;phase_done 改 get_objection 并判空;count 无等价替代。
M03-005 · uvm_phase::max_ready_to_end_iter 公共字段删除 · M03-006 · 通过 get_objection() 获取 task phase 的 objection
C21 · sequence starting_phase 与旧仲裁类型
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:starting_phase 改 get/set_starting_phase,并在锁定前设置;类型改 uvm_sequencer_arb_mode。
M06-009 · UVM_SEQ_ARB_TYPE typedef 默认不可用 · M06-014 · starting_phase 的直接赋值与锁定限制
C22 · sequence_base 旧库管理方法
检测方式:启发式。排除已识别的 uvm_sequence_library 及同文件简单派生类的 get_sequence 调用,保留旧 sequence/sequencer 和未知接收者的入口。
文本候选模式(另有参数及类型检查)
命中后的处理:固定 sequence 直接 create/start;候选库移到具体 uvm_sequence_library。
M06-003 · uvm_sequence_base 废弃的 sequence-library 方法删除
C23 · 自定义 coreservice 的虚方法与安装入口
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:补齐目标虚方法;整体替换须核对库初始化与 Verdi 集成时机。
C24 · RAL 按完整名称查询去掉 m_ 前缀
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改 get_reg_by_full_name/get_field_by_full_name,并检查返回值非空。
C25 · 直接构造目标抽象 backdoor、callback 或 socket 基类
检测方式:启发式。区分基类句柄声明和直接 new,支持先声明后赋值及嵌套类型参数;同文件按词法作用域和局部遮蔽关联,复杂路径、typedef、类外定义与预处理仍需人工核对。
命中后的处理:句柄声明可保留;new 改具体 backdoor/callback 或对应具体 socket,按条目实现实际访问与连接。
M07-003 · uvm_reg_backdoor 变为抽象类 · M07-013 · 类抽象性调整 · M08-006 · TLM2 socket 基类全部改为 virtual class
C26 · 录制虚方法的 integer 签名或已删 m_get_handle
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:override 按目标 int 签名改写;删除无调用入口的 m_get_handle,普通句柄变量可保留。
M01-012 · transaction 开始录制与组件回调的参数变化 · M02-012 · 重写 recorder、stream、database 方法时同步句柄类型
C27 · type_name 被当作可写变量
检测方式:启发式。排除自有变量、形参及普通下标读取;受影响成员写入和注册宏与同名声明冲突仍提示,未解析完整类型系统。
文本候选模式(另有参数及类型检查)
命中后的处理:需要可写或 ref 字符串时复制到自有变量;普通 type_name 读取可保留。
M07-012 · uvm_reg_predictor · M09-006 · 注册宏的 type_name 改为函数形式 · M10-003 · 抽象组件的工厂注册与 type_name 使用
C28 · comparer 旧初始化与摘要接口
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:init 改 get_default;独立操作先 flush,自定义摘要使用返回值和 get_result。
D13 · VCS 数组录制上限接口与运行开关删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按字段关闭自动录制并在 do_record 中显式限制项数,核对实际后端输出。
D14 · VCS 旧 recorder 取时开关删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对时间契约;默认取时可删除旧 plusarg,显式时间需按单位转换后传给 open_recorder。
D15 · 旧 object 构造兼容开关删除
检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:为需要 factory/create 的对象类补 name 参数并转发 super;结合 C6 定位无参构造。
M09-003 · 工厂创建的对象需要带 name 参数的构造函数
D16 · 直接包含 policy 宏的旧宿主文件
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:改用 uvm_macros.svh 统一入口;默认 umbrella include 不受此项影响。
M09-010 · pack、unpack、record 宏的文件拆分
D17 · 直接依赖 UVM 内部表、执行入口或状态字段
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按关联内部实现条目迁移;先确认属于 UVM 对象,常规公开调用无需重审内部表。
M03-007 · 新增 uvm_phase_hopper 类 · M04-010 · uvm_report_object 的 report handler 改为懒创建 · M05-007 · resource 审计表搬迁与读写实现 · M05-009 · uvm_resource_pool 内部表结构改用 uvm_shared 队列 · M06-006 · uvm_sequencer 的仲裁状态位 public → protected
S25 · copy 显式传入 null
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:仅当空源表示不更新时判空;源对象应存在时修复创建/传递流程。
S26 · 按名称设置 factory override 的解析时机
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:设置后实际 create 并检查类型;报告只定位入口,不能静态证明名称何时注册。
S27 · 手工 printer 输出或自定义 recorder 递归
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:独立 emit 前 flush;do_record_object 只保留一次递归;派生策略按条目核对状态与输出。
M01-009 · 自定义打印、比较与录制 · M02-006 · uvm_printer emit() 必须配 flush() · M02-007 · 自定义 recorder 的对象递归与文本输出
S28 · phase 跳转显式传入 null
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:结束流程用实际 phase objection;跳转传合法 phase,未激活节点清除挂起状态另按条目处理。
M03-009 · phase.jump(null) 与跳转状态查询
S29 · event 触发数据读取与 reset 生命周期
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:脚本定位数据读取;跨 reset 继续使用旧数据时,在 reset 前保存到自有变量。
M03-011 · uvm_event#(T) trigger 默认数据机制
S30 · warning/error/fatal 报告的 verbosity 过滤变化
检测方式:启发式。覆盖 warning/error/fatal wrapper 和直接 uvm_report,按位置或命名参数核对 severity/verbosity/入口检查开关。排除已知 INFO、普通默认 fatal、显式 UVM_NONE/0;动态 severity 保留提示。负阈值等定制过滤需另查。
文本候选模式(另有参数及类型检查)
命中后的处理:核对原过滤意图;非 INFO 不再由 verbosity 隐藏,需用明确 action 或已验证 catcher。
M04-002 · uvm_report_warning/uvm_report_error 默认 verbosity 改为 UVM_NONE · M04-003 · 非 INFO 消息不再做 verbosity 过滤
S31 · report summary 与输出句柄路由
检测方式:启发式。普通 UVM_STDOUT 和默认/符号 stdout 摘要不报;定位数值比较、位运算及其他显式摘要文件参数。低 verbosity 摘要可见性仍需按条目验证。
文本候选模式(另有参数及类型检查)
命中后的处理:stdout 用默认参数或 UVM_STDOUT;显式文件摘要后按需恢复原 ID 文件配置,旧常量数值不可复用。
M04-007 · report_summarize 签名与文件路由行为变化 · M04-008 · UVM_FILE 相关常量值变化
S32 · 自研复位检查与旧字段排除资源
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按 has_reset 决定比较并恢复原 compare 设置,核对层级访问次数。
M07-004 · 内置复位测试按 has_reset() 跳过字段
S33 · 按字段访问权限字符串选择策略
检测方式:启发式。排除已识别的 memory/vreg 权限查询;reg field 或未知类型的调用仍按实际 WO map 条件核对。
文本候选模式(另有参数及类型检查)
命中后的处理:确认 reg field 后按目标 WO map 的折算结果更新分支及预测。
M07-007 · get_access() 返回的访问权限字符串变化
S34 · sequence lock/kill 与等待请求流程
检测方式:启发式。排除已识别的 process/component 接收者;未知类型仍保留启发式提示。扫描不能证明并发竞争与 kill 时序。
文本候选模式(另有参数及类型检查)
命中后的处理:定位并发入口;核对实际授权、kill 后下一笔请求及响应清理,不能仅凭调用确定并发关系。
M06-011 · 多个 sequence 同时 lock 时授权顺序改变 · M06-012 · driver 等待请求时 kill sequence · M06-013 · sequence.kill() 清理仲裁请求、锁与路由
S35 · 派生 TLM FIFO 的字段自动配置
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:依赖派生字段自动配置时 override use_automatic_config 返回 1,并验证非默认字段值。
M08-004 · 派生 TLM FIFO 的字段自动配置默认停止
S36 · 旧消息标识、类型字符串和日志开关
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:按对应条目更新日志解析;完成判据用业务观察量,类型判断优先使用 cast。
M03-004 · TEST_DONE 消息移除 · M03-008 · 自定义 phase 图 · M03-012 · uvm_event 系 get_type_name() 返回值变化 · M03-014 · objection trace · M04-009 · 消息时间戳默认由 $time 改为 $realtime · M08-008 · TLM 组件的工厂创建与类型名
S37 · pre_abort 与自定义 phase 图
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对 abort/phase 实际执行顺序及命令行配置读回值。
M01-008 · run_test、pre_abort 与命令行配置的执行顺序 · M03-008 · 自定义 phase 图
S38 · RAL Backdoor 伪 map、内置 sequence 访问次数与随机激励
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:Backdoor map 告警按 M07-005 区分 reg/field/mirror;field 后门入口可能不命中本规则,须另查默认 path;保留内置 sequence,复制实现时核对遍历,同 seed 不保证跨库逐笔数据一致。
M07-005 · 后门访问告警 · M07-006 · 内置 reg/mem sequence 的随机数据序列变化
S39 · memory 地址查询的越界路径
检测方式:启发式。排除已识别的 reg/vreg 地址查询;memory 或未知类型的调用仍需核对 offset 范围。
文本候选模式(另有参数及类型检查)
命中后的处理:确认是 memory 后验证 offset < get_size;普通寄存器同名调用不受此项影响。
M07-011 · uvm_mem::get_addresses 增加越界检查
S40 · 自定义 field 操作位宽或自动配置查询模式
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:核对自定义操作保留位和目标查询模式,默认配置不要求为此重写。
S41 · 无 DPI 构建与 Resource DB 隐式追踪依赖
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:无 DPI 单独验证匹配能力;需要资源访问日志时显式开启 UVM_RESOURCE_DB_TRACE。
M04-011 · get_arg_matches 重用统一匹配接口 · M05-012 · Resource DB 追踪需显式开启
S42 · config_db 非空 context 的正则作用域
检测方式:启发式。支持位置、命名及混合实参,定位非 null 或待确认 context 加字面 /regex/ 的 config_db::set;普通 glob 和显式 null context 不报此项。变量字符串与自定义实现仍需核对。
命中后的处理:常规 glob 调用可保留;核对非空 context 与 /regex/ 拼接后的实际匹配对象。
M05-003 · uvm_config_db#(T)::set 改进非空 context 下 /regex/ 拼接
S43 · 日志脚本包含旧 TLM 未实现接口文案
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:精确全文匹配按目标消息更新,优先按 ID 判断;不锚定全文的原匹配可能可保留。
S44 · pack/unpack 位流边界与 GP 布局
检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。
文本候选模式(另有参数及类型检查)
命中后的处理:定位位流产生/消费入口;确认外部接收端、历史数据及 GP 格式契约后逐位比对。
M02-001 · pack 位流格式改变 · M08-003 · uvm_tlm_generic_payload do_pack/do_unpack 无条件打包 m_dmi