- 差异参考
- 按模块查阅
- Field Automation / 版本宏
Field Automation / 版本宏
优先核对 field FLAG 是否启用全部所需操作;负向位或部分正向位都可能在目标库中跳过比较、打印等操作。字段自动化改由 do_execute_op/uvm_field_op 分派;旧 sequence 宏、print/record 宏、版本分支和 factory 构造约定分别核对。deprecated 与 legacy field 开关提供不同的过渡能力。
建议阅读顺序
本主题集中核对 field FLAG、版本判断和兼容开关。Sequence 动作宏归入 Sequence,打印与打包宏归入策略与 I/O,factory 注册宏归入对象模型与工厂。手写 automation 属于直接依赖 UVM 内部接口的代码。
M09-002 → M09-007 → M09-008 → M09-006
用户接口与行为
| 条目 | 修改方案 |
|---|---|
| M04-013 | uvm_object_globals 字段标志位重构 高风险 · 静默/数据将硬编码 FLAG 数字改为对应的 UVM_COPY/COMPARE/PRINT/PACK/RECORD 及禁用位符号,不能按旧数字直接复制掩码。只禁用部分操作的声明按 M09-002 保留禁用位并显式启用其他所需操作;自动配置等自定义位另外核对目标编码。 |
| M09-002 | uvm_field_* automation:显式启用需要的字段操作 高风险 · 静默/数据审计全部 field FLAG 的实际操作意图,包括部分正向位、自定义宏和纯数字。若要保留旧版“除禁用项外都执行”,使用 UVM_ALL_ON | 原禁用位 ;若有意只执行部分操作,列出每个需要的正向位及对应禁用约束。S3 会计算受支持 FLAG 表达式的六类操作使能并报告未知表达式;宏展开、set 操作及实际数据行为仍需核对,不能仅凭零命中或没有 NO_FLAG 核销。legacy field 开关作为过渡时仍需验证实际操作。 |
| M09-006 | 注册宏的 type_name 改为函数形式 其他行为变化普通读取可保留;新目标代码可显式写 T::type_name() 。重复声明或要求变量的用法单独核对,跨版本代码不能把旧常量机械改成函数调用。 需要可写字符串、ref 实参或缓存类型名时,先复制到自有 string 变量;不要仅因 type_name 的实现变化给 comparator/pair 补 factory 注册。registry 初始化另见 M01-006,抽象组件注册见 M10-003,predictor 的旧可写成员及 flush 见 M07-012。 |
| M09-007 | 废弃开关极性翻转:UVM_NO_DEPRECATED(opt-out)→ UVM_ENABLE_DEPRECATED_API(opt-in) 其他行为变化按原意检查构建开关。原先定义 UVM_NO_DEPRECATED 是排除旧接口,不能机械改成启用 UVM_ENABLE_DEPRECATED_API;仅当确实需要目标版保留的旧宏时开启新开关。 |
| M09-008 | 版本宏与版本字符串的迁移 编译断点 高风险 · 静默/数据 日志/调试变化逐个确认分支意图。需要“恰为 1.2”与“支持 1.2 以后能力”时条件不同,不能一律把 UVM_VERSION_1_2 替换为 UVM_POST_VERSION_1_2。跨库签名示例见 semantic_probe 的目标宏分支;SV 预处理器没有 C 风格数值 #if ,可用构建定义区分受支持版本。 日志解析脚本用两版实际版本文本校验前缀和分隔规则;删除对旧 copyright 参数的直接引用,版权文本以所用库随附声明为准,不把它当版本判断接口。 |
| M09-015 | 字段自动配置的查询模式与操作位宽 其他行为变化默认注册字段的自动配置可保留。确需扩大资源查询范围时,在相关库编译前定义 +define+UVM_COMPONENT_CONFIG_MODE_DEFAULT=CONFIG_STRICT 并重建,检查实际选中值;该模式不会发现任意未注册成员。自定义操作位使用 UVM_FIELD_FLAG_SIZE 管理位宽并核对保留位,不能把扩大 FLAG 位宽当作恢复旧 FLAG 语义。 |
新增功能 · 1 项
目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。
| 条目 | 修改方案 |
|---|---|
| M09-014 | 新增 field 宏:real 数组/队列/静态数组与 aa_object_key/aa_string_key 新增/接口调整无(1.2 中手写 do_* 处理的 real 容器字段可改用新宏)。 |
内部实现 · 3 项
文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。
| 条目 | 修改方案 |
|---|---|
| M01-003 | __m_uvm_field_automation 签名变更 + __m_uvm_status_container 删除 编译断点 高风险 · 静默/数据手写 automation 改为对应 do_copy/do_compare/do_print/do_pack/do_record,或在确需统一操作分派时 override do_execute_op(uvm_field_op op)(M01-011);不再读写旧 status container,改用对应 comparer/printer 等策略对象的接口与结果。只改旧钩子签名不能恢复操作调用。 |
| M04-006 | 删除:uvm_status_container 与 uvm_scope_stack 类 编译断点命中引用即需随 field automation 重构一并改写(详见 field 自动化模块章节)。 |
| M09-017 | 无用户可见变化的宏文件 无行为变化无。 |
VCS 定制说明
VCS 定制说明
以下对照用于区分 VCS 定制与 Accellera 参照;需要迁移的事项以关联条目的条件、改法和验证为准。
| 定制项 | 两版状态 | 工程影响与入口 |
|---|---|---|
| macros/snps_macros.svp | 两版 VCS 文件相同,经 uvm_macros.svh 引入;Accellera 无 | 存量厂商扩展,无需因文件存在单独改写。 |
| UVM_VCS_DTL / UVM_VCS_* 与 Verdi 开关 | 目标宏入口含动态加载声明族、录制开关推导及 UVM_NO_VERDI_DPI 逻辑 | 属 VCS/Verdi 集成;选库与编译配置按目标安装核对。 |
| uvm_tlm_defines Verdi 插桩 | 目标 UVM_SEQ_ITEM_PULL_IMP 根据 UVM_VERDI_NO_PORT_RECORDING 选择插桩版本 | 端口事务追踪见 TLM 模块定制说明;不把调试可见性等同于功能全覆盖验证。 |
| ZEMI4UVM / UVM_VCS_FGP | 旧 ZeBu 属性与 FGP 宏体系不再沿用 | FGP 见 M10-007;ZeBu 流程需单独验证。 |
| 旧对象 create 宏 | VCS 1.2 默认 new()+set_name() 与 Accellera 不同,registry 默认仍 new(name) | 编译断点必须结合旧构建开关判断,见 M09-003。 |