[英]How to get sc_module_name of the current running module
当我创建一个实例 if sc_module
我给它一个字符串作为模块名称( sc_module_name
)。
如何获取当前正在运行的模块的名称?
要获取当前在 systemc 中运行的模块的名称:
使用sc_get_current_process_b
获取当前正在执行的进程(SC 线程或方法)。 然后使用get_parent
获取其父级,即模块。 然后使用basename
或name
获取其名称:
const char* name = sc_core::sc_get_current_process_b()->get_parent()->basename();
(为简洁起见省略了错误处理)
您可以简单地使用 name()
我曾经用它来确定哪个实例在做什么。
如果那不起作用,那是因为您需要 SC_HAS_PROCESS 构造函数而不是 SC_CTOR
不要对构造函数使用内置宏。 使用以下内容,假设模块名称是“counter”:
counter(sc_module_name _name):sc_module(_name)
{
cout << "Creating object " << _name;
}
包含<string>
后,您可以使用_name
执行各种操作。 您可以使用string()
,与+
运算符连接等。
此答案基于此帖子中的回复。
您可以简单地使用sc_object
(所有sc_module的基类name()
提供的方法name()
)来获取该模块的层次名称。
例如,我有一个测试平台tb_adder
,其中包含一个Adder
作为子模块。 然后在sc_main()
函数中(或任何可以访问模块的地方),我可以使用name()
方法来获取每个模块的名称。
源代码:
#include <systemc>
#include <iostream>
SC_MODULE(Adder) {
sc_core::sc_in<bool> clock;
// more ports definition here
void do_work() {
/*do some work here */
}
SC_CTOR(Adder) {
SC_CTHREAD(do_work, clock.pos());
}
};
SC_MODULE(tb_adder) {
sc_core::sc_in<bool> clock;
Adder *dut;
SC_CTOR(tb_adder) {
dut = new Adder("adder");
dut->clock(clock);
}
};
int sc_main(int argc, char* argv[]) {
sc_core::sc_clock clock ("my_clock", 1, 0.5);
tb_adder tb("tb_adder");
tb.clock(clock);
std::cout << "The name of the tb is: " << tb.name() << std::endl;
std::cout << "The name of the adder is: " << tb.dut->name() << std::endl;
return 0;
}
输出:
The name of the tb is: cool_tb_adder
The name of the adder is: cool_tb_adder.fun_adder
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.