路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

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

已有 3174 次阅读| 2018-2-4 14:45 |个人分类:验证系统思想|系统分类:芯片设计

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世界的新手就可以正式上路,一步步积累里程数,朝着老司机的经验值努力了。


下一章我们原本计划介绍UVM章节的最后一个基础部分,即《UVM寄存器篇》。然而鉴于这一年度,路桑团队将验证平台自动化作为了关注方向,并且不断将自有的自动化平台同项目进行磨合和升级,因此路桑决定暂且略过这一章,转而跳向《验证平台自动化篇》。希望读者们可以从这一章中看到自己没有关注的,得到可能感兴趣的,并且最终促成你们升级现有环境或者努力朝着环境模块化的方向迈进。至于《UVM寄存器篇》,我们也将在后续中作为UVM的基础部分进行连载。


谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-23 23:37 , Processed in 0.028038 second(s), 19 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部