SystemC:SC_THREAD无法启动

时间:2015-03-15 17:18:13

标签: systemc

我的简单" 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;

    }

3 个答案:

答案 0 :(得分:1)

使用SystemC 2.3.1(来自Accellera)和OS X上的Clang 6.0,您的代码可以正常使用我:我看到两个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!

我不确定你为什么会看到不同的行为。它可能是您主机操作系统中的某种IO缓冲行为吗?您可以尝试将sc_start()行更改为sc_start(20, SC_NS)以运行有限的时间。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您的代码也适用于我。 也许尝试刷新stdout的输出缓冲区? 使用endl而不是'\ n'或cout << flush