最近在学习systemc,有一个关于信号量通道的问题。
我在 asic 世界(http://www.asic-world.com/systemc/channels3.html)上找到了一个例子,但有点困惑。
在这个例子的前 1ns,第一个进程 bus_semaphore() 工作并且可以打印出两行“@1 ns ....”。同时,信号量值(bus)变为2(bus.post()),然后等待下一个时钟posedge。
对于第二个进程do_read(),也是在1ns,第一行“@”可以正常打印出来,但是下一个if语句中的trywait()呢?第一个和第二个进程应该同时执行,也就是说我们无法确定trywait()是在第一个进程的bus.post()语句之前还是之后执行,所以我们不知道第二个“@”是否第二个过程的行将被打印出来。
但是页面底部显示的答案意味着 trywait() 将在 bus.post() 执行后执行,以便打印出第二个“@...”语句。如何确定在 bus.post() 执行后 trywait() 将执行?
提前致谢!