SystemC:初期化リストを記述するようにしよう

前回 name()関数使ってますか? 紹介した際に、信号名の表示が Port_xになってます。
これを宣言した変数名と同じ名前にするにはどうすればいいか?
解決策としては、コンストラクタの初期化リストに記載することです。

参考:ロベールのC++教室 - 第22章 メンバ定数 -

  • サンプルコード
SC_MODULE (hoge) {
  sc_in<bool>         clock;
  sc_in<bool>         reset;
  sc_in<sc_uint<8> >  indata;
  sc_out<sc_uint<8> > outdata;

  void process() {
    outdata.write(0);
    wait();

    while (true) {
      wait();
      printf("Instance Name:%s\n", name());
      printf("Port(clock  ) Name:%s\n", clock.name());
      printf("Port(reset  ) Name:%s\n", reset.name());
      printf("Port(indata ) Name:%s\n", indata.name());
      printf("Port(outdata) Name:%s\n", outdata.name());
    }
  }

  SC_CTOR(hoge) :
    ///////////////////////////////
    clock("clock")
    , reset("reset")
    , indata("indata")
    , outdata("outdata")
    ///////////////////////////////
  {
    SC_CTHREAD(process,clock.pos());
      reset_signal_is(reset, false);
  }
}; 
  • 実行結果
Instance Name:uhoge
Port(clock  ) Name:uhoge.clock
Port(reset  ) Name:uhoge.reset
Port(indata ) Name:uhoge.indata
Port(outdata) Name:uhoge.outdata

というように、変数名と同じ名前で表示されるようになりました。
書かなくても問題ないのですが、このように明示的になります。
これは、SystemCをサポートしているシミュレータにて波形表示される際の
表示形式にも適用されるので、積極的に書きましょう。