sc_main 実行引数を取得(sc_argc, sc_argv)

C/C++の mainと同じですが、以下のように実行時の引数を取得することができます。

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

  printf("argc = %d\n", argc);
  for (int i = 0; i < argc; i++) {
    printf("argv[%d] = %s\n", i, argv[i]);
  }

  return 0;
}

実行すると

$> ./main hoge test sample

             SystemC 2.3.0-ASI --- Jul 13 2012 06:33:43
        Copyright (c) 1996-2012 by all Contributors,
        ALL RIGHTS RESERVED

argc = 4
argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main
argv[1] = hoge
argv[2] = test
argv[3] = sample

という感じに実行されます。
更に、SystemCでは以下の関数が用意されており、
これらの関数を使うと下の階層でも引数を使うことができます。

int sc_argc();
const char * const * sc_argv();


- サンプルコード

#include <systemc.h>

SC_MODULE (hogehoge) {
  sc_in<bool> clock;

  const char* const* _argv;

  void process() {
    _argv = sc_argv();
    while (true) {
      wait();

      printf("Instance:%s sc_argc = %d\n", name(), sc_argc());
      for (int i = 0; i < sc_argc(); i++) {
        printf("Instance:%s sc_argv[%d] = %s\n", name(), i, _argv[i]);
      }
    }
  }

  SC_CTOR(hogehoge) {
    SC_CTHREAD(process,clock.pos());
  }
}; 

SC_MODULE (hoge) {
  sc_in<bool> clock;

  const char* const* _argv;
  hogehoge mhogehoge;

  void process() {
    _argv = sc_argv();
    while (true) {
      wait();

      printf("Instance:%s sc_argc = %d\n", name(), sc_argc());
      for (int i = 0; i < sc_argc(); i++) {
        printf("Instance:%s sc_argv[%d] = %s\n", name(), i, _argv[i]);
      }
    }
  }

  SC_CTOR(hoge)
    : mhogehoge("mhogehoge")
  {
    SC_CTHREAD(process,clock.pos());
    mhogehoge.clock(clock);
  }
}; 

int sc_main (int argc, char* argv[]) {
  sc_clock clock ("clock",1,SC_NS);

  printf("argc = %d\n", argc);
  for (int i = 0; i < argc; i++) {
    printf("argv[%d] = %s\n", i, argv[i]);
  }

  hoge sample("sample");
  sample.clock(clock);

  sc_start(2, SC_NS);

  return 0;
}
  • 実行結果
$> ./main hoge test sample

             SystemC 2.3.0-ASI --- Jul 13 2012 06:33:43
        Copyright (c) 1996-2012 by all Contributors,
        ALL RIGHTS RESERVED

argc = 4
argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main
argv[1] = hoge
argv[2] = test
argv[3] = sample
Instance:sample.mhogehoge sc_argc = 4
Instance:sample.mhogehoge sc_argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main
Instance:sample.mhogehoge sc_argv[1] = hoge
Instance:sample.mhogehoge sc_argv[2] = test
Instance:sample.mhogehoge sc_argv[3] = sample
Instance:sample sc_argc = 4
Instance:sample sc_argv[0] = /home/kocha/systemc/sc_arg/.libs/lt-main
Instance:sample sc_argv[1] = hoge
Instance:sample sc_argv[2] = test
Instance:sample sc_argv[3] = sample