如何从 CTHREAD 停止 SystemC 模拟,并使用特定的退出代码终止模拟?

How do I stop a SystemC simulation, from a CTHREAD, and terminate the simulation with a specific exit code?

我有一个 SystemC 测试台(用于 VHDL DUT,但现在不相关)。我希望能够使测试从 SC_CTHREAD 中以特定的退出代码终止。我是 SystemC 的新手(我主要是 verilog/sv 人)。

我试过简单地包含 "exit(error_code)" 但是虽然这会终止模拟,但最终的退出代码来自我的 sc_main 的 return 语句。我想这是有道理的,因为 "exit" 可能会使用该退出代码终止单独的线程,但不会终止 sc_main 线程。

我试过在该退出之前调用 sc_stop,但通常会收到关于调用纯虚方法的错误(我相信那是 end_of_simulation,我还没有定义它....但是那应该是可选的,对吧?)。

我认为影响进程退出代码的唯一方法是更改​​ sc_main 的 return 语句,但是当我的所有操作都发生在SC_THREAD 由某处对象的构造函数创建(如果不是很明显,我真的不明白 SystemC 是如何工作的,可能是因为有很多隐藏的秘密操作 类 我们不能看,与 verilog 不同,verilog 中只有模拟顺序,假设您理解 blocking/non-blocking).

有没有办法让 SC_THREAD 将一些故障信息传递到 sc_main?

注意:我是运行商业模拟工具,不是纯C++。那里可能存在实施错误。我正在尝试让我们的纯 C++ 编译 运行 但它似乎已经坏了一段时间(我不负责 SystemC 模型)。

答案当然是让 sc_main 通过直接进入它实例化的模块以获取其成员变量来获取其 return 值:

return(test_module.exit_code);

我需要记住我们仍然是 运行 C++ 并且基本的 C++ 规则适用,所以这是可能的。在我的硬件设计思想中,我正在剥离与它们实际存在的 类 无关的模块和线程。