跳转至

输入查询内容

    本页内容

    版本与兼容

    本手册说明如何从 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_withuvm_do_on* 动作宏和部分 typedef 添加编译 define
    UVM_LEGACY_FIELD_MACRO_SEMANTICS 控制 field 宏 FLAG 含义的编译宏 恢复旧规则中未显式列出的字段操作 添加编译 define;与 deprecated 开关独立
    uvm_compat_pkg 需要单独编译的 SystemVerilog 包 uvm_compat_packeruvm_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 表示不再作为推荐接口。目标库将一部分旧接口放在受开关控制的代码中,默认不启用;开启后可暂时保留对应旧调用。

    +define+UVM_ENABLE_DEPRECATED_API
    

    它可让目标仍保留的旧 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 要求显式启用需要的操作。这个变化可能导致比较等操作被跳过。

    +define+UVM_LEGACY_FIELD_MACRO_SEMANTICS
    

    此开关让目标 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 中导入:

    import uvm_pkg::*;
    import uvm_compat_pkg::*;
    

    随后需要显式构造或选择 uvm_compat_packeruvm_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_withuvm_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 是用户文件列表,其中路径须相对构建目录有效。

    vcs -full64 -sverilog -ntb_opts uvm-ieee-2020-2.0 \
      -f tb.f -o simv -l compile.log
    

    确认编译日志加载 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 语义时:

    1
    2
    3
    4
    vcs -full64 -sverilog -ntb_opts uvm-ieee-2020-2.0 \
      +define+UVM_ENABLE_DEPRECATED_API \
      +define+UVM_LEGACY_FIELD_MACRO_SEMANTICS \
      -f tb.f -o simv -l compile.log
    

    Define 要在相关库代码编译或宏展开前生效;只在运行 simv 时传入不生效。分步编译时同步相关编译步骤,并重新构建受影响的库与用户代码。

    编译 compat

    将包源码放在使用它的用户代码之前:

    1
    2
    3
    4
    5
    vcs -full64 -sverilog -ntb_opts uvm-ieee-2020-2.0 \
      "+incdir+$VCS_HOME/etc/uvm-ieee-2020-2.0/src" \
      "+incdir+$VCS_HOME/etc/uvm-ieee-2020-2.0/compat" \
      "$VCS_HOME/etc/uvm-ieee-2020-2.0/compat/uvm_compat_pkg.sv" \
      -f tb.f -o simv -l compile.log
    

    需要旧宏或旧 field 语义时,可再添加对应 define。使用类的方法与包编译是两步,都需要完成。

    验证兼容后的行为

    路径 观察内容
    Field automation 注入的不匹配被检出,copy/print/pack/record 执行了需要的字段操作
    Sequence 动作宏 事务数、约束值、目标 sequencer、parent 与优先级符合原意
    Phase objection 激励完整执行,检查器和在途事务处理完成后结束
    Compat packer 实际对象图与 1.2 golden 逐位一致,接收端正确解码
    RAL 访问 status、总线数据、byte enable、硬件值与镜像符合预期

    可运行示例用于复现条目所列场景。实际代码按条目给出的观察量验证;编译通过只说明接口可用。

    逐项退出兼容

    1. 迁移清单记录使用的兼容措施、相关条目和验证结果。
    2. 按条目改写旧调用。每次移除一项依赖,重新编译并运行相关行为测试与回归。
    3. 所有使用点完成替代后,从构建命令中移除对应 define、包源码或 import。

    主库保留且行为符合需要的接口不要求全部强制改名;外部仍有 1.2 位流契约时,可以保留必要的 compat 依赖并记录范围。

    版本适用范围