请帮助解释SystemC中信号量通道的代码

时间:2015-03-01 04:50:31

标签: semaphore systemc

最近,我正在研究systemc并对信号量频道有疑问。

我在asic world(http://www.asic-world.com/systemc/channels3.html)上找到了一个例子,但有点困惑。

在本示例的前1ns,第一个进程bus_semaphore()工作,可以打印两行“@ 1 ns ....”。同时,信号量值(总线)变为2(bus.post()),然后等待下一个时钟posgege。

对于第二个进程,do_read(),也是在1ns,第一个“@”行可以正常打印出来,但是接下来的if语句中的trywait()呢?第一个和第二个进程应该同时执行,也就是说我们无法确定trywait()是否在第一个进程的bus.post()语句之前或之后执行,所以我们不知道第二个“@”将打印出第二个流程的行。

但页面底部显示的答案意味着trywait()将在bus.post()执行后执行,以便打印出第二个“@ ...”语句。我怎么能确定在执行bus.post()之后执行trywait()?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我想我已经弄明白了。 SC_CTOR中定义的进程顺序非常重要,它与SC_CTOR中定义的顺序相反。

答案 1 :(得分:1)

你说这个例子展示了许多竞争条件。在构造函数中更改进程创建顺序的事实会影响模块的行为,这就是证据。

这不是一个很好的例子。任何设计都不应该包含诸如此类的竞争条件。