我正在尝试将内存 Controller 的 SystemVerilog 模型移植到 SystemC,并且想知道什么是最好的翻译方式 run()
- 类型函数(即具有执行连续处理的永久循环)通过 fork 生成并加入 SystemC。这些 run()
函数通常在模拟开始时产生。我的困惑是 SystemC 确实支持生成线程、fork 和 join,但我相信该语言的意图是 SC_THREAD
来提供这种功能。有没有人对两种语言有足够的经验来发表评论?
注意:我相信这个问题更多地与约定有关,而不是技术上对或错的解决方案。可能它可以通过多种方式完成。
最佳答案
sc_thread 类似于 SystemVerilog 的 fork/join。两种语言都使用相同的非抢占式多线程语义来实现它们的线程。也就是说,一个线程会一直运行,直到它等待某事。此时,线程将控制权交给任何其他计划同时运行的线程。这两种语言都是有限制的确定性的。显然种子必须相同,但更改任何代码都会导致随机化发生变化。我相信这也包括线程运行的顺序,但我可能错了。
如上所述,您不应该在 SystemC 中使用 posix fork/join,因为该库不是线程安全的,也因为它打破了库的假设并引入了不确定性。
因此,只要 SV 代码不具有 SC 缺乏的功能,移植就应该很简单。
关于system-verilog - SystemVerilog fork/join w/ "run()"类型函数和 SystemC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956606/