ためになるホームページ お問い合わせ




TOP > SystemC > カウンターを作ろう
カウンターを作ろう
早速、2進数のカウンターを作ってみましょう。
カウンターはクロックと同期しているものとします。クロックの立ち上がり時に0か1を出力をします。また、リセット信号がLOWの時はリセットを行います。

カウンターの例

#include "systemc.h"

SC_MODULE(COUNTER)
{
  //入出力ポートの定義
  sc_in_clk CLK;
  sc_in RST;
  sc_out D;

  //プロセスの宣言
  void COUNTER_Proc(void);

  //コンストラクター
  SC_CTOR(COUNTER)
  {
    //プロセスの型を宣言
    SC_CTHREAD(COUNTER_Proc, CLK.pos);
  }
};

void COUNTER::COUNTER_Proc(void)
{
  while(1)
  {
    if(RST.read() == 0x0)
    {
      D.write(0x0);
    }
    else
    {
      D.write(!D.read());
    }
  }
  return;
}


int sc_main(int argc, char* argv[])
{
  sc_clk CLK("CLK", 15, SC_NS, 0.5, 0, SC_NS, flase); ///<クロック信号生成
  sc_signal<bool> RST;                                ///<リセット信号の生成
  sc_signal<bool> D;                                  ///<出力信号

  //モジュールインスタンス生成
  COUNTER count("counter");

  //各ポートの接続
  count.CLK(CLK);
  count.RST(RST);
  count.D(D);

  //トレースファイル関連
  sc_trace_file *trace_f;
  trace_f = sc_create_vcd_trace_file("COUNTER");
  ((vcd_trace_file *)trace_f)-> sc_set_vcd_time_unit(-9);
  sc_trace(trace_f, CLK, "CLK");
  sc_trace(trace_f, RST, "RST");
  sc_trace(trace_f, D, "D");
  sc_initialize();

  RST = false;
  sc_start(10, SC_NS);
  RST = true;
  sc_start(1000, SC_NS);

  sc_close_trace_file(trace_f);
  return 0;
}





Copyright 2007 ためになるホームページ All Rights Reserved.