(57)【特許請求の範囲】
【請求項１】
シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから命令を読み込んでシミュレーションを実行して実行結果を出力する通常処理モジュールと、前記実行結果のプロファイルを生成するプロファイルモジュールとを備えるコンピュータにより、ハードウェアをモデル化しシミュレーションを実行して実行結果のプロファイルを生成する動作検証シミュレーションの実行方法であって、
前記命令メモリから読み込んだ命令に基づいて前記高速処理モジュールによる高速処理を実行する段階と、前記所定の命令アドレス情報に達すると前記通常処理モジュールによる通常処理に切り替える段階とを含み、
前記通常処理モジュールによる通常処理は、
前記高速処理モジュールによる高速処理に続いてプロファイル生成の開始前にシミュレーションの実行結果によるプロファイル情報を出力しない第１の通常処理を実行する段階と、
その後に前記第１の通常処理の実行結果を用いてシミュレーションを実行して実行結果によるプロファイル情報を出力する第２の通常処理を実行する段階とを含み、
前記第２の通常処理により出力されたプロファイル情報に基づいてプロファイルを生成する、
ことを特徴とする動作検証シミュレーションの実行方法。
【請求項２】
前記第１の通常処理から前記第２の通常処理に移行するタイミングは、シミュレーションのために読み込まれる命令のアドレス情報がプロファイル処理を開始するアドレス情報に到達したときであることを特徴とする請求項１記載の動作検証シミュレーションの実行方法。
【請求項３】
前記高速処理に続いて前記第１の通常処理が実行される場合に、高速処理から前記第１の通常処理に移行するタイミングは、実行した命令のアドレス情報が設定された命令のアドレス情報と一致したときであることを特徴とする請求項１記載の動作検証シミュレーションの実行方法。
【請求項４】
前記高速処理に続いて前記第１の通常処理が実行される場合に、高速処理から前記第１の通常処理に移行するタイミングは、実行した命令のアドレス情報と予め定められた算出の条件とに基づいて定められることを特徴とする請求項１記載の動作検証シミュレーションの実行方法。
【請求項５】
前記高速処理に続いて前記第１の通常処理が実行される場合に、高速処理から前記第１の通常処理に移行するタイミングは、アドレス情報の命令の実行回数に基づいて定められることを特徴とする請求項１記載の動作検証シミュレーションの実行方法。
【請求項６】
シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから命令を読み込んでシミュレーションを実行して実行結果を出力する通常処理モジュールと、前記実行結果のプロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、
前記通常処理モジュールは、前記高速処理モジュールの高速処理に続いて、前記命令メモリから前記開始アドレスよりも読み込み順が前のアドレスの命令を読み込んで実行結果によるプロファイル情報を出力しないシミュレーションを実行する第１の通常処理部と、前記命令メモリから前記開始アドレスからの命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行して実行結果によるプロファイル情報を前記プロファイルモジュールに出力する第２の通常処理部と、
を含むことを特徴とするシミュレーション実行装置。
【請求項７】
シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、
前記命令メモリの前記開始アドレスよりも読み込み順が前のアドレスの設定されている切替条件記憶部を有し、
前記高速処理モジュールは、前記命令メモリから読み込んだ命令のアドレスが前記切替条件記憶部の設定アドレスと一致するとシミュレーションの実行を終了し、
前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて、前記命令メモリの前記設定アドレス以降のアドレスから命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから前記命令を読み込むと前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力する、
ことを特徴とするシミュレーション実行装置。
【請求項８】
シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、
以前のシミュレーションで実行された命令及びそのアドレスが実行順に記憶されている実行順序記憶部と、
該実行順序記憶部から前記開始アドレスを判定し、該開始アドレスよりも順序が前のアドレスに対応する命令からシミュレーション開始の最初の命令までの命令数を算出するモード切替条件算出部を有し、
前記高速処理モジュールは、前記命令メモリから読み込んだ命令の個数が前記算出した命令数と一致するとシミュレーションの実行を終了し、
前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて、前記命令メモリから連続的に以降の命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから命令を読み込むと前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力する、
ことを特徴とするシミュレーション実行装置。
【請求項９】
シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、
前記命令メモリの開始アドレスを検知して該開始アドレスよりも読み込み順が前のアドレスを算出し、該算出したアドレスからの読み込みを前記通常処理モジュールに指示する実行指示手段を有し、
前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて、前記命令メモリの前記指示されたアドレスから順に命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから前記命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力する、
ことを特徴とするシミュレーション実行装置。
【請求項１０】
シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、
過去にプロファイルを得ている場合に前記命令メモリの開始アドレスよりも読み込み順が前のアドレスが切替アドレスとして設定される切替アドレス記憶部と、
過去にプロファイルを得て前記切替アドレス記憶部に切替アドレスが設定されていると前記高速処理モジュールに前記切替アドレスを検知するまで命令に基づくシミュレーションを実行させると共に前記通常処理モジュールに前記切替アドレスの命令からの読み込みを指示し、過去にプロファイルを得ておらず前記切替アドレス記憶部に前記切替アドレスが設定されていないと前記高速処理モジュールに前記開始アドレスを検知するまで命令に基づくシミュレーションを実行させると共に前記切替アドレスを算出して前記切替アドレス記憶部に設定し、かつ該切替アドレスからの読み込みを前記通常処理モジュールに指示する実行指示手段とを含み、
前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて前記切替アドレスの読み込み指示を受けると前記命令メモリから該切替アドレスで示すアドレスから順に命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから前記命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力する、
ことを特徴とするシミュレーション実行装置。
【請求項１１】
コンピュータにシミュレーションを実行させるためのプログラムであって、
前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、
前記命令メモリから前記開始アドレスよりも前の命令を読み込んで切替アドレスを算出すると、前記高速処理に続いて切替アドレス以降の命令を読み込んで実行結果によるプロファイル情報を出力しないシミュレーションを実行する第１の通常処理を行わせる手段と、
該第１の通常処理に続いて前記命令メモリから前記開始アドレスからの命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行して実行結果によるプロファイル情報を出力する第２の通常処理を行わせる手段と、
前記第２の通常処理により出力されたプロファイル情報に基づいてプロファイルを生成させる手段と、
を含むことを特徴とするプログラム。
【請求項１２】
コンピュータにシミュレーションを実行させるためのプログラムであって、
前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、
前記命令メモリの前記開始アドレスよりも読み込み順が前のアドレスを設定させる手段と、
前記命令メモリから読み込んだ命令のアドレスが前記設定アドレスと一致すると前記高速処理のシミュレーションの実行を終了させる手段と、
前記高速処理に続いて、命令メモリの設定アドレス以降のアドレスから命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスから前記命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力する通常処理を行わせる手段と、
前記通常処理により出力されたプロファイル情報に基づいてプロファイルを生成させる手段と、
を含むことを特徴とするプログラム。
【請求項１３】
コンピュータにシミュレーションを実行させるためのプログラムであって、
前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、
以前のシミュレーションで実行された命令及びそのアドレスを実行順に記憶部に記憶させる手段と、
該記憶部の命令から前記開始アドレスを判定させ、該開始アドレスよりも読み込み順が前のアドレスに対応する命令からシミュレーション開始の最初の命令までの命令数を算出させる手段と、
前記命令メモリから読み込んだ命令の個数が前記算出した命令数と一致すると前記高速処理のシミュレーション実行を終了させる手段と、
前記高速処理に続いて、命令メモリの前のアドレス以降の命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスからの命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力する通常処理を行わせる手段と、
前記通常処理により出力されたプロファイル情報に基づいてプロファイルを生成させる手段と、
を含むことを特徴とするプログラム。
【請求項１４】
コンピュータにシミュレーションを実行させるためのプログラムであって、
前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、
前記命令メモリの開始アドレスを検知して前記高速処理のシミュレーションの実行が終了すると前記開始アドレスよりも読み込み順が前のアドレスを算出させ、該算出したアドレスからの読み込みを通常処理に対し指示する手段と、
前記通常処理として、前記命令メモリの指示されたアドレスから順に命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスから命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力させる手段と、
前記プロファイル情報に基づいてプロファイルを生成させる手段と、
を含むことを特徴とするプログラム。
【請求項１５】
コンピュータにシミュレーションを実行させるためのプログラムであって、
前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、
過去にプロファイルを得ていると命令メモリの前記開始アドレスよりも読み込み順が前のアドレスを切替アドレスとして設定する手段と、
過去にプロファイルを得て前記切替アドレスが設定されていると前記高速処理で前記切替アドレスを検知するまで命令に基づくシミュレーションを実行させると共に前記通常処理で前記切替アドレスの命令からシミュレーションを実行させてプロファイル情報を出力させ、
過去にプロファイルを得ておらず前記切替アドレスが設定されていないと高速処理で前記開始アドレスを検知するまでシミュレーションを実行させ、かつ前記切替アドレスを算出させて設定させて高速処理を終了させ、前記通常処理で命令メモリの算出した切替アドレスで示すアドレスから順に命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスから命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力させる手段と、
前記プロファイル情報に基づいてプロファイルを生成させる手段と、
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラム最適化におけるシミュレーションを実行するための動作検証シミュレーションの実行方法及びシミュレーション実行装置並びにプログラムに関する。
【０００２】
【従来の技術】
従来、プリンタやファクシミリ機などの電子装置では、この電子装置に実装されたマイクロコンピュータ（ＣＰＵ）を動作させることなく、ＣＰＵ命令を順次コンピュータや専用装置のシミュレータで「模擬的なシミュレーション」を実行し、その「全体・総合的シミュレーション」を実施している。なお、前記した「模擬的なシミュレーション」は、部分的なシミュレーションであり、適宜「単にシミュレーション、又はシミュレーション実行あるいはシミュレート」と表記する。また、「全体・総合的シミュレーション」は、複数の部分的シミュレーションを実行して形成されたシミュレータとしての全体・総合的なシミュレーションであり、適宜、「動作検証シミュレーション又はシミュレータ動作」と表記する。
このシミュレータでは、ＣＰＵの命令をシミュレーション実行（シミュレート）した、そのメモリアクセスに要する時間を算出するプロファイラがある。このようなシミュレータでは、命令を一つずつ命令メモリから取り出して解析した結果に基づいて順次シミュレーションを実行している。また、プロファイラでは、分岐命令のときのシミュレーション時間の情報を保持している。そして、次の分岐命令のときのシミュレーション時間との差を求めて、この時間に該当する基本ブロックを実行時間としている。
【０００３】
図２０は、従来のＣＰＵシミュレータ全体の概念を示すブロック図である。
図２０において、このシミュレータは、メモリモデル（Ｍｅｍｏｒｙ  Ｍｏｄｅｌ）２０１と、ＣＰＵモデル（ＣＰＵ  Ｍｏｄｅｌ）２０２と、ファームウェアモデル（Ｆｉｒｍｗａｒｅ  Ｍｏｄｅｌ）２０３と、ハードウェアモデル（Ｈａｒｄｗａｒｅ  Ｍｏｄｅｌ）２０４と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）２０５とからなる。ＣＰＵモデル２０２は、ハードウェアモデル２０４からの情報が入力（Ｉｎｐｕｔ）され、また、ハードウェアモデル２０４への実行結果を出力（Ｏｕｔｐｕｔ）する。
【０００４】
このシミュレータ動作における実行モードには、次の（１）ノーマルモード及び（２）ターボモードがある。
（１）ノーマルモード
このノーマルモードは、ＣＰＵの命令のみならず、ＣＰＵのキャッシュ、ＣＰＵの分岐予測、ＣＰＵ内部のキューの処理状態などを正確にシミュレートできる。
（２）ターボモード
このターボモードは、ＣＰＵの命令のみをシミュレートし、命令をブロック化することによって、シミュレーションの高速化を図っている。このターボモードにおいては、キャッシュヒット・ミスヒットなどの情報処理を省略することによって、ノーマルモードの、例えば、６倍程度の処理時間でのシミュレーション実行が可能である。なお、シミュレーションを行うことによって得られる実行結果出力（Ｏｕｔｐｕｔ）は、ノーマルモード及びターボモードともに同一である。
【０００５】
次に（１）ノーマルモード及び（２）ターボモードの要部を詳細に説明する。図２１は従来例にあってノーマルモードの処理手順を示すフローチャートである。
図２１において、このノーマルモードでは、まず、メモリモデル２０１からの命令を読み込み（ステップＳ３０１）、ＣＰＵキャッシュのヒット・ミスヒットを集計し（ステップＳ３０２）、その命令が分岐命令か否かを判断する（ステップＳ３０３）。この判断が分岐命令の場合に、分岐予測処理を行った後に命令をキューに追加する（ステップＳ３０４）。ステップＳ３０３の判断が、分岐命令でない場合に、命令を直接命令キューに追加する（ステップＳ３０５）。
【０００６】
次に、命令キューの命令が実行可能状態の場合は（ステップＳ３０６）、その命令を実行し、この命令を命令キューから削除する（ステップＳ３０７）。さらに、命令を実行した後に、変数プロファイルを調べる（ステップＳ３０８）。この調べで変数プロファイルがオン（ＯＮ）の場合には、プロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）に、実行された命令の情報（命令の実行に要したクロック数、キャッシュヒット・ミスヒットなど）を追加する（ステップＳ３０９）。さらに、次に実行する命令のメモリアドレスの値（適宜、アドレス情報と表記）を調べ（ステップＳ３１０）、そのメモリアドレス情報が、プロファイル処理を開始するアドレス情報（プロファイル開始アドレス情報）ならば変数プロファイルをオンに設定する（ステップＳ３１１）。また、メモリアドレス情報がプロファイル作成を終了するアドレス情報（プロファイル終了アドレス情報）の場合は、プロファイルを作成した後に変数プロファイルをオフ（ＯＦＦ）に設定する。
【０００７】
図２２は従来例にあってターボモードの処理手順を示すフローチャートである。
図２２において、このターボモードでは、次の説明の動作を繰り返してシミュレーションを順次実行する。まず、メモリモデル２０１からの命令を読み込んで（ステップＳ４０１，Ｓ４０２）、この命令を実行する（ステップＳ４０３）。この実行した命令が分岐命令か否かを判断し（ステップＳ４０４）、この判断で分岐命令であれば（Ｓ４０４：Ｙｅｓ）、分岐命令の一つ手前の分岐命令から、その分岐命令までの間の命令群をブロック化する（ステップＳ４０５）。このターボモードの場合も、プロファイルの作成が可能であるが、キャッシュのヒット・ミスヒットなどの情報処理を省略しているため、この情報が欠落したプロファイルが作成される。
【０００８】
【発明が解決しようとする課題】
このような上記従来例では、次の（１）、（２）、（３）の不都合がある。
（１）ノーマルモードでは、プログラムの先頭から全て正確にシミュレーションを実行しているため、プロファイル作成を開始するプログラムの実行位置までに多大な時間を要し、シミュレータ動作（全体・総合的なシミュレーション／動作検証シミュレーション）が遅くなってしまう。
（２）ノーマルモードにおいては、プロファイルを作成してからも正確なシミュレートを実行するターボモードに比較してシミュレーション速度が低下し、シミュレータ動作が遅くなってしまう。
（３）ターボモードにおいては、キャッシュメモリモデルなどのシミュレーションを実行しないため、ノーマルモードで得られる正確なプロファイルが得られない。
【０００９】
この発明は、以上の点に着目してなされたもので次の動作検証シミュレーションの実行方法及びシミュレーション実行装置並びにプログラムの提供を目的とする。
（ａ）第１，２，４，６の目的として、プロファイルを得るシミュレーションの実行が速くなって、シミュレータ動作（動作検証シミュレーション）の高速化を可能にする。
（ｂ）第３の目的として、プロファイル開始アドレス情報に達する時間が短縮されて、プロファイルを得るシミュレーション実行が速くなり、シミュレータ動作の高速化を可能にする。
（ｃ）第５の目的として、プロファイルの情報取得を開始するノーマルモードに達する時間が短縮されて、シミュレータ動作の高速化を可能にする。
【００１０】
【課題を解決するための手段】
上記課題を達成するために、本発明は、シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから命令を読み込んでシミュレーションを実行して実行結果を出力する通常処理モジュールと前記実行結果のプロファイルを生成するプロファイルモジュールとを備えるコンピュータにより、ハードウェアをモデル化しシミュレーションを実行して実行結果のプロファイルを生成する動作検証シミュレーションの実行方法であって、前記命令メモリから読み込んだ命令に基づいて前記高速処理モジュールによる高速処理を実行する段階と、前記所定の命令アドレス情報に達すると前記通常処理モジュールによる通常処理に切り替える段階とを含み、前記通常処理モジュールによる通常処理は、前記高速処理モジュールによる高速処理に続いてプロファイル生成の開始前にシミュレーションの実行結果によるプロファイル情報を出力しない第１の通常処理を実行する段階と、その後に前記第１の通常処理の実行結果を用いてシミュレーションを実行して実行結果によるプロファイル情報を出力する第２の通常処理を実行する段階とを含み、前記第２の通常処理により出力されたプロファイル情報に基づいてプロファイルを生成することを特徴とする。
【００１１】
他の発明は、シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから命令を読み込んでシミュレーションを実行して実行結果を出力する通常処理モジュールと、前記実行結果のプロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、前記通常処理モジュールは、前記高速処理モジュールの高速処理に続いて、前記命令メモリから前記開始アドレスよりも読み込み順が前のアドレスの命令を読み込んで実行結果によるプロファイル情報を出力しないシミュレーションを実行する第１の通常処理部と、前記命令メモリから前記開始アドレスからの命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行して実行結果によるプロファイル情報を前記プロファイルモジュールに出力する第２の通常処理部とを含むことを特徴とする。
また、他の発明は、シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、前記命令メモリの前記開始アドレスよりも読み込み順が前のアドレスの設定されている切替条件記憶部を有し、前記高速処理モジュールは、前記命令メモリから読み込んだ命令のアドレスが前記切替条件記憶部の設定アドレスと一致するとシミュレーションの実行を終了し、前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて、前記命令メモリの前記設定アドレス以降のアドレスから命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから前記命令を読み込むと前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力することを特徴とする。
【００１２】
更に他の発明は、シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、以前のシミュレーションで実行された命令及びそのアドレスが実行順に記憶されている実行順序記憶部と、該実行順序記憶部から前記開始アドレスを判定し、該開始アドレスよりも順序が前のアドレスに対応する命令からシミュレーション開始の最初の命令までの命令数を算出するモード切替条件算出部を有し、前記高速処理モジュールは、前記命令メモリから読み込んだ命令の個数が前記算出した命令数と一致するとシミュレーションの実行を終了し、前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて、前記命令メモリから連続的に以降の命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから命令を読み込むと前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力することを特徴とする。
【００１３】
他の発明は、シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、前記命令メモリの開始アドレスを検知して該開始アドレスよりも読み込み順が前のアドレスを算出し、該算出したアドレスからの読み込みを前記通常処理モジュールに指示する実行指示手段を有し、前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて、前記命令メモリの前記指示されたアドレスから順に命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから前記命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力することを特徴とする。
【００１４】
又、他の発明は、シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリと、該命令メモリから前記命令を読み込んで一部を省略してシミュレーションを実行する高速処理モジュールと、前記命令メモリの前記開始アドレスから前記命令を読み込んで該命令対応のシミュレーションを実行すると共に前記プロファイルを生成するためのプロファイル情報を出力する通常処理モジュールと、前記プロファイル情報に基づいて前記プロファイルを生成するプロファイルモジュールとを備えるシミュレーション実行装置であって、過去にプロファイルを得ている場合に前記命令メモリの開始アドレスよりも読み込み順が前のアドレスが切替アドレスとして設定される切替アドレス記憶部と、過去にプロファイルを得て前記切替アドレス記憶部に切替アドレスが設定されていると前記高速処理モジュールに前記切替アドレスを検知するまで命令に基づくシミュレーションを実行させると共に前記通常処理モジュールに前記切替アドレスの命令からの読み込みを指示し、過去にプロファイルを得ておらず前記切替アドレス記憶部に前記切替アドレスが設定されていないと前記高速処理モジュールに前記開始アドレスを検知するまで命令に基づくシミュレーションを実行させると共に前記切替アドレスを算出して前記切替アドレス記憶部に設定し、かつ該切替アドレスからの読み込みを前記通常処理モジュールに指示する実行指示手段とを含み、前記通常処理モジュールは、前記高速処理モジュールのシミュレーションに続いて前記切替アドレスの読み込み指示を受けると前記命令メモリから該切替アドレスで示すアドレスから順に命令を読み込んで前記プロファイル情報を出力せずにシミュレーションを実行し、引き続き前記開始アドレスから前記命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行してプロファイル情報を前記プロファイルモジュールに出力することを特徴とする。
【００１５】
コンピュータにシミュレーションを実行させるためのプログラムであって、前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、前記命令メモリから前記開始アドレスよりも前の命令を読み込んで切替アドレスを算出すると、前記高速処理に続いて切替アドレス以降の命令を読み込んで実行結果によるプロファイル情報を出力しないシミュレーションを実行する第１の通常処理を行わせる手段と、該第１の通常処理に続いて前記命令メモリから前記開始アドレスからの命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行して実行結果によるプロファイル情報を出力する第２の通常処理を行わせる手段と、前記第２の通常処理により出力されたプロファイル情報に基づいてプロファイルを生成させる手段とを含むことを特徴とする。
コンピュータにシミュレーションを実行させるためのプログラムであって、前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、前記命令メモリの前記開始アドレスよりも読み込み順が前のアドレスを設定させる手段と、前記命令メモリから読み込んだ命令のアドレスが前記設定アドレスと一致すると前記高速処理のシミュレーションの実行を終了させる手段と、前記高速処理に続いて、命令メモリの設定アドレス以降のアドレスから命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスから前記命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力する通常処理を行わせる手段と、前記通常処理により出力されたプロファイル情報に基づいてプロファイルを生成させる手段とを含むことを特徴とする。
【００１６】
コンピュータにシミュレーションを実行させるためのプログラムであって、前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、以前のシミュレーションで実行された命令及びそのアドレスを実行順に記憶部に記憶させる手段と、該記憶部の命令から前記開始アドレスを判定させ、該開始アドレスよりも読み込み順が前のアドレスに対応する命令からシミュレーション開始の最初の命令までの命令数を算出させる手段と、前記命令メモリから読み込んだ命令の個数が前記算出した命令数と一致すると前記高速処理のシミュレーション実行を終了させる手段と、前記高速処理に続いて、命令メモリの前のアドレス以降の命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスからの命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力する通常処理を行わせる手段と、前記通常処理により出力されたプロファイル情報に基づいてプロファイルを生成させる手段とを含むことを特徴とする。
【００１７】
コンピュータにシミュレーションを実行させるためのプログラムであって、前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、前記命令メモリの開始アドレスを検知して前記高速処理のシミュレーションの実行が終了すると前記開始アドレスよりも読み込み順が前のアドレスを算出させ、該算出したアドレスからの読み込みを通常処理に対し指示する手段と、前記通常処理として、前記命令メモリの指示されたアドレスから順に命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスから命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力させる手段と、前記プロファイル情報に基づいてプロファイルを生成させる手段とを含むことを特徴とする。
【００１８】
コンピュータにシミュレーションを実行させるためのプログラムであって、前記シミュレーションを実行するための複数の命令が格納されてプロファイルの生成を開始すべき命令の格納されている開始アドレスが設定されている命令メモリから、前記開始アドレスよりも前のアドレスの命令を読み込んで一部を省略してシミュレーションを実行する高速処理を行わせる手段と、過去にプロファイルを得ていると命令メモリの前記開始アドレスよりも読み込み順が前のアドレスを切替アドレスとして設定する手段と、過去にプロファイルを得て前記切替アドレスが設定されていると前記高速処理で前記切替アドレスを検知するまで命令に基づくシミュレーションを実行させると共に前記通常処理で前記切替アドレスの命令からシミュレーションを実行させてプロファイル情報を出力させ、過去にプロファイルを得ておらず前記切替アドレスが設定されていないと高速処理で前記開始アドレスを検知するまでシミュレーションを実行させ、かつ前記切替アドレスを算出させて設定させて高速処理を終了させ、前記通常処理で命令メモリの算出した切替アドレスで示すアドレスから順に命令を読み込んでプロファイル情報を出力せずにシミュレーションを実行させ、引き続き前記開始アドレスから命令を読み込んで前記未出力のプロファイル情報を用いてシミュレーションを実行させてプロファイル情報を出力させる手段と、前記プロファイル情報に基づいてプロファイルを生成させる手段とを含むことを特徴とするプログラム。
【００３３】
これらの本発明のプログラムでは、本発明を情報記録媒体、例えば、パッケーソフトウェアとして提供可能になり、本発明の全体・総合的な動作検証シミュレーションがコンピュータや専用装置で実行できるようになって、その汎用性が向上する。
【００３４】
【発明の実施の形態】
次に、本発明のシミュレータの実施形態を図面参照の上で詳細に説明する。
（第１実施形態／第１の目的に対応）
図１は本発明の第１実施形態におけるシミュレータ構成を示すブロック図である。
図１において、この第１実施形態は、実行すべき命令を予め格納している命令メモリモジュール１０１と、ノーマルモード（請求項における通常処理、以下の第２から第６実施形態も同様）を実行するノーマルモジュール（Ｎｏｒｍａｌ  Ｍｏｄｕｌｅ）１０２と、ターボモード（請求項における高速処理、以下の第２から第６実施形態も同様）を実行するターボモジュール（Ｔｕｒｂｏ  Ｍｏｄｕｌｅ）１０３と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）１０４とからなる。
【００３５】
ノーマルモジュール１０２は、命令メモリモジュール１０１から命令を取り込むためのフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、分岐予測を行うブランチユニット（Ｂｒａｎｃｈ  Ｕｎｉｔ）と、命令の送り出しを行うディスパァッチユニット（Ｄｉｓｐａｔｃｈ  Ｕｎｉｔ）と、キャッシュユニットへのアクセスを行うキャッシュユニット（Ｃａｃｈｅ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）からなる。
【００３６】
ターボモジュール１０３は、命令メモリモジュール１０１からの命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスチュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）と、命令をブロック化するブロックユニット（Ｂｌｏｃｋ  Ｕｎｉｔ）とからなる。また、プロファイルモジュール１０４は、プロファイルを作成するモジュールを有している。
【００３７】
次に、第１実施形態の動作について説明する。
図１に示す構成では、ターボモジュール１０３からノーマルモジュール１０２への動作の切り替えが可能であり、かつ、ノーマルモジュール１０２からターボモジュール１０３への動作の切り替えが可能である。また、プロファイルモジュール１０４は、ノーマルモジュール１０２からプロファイル情報を受け取ってプロファイル作成を行う。
【００３８】
図２は第１実施形態のシミュレータの概略動作を説明するためのフローチャートである。
図２において、シミュレーション動作を開始する。この開始時の実行モードは、ターボモードである（ステップＳ５０２）。このターボモードでのシミュレーション実行を継続し、命令メモリモジュール１０１から読み込む命令アドレス情報（アドレス値）が、プロファイル開始アドレス情報に達したときに、実行モードがノーマルモードに移行する（ステップＳ５０３）。この移行後のノーマルモードによるシミュレーション実行を継続し、実行した命令アドレス情報がプロファイル終了アドレス情報に達したときに、プロファイルモジュール１０４でのプロファイルを作成する（ステップＳ５０４）。このプロファイル作成の後は、実行モードがターボモードに再度移行する。
【００３９】
次に、この第１実施形態のシミュレータの動作を詳細に説明する。
図３は第１実施形態の詳細なシミュレータ動作の処理手順を示すフローチャートである。
図３において、まず、ターボモード動作について説明する。命令メモリモジュール１０１から命令を読み込みで実行する（ステップＳ６０１，Ｓ６０２，Ｓ６０３）。この実行した命令が、分岐命令か否かを判断し（ステップＳ６０４）、この判断で分岐命令の場合は、命令のブロック化を行う（ステップＳ６０５）。この後、次の命令を命令メモリモジュール１０１から読み込む前に、次の読み込むべき命令のアドレス情報がプロファイル開始アドレス情報であるかを調べる（ステップＳ６０６）。そのアドレス情報がプロファイル開始アドレス情報の場合にターボモードが終了し、必要な情報（例えば、レジスタ情報）を引き継いで実行モードがノーマルモードに移行する。ステップＳ６０６で、プロファイル開始アドレス情報でない場合、再度、ターボモードで次の命令を読み込んで、このターボモードでの処理を実行する。
【００４０】
次に、シミュレーションがノーマルモードに移行した場合について説明する。ターボモードから必要な情報を引き継いだ後は、ノーマルモードで命令メモリモジュール１０１から命令を読み込み、ＣＰＵキャッシュメモリモデルのヒット・ミスヒットを集計し（ステップＳ６０７）、この命令が分岐命令か否かを判断する（ステップＳ６０８）。この判断で、分岐命令の場合は、分岐予測処理を行ってから命令キューに追加する（ステップＳ６０９）。また、ステップＳ６０８の判断で、分岐命令でない場合は、直接命令キューに追加する（ステップＳ６１０）。その後、命令が実行可能かどうかを判断し（ステップＳ６１１）、命令が実行可能ならば、その命令を実行する（ステップＳ６１２）。
【００４１】
この命令を実行した後に、プロファイルモジュールに実行サイクル、キャッシュヒット情報などのプロファイル作成に必要な情報を渡す（ステップＳ６１３）。この情報を渡した後に、実行すべき命令メモリアドレス情報を調べ、そのアドレス情報がプロファイル終了アドレス情報か否かを調べる（ステップＳ６１４）。この調べでアドレス情報がプロファイル終了アドレス情報の場合は、プロファイルモジュール１０４でのプロファイルを作成する（ステップＳ６１５）。この後、レジスタの値などの必要な情報を引き継いで実行モードをノーマルモードからターボモードに移行する。ステップＳ６１４の調べでアドレス情報がプロファイル終了アドレス情報でない場合は、ノーマルモードでのシミュレーションを継続する。
【００４２】
このように第１実施形態では、実行モードを、プロファイル開始までは、ノーマルモードに比較して実行が速いターボモードで実行し、プロファイル開始アドレス情報からはノーマルモードで実行している。このため、シミュレータが、プロファイル開始アドレス情報に達するまでの時間が短縮される。さらに、ターボモードで得られるプロファイルに比較して、プロファイルモジュール１０４での正確なプロファイルを得ることができるようになる。また、ノーマルモードの実行によってプロファイルを得た後に、プロファイル終了アドレス情報からターボモードの実行によって、プロファイルを得た後の実行速度が速くなるため、プロファイルを得るシミュレータの全体実行速度を速くすることができる。
【００４３】
（第２実施形態／第２の目的に対応）
図４は第２実施形態の構成を示すブロック図である。
図４において、この第２実施形態は、実行すべき命令を予め格納している命令メモリモジュール７０１と、ノーマルモードを実行するノーマルモジュール（Ｎｏｒｍａｌ  Ｍｏｄｕｌｅ）７０２と、ターボモードを実行するターボモジュール（Ｔｕｒｂｏ  Ｍｏｄｕｌｅ）７０３と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）７０４と、ターボモードからノーマルモードへと切り替える条件を記憶したモード切替条件記憶部７０７と、ターボモードで実行した命令アドレス情報（アドレス値）の順序を記憶するアドレスバッファ７０８とからなる。
【００４４】
ノーマルモジュール７０２は、命令メモリモジュール７０１から命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、分岐予測を行うブランチユニット（Ｂｒａｎｃｈ  Ｕｎｉｔ）と、命令の送り出しを行うディスパァッチユニット（Ｄｉｓｐａｔｃｈ  Ｕｎｉｔ）と、キャッシュユニット（Ｃａｃｈｅ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）からなる。
【００４５】
ターボモジュール７０３は、命令メモリモジュール７０１からの命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）と、命令をブロック化するブロックユニット（Ｂｌｏｃｋ  Ｕｎｉｔ）とからなる。
【００４６】
プロファイルモジュール７０４は、ノーマルモジュールからプロファイル情報を受け取ってプロファイルを作成する。モード切替条件記憶部７０７には、一つ以上の命令アドレス情報が、任意数をもって順に設定されている。また、この命令アドレス情報は、シミュレータを操作するユーザによって任意に設定される。アドレスバッファ７０８には、実行した命令のアドレス情報が順に設定されている。その数はモード切替条件記憶部７０７で設定された数と等しい。
【００４７】
次に、第２実施形態の動作について説明する。
図４において、ターボモジュール７０３からノーマルモジュール７０２への動作の切り替えが可能であり、ノーマルモジュール７０２からターボモジュール７０３への実行切り替えが可能である。
【００４８】
図５は第２実施形態のシミュレータの概略動作を説明するためのフローチャートである。
図５において、シミュレータが、シミュレーション動作を開始する（ステップＳ８０１）。この開始時の実行モードは、ターボモードである（ステップＳ８０２）。このターボモードでのシミュレーション実行を継続し、アドレスバッファに記憶されている命令アドレス情報の順序と、モード切替条件記憶部７０７で設定された命令アドレス情報の順序が一致した場合、プロファイルモジュール７０４でのプロファイル情報を作成しないノーマルモードへ移行する（ステップＳ８０３）。ターボモード実行を継続し、命令メモリモジュール７０１から読み込む命令アドレス情報がプロファイル開始アドレス情報に達した場合、プロファイル情報を作成するノーマルモードに移行する（ステップＳ８０４）。
【００４９】
このプロファイル情報の出力を行わないノーマルモードで順次シミュレートを実行し、命令メモリモジュール７０１から読み込む命令アドレス情報がプロファイル開始アドレス情報に達した場合には、プロファイルモジュール７０４でのプロファイル情報を作成するノーマルモードに移行する（ステップＳ８０４）。プロファイル情報を作成するノーマルモードでシミュレーションが進行し、実行した命令アドレス情報がプロファイル終了アドレス情報に達したときにプロファイルモジュール７０４によるプロファイル作成を行い（ステップＳ８０５）、実行モードが再度ターボモードに移行する。
【００５０】
次に、この第２実施形態のシミュレータ動作を詳細に説明する。
図６は第２実施形態の詳細なシミュレータ動作の処理手順を示すフローチャートである。
図６において、まず、ターボモード動作について説明する。命令メモリモジュール７０１から命令を読み込んで実行する（ステップＳ９０１，Ｓ９０２，Ｓ９０３）。この実行した命令が、分岐命令か否かを判断し（ステップＳ９０４）、この判断で分岐命令の場合に命令のブロック化を行う（ステップＳ９０５）。この後、次の命令を図示しないアドレスバッファに送出する（ステップＳ９０６）。次に、モード切替条件記憶部７０７の命令アドレス情報の順次と、アドレスバッファの命令アドレス情報の順序とを比較し（ステップＳ９０７）、この比較で完全に一致している場合に、ターボモードを終了し、レジスタの値などの必要な情報を引き継いで、実行モードをノーマルモードへと移行する。このとき変数プロファイルはオフ（ＯＦＦ）である。
【００５１】
ステップＳ９０７の比較で一致していない場合は、次に読み込むべき命令のアドレス情報が、プロファイル開始アドレス情報か否かを調べる（ステップＳ９０８）。そのアドレス情報がプロファイル開始アドレス情報ならば、ターボモードを終了し、レジスタの値などの必要な情報を引き継いで実行モードをノーマルモードに移行する。このとき、変数プロファイルがオン（ＯＮ）になる。ステップＳ９０８のアドレス情報がプロファイル開始アドレス情報でない場合、再度ターボモードで次の命令を読み込んで、その処理を順次実行する。
【００５２】
次に、シミュレーションがノーマルモードに移行した場合について説明する。ターボモードから必要な情報を取り込んだ（引き継ぎ）後に、ノーマルモードでは命令メモリモジュール７０１から命令を読み込み、キャッシュユニットのキャッシュヒット・ミスヒットを集計し（ステップＳ９０９）、この命令が分岐命令か否かを判断する（ステップＳ９１０）。この判断が分岐命令の場合、分岐予測処理を行った後に（ステップＳ９１１）、命令キューに追加する。ステップＳ９１０の判断が分岐命令でない場合は、直接命令キューに追加する（ステップＳ９１２）。
この後に、命令が実行可能であるかを判断し（ステップＳ９１３）、この判断で実行可能な場合は、その命令を実行する（ステップＳ９１４）。
【００５３】
次に、変数プロファイルを調べ（ステップＳ９１５）、その値がオン（ＯＮ）である場合にプロファイルモジュール７０４に実行サイクルやキャッシュヒット情報などのプロファイル作成に必要な情報を渡す（ステップＳ９１６）。この後で、次に実行する命令アドレス情報を調べ（ステップＳ９１７）、そのアドレス情報がプロファイル開始アドレス情報の場合に、変数プロファイルをオン（ＯＮ）に設定し（ステップＳ９１８）、ノーマルモードで実行を継続し、プロファイル終了アドレス情報の場合には、プロファイル作成の後に（ステップＳ９１９）、レジスタの値などの必要な情報を引き継いで、実行モードをノーマルモードからターボモードに移行する。ステップＳ９１７のアドレス情報がプロファイル開始アドレス情報でない場合に、ノーマルモードでのシミュレーションを順次実行する。
【００５４】
次に、ターボモードにおいて、モード切替条件記憶部７０７の命令アドレス情報順序とアドレスバッファの命令順序が一致してノーマルモードに移行した場合、実行モードが切り替わった部分からプロファイル開始アドレス情報間までは、実行モードかターボモードではなく、ノーマルモードで実行されるためキャッシュユニットの情報などが書き込まれる。このため、プロファイル開始アドレス情報からプロファイル情報を作成し始めるときには、キャッシュユニットの情報が、始めからノーマルモードで実行した場合と同様の情報になっている。そのため、全てのシミュレーションをノーマルモードで実行して得られるプロファイルと、この第２実施形態で得られるプロファイルの間に違いが生じないことになる。
【００５５】
このように、この第２実施形態では、実行モードをモード切替条件記憶部７０７の命令アドレス情報の順序と、アドレスバッファの命令が一致するまでをノーマルモードに比較して動作が速いターボモードで実行する。この後はノーマルモードで実行しているため、プロファイル開始アドレス情報に達するまでの時間が短縮され、かつ、ノーマルモードで省略していたキャッシュユニットなどのシミュレーションもプロファイル開始アドレス情報より前からシミュレートできるため、モード切替条件記憶部７０７にユーザが適切な命令アドレス情報を設定することによって、全てをノーマルモードで実行した場合に得られるプロファイルと同様のプロファイルを得ることができる。また、実行をノーマルモードで行ってプロファイルを得た後に、プロファイル終了アドレス情報から実行をターボモードで行うことによって、プロファイルを得た後の実行を速くすることができる。
【００５６】
また、第２実施形態では、実行モードを、プロファイル開始までは、ノーマルモードに比較して実行が速いターボモードで実行し、プロファイル開始アドレス情報からは、ノーマルモードで実行している。このため、プロファイル開始アドレス情報に達するまでの時間が短縮される。さらに、ターボモードで得られるプロファイルに比較して、正確なプロファイルを得ることができるようになる。また、ノーマルモードの実行によってプロファイルを得た後に、プロファイル終了アドレス情報からターボモードの実行によって、プロファイルを得た後の実行が速くなるため、プロファイルを得るシミュレータ動作（動作検証シミュレーション）を速くすることができる。
【００５７】
（第３実施形態／第３の目的に対応）
図７は第３実施形態の構成を示すブロック図である。
図７において、この第３実施形態は、実行すべき命令を予め格納している命令メモリモジュール１００１と、ノーマルモードを実行するノーマルモジュール（Ｎｏｒｍａｌ  Ｍｏｄｕｌｅ）１００２と、ターボモードを実行するターボモジュール（Ｔｕｒｂｏ  Ｍｏｄｕｌｅ）１００３と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）１００４と、ターボモードからノーマルモードへと切り替える条件を算出するモード切替条件算出部１００７と、シミュレータの以前の実行順序を全て記憶している実行順序記憶部１００８とからなる。
【００５８】
ノーマルモジュール１００２は、命令メモリモジュール１００１から命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、分岐予測を行うブランチユニット（Ｂｒａｎｃｈ  Ｕｎｉｔ）と、命令の送り出しを行うディスパァッチユニット（Ｄｉｓｐａｔｃｈ  Ｕｎｉｔ）と、キャッシュユニット（ＣａｃｈｅＵｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）からなる。
【００５９】
ターボモジュール１００３には、命令メモリモジュール１００１の命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）と、命令をブロック化するブロックユニット（Ｂｌｏｃｋ  Ｕｎｉｔ）とからなる。
【００６０】
次に、第３実施形態の動作について説明する。
図７において、ターボモジュール１００３からノーマルモジュール１００２への動作の切り替えが可能であり、ノーマルモジュール１００２からターボモジュール１００３への動作の切り替えが可能である。
【００６１】
また、プロファイルモジュール１００４は、ノーマルモジュールからプロファイル情報を受け取ってプロファイル作成を行う。モード切替条件算出部１００７には、命令アドレス情報（アドレス値）が設定されている。これらのアドレス情報は実行順序記憶部１００８の命令と命令アドレス情報と、プロファイル開始アドレス情報から算出される。実行順序記憶部１００８には、以前にシミュレータが動作したときに実行された命令と命令アドレス情報が実行された順序で全てが記憶されている。また、実行順序記憶部１００８にはシミュレータの動作開始、動作終了の度に更新される。
【００６２】
図８は第３実施形態のシミュレータ概略動作を説明するためのフローチャートである。
図８において、シミュレーション動作を開始する。この開始時の実行モードは、ターボモードである（ステップＳ１１０２）。このターボモードでのシミュレーション実行を継続して、実行した命令アドレス情報がモード切替条件算出部１００７で算出された条件と一致した場合、プロファイル情報を作成しないノーマルモードへ移行する（ステップＳ１１０３）。このプロファイル情報の作成を行わないノーマルモードで実行を進めていき、命令メモリモジュール１００１から読み込む命令アドレス情報がプロファイル開始アドレス情報に達した場合、プロファイル情報を作成するノーマルモードに移行する（ステップＳ１１０４）。
【００６３】
このプロファイル情報を作成するノーマルモード（ステップＳ１１０４）での実行を継続して、実行した命令アドレス情報がプロファイル終了アドレス情報に達したときに、プロファイル作成を行い（ステップＳ１１０５）、実行モードを、再度ターボモードに移行する。
【００６４】
次に、この第３実施形態のシミュレータの動作を詳細に説明する。
図９は第３実施形態の詳細なシミュレータ動作の処理手順を示すフローチャートである。
図９において、まず、ターボモード動作について説明する。モード切替条件算出部１００７において、実行モードをターボモードからノーマルモードに変更すべき命令アドレス情報を算出する（ステップＳ１２０２）。具体的には、実行順序記憶部１００８の命令中からプロファイル開始アドレス情報を探し出し、シミュレーションの開始処理に戻ってキャッシュユニットにアクセスする命令を、キャッシュユニットの最大格納領域までカウントし、このカウントが終了した位置の命令アドレス情報を算出して記憶する。このアドレス情報を実行モード切替アドレス情報とする。算出されたアドレス情報がある実行順序記憶部１００８の位置を実行モード切替ポイントとする。
【００６５】
次に、実行順序記憶部１００８の命令を、開始から実行モード切替ポイントまでの間における実行モード切替アドレス情報の回数をカウントし、その回数を記憶する。次に、命令メモリモジュール１００１から命令を読み込んで実行する（ステップＳ１２０３，Ｓ１２０４）。この実行した命令が分岐命令か否かを判断し（ステップＳ１２０５）、この判断が分岐命令の場合に、命令のブロック化を行う（ステップＳ１２０６）。
【００６６】
次に、実行した命令アドレス情報が実行モード切替アドレス情報か否かを判定し（ステップＳ１２０７）、この判定で実行モード切替アドレス情報であり、かつ、そのアドレス情報命令の実行回数が実行モード切替アドレス情報で算出された回数と等しい場合に、ターボモードを終了し、レジスタ値などの必要な情報を引き継いで実行モードをノーマルモードに移行する。このとき変数プロファイルはオフ（ＯＦＦ）である。実行した命令アドレス情報が実行モード切替アドレス情報でない場合に、再度ターボモードで次の命令を読み込んで、その命令を順次実行する。
【００６７】
次に、シミュレーションがノーマルモードに移行した場合について説明する。ターボモードから必要な情報を引き継いだ後は、ノーマルモードでは命令メモリモジュール１００１から命令を読み込んで、キャッシュユニットにおけるキャッシュユニットヒット・ミスヒットを集計し（ステップＳ１２０８）、その命令が分岐命令か否かを判断する（ステップＳ１２０９）。この判断で、分岐命令ならば、分岐予測処理を行った後に（ステップＳ１２１０）、命令キューに追加し、分岐命令でない場合には、直接命令キューに追加する（ステップＳ１２１１）。次に、この命令が実行可能か否かを判断し（ステップＳ１２１２）、実行可能な場合には命令を実行する（ステップＳ１２１３）。次に、変数プロファイルを調べる（ステップＳ１２１４）。
【００６８】
この値がオン（ＯＮ）の場合は、プロファイルモジュール１００４に実行サイクル、キャッシュヒット情報などのプロファイル作成に必要な情報を渡す（ステップＳ１２１５）。次に、この後で実行すべき命令メモリモジュール１００１のメモリアドレス情報を調べ（ステップＳ１２１６）、そのアドレス情報がプロファイル開始アドレス情報ならば、変数プロファイルをオン（ＯＮ）にし（ステップＳ１２１７）、ノーマルモードでの実行を継続し、プロファイル終了アドレス情報ならば、プロファイル作成後に（ステップＳ１２１８）、レジスタの値などの、必要な情報を引き継いで実行モードをノーマルモードからターボモードに移行する。これらのアドレス情報でない場合は、ノーマルモードでの命令を順次実行する。
【００６９】
ターボモードから実行モードがノーマルモードに切り替わった部分からプロファイル開始アドレス情報までの間は、実行モードがターボモードではなく、ノーマルモードで行われるため、例えば、キャッシュ情報が書き込まれる。このため、プロファイル開始アドレス情報からプロファイル情報を作成し始めるときには、キャッシュ情報などが始めからノーマルモードで実行した場合と同一の状況になっている。したがって、全てをノーマルモードで実行して得られるプロファイルとこの第３実施形態で得られるプロファイルとは同一である。
【００７０】
このように、この第３実施形態では、実行モードをモード切替条件算出部１００７が算出した後と、そのアドレス情報の命令回数と、ターボモードでそのアドレス情報命令の実行回数が一致するまで、ノーマルモードに比較して実行速度が速いターボモードで実行し、この後でノーマルモードを実行するため、プロファイル開始アドレス情報までの到達時間が短縮される。
【００７１】
さらに、第３実施形態では、ノーマルモードで省略していたキャッシュユニットなどのシミュレーションもプロファイル開始アドレス情報より前からシミュレートできるため、一度、全てをシミュレーションしたファームウェアプログラムである場合に、全てをノーマルモードで実行した場合に得られるプロファイラと同一のプロファイラを得ることができる。また、実行をノーマルモードで行って、そのプロファイルを得た後に、プロファイル終了アドレス情報から実行モードをターボモードで行うことによってプロファイルを得た後の実行が速くなり、プロファイルを得るシミュレーションの全体的な実行速度（シミュレータ動作／動作検証シミュレーション）を大きく上げることができる。
【００７２】
（第４実施形態／第４の目的に対応）
図１０は、本発明の第４実施形態における構成を示すブロック図である。
図１０において、この第４実施形態は、実行すべき命令を予め格納している命令メモリモジュール１３０１と、ノーマルモードを実行するノーマルモジュール（Ｎｏｒｍａｌ  Ｍｏｄｕｌｅ）１３０２と、ターボモードを実行するターボモジュール（Ｔｕｒｂｏ  Ｍｏｄｕｌｅ）１３０３と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）１３０４と、ターボモードでの実行順序を記憶し、ノーマルモードでの実行順序を指示する実行順序記憶・指示部１３０７からなる。
【００７３】
ノーマルモジュール１３０２は、命令メモリモジュール１３０１から命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、分岐予測を行うブランチユニット（Ｂｒａｎｃｈ  Ｕｎｉｔ）と、命令の送り出しを行うディスパァッチユニット（Ｄｉｓｐａｔｃｈ  Ｕｎｉｔ）と、キャッシュへのアクセスを行うキャッシュユニット（Ｃａｃｈｅ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）からなる。
【００７４】
ターボモジュール１３０３には、命令メモリモジュール１３０１からの命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）と、命令をブロック化するブロックユニット（Ｂｌｏｃｋ  Ｕｎｉｔ）とからなる。
【００７５】
次に、第４実施形態の動作について説明する。
図１０において、ターボモジュール１３０３からノーマルモジュール１３０２への動作の切り替えが可能であり、ノーマルモジュール１３０２からターボモジュール１３０３への動作の切り替えが可能である。
【００７６】
また、プロファイルモジュール１３０４は、プロファイルを作成するモジュールがあり、ノーマルモジュールからプロファイル情報を受け取ってプロファイル作成を行う。実行順序記憶・指示部１３０７は、実行モードがターボモードで行われているときに、この命令のアドレス情報を順に記憶して、実行モードがノーマルモードで行われているときには、一時的に実行する順序を指示する。
【００７７】
図１１は第４実施形態のシミュレータの概略動作を説明するためのフローチャートである。
図１１において、シミュレータが、シミュレーション動作を開始する。この開始時の実行モードは、ターボモードである（ステップＳ１４０２）。このターボモードでのシミュレーションの実行を継続し、命令メモリモジュール１３０１から読み込む命令アドレス情報（アドレス値）がプロファイル開始アドレス情報に達した時点から実行モードは実行結果を出力しないノーマルモードに移行する（ステップＳ１４０３）。プロファイル作成を行わないノーマルモードでは、ターボモードで実行された命令を一部実行する。しかし、この場合、実行結果は出力されない。ただし、キャッシュやキューの情報は書き込まれる。実行結果を出力しないノーマルモードで実行を進め、命令メモリモジュール１３０１から読み込む命令アドレス情報がプロファイル開始アドレス情報に達した場合、プロファイル情報を作成するノーマルモードに移行する（ステップＳ１４０４）。
【００７８】
実行結果を出力するノーマルモードでシミュレーションが進み、実行した命令アドレス情報がプロファイル終了アドレス情報に達したときに、プロファイルモジュール１３０４でのプロファイル作成を行い（ステップＳ１４０５）、実行モードは、再度ターボモードに移行する。
【００７９】
次に、この第４実施形態のシミュレータの動作を詳細に説明する。
図１２は第４実施形態の詳細なシミュレータ動作の処理手順を示すフローチャートである。
図１２において、まず、ターボモード動作について説明する。始めに、命令メモリモジュール１３０１から命令を読み込んで（ステップＳ１５０２）、その命令を実行する。（ステップＳ１５０３）。次に、実行した命令が分岐命令か否かを判断し（ステップＳ１５０４）、分岐命令ならば、命令ブロック化を行う（ステップＳ１５０５）。そして、次の命令を命令メモリモジュール１３０１から読み込む前に、次の読み込むべき命令のアドレス情報が、プロファイル開始アドレス情報であるかを調べる（ステップＳ１５０６）。そのアドレス情報がプロファイル開始アドレス情報であれば、実行順序記憶・指示部１３０７において、ノーマルモードで実行結果を出力せずに実行する区間（仮実行アドレス情報区間）を算出して、設定を行う（ステップＳ１５０７）。
【００８０】
具体的には、実行順序記憶・指示部１３０７のプロファイル開始アドレス情報からシミュレーションの開始までを調べ、キャッシュユニットにアクセスする命令を数えて、キャッシュの最大領域までの命令をカウントする。このカウントが終了した場所の命令アドレス情報を算出する。その算出された命令アドレス情報からプロファイル開始アドレス情報までを仮実行アドレス情報区間とする。その後は、ターボモードを終了し、図示しないレジスタ値などの必要な情報を引き継いで実行モードをノーマルモードに移行する。このとき、変数プロファイルはオフ（ＯＦＦ）である。プロファイル開始アドレス情報でないならば、実行した命令と命令アドレス情報を実行順序記憶・指示部１３０７に送出する（ステップＳ１５０８）。実行順序記憶・指示部１３０７は、送られてきた命令を順に記憶する。そして、再度、ターボモードで次の命令を読み込んで、その処理を順次実行する。
【００８１】
次に、シミュレーションが、ノーマルモードに移行した場合について説明する。
ターボモードから必要な情報を引き継いだ後のノーマルモードでは、命令メモリモジュール１３０１から命令を読み込んで、キャッシュユニットでのキャッシュヒット・ミスヒットを集計する（ステップＳ１５０９）。このとき、仮実行アドレス情報区間が設定されているときには、命令を読み込むアドレス情報を実行順序記憶・指示部１３０７が決定する。実行順序記憶・指示部１３０７は、仮実行アドレス情報区間開始アドレス情報からターボモードで実行された終了アドレス情報までにおいて、順番に命令を読み込むアドレス情報を順次指定する。
【００８２】
次に、その命令が分岐命令か否かを判断し（ステップＳ１５１０）、分岐命令ならば分岐予測を処理した後に（ステップＳ１５１１）、命令キューに追加する。ステップＳ１５１０で分岐命令でない場合は、直接命令キューに追加する（ステップＳ１５１２）。次に、命令が実行可能か否かを判断し（ステップＳ１５１３）、命令が実行可能ならば、その命令のアドレス情報が仮実行アドレス情報区間か、又は区間外かを判断する（ステップＳ１５１４）。
【００８３】
仮実行区間外ならば、命令を実行し（ステップＳ１５１５）、変数プロファイルを調べ（ステップＳ１５１７）、その値がオン（ＯＮ）であれば、プロファイルモジュール１３０４に実行サイクルやキャッシュヒット情報などのプロファイル作成に必要な情報を渡す（ステップＳ１５１８）。命令アドレス情報が仮実行アドレス情報区間内であれば、命令は実行されるが、実行結果出力やレジスタへの書き込みは行わず、キューの動き及びキャッシュユニットなどの外部へ直接影響しない部分のみをシミュレートする（ステップＳ１５１６）。これらの実行を仮実行とする。
【００８４】
この後、次に実行（仮実行）すべき命令のメモリアドレス情報を調べ（ステップＳ１５１９）、そのアドレス情報がプロファイル開始アドレス情報ならば変数プロファイルをオン（ＯＮ）にして（ステップＳ１５２０）、また、仮実行アドレス情報ならば、プロファイル作成を行った後に（ステップＳ１５２２）、図示しないレジスタ値などの必要な情報を引き継いで実行モードをノーマルモードからターボモードに移行する。ステップＳ１５１９でプロファイル開始アドレス情報でない場合はノーマルモードでシミュレーションを継続する。
【００８５】
ターボモードから実行モードが実行結果を出力しないノーマルモードに切り替わった部分から仮実行アドレス情報区間終了までの間は、キャッシュやキューの動きのみをシミュレートする。そのため、プロファイル開始アドレス情報からプロファイル情報の作成を開始したときには、キャッシュなどの情報が始めからノーマルモードで実行した場合と同一の状況になっている。そのため、全てをノーマルモードで実行して得られるプロファイルと、この第４実施形態で得られるプロファイルとの間には相違はないことになる。
【００８６】
このように、この第４実施形態ではプロファイル開始アドレス情報までは、実行モードを、ノーマルモードに比較して動作が速いターボモードで実行する。したがって、シミュレータが、プロファイル開始アドレス情報までに達するまでの時間が短縮され、その後は実行結果を出力しないノーマルモードで実行するため、キューやキャッシュなどの情報が書き込まれる。このため、この後の実行結果を出力するノーマルモードでプロファイルを得る場合に、全てをノーマルモードで実行した際に得られるプロファイルと同一のプロファイラを得ることができる。また、プロファイルを得た後はプロファイル終了アドレス情報から実行をターボモードで行うことによって、プロファイルを得た後の実行が速くなるため、プロファイルを得るシミュレータの全体的な実行速度（シミュレータ動作／動作検証シミュレーション）を大きく上げることができる。
【００８７】
（第５実施形態／第５の目的に対応）
図１３は本発明の第５実施形態における構成を示すブロック図である。
図１３において、この第５実施形態は、シミュレータのメモリモデルとしての実行すべき命令を予め格納している命令メモリモジュール１６０１と、ノーマルモードを実行するノーマルモジュール（Ｎｏｒｍａｌ  Ｍｏｄｕｌｅ）１６０２と、ターボモードを実行するターボモジュール（Ｔｕｒｂｏ  Ｍｏｄｕｌｅ）１６０３と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）１６０４と、ターボモードでの実行順序を記憶し、ノーマルモードでの実行順序を指示する実行順序記憶・指示部１６０７と、プロファイル開始アドレス情報（アドレス値）と仮実行アドレス情報区間の開始アドレス情報と仮実行アドレス情報区間の開始アドレス情報の実行回数が一組になって保存されている切替アドレス記憶部１６０８からなる。
【００８８】
ノーマルモジュール１６０２は、命令メモリモジュール１６０１から命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、分岐予測を行うブランチユニット（Ｂｒａｎｃｈ  Ｕｎｉｔ）と、命令の送り出しを行うディスパァッチユニット（Ｄｉｓｐａｔｃｈ  Ｕｎｉｔ）と、キャッシュへのアクセスを行うキャッシュユニット（Ｃａｃｈｅ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）からなる。
【００８９】
ターボモジュール１６０３には、命令メモリモジュール１６０１からの命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）と、命令をブロック化するブロックユニット（Ｂｌｏｃｋ  Ｕｎｉｔ）とからなる。
【００９０】
次に、第５実施形態の動作について説明する。
図１３において、ターボモジュール１６０３からノーマルモジュール１６０２への動作の切り替えが可能であり、ノーマルモジュール１６０２からターボモジュール１６０３への動作の切り替えが可能である。
【００９１】
また、プロファイルモジュール１６０４は、ノーマルモジュールからプロファイル情報を受け取って、そのプロファイル作成を行う。実行順序記憶・指示部１６０７には、実行モードがターボモードで行われているときに、この命令のアドレス情報を順に記憶していき、実行モードがノーマルモードで行われているときには、一時的に実行する順序を指示する。切替アドレス記憶部１６０８には、過去に実行されたファームウェアの種類ごとにプロファイル開始アドレス情報と、このとき算出された仮実行アドレス情報区間の開始アドレス情報と仮実行アドレス情報区間の開始アドレス情報の実行する回数が一組みになって保存されている。
【００９２】
図１４は第５実施形態のシミュレータの概略動作を説明するためのフローチャートである。
図１４において、シミュレータが、シミュレーション動作を開始する。この開始時の実行モードはターボモードである（ステップＳ１７０２）。このターボモードでのシミュレーション実行を継続し、命令メモリモジュール１６０１から読み込む命令アドレス情報（アドレス値）が、過去にシミュレートしたファームウェアと同一で過去にプロファイルを得たことがある場合には、仮実行アドレス情報区間の開始アドレス情報になり、その実行回数が切替アドレス記憶部１６０８に記憶されている実行回数と同一に達した場合に、実行結果を出力するノーマルモードに移行する。
【００９３】
過去にシミュレートしたファームウェアと同一で過去にプロファイルを得たことがない場合は、プロファイル開始アドレス情報に達したときに、その実行モードが、実行結果を出力しないノーマルモードに移行する（ステップＳ１７０３）。プロファイル作成を行わないノーマルモードでは、ターボモードで実行された命令の一部を再実行する。この場合、実行結果は出力されない。ただし、キャッシュやキューの情報は書き込まれる。実行結果を出力しないノーマルモードでの実行を進め、命令メモリモジュール１６０１から読み込み命令アドレス情報がプロファイル開始アドレス情報に達した場合に、実行結果を出力するノーマルモードに移行する（ステップＳ１７０４）。実行結果を出力するノーマルモードでのシミュレーションが進行し、実行した命令アドレス情報がプロファイル終了アドレス情報に達したときに、プロファイルを作成し（ステップＳ１７０５）、実行モードが再度ターボモードに移行する。
【００９４】
次に、この第５実施形態のシミュレータの動作を詳細に説明する。
図１５は第５実施形態の詳細なシミュレータ動作の処理手順を示すフローチャートである。
図１５において、まず、ターボモード動作について説明する。始めにファームウェアとプロファイル開始アドレス情報でプロファイルを作成していた場合は、このときの仮実行アドレス情報区間の開始アドレス情報を実行モード切替アドレス情報として設定する（ステップＳ１８０３）。命令メモリモジュール１６０１から命令を読み込んで（ステップＳ１８０４）、実行する（ステップＳ１８０５）。実行した命令が分岐命令か否かを判断し（ステップＳ１８０６）、分岐命令ならば命令のブロック化を行う（ステップＳ１８０７）。
【００９５】
次に、次の命令を命令メモリモジュール１６０１から読み込む前に、次に読み込むべき命令のアドレス情報がプロファイラ開始アドレス情報であるかを調べる（ステップＳ１８０８）。このアドレス情報がプロファイル開始アドレス情報の場合は、実行順序記憶・指示部１６０７において、ノーマルモードでの実行結果を出力せずに実行する区間（仮実行アドレス情報区間）を算出して設定する（ステップＳ１８０９）。具体的には、実行順序記憶・指示部１６０７によってプロファイル開始アドレス情報からシミュレーションの開始方向へたどり、キャッシュにアクセスする命令を数えていき、キャッシュの最大領域までの命令をカウントし、カウントし終えた場所にある命令アドレス情報を算出する。
【００９６】
この算出された命令アドレス情報からプロファイル開始アドレス情報までを仮実行アドレス情報区間とする。この後はターボモードを終了し、レジスタなどの必要な情報を引き継いで、実行モードをノーマルモードに移行する。このとき、変数プロファイルはオフ（ＯＦＦ）である。また、プロファイル開始アドレス情報と仮実行アドレス情報区間の開始アドレス情報と、そのアドレス情報命令の実行回数を切替アドレス記憶部１６０８に記憶する（ステップＳ１８１０）。次に、命令アドレス情報がプロファイル開始アドレス情報でない場合、実行モード切替アドレス情報であるかを調べる（ステップＳ１８１１）。
【００９７】
この調べにおいて、実行モード切替アドレス情報の場合は、このアドレス情報の命令の実行回数が切替アドレス記憶部１６０８に記憶されている実行回数と同一の場合に、ターボモードを終了し、レジスタ値などに必要な情報を引き継いで実行モードをノーマルモードに移行する。このとき、変数プロファイルはオフ（ＯＦＦ）である。次に、ステップＳ１８１１において、実行モード切替アドレス情報でない場合は、実行した命令アドレス情報を実行順序記憶・指示部１６０７に送出する（ステップＳ１８１２）。実行順序記憶・指示部１６０７は、送られてきた命令を順次記憶する。そして再度、ターボモードで次の命令を読み込んで、順次実行する。
【００９８】
次に、シミュレーションがノーマルモードに移行した場合について説明する。ターボモードから必要な情報を引き継いだ後のノーマルモードでは、命令メモリモジュール１６０１から命令を読み込み、キャッシュユニットでのキャッシュヒット・ミスヒットを集計する（ステップＳ１８１３）。このとき、仮実行アドレス情報区間が設定されているときには、命令を読み込むアドレス情報を実行順序記憶・指示部１６０７が決定する。実行順序記憶・指示部１６０７は、仮実行アドレス情報区間の開始アドレス情報からターボモードで実行された順次で終了アドレス情報までを、その順序で命令を読み込むアドレス情報を順次指示する。次に、命令が分岐命令か否かを判断し（ステップＳ１８１４）、この判断で分岐命令の場合は、分岐予測処理を行って（ステップＳ１８１５）、命令キューに追加する。ステップＳ１８１４において分岐命令でない場合は、直接、命令キューに追加する（ステップＳ１８１６）。
【００９９】
次に、命令が実行可能かを判断し（ステップＳ１８１７）、この判断で命令が実行可能な場合は、この命令のアドレス情報が仮実行アドレス情報区間内であるか区間外であるかを判断する（ステップＳ１８１８）。この判断で仮実行アドレス情報区間内の場合は、命令を実行し（ステップＳ１８１９）、変数プロファイルの値を調べる（ステップＳ１８２１）。この値がオン（ＯＮ）のときは、プロファイルモジュール１６０４に実行サイクルやキャッシュヒット情報などのプロファイル作成に必要な情報を渡す（ステップＳ１８２２）。命令アドレス情報が仮実行アドレス情報区間内では、命令を実行するが、実行結果出力やレジスタへの書き込みは行わずに、キュー動作やキャッシュなどの外部へ直接影響しない部分のみをシミュレートする（ステップＳ１８２０）。このようなシミュレーション実行を仮実行と称する。
【０１００】
この後は次に実行（仮実行）する命令のメモリアドレス情報を調べ（ステップＳ１８２３）、このアドレス情報がプロファイル開始アドレス情報の場合に、変数プロファイルをオン（ＯＮ）にする（ステップＳ１８２４）。そして、仮実行アドレス情報区間をクリアし（ステップＳ１８２４）、ノーマルモードでの実行を継続する。ステップＳ１８２３でプロファイル終了アドレス情報の場合は、プロファイルを作成し（ステップＳ１８２６）、レジスタ値などの情報を引き継いで実行モードをノーマルモードからターボモードに移行する（ステップＳ１８２３）。このアドレス情報がプロファイル開始アドレス情報の場合に、変数プロファイルをオン（ＯＮ）にする（ステップＳ１８２４）。そして、仮実行アドレス情報区間をクリアし（ステップＳ１８２５）、ノーマルモードでの実行を継続する。ステップＳ１８２３でプロファイル開始／終了アドレス情報でない場合は、ノーマルモードでの命令実行を継続する。
【０１０１】
実行モードがターボモードから実行結果を出力しないノーマルモードに切り替わったアドレス情報部分から仮実行アドレス情報区間終了までの間は、キャッシュやキューの動きのみをシミュレートしている。そのため、プロファイル開始アドレス情報からプロファイル情報を作成し始めるときには、キャッシュ情報などが、実行開始からノーマルモードで実行した場合と同一の状況となっている。この場合、全てをノーマルモードで実行して得られるプロファイルと、この第５実施形態によって得られるプロファイルは相違しないものとなっている。また、プロファイル開始アドレス情報と仮実行アドレス情報区間の開始アドレス情報とを対応付けて記憶しておくことによって、この次に同一のプロファイル開始アドレス情報が指定された場合に、仮実行アドレス情報区間を省略できるようになる。この実行結果、シミュレーション実行の無駄を省くことができる。
【０１０２】
このように、この第５実施形態では、過去のシミュレーション実行と同一のファームウェアで同様のプロファイル開始アドレス情報を指定された場合に、仮実行アドレス情報区間の開始アドレス情報、すなわち、実行モード切替アドレス情報で実行モードを、ノーマルモードからターボモードに移行させるために、仮実行アドレス情報区間の命令をターボモードと、実行結果を出力しないノーマルモードで二度実行しないようにしている。したがって、プロファイル情報の取得を開始するノーマルモードに達する時間を短縮できるようになる。
【０１０３】
（第６実施形態／第６の目的に対応）
図１６は本発明の第６実施形態における構成を示すブロック図である。
図１６において、この第６実施形態は、実行すべき命令を予め格納している命令メモリモジュール１９０１と、ノーマルモードを実行するノーマルモジュール（Ｎｏｒｍａｌ  Ｍｏｄｕｌｅ）１９０２と、ターボモードを実行するターボモジュール（Ｔｕｒｂｏ  Ｍｏｄｕｌｅ）１９０３と、プロファイルを作成するプロファイルモジュール（Ｐｒｏｆｉｌｅ  Ｍｏｄｕｌｅ）１９０４と、実行モードを切り替える命令のアドレス情報（アドレス値）を算出するモード切替アドレス算出部１９０７とからなる。
【０１０４】
ノーマルモジュール１９０２は、命令メモリモジュール１９０１から命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、分岐予測を行うブランチユニット（Ｂｒａｎｃｈ  Ｕｎｉｔ）と、命令を送出するディスパァッチユニット（Ｄｉｓｐａｔｃｈ  Ｕｎｉｔ）と、キャッシ・へのアクセスを行うキャッシュユニット（Ｃａｃｈｅ  Ｕｎｉｔ）と、命令キューと命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）からなる。
【０１０５】
ターボモジュール１９０３には、命令メモリモジュール１９０１からの命令を取り込むフェッチユニット（Ｆｅｔｃｈ  Ｕｎｉｔ）と、命令を実行するエキスキュートユニット（Ｅｘｅｃｕｔｅ  Ｕｎｉｔ）と、命令をブロック化するブロックユニット（Ｂｌｏｃｋ  Ｕｎｉｔ）とからなる。
【０１０６】
次に、第６実施形態の動作について説明する。
図１６において、ターボモジュール１９０３からノーマルモジュール１９０２への動作の切り替えが可能であり、ノーマルモジュール１９０２からターボモジュール１９０３への動作の切り替えが可能である。
【０１０７】
また、プロファイルモジュール１９０４は、ファームウェアプログラムを変更する前に、プロファイル作成を行う際に集められたプロファイル情報を有し、かつ、プロファイルを作成する。プロファイルモジュール１９０４は、ノーマルモジュールからプロファイル情報を受け取ってプロファイル作成を行う。モード切替アドレス算出部１９０７には、ファームウェアを変更する前の詳細なファームウェア情報とファームウェア変更後の詳細なファームウェア情報とが記録されており、モード切替開始アドレス情報とモード切替終了アドレス情報を算出する。
【０１０８】
図１７はシミュレータの概略動作を説明するためのフローチャートである。
図１７において、シミュレータが、シミュレーション動作を開始する。この開始時の実行モードは、ターボモードである（ステップＳ２００２）。このターボモードでのシミュレーション実行を継続し、命令メモリモジュール１９０１から読み込む命令アドレス情報が、モード切替アドレス算出部１９０７で指定されたモード切替開始アドレス情報に達した場合、実行モードがノーマルモードに移行する（ステップＳ２００３）。ノーマルモードでのシミュレーション実行が継続されて、実行した命令アドレス情報がモード切替終了アドレス情報になると、プロファイルを作成し（ステップＳ２００４）、実行モードが再度ターボモードに移行する。
【０１０９】
次に、この第６実施形態のシミュレータの動作を詳細に説明する。
図１８は第６実施形態の詳細なシミュレータ動作の処理手順を示すフローチャートであり、図１９は、プロファイル開始／終了アドレス情報に関する具体例を説明するための図である。
図１８及び図１９において、まず、ターボモード動作について説明する。始めにモード切替開始アドレス情報を算出する（ステップＳ２１０２）。具体的には、変更以前のファームウェアの詳細情報と変更後のファームウェアの詳細情報とを比較する。この比較でプロファイル開始アドレス情報からプロファイル終了アドレス情報までの間に変更があったブロックを検出する。このブロックの先頭アドレス情報をモード切替開始アドレス情報とする。
【０１１０】
次に、命令メモリモジュール１９０１から命令を読み込んで（ステップＳ２１０３）、その命令を実行する（ステップＳ２１０４）。この実行した命令が分岐命令か否かを判断し（ステップＳ２１０５）、分岐命令の場合は、命令のブロック化を行う（ステップＳ２１０６）。この後、次の命令を命令メモリモジュール１９０１から読み込む前に、次の読み込むべき命令のアドレス情報がモード開始アドレス情報であるかを調べる（ステップＳ２１０７）。そのアドレス情報がモード切替開始アドレス情報であれば、モード切替終了アドレス情報を算出する。具体的には、モード切替開始アドレス情報がある変更されたブロックの最終アドレス情報をモード切替終了アドレス情報とする。そして、ターボモードを終了し、レジスタの値などの必要な情報を引き継いで実行モードをノーマルモードに移行する。モード切替開始アドレス情報でない場合は、再度ターボモードで次の命令を読み込んで順次実行する。
【０１１１】
次に、シミュレーションが、ノーマルモードに移行した場合について説明する。
ターボモードから必要な情報を引き継いだ後、ノーマルモードでは命令メモリモジュール１９０１から命令を読み込んでキャッシュユニットのキャッシュヒット・ミスヒットを集計する（ステップＳ２１０９）。この命令が、分岐命令か否かを判断する（ステップＳ２１１０）。分岐命令の場合は、分岐予測処理を行った後に（ステップＳ２１１１）、命令キューに追加する。ステップＳ２１０９が分岐命令でない場合は、直接命令キューに追加する（ステップＳ２１２１）。命令が実行可能かを判断し（ステップＳ２１１３）、命令が実行可能な場合は、その命令を実行し（ステップＳ２１１４）、この実行後プロファイルモジュール１９０４に実行サイクル、キャッシュヒット情報などのプロファイル作成に必要な情報を渡す（ステップＳ２１１５）。
【０１１２】
この後は、次に実行すべき命令のメモリアドレス情報を調べ、そのアドレス情報がモード切替終了アドレス情報か否かを判断する（ステップＳ２１１６）。この調べでモード切替終了アドレス情報の場合は、ファームウェアが変更される前に実行して得たプロファイル情報と、このときに得られたプロファイル情報を整合した新たなプロファイルを作成した後に（ステップＳ２１１７）、次の命令のアドレス情報が、ファームウェアで変更された部分かを調べる（ステップＳ２１１８）。この調べで変更された部分である場合は、新たなモード切替終了アドレス情報を設定し（ステップＳ２１１９）、再度ノーマルモードで実行を繰り返す。ステップＳ２１１８で変更された部分でない場合は、レジスタ値などの必要な情報を引き継いで実行モードをノーマルモードからターボモードに移行する。次に、実行すべき命令のアドレス情報がモード切替終了アドレス情報でない場合は、ノーマルモードでのシミュレーションを継続する。
【０１１３】
このように、この第６実施形態では、ファームウェアにわずかに変更が加えられ、再度、同一のプロファイル区間でプロファイルを得る場合に、プロファイル開始アドレス情報からプロファイル終了アドレス情報までの全てをノーマルモードで実行することなく、プロファイル情報を得るためのノーマルモードの実行を、変更された部分のみに限定し、これ以外の実行をターボモードで行っている。したがって、プロファイルを得る時間までの時間が短縮され、シミュレーション実行速度（シミュレータ動作）が向上する。
【０１１４】
【発明の効果】
以上の説明から明らかなように、本発明によれば、プロファイルを得るシミュレーション実行が速くなって、結果的にシミュレータ動作（全体／総合的なシミュレーション）の高速化が可能になるという効果を有している。
【０１１５】
また、本発明によれば、プロファイル開始アドレス情報まで到達時間が短縮され、プロファイルを得るシミュレーション実行が速くなって、結果的にシミュレータ動作の高速化が可能になるという効果を有している。
【０１１６】
さらに、本発明によれば、プロファイルの情報取得を開始するノーマルモードに達する時間が短縮されて、結果的にシミュレータ動作の高速化が可能になるという効果を有している。
【図面の簡単な説明】
【図１】本発明の第１実施形態における構成を示すブロック図である。
【図２】第１実施形態の概略動作を説明するためのフローチャートである。
【図３】第１実施形態の詳細な動作の処理手順を示すフローチャートである。
【図４】第２実施形態の構成を示すブロック図である。
【図５】第２実施形態の概略動作を説明するためのフローチャートである。
【図６】第２実施形態の詳細な動作の処理手順を示すフローチャートである。
【図７】第３実施形態の構成を示すブロック図である。
【図８】第３実施形態の概略動作を説明するためのフローチャートである。
【図９】第３実施形態の詳細な動作の処理手順を示すフローチャートである。
【図１０】第４実施形態における構成を示すブロック図である。
【図１１】第４実施形態の概略動作を説明するためのフローチャートである。
【図１２】第４実施形態の詳細な動作の処理手順を示すフローチャートである。
【図１３】第５実施形態における構成を示すブロック図である。
【図１４】第５実施形態の概略動作を説明するためのフローチャートである。
【図１５】第５実施形態の詳細な動作の処理手順を示すフローチャートである。
【図１６】第６実施形態における構成を示すブロック図である。
【図１７】第６実施形態における概略動作を説明するためのフローチャートである。
【図１８】第６実施形態の詳細な動作の処理手順を示すフローチャートである。
【図１９】第６実施形態のプロファイル開始／終了アドレス情報の具体例を説明するための図である。
【図２０】従来例におけるシミュレータの全体構成を示すブロック図である。
【図２１】従来例にあってノーマルモードの処理手順を示すフローチャートである。
【図２２】従来例にあってターボモードの処理手順を示すフローチャートである。
【符号の説明】
１０１，７０１，１００１，１３０１，１６０１，１９０１  命令メモリモジュール
１０２，７０２，１００２，１３０２，１６０２，１９０２  ノーマルモジュール
１０３，７０３，１００３，１３０３，１６０３，１９０３  ターボモジュール
１０４，７０４，１００４，１３０４，１６０４，１９０４  プロファイルモジュール
７０７  モード切替条件記憶部
７０８  アドレスバッファ
１００７  モード切替条件算出部
１００８  実行順序記憶部
１３０７，１６０７  実行順序記憶・指示部
１６０８  切替アドレス記憶部
１９０７  モード切替アドレス算出部
【図１】
0004166992.tif 000002
【図２】
0004166992.tif 000003
【図３】
0004166992.tif 000004
【図４】
0004166992.tif 000005
【図５】
0004166992.tif 000006
【図６】
0004166992.tif 000007
【図７】
0004166992.tif 000008
【図８】
0004166992.tif 000009
【図９】
0004166992.tif 000010
【図１０】
0004166992.tif 000011
【図１１】
0004166992.tif 000012
【図１２】
0004166992.tif 000013
【図１３】
0004166992.tif 000014
【図１４】
0004166992.tif 000015
【図１５】
0004166992.tif 000016
【図１６】
0004166992.tif 000017
【図１７】
0004166992.tif 000018
【図１８】
0004166992.tif 000019
【図１９】
0004166992.tif 000020
【図２０】
0004166992.tif 000021
【図２１】
0004166992.tif 000022
【図２２】
0004166992.tif 000023