スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SystemC 2.3 : sc_vector

SystemC-2.3(IEEE1666-2011)から追加された「sc_vector」を書いてみました。
sc_vector は、モジュールや信号について記述することができます。


ポート信号に対して

  • サンプルコード
  •  1|#include <systemc.h>
     2|
     3|SC_MODULE( hoge ){
     4|
     5|  sc_vector<sc_in<bool> > in;
     6|
     7|  void m_process();
     8|
     9|  SC_CTOR( hoge ):
    10|    in("in"4)
    11|  {
    12|    SC_METHOD( m_process);
    13|      sensitive << in[0] << in[1] << in[2] << in[3];
    14|      dont_initialize();
    15|  }
    16|};
    17|
    18|void hoge::m_process(){
    19|  for(unsigned int i=0; i < in.size(); i++) {
    20|    bool tmp = in[i].read();
    21|    printf("in[%d] = %d\n", i, tmp);
    22|  }
    23|}
    24|
    25|int sc_main(int argc, char* argv[])
    26|{
    27|  sc_vector<sc_signal<bool> > signals;
    28|  signals.init(4); // [3:0]
    29|
    30|  hoge mhoge("mhoge");
    31|  mhoge.in.bind(signals);
    32|
    33|  for(unsigned int i=0; i < signals.size(); i++) {
    34|    signals[i] = i & 0x1;
    35|  }
    36|  sc_start(1SC_NS);
    37|
    38|  return 0;
    39|}
  • 実行結果
  •              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
    


モジュールに対して

  • サンプルコード
  •  1|#include <systemc.h>
     2|
     3|SC_MODULE( hoge ){
     4|
     5|  sc_in<bool> in;
     6|
     7|  void m_process();
     8|
     9|  SC_CTOR( hoge ):
    10|    in("in")
    11|  {
    12|    SC_METHOD( m_process);
    13|      sensitive << in;
    14|      dont_initialize();
    15|  }
    16|};
    17|
    18|void hoge::m_process(){
    19|  bool tmp = in.read();
    20|  printf("%s.in = %d\n", name(), tmp);
    21|}
    22|
    23|int sc_main(int argc, char* argv[])
    24|{
    25|  sc_vector<sc_signal<bool> > signals;
    26|  signals.init(4); // [3:0]
    27|
    28|  sc_vector<hoge> mhoge("mhoge"4);
    29|  // bind
    30|  for(unsigned int i=0; i < signals.size(); i++) {
    31|    mhoge[i].in.bind(signals[i]);
    32|  }
    33|
    34|  for(unsigned int i=0; i < signals.size(); i++) {
    35|    signals[i] = i & 0x1;
    36|  }
    37|  sc_start(1SC_NS);
    38|
    39|  return 0;
    40|}
  • 実行結果
  •              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(値が変化していない)ために、表示されません。


センシティビティリストへの登録が面倒っぽいけどどうにかならないのかな???

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。