SystemC - 如何获取sc_signal连接的模块名称?

时间:2016-10-10 14:11:05

标签: systemc

我想打印出与sc_signal连接的sc_module的名称。

如何从“sig_out”获取以下代码中的模块名称“module_a”?

#include "systemc.h"

class sig_if : virtual public sc_interface
{
};

class my_sig : public sc_module, public sig_if
{
public:
    my_sig(sc_module_name nm) : sc_module(nm)
    {
    }
};

SC_MODULE(test_module)
{
    sc_port<sig_if> out;

    SC_CTOR(test_module)
    {
    }
};

int sc_main(int argc, char* argv[]) {

    test_module module_a("module_a");
    my_sig sig_out("sig_out");

    module_a.out(sig_out);
    // std::cout << sig_out.get_parent() << std::endl;

    sc_start();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以覆盖preferredContentSize类中的sc_interface::register_port()以保存对绑定端口的引用。绑定端口的父节点是包含端口的模块。

my_sig

上面的代码打印出#include <iostream> #include <cassert> #include "systemc.h" class sig_if : virtual public sc_interface { }; class my_sig : public sc_module, public sig_if { public: my_sig(sc_module_name nm) : sc_module(nm), bound_port(NULL) { } void register_port(sc_port_base& port, const char*) { bound_port = &port; } sc_object* get_bound_module() const { assert(bound_port); return bound_port->get_parent_object(); }; sc_port_base* bound_port; }; SC_MODULE(test_module) { sc_port<sig_if> out; SC_CTOR(test_module) { } }; int sc_main(int argc, char* argv[]) { test_module module_a("module_a"); my_sig sig_out("sig_out"); module_a.out(sig_out); sc_start(0, SC_NS); std::cout << sig_out.get_bound_module()->name() << std::endl; return 0; } 的名称。请注意module_a只能在详细说明后调用,也就是说,在sig::get_bound_module()被调用之后,因为sc_start()仅在详细说明期间被调用。