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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] 张强UVM白皮书第一个例题貌似有点问题

[复制链接]
发表于 2018-7-9 23:08:44 | 显示全部楼层 |阅读模式
1资产
最近跑了张强UVM白皮书第一个例题,跑第一个例题给了我当头一棒!!!!!!!!!!!问题如下:
1.如果将rst_n的initial块放在调用driver的main_phase之后,my_driver中main_phase进不了while循环。
top_tb的部分代码如下:
1.PNG

driver的main_phase代码如下:
2.PNG



仿真后的波形如下:
3.PNG

可以看到:上述代码没有进行while判断直接进入for语句进行驱动。
下面是重点:如果我将top-tb中的rst_n的initial模块放在显式调用my_driver的main_phase之前,仿真结果如下:
123.PNG
通过上述调整可以发现:将initial块的顺序换个位置就可以实现正确的仿真结果。
问题:难道SV中两个initial块不是并行的执行吗?但是小伙伴们如果跑张强的2.2.3的代码会发现即使不调整initial块的位置仍可以得到正确的结果,这是否可以说明显式调用class会出现奇奇怪怪的问题。

2。第二个疑问:为什么仿真波形中的rxd与txd,rx_dv与tx_en会有一拍的延迟呢?是不是得用SV的仿真调度来解释呢?确切的说,如果将class的main_phase的非阻塞赋值换成阻塞赋值,仍然会有一拍的延迟。求解释。。。。。。。。。。。

发表于 2018-7-10 13:54:57 | 显示全部楼层
1.肯定进不去 因为你那条件判断 有问题 你可以在while 那加上个event 就知道为了 那个while 应该只在时间为0有用 建议改用wait
2.你贴的代码 看不到tx_en在哪 懒得去翻书了~~~
 楼主| 发表于 2018-7-10 23:33:13 | 显示全部楼层

标题

回复 2# timtim016801
为什么两个initial块换一下顺序就可以了?难道在sv显式调用main phase有啥猫腻?
发表于 2018-7-11 13:53:55 | 显示全部楼层
回复 3# zhangning029


    这是由于虽然initial块是并发执行的,但是在同一时刻仍然是按照从上到下的顺序执行的。在0时刻,虽然两个initial块都启动了,但是在前面的先执行,因此你调整两个initial块的顺序仿真波形不一样,其中还涉及到变量初始值的问题。
发表于 2018-7-11 14:52:28 | 显示全部楼层
dut的输出相对于输入肯定有延迟呀,需要消耗一定的仿真时间的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-14 22:11 , Processed in 0.018579 second(s), 6 queries , Gzip On, Redis On.

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