比如我们测试某个地址读写的task如上,此task目的是测试是否对地址addr的读写,并不关心读写结果。如果读写的时候某个地址hang住,那么整个验证环境都会hang在这儿,后续地址不能测试到。
我们希望的是:在测试到某个地址到hang住时,就中断对此地址的读写进程,测试下一个地址。
可以改成这样的fork进程控制:
1.最外面这个fork可以不要
2.a0进程是测试对addr地址读写,和a1进程时并行的,因为a0是join_none。(这里addr不用automatic接收,因为多个地址并不并行测试的,是测完一个策测下一个)
3.a1进程是中有两个并行的子进程,a1是join_any的,所以只要两个子进程中某一个结束,就进入for循环测试下一个地址。
4.a1两个子进程,第一个进程是等待正常读写结束,event被触发,然后结束a1进程,测试下一个地址;第二个进程是没有等待event被触发,该地址读写会hang住,无法触发avent。然后等待读写超时,即超过正常读写时间,这里可以测试一些可以正常读写的地址所花费的时间,根据此时间来设置此阈值。如果等到读写超时,那么久结束a0和a1两个进程,然后测试下一个地址。(记住我这次遇到情况是总线直接hang住了,ready信号一直拉不起来,即使将进程kill掉重新去读下一个地址也是不起作用的,可能还需要重新rst一下)