- 差异参考
- 按模块查阅
- Object / Factory
Object / Factory
覆盖类:uvm_object / uvm_component / uvm_root / uvm_coreservice_t / uvm_factory / uvm_registry / uvm_transaction / uvm_copier(新增) / uvm_policy(新增) / uvm_field_op(新增)。 对比基准:1.2 侧
src/vcs-uvm-1.2/base/,2.0 侧src/vcs-uvm-ieee-2020-2.0/base/。
常规 object/factory 用户先核对 transaction 事件、copy(null) 和按名覆盖的报错时机。使用 field 宏的代码另查字段宏与版本适配主题。自定义 factory、coreservice 和手写 automation 仅在直接依赖 UVM 内部接口的代码路径适用;compat 包不恢复旧内部操作分派。
建议阅读顺序
先看 transaction 事件、对象拷贝与工厂覆盖。自定义 factory 见 M01-004;手写 automation 见 M01-003。
目标库的 copy、compare、print 等入口经 policy 分派到字段宏和 do_* 钩子。仅使用公开入口时无需接管分派;依赖旧内部钩子时按直接依赖 UVM 内部接口的代码条目处理。
用户接口与行为
| 条目 | 修改方案 |
|---|---|
| M01-001 | 事务开始/结束事件改用 get_event_pool() 编译断点item.begin_event → item.get_event_pool().get("begin") ; item.end_event 同理。 |
| M01-004 | 自定义 factory 子类需要补充虚方法 编译断点直接继承 uvm_factory 时补 is_type_name_registered、is_type_registered、set_type_alias 和 set_inst_alias;四个方法必须使用同一注册/别名状态。能沿用默认工厂算法时,可继承 uvm_default_factory 并保留业务 override,具体签名与选择条件见下方代码。 |
| M01-005 | copy(null) 现在计为错误;普通 copy 调用可保留 日志/调试变化排查回归中对 copy(null) 的依赖;需要浅拷贝/引用拷贝语义的用 uvm_copier::set_recursion_policy 。 |
| M01-008 | run_test、pre_abort 与命令行配置的执行顺序 日志/调试变化 其他行为变化删除或修正启动日志指出的无效 +uvm_set_* 配置,逐项确认目标组件和读回值。旧 pre_abort 中必须执行的诊断保留在该钩子内,并检查子组件与父组件的调用顺序;需要围绕 run_test 添加处理时,使用 uvm_run_test_callback 的 pre_run_test/post_run_test,不能以 post_run_test 单独判定业务成功。 |
| M01-009 | 自定义打印、比较与录制:检查策略状态和输出 日志/调试变化 其他行为变化保留业务 do_print/do_compare/do_record 钩子;其中调用的 printer/comparer/recorder API 分别按 M02-003 / M02-005 / M02-007 / M02-012 改写。每次独立对象操作核对策略状态,消息过滤按实际 comparer 发出的 MISCMP 路径配置;用返回值、输出内容和字段调用次数验证,不能只按日志数量判定成功。 |
| M01-010 | 工厂 name 覆盖延迟解析:TYPNTF 由 set 时推迟到 create 时 日志/调试变化 其他行为变化保留已注册类型的按名 override;在建立 override 后实际执行一次 create,并检查返回非空及派生类型。若出现 TYPNTF,修正类型名或注册位置,不要仅因 set_override 没报错而忽略创建失败。 |
| M01-012 | transaction 开始录制与组件回调的参数变化 日志/调试变化 其他行为变化transaction 普通 begin_tr(begin_time) 调用可保留;需要父子链接时目标可调用 tr.begin_tr(begin_time, parent_handle)。该 transaction 方法本身非 virtual,业务开始钩子使用 virtual protected function void do_begin_tr();组件侧的 do_begin_tr(uvm_transaction tr, string stream_name, int tr_handle) override 应将旧 integer 句柄形参同步为 int,并保留 super 调用。普通句柄变量无需扩大到 64 位。 |
| M01-014 | 自定义 coreservice:新增虚方法与初始化时机 编译断点 高风险 · 静默/数据自定义 coreservice 补齐目标签名。只有库尚未初始化时,uvm_init(custom_cs) 才能安装;不能把“用户 initial 第一行”视为满足此前提。默认 VCS Verdi 集成在 src/vcs-uvm-ieee-2020-2.0/base/uvm_globals.svh:629 / :643 的静态变量初始化调用 root getter,实测 initial 中安装被忽略;仅关闭 UVM_NO_VERDI_RECORD 对应集成后,本探针安装成功。关闭录制不是通用迁移要求,有 Verdi 需求时优先通过现有 coreservice 的服务访问器定制单项能力,整体替换须单独设计初始化与已有引用的迁移。 |
| M01-015 | 组件配置与 transaction database 改用访问器 编译断点 日志/调试变化将 obj.m_get_tr_database() 改为 obj.get_tr_database();派生类的 virtual function uvm_tr_database m_get_tr_database() 同步改名,方法体保留原数据库选择逻辑。通过 set_tr_database(db) 配置时检查读回对象身份。主库仍保留组件 set/get_config_*,无需因其不再报 deprecated warning 而重写调用;print_config_matches 可继续使用,或改用 get/set_print_config_matches。 |
| M01-016 | callback 注册与重复 catcher 调用次数 高风险 · 静默/数据注册按句柄管理;反复 get_all 前清空输出队列。utility_probe 先注册全局 catcher 再注册实例 catcher,全局调用次数为 1 / 2,实例均为 1;先完成实例注册再添加全局 catcher,两库均各调用一次。这个顺序替代仅覆盖初始化后注册集合固定的场景;后续动态创建实例或增删 catcher 必须重新核对,不能以 get_all 的去重结果推断执行路径只调用一次(S23)。 |
| M09-003 | 工厂创建的对象需要带 name 参数的构造函数 编译断点对需要 factory/create 的类补齐默认 name 构造参数并转发给 super;先核对 1.2 构建是否依赖 UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR ,勿将所有无参类都计为新增断点。 |
新增功能 · 4 项
目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。
| 条目 | 修改方案 |
|---|---|
| M01-011 | 新增 uvm_policy / uvm_copier / uvm_field_op 与 do_execute_op / set_local 钩子 新增/接口调整无(存量代码可不动);新代码建议直接使用新钩子。 |
| M01-013 | use_uvm_seeding 静态变量 → get/set_uvm_seeding() 新增/接口调整建议统一改为 uvm_object::set_uvm_seeding(0) ;不强制。 |
| M09-012 | 新增 abstract 注册宏族(virtual class 可注册 factory) 新增/接口调整无(可选用于整理 virtual 基类的 factory 注册)。 |
| M09-013 | 新增 uvm_declare_type_alias 新增/接口调整无。 |
内部实现 · 2 项
文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。
| 条目 | 修改方案 |
|---|---|
| M01-006 | registry 延迟注册与初始化实现 其他行为变化普通 type_name 读取与 type_id::create 可保留;自定义初始化不要绕过 uvm_init 的 deferred 注册。若通过抽象 registry 创建对象,先设置具体派生类 override,再检查返回非空和实际类型;整体替换 coreservice 的时机按 M01-014 核对。 |
| M01-017 | link 工厂显式保存调用进程的随机状态 其他行为变化无强制修改;同 seed 跨库逐事务一致仍须由实际激励验证。 |
VCS 定制说明
VCS 定制说明
以下对照用于区分 VCS 定制与 Accellera 参照;需要迁移的事项以关联条目的条件、改法和验证为准。
| 定制项 | 两版状态 | 工程影响与入口 |
|---|---|---|
| FGP、UVM_CREATE_OPT 与锁属性 | 1.2 的实例计数原子操作、线程 copy map、快速 create 分支在 2.0 移除 | FGP 使用条件及未确认替代见 M10-007;构造宏须结合 registry 判断,见 M09-003。 |
| 自动配置和 verbosity 修复开关 | disable_apply_cfg_settings 与 plusarg 删除;UVM_APPLY_VERBOSITY_FIX 旧分支不再存在 | 自动配置改法见 M01-007;命令行 verbosity 解析背景见 M04-017。数值解析的 UVM_DO_NOT_USE_SSCANF 旧分支改为内建转换。 |
| VCS 动态加载与命令行扩展 | 目标 root 保留 UVM_VCS_DECLARATIONS/DEFINITIONS、UVM_VCS_DTL 的 refresh_test、Verdi verbosity 参数校验和 MAX_QUIT_COUNT 缺省解析 | 属 VCS 集成实现;实际加载与调试参数需结合目标安装检查。目标 src/vcs-uvm-ieee-2020-2.0/src/base/uvm_root.svh:367-379 可定位参数校验。 |
| Component Verdi 与 DTL 钩子 | 目标包含 HIER/COMPWAVE/TLM/NO_IMPLICIT_GET 解析、is_sequencer/is_driver/check_component_type、SNPS_COMP_TRACE、uvm_set_verbosity DPI、refresh_component 和 UVM_VCS_CHECK | 用于层次与事务追踪;见目标 src/vcs-uvm-ieee-2020-2.0/src/base/uvm_component.svh:255-307、:894-961。不能由主 API 保留推断全部 Verdi 集成已验收。 |
| Transaction 附加录制 | 两版延续 transaction_id 与 UVM_NO_VERDI_RECORD 下的 Begin_No_Parent/Begin_End 标签 | 实际输出按录制后端核对;目标 src/vcs-uvm-ieee-2020-2.0/src/base/uvm_transaction.svh:118-119。 |
| Object、coreservice、factory、registry、copier、policy、field_op | 目标文件与 Accellera 2.0 一致 | 无目标厂商额外改动;版本间 API/行为差异仍按本模块主条目处理。 |