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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1782|回复: 9

[求助] 求助大家,移植白皮书中UVM平台时出现了好几个问题

[复制链接]
发表于 2022-8-3 21:30:47 | 显示全部楼层 |阅读模式

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

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

x
第一个问题是SCOREBOARD组件无法正确运行的问题:
8a60e6e89a56db1849476eec060b12c.png
上图是我的SCOREBOARD组件,它在运行的时候只运行了第一个WHILE(1)程序块,打印出了SCOREBOARD Y,第二个WHILE(1)程序块没有执行。
附上结果图
21278d8e1a4816e8127ee65eabdf05b.jpg


第二个问题是我的SEQ内使用UVM_DO宏后,repeat10次,产生的TRANS全部相同,没有产生10次随机的TRANS,下面是我的SEQ以及TRANS(trans已经用工厂机制注册过了):
1659533242287.png 1659533268872.png


第三个问题是我使用上述平台进行测试并产生FSDB文件,文件打开后所有输入输出全部是高阻态,下面是我的TB_TOP:
1659533417704.png

求大神帮助看看平台哪里有问题
8a60e6e89a56db1849476eec060b12c.png
b4a47cd2339e4c5456dc53c59a1c471.jpg
 楼主| 发表于 2022-8-3 21:38:07 | 显示全部楼层
最后两张图忘记删除了
发表于 2022-8-4 09:06:31 | 显示全部楼层
第一个问题不一定是没有执行第二个while循环,可能是进入循环了,但是被阻塞在get语句了。可以在之前加一个打印信息检查是否进入循环,也可以尝试try_get
 楼主| 发表于 2022-8-4 10:24:06 | 显示全部楼层


G7ngko 发表于 2022-8-4 09:06
第一个问题不一定是没有执行第二个while循环,可能是进入循环了,但是被阻塞在get语句了。可以在之前加一个 ...


感谢回复,我按照您的方法在while(1)后加了一个INFO,发现也无法打印,不知道是哪里出了问题,我又尝试将两个while(1)合并为一个程序块,但是合并之后连第一条信息也不会打印了 1659579765741.png

 楼主| 发表于 2022-8-4 10:59:35 | 显示全部楼层


G7ngko 发表于 2022-8-4 09:06
第一个问题不一定是没有执行第二个while循环,可能是进入循环了,但是被阻塞在get语句了。可以在之前加一个 ...


您好感谢您的建议,我发现下面那个WHILE(1)是执行了,一开始没有将信息放入log中,所以没有看见,正如您所说应该是在get那里卡住了,使用try_get会在后面打印TRANS那里报出没有该元素的错误,应该是我的DUT链接有问题导致O.AGT没有响应
发表于 2022-8-4 14:57:51 | 显示全部楼层


ds981016 发表于 2022-8-4 10:59
您好感谢您的建议,我发现下面那个WHILE(1)是执行了,一开始没有将信息放入log中,所以没有看见,正如您 ...


确认下monitor、env的connection,这大概率是monitor没有正确连接导致的采集transaction到送到scoreboard的过程出问题,导致阻塞了

 楼主| 发表于 2022-8-4 15:20:04 | 显示全部楼层


qsh123_123 发表于 2022-8-4 14:57
确认下monitor、env的connection,这大概率是monitor没有正确连接导致的采集transaction到送到scoreboard ...


感谢您的回复,下面是我在ENV中链接各个组件的地方,采用的是白皮书中的代码没有改动过 image.png
发表于 2022-8-4 16:03:11 | 显示全部楼层


ds981016 发表于 2022-8-4 15:20
感谢您的回复,下面是我在ENV中链接各个组件的地方,采用的是白皮书中的代码没有改动过
...


排查代码问题的方式,不应该是跑论坛来仅仅依靠帖代码就期待别人给你定位和修改问题,因为环境的问题往往有可能需要贴出来完完整整的全部环境代码,这种排查环境问题的方式很低效且不可取,而且学习效果不佳。
正确的方式应该是,在你预估(或者别人帮你预估/定位)的问题出现的大概范围附近,插入各种不同的打印信息,重新仿真一次,然后根据打印信息逐步缩减和定位问题所在的范围——直到最终定位到阻塞住的代码段。。

你应该学习的不仅仅是代码本身,更重要的是代码能力和调试能力。


这里最应该做的是,在你的monitor采样到DUT的transaction的那些main_phase/task的里面插入一下打印信息,查看哪些信息有打印,哪些信息没有打印。。这样就可以排查monitor是否正常工作——因为你的scoreboard已经根据打印信息确认是actual data queue出现堵塞导致循环没有执行下去了,那么这个actual data queue的数据前一级来源就是monitor,而monitor的数据来源不正常,则可能性有可能是monitor内部的问题,也有可能是monitor在env里面实例化的问题;所以,分别排查monitor内,以及monitor外的connection,这就是排查环境出问题的思路。。


 楼主| 发表于 2022-8-4 16:18:37 | 显示全部楼层


qsh123_123 发表于 2022-8-4 16:03
排查代码问题的方式,不应该是跑论坛来仅仅依靠帖代码就期待别人给你定位和修改问题,因为环境的问题往往 ...


感谢大佬指点,受益匪浅
 楼主| 发表于 2022-8-5 14:27:06 | 显示全部楼层
更新一下DEBUG过程同时加强自己学习,问题中:SCOREBOARD不能够运行的部分解决了,就和大佬说的相同,根据INFO信息找到了问题出在MONITOR中,O.AGT的MONITOR的触发条件和I.AGT触发条件有所区别,一开始只写了一个条件导致平台中的SCOREBOARD组件无法运行;问题中SEQ无法随机化的问题解决了,原因是自己没有仔细看LOG文件,发现UVM_DO这个宏其实是运行了,但是由于MONITOR和DRV的时序配合有问题导致MONITOR一直在读取同一段时间中的IF上的信号,导致打印出来的结果全部相同,以为UVM_DO宏没有运行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-26 01:19 , Processed in 0.025819 second(s), 8 queries , Gzip On, Redis On.

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