#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;
}