跳转至

输入查询内容

    本页内容

    用户接口变化总览

    下面按 UVM-1.2 中已有的接口说明 2.0 的变化。每节链接到完整模块;具体条目提供修改前后代码、兼容方式与保留范围和验证结果。兼容开关的含义与配置见版本与兼容

    uvm_field_*:字段自动化

    uvm_field_* 用于让 copycompareprintpack/unpackrecord 等操作自动处理注册字段。迁移时,首先检查宏的 FLAG 实参:2.0 按显式启用的操作执行。

    UVM-1.2 写法 2.0 的变化 修改与验证
    FLAG 只写 UVM_NOCOPY 等禁用位 未显式启用其他操作,compare 等也可能被跳过。 若原意是只禁用 copy,可写 UVM_ALL_ON | UVM_NOCOPY;保留原禁用意图。代码对照
    FLAG 只写 UVM_COPY 等部分正向位 只执行启用的操作,未启用的 compare 可以无告警地跳过。 按需要补齐操作位;主动注入单字段不匹配,确认比较失败。全部 FLAG 检查
    UVM_DEFAULTUVM_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_douvm_createuvm_senduvm_rand_send。约束、目标 sequencer 和优先级都需要按新原型传入。

    UVM-1.2 写法 2.0 的变化 修改与验证
    uvm_do(req) 在 sequence 上下文中,单参用法可保留。 核对实际请求与目标 sequencer。
    uvm_do_withuvm_do_on*uvm_do_pri* 旧变体默认不提供。 使用 uvm_do(对象, sequencer, 优先级, 约束);保留每个原实参。修改前后
    uvm_create_onuvm_send_priuvm_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_phasesequence_library 和仲裁类型别名,见Sequence / Sequencer

    phase、objection 与事件

    UVM-1.2 用法 2.0 的变化 修改与验证
    uvm_test_done_objection 控制结束 旧对象不再保持 run 存活。 对实际 phase 成对 raise/drop,等待激励与检查器完成。修改示例
    global_stop_requeststop_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/getglob 路径 常规调用可保留;非空 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 基类 参数删除或类改为抽象。 同步签名或构造具体子类。mapbackdoorcallback
    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 基线、切库并对照行为,在迁移清单记录修改和验证结果。需要定位某个标识时,使用差异查询或全文搜索。

    版本适用范围