- 附录与资料
- 内部实现
本页内容
内部实现
文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。
Object / Factory
| 条目 | 具体差异 |
|---|---|
| M01-006 | registry 延迟注册与初始化实现 其他行为变化 2.0 通过 uvm_deferred_init 队列在 uvm_init() 中注册( base/uvm_globals.svh:422 ),而 coreservice 首次 get() 会自动触发初始化,不能据此断言普通 factory.print() 会看不到注册项。自定义 coreservice/静态初始化代码仍需核对调用顺序。新增 uvm_abstract_component_registry / uvm_abstract_object_registry 支持抽象类注册;未 override 而创建时报 UVM/ABST_RGTRY/CREATE_ABSTRACT_* ,这与直接 new 抽象类的编译失败不同。新增 type_id::set_type_alias("别名") 。 registry.type_name 的成员形态变化统一见 M09-006。 |
| M01-017 | link 工厂显式保存调用进程的随机状态 其他行为变化 parent_child / cause_effect / related 三种 get_link 在 new 前后新增 process::get_randstate/set_randstate。utility_probe 对 parent_child 的观察两版都保持随机状态,不能从新增防护代码推断本机旧版必然改变后续随机序列。 |
Comparer / Printer / Packer / Recorder
| 条目 | 具体差异 |
|---|---|
| M02-013 | uvm_text_tr_database / uvm_text_tr_stream 拆分为独立文件 编译断点 日志/调试变化 text database/stream 拆为独立文件,set_file_name 等入口与 UVM_CHANGE_DEFAULT_TR_DB_NAME 定制保留;注册与句柄类型也随新框架更新,不能称类体逐字不变。正常通过 uvm_pkg 获得类型;自行 include 宿主文件并依赖 text 类型的用法需同步文件依赖。 |
| M09-010 | pack、unpack、record 宏的文件拆分 编译断点 高风险 · 静默/数据 宏从 uvm_object_defines.svh 拆到 5 个新 policy defines 文件(对用户透明,include 由 uvm_macros.svh 完成);签名新增默认实参( PACKER=packer 、 RECORDER=recorder 、 COMPARER=comparer 、 COPIER=copier ),在 do_pack(uvm_packer packer) 等标准上下文中的既有调用保持源码兼容。 |
Phase / Objection / Event
| 条目 | 具体差异 |
|---|---|
| M03-007 | 新增 uvm_phase_hopper 类,phase 执行引擎从 uvm_phase 迁出 其他行为变化 原 uvm_phase 内部的调度/执行逻辑整体迁入 uvm_phase_hopper (经 uvm_coreservice_t::get_phase_hopper() 获取)。 uvm_task_phase / uvm_topdown_phase / uvm_bottomup_phase 的 traverse 相应改调 hopper.traverse_on/execute_on (如 uvm_task_phase.svh:86-114 )。默认行为不变: traverse_on 默认仍调 imp.traverse() ,用户自定义 phase 的 traverse/execute 重写继续生效;高级用户可通过扩展 hopper 改变 phase 遍历/执行方式。普通用户无感知。 |
Reporting / 命令行
| 条目 | 具体差异 |
|---|---|
| M04-010 | uvm_report_object 的 report handler 改为懒创建 日志/调试变化 其他行为变化 2.0 构造函数不再创建 m_rh ,首次使用任一 reporting 方法时才创建。直接读写 m_rh 成员(非标但大环境中存在)在首次 API 调用前会拿到 null。 |
| M04-017 | 新增文件 uvm_cmdline_report.svh(+UVM_VERBOSITY / +uvm_set_* 解析抽离) 日志/调试变化 其他行为变化 命令行 reporting 配置解析从 uvm_root 抽为独立类并增加"used 跟踪/dump/未生效告警"能力;+UVM_VERBOSITY 多个时仍取第一个(与 1.2 一致),非法值仍 ILLVERB/NSTVERB 告警。用户可见面基本不变。 |
Config DB / Resource DB
| 条目 | 具体差异 |
|---|---|
| M05-007 | resource 审计表搬迁与读写实现 编译断点 日志/调试变化 其他行为变化 审计数据从 rsrc.access 移至 rsrc.dbg.access ,直接访问 access 成员的调试代码编译失败; record_read_access 等公开方法保留、行为等价(仍受 uvm_resource_options::is_auditing() 控制)。read/write 主体逻辑下沉为可重写的 do_read/do_write 钩子,供用户定制资源读写行为。 uvm_resource_options (turn_on/off_auditing、is_auditing)两版 API 不变。 |
| M05-009 | uvm_resource_pool 内部表结构改用 uvm_shared 队列,rtab/ttab 类型变化 编译断点 其他行为变化 公开查找接口(lookup_name/lookup_type/lookup_scope 等)返回类型 uvm_resource_types::rsrc_q_t 不变;但 rtab / ttab 为 public 成员,直接遍历它们的调试/统计代码需按新容器类型改写( q.value[i] 替代 q.get(i) )。 |
Sequence / Sequencer
| 条目 | 具体差异 |
|---|---|
| M06-006 | uvm_sequencer 的仲裁状态位 public → protected 编译断点 其他行为变化 slave/被动 agent 驱动中常见的技巧——直接改写 sequence_item_requested / get_next_item_called 绕过 get_next_item/item_done 配对检查——在 2.0 编译失败(protected 访问)。 |
| M06-018 | get_tr_handle 返回类型 integer → int 无行为变化 两者均为 32 位有符号四态整数;此处仅统一类型拼写,不改变 X/Z 表达能力。 |
RAL(寄存器模型)
| 条目 | 具体差异 |
|---|---|
| M07-016 | uvm_mem_mam:地址类型 bit [63:0] 统一为 uvm_reg_addr_t 无行为变化 uvm_reg_addr_t 默认即 bit [63:0] (受 UVM_REG_ADDR_WIDTH 控制),默认配置下完全等价;仅在改动地址宽度宏的工程中有类型一致性收益。 |
TLM
| 条目 | 具体差异 |
|---|---|
| M08-010 | 无代码差异文件清单(已逐一核对,供核销) 无行为变化 tlm1/uvm_ports.svh 、 uvm_exports.svh 、 uvm_imps.svh 、 uvm_tlm_imps.svh 、 uvm_sqr_connections.svh 、 uvm_sqr_ifs.svh 、 tlm2/uvm_tlm2_ports.svh 、 uvm_tlm2_exports.svh 、 uvm_tlm2_imps.svh 、 uvm_tlm2_defines.svh 、 macros/uvm_tlm_defines.svh (宏集合两侧逐一比对一致)仅有注释/ @uvm-ieee 标注/排版差异; tlm2/uvm_tlm2_sockets.svh 仅 uvm_error 宏调用尾分号清理; tlm1/uvm_analysis_port.svh 的 write 逻辑两侧等价(Verdi 录制钩子为 Synopsys 双侧共有,见下节)。 |
Field Automation / 版本宏
| 条目 | 具体差异 |
|---|---|
| M01-003 | __m_uvm_field_automation 签名变更 + __m_uvm_status_container 删除 编译断点 高风险 · 静默/数据 __m_uvm_field_automation 并未从类中删除,2.0 保留了第二参为 uvm_field_flag_t 的空实现;字段操作主路径已改为 do_execute_op() 。旧手写 override 可能因签名不匹配报错,即使同步签名也不能恢复操作分派。应区分“兼容空钩子仍存在但不再由标准操作调用”与“status container 被删除”;后者的直接引用才是符号缺失的编译断点。 utils_begin/end 宏生成的函数也由 __m_uvm_field_automation 改为 do_execute_op(uvm_field_op op),并用局部 __m_uvm_execute_field_op 分派 COPY/COMPARE/PRINT/RECORD/PACK/UNPACK/SET 等操作。旧内部辅助宏 m_uvm_print_int / m_uvm_record_* 同步退出旧分派路径;手写这些宏的代码改用对应 policy API。只使用 field 宏的代码无需手写分派函数,但仍须按 M09-002 核对 FLAG。 |
| M04-006 | 删除:uvm_status_container 与 uvm_scope_stack 类 编译断点 两者是老 field automation 的内部支撑类( uvm_object::__m_uvm_status_container 同步移除)。主流环境极少直接引用,但 custom field automation/printer 扩展可能触碰。 |
| M09-017 | 无用户可见变化的宏文件 无行为变化 uvm_callback_defines.svh 、 uvm_tlm_defines.svh 、 uvm_reg_defines.svh 在 VCS 1.2→VCS 2.0 间宏集合与语义无用户可见差异(tlm 的 Verdi 插桩两侧一致,见下节); uvm_undefineall.svh 仅新增 `undef UVM_XCELIUM 等清理项; uvm_objection_defines / uvm_policy_defines / uvm_field_op_defines 在两个版本中均不作为独立文件存在,本模块无对应条目。 |
Component / VCS 集成
| 条目 | 具体差异 |
|---|---|
| M10-002 | uvm_driver / uvm_push_driver 新增 factory 注册 其他行为变化 两个 driver 基类在 2.0 通过参数化注册宏使用 uvm_component_registry,并补 type_name 声明,可按类型查询和覆盖。 m_uvm_component_registry_param 是宏名,并非新的 registry 类名;参数化注册也不保证按字符串名称查找能力。 |
| M10-005 | uvm_random_stimulus 降级为 @uvm-compat 兼容 API 新增/接口调整 2.0 将该类标为 @uvm-compat,按发布说明属于兼容旧版接口。去除注释后类体 token 一致;它调用的新库随机化、报告等机制仍可能改变外围行为,不能从类体不变推导整个仿真逐字等价。 |