[SystemC] suspend and resume

SystemC 2.3では、Process Controlはかなり拡張されています。
今回は、「suspend & resume」についてです。

  • サンプルコード

  •  1|#include <stdio.h>
     2|#include <systemc.h>
     3|
     4|SC_MODULE( hoge ){
     5|
     6|  sc_event          ev;
     7|  sc_process_handle t;
     8|
     9|  SC_CTOR( hoge )
    10|  {
    11|    SC_THREAD( calling );
    12|    SC_THREAD( target );
    13|    SC_THREAD( tick );
    14|      t = sc_get_current_process_handle();
    15|  }
    16|
    17|  void calling(){
    18|    wait(20SC_NS);
    19|    t.suspend();      // @time 20ns
    20|    wait(20SC_NS);
    21|    t.resume();       // @time 40ns
    22|
    23|    wait(110SC_NS);
    24|    t.suspend();      // @time 150ns
    25|    wait(200SC_NS);
    26|    t.resume();       // @time 350ns
    27|  }
    28|
    29|  void tick(){
    30|     while (1) {
    31|       wait(100SC_NS);
    32|       ev.notify();
    33|     }
    34|  }
    35|
    36|  void target(){
    37|     while (1) {
    38|       wait(ev);
    39|       cout << sc_time_stamp() << endl;
    40|     }
    41|  }
    42|
    43|};
    44|
    45|int sc_main(int argc, char *argv[]) {
    46|
    47|  hoge mhoge("hoge");
    48|  sc_start(500sc_core::SC_NS);
    49|
    50|  return 0;
    51|}
  • 実行結果

  • $> ./main
    
                 SystemC 2.3.0-ASI --- Dec 14 2012 21:01:01
            Copyright (c) 1996-2012 by all Contributors,
            ALL RIGHTS RESERVED
    
    100 ns
    350 ns
    450 ns
    

t:sc_process_handleは tickのものです。
動作としては、@350ns に再開(resume)していることが分かります。


次のように書きなおすとどうでしょうか?
実行すると動作が異なります。


興味ある方は試してくださいな♪

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

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

カレンダー
10 | 2017/11 | 12
- - - 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
アクセス人数