### 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.水平のカーソルは、アクティブなスロット中で時間を割り当てられている命令を表す。

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

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

アクティブなスロットに関する情報はステータスバーに表示されます。 //tablm1[|l(8w)|l|][|l(8w)|l|]{ //kb ステータス 内容 //kb Diagnosis： ストールの原因とそのタイプ //kb Cache： 読み出し／書き込みのミスがあったときに起こるキャッシュメモリのストール //kb System clock： 現在のカーソル位置までに必要としたプロセッサ動作の全時間 //kb //tablm1}

シミュレータによって生成された情報は、＊.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］リージョンにおける命令実行 //table1[|l(8w)|l(26w)|l|][|l(8w)|l(26w)|l|]{ //kb ニーモニック 意味 ＊.simフォーマット //kb IF 命令がフェッチされた F //kb if 命令のダミーフェッチ（前の実際のフェッチでフェッチされたデータのワードアクセスによる） f //kb ID 命令デコード D //kb EX 命令の実行 E //kb EX− 命令の実行（命令が生成したストールを伴う） E //kb MA メモリアクセス M //kb MA− メモリアクセス（命令が生成したストールを伴う） M //kb MAm オンチップのマルチプライヤへのアクセスを伴うメモリアクセス（場合によってこれは前の命令の最後の「mm」とオーバーラップする） M //kb mm マルチプライヤの動作中（ビジー） m //kb WB メモリアクセスの後に、データがレジスタにストアされた（メモリアクセス後のレジスタへのデータの書き戻し） W //kb //table1}

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

各スロットによって蓄積されたCPU時間は、動作終了時にプロセッサの状態を表示するためにハイライトで表示されます。種々の色とニーモニックによって、各フェーズのパイプラインのやりとりが示されます。 ［Pipeline］リージョンのプロセッサ動作 //tablm1[|l(6w)|l|][|l(6w)|l|]{ //kb 色 プロセッサの状態 //kb 黒 OK //kb 赤 ストール //kb 青 キャッシュのミス //kb ピンク ストールとキャッシュのミス //kb //tablm1}

[←] | [INDEX] | [→]