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