我正在尝试将内存控制器的SystemVerilog模型移植到SystemC,并且想知道翻译run()
的最佳方法是什么 - 使用fork和join生成类型函数(即使用连续处理的永久循环)到SystemC。这些run()
函数通常在模拟开始时生成。我的困惑是SystemC确实支持产生线程,fork和join,但我相信语言的目的是让SC_THREAD
提供这种功能。有没有人有足够的两种语言经验来评论?
注意:我认为这个问题与惯例有关,而不是技术上正确或错误的解决方案。可能它可以通过多种方式完成。
答案 0 :(得分:0)
sc_thread是SystemVerilog的fork / join的类似物。两种语言都使用相同的非抢占式多线程语义来实现其线程。也就是说,一个线程运行直到它等待某事。此时,线程将控制权转移到计划同时运行的任何其他线程。这两种语言都有限制性的确定性。显然种子必须相同,但是改变任何代码都会导致随机化变化。我相信这也包括线程运行的顺序,但我可能错了。
如上所述,你不应该在SystemC中使用posix fork / join,因为库不是线程安全的,并且因为它打破了库的假设,引入了非确定性。
因此,只要SV代码没有SC缺少的功能,移植应该是直截了当的。