SystemCのシミュレーションスクリプトは、
慣れれば難しくはないのだけれど、
慣れるまで、少し作成に時間がかかるので、
NSLからスケルトンを生成できるようにした。
#include <systemc.h>
#include "inc16.sc"
#include <stdlib.h>
sc_clock m_clock("m_clock",10,0.5,0,false);
sc_signal<bool> p_reset;
sc_signal<sc_uinit<16> > a;
sc_signal<sc_uinit<16> > q;
sc_signal<sc_uint<1> > exe;
inc16 inc16("inc16");
static int ctrl_clock=0;
SC_MODULE (c_clock) {
sc_in<bool> m_clock;
void do_reset() {
ctrl_clock++;
if(ctrl_clock==0) p_reset=1;
if(ctrl_clock==1) p_reset=0
}
SC_CTOR(c_clock) {
SC_METHOD(do_reset);
sensitive << m_clock.pos();
}
};
int sc_main(int argc, char *argv[])
{
int stop;
if(argc>1 && (stop=atoi(argv[1])<=0)) stop=1000;
sc_trace_file *tf = sc_create_vcd_trace_file("inc16");
sc_trace(tf,inc16.p_reset,"inc16.p_reset");
sc_trace(tf,inc16.m_clock,"inc16.m_clock");
sc_trace(tf,inc16.a,"inc16.a");
sc_trace(tf,inc16.q,"inc16.q");
sc_trace(tf,inc16.exe,"inc16.exe");
c_clock cclk("cclk");
cclk.m_clock(m_clock);
inc16.p_reset(p_reset);
inc16.m_clock(m_clock);
inc16.a(a);
inc16.q(q);
inc16.exe(exe);
sc_start(stop, SC_NS);
sc_close_vcd_trace_file(tf)
}