- 差异参考
- 按模块查阅
- Sequence / Sequencer
- M06-019
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 第二笔请求可能报错或重复发送。
核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。
源码与标准依据
核查方式:源码与实测核对。实测仅覆盖本条所列场景。
证据:tests/uvm_review/push_probe.sv 的原始和 MIGRATED 对照。
VCS 内置 UVM-1.2:uvm_push_sequencer.svh:69(m_select_sequence 后 m_req_fifo.get)
VCS 内置 uvm-ieee-2020-2.0:uvm_push_sequencer.svh:78;uvm_sequencer_param_base.svh:506(m_safe_select_item 只 peek)
引用代码(高亮为引用行);上方行号链接可直接定位。
完整源码 · SHA256:849b82a451a2c5bdffd16bca269931b301c2d0c5b666422f7794f55c0077adc1
| src/vcs-uvm-ieee-2020-2.0/seq/uvm_push_sequencer.svh | |
|---|---|
完整源码 · SHA256:421591e4eccd1888ac1ab98b1d48b37958bbbacf661f51debcdf2f08f870a381