SystemC:SC_THREAD 未启动

SystemC: SC_THREAD does not start

我的简单 "HelloWorld" 程序不起作用。程序打印通常的 SystemC 版权声明,但不打印 "Hello World" 字符串)。

如果我使用 SC_METHOD 编写类似的程序(删除 wait 调用),我可以看到打印的消息。

这是什么原因造成的?

    #include <iostream>
    #include "systemc.h"

    SC_MODULE(stim)
    {
        sc_in<bool> Clk;

        void StimGen()
        {
            cout << "Hello World!\n";
            wait();
            cout << "Hello again, world!\n";
            wait();
        }
        SC_CTOR(stim)
        {
            SC_THREAD(StimGen);
            sensitive << Clk.pos();
        }
    };


    int sc_main(int argc, char* argv[])
    {
        sc_clock TestClk("clk", 10,SC_NS);

        stim Stim1("Stimulus");
        Stim1.Clk(TestClk);

        sc_start();  // run forever

        return 0;

    }

我在 OS X 上使用 SystemC 2.3.1(来自 Accellera)和 Clang 6.0 时,您的代码工作正常 X:我看到两个 hello 打印都来自线程进程。

$ ./main
        SystemC 2.3.1-Accellera --- Nov 29 2014 15:29:06
        Copyright (c) 1996-2014 by all Contributors,
        ALL RIGHTS RESERVED
Hello World!
Hello again, world!

我不确定为什么您会看到不同的行为。可能是您主机 OS 中的某种 IO 缓冲行为?您可以尝试将 sc_start() 行更改为 sc_start(20, SC_NS) 到 运行 一段时间。

你的代码对我来说也很好用。 也许尝试刷新标准输出的输出缓冲区? 使用 endl 而不是 '\n' 或 cout << flush

在安装 SystemC 库时,使用 --enable-pthreads 选项进行编译。这将解决您的问题。