注册 登录
ET创芯网论坛(EETOP) 返回首页

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

日志

天哪!竟然还有UVM寄存器模型的隐藏剧情

已有 337 次阅读2018-12-1 20:45 |个人分类:验证前沿资讯|系统分类:芯片设计

rockeric.com

不少路粉对寄存器模型的使用可能还停留在这个阶段:

也就是说,通过寄存器句柄,配合读写指令,即可完成一次总线上的访问。

当然,你也可以通过指定BACKDOOR,来做后门访问。这两种方式在红宝书中,我们都已经详细介绍过了。今天路桑再来介绍一点儿不一样的,针对一些特殊的寄存器,有的时候这个寄存器可能是未映射的、非线性连续的,又或者需要通过BURST模式才能访问,总之无法通过一次SINGLE总线数据传输完成读写,这个时候,我们就可以考虑采用自定义的前门序列来实现了。


所以,今天路桑带来了一篇DVCon 2017的论文,Doing Funny Stuff with the UVM Register Layer: Experiences Using Front Door Sequences, Predictors, and Callbacks,来自于Dolous的John Aynsley,来深入谈一谈如何使用自定义的register sequence,来完成前门以及后门访问。



自定义前门访问序列

从这张图上可以看到,原有的前门访问是通过将寄存器级别的操作类型经过adapter转换为了总线级别的transanction,或者利用其反向路径完成转换,作为响应数据交回给寄存器模型一侧。当我们无法通过在adapter中使用bus transaction,而是需要通过多次bus transaction的组合来完成一次复杂的寄存器访问时,我们就可以使用用户自定义的寄存器前门序列,下面给出一段代码。


其中,rw_info是uvm_reg_item类型,是uvm_reg_frontdoor的成员变量,该对象包含着用来读写的目标uvm_reg的信息,譬如rw_info.kind为读写类型,rw_info.value表示读写数据,rw_info.status表示访问状态。在下面这个例子中,即是通过寄存器模型中的一个“虚拟寄存器”,其内容非连续分布在DUT中。因此,对于该寄存器的一次读写操作,实际上需要转换为两次读或者写操作,才可以通过两次访问非连续的地址,对其中片段数据完成操作才最终实现了该“虚拟寄存器”的读写操作。


其中task one_transaction的定义很直观:

评论 (0 个评论)

facelist

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

关闭

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

小黑屋|手机版|Archiver|ET创芯网 ( 京ICP备:10050787号 京公网安备:110105001212 )

GMT+8, 2019-4-26 22:17 , Processed in 0.028297 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部