- 问题排查
- 按影响排查
- 静默与数据风险
本页内容
静默与数据风险
高风险 · 在回归通过前逐项验证
编译通过与仿真无报错不能证明迁移等价。下列条目需观察激励、检查器、事务、位流或寄存器镜像。
Object / Factory
| 规则 | 差异与修改方向 |
|---|---|
| C23 | 自定义 coreservice:新增虚方法与初始化时机 用户接口与行为 · 自定义 coreservice 必须匹配目标接口,并在库实际初始化之前安装;用户 initial 的第一行不保证足够早。 |
| S23 | callback 注册与重复 catcher 调用次数 用户接口与行为 · 核对每条消息实际触发的 catcher 次数;全局与实例注册顺序可能改变重复调用行为。 |
Comparer / Printer / Packer / Recorder
| 规则 | 差异与修改方向 |
|---|---|
| S6 / S44 | pack 位流格式改变:检查外部接收端与历史数据 用户接口与行为 · 跨版本位流必须逐位对照 1.2 golden;compat packer 只覆盖部分路径,嵌套对象和 GP 需明确格式。 |
| C13 / S16 | 打印整数时显式传位宽,避免把 UVM_HEX 当宽度 用户接口与行为 · 旧打印宏按目标原型改写,并验证 SIZE 与 RADIX;同名两参宏可能编译通过却传错位宽。 |
| S8 / C28 | 自定义比较:检查类型设置和不匹配消息数量 用户接口与行为 · 类型检查由类型名改为 wrapper,不同类型名共用 wrapper 时可能漏检;顶层 compare 会重置 check_type,show_max=0 改为不限输出。 |
Phase / Objection / Event
| 规则 | 差异与修改方向 |
|---|---|
| S2 | 旧 test_done 不再保持 run 存活 用户接口与行为 · 使用实际 run phase 的 objection 保持仿真存活;旧 test_done 单例的 raise/drop 在目标库中不能控制 phase 结束。 |
| S29 | uvm_event#(T) trigger 默认数据机制:新增 set/get_default_data,reset 清数据 用户接口与行为 · 需要在 reset 后使用上一次数据时,在 reset 前读取并保存到用户变量;后续消费该变量,不再向已 reset 的 event 取旧值。若业务需要默认数据,显式设置 set_default_data 并按默认值语义读取;两种意图不能混用。 |
Reporting / 命令行
| 规则 | 差异与修改方向 |
|---|---|
| S7 | 消息宏重写:新增 UVM_NO_ACTION 短路检查 用户接口与行为 · 依赖 catcher 处理 NO_ACTION 消息时需调整入口或策略;消息宏会在进入 catcher 之前短路。 |
| C10a / C10c | 旧全局配置、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 单独设计。 |
| S18 | +uvm_set_config_int 宽值经 32 位字符串转换被截断 用户接口与行为 · 超过32位的命令行配置改用 bitstream 参数或明确类型的 config_db 设置,并断言完整读回值。 |
Config DB / Resource DB
| 规则 | 差异与修改方向 |
|---|---|
| D5 | 禁用自动字段配置:旧开关改为组件方法 用户接口与行为 · 检索 disable_apply_cfg_settings / UVM_DISABLE_APPLY_CFG_SETTINGS 使用点并改 override;如脚本依赖 +UVM_DISABLE_APPLY_CFG_SETTINGS 需删除。 |
| S5 / S15 | resource precedence 的设置时机与保留写法 用户接口与行为 · 默认 coreservice 下旧静态 precedence 字段仍有效;特殊实例优先级应在入池之后设置。 |
| S15 | uvm_resource_pool 重构:set 系列改名 set_scope/set_override,新增 get_scope/delete 等 API 用户接口与行为 · 普通入池与默认双置顶可保留;旧 name-only/type-only override 掩码必须改为对应的显式单侧接口。 |
| S11 | resource_db::get_by_name 在 2.0 可能选中较低优先级资源(S11) 用户接口与行为 · 直接按名查询 resource 时核对实际胜出的资源;依赖优先级的路径可采用已验证的显式查找与选择方案。 |
Sequence / Sequencer
| 规则 | 差异与修改方向 |
|---|---|
| S1 / D11 | 内置 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 | 字符串 default_sequence 不再启动激励 用户接口与行为 · 旧字符串式默认 sequence 与旧库管理接口需要迁移;已经使用 phase wrapper/instance 配置的代码可保留。 |
| S17 | 响应队列溢出默认不报错,需要显式开启 用户接口与行为 · 显式开启响应队列溢出报告,并核对响应消费与队列深度,避免只依赖默认错误计数。 |
| S20 | sequence_library 的选择边界与类型名 用户接口与行为 · USER sequence library 动态缩减候选集时,应在选择前检查边界;固定候选集用法无需因此改写。 |
| S19 | uvm_push_sequencer 未消费被 peek 的请求,第二笔激励失败 用户接口与行为 · 至少验证两笔 push 请求;优先评估 pull 流程,保留 push 时需验证显式消费 FIFO 的局部替代。 |
| C5 | uvm_do* 动作宏:约束、sequencer 与优先级的迁移 用户接口与行为 · 把旧宏的约束、sequencer 和优先级完整传给新宏;只改宏名可能让激励丢失原约束。 |
RAL(寄存器模型)
| 规则 | 差异与修改方向 |
|---|---|
| S32 | 内置复位测试按 has_reset() 跳过字段 用户接口与行为 · 自研复位测试用 field.has_reset() 判断是否存在 reset 值;镜像比较前保存原 get_compare(),对无 reset 字段临时 set_compare(UVM_NO_CHECK),比较后恢复原值。保留用户明确登记的 block/reg 排除,字段级排除单独核对实际名称。递归遍历采用每层本地寄存器加直接子块递归,避免叶寄存器重复 mirror。 |
| D4 | uvm_reg_address_config 与 get_registers_filtered_by_address 移除(UVM_REG_ENABLE_ADDRESS_EXCLUSION 扩展终止) 用户接口与行为 · 若定义了 UVM_REG_ENABLE_ADDRESS_EXCLUSION ,改用 resource 排除机制。 |
| S13 | 大端 map 的整宽反转可能破坏数据,单拍也受影响(S13) 用户接口与行为 · 大端访问在有效总线宽度小于 uvm_reg_data_t 整宽时可能传错数据;32 位寄存器接 32 位总线的单拍也需检查,补偿仅适用于已验证的映射与响应契约。 |
| S14 | 支持 byte enable 的相邻字段访问仍可能退化为整寄存器访问(S14) 用户接口与行为 · 字段访问需验证真实 byte strobe 与相邻硬件值;必要时使用显式总线或 frontdoor 访问并只预测目标字段。 |
| S22 | 后门编解码可能失效:同时检查硬件值与读回值 用户接口与行为 · 使用 backdoor encode/decode 时必须同时核对硬件值与逻辑值;单 codec 可用已验证的 pre_write/post_read 替代。 |
| S24 | predictor 仅继承首拍 status,后续拍失败仍可能更新镜像(S24) 用户接口与行为 · 多拍 predictor 必须聚合完整事务状态;任何一拍失败时,不能仅凭首拍成功更新镜像。 |
TLM
| 规则 | 差异与修改方向 |
|---|---|
| S9 | uvm_tlm_fifo::flush() 不再向 get_ap 广播,VCS 两项队列实测存在残留(S9) 用户接口与行为 · 无并发的清场边界可用 try_get 循环排空并断言 used=0;同时保留并检查 get_ap 广播契约。 |
| S12 | uvm_tlm_generic_payload::do_compare() 全面重写 用户接口与行为 · GP 比较必须同时检查 extension 键集合与各项内容;只依赖 GP compare 或安静的日志可能漏检。 |
| S6 / S44 | uvm_tlm_generic_payload do_pack/do_unpack 无条件打包 m_dmi,打包流布局变化 用户接口与行为 · GP 新增 DMI 打包位会改变跨版本协议;compat packer 不能撤销这项变化,应明确两端格式。 |
| S35 | 派生 TLM FIFO 的字段自动配置默认停止 用户接口与行为 · 需要维持派生字段自动赋值时,在派生 FIFO 中 override virtual function bit use_automatic_config() 并返回 1;已有 build_phase 仍须保留业务逻辑和所需的 super 调用。未依赖派生字段自动配置的普通 FIFO 传输无需为本条改写。字段 FLAG 的使能方式另按 M09-002 核对。 |
Field Automation / 版本宏
| 规则 | 差异与修改方向 |
|---|---|
| S3 | uvm_object_globals 字段标志位重构 用户接口与行为 · 将硬编码 FLAG 数字改为对应的 UVM_COPY/COMPARE/PRINT/PACK/RECORD 及禁用位符号,不能按旧数字直接复制掩码。只禁用部分操作的声明按 M09-002 保留禁用位并显式启用其他所需操作;自动配置等自定义位另外核对目标编码。 |
| S3 | uvm_field_* automation:显式启用需要的字段操作 用户接口与行为 · 逐项核对 field FLAG 是否显式启用了所需操作;只有负向位或只含部分正向位都可能漏操作,且不一定告警。 |
| S4 | 版本宏与版本字符串的迁移 用户接口与行为 · 版本分支应保持原来的精确版本或能力判断意图;旧版本宏不能统一替换为 POST 宏。 |
Component / VCS 集成
| 规则 | 差异与修改方向 |
|---|---|
| S21 / D7 | 正则接口与缓存:删除的调试 API 和匹配风险 用户接口与行为 · 删除旧调试接口;regex/glob 混用时保持缓存默认关闭,并验证调用顺序不改变匹配结果。 |