跳转至

输入查询内容

    本页内容

    uvm_push_sequencer 未消费被 peek 的请求,第二笔激励失败

    已复现的目标库问题

    目标库第二笔 push 请求失败已复现;局部替代在限定场景通过。

    影响范围

    使用 uvm_push_sequencer 且出现第二笔请求失败、重复发送或 SQRSNDREQGNI 时核对本条。

    具体差异

    目标 push run_phase 调用 m_safe_select_item 后没有移除 FIFO 请求。两笔 item 对跑中,第二笔 send_request 触发 SQRSNDREQGNI,原始流程在第一笔之后退出;探针拦截该 fatal 继续观测时又向 sink 发送第一笔,sequence 虽完成但实际数据为 1、1,而非 1、2。该错误文本提到 get_next_item 并不意味着用户存在并发 pull driver。

    修改方案

    优先评估改用常规 pull sequencer/driver。保留 push 流程时,push_probe.sv 的派生类在安全选择之后显式消费 FIFO,再 put 与通知完成;这是绑定目标库内部接口的局部修复,需固定版本并回归 kill、响应及背压场景,不能仅屏蔽 fatal。

    兼容措施与范围:兼容措施不修复 push 请求消费;局部派生替代依赖目标内部接口,kill、响应和背压仍需验证。

    已知限制KI-002

    迁移后验证

    至少发送值不同的两笔请求,逐笔核对 sink 数据与完成次数;局部替代还要回归 kill、response 和背压,禁止只屏蔽 SQRSNDREQGNI。

    记录本条结果M06-019 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。

    • S19 · 启发式:push sequencer 第二笔请求可能报错或重复发送。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules S19
    

    核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。

    扫描器下载、输入范围与报告说明

    源码与标准依据

    核查方式:源码与实测核对。实测仅覆盖本条所列场景。

    证据tests/uvm_review/push_probe.sv 的原始和 MIGRATED 对照。

    VCS 内置 UVM-1.2uvm_push_sequencer.svh:69(m_select_sequence 后 m_req_fifo.get)

    VCS 内置 uvm-ieee-2020-2.0uvm_push_sequencer.svh:78uvm_sequencer_param_base.svh:506(m_safe_select_item 只 peek)

    引用代码(高亮为引用行);上方行号链接可直接定位。

    src/vcs-uvm-1.2/seq/uvm_push_sequencer.svh
        fork
          super.run_phase(phase);
          forever
            begin
              m_select_sequence();
              m_req_fifo.get(t);
              req_port.put(t);
              m_wait_for_item_sequence_id = t.get_sequence_id();
              m_wait_for_item_transaction_id = t.get_transaction_id();
            end
        join
      endtask
    
      protected virtual function int  m_find_number_driver_connections();
        return req_port.size();
      endfunction
    
    endclass
    

    完整源码 · SHA256:849b82a451a2c5bdffd16bca269931b301c2d0c5b666422f7794f55c0077adc1

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_push_sequencer.svh
              m_wait_for_item_transaction_id = t.get_transaction_id();
            end
        join
      endtask
    
      protected virtual function int  m_find_number_driver_connections();
        return req_port.size();
      endfunction
    
    endclass
    

    完整源码 · SHA256:421591e4eccd1888ac1ab98b1d48b37958bbbacf661f51debcdf2f08f870a381

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequencer_param_base.svh
      m_req_fifo.peek(t);
      if ((select_process != null) && (select_process.status != process::FINISHED))
        select_process.kill();
    endtask
    

    完整源码 · SHA256:99707a7f2e520940931db3c21cd4809bb8dfa57b324007b95501a62fbd4e1d31

    术语解释 · 兼容配置

    返回Sequence / Sequencer · 迁移清单

    版本适用范围