SV——disable_fork与总线事务
对于下面的例子,假设实际中是thread1 先完成,thread0被disable。并且 signal==1的时候,reg0的值恰好也会跳变为1。本意是再thread 2对reg 0 做的write clear.
1 |
|
但是实际波形中,在thread 1 结束之后,总线上先做了一个读操作,读到的值是跳变后的1;然后做了一个写操作,写的值是0.
这与期望不同,期望的是thread 1结束之后,是一个写1的操作。
这可能是因为,thread 1结束的时候thread 0已经在总线(好像是AXI)上了,它会读到1;但thread 1结束之后,thread 2也被提到总线上,此时写的值rd_data为0,因为thread 0还没有返回1,所以会有问题。
解决方法有两个,一个是在thread 2之前做一段时间的延迟(#);另一个是在thread 2写之前,先读。
而且这次仿真中在thread 2之后还有一个读reg 0的操作,判断是否write clear,但是在总线上没有看到这次的transaction,最终timeout。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!