跳转至

输入查询内容

    本页内容

    扫描代码与核对覆盖

    先用扫描器找出旧写法和适用线索,再按命中条目处理。脚本能检查已知名称、调用参数和部分 field FLAG 表达式,并给出修改建议;它不自动改写源文件。差异条目用 M01-001 这样的 ID 标识,扫描报告用 C2 这样的规则 ID 标识;一个规则可以关联多个条目,一个条目也可以对应多个规则。

    扫描自己的 SoC 代码使用 uvm_migration_scan.py,仅支持 VCS 内置 uvm-1.2uvm-ieee-2020-2.0 团队统一维护脚本与同目录的 uvm_migration_scan.yaml,运行脚本即自动读取这份配置。示例包里的三个 run_*_review.py 用于复现手册附带的实验,详见脚本分工

    1. 运行扫描

    团队将 YAML 中的 check_path 设置为实际工程目录,模板预填 [/project/tb]。从仓库或工具包根目录执行:

    1
    2
    3
    4
    5
    6
    7
    8
    # 不提供 path:扫描 /project/tb
    uv run tools/uvm_migration_scan.py
    
    # 提供相对 path:只扫描 /project/tb/env/
    uv run tools/uvm_migration_scan.py env/
    
    # 一次指定输出目录,JSON、CSV 和摘要都写入这里
    uv run tools/uvm_migration_scan.py env/ --output-dir ./reports
    

    不传 --output-dir 时使用 YAML 的 output_dir。每次固定生成 migration-report.jsonmigration-report.csvmigration-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: 1
    migration:
      from: uvm-1.2
      to: uvm-ieee-2020-2.0
    check_path:
      - /project/tb
    output_dir: ./reports
    exclude_dirs:
      - '(ut|bt|it|sst|st)/\w+/design\b'
      - '(ut|bt|it|sst|st)/\w+/work\b'
    exclude_files:
      - '^lpddr_(force|release)_dff\.sv$'
      - '^dwc_\w+'
    exclude_suffix: [.csv, .bin, .hex]
    include_suffix: []
    rules: []
    compatibility:
      UVM_ENABLE_DEPRECATED_API: true
      UVM_LEGACY_FIELD_MACRO_SEMANTICS: false
      uvm_compat_pkg_compiled: null
    hide_compat_covered: true
    remove_comments:
      slash:
        include_suffix: [.sv, .svh, .v, .vh]
        include_files: []
      hash:
        include_suffix: [.sh, .py, .yaml, .yml]
        include_files: []
    waivers: []
    
    配置 匹配与优先级
    version YAML 配置格式版本,固定为整数 1,不是 UVM 版本。
    migration 固定为 from: uvm-1.2to: 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_suffixrules、注释范围的 include_filesexclude_*: [] 表示没有排除项,waivers: [] 表示没有豁免项。去注释范围省略 include_suffix 时采用该模式的默认后缀,显式写 [] 则取消后缀限制;两种范围都为 [] 时,该模式处理所有已选文本。YAML 空值 null 不等同于 [];这些列表应明确写成 []

    迁移规则在脚本中维护,并关联差异条目及回归测试。YAML 仅接受本文列出的配置项;未知或重复配置键、错误类型、不支持的迁移路径、无效规则 ID 或正则返回 2。

    按文件范围去除注释

    同一份配置可以针对 SV 使用 slash 语法、针对 Shell/Python/YAML 使用 hash 语法。默认配置如下,可以直接修改后缀列表:

    1
    2
    3
    4
    5
    remove_comments:
      slash:
        include_suffix: [.sv, .svh, .v, .vh]
      hash:
        include_suffix: [.sh, .py, .yaml, .yml]
    

    两种模式互相独立:slash 去除 ///* ... */hash 去除引号外、未转义的 # 到行尾。上例 .sv 不会应用 hash,保留 #(...) 参数化和 #10 延时;.sh/.py 不会应用 slash。交付模板和脚本内置默认范围相同;省略 remove_comments、某个模式或该模式的 include_suffix 均采用相应默认后缀,显式列表会替换默认列表。

    每个模式可配置 include_suffixinclude_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=waivedsuppressed=true,终端明细与退出码忽略该项。未知 FLAG 的合并提示若只豁免部分 related_lines,整条仍显示且返回命中退出码;报告注明已匹配的部分位置。

    摘要保存每个 waiver 的匹配项数,零匹配也保留,便于复核过期路径或行号。兼容过滤和 waive 同时适用时,statuswaivedcompatibility 仍保留兼容依据。只有被过滤项时退出码可为 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 仍包含全部命中,以 statuscompatibilitysuppressed 标记过滤依据。仅有已过滤项时可返回 0,表示当前配置下没有未过滤线索,不表示完成迁移或行为验证。未知类型、未确认配置不会自动过滤。

    2. 从条目反查规则

    例如 M01-001 对应 C2 · 启发式,匹配 begin_event / end_event,包括类内省略接收者的继承成员。需要确认接收者是否为 uvm_transaction 或其派生类;同名自定义字段可能误报。

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

    --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 activecompat_coveredwaivedcompatibility 独立记录适用的兼容选项
    suppressed 是否由兼容配置或完整豁免从终端和退出码中过滤;JSON/CSV 中仍保留
    waivers 匹配的团队豁免 ID、原因和行号;未匹配时为空数组

    摘要文件记录有效配置、实际扫描文件、跳过路径及原因、错误、命中和过滤计数、每个 waiver 的匹配项数,以及 completeexit_codeeffective_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/enduvm_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_ONUVM_ALL_ON | UVM_NOCOPYUVM_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 文本匹配 M02-003
    C2 启发式 M01-001
    C3 启发式 M01-002 · M03-002
    C4 启发式 M03-001
    C5 文本匹配 M09-004
    C6 启发式 M09-003
    C7 启发式 M05-001 · M05-002
    C8 文本匹配 M06-004
    C9 启发式 M07-002
    C10a 文本匹配 M04-004
    C10b 文本匹配 M04-005
    C10c 启发式 M04-004
    C11 文本匹配 M01-003 · M04-006
    C12 文本匹配 M01-004
    C13 文本匹配 M02-004
    C14 文本匹配 M06-007
    C15 启发式 M08-011
    C16 文本匹配 M05-011
    S1 启发式 M06-001 · M06-002
    S2 文本匹配 M03-003
    S3 启发式 M09-002 · M04-013
    S4 文本匹配 M09-008
    S5 启发式 M05-004
    S6 文本匹配 M02-001 · M08-003
    S7 文件级同现 M04-001
    S8 文本匹配 M02-005
    S9 启发式 M08-001
    S10 文本匹配 M04-019
    S11 启发式 M05-010
    S12 启发式 M08-002
    S13 启发式 M07-020
    S14 启发式 M07-021
    S15 启发式 M05-004 · M05-005
    S16 启发式 M02-004
    S17 启发式 M06-008
    S18 启发式 M04-018
    S19 启发式 M06-019
    S20 启发式 M06-017
    S21 启发式 M10-006
    S22 启发式 M07-023
    S23 启发式 M01-016
    S24 启发式 M07-024
    D1 文本匹配 M09-005
    D2 文本匹配 M09-007
    D3 文本匹配 M07-018
    D4 文本匹配 M07-019
    D5 文本匹配 M01-007
    D6 文本匹配 M07-025
    D7 文本匹配 M04-016 · M10-006
    D8 文本匹配 M10-007 · M10-008
    D9 文本匹配 M08-007
    D10 文本匹配 M05-008
    D11 文本匹配 M06-001
    D12 文本匹配 M10-005
    C17 文本匹配 M01-015
    C18 启发式 M02-002
    C19 启发式 M02-008
    C20 启发式 M03-005 · M03-006
    C21 启发式 M06-009 · M06-014
    C22 启发式 M06-003
    C23 启发式 M01-014
    C24 文本匹配 M07-014
    C25 启发式 M07-003 · M07-013 · M08-006
    C26 启发式 M01-012 · M02-012
    C27 启发式 M07-012 · M09-006 · M10-003
    C28 启发式 M02-005
    D13 文本匹配 M02-016
    D14 文本匹配 M02-017
    D15 文本匹配 M09-003
    D16 启发式 M09-010
    D17 启发式 M03-007 · M04-010 · M05-007 · M05-009 · M06-006
    S25 启发式 M01-005
    S26 启发式 M01-010
    S27 启发式 M01-009 · M02-006 · M02-007
    S28 启发式 M03-009
    S29 启发式 M03-011
    S30 启发式 M04-002 · M04-003
    S31 启发式 M04-007 · M04-008
    S32 启发式 M07-004
    S33 启发式 M07-007
    S34 启发式 M06-011 · M06-012 · M06-013
    S35 启发式 M08-004
    S36 启发式 M03-004 · M03-008 · M03-012 · M03-014 · M04-009 · M08-008
    S37 启发式 M01-008 · M03-008
    S38 启发式 M07-005 · M07-006
    S39 启发式 M07-011
    S40 启发式 M09-015
    S41 启发式 M04-011 · M05-012
    S42 启发式 M05-003
    S43 启发式 M08-009
    S44 启发式 M02-001 · M08-003

    C1 · printer knobs 宽度字段 / uvm_printer_knobs 类型名删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_printer_knobs\b|\.\s*knobs\s*\.\s*(?:name_width|type_width|size_width|value_width|max_width|truncation)\b
    

    命中后的处理:删除宽度字段引用(2.0 列宽自动计算);类型引用改 accessor。

    M02-003 · 删除无效的打印宽度配置

    C2 · uvm_transaction::begin_event/end_event 字段删除

    检测方式:启发式。匹配 begin_event/end_event,包括类内省略接收者的继承成员;仍需区分同名用户字段,events 池的直接访问未完整覆盖。

    文本候选模式(另有参数及类型检查)
    \b(?:begin_event|end_event)\b
    

    命中后的处理:改用 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)

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:do_kill_all|stop_phase|enable_stop_interrupt|kill)\s*\(|\b(?:stop_request|force_stop|stop_timeout)\b
    

    命中后的处理:确认旧 component 接口后用完成握手、检查器排空和成对 objection 收尾;sequence.kill/process.kill 另按原语义核对。

    M01-002 · component kill/status 删除与进程收尾 · M03-002 · stop 机制整体删除

    C4 · uvm_event::add_callback/delete_callback 删除

    检测方式:启发式。识别带接收者及类内继承调用,允许点号附近的空白和注释;通用 callback 方法名仍需确认属于 uvm_event。

    文本候选模式(另有参数及类型检查)
    \b(?:add_callback|delete_callback)\s*\(
    

    命中后的处理:确认 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 或改写)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    `uvm_(?:do_with|do_pri|do_pri_with|do_on|do_on_pri|do_on_with|do_on_pri_with|create_on|create_seq|do_seq|do_seq_with|send_pri|rand_send_pri|rand_send_with|rand_send_pri_with)\b
    

    命中后的处理:按 M09-004 完整映射直接改写;需保留旧宏时临时加 +define+UVM_ENABLE_DEPRECATED_API,两种方式均验证原约束、sequencer 和优先级。

    M09-004 · uvm_do* 动作宏

    C6 · 无参构造函数:核对旧版 constructor 兼容宏及 factory 注册

    检测方式:启发式。识别有/无括号的无参构造;已知注册宏和显式 registry 关联为编译风险候选。未确认依赖及自定义 create 降为提示,直接 new 的无参类可保留;项目包装宏、外部 registry 和继承仍需核对。

    文本候选模式(另有参数及类型检查)
    \bfunction\s+(?:(?:\w+\s*::\s*)+)?new\s*(?:\(\s*\))?\s*;
    

    命中后的处理:确认 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、复杂层级路径与跨文件类型仍需核对。

    文本候选模式(另有参数及类型检查)
    `UVM_RESOURCE_GET_FCNS\b
    

    命中后的处理:对象 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 调用不触发此规则。仍需区分同名用户方法。

    文本候选模式(另有参数及类型检查)
    \b(?:Xcheck_accessX|get_local_map|get_default_map)\s*\(
    

    命中后的处理:删除实际传入的 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)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:uvm_test_done|global_stop_request|set_global_timeout|set_global_stop_timeout)\b
    

    命中后的处理:结束控制改为实际 phase 的成对 raise/drop 与完成条件;set_global_timeout 改 root.set_timeout,stop 收尾超时单独设计。

    M04-004 · 旧全局配置、timeout 和 stop 函数需要改写

    C10b · reporting deprecated 方法删除(get_report_server/process_report/compose_message)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:get_report_server|process_report|compose_message)\s*\(
    

    命中后的处理: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 删除(注意:组件方法仍可用)

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bset_config_(?:int|object|string)\s*\(
    

    命中后的处理:全局配置可转 root 同名组件方法;改 config_db 时同步类型、scope 与克隆契约;未限定的组件成员调用需辨别。

    M04-004 · 旧全局配置、timeout 和 stop 函数需要改写

    C11 · field automation 旧钩子不再被调用,status container/scope stack 删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    __m_uvm_field_automation|__m_uvm_status_container|\buvm_status_container\b|\buvm_scope_stack\b
    

    命中后的处理:改写为 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

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    extends\s+(?:uvm_pkg\s*::\s*)?uvm_factory\b
    

    命中后的处理:补 is_type_registered/is_type_name_registered/set_type_alias/set_inst_alias 实现。

    M01-004 · 自定义 factory 子类需要补充虚方法

    C13 · uvm_print_* 宏数字后缀变体删除、签名重排

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    `uvm_print_(?:int3|int4|object2|string2|string4|queue3|qda3|qda4|aa_int_object|aa_string_object)\b
    

    命中后的处理:按新原型改写(VALUE,SIZE,RADIX,VALUE_TYPE,PRINTER),建议直接用 printer.print_* API。

    M02-004 · 打印整数时显式传位宽

    C14 · 自定义 user_priority_arbitration 旧 integer 签名在 VCS 2.0 不匹配

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bfunction\s+integer\s+user_priority_arbitration\b|\buser_priority_arbitration\s*\(\s*integer\b
    

    命中后的处理:返回值与队列形参改 int,直接调用实参队列同步类型。

    M06-007 · 自定义 sequence 仲裁函数改用 int 签名

    C15 · port 连接查询的 ref 容器类型变化

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:get_connected_to|get_provided_to)\s*\(
    

    命中后的处理:直接 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 无需迁移)

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \"default_sequence\"|\badd_sequence\s*\(|\bstart_default_sequence\b|\bnum_sequences\s*\(|\bget_seq_kind\s*\(|\bmax_random_count\b|\bmax_random_depth\b
    

    命中后的处理:字符串式改为 phase wrapper/instance 配置;其他命中核对类型与作用域。

    M06-001 · 内置 sequence 库整体删除 · M06-002 · 字符串 default_sequence 不再启动激励

    S2 · uvm_test_done_objection 孤儿化(raise/drop 不再门控 run phase)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_test_done_objection\b
    

    命中后的处理:改用 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 分支

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_VERSION_1_2\b|\bUVM_MAJOR_VERSION_1_2\b|\bUVM_MAJOR_REV_1\b|\bUVM_MINOR_REV_2\b
    

    命中后的处理:核对精确版本与能力分支意图;勿机械替换成 POST 宏,逐库验证预处理结果。

    M09-008 · 版本宏与版本字符串的迁移

    S5 · default_precedence 兼容字段核对(原静默失效结论已撤销)

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bdefault_precedence\b
    

    命中后的处理:默认 coreservice 下仍有效;新代码推荐 set_default_precedence(),自定义 coreservice 需核对。

    M05-004 · resource precedence 的设置时机与保留写法

    S6 · packer big_endian/use_metadata 删除,位流布局不兼容

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bbig_endian\b|\buse_metadata\b
    

    命中后的处理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_catcherUVM_NO_ACTION

    命中后的处理:审计 demote 类 catcher 对 NO_ACTION 消息的依赖。

    M04-001 · 消息宏重写

    S8 · uvm_comparer show_max==0 语义反转(0=不限量)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bshow_max\s*=\s*0\b|set_show_max\s*\(\s*0\s*\)
    

    命中后的处理:0 不再静音,按 verbosity/action 控制输出并检查返回值;另按 M02-005 核对类型名与 wrapper,本规则不覆盖类型判据变化。

    M02-005 · 自定义比较

    S9 · uvm_tlm_fifo::flush() 广播变化,VCS 两项 FIFO 实测残留一项

    检测方式:启发式。按调用行识别 TLM FIFO 的 flush,包括同文件派生类的继承调用;排除已知 packer/printer 等无关接收者。未知接收者降为提示,须核对跨文件继承、typedef 和实际对象。

    文本候选模式(另有参数及类型检查)
    \bflush\s*\(
    

    命中后的处理:确认 TLM FIFO 后,在无并发清场边界使用 while(fifo.try_get(item)) 并断言 used()==0;保留 get_ap 广播。

    M08-001 · uvm_tlm_fifo::flush() 不再向 get_ap 广播

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

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_STACKTRACE\b
    

    命中后的处理:保留可复现问题的旧调试构建,提交最小触发测试和工具/库版本确认目标调用栈流程;目前无已验证的通用替代命令。

    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

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_tlm_generic_payload\b
    

    命中后的处理:显式核对两侧 extension 键集合并逐项比较,不能只做双向 GP compare。

    M08-002 · uvm_tlm_generic_payload::do_compare() 全面重写

    S13 · 大端 reg map 可能丢失数据,单拍也受影响

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_BIG_ENDIAN\b
    

    命中后的处理:核对总线宽度与 uvm_reg_data_t 整宽,包含32位寄存器/32位总线单拍;检查实际数据,补偿须独立验证。

    M07-020 · 大端 map 的整宽反转可能破坏数据

    S14 · 字段独立访问可能退化为整寄存器访问

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bsupports_byte_enable\b|\bis_indv_accessible\b
    

    命中后的处理:核对 byte strobe、相邻字段与镜像;必要时用显式 bus sequence/frontdoor。

    M07-021 · 支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问

    S15 · resource 单侧 override 掩码与入池前 precedence 需核对

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:NAME_OVERRIDE|TYPE_OVERRIDE)\b|\.\s*precedence\s*=
    

    命中后的处理:使用显式 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 歧义,省略默认参数及三参目标签名不因此报错。

    文本候选模式(另有参数及类型检查)
    `uvm_print_int\s*\(
    

    命中后的处理:核对第二参是 SIZE,目标写法为 `uvm_print_int(value, $bits(value), UVM_HEX)。

    M02-004 · 打印整数时显式传位宽

    S17 · sequence 响应溢出默认关闭报错

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bextends\s+(?:uvm_pkg\s*::\s*)?uvm_sequence\b|\bset_response_queue_depth\s*\(
    

    命中后的处理:显式 set_response_queue_error_report_disabled(0),并核对响应消费及深度。

    M06-008 · 响应队列溢出默认不报错

    S18 · 命令行 set_config_int 超过 32 位可能截断

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:uvm_set_config_int|UVM_SET_CONFIG_INT)\b
    

    命中后的处理:目标宽值改 set_config_bitstream,并断言 config_db 读回值。

    M04-018 · +uvm_set_config_int 宽值经 32 位字符串转换被截断

    S19 · push sequencer 第二笔请求可能报错或重复发送

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_push_sequencer\b
    

    命中后的处理:核对请求 FIFO 消费;评估 pull 流程或经验证的派生修复,不能只屏蔽 SQRSNDREQGNI。

    M06-019 · uvm_push_sequencer 未消费被 peek 的请求

    S20 · sequence library 动态缩减 max 可能先返回越界索引

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bselect_sequence\s*\(|\bUVM_SEQ_LIB_USER\b
    

    命中后的处理:动态候选集在选择前验证索引,必要时派生带边界检查的选择器。

    M06-017 · sequence_library 的选择边界与类型名

    S21 · 正则缓存键未区分 regexglob 模式

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_ENABLE_RE_MATCH_CACHE\b
    

    命中后的处理:混合 uvm_re_match/uvm_is_match 时保留默认关闭缓存,核对匹配顺序。

    M10-006 · 正则接口与缓存

    S22 · backdoor encode/decode 数组修改未写回

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:encode|decode)\s*\(
    

    命中后的处理:确认是 reg callback;单 codec 可直接在 pre_write/post_read 改 rw.value,多 codec 保持逆序解码。

    M07-023 · 后门编解码可能失效

    S23 · 全局和实例 catcher 混用可能重复调用

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_report_cb\s*::\s*add\s*\(|\buvm_report_catcher\b
    

    命中后的处理:固定注册集合可先实例后全局;动态注册须实测实际调用次数。

    M01-016 · callback 注册与重复 catcher 调用次数

    S24 · 多拍 predictor 未聚合后续拍失败状态

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_reg_predictor\b
    

    命中后的处理:monitor 聚合整次事务状态;每拍成功且事务完整后才预测。

    M07-024 · predictor 仅继承首拍 status

    D1 · uvm_deprecated_defines.svh 整文件删除(uvm_sequence_utils/uvm_package 等)

    检测方式:文本匹配。覆盖 sequence/sequencer_utils 及其 begin/end 宏族;忽略普通诊断字符串中的宏名,保留真实宏调用。

    文本候选模式(另有参数及类型检查)
    `uvm_(?:(?:sequence|sequencer)_utils(?:_begin|_end)?|package|end_package|declare_sequence_lib|update_sequence_lib|update_sequence_lib_and_item)\b
    

    命中后的处理: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)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_NO_DEPRECATED\b
    

    命中后的处理:按是否需要保留 deprecated API 选择新开关;旧 opt-out 意图不能机械改为 opt-in。

    M09-007 · 废弃开关极性翻转

    D3 · UVM_SPARSE_ARRAY / uvm_reg_array(VCS 私有扩展,2.0 悬空引用编译失败)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_SPARSE_ARRAY\b|\buvm_reg_array\b
    

    命中后的处理:移除该 define,改用普通 uvm_reg 数组建模。

    M07-018 · uvm_reg_array / uvm_reg_array_md 文件删除

    D4 · UVM_REG_ENABLE_ADDRESS_EXCLUSION / uvm_reg_address_config(VCS 私有扩展删除)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_REG_ENABLE_ADDRESS_EXCLUSION\b|\buvm_reg_address_config\b
    

    命中后的处理:改用 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 私有开关删除)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bdisable_apply_cfg_settings\b|\bUVM_DISABLE_APPLY_CFG_SETTINGS\b
    

    命中后的处理:改为在基类 override use_automatic_config() 返回 0。

    M01-007 · 禁用自动字段配置

    D6 · snps_uvm_reg_bank(Synopsys 私有 reg-bank 扩展,API 有变)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bsnps_uvm_reg_bank(?:_group|_set|ed)?\b|\bsnps_uvm_reg_predictor\b|\bcreate_snps_bank_map\b
    

    命中后的处理:add_coverage 改为构造时声明能力,set_coverage 只控制启用;私有 predictor 不是静态 type_name() 替换,path 别名可保留。

    M07-025 · 私有 reg-bank 覆盖率改为构造时声明

    D7 · uvm_vector_to_string / uvm_dump_re_cache 删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_vector_to_string\b|\buvm_dump_re_cache\b
    

    命中后的处理: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)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_fgp_\w+|\bvcs_uvm_alt\b|native_dumping
    

    命中后的处理:FGP 替代待 Synopsys 确认;引用 native_dumping 的脚本迁至标准 recorder,验证 DPI、事务字段与父子关系。

    M10-007 · 旧 FGP 类与集成文件已删除 · M10-008 · Verdi native_dumping 录制文件已删除

    D9 · 直接 include 旧文件路径(uvm_tlm2_time.svh 等已更名/删除)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    `include\s+\"[^\"]*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 删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_resource_converter\b|\bUVM_USE_RESOURCE_CONVERTER\b
    

    命中后的处理:删除该 define;转换需求改用派生资源类重写 m_value_as_string()。

    M05-008 · 自定义 resource_converter 已删除

    D11 · 内置 sequence 库删除(uvm_random_sequence/uvm_exhaustive_sequence/uvm_simple_sequence)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_(?:random|exhaustive|simple)_sequence\b
    

    命中后的处理:改用 uvm_sequence_library 或显式 sequence。

    M06-001 · 内置 sequence 库整体删除

    D12 · uvm_random_stimulus 降级为 @uvm-compat(非标准 API)

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_random_stimulus\b
    

    命中后的处理:可继续用;建议排期替换为 sequence 方式。

    M10-005 · uvm_random_stimulus 降级为 @uvm-compat 兼容 API

    C17 · m_get_tr_database 改名

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bm_get_tr_database\s*\(
    

    命中后的处理:调用及 override 改为 get_tr_database,保留数据库选择逻辑。

    M01-015 · 组件配置与 transaction database 改用访问器

    C18 · packer 旧状态 API 与无参 get_packed_bits

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:get_bits|get_bytes|get_ints|put_bits|put_bytes|put_ints|set_packed_size|unpack_object_ext)\s*\(|\bget_packed_bits\s*\(\s*\)
    

    命中后的处理:确认 packer 后按条目改 get_packed_/set_packed_;状态流不能直接当跨版本载荷。

    M02-002 · uvm_packer 状态存取 API 重命名与签名变更

    C19 · tree/table printer 的换行字段或列宽方法删除

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \.\s*newline\b|\bcalculate_max_widths\s*\(
    

    命中后的处理:单行输出使用 uvm_line_printer;删除 calculate_max_widths 后核对自动列宽。

    M02-008 · uvm_tree_printer.newline 字段私有化

    C20 · phase 公共状态改为访问器

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:max_ready_to_end_iter|phase_done)\b|\bget_ready_to_end_count\s*\(
    

    命中后的处理: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 与旧仲裁类型

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bstarting_phase\b|\bUVM_SEQ_ARB_TYPE\b
    

    命中后的处理: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 和未知接收者的入口。

    文本候选模式(另有参数及类型检查)
    \b(?:get_sequence|get_sequence_by_name|do_sequence_kind|create_and_start_sequence_by_name|num_sequences|get_seq_kind)\s*\(
    

    命中后的处理:固定 sequence 直接 create/start;候选库移到具体 uvm_sequence_library。

    M06-003 · uvm_sequence_base 废弃的 sequence-library 方法删除

    C23 · 自定义 coreservice 的虚方法与安装入口

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bextends\s+(?:uvm_pkg\s*::\s*)?uvm_(?:default_coreservice_t|coreservice_t)\b|\buvm_coreservice_t\s*::\s*set\s*\(
    

    命中后的处理:补齐目标虚方法;整体替换须核对库初始化与 Verdi 集成时机。

    M01-014 · 自定义 coreservice

    C24 · RAL 按完整名称查询去掉 m_ 前缀

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bm_get_(?:reg|field)_by_full_name\s*\(
    

    命中后的处理:改 get_reg_by_full_name/get_field_by_full_name,并检查返回值非空。

    M07-014 · 静态按名查找函数去 m_ 前缀

    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

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bm_get_handle\s*\(|\bfunction\s+(?:automatic\s+)?integer\s+(?:\w+::)*(?:get_handle|begin_tr|begin_child_tr)\s*\(|\b(?:do_begin_tr|do_end_tr|do_link_tr|do_free_tr)\s*\([^;]*?\binteger\b
    

    命中后的处理:override 按目标 int 签名改写;删除无调用入口的 m_get_handle,普通句柄变量可保留。

    M01-012 · transaction 开始录制与组件回调的参数变化 · M02-012 · 重写 recorder、stream、database 方法时同步句柄类型

    C27 · type_name 被当作可写变量

    检测方式:启发式。排除自有变量、形参及普通下标读取;受影响成员写入和注册宏与同名声明冲突仍提示,未解析完整类型系统。

    文本候选模式(另有参数及类型检查)
    \btype_name\s*(?:\[[^\]\n]*\]\s*)?(?:=(?!=)|\+=)
    

    命中后的处理:需要可写或 ref 字符串时复制到自有变量;普通 type_name 读取可保留。

    M07-012 · uvm_reg_predictor · M09-006 · 注册宏的 type_name 改为函数形式 · M10-003 · 抽象组件的工厂注册与 type_name 使用

    C28 · comparer 旧初始化与摘要接口

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_comparer\s*::\s*init\s*\(|\bprint_rollup\s*\(
    

    命中后的处理:init 改 get_default;独立操作先 flush,自定义摘要使用返回值和 get_result。

    M02-005 · 自定义比较

    D13 · VCS 数组录制上限接口与运行开关删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:UVM_ARRAY_NUM_LIMIT|verdi_get_array_limit|max_array_limit_check|max_array_num_limit)\b
    

    命中后的处理:按字段关闭自动录制并在 do_record 中显式限制项数,核对实际后端输出。

    M02-016 · 旧数组录制上限失效

    D14 · VCS 旧 recorder 取时开关删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_VERDI_BEGIN_TR_REALTIME\b
    

    命中后的处理:核对时间契约;默认取时可删除旧 plusarg,显式时间需按单位转换后传给 open_recorder。

    M02-017 · 旧录制取时开关失效

    D15 · 旧 object 构造兼容开关删除

    检测方式:文本匹配。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bUVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR\b
    

    命中后的处理:为需要 factory/create 的对象类补 name 参数并转发 super;结合 C6 定位无参构造。

    M09-003 · 工厂创建的对象需要带 name 参数的构造函数

    D16 · 直接包含 policy 宏的旧宿主文件

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    `include\s+"[^"\n]*uvm_object_defines\.svh"
    

    命中后的处理:改用 uvm_macros.svh 统一入口;默认 umbrella include 不受此项影响。

    M09-010 · pack、unpack、record 宏的文件拆分

    D17 · 直接依赖 UVM 内部表、执行入口或状态字段

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:m_run_phases|m_rh|sequence_item_requested|get_next_item_called|rtab|ttab)\b|\.\s*access\s*\[
    

    命中后的处理:按关联内部实现条目迁移;先确认属于 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

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bcopy\s*\(\s*(?:\.rhs\s*\(\s*)?null\b
    

    命中后的处理:仅当空源表示不更新时判空;源对象应存在时修复创建/传递流程。

    M01-005 · copy(null) 现在计为错误

    S26 · 按名称设置 factory override 的解析时机

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bset_(?:type|inst)_override_by_name\s*\(
    

    命中后的处理:设置后实际 create 并检查类型;报告只定位入口,不能静态证明名称何时注册。

    M01-010 · 工厂 name 覆盖延迟解析

    S27 · 手工 printer 输出或自定义 recorder 递归

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bemit\s*\(|\bdo_record_object\s*\(|\bextends\s+(?:uvm_pkg\s*::\s*)?uvm_(?:(?:table|tree|line)_printer|printer|comparer|recorder|text_recorder)\b
    

    命中后的处理:独立 emit 前 flush;do_record_object 只保留一次递归;派生策略按条目核对状态与输出。

    M01-009 · 自定义打印、比较与录制 · M02-006 · uvm_printer emit() 必须配 flush() · M02-007 · 自定义 recorder 的对象递归与文本输出

    S28 · phase 跳转显式传入 null

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:jump|set_jump_phase)\s*\(\s*(?:\.phase\s*\(\s*)?null\b
    

    命中后的处理:结束流程用实际 phase objection;跳转传合法 phase,未激活节点清除挂起状态另按条目处理。

    M03-009 · phase.jump(null) 与跳转状态查询

    S29 · event 触发数据读取与 reset 生命周期

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bget_trigger_data\s*\(
    

    命中后的处理:脚本定位数据读取;跨 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 保留提示。负阈值等定制过滤需另查。

    文本候选模式(另有参数及类型检查)
    \buvm_report(?:_(?:warning|error|fatal))?\s*\(
    

    命中后的处理:核对原过滤意图;非 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 摘要可见性仍需按条目验证。

    文本候选模式(另有参数及类型检查)
    \breport_summarize\s*\(|\bUVM_STDOUT\b
    

    命中后的处理:stdout 用默认参数或 UVM_STDOUT;显式文件摘要后按需恢复原 ID 文件配置,旧常量数值不可复用。

    M04-007 · report_summarize 签名与文件路由行为变化 · M04-008 · UVM_FILE 相关常量值变化

    S32 · 自研复位检查与旧字段排除资源

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bNO_REG_HW_RESET_TEST\b|\bextends\s+(?:uvm_pkg\s*::\s*)?uvm_reg_hw_reset_seq\b
    

    命中后的处理:按 has_reset 决定比较并恢复原 compare 设置,核对层级访问次数。

    M07-004 · 内置复位测试按 has_reset() 跳过字段

    S33 · 按字段访问权限字符串选择策略

    检测方式:启发式。排除已识别的 memory/vreg 权限查询;reg field 或未知类型的调用仍按实际 WO map 条件核对。

    文本候选模式(另有参数及类型检查)
    \bget_access\s*\(
    

    命中后的处理:确认 reg field 后按目标 WO map 的折算结果更新分支及预测。

    M07-007 · get_access() 返回的访问权限字符串变化

    S34 · sequence lock/kill 与等待请求流程

    检测方式:启发式。排除已识别的 process/component 接收者;未知类型仍保留启发式提示。扫描不能证明并发竞争与 kill 时序。

    文本候选模式(另有参数及类型检查)
    \b(?:lock|grab|kill)\s*\(
    

    命中后的处理:定位并发入口;核对实际授权、kill 后下一笔请求及响应清理,不能仅凭调用确定并发关系。

    M06-011 · 多个 sequence 同时 lock 时授权顺序改变 · M06-012 · driver 等待请求时 kill sequence · M06-013 · sequence.kill() 清理仲裁请求、锁与路由

    S35 · 派生 TLM FIFO 的字段自动配置

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bextends\s+(?:uvm_pkg\s*::\s*)?uvm_tlm_(?:fifo_base|fifo|analysis_fifo)\b
    

    命中后的处理:依赖派生字段自动配置时 override use_automatic_config 返回 1,并验证非默认字段值。

    M08-004 · 派生 TLM FIFO 的字段自动配置默认停止

    S36 · 旧消息标识、类型字符串和日志开关

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:TEST_DONE|PH_ADD_PHASE|UVM_OBJECTION_TRACE|UVM_USE_REALTIME_IN_MSGS)\b|[\"']uvm_event[\"']|[\"']uvm_transport_channel[^\"'\n]*[\"']
    

    命中后的处理:按对应条目更新日志解析;完成判据用业务观察量,类型判断优先使用 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 图

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \bpre_abort\s*\(|\bextends\s+(?:uvm_pkg\s*::\s*)?uvm_(?:task|function|topdown|bottomup)_phase\b|\buvm_set_(?:verbosity|action|severity)\b
    

    命中后的处理:核对 abort/phase 实际执行顺序及命令行配置读回值。

    M01-008 · run_test、pre_abort 与命令行配置的执行顺序 · M03-008 · 自定义 phase 图

    S38 · RAL Backdoor 伪 map、内置 sequence 访问次数与随机激励

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \buvm_(?:reg_access|reg_single_access|reg_bit_bash|reg_single_bit_bash|mem_access|reg_mem_shared_access)_seq\b|\buvm_reg_map\s*::\s*backdoor\s*\(
    

    命中后的处理:Backdoor map 告警按 M07-005 区分 reg/field/mirror;field 后门入口可能不命中本规则,须另查默认 path;保留内置 sequence,复制实现时核对遍历,同 seed 不保证跨库逐笔数据一致。

    M07-005 · 后门访问告警 · M07-006 · 内置 reg/mem sequence 的随机数据序列变化

    S39 · memory 地址查询的越界路径

    检测方式:启发式。排除已识别的 reg/vreg 地址查询;memory 或未知类型的调用仍需核对 offset 范围。

    文本候选模式(另有参数及类型检查)
    \bget_addresses\s*\(
    

    命中后的处理:确认是 memory 后验证 offset < get_size;普通寄存器同名调用不受此项影响。

    M07-011 · uvm_mem::get_addresses 增加越界检查

    S40 · 自定义 field 操作位宽或自动配置查询模式

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:UVM_MACRO_NUMFLAGS|UVM_FIELD_FLAG_SIZE|UVM_COMPONENT_CONFIG_MODE_DEFAULT)\b
    

    命中后的处理:核对自定义操作保留位和目标查询模式,默认配置不要求为此重写。

    M09-015 · 字段自动配置的查询模式与操作位宽

    S41 · 无 DPI 构建与 Resource DB 隐式追踪依赖

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:UVM_CMDLINE_NO_DPI|UVM_NO_DPI|UVM_REGEX_NO_DPI|UVM_VERDI_NO_VERDI_TRACE|is_verdi_trace_aware_used)\b
    

    命中后的处理:无 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 未实现接口文案

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    (?<!UVM )\bTLM(?:-2)? interface (?:task|function) not implemented\b
    

    命中后的处理:精确全文匹配按目标消息更新,优先按 ID 判断;不锚定全文的原匹配可能可保留。

    M08-009 · TLM 接口未实现错误消息文本变化

    S44 · pack/unpack 位流边界与 GP 布局

    检测方式:启发式。文本线索只定位待核对代码,需确认类型、生效配置与调用路径;不构成完整语义检测。

    文本候选模式(另有参数及类型检查)
    \b(?:pack|pack_bytes|pack_ints|unpack|unpack_bytes|unpack_ints)\s*\(|`uvm_(?:pack|unpack)_\w+\s*\(
    

    命中后的处理:定位位流产生/消费入口;确认外部接收端、历史数据及 GP 格式契约后逐位比对。

    M02-001 · pack 位流格式改变 · M08-003 · uvm_tlm_generic_payload do_pack/do_unpack 无条件打包 m_dmi

    版本适用范围