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
选项进行编译。这将解决您的问题。
我的简单 "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
选项进行编译。这将解决您的问题。