4

我正在尝试将内存控制器的 SystemVerilog 模型移植到 SystemC,并且想知道run()用 fork 生成并加入 SystemC 的转换类型函数(即使用执行连续处理的永久循环)的最佳方法是什么。这些run()函数通常在模拟开始时生成。我的困惑是 SystemC 确实支持生成线程、fork 和 join,但我相信该语言的目的是SC_THREAD提供这种功能。有没有人有足够的两种语言经验来发表评论?

注意:我认为这个问题更多地与惯例有关,而不是技术上正确或错误的解决方案。可能它可以通过不止一种方式完成。

4

1 回答 1

0

sc_thread 类似于 SystemVerilog 的 fork/join。两种语言都使用相同的非抢占式多线程语义来实现它们的线程。也就是说,一个线程一直运行直到它等待某些东西。此时,线程将控制权让给计划同时运行的任何其他线程。两种语言都是有限制的确定性的。显然,种子必须相同,但更改任何代码也会导致随机化发生变化。我相信这也包括线程运行的顺序,但我可能错了。

如上所述,您不应在 SystemC 中使用 posix fork/join,因为该库不是线程安全的,还因为它打破了库的假设并引入了非确定性。

因此,只要 SV 代码没有 SC 缺乏的功能,移植就应该很简单。

于 2015-02-18T16:05:18.083 回答