【问题标题】:How do I stop a SystemC simulation, from a CTHREAD, and terminate the simulation with a specific exit code?如何从 CTHREAD 停止 SystemC 模拟,并使用特定的退出代码终止模拟?
【发布时间】:2019-04-22 16:40:37
【问题描述】:

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

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

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

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

有没有办法让 SC_THREAD 将一些失败信息传递给 sc_main?

注意:我使用的是商业模拟工具,而不是纯 C++。那里可能存在实现错误。我正在尝试让我们的纯 C++ 编译运行,但它似乎在不久前就坏了(我不负责 SystemC 模型)。

【问题讨论】:

    标签: systemc


    【解决方案1】:

    答案当然是让 sc_main 通过直接进入它实例化的模块来获取其返回值:

    return(test_module.exit_code);
    

    我需要记住,我们仍在运行 C++,并且基本的 C++ 规则适用,所以这是可能的。在我的硬件设计头脑中,我正在分离与它们实际存在的类没有联系的模块和线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多