You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将analysis_port连接至uvm_sequence传递DUT状态信息

核心结论

没有办法直接将analysis_port连接到uvm_sequence。本质原因是uvm_sequence继承自uvm_object,不属于UVM组件树中的uvm_component节点,没有完整的phase生命周期回调,自然无法在connect_phase阶段完成TLM端口的绑定操作,这是UVM底层机制决定的,没有奇技淫巧可以绕开。

可行实现方案
  • sequencer中转方案(首推)
    这是改动最小、最符合UVM设计哲学的方案,适配你当前已部署analysis_port的现有平台:
  1. 在挂载该store序列的对应sequencer中,例化一个uvm_analysis_imp实例,在sequencer的connect_phase中,将环境中输出写穿完成事件的analysis_port连接到这个imp端口。
  2. 在sequencer中实现imp对应的write()函数,函数内将收到的写穿完成事务(建议携带每笔store的唯一事务ID、地址、数据等匹配信息)存入内部队列,同时触发一个uvm_event通知事件到达。
  3. 你的写激励sequence中,每发送完一笔store事务,就通过类型转换后的sequencer句柄(即常用的p_sequencer),阻塞等待对应事务ID的写穿完成事件,确认当前store已经在缓存输出端完成写穿后,再启动下一笔激励的发送。
    针对你的write-through缓存验证场景,加事务ID匹配逻辑可以避免DUT乱序返回时的误触发,保证每一笔激励严格等前一笔写穿完成再发,完全满足序列的约束要求。
  • uvm_tlm_fifo中转方案
    如果不想修改现有sequencer的代码,可以选这个方案:
  1. 在验证环境的env层级例化一个uvm_tlm_fifo,在env的connect_phase中,将输出写穿事件的analysis_port连接到fifo的analysis_export端口。
  2. 在env的build_phase或者connect_phase中,通过uvm_config_db将这个fifo的句柄发送到对应sequencer的可见路径下。
  3. sequence运行时,先从uvm_config_db拿到fifo句柄,每发完一笔store事务,就调用fifo的get()任务阻塞等待,直到拿到匹配当前事务的写穿完成项,再继续发下一笔。
    这个方案要注意config_db的路径配置必须完全匹配,否则sequence会拿到空句柄报运行错。
  • 全局事件池同步方案
    这是最轻量的快速实现方案,适合不需要传递复杂事务上下文的简单场景:
  1. 在监测写穿完成事件的monitor组件中,每捕获到一笔写穿完成事务,就从全局uvm_event_pool中取出对应事务ID的事件,调用trigger()触发。
  2. sequence中每发完一笔带唯一ID的store事务,就从同一个uvm_event_pool中取出对应ID的事件,阻塞等待触发即可。
    这个方案的缺点是事件本身不带事务载荷,如果需要校验写穿的数据、响应状态等信息,需要额外配合共享存储结构传递数据,可维护性不如前两个方案。
场景选型建议

针对你当前直写缓存验证、sequence需严格等前一笔store写穿完成再发下一笔的需求,优先选择sequencer中转的方案。该方案完全复用现有analysis_port的监测链路,不需要额外新增环境组件,事务匹配逻辑收敛在sequencer中,sequence只需要保持“发激励-等对应完成”的线性流程,代码可读性和稳定性最高,后续扩展多sequence并发、乱序响应处理的成本也最低。

内容的提问来源于stack exchange,提问作者Melandru's Square

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:48:57