跳转至

输入查询内容

    本页内容

    编译断点

    编译断点

    按实际影响列出删除成员、废弃宏、参数签名和抽象类问题,包含扫描规则尚未覆盖的条目。启用兼容机制后仍需验证行为。

    按症状排查 · 迁移核销清单 · 可运行示例

    Object / Factory

    规则 差异与修改方向
    C2 事务开始/结束事件改用 get_event_pool()
    用户接口与行为 · item.begin_event → item.get_event_pool().get("begin") ; item.end_event 同理。
    C12 自定义 factory 子类需要补充虚方法
    用户接口与行为 · 直接继承 uvm_factory 时补 is_type_name_registered、is_type_registered、set_type_alias 和 set_inst_alias;四个方法必须使用同一注册/别名状态。能沿用默认工厂算法时,可继承 uvm_default_factory 并保留业务 override,具体签名与选择条件见下方代码。
    C23 自定义 coreservice:新增虚方法与初始化时机
    用户接口与行为 · 自定义 coreservice 必须匹配目标接口,并在库实际初始化之前安装;用户 initial 的第一行不保证足够早。
    C17 组件配置与 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。
    C6 / D15 工厂创建的对象需要带 name 参数的构造函数
    用户接口与行为 · 对需要 factory/create 的类补齐默认 name 构造参数并转发给 super;先核对 1.2 构建是否依赖 UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR ,勿将所有无参类都计为新增断点。

    Comparer / Printer / Packer / Recorder

    规则 差异与修改方向
    S6 / S44 pack 位流格式改变:检查外部接收端与历史数据
    用户接口与行为 · 跨版本位流必须逐位对照 1.2 goldencompat packer 只覆盖部分路径,嵌套对象和 GP 需明确格式。
    C18 uvm_packer 状态存取 API 重命名与签名变更
    用户接口与行为 · 把 get_bits/get_bytes/get_ints 改为 get_packed_bits/get_packed_bytes/get_packed_ints,把 put_ 改为 set_packed_ ,reset() 改为 flush();同名 get_packed_bits 的返回值调用必须改为 ref 数组调用。目标状态流包含迭代器元数据,外部位流协议按 M02-001 单独迁移。
    C1 删除无效的打印宽度配置,使用 printer 访问器
    用户接口与行为 · 旧 printer knobs 类型和宽度字段需要改写;保留且行为符合需要的字段可继续使用,访问器改写为可选。
    C13 / S16 打印整数时显式传位宽,避免把 UVM_HEX 当宽度
    用户接口与行为 · 旧打印宏按目标原型改写,并验证 SIZE 与 RADIX;同名两参宏可能编译通过却传错位宽。
    S8 / C28 自定义比较:检查类型设置和不匹配消息数量
    用户接口与行为 · 类型检查由类型名改为 wrapper,不同类型名共用 wrapper 时可能漏检;顶层 compare 会重置 check_type,show_max=0 改为不限输出。
    C19 uvm_tree_printer.newline 字段私有化;uvm_table_printer::calculate_max_widths 删除
    用户接口与行为 · 需要单行输出时使用 uvm_line_printer ;自定义换行规则需在派生 printer 中实现并对照输出。 set_separators 配置对象的起止分隔字符,不替代 newline。删除 calculate_max_widths() 调用后,验证目标自动列宽满足原输出契约。
    C26 重写 recorder、stream、database 方法时同步句柄类型
    用户接口与行为 · 普通 integer 变量存储 int 句柄无需因 64 位仿真而修改,两种整数都为 32 位四态。覆盖虚方法时须匹配目标版签名(参见 M06-007 的 VCS 类型检查);删除已失去调用入口的 m_get_handle override。
    D13 旧数组录制上限失效:显式控制记录项数
    用户接口与行为 · 目标库不再读取旧数组录制上限;需要限制记录项数时,在对象 do_record 中显式控制,并关闭该字段的自动录制。

    Phase / Objection / Event

    规则 差异与修改方向
    C3 component kill/status 删除与进程收尾
    用户接口与行为 · 旧 component kill/stop 接口需重建结束控制,用 phase、objection 或受控进程管理表达原意。
    C4 event 回调改用 uvm_callbacks 注册和删除
    用户接口与行为 · event 回调改用 uvm_callbacks 注册与删除,并匹配新的回调类型体系。
    C3 stop 机制整体删除:stop_phase / enable_stop_interrupt / stop_request / force_stop
    用户接口与行为 · 把旧 stop_phase 中必须执行的收尾任务移到显式停止握手:停止产生新事务,等待在途事务与检查器排空,再成对 drop 实际 phase 的 objection。 end_prematurely() / jump() 会改变 phase 执行流程,不能自动完成这些任务;仅在确需提前结束或重启阶段时单独设计并验证。旧 stop_timeout 应改为握手超时检查,不能直接等同于整个测试的 set_timeout。
    C20 uvm_phase::max_ready_to_end_iter 公共字段删除,改为访问器;get_ready_to_end_count() 删除
    用户接口与行为 · 将 phase.max_ready_to_end_iter = n 改为 phase.set_max_ready_to_end_iterations(n),读字段改为 phase.get_max_ready_to_end_iterations()。旧 get_ready_to_end_count() 无等价公开替代;若它参与退出判断,改为明确的业务完成条件,若仅用于统计则在自己的回调中计数。

    Reporting / 命令行

    规则 差异与修改方向
    C10a / C10c 旧全局配置、timeout 和 stop 函数需要改写
    用户接口与行为 · 全局配置调用优先改为 uvm_root::get().set_config_int/object/string(...) ,保留原实参与 object 的 clone 标志;这些组件方法在目标主库仍存在(M01-015),不需要 deprecated 开关。统一改用 config_db 时,必须同步类型、作用域和克隆契约,详见下面的映射。timeout 改 uvm_root::get().set_timeout(...) ;stop 的收尾超时按 M03-002 单独设计。
    C10b 删除:reporting 类中的 deprecated 方法
    用户接口与行为 · 把对象 get_report_server() 调用改为 uvm_report_server::get_server()。自定义格式移到 compose_report_message,自定义 action 处理移到 execute_report_message;新参数为 uvm_report_message,不能只把旧方法改名后保留原形参。具体目标签名与默认行为保留方式见下方。
    D7 删除:uvm_vector_to_string;uvm_cmdline_proc 由 const 变为可写
    用户接口与行为 · uvm_vector_to_string(value, size, radix, radix_str) 改为 uvm_bitstream_to_string(value, size, radix, radix_str),原实参顺序与格式意图保持;例如 text = uvm_bitstream_to_string(value, 32, UVM_HEX, "h")。不要借此改用 int 截断宽值。uvm_cmdline_proc 的普通只读使用可保留。

    Config DB / Resource DB

    规则 差异与修改方向
    D5 禁用自动字段配置:旧开关改为组件方法
    用户接口与行为 · 检索 disable_apply_cfg_settings / UVM_DISABLE_APPLY_CFG_SETTINGS 使用点并改 override;如脚本依赖 +UVM_DISABLE_APPLY_CFG_SETTINGS 需删除。
    C7 uvm_resource#(T) 自管理接口 set() / set_override() / get_by_name() / get_by_type() 被删除
    用户接口与行为 · 将资源对象的自管理接口迁移到 resource_pool/resource_db,并保留 scope、查询类型与单侧 override 意图。
    C7 资源构造 scope 仍有效;对象 set() 删除后改由 pool 入池
    用户接口与行为 · 普通 uvm_resource 的显式构造 scope 仍有效,两版都需入池;需替换的是资源对象的 set(),并核对 get_scope 表现形式。
    D10 自定义 resource_converter 已删除
    用户接口与行为 · 改用派生资源类重写 m_value_as_string() / convert2string() ;未启用过该宏则无需改动。
    C16 资源特化类删除返回子类型的静态 get_by_name/get_by_type
    用户接口与行为 · 按值类型使用 resource_db#(T)::get_by_name/get_by_type;结果为 uvm_resource#(T)。需要原特化子类型时显式检查 null 与 cast,不要假设池中同型资源都是该子类。

    Sequence / Sequencer

    规则 差异与修改方向
    S1 / D11 内置 sequence 库整体删除(uvm_random_sequence / uvm_exhaustive_sequence / uvm_simple_sequence)
    用户接口与行为 · 将旧内置类型改为自己的具体 sequence;需要候选集随机选择时用 uvm_sequence_library,显式登记候选类型并检查选中次数。字符串 default_sequence 改为 phase 路径下的 wrapper/instance 配置,完整代码见 M06-002;普通显式启动可写 seq = my_seq::type_id::create("seq"); seq.start(target_seqr)。
    S1 字符串 default_sequence 不再启动激励
    用户接口与行为 · 旧字符串式默认 sequence 与旧库管理接口需要迁移;已经使用 phase wrapper/instance 配置的代码可保留。
    C22 uvm_sequence_base 废弃的 sequence-library 方法删除
    用户接口与行为 · 旧库管理不再放在 uvm_sequence_base 上:把候选类型登记移到具体 uvm_sequence_library,通过 add_typewide_sequence 登记类型,用 get_sequence(idx) 查询并检查索引。若只启动固定 sequence,直接 type_id::create 后 start(target_seqr),避免仅为保留旧方法名再造序列库。
    C8 不要直接 new sequence/sequencer 抽象基类
    用户接口与行为 · 直接构造 uvm_sequence_base 的代码改用具体业务 sequence,或在确需通用具体 sequence 时使用 uvm_compat_proxy_sequence#(REQ,RSP) 。直接构造 uvm_sequencer_base / uvm_sequencer_param_base 的代码需改成匹配 REQ/RSP 的 uvm_sequencer#(REQ,RSP) 或业务派生 sequencer;声明基类句柄不要求改写。
    C14 自定义 sequence 仲裁函数改用 int 签名
    用户接口与行为 · 2.0 派生 sequencer 的返回类型和形参改为 int / int avail_sequences[$] ;直接调用时也同步队列元素类型。若同一源码必须支持两版,以库版本宏选择签名。
    C21 UVM_SEQ_ARB_TYPE typedef 默认不可用
    用户接口与行为 · 改用 uvm_sequencer_arb_mode ,或加 +define+UVM_ENABLE_DEPRECATED_API 。
    C5 uvm_do* 动作宏:约束、sequencer 与优先级的迁移
    用户接口与行为 · 把旧宏的约束、sequencer 和优先级完整传给新宏;只改宏名可能让激励丢失原约束。
    D1 旧 sequence 注册宏改为 object/component 注册
    用户接口与行为 · 旧 sequence 注册和 package 宏需要改写为对象/组件注册、sequence library 接口或显式 package。

    RAL(寄存器模型)

    规则 差异与修改方向
    C9 get_local_map/get_default_map 移除 caller 调试形参(含 Xcheck_accessX)
    用户接口与行为 · 删除调用点的 caller 实参,并同步派生类的方法原型。
    C25 uvm_reg_backdoor 变为抽象类;wait_for_change 由 local 变 public
    用户接口与行为 · 基类句柄可保留,new 的对象改为具体派生 backdoor。派生类实现 write(uvm_reg_item rw) 以及 read_func(rw) 或 read(rw),执行真实硬件访问并设置 status;不能只声明空子类绕过抽象类错误,基类默认 write/read_func 会报 fatal。将实例通过 rg.set_backdoor(bd) 挂到寄存器,使用 factory 时注册具体类型并检查 override 后的实际对象。需要 codec/callback 的访问按 M07-023 保留回调链。
    C27 uvm_reg_predictor:type_name 由静态变量改为静态函数;新增 flush()
    用户接口与行为 · 新代码显式调用 type_name() ;移除对原可写 type_name 字段的赋值。
    C25 类抽象性调整(uvm_reg/uvm_reg_block/uvm_reg_file/uvm_reg_cbs 去 virtual;uvm_vreg_cbs/uvm_vreg_field_cbs 加 virtual)
    用户接口与行为 · 将直接构造的 uvm_vreg_cbs / uvm_vreg_field_cbs 换成自己的具体派生类:构造函数接收 string name 并调用 super.new(name),原回调方法体迁入对应 override。uvm_callbacks 注册的对象仍指向原 vreg/field,传入新派生实例;原本已经使用具体回调类的代码可保留。uvm_reg/uvm_reg_block/uvm_reg_file/uvm_reg_cbs 的抽象限制放宽不要求反向修改已有派生类。
    C24 静态按名查找函数去 m_ 前缀(m_get_reg_by_full_name / m_get_field_by_full_name)
    用户接口与行为 · uvm_reg::m_get_reg_by_full_name(name) 改为 uvm_reg::get_reg_by_full_name(name);uvm_reg_field::m_get_field_by_full_name(name) 改为 uvm_reg_field::get_field_by_full_name(name)。保留原完整层级名,并在解引用查询结果前检查 null。
    D3 uvm_reg_array / uvm_reg_array_md 文件删除(UVM_SPARSE_ARRAY 扩展终止)
    用户接口与行为 · 若环境定义了 UVM_SPARSE_ARRAY ,需移除该 define 并改用普通 uvm_reg 数组建模。
    D4 uvm_reg_address_config 与 get_registers_filtered_by_address 移除(UVM_REG_ENABLE_ADDRESS_EXCLUSION 扩展终止)
    用户接口与行为 · 若定义了 UVM_REG_ENABLE_ADDRESS_EXCLUSION ,改用 resource 排除机制。
    D6 私有 reg-bank 覆盖率改为构造时声明
    用户接口与行为 · group.add_coverage 已删除;可预先确定的覆盖率能力移到构造函数第三参,set_coverage 仍只负责启用已声明能力。

    TLM

    规则 差异与修改方向
    C25 TLM2 socket 基类全部改为 virtual class
    用户接口与行为 · 基类句柄可保留,构造对象改为对应具体 socket。阻塞发起端用 uvm_tlm_b_initiator_socket#(T),阻塞目标端用 uvm_tlm_b_target_socket#(IMP,T) 并提供实现 b_transport 的 IMP;非阻塞端使用 uvm_tlm_nb_initiator_socket / uvm_tlm_nb_target_socket 并实现相应方向的 nb_transport。透传端改用对应的 uvm_tlm_{b,nb} passthrough {initiator,target}_socket。保留原 payload/phase 类型参数和连接方向,不要只删除 _base 后忽略新增的 IMP 参数。
    D9 uvm_tlm_time 更名 uvm_time,文件同步更名,库内保留 typedef
    用户接口与行为 · 仅使用 uvm_tlm_time 类型时可保留声明。自行组织库文件的构建将 tlm2/uvm_tlm2_time.svh 引用改为 tlm2/uvm_tlm_time.svh;使用 VCS 内置库和 import uvm_pkg::* 的用户代码不必额外 include 该类文件,避免重复定义。
    C15 port.get_connected_to / get_provided_to 返回容器改为 port 句柄
    用户接口与行为 · 将容器声明为与端口 IF 参数匹配的 uvm_port_base#(IF) list[string] ,并调整后续访问;若需要旧 proxy 容器,可经 port.get_comp() 调用其查询接口。

    Field Automation / 版本宏

    规则 差异与修改方向
    S4 版本宏与版本字符串的迁移
    用户接口与行为 · 版本分支应保持原来的精确版本或能力判断意图;旧版本宏不能统一替换为 POST 宏。

    Component / VCS 集成

    规则 差异与修改方向
    S21 / D7 正则接口与缓存:删除的调试 API 和匹配风险
    用户接口与行为 · 删除旧调试接口;regex/glob 混用时保持缓存默认关闭,并验证调用顺序不改变匹配结果。
    D8 旧 FGP 类与集成文件已删除
    用户接口与行为 · 若环境引用 uvm_fgp_thread_object / uvm_fgpinit_phase ,需联系 Synopsys 确认替代方案;否则无
    D8 Verdi native_dumping 录制文件已删除
    用户接口与行为 · 引用旧 native_dumping 文件或安装其 recorder 的脚本,迁移到目标安装提供的标准 uvm_custom_install_verdi_recorder.sv 流程,并核对 DPI 与启动配置。在实际 Verdi 中确认所需事务、字段及父子关系完整后,再移除旧脚本。未引用这些旧文件的流程无需因此替换文件;现有实测未覆盖全部 Verdi 工作流。

    版本适用范围