system-verilog - SystemVerilog fork/join w/ "run()"类型函数和 SystemC

标签 system-verilog fork-join systemc

我正在尝试将内存 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/

相关文章:

verilog - 使用串联和大小写时,移位器输出始终为 0

verilog - Verilog/SV中是否有类似casex的ifx-elsex语句?

oop - 类的对象在其类结束类定义中的含义是什么?

java - 通过 DnC 计算阶乘

c++ - 开箱即用的 SystemC IDE,无需为 windows 和 mac 编译 lib?

C++:模板类的Typedef

syntax - 如何忽略模块实例化的一个或多个输出总线引脚

RxJS 将数组映射到可观察对象并返回到数组中的普通对象

systemc - SC_CTHREAD 中的时钟类型

多核世界中的 Java Fork/Join 与多线程