如何初始化一个数组的系统端口名称?

时间:2016-02-16 06:11:18

标签: c++ systemc

我想初始化一个端口名称。端口是一个数组,我的代码不起作用。

SC_MODULE(example) {
  sc_clock clk;
  sc_signal<bool> mysignals[2];

 public: 

 SC_CTOR(example)
   :clk("clk"),
    mysignals[0]("mysignals[0]"), // won't work
    mysignals[1]("mysignals[1]") // won't work
      {}

  ~example() {
  }
};

以下代码可以通过为clk提供名称“clk”来实现。但是clk端口不是数组:

SC_MODULE(example) {
  sc_clock clk;

 public: 

 SC_CTOR(example)
   :clk("clk")
      {}

  ~example() {
  }
};

如何命名端口数组?

更新

尝试了建议的评论。仍然行不通:

#include "systemc.h"

SC_MODULE(example) {
  sc_clock clk;
  sc_signal<bool> mysignals[2];

 public: 

  SC_CTOR(example)
    :clk("clk"),
    mysignals{"mysig1", "mysig2"}
  {}

  ~example() {
  }
};

int sc_main(int argc, char* argv[]) {
  example hello("HELLO");

  return(0);
}

编译:

g++ -I. -I<SYSTEMC LIB>/include -L. -L<SYSTEMC LIB>/lib-linux64 -o sim example.cpp -lsystemc -lm -std=c++0x

错误:

  

example.cpp:在构造函数'example :: example(sc_core :: sc_module_name)'中:   example.cpp:11:错误:错误的数组初始化程序

2 个答案:

答案 0 :(得分:1)

我刚刚发送了答案,我记得选项3!使用sc_vector。例如:

SC_MODULE(M){

     static const int SIZE = 4;

     typedef sc_uint<16> DataType;
     typedef sc_in<DataType> PortType;
     typedef sc_vector<PortType> PortVectorType;

     PortVectorType port_vec;

     SC_CTOR(M) : port_vec("my_port", SIZE){
        for(int i = 0; i < SIZE; ++i)
           cout << port_vec[i].basename() << '\n';
    }       
};

int sc_main(int, char**){
   M("m");
   return 0;
}

生成以下输出     my_port_0     my_port_1     my_port_2     my_port_3

答案 1 :(得分:0)

两种选择: 1)创建一个信号数组,让systemc命名它们 2)当我们构造它们时,一个信号指针数组

示例代码:

SC_MODULE(M){

static const int SIZE = 4;

sc_signal<bool> S[SIZE];    //array of signals let sc name them
sc_signal<bool>* P[SIZE];   //array of pointers name on create

SC_CTOR(M){

    for(int i = 0; i < SIZE; ++i)   //new the signals and give them a name
        P[i] = new sc_signal<bool>(("my_sig_" + to_string(i)).c_str());
}

};

int sc_main(int,char **){

M m("m");

for(int i = 0; i < M::SIZE; ++i){
    cout << "S[" << i << "].name = " << m.S[i].basename() << '\n';
    cout << "P[" << i << "].name = " << m.P[i]->basename() << '\n';
}
return 0;

}

在我的机器上生成以下输出

P[0].name = signal_0
P[0].name = my_sig_0
S[1].name = signal_1
P[1].name = my_sig_1
S[0].name = signal_0
P[0].name = my_sig_0
S[1].name = signal_1
P[1].name = my_sig_1
S[2].name = signal_2
P[2].name = my_sig_2
S[3].name = signal_3
P[3].name = my_sig_3