跳转至

输入查询内容

    本页内容

    Sequence / Sequencer

    优先检查旧字符串式 default_sequence、响应溢出与 push 请求。目标库新增部分基类的抽象限制,删除旧式 sequence library 机制,并将多种 uvm_do_* 宏移入 deprecated。已有 phase default sequence 需按配置形式核对,避免把所有默认激励都视为失效。

    建议阅读顺序

    先验证默认 sequence 确实启动,再检查两笔以上请求的交付、响应消费和异常清理。已有 phase default sequence 写法按原配置核对。

    M06-001M06-019M06-008M06-013

    Sequence/item 的报告方法与 component/global 入口共用迁移说明:默认 verbosityM04-002,非 INFO 过滤见 M04-003

    用户接口与行为

    条目 修改方案
    M06-001 内置 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)。
    M06-002 字符串 default_sequence 不再启动激励
    编译断点 高风险 · 静默/数据全局扫描 default_sequence 字符串 config、 count / max_random_count 等字段及 add_sequence 等调用,迁移到 phase default sequence( uvm_config_db#(uvm_object_wrapper)::set(this, "<path>.<phase>_phase", "default_sequence", ...) )。已是 phase 式写法的 不用动 。
    M06-003 uvm_sequence_base 废弃的 sequence-library 方法删除
    编译断点旧库管理不再放在 uvm_sequence_base 上:把候选类型登记移到具体 uvm_sequence_library,通过 add_typewide_sequence 登记类型,用 get_sequence(idx) 查询并检查索引。若只启动固定 sequence,直接 type_id::create 后 start(target_seqr),避免仅为保留旧方法名再造序列库。
    M06-004 不要直接 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;声明基类句柄不要求改写。
    M06-007 自定义 sequence 仲裁函数改用 int 签名
    编译断点 其他行为变化2.0 派生 sequencer 的返回类型和形参改为 int / int avail_sequences[$] ;直接调用时也同步队列元素类型。若同一源码必须支持两版,以库版本宏选择签名。
    M06-008 响应队列溢出默认不报错,需要显式开启
    高风险 · 静默/数据需要检测响应丢失的 sequence 显式调用 set_response_queue_error_report_disabled(0) (双库可用),或目标版 set_response_queue_error_report_enabled(1) ;同时检查消费速度和队列深度。不能仅靠默认 UVM_ERROR 计数验收。
    M06-009 UVM_SEQ_ARB_TYPE typedef 默认不可用
    编译断点改用 uvm_sequencer_arb_mode ,或加 +define+UVM_ENABLE_DEPRECATED_API 。
    M06-011 多个 sequence 同时 lock 时授权顺序改变
    其他行为变化保留 lock/unlock 的配对流程;回归不再假定一次调度同时授权所有排队 lock。对并发 sequence 按实际授权与完成顺序判定;若业务必须固定先后,用显式握手表达依赖,并验证每个请求最终获准、锁最终释放。
    M06-012 driver 等待请求时 kill sequence:核对后续仲裁
    其他行为变化普通请求等待流程可保留。存在多级 sequencer 堆叠时,在目标 sequencer 的 build_phase 读取配置之前,通过 uvm_config_db#(int)::set 配置其 wait_for_sequences_count,逐级验证计数满足传播需要;kill 等待中的 sequence 后,检查下一笔请求仍能被 driver 消费。具体配置读取位置见源码依据,不把固定延迟当通用补偿。
    M06-013 sequence.kill() 清理仲裁请求、锁与路由,保留已排队响应
    其他行为变化保留 sequence.kill();确认跨 sequencer 仲裁请求和锁已清理后,才移除针对这些残留的旧补偿。若业务要求即时丢弃已排队响应,继续显式调用 clear_response_queue;需要检查或消费响应的流程先完成对应处理。driver/scoreboard 在途事务仍按业务协议收尾,再验证后续请求与响应链路。
    M06-014 starting_phase 的直接赋值与锁定限制
    日志/调试变化 其他行为变化把 seq.starting_phase = phase 改为 seq.set_starting_phase(phase),读取改为 seq.get_starting_phase()。在 sequence 启动及相关 DAP 锁定前完成设置;锁定后的诊断应修正设置时机,不只修改消息过滤。
    M06-017 sequence_library 的选择边界与类型名
    高风险 · 静默/数据动态缩减候选集的 USER 模式须检查索引范围; tests/uvm_review/library_migrated.sv 派生带选择前边界检查的 select_sequence,在相同场景两库均返回 0。固定候选集的普通用法无需因此改写。
    M06-019 uvm_push_sequencer 未消费被 peek 的请求,第二笔激励失败
    高风险 · 静默/数据优先评估改用常规 pull sequencer/driver。保留 push 流程时, push_probe.sv 的派生类在安全选择之后显式消费 FIFO,再 put 与通知完成;这是绑定目标库内部接口的局部修复,需固定版本并回归 kill、响应及背压场景,不能仅屏蔽 fatal。
    M09-004 uvm_do* 动作宏:约束、sequencer 与优先级的迁移
    编译断点 高风险 · 静默/数据uvm_do_with(x,{...}) → uvm_do(x, get_sequencer(), -1, {...}) 或手工 start_item/randomize/finish_item;过渡期可 +define+UVM_ENABLE_DEPRECATED_API 。
    M09-005 旧 sequence 注册宏改为 object/component 注册
    编译断点uvm_sequence_utils(TYPE,SEQR) 改为 `uvm_object_utils(TYPE) ;原宏还声明了 typed p_sequencer,需要该成员时保留 `uvm_declare_p_sequencer(SEQR) 。只有确需使用具体 uvm_sequence_library 时才加 `uvm_add_to_seq_lib(TYPE, LIBTYPE) ,LIBTYPE 是 library 类型,不能直接填旧 SEQR。 uvm_sequencer_utils(TYPE) 改 `uvm_component_utils(TYPE) ;package 宏改为匹配的 package / endpackage 。
    新增功能 · 2 项

    目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。

    条目 修改方案
    M06-015 新增 get_randomize_enabled / set_randomize_enabled
    新增/接口调整无。
    M06-016 新增 uvm_sequencer_base::get_arbitration_sequence / start() 重入检测改 mutex
    其他行为变化无。

    全部新增功能

    内部实现 · 2 项

    文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。

    条目 修改方案
    M06-006 uvm_sequencer 的仲裁状态位 public → protected
    编译断点 其他行为变化扫描驱动中对这两个字段的直接赋值;改用正规 pull 流程或派生类内操作。
    M06-018 get_tr_handle 返回类型 integer → int
    无行为变化无。

    全部内部实现

    VCS 定制说明

    VCS 定制说明

    以下对照用于区分 VCS 定制与 Accellera 参照;需要迁移的事项以关联条目的条件、改法和验证为准。

    定制项 两版状态 工程影响与入口
    Sequence library counter VCS 1.2 已为每实例 local;Accellera 1.2 为 static;目标为每实例 protected VCS 两侧实例隔离延续,但动态 max 回绕有差异,见 M06-017
    UVM_CREATE_OPT 1.2 对内置 sequence create 有条件保护;2.0 删除该内置文件 内置 sequence 替代见 M06-001;创建签名见 M09-003
    sequencer_param_base 目标相对 Accellera 仅注释字符差异 无厂商附加行为;版本间 sequencer 变化仍见正式条目。

    版本适用范围