### 6-4　Dev.Boxのシミュレーション

シミュレータは、Dev.BoxのSH4プロセッサの動作を自分のコンピュータ上でシミュレーションするものです。［Memory］リージョンと［Register］リージョンについては実際のDev.Boxを使用します。

［Simulator］リージョンでシングルステップを行うと、カーソルはパイプライン中で現在実行されている命令を指します。シミュレーションの間、PCは現在の命令の先にある命令をフェッチします。

プログラムのフローの変化によって実行されない命令もあります。たとえば、ブランチの後にある命令などです。

CodeScapeの他のリージョンでシングルステップすると、カーソルはPC（program counter）の位置に表示されます。

#### 6-4-1　シミュレータによって生成される情報

プロジェクトをシミュレーションすると、各命令がシミュレーション スロット（時間）中に実行されます。シミュレータが進むに従い、このパイプライン動作の次の情報がそのリージョンに表示されます。

- ソースコードのメモリ中のアドレス
- 各命令のOpコード
- メモリのあるアドレスの各命令を実行するのに必要なCPU時間
- 各命令のOpコードの逆アセンブル
- パイプライン動作の各ステージのスロット情報
  1. 縦のカーソルは、各スロットの命令を実行するのにプロセッサが必要とする時間を表す。
  2. 水平のカーソルは、アクティブなスロット中で時間を割り当てられている命令を表す。
- プロセッサのステータス情報

#### プロセッサのステータス情報

アクティブなスロットに関する情報はステータスバーに表示されます。

ステータス | 内容
Diagnosis： | ストールの原因とそのタイプ
Cache： | 読み出し／書き込みのミスがあったときに起こるキャッシュメモリのストール
System clock： | 現在のカーソル位置までに必要としたプロセッサ動作の全時間

シミュレータによって生成された情報は、＊.simという拡張子でコンフィギュレーション ファイルに保存できます。

#### 実行時間

実行時間は、ある命令の「ex（実行）」フェーズの開始から次の命令の「ex」フェーズの開始までに積算されたCPU時間です。

#### パイプラインのやりとり

シミュレータは、パイプラインのあるステージで命令の機能を評価します。 次の命令は、r0に保存されたアドレスから32ビット読み出し、次にその結果をr3にセットするように、プロセッサに指示します。

mov. L＠r0， r3

命令がシミュレートされたスロット（時間）中に実行されると、次の命令ステージがシミュレートされたパイプラインに表示されます：

IF | ID | EX | MA | WB

この命令の実行中に次の操作が行われます。

- IFステージに命令のopコードがメモリから読み出されます。
- IDステージに命令がデコードされます。
- EXステージに命令の実行が開始され、r0の内容が読み出されます。
- MAステージにr0の指すメモリがアクセスされ、その値がデータ バスに保存されます。
- WBステージにデータ バスに保存された値が、r3の指すメモリに書き込まれます。

［Pipeline］リージョンにおける命令実行

#### プロセッサの動作

各スロットによって蓄積されたCPU時間は、動作終了時にプロセッサの状態を表示するためにハイライトで表示されます。種々の色とニーモニックによって、各フェーズのパイプラインのやりとりが示されます。 ［Pipeline］リージョンのプロセッサ動作

#### 6-4-2　パイプラインのストール

ある命令からのステージが、前または後の命令のステージと競合状態にある時にストールが発生します。これによりパイプラインの動作が遅くなります。シミュレーションによりプロセッサのパイプラインにストールが表示されることがあります。次のいずれかの方法でストールを除去します。

- 命令順によるストールを取り除くには、命令の順序を変えます。
- 命令の整列によるストールを取り除くには、メモリの命令アドレスを移動します。

命令ステージと実行状態の競合に関する詳細については、日立7091シリーズのプログラミングマニュアルを参照してください。

パイプライン命令のストールに関する詳細については、日立7091シリーズのプログラミングマニュアルを参照してください。

#### 6-4-3　シミュレーションの結果を読む

シミュレータは、プログラムシミュレーション中の各アセンブラ命令のパイプライン動作に関する情報を生成します。プロセッサパフォーマンスの低下は、すべて［Simulator］リージョンに示す結果に現れます。シミュレーション結果を印刷することもできます（シミュレーションの結果の読み方の例については、シミュレータのチュートリアルを参照してください）。

[←] | [INDEX] | [→]