SystemC 2.3 : sc_vector
SystemC-2.3(IEEE1666-2011)から追加された「sc_vector」を書いてみました。
sc_vector は、モジュールや信号について記述することができます。
ポート信号に対して
- サンプルコード
#include <systemc.h> SC_MODULE( hoge ){ sc_vector<sc_in<bool> > in; void m_process(); SC_CTOR( hoge ): in("in", 4) { SC_METHOD( m_process); sensitive << in[0] << in[1] << in[2] << in[3]; dont_initialize(); } }; void hoge::m_process(){ for(unsigned int i=0; i < in.size(); i++) { bool tmp = in[i].read(); printf("in[%d] = %d\n", i, tmp); } } int sc_main(int argc, char* argv[]) { sc_vector<sc_signal<bool> > signals; signals.init(4); // [3:0] hoge mhoge("mhoge"); mhoge.in.bind(signals); for(unsigned int i=0; i < signals.size(); i++) { signals[i] = i & 0x1; } sc_start(1, SC_NS); return 0; }
- 実行結果
SystemC 2.3.0-ASI --- Dec 14 2012 21:01:01 Copyright (c) 1996-2012 by all Contributors, ALL RIGHTS RESERVED in[0] = 0 in[1] = 1 in[2] = 0 in[3] = 1
モジュールに対して
- サンプルコード
#include <systemc.h> SC_MODULE( hoge ){ sc_in<bool> in; void m_process(); SC_CTOR( hoge ): in("in") { SC_METHOD( m_process); sensitive << in; dont_initialize(); } }; void hoge::m_process(){ bool tmp = in.read(); printf("%s.in = %d\n", name(), tmp); } int sc_main(int argc, char* argv[]) { sc_vector<sc_signal<bool> > signals; signals.init(4); // [3:0] sc_vector<hoge> mhoge("mhoge", 4); // bind for(unsigned int i=0; i < signals.size(); i++) { mhoge[i].in.bind(signals[i]); } for(unsigned int i=0; i < signals.size(); i++) { signals[i] = i & 0x1; } sc_start(1, SC_NS); return 0; }
- 実行結果
SystemC 2.3.0-ASI --- Dec 14 2012 21:01:01 Copyright (c) 1996-2012 by all Contributors, ALL RIGHTS RESERVED mhoge_1.in = 1 mhoge_3.in = 1
ここでは、mhoge_2/4は 0(値が変化していない)ために、表示されません。
センシティビティリストへの登録が面倒っぽいけどどうにかならないのかな???