- 开始迁移
- 版本与兼容
本页内容
版本与兼容
本手册说明如何从 VCS 内置 uvm-1.2 迁移到 VCS 内置 uvm-ieee-2020-2.0。
从哪个库迁移到哪个库
| 项目 | 迁移前 | 迁移后 |
|---|---|---|
| VCS 内置库 | uvm-1.2 |
uvm-ieee-2020-2.0 |
| 编译选项 | -ntb_opts uvm-1.2 |
-ntb_opts uvm-ieee-2020-2.0 |
| 手册中的简称 | 1.2 | 2.0 |
两侧源码与实测均来自 VCS W-2024.09-SP2-8。切换库使用上表的完整选项,具体命令见如何配置 VCS。
版本号与源码参照
目标库名称中的 2020 对应 IEEE 1800.2-2020 标准,2.0 是实现版本号。手册中的 1800.2-2020-2.0 指同一个目标版本。
VCS 内置库包含 Synopsys 修改。本手册以两侧 VCS 源码和实测为依据,Accellera 原版用于补充参照。更换 VCS 安装版本时,应重新核对库版本与相关行为,见版本适用范围。
有哪些兼容措施
| 措施 | 是什么 | 提供什么 | 如何生效 |
|---|---|---|---|
| 主库保留的旧接口 | 已在 uvm_pkg 中的兼容成员,源码常标注 @uvm-compat |
例如 uvm_path_e 别名、printer 的部分 knobs |
使用主库即可;不需要额外开关或包 |
UVM_ENABLE_DEPRECATED_API |
编译时控制部分废弃 API 是否可用的宏 | 例如旧 uvm_do_with、uvm_do_on* 动作宏和部分 typedef |
添加编译 define |
UVM_LEGACY_FIELD_MACRO_SEMANTICS |
控制 field 宏 FLAG 含义的编译宏 | 恢复旧规则中未显式列出的字段操作 | 添加编译 define;与 deprecated 开关独立 |
uvm_compat_pkg |
需要单独编译的 SystemVerilog 包 | uvm_compat_packer、uvm_compat_proxy_sequence 等兼容类 |
编译包、import,再显式使用类 |
主库保留:旧名称仍能使用
@uvm-compat 是源码注释中的标注。它表示实现保留了兼容入口,不是要传给 VCS 的参数。例如寄存器访问的 uvm_path_e / UVM_DEFAULT_PATH 在目标主库中保留,无需只为改名重写已有访问。
保留的范围要逐个成员确认:printer 的部分 knobs 可继续使用,宽度字段和旧 knobs 类型却已删除。符号能编译也不保证行为等同;旧 test_done 对象仍可引用,但不再保持 run 存活。
寄存器 path 别名 · printer 保留项 · 旧 test_done
Deprecated 开关:开放保留的旧 API
Deprecated 表示不再作为推荐接口。目标库将一部分旧接口放在受开关控制的代码中,默认不启用;开启后可暂时保留对应旧调用。
它可让目标仍保留的旧 sequence 动作宏参与编译。它不能恢复已删除的 stop 流程、旧 sequence 注册宏或任意旧成员,也不控制 field FLAG 的行为。
旧 UVM_NO_DEPRECATED 表示“禁用旧 API”,新 UVM_ENABLE_DEPRECATED_API 表示“启用旧 API”,语义相反,不能机械改名。最终将旧宏改成目标库的带参数宏后,可移除该 define。动作宏改写 · 开关范围
Legacy field 开关:恢复旧 FLAG 语义
Field automation 由 uvm_field_* 宏为字段生成 copy、compare、print、pack、record 等操作。1.2 的 FLAG 可以只写禁用位,其余操作仍默认启用;2.0 要求显式启用需要的操作。这个变化可能导致比较等操作被跳过。
此开关让目标 field 宏按旧 FLAG 规则工作,适合改写字段声明期间过渡。例如只想禁止 copy 的旧 UVM_NOCOPY,最终可改为 UVM_ALL_ON | UVM_NOCOPY。只写 UVM_COPY 时,也要明确是否仍需要 compare 等其他操作。
该开关不恢复旧 __m_uvm_field_automation 的手写分派逻辑,不解决 comparer 配置、packer 位流或 RAL 行为差异。退出开关前,注入字段不匹配,并分别验证需要的字段操作。修改前后与实测
Compat 包:显式使用兼容类
uvm_compat_pkg 是独立的包,提供特定用途的类。-ntb_opts 不会自动编译它;仅添加 include 路径或写 import 也不会定义该包。完整编译命令见配置示例。
编译包后,在使用兼容类的 package 或 module 中导入:
随后需要显式构造或选择 uvm_compat_packer、uvm_compat_proxy_sequence。Import 只使名称可见,不会替换已有 packer 或 sequence。
uvm_compat_packer 提供部分旧 packer 接口和格式支持,不能保证所有嵌套对象、空对象或 generic payload 位流与 1.2 相同;跨版本数据要与 golden 逐位比较。uvm_compat_proxy_sequence 是特定的具体代理类,不代表所有抽象基类都可直接构造。另需兼容字符串解包宏时,显式 include uvm_compat_macros.svh。
兼容 packer · 具体 sequence 与 proxy
什么情况下使用哪一种
| 旧代码或现象 | 可用的过渡措施 | 最终改法或检查 |
|---|---|---|
uvm_do_with、uvm_do_on* 等旧宏不可用 |
Deprecated 开关 | 改为带 sequencer、priority、constraints 参数的新宏 |
| field FLAG 没启用所有需要的操作 | Legacy field 开关 | 明确操作位和禁用位,验证字段实际执行效果 |
| 旧 packer 接口或旧外部位流契约 | 显式采用 compat packer | 对照实际对象格式;超出兼容范围时维护明确格式或同步两端 |
| 需要具体 proxy sequence | 显式采用 compat proxy 类 | 按用途选择具体业务 sequence 或代理 |
uvm_path_e、保留的 knobs 等仍可使用 |
主库已提供 | 核对成员和行为;可保留符合需要的调用 |
| stop 已删除、test_done 无法维持运行 | 无自动恢复方案 | 改为实际 phase objection 和明确的收尾流程 |
| FIFO 残留、RAL 数据/镜像错误 | 上述兼容措施不修复此类问题 | 按对应条目检查访问条件和替代方案 |
Deprecated 和 legacy field 可以同时启用;使用 compat 类时再加入包源码。每项配置只覆盖表中所述功能,不能将所有措施合在一起理解为“恢复 UVM-1.2”。
也可以直接采用条目给出的目标写法,再运行相关验证,不必先启用过渡开关。各条目的“兼容措施与范围”说明具体保留了什么、还有哪些行为需要检查;例如 printer 保留部分 knobs 不代表保留已删除的列宽字段。
如何配置 VCS
在独立的 2.0 构建目录执行,先配置本机 VCS 环境。tb.f 是用户文件列表,其中路径须相对构建目录有效。
确认编译日志加载 uvm-ieee-2020-2.0 目录,仿真启动 banner 对应 1800.2-2020 实现版本 2.0。两库分别构建,避免复用旧库或 DPI 产物。
在本文验证的 VCS W-2024.09-SP2-8 中,简写 uvm-ieee 指向 1800.2-2017 / 1.0,uvm-ieee-2020 指向 1800.2-2020 / 1.1,因此命令使用完整选项。更换安装后重新核对实际加载版本。
启用旧宏和 field 语义
需要同时保留旧动作宏和旧 FLAG 语义时:
Define 要在相关库代码编译或宏展开前生效;只在运行 simv 时传入不生效。分步编译时同步相关编译步骤,并重新构建受影响的库与用户代码。
编译 compat 包
将包源码放在使用它的用户代码之前:
需要旧宏或旧 field 语义时,可再添加对应 define。使用类的方法与包编译是两步,都需要完成。
验证兼容后的行为
| 路径 | 观察内容 |
|---|---|
| Field automation | 注入的不匹配被检出,copy/print/pack/record 执行了需要的字段操作 |
| Sequence 动作宏 | 事务数、约束值、目标 sequencer、parent 与优先级符合原意 |
| Phase objection | 激励完整执行,检查器和在途事务处理完成后结束 |
| Compat packer | 实际对象图与 1.2 golden 逐位一致,接收端正确解码 |
| RAL 访问 | status、总线数据、byte enable、硬件值与镜像符合预期 |
可运行示例用于复现条目所列场景。实际代码按条目给出的观察量验证;编译通过只说明接口可用。
逐项退出兼容
- 在迁移清单记录使用的兼容措施、相关条目和验证结果。
- 按条目改写旧调用。每次移除一项依赖,重新编译并运行相关行为测试与回归。
- 所有使用点完成替代后,从构建命令中移除对应 define、包源码或 import。
主库保留且行为符合需要的接口不要求全部强制改名;外部仍有 1.2 位流契约时,可以保留必要的 compat 依赖并记录范围。