SC_CTHREAD 中的时钟类型
Clock type in SC_CTHREAD
我读到 SC_CTHREAD
仅适用于 bool
,例如:
SC_MODULE(my_module){
sc_in<bool> clk;
// ...
void foo();
// ...
SC_CTOR(my_module){
SC_CTHREAD(foo, clk.pos());
}
}
但是如果我的模块中有 sc_in_clk clk
怎么办,就像在这个例子中:http://www.asic-world.com/systemc/process3.html?在这样的模拟之后,函数的结果没有被计算出来,所以我使用 SC_METHOD(foo); sensitive << clk.pos();
.
我的问题是:如何同时使用 sc_in_clk
类型和 SC_CTHREAD
类型?我需要以某种方式将 clk 转换为 bool 吗?
是的,您可以同时使用它们,因为 sc_in_clk
只是 sc_in<bool>
的类型定义。这意味着使用 sc_in_clk
或 sc_in<bool>
与 SC_CTHREAD
无关紧要。
来自文档:
typedef sc_in<bool> sc_in_clk;
The typedef sc_in_clk is provided for convenience when adding clock inputs to a module and for backward compatibility with earlier versions of SystemC. An application may use sc_in_clk or sc_in< bool > interchangeably.
我试图在我自己的环境 (SystemC 2.3.2) 中重现您的问题。根据您发布的代码片段,我创建了这个小型 SystemC 程序:
#include <systemc.h>
SC_MODULE(my_module)
{
sc_in_clk clk;
void foo();
SC_CTOR(my_module)
{
SC_CTHREAD(foo, clk.pos());
}
};
void my_module::foo()
{
while(1)
{
cout << sc_time_stamp() << endl;
wait();
}
}
my_module *DUT;
int sc_main(int argc, char** argv){
sc_clock clk("clk", 10, SC_NS);
DUT = new my_module("my_module");
DUT->clk(clk);
sc_start(50, SC_NS);
return 0;
}
此代码按预期工作,输出为:
0 s
10 ns
20 ns
30 ns
40 ns
您可以尝试将您的代码结构与上述程序的结构相匹配,以找出您的代码中潜在的其他错误。
你的 void foo()
的结构是什么?它是否包含 void wait();
或 void wait(int);
以外的任何形式的等待函数?因为一个时钟线程进程可能只会调用这两种形式的wait。
我读到 SC_CTHREAD
仅适用于 bool
,例如:
SC_MODULE(my_module){
sc_in<bool> clk;
// ...
void foo();
// ...
SC_CTOR(my_module){
SC_CTHREAD(foo, clk.pos());
}
}
但是如果我的模块中有 sc_in_clk clk
怎么办,就像在这个例子中:http://www.asic-world.com/systemc/process3.html?在这样的模拟之后,函数的结果没有被计算出来,所以我使用 SC_METHOD(foo); sensitive << clk.pos();
.
我的问题是:如何同时使用 sc_in_clk
类型和 SC_CTHREAD
类型?我需要以某种方式将 clk 转换为 bool 吗?
是的,您可以同时使用它们,因为 sc_in_clk
只是 sc_in<bool>
的类型定义。这意味着使用 sc_in_clk
或 sc_in<bool>
与 SC_CTHREAD
无关紧要。
来自文档:
typedef sc_in<bool> sc_in_clk;
The typedef sc_in_clk is provided for convenience when adding clock inputs to a module and for backward compatibility with earlier versions of SystemC. An application may use sc_in_clk or sc_in< bool > interchangeably.
我试图在我自己的环境 (SystemC 2.3.2) 中重现您的问题。根据您发布的代码片段,我创建了这个小型 SystemC 程序:
#include <systemc.h>
SC_MODULE(my_module)
{
sc_in_clk clk;
void foo();
SC_CTOR(my_module)
{
SC_CTHREAD(foo, clk.pos());
}
};
void my_module::foo()
{
while(1)
{
cout << sc_time_stamp() << endl;
wait();
}
}
my_module *DUT;
int sc_main(int argc, char** argv){
sc_clock clk("clk", 10, SC_NS);
DUT = new my_module("my_module");
DUT->clk(clk);
sc_start(50, SC_NS);
return 0;
}
此代码按预期工作,输出为:
0 s
10 ns
20 ns
30 ns
40 ns
您可以尝试将您的代码结构与上述程序的结构相匹配,以找出您的代码中潜在的其他错误。
你的 void foo()
的结构是什么?它是否包含 void wait();
或 void wait(int);
以外的任何形式的等待函数?因为一个时钟线程进程可能只会调用这两种形式的wait。