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

时间:2019-04-22 16:40:38

标签: systemc

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

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

我尝试在退出之前调用sc_stop,并且通常会收到有关调用纯虚拟方法的错误(我相信那是end_of_simulation,我尚未定义...。但这应该是可选的,对吧?)。 / p>

我看到的唯一影响过程退出代码的方法是更改​​sc_main的return语句,但是当我所有的动作都在某个对象的构造函数创建的SC_THREAD中发生时,那是不可行的(如果不是很明显,我真的不了解SystemC的工作原理,可能是因为假设我们了解模拟的阻塞,而不是像Verilog那样,所有隐藏的动作都带有我们看不见的秘密类,而Verilog相反/非阻塞)。

SC_THREAD是否可以将一些故障信息传递给sc_main?

注意:我使用的是商业仿真工具,而不是纯C ++。可能有一个实现错误。我正在尝试使我们的纯C ++编译器运行,但它似乎已经崩溃了一段时间(我不负责SystemC模型)。

1 个答案:

答案 0 :(得分:0)

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

return(test_module.exit_code);

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