bambooflow Note

elaborate

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

SystemCのエラボレーション・フェーズ



説明

エラボレーション・フェーズは、シミュレーション開始前のフェーズ。
ここでは、つぎの作業をしている
  • データ構造の初期化
  • 接続関係の構築
    • もし、sc_in<>、sc_out<>等が接続されていない場合エラーを出力する
  • 次の実行フェーズの前処理(end_of_elaboration)

SystemCでは3つのフェーズが存在する。
  1. エラボレーション・フェーズ
  2. 実行フェーズ
  3. クリーンアップ・フェーズ

sc_start()が実行されると、まずエラボレーション・フェーズにはいる。
シミュレーションは実行フェーズである。
sc_start()から抜けるとクリーンアップ・フェーズにはいる。

sc_moduleには、次の4つのvirtual関数が存在する。
  1. before_end_of_elaboration
  2. end_of_elaboration
  3. start_of_simulation
  4. end_of_simulation
どのような順番で呼ばれるのか気になったので実験してみた。

実験

  • main.cpp
#include <systemc.h>
#include "mod.h"

int sc_main( int argc, char* argv[] )
{
    MOD *mod;
 
    printf("main::begin\n");
 
    mod = new MOD( "mod" );
 
    printf( "main::exec sc_start\n" );
    sc_start( -1 );
 
    printf( "main::end\n" );
 
    return 0;
}
 

  • MOD.h
#ifndef __MOD_H
#define __MOD_H
#include <systemc.h>

SC_MODULE( MOD )
{
    SC_CTOR( MOD ) {
        printf( "mod::constructor\n" );
        SC_THREAD( thread_proc );
    }
    ~MOD() {
        printf( "mod::destructor\n" );
    }
    void thread_proc()
    {
        printf( "mod::exec sc_stop\n" );
        sc_stop();
    }
    void before_end_of_elaboration() {
        printf( "mod::before_end_of_elaboration\n" );
    }
    void end_of_elaboration() {
        printf( "mod::end_of_elaboration\n" );
    }
    void start_of_simulation() {
        printf( "mod::start_of_simulation\n" );
    }
    void end_of_simulation() {
        printf( "mod::end_of_simulation\n" );
    }
 
};
 
#endif /* __MOD_H */
 

  • 実行結果
main::begin
mod::consructor
main::exec sc_start
mod::before_end_of_elaboration
mod::end_of_elaboration
mod::start_of_simulation
mod::exec sc_stop
SystemC: simulation stopped by user.
mod::end_of_simulation
main::end

sc_startが実行されると
  1. before_end_of_elaboration()
  2. エラボレーション実行
  3. end_of_elaboration()
  4. start_of_simulation()
  5. シミュレーション開始
という順番で関数が呼ばれる。

sc_stopが実行されると
  1. end_of_simulation
が実行され、sc_start()内の無限ループから抜けてsc_mainへ戻る。

タグ:

SystemC
記事メニュー
目安箱バナー