next up previous contents
Next: void sim_main(void) Up: 新しいシミュレータの実装 Previous: 新しいシミュレータの実装

void initialize(unsigned int, int)

システムを構成するモジュールを表すクラスのインスタンス生成や、 それらの接続を行う。

 1:   void
 2:   isim_system::initialize(unsigned int punum, int portnum)
 3:   {
 4:       soo.resize(punum);
 5:       shared_mem_isis.set_top(0x80000000);
 6:       shared_mem_isis.resize(0x7fffffff);
 7:       shmem.connect_mem(shared_mem_isis);
 8:       shbus.set_each_pu_port_num(portnum);
 9:       shbus.set_num_of_pu_port(portnum*punum);
10:       shmem.ref_shbus_port().connect(shbus.ref_mm_port());
11:       for ( unsigned int i = 0; i < punum; i++ ) {
12:           soo[i].set_puid(i);
13:           soo[i].set_punum(punum);
14:           soo[i].set_punum(portnum);
15:           for ( int p = 0; p < portnum; p++ ) {
16:               shbus.ref_to_pu_port(i*portnum+p).connect(soo[i].ref_to_pu_
      port(p));
17:               shbus.ref_from_pu_port(i*portnum+p).connect(soo[i].ref_from
      _pu_port(p));
18:       }        
19:   }

サンプルコードに沿って、システムが構成される流れを示す。

2:
引数としてプロセッサ数とポート数を受け取る
4:
isim_processorクラスのインスタンス sooの数を指定されたプロセッサ数分にする
5:
mapped_memoryクラス(ISISが提供するメモリ)の インスタンスshared_mem_isisの先頭アドレスを 0x80000000に設定する
6:
shared_mem_isisのサイズを0x7fffffffに 設定する(終端アドレス = 0xffffffff)
7:
shmemがアクセスするメモリを shared_mem_isisに設定する
8:
shbussooのポート数を通知する
9:
shbussoo側のポートを生成
10:
shmemのshbus_portshbusのmm_portを接続する
12:
sooにプロセッサIDを割り振る
13:
sooにシステム上のsoo数を通知する
14:
sooが外部と通信するためのポート数を 指定された数にする
16:
shbusのto_pu_portsooのincoming_portを 接続する
17:
shbusのfrom_pu_portsooのoutgoing_portを 接続する

以上のコードにより、図7.1のようなシステムが構築される。

図 7.1: 上記コードによって構築されるシステム
\includegraphics[scale=0.8]{sample_detail.eps}



next up previous contents
Next: void sim_main(void) Up: 新しいシミュレータの実装 Previous: 新しいシミュレータの実装
Toshiya Minai
平成17年2月1日