繁体   English   中英

如何获取当前运行模块的 sc_module_name

[英]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获取其父级,即模块。 然后使用basenamename获取其名称:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM