- 开始迁移
- 用户接口变化总览
本页内容
用户接口变化总览
下面按 UVM-1.2 中已有的接口说明 2.0 的变化。每节链接到完整模块;具体条目提供修改前后代码、兼容方式与保留范围和验证结果。兼容开关的含义与配置见版本与兼容。
uvm_field_*:字段自动化
uvm_field_* 用于让 copy、compare、print、pack/unpack、record 等操作自动处理注册字段。迁移时,首先检查宏的 FLAG 实参:2.0 按显式启用的操作执行。
| UVM-1.2 写法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
FLAG 只写 UVM_NOCOPY 等禁用位 |
未显式启用其他操作,compare 等也可能被跳过。 | 若原意是只禁用 copy,可写 UVM_ALL_ON | UVM_NOCOPY;保留原禁用意图。代码对照 |
FLAG 只写 UVM_COPY 等部分正向位 |
只执行启用的操作,未启用的 compare 可以无告警地跳过。 | 按需要补齐操作位;主动注入单字段不匹配,确认比较失败。全部 FLAG 检查 |
UVM_DEFAULT、UVM_ALL_ON 加明确的禁用位 |
已表达完整的操作意图。 | 保留写法,并验证所需操作;不要把所有 FLAG 统一改成全开。 |
| 硬编码 FLAG 数字,或自行组合标志掩码 | 标志位编码改变。 | 改用目标库符号,检查每个字段的实际操作。标志位变化 |
过渡开关 UVM_LEGACY_FIELD_MACRO_SEMANTICS 可恢复旧 FLAG 的隐式启用规则。使用 field 宏不需要自行编写新的 automation 分派函数;自定义 do_copy/do_compare/do_pack 等方法按对应操作接口核对。Field Automation / 版本宏
uvm_do*:激励动作宏
2.0 将旧动作宏的多个变体合并为带默认参数的 uvm_do、uvm_create、uvm_send、uvm_rand_send。约束、目标 sequencer 和优先级都需要按新原型传入。
| UVM-1.2 写法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
uvm_do(req) |
在 sequence 上下文中,单参用法可保留。 | 核对实际请求与目标 sequencer。 |
uvm_do_with、uvm_do_on*、uvm_do_pri* |
旧变体默认不提供。 | 使用 uvm_do(对象, sequencer, 优先级, 约束);保留每个原实参。修改前后 |
uvm_create_on、uvm_send_pri、uvm_rand_send_* |
sequencer、优先级或约束改为统一宏的参数。 | 按目标原型逐项映射;已有对象的发送不要误换为重新创建。宏原型与边界 |
uvm_sequence_utils 等旧注册宏 |
所在旧宏文件已删除。 | 改为 object/component 注册并检查 sequence 注册需求。旧注册宏 |
UVM_ENABLE_DEPRECATED_API 可临时提供目标库仍保留的旧动作宏;它不能恢复已删除的旧注册宏。改写示例同时给出带约束和指定 sequencer/优先级的情况。Sequence / Sequencer
sequence 启动、响应与仲裁
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
裸字符串 default_sequence |
可能不报错却不启动;旧内置 sequence 和部分库管理方法删除。 | 改为 phase 路径下的 wrapper/instance 配置或显式启动,检查实际事务数。默认激励、内置类型 |
| 直接构造 sequence/sequencer 基类 | 部分类变为抽象类。 | 构造具体类;基类句柄可保留。构造方法 |
| 使用 sequence 响应队列 | 默认不再报告响应队列溢出。 | 显式启用溢出报错,验证响应消费与队列深度。响应队列 |
自定义 user_priority_arbitration |
返回值与队列元素签名改为 int。 |
同步 override 和实参类型。仲裁签名 |
| 多个 sequence 申请 lock、等待请求时 kill | 授权顺序、重新仲裁与跨 sequencer 清理改变;kill 不清空已排队响应。 | 检查剩余 sequence 能继续执行、锁已释放;需要丢弃已排队响应时保留 clear_response_queue。lock、请求等待、kill |
| push sequencer 连续发请求 | 目标库已复现第二笔请求失败。 | 检查每笔请求被消费,按条目采用限定场景替代。push 路径 |
普通 seq.start()、start_item/finish_item 和 driver 的 get_next_item/item_done 流程可继续使用。其余变化包括 starting_phase、sequence_library 和仲裁类型别名,见Sequence / Sequencer。
phase、objection 与事件
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
uvm_test_done_objection 控制结束 |
旧对象不再保持 run 存活。 | 对实际 phase 成对 raise/drop,等待激励与检查器完成。修改示例 |
global_stop_request、stop_phase、组件 kill/stop |
旧停止机制删除。 | 改为显式收尾与停止握手;sequence.kill() 另按其自身接口处理。stop、组件方法 |
event.add_callback/delete_callback |
改为 uvm_callbacks 注册和删除。 |
同步回调类型、顺序与删除操作。事件回调 |
| reset event 后继续读取触发数据 | reset 会清除数据。 | 检查 reset 前后的值,不沿用旧数据。event 数据 |
| 直接访问 phase 字段、构建 phase 图或 jump | 部分字段改为访问器,null jump 语义和诊断变化。 | 按接口核对调度与 objection。Phase / Objection / Event |
对象创建与 factory
工厂注册、type_id::create 和按类型 override 的常规使用流程可沿用。以下变化涉及已有对象类和扩展接口。
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
依赖 UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR 的无参构造类 |
旧构造兼容不再提供。 | 补默认 name 参数并转发 super.new(name)。代码对照 |
自定义 uvm_factory 子类 |
新增 pure virtual 方法。 | 补齐实现;检查 override 后实际类型。factory 扩展 |
| 字符串 override 指向未注册类型 | TYPNTF 报告可能推迟到 create。 |
验证实际创建结果。按名覆盖 |
访问 type_name 静态变量 |
注册宏改用静态函数表示类型名。 | 按原访问场景改用 get_type_name() 等接口。类型名 |
transaction.begin_event/end_event |
字段删除。 | 改从 event pool 获取;核对触发顺序。transaction 事件 |
copy(null) |
现在记录错误。 | 在调用前明确空对象处理方式。copy |
自定义 uvm_coreservice_t 的新增虚方法与初始化时机见服务扩展。begin_tr override、组件访问器、callback 注册等见Object / Factory。
config_db、resource_db 与自动配置
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
全局 set_config_* |
全局入口删除,组件上的方法仍保留。 | 可转调 root 组件方法保留原语义;转为 config_db 时保留类型、宽度、scope 与克隆约定。配置迁移 |
普通 config_db::set/get、glob 路径 |
常规调用可保留;非空 context 的正则作用域处理改变。 | 核对匹配路径和最终选中值。config_db |
| 禁止 component 字段自动配置的旧开关 | 改为组件方法。 | 使用 use_automatic_config();显式 config_db 调用与字段自动赋值分别验证。自动配置 |
| 派生 TLM FIFO 的注册字段依赖自动配置 | 目标 FIFO 默认关闭字段自动配置,原配置值可能不再赋入。 | 需要保留时,在派生类让 use_automatic_config 返回 1,并核对 build 后的字段值。FIFO 配置 |
| resource 自管理 set/query、构造时传 scope | 对象 set/query 删除;普通资源的显式构造 scope 仍有效,两版都需入池。 | 将对象 set 改为 pool 入池,保留 scope、查询类型与优先级。资源接口、scope |
| 多个同名同类型资源按名查询 | 目标可能选中低优先级资源。 | 对照选中值;不能据此推断普通 config_db 同样出错。已复现问题 |
| 依赖 Verdi 自动开启 Resource DB 追踪 | 目标不再沿用 Resource DB 的联动钩子。 | 需要日志时显式加 +UVM_RESOURCE_DB_TRACE,分别检查 Config DB 与 Resource DB。追踪配置 |
| 特殊 precedence、单侧 override、审计与 converter | 设置时机或接口改变。 | 核对优先级、打印和审计输出。Config DB / Resource DB |
compare、print、pack 与 record
自定义 do_compare/do_print/do_pack/do_record 是用户扩展接口,下面的变化同样适用于这些方法中的调用。
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
| 配置 comparer、限制不匹配消息 | 类型判据改为 wrapper;flush 会影响配置;show_max=0 改为不限输出。 |
不同类型名共用 wrapper 时可能比较通过;按业务契约限制类型并检查返回值与消息数。comparer |
| 配置 printer knobs 宽度 | 部分字段与旧类型删除,列宽自动计算。 | 区分可保留字段和需要替换的字段。printer |
在 do_print 中使用 uvm_print_* |
数字后缀宏删除,同名宏参数含义改变。 | 显式传位宽与 radix,核对实际值和文本。打印宏 |
| 直接复用 printer、调用 emit | 新增未 flush 检查。 | 按新契约清理状态。emit/flush |
| pack 位流发送到 DPI、文件、外部模型 | 默认对象打包格式变化。 | 与 1.2 golden 逐位比较;compat packer 只覆盖部分路径。packer |
| 直接调用旧 packer 状态 API | 名称和签名变化。 | 区分状态流与有效载荷。状态接口 |
依赖 +UVM_ARRAY_NUM_LIMIT 或旧 recorder getter |
旧上限开关及方法删除。 | 在 do_record 显式控制项数,避免同一字段自动录制叠加。数组录制 |
依赖 +UVM_VERDI_BEGIN_TR_REALTIME |
旧取时分支删除。 | 明确 time 单位、显式参数和实际后端精度。事务时间 |
| 自定义 recorder/stream/database | 虚方法签名、对象递归和句柄接口改变。 | 同步 override,验证父子关系与记录内容。录制接口 |
Comparer / Printer / Packer / Recorder
报告、catcher 与命令行
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
| 消息宏设置 NO_ACTION 后仍由 catcher 处理 | 宏提前短路,catcher 可能收不到消息。 | 核对消息路由及调用次数。消息宏 |
| 依赖 verbosity 过滤 warning/error 等消息 | 默认 verbosity 与非 INFO 过滤行为变化。 | 用 severity/id/action 表达过滤意图。默认等级、非 INFO |
| 同时注册全局与实例 catcher | 同一 catcher 的实际调用次数可能增加。 | 对每条消息计数,避免重复处理。callback |
+uvm_set_config_int 传宽整数 |
可能被 32 位字符串转换截断。 | 使用对应宽值入口,并断言读回值。命令行宽值 |
| report server 旧方法、摘要文件路由 | 部分接口删除或语义变化。 | 同步调用和 override,检查摘要输出位置。旧接口、摘要 |
| 日志匹配 TEST_DONE、时间戳、trace 或调用栈 | 文本、消息与调试能力改变。 | 更新解析并用实际完成条件判定测试结果。Reporting / 命令行、objection trace |
RAL:寄存器与存储器访问
read/write/mirror 的常规调用形式可以沿用,但成功 status 不能证明总线数据和镜像正确。
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
| 大端 map | 有效总线宽度小于 uvm_reg_data_t 整宽时,可能传错数据;单拍访问也可能受影响。 |
核对 adapter、每拍总线值和硬件值。大端数据 |
| 字段写、byte enable、W1C/RC 相邻字段 | 访问可能退化为整寄存器访问。 | 检查 byte strobe 与相邻字段,按访问副作用选择替代。字段访问 |
| 失败访问后读取镜像 | 目标不再预测失败访问;保留旧镜像可能正确。 | 分别检查 status、硬件值与镜像。失败预测 |
| predictor 多拍访问后续拍失败 | 可能仍更新镜像。 | 逐拍注入失败,检查完整访问状态。predictor |
| backdoor encode/decode | 编解码可能不生效但 status 为成功。 | 同时比较逻辑值和硬件值。backdoor |
| map 查询传 caller,直接 new backdoor/callback 基类 | 参数删除或类改为抽象。 | 同步签名或构造具体子类。map、backdoor、callback |
| Synopsys reg-bank 的 group.add_coverage | 构造后追加覆盖率能力的接口删除。 | 能力可预先确定时合并到构造参数;set_coverage 只启用已声明能力。reg-bank |
| 内置 reset/access sequence、访问权限查询 | 字段跳过、map 参数、随机源与权限字符串变化。 | 核对实际覆盖的寄存器、字段和访问路径。RAL(寄存器模型) |
uvm_path_e / UVM_DEFAULT_PATH 别名仍在主库中;无需仅为改名重写所有访问。稀疏数组、地址排除等 VCS 扩展的删除也列在寄存器模块。局部 adapter/codec 补偿须遵守条目中的访问条件。
TLM:FIFO、端口与 generic payload
| UVM-1.2 用法 | 2.0 的变化 | 修改与验证 |
|---|---|---|
uvm_tlm_fifo::flush() 清场 |
目标已复现旧事务残留,取出广播也变化。 | 停止并发收发后排空,断言 used()==0;至少放入两笔。FIFO |
uvm_tlm_generic_payload::compare() |
携带 extension 时可能漏检。 | 显式检查键集合与每个 extension,注入不匹配。GP 比较 |
| 交换 GP 的 pack 位流 | m_dmi 等布局变化。 | 与历史位流及接收端逐位比较。GP 打包 |
| port 连接查询、直接构造 socket 基类 | 查询容器类型变化,socket 基类抽象化。 | 同步容器类型并使用具体 socket。连接查询、socket |
| 阻塞 get 被 kill、TLM 类型字符串或旧 include | 状态恢复、工厂注册和文件名变化。 | 检查后续收发与构建依赖。TLM |
版本判断与 VCS/Verdi 集成
版本宏改为 IEEE 版本体系,旧 UVM_NO_DEPRECATED 也不能机械改名为语义相反的新开关。分别检查两库实际进入的预处理分支。版本宏、deprecated 开关
driver 的 DRVCONNECT 新告警、正则缓存、旧 FGP 与 Verdi native_dumping 文件的变化见Component / VCS 集成。兼容包编译顺序与目标库的完整选项见版本与兼容。
可保留的常用写法
普通 agent/driver/monitor/scoreboard 结构、显式 sequence 启动、常规 config_db、phase objection 和 factory 创建流程可以沿用。条目中的条件用于识别具体受影响的参数和调用路径。新增 API 单列在新增功能,纯实现变化列在内部实现附录。
修改与回归
按迁移步骤保存 1.2 基线、切库并对照行为,在迁移清单记录修改和验证结果。需要定位某个标识时,使用差异查询或全文搜索。