为SystemC模块定义自定义构造函数

use*_*711 5 c++ systemc

我有一个SystemC模块如下所示,我想将"maps"传递给构造函数.我该怎么做?

struct Detector: sc_module
{
    map <int,int> int_map;

    SC_CTOR(Detector)
    {
        for (int i = 0 ; i<10; i++)
        {
          int_map[i]= map[i][0];
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

例如,我想用4个不同的地图实例化这个模块4次.

小智 7

SystemC语言参考手册:

宏的使用SC_CTOR不是强制性的.使用时SC_CTOR,无法将用户定义的参数添加到构造函数中.如果应用程序需要传递其他参数,则应明确提供构造函数.这是一个有用的编码习语.

因此,我认为你最好不要使用它SC_CTOR.我们公司的SystemC编码风格就是这样推荐的.

但是有一个附带条件:如果您使用进程宏(SC_METHODSC_THREAD),那么您还必须使用SC_HAS_PROCESS.

以下是您所追求的完整示例:

#include <systemc>
#include <map>
#include <vector>

using namespace std;
using namespace sc_core;

struct Detector : public sc_module {

    typedef map<int, vector<int> > input_map_t;

    Detector(sc_module_name name, input_map_t& input_map)
        : sc_module(name)
    {
        for (int i = 0; i < input_map.size(); i++) {
            int_map[i] = input_map[i][0];
        }
        SC_METHOD(process);
    }

    void process() {}

    map<int, int> int_map;
    SC_HAS_PROCESS(Detector);
};

int sc_main(int argc, char *argv[]) {
    Detector::input_map_t input_map;
    for (int i = 0; i < 10; i++) {
        input_map[i] = vector<int>();
        input_map[i].push_back(i);
    }

    Detector d("d", input_map);
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

如果您注释掉该SC_HAS_PROCESS行,您将看到一串编译错误.