UVM序列篇之八(终):sequence的层次化(下)

本文介绍了UVM中分层序列(layering sequence)的概念,在构建复杂协议总线传输时,倾向用层次化的sequence群落模拟协议层次。通过例码阐述了sequencer layer协议转换方法,包括transaction路由通道、转换方法等,还提及反馈回路实现方式,最后总结了UVM测试序列拆分相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自:http://www.eetop.cn/blog/html/28/1561828-5940201.html

Layering Sequence

如果我们在构建更加复杂的协议总线传输,例如PCIe,USB3.0等,那么通过一个单一的传输层级会对以后的激励复用、上层控制不那么友好。对于这次更深层次化的传输,在实际中,无论是VIP还是自开发的环境,都倾向于通过若干个层次的sequence群落来模拟实际的协议层次。例如,通过层次化的sequence可以分别构建trasaction layer、transport layer和physical layer等从高抽象级到低抽象级的transaction转化。这种层次化的sequence构建方式,我们称之为layering sequence。距离大家比较近的应用,譬如在进行register访问时的操作,即在寄存器级别的操作,需要通过transport layer转化,最终映射为具体总线的传输。

关于寄存器访问时的sequence layer转化,我们将在后续的《UVM寄存器篇》中详细介绍。而在《验证平台自动化篇》处于标准化的测试用例考虑,我们也引入了sequence layer的理念,企图用标准化的测试命令来弱化具体总线的命令传输,更多的实施细节也会在这一篇中接收。在这一节中,我们将通过一段简单的例码,来阐述layer sequence的核心,突出sequence层级转换的思想。

 

从上面的这一段例码中,我们可以得出一些关于如何实现sequencer layer协议转换的方法。

  • 无论有多少抽象层次的transaction类别定义,都应该有对应的sequencer作为transaction的路由通道。例如layer_sequencer和phy_master_sequencer分别作为bus_trans和layer_trans的通道。

  • 在各个抽象级的sequencer中,需要有相应的转换方法,将从高层次的transaction从高层次的sequencer获取,继而转换为低层次的transaction,最终通过低层次的sequencer发送出去。例如adapter_seq负责从layer_sequencer获取layer_trans,再将其转换为对应的phy_master_sequencer一侧对应的sequence或者transaction,最后将其从phy_master_sequencer发送出去。

  • 这些adaption sequence应该运行在低层次的sequencer一侧,作为“永动”的sequence应该时刻做好准备,来服务从高层次的sequencer获取transaction,通过转化将其从低层次的sequencer一侧送出。例如上面在test1中,adapter.start(phy_agt.sqr)用来做好adapter sequence的服务。

  • 至于哪一个层次的transaction item的定义,上面的例子仅仅是为了说明layer sequence的一般方法,对于实际中的层次定义和对应的transaction item的定义,我们还需要具体问题具体处理。

 

下面的这幅示意图,是对上面例码的进一步说明。从中我们既可以看到各个sequence类别对应的sequencer,同时也有sequence item发送和转换的方向。经过层层的转化,最终高层次的transaction内容可以落实到低层次的protocol agent和physical interface上面。上面的例码中没有给出读回路的处理,即从physical interface穿过physical agent,最终抵达layering sequencer的通信。在实际中,我们可以通过目前以后的回路,经过附加的response item返回来实现,也可以通过一级级的monitor采集response transaction,最终通过monitor转化抽象级返回item的方式来实现。至于选择哪一种反馈回路,这与底层agent反馈回路的实现方式有关,即如果原有的方式通过driver一侧返回response,那么我们建议继续在该反馈链条上进行从低级transaction到高级transaction的转化,如果原有的方式通过monitor一侧返回response,那么我们也建议创建对应的高层次的monitor,实现层次转化。

至此关于UVM测试序列的拆分讲解就结束了,读者们可以从这一系列的文章中认识到item、sequence、sequencer和driver之间的连接和数据传送握手关系,同时也就普通情况下的sequence/item传送掌握了常用的方法。在完成了UVM结构搭建、学习了TLM通信之后,作为一个UVM世界的新手就可以正式上路,一步步积累里程数,朝着老司机的经验值努力了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值