systemc - 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
type 和SC_CTHREAD
两者?我需要以某种方式将 clk 转换为 bool 吗?
解决方案
是的,您可以同时使用它,因为sc_in_clk
它只是sc_in<bool>
. sc_in_clk
这意味着无论您使用还是sc_in<bool>
with都无关紧要SC_CTHREAD
。
从文档中:
typedef sc_in<bool> sc_in_clk;
提供typedef sc_in_clk是为了方便将时钟输入添加到模块并向后兼容早期版本的 SystemC。应用程序可以互换使用sc_in_clk或sc_in<bool>。
我试图在我自己的环境(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();
除了or之外,它是否包含任何形式的等待功能void wait(int);
?因为一个时钟线程进程可能只调用这两种形式的等待。
推荐阅读
- javascript - 将 React Bootstrap 表单附加到 div
- c# - 如何在 VS2019 中从 .NET Core 3.1 控制台应用程序连接到 Azure 文件存储
- android - TIdCompressorZLib 在为 Android 编译的 FireMonkey 应用程序中不起作用
- node.js - 如何使用外键数组在没有 _id 的猫鼬中填充?
- regex - 从 fasta 文件中删除标题
- woocommerce - 在 Woocommerce 中删除购物车小计
- css - 我的网站无法滚动,我该怎么办?
- python - 根据所选单选按钮配置链接到站点的按钮
- typescript - 克隆和安装涉及打字稿`@types`的项目的正确方法是什么?
- python - 用什么替换 wx.PyLog?