在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1561|回复: 4

[求助] UVM RegisterModel Mirror方法 bug求助,bus2reg被执行了两次,总线活动没错但是mirror检查出错

[复制链接]
发表于 2022-8-16 22:24:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Pu1se 于 2022-8-17 20:26 编辑

uvm register model get error in reg mirror/read/write method for reg2bus running 2 times?


description:


问题概述:


    我在搭建验证环境的时候,使用了apb总线读写寄存器,对寄存器读写进行了测试,测试过程为对寄存器前门写,然后mirror检查(前门方式):
    regname0.write(status, data, UVM_FRONTDOOR) -> 500ns delay -> regname.mirror(status, UVM_CHECK, UVM_FRONTDOOR)
    验证环境设置为:自动预测关闭set_auto_predict(0),adapter中provide_response = 1
   
    然后就遇到了奇怪的问题,mirror检查报错了error,但是通过看总线波形读出的数据是正确的,如图所示:
wave.png
    随后我猜测是adapter的问题,于是在adapter中添加了如下的debug语句,打印了sequence item中的信息,同时为了确定bus2reg方法执行中拿到的哪个sequence item,在monitor中将监测并创建的read sequence item的 transaction id设置为 1111,将reg2bus产生的seq_item设置为2222, 如图所示:
adapter.png
    然后比较诡异的事情就发生了,输出如图所示:
debug.png


输出信息中:
    1. 在对reg的第一次读的过程,先执行了reg2bus一次,这个对寄存器进行操作是然后自动调用的,这里执行是正确的,
    2. reg2bus将reg_op转换成总线sequence_item,然后由driver驱动,并由monitor监测到,到这里都是正确的。
    3. 然后发现bus2reg方法被调用了两次,bus2reg方法是在adapter从sequencer中拿到RSP的时候调用的(我在adapter中设置了provide_response = 1),但为什么这里bus2reg被调用了两次呢?


    然后导致mirror结果出错的就是下面的执行过程了:
    1. 在mirror的方法执行中,由于是前门访问,先调用了寄存器的read操作,对应的会先调用一次总线driver read操作,因此会调用一次reg2bus,这里是正确的
    2. 随后可以在总线wave上观察到read操作,总线上读出的数据与先前reg写入的数据相同
    3. 在消息日志中看到bus2reg被执行了一次,此时sequence item的 transaction id是1111,并且item中的数据是正确的
    4. 然后bus2reg又被执行了一次,此时sequence item的 transaction id是2222,并且item中的地址正确,data出错,并且由于这次bus2reg的结果,导致了读出数据与寄存器模型的mirrored value不符,导致报错
   


    整体问题就是这样的,不知道由于什么原因,寄存器模型更新的时候bus2reg被执行了两次,并且在前门读的过程中数据发生错误了,求助各位大佬,研究了好几天也没明白是什么原因?
    在西门子论坛上看到了与此相似的问题,但是帖子下面并没有明确的解决方案,(已经是2011年的问题了...)(https://verificationacademy.com/ ... r-abstraction-layer)


2022.8.16 更新:bug解决了


  debug了半天,终于解决了,问题发现出在driver read上,在dut侧的prdata由于设置了延时#2导致了2ns有prdata才发生改变,driver中prdata sample的逻辑是在pready为高后10ps才采样,因此采样到的数据是错误的...(但monitor监测到的seq item是正确的)因此导致了第二次bus2reg拿到driver 返回的RSP item更新寄存器出错。


  同时,有关于为什么bus2reg被调用了两次的问题,这个debug之后发现,无论设置auto_predict为0还是为1,只要连接了predictor更新路径,在调用mirror方法都会调用bus2reg两次,一次是拿到driver RSP调用,一次是拿到monitor item调用。auto predict决定的是对寄存器模型进行write/read操作后是否自动更新镜像值,如果为0,进行write/read后更新是通过monitor监测的item来完成的,但同时driver RSP也会调用。
发表于 2022-8-17 09:10:18 | 显示全部楼层
会不会是你的predictor里调用的?
发表于 2022-8-17 15:13:11 | 显示全部楼层
求问gvim什么配色
 楼主| 发表于 2022-8-17 20:27:38 | 显示全部楼层


seabeam 发表于 2022-8-17 09:10
会不会是你的predictor里调用的?


是的,predictor调用的那次bus2reg是正确的,driver 传回 RSP给sqr再给adapter那次调用出错了,已经找到问题了。
 楼主| 发表于 2022-8-17 20:30:02 | 显示全部楼层


w819161899 发表于 2022-8-17 15:13
求问gvim什么配色


代码是拷贝到笔记本上看的,所以没用gvim,用的vscode panda syntax theme,如果想用在gvim的话上估计得看vscode那个theme的配色json
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-20 00:28 , Processed in 0.022668 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表