(57)【要約】【課題】ハードウェアモデルとソフトウェアとの協調シミュレーションにかかる処理時間の短縮化を図ること。【解決手段】シミュレーション装置１００は、ソフトウェア１０２がＲｅｇＷｒｉｔｅ命令またはＲｅｇＲｅａｄ命令を実行すると、ＡＰＩ１１２を呼び出す。続けて、シミュレーション装置１００は、ソフトウェア１０２のコンテキスト情報内に、ＡＰＩ１１２の処理内容をロードして、ＲｅｇＷｒｉｔｅ命令またはＲｅｇＲｅａｄ命令を実行する。呼び出されたＡＰＩ１１２は、アクセス要求が特定の記憶領域への読込要求か否かを判断する。アクセス要求が特定の記憶領域への読込要求でないと判断した場合、ＡＰＩ１１２は、メモリモデル１０３＿ｓにアクセスして、アクセス要求に対するアクセス処理を実行する。【選択図】図１
2014085956.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御プログラムであって、
コンピュータに、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する、
処理を実行させることを特徴とするシミュレーション制御プログラム。
【請求項２】
前記コンピュータに、
前記アクセス要求が前記特定の記憶領域への読込要求であると判断した場合、前記特定の記憶領域の記憶内容を更新する更新処理の実行要求を出力する処理を実行させ、
前記実行する処理は、
前記実行要求を出力した結果、前記ハードウェアモデルによって前記更新処理が完了した場合、前記特定の記憶領域を読み込んで、前記ソフトウェアに読込結果を出力することを特徴とする請求項１に記載のシミュレーション制御プログラム。
【請求項３】
前記記憶部は、さらに、前記ハードウェアモデルの記憶領域のうちの前記更新処理に用いられる情報の記憶先の記憶領域のアドレスを記憶しており、
前記コンピュータに、
前記記憶部を参照して、前記アクセス要求が前記記憶先の記憶領域への書込要求か否かを判断する処理を実行させ、
前記実行する処理は、
前記アクセス要求が前記記憶先の記憶領域への書込要求であると判断した場合、前記アクセス要求以降に前記ソフトウェアから発生する前記特定の記憶領域への読込要求に対して実行される前記更新処理に用いられる情報を蓄積するバッファに前記書込要求の書込データを書き込むことを特徴とする請求項２に記載のシミュレーション制御プログラム。
【請求項４】
コンピュータに、
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出し、
検出した前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する、
処理を実行させることを特徴とするシミュレーションプログラム。
【請求項５】
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御装置であって、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断する判断部と、
前記判断部によって前記アクセス要求が前記特定の記憶領域への読込要求でないと判断された場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する実行部と、
を有することを特徴とするシミュレーション制御装置。
【請求項６】
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出する検出部と、
前記検出部によって検出された前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断する判断部と、
前記判断部によって前記アクセス要求が前記特定の記憶領域への読込要求でないと判断された場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する実行部と、
を有することを特徴とするシミュレーション装置。
【請求項７】
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御方法であって、
コンピュータが、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する、
処理を実行することを特徴とするシミュレーション制御方法。
【請求項８】
コンピュータが、
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出し、
検出した前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する、
処理を実行することを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション制御プログラム、シミュレーションプログラム、シミュレーション制御装置、シミュレーション装置、シミュレーション制御方法、およびシミュレーション方法に関する。
【背景技術】
【０００２】
従来、ハードウェアの動作を検証する技術がある。たとえば、ハードウェアを模倣するエミュレーション装置が、エミュレーション装置が分割される複数の各クロックドメインに共通の制御情報を分配し、またクロックドメインに個別化したクロック制御を与える技術がある。
【０００３】
また、ハードウェアモデルとソフトウェアの協調シミュレーションを行う技術がある。たとえば、ソフトウェアシミュレータが保持するメモリモデルに従い検証対象回路を検証する場合にソフトウェアクロックを選択し、ハードウェアエミュレータが保持するメモリモデルに従い検証対象回路を検証する場合にハードウェアクロックを選択する技術がある。また、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）以外の周辺デバイスの動作にかかる部分を、ハードウェアの論理シミュレーションで実行し、ソフトウェアの部分を汎用の計算機上で実行する技術がある。また、ハードウェアのシミュレーションを複数のアプリケーションで実現し、実現したアプリケーションを連携動作する技術がある（たとえば、下記特許文献１〜６を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−３２０８０４号公報
【特許文献２】特開２００６−３４９６９９号公報
【特許文献３】特開２００７−４２１２２号公報
【特許文献４】特開２０１０−２５０３６５号公報
【特許文献５】特開平１０−２６０８６５号公報
【特許文献６】特開平１１−２９６４０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術において、ソフトウェアを検証対象とした協調シミュレーションの実行中に、ハードウェアモデルとソフトウェアとの間で実行権を切り替える処理が頻繁に発生する場合があり、シミュレーション時間の増大化を招く。
【０００６】
本発明は、上述した従来技術による問題点を解消するため、ハードウェアモデルとソフトウェアとの協調シミュレーションにかかる処理時間の短縮化を図るシミュレーション制御プログラム、シミュレーションプログラム、シミュレーション制御装置、シミュレーション装置、シミュレーション制御方法、およびシミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中にソフトウェアから呼び出されるシミュレーション制御プログラムであって、ソフトウェアから発生したアクセス要求が、ハードウェアモデルの記憶領域のうちのハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、特定の記憶領域への読込要求か否かを判断し、アクセス要求が特定の記憶領域への読込要求でないと判断した場合、ハードウェアモデルの記憶領域にアクセスして、アクセス要求に対するアクセス処理を実行するシミュレーション制御プログラム、シミュレーション制御装置、およびシミュレーション制御方法が提案される。
【０００８】
また、本発明の他の側面によれば、ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、ソフトウェアから、ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出し、検出したアクセス要求が、ハードウェアモデルの記憶領域のうちのハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、特定の記憶領域への読込要求か否かを判断し、アクセス要求が特定の記憶領域への読込要求でないと判断した場合、ソフトウェアによって、ハードウェアモデルの記憶領域にアクセスしてアクセス要求に対するアクセス処理を実行するシミュレーションプログラム、シミュレーション装置、およびシミュレーション方法が提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、ハードウェアモデルとソフトウェアとの協調シミュレーションにかかる処理時間の短縮化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施の形態にかかるシミュレーション装置の動作例を示す説明図である。
【図２】図２は、シミュレーション装置のハードウェア構成の一例を示すブロック図である。
【図３】図３は、シミュレーション装置の機能構成例を示すブロック図である。
【図４】図４は、処理テーブルの記憶内容の一例を示す説明図である。
【図５】図５は、ソフトウェアのソースコードの一例を示す説明図である。
【図６】図６は、メモリモデルのソースコードの一例を示す説明図である。
【図７】図７は、ハードウェアモデルのソースコードの一例を示す説明図である。
【図８Ａ】図８Ａは、ソフトウェアのソースコードとハードウェアモデルのソースコードのビルドの一例を示す説明図である。
【図８Ｂ】図８Ｂは、ソフトウェアのソースコードとハードウェアモデルのソースコードのビルドの他の例を示す説明図である。
【図９Ａ】図９Ａは、メモリモデルがハードウェアモデルに含まれる形態におけるＲｅｇＷｒｉｔｅ命令実行時のシミュレーション処理の一例を示すシーケンス図である。
【図９Ｂ】図９Ｂは、本実施の形態におけるＲｅｇＷｒｉｔｅ命令実行時のシミュレーション処理の一例を示すシーケンス図である。
【図１０Ａ】図１０Ａは、メモリモデルがハードウェアモデルに含まれる形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の一例を示すシーケンス図である。
【図１０Ｂ】図１０Ｂは、本実施の形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の一例を示すシーケンス図である。
【図１１Ａ】図１１Ａは、メモリモデルがハードウェアモデルに含まれる形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の他の例を示すシーケンス図である。
【図１１Ｂ】図１１Ｂは、本実施の形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の他の例を示すシーケンス図である。
【図１２】図１２は、同一のアドレスに連続してＲｅｇＷｒｉｔｅ命令を行う場合の動作の一例を示すシーケンス図である。
【図１３】図１３は、シミュレーション処理手順の一例を示すフローチャートである。
【図１４】図１４は、シミュレーション処理手順の他の例を示すフローチャートである。
【図１５】図１５は、ＲｅｇＲｅａｄ処理手順の一例を示すフローチャートである。
【図１６】図１６は、アドレスＣに対するハードウェアモデル処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示のシミュレーション制御プログラム、シミュレーションプログラム、シミュレーション制御装置、シミュレーション装置、シミュレーション制御方法、およびシミュレーション方法の実施の形態を詳細に説明する。本実施の形態にかかるシミュレーション制御プログラムについては、検証対象のソフトウェアから呼び出されるＡｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ（ＡＰＩ）として採用された例を用いて説明する。
【００１２】
図１は、本実施の形態にかかるシミュレーション装置の動作例を示す説明図である。本実施の形態にかかるシミュレーション装置１００は、ハードウェアモデル１０１とソフトウェア１０２との協調シミュレーションを行うコンピュータである。図１の（Ａ）では、シミュレーション装置１００のソフトウェア構成例について説明する。また、図１の（Ｂ）では、シミュレーション装置１００の動作例について説明する。
【００１３】
本実施の形態にかかるシミュレーション装置１００は、ソフトウェア１０２を検証対象とした協調シミュレーションを行う。開発者は、協調シミュレーションの結果を用いて、ソフトウェア１０２の動作が仕様通りの動作となっているかを確認する。一方、ハードウェアモデル１０１の動作は、ハードウェアモデル１０１の模擬対象となるハードウェアの動作と異なっていてもよい。本実施の形態にかかるシミュレーション装置１００は、ハードウェアモデル１０１の動作が、模擬対象となるハードウェアの動作と異なっていてもよいことを利用して、協調シミュレーションにかかる処理時間を短縮する。
【００１４】
図１の（Ａ）にて、シミュレーション装置１００は、ハードウェアモデル１０１と、ソフトウェア１０２と、メモリモデル１０３＿ｓと、シミュレータ１１１と、ＡＰＩ１１２と、を含む。
【００１５】
ハードウェアモデル１０１は、シミュレーション対象システムのうちのハードウェアの動作が記述されたモデルである。具体的に、ハードウェアモデル１０１は、ＳｙｓｔｅｍＣ、Ｖｅｒｉｌｏｇといったハードウェア記述言語で記述されている。シミュレータ１１１は、ハードウェアモデル１０１を読み込んで、ハードウェアモデル１０１の動作を実行するスレッドを生成する。ハードウェアモデル１０１の動作を実行するスレッドは、コンテキスト情報を有する。コンテキスト情報は、プログラムの実行に用いられる情報である。ハードウェアモデル１０１のコンテキスト情報は、たとえば、ハードウェアモデル１０１が使用する変数の値や、ハードウェアモデル１０１の状態を示す値である。
【００１６】
さらに、ハードウェアモデル１０１は、演算処理１２１を含む。演算処理１２１は、模擬対象となるハードウェアが実行する処理を、ハードウェア記述言語を用いて表現した処理である。模擬対象となるハードウェアの演算処理は、ハードウェア内の記憶領域に対して行われる処理となる。ハードウェア内の記憶領域は、たとえば、ハードウェアの状態を示すレジスタであったり、ハードウェアが処理に用いるデータを記憶するバッファであったりする。
【００１７】
このとき、模擬対象となるハードウェアの演算処理を、開発者により、あるがまま模擬された場合、演算処理１２１は、ハードウェア内の記憶領域を模したメモリモデル１０３＿ｒに対して行われる処理となる。しかし、ハードウェアモデル１０１がハードウェアの動作と異なっていてもよいことを利用し、演算処理１２１は、ハードウェア内の記憶領域を模しており、かつ、ソフトウェア１０２から直接アクセス可能なメモリモデル１０３＿ｓに対して行われる処理とする。なお、開発者は、ハードウェア内の記憶領域のうちの、ソフトウェア１０２によってアクセスされる記憶領域を、メモリモデル１０３＿ｓとして定義し、ソフトウェア１０２によってアクセスされない記憶領域を、メモリモデル１０３＿ｒとして定義してもよい。以下の説明では、本実施の形態にかかるハードウェアモデル１０１には、メモリモデル１０３＿ｒが存在しない場合について説明する。
【００１８】
ソフトウェア１０２は、シミュレーション対象システムのうちの模擬対象となるＣＰＵの処理が記述された実行オブジェクトである。具体的に、ソフトウェア１０２は、Ｃ言語、Ｃ＋＋言語といった言語で記述されている。シミュレータ１１１は、ソフトウェア１０２を読み込んで、模擬対象となるＣＰＵの動作を行うスレッドを生成する。また、模擬対象となるＣＰＵの動作を行うスレッドは、コンテキスト情報を有する。ソフトウェア１０２のコンテキスト情報は、たとえば、ソフトウェア１０２が使用する変数の値や、ソフトウェア１０２の状態を示す値である。
【００１９】
以下、説明を簡略化するため、ハードウェアモデル１０１の動作を実行するスレッドも、単にハードウェアモデル１０１と呼称する。同様に、ソフトウェア１０２を読み込んで、模擬対象となるＣＰＵの動作を行うスレッドも、単にソフトウェア１０２と呼称する。
【００２０】
シミュレータ１１１は、ハードウェアモデル１０１とソフトウェア１０２との協調シミュレーションを実行する。具体的に、シミュレータ１１１は、協調シミュレーションの進行度合いを示すシミュレーション時刻の進行に合わせて、ハードウェアモデル１０１とソフトウェア１０２との実行権の切換処理を行う。本実施の形態にかかるシミュレーション装置１００は、切換処理の回数を減少させて、シミュレーション時間の短縮化を図る。
【００２１】
ここで、ハードウェアモデル１０１からソフトウェア１０２に実行権を切り換える場合を例として、実行権の切換処理について説明する。シミュレータ１１１は、シミュレーション装置１００のＣＰＵのレジスタに設定されているハードウェアモデル１０１のコンテキスト情報をシミュレーション装置１００のＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）に退避する。次に、シミュレータ１１１は、シミュレーション装置１００のＲＡＭに記憶されているソフトウェア１０２のコンテキスト情報を、シミュレーション装置１００のＣＰＵのレジスタに設定する。以上の処理を実行することにより、シミュレータ１１１は、ハードウェアモデル１０１からソフトウェア１０２に実行権を切り換える。
【００２２】
ＡＰＩ１１２は、シミュレータ１１１が提供する機能であり、シミュレータ１１１を制御する。具体的に、ＡＰＩ１１２は、メモリモデル１０３＿ｓへの読込処理を提供するＲｅｇＲｅａｄ命令と、メモリモデル１０３＿ｓへの書込処理を提供するＲｅｇＷｒｉｔｅ命令と、を有する。ＡＰＩ１１２が行うシミュレータ１１１への制御内容として、たとえば、ＡＰＩ１１２の呼び元となったソフトウェア１０２から実行権を移し、シミュレータ１１１に対して、ハードウェアモデル１０１に実行権を設定するように指示する。
【００２３】
次に、図１の（Ｂ）にて、シミュレーション装置１００の動作例について説明する。図１の（Ｂ）では、ソフトウェア１０２が、“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０２）；”を呼び出した例を示している。“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０２）；”は、メモリモデル１０３＿ｓ内のアドレスＡに対する０ｘ０２の書込処理である。
【００２４】
シミュレーション装置１００は、ソフトウェア１０２がＲｅｇＷｒｉｔｅ命令またはＲｅｇＲｅａｄ命令を実行すると、ＡＰＩ１１２を呼び出す。続けて、シミュレーション装置１００は、ソフトウェア１０２のコンテキスト情報内に、ＡＰＩ１１２の処理内容をロードして、ＲｅｇＷｒｉｔｅ命令またはＲｅｇＲｅａｄ命令を実行する。シミュレーション装置１００は、ＡＰＩ１１２の処理内容に従ってＲｅｇＷｒｉｔｅ命令またはＲｅｇＲｅａｄ命令を実行する。
【００２５】
呼び出されたＡＰＩ１１２は、アクセス要求が特定の記憶領域への読込要求か否かを判断する。ここで、特定の記憶領域とは、メモリモデル１０３＿ｓ内のうちのハードウェアモデル１０１によって記憶内容が更新される記憶領域のことである。図１の（Ｂ）の例では、ＲｅｇＷｒｉｔｅ命令が呼び出されたため、書込要求が発生していることから、ＡＰＩ１１２は、アクセス要求が特定の記憶領域への読込要求でないと判断する。
【００２６】
アクセス要求が特定の記憶領域への読込要求でないと判断した場合、ＡＰＩ１１２は、メモリモデル１０３＿ｓにアクセスして、アクセス要求に対するアクセス処理を実行する。図１の（Ｂ）の例では、ＡＰＩ１１２は、アドレスＡに０ｘ０２を書き込んで、書込完了をソフトウェア１０２に通知する。
【００２７】
このように、シミュレーション装置１００は、ソフトウェア１０２のアクセス要求によっては、ハードウェアモデル１０１に記憶領域に関する処理をさせず、ソフトウェア１０２から呼び出されるＡＰＩ１１２にて処理する。これにより、シミュレーション装置１００は、ハードウェアモデル１０１とソフトウェア１０２との切換回数を減少させることができるため、協調シミュレーションにかかる処理時間を短縮することができる。以下、図２〜図１６を用いて、シミュレーション装置１００について詳細に説明する。
【００２８】
（シミュレーション装置１００のハードウェア）
図２は、シミュレーション装置のハードウェア構成の一例を示すブロック図である。図２において、シミュレーション装置１００は、ＣＰＵ２０１と、Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）２０２と、ＲＡＭ２０３と、を含む。また、シミュレーション装置１００は、ディスクドライブ２０４と、ディスク２０５と、通信インターフェース２０６と、を含む。また、シミュレーション装置１００は、ディスプレイ２０７と、キーボード２０８と、マウス２０９とを含む。また、ＣＰＵ２０１〜マウス２０９はバス２１０によってそれぞれ接続されている。
【００２９】
ＣＰＵ２０１は、シミュレーション装置１００の全体の制御を司る演算処理装置である。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。
【００３０】
ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ２０４には、たとえば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ２０４が磁気ディスクドライブである場合、ディスク２０５には、磁気ディスクを採用することができる。また、ディスクドライブ２０４が光ディスクドライブである場合、ディスク２０５には、光ディスクを採用することができる。また、ディスクドライブ２０４がソリッドステートドライブである場合、ディスク２０５には、半導体素子メモリを採用することができる。
【００３１】
通信インターフェース２０６は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース２０６は、通信回線を通じてネットワーク２１１となるＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）、インターネットなどに接続され、ネットワーク２１１を介して他の装置に接続される。通信インターフェース２０６には、たとえば、モデムやＬＡＮアダプタなどを採用することができる。
【００３２】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ２０７には、たとえば、Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ（ＣＲＴ）、Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ（ＴＦＴ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３３】
キーボード２０８は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード２０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２０９は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス２０９は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００３４】
（シミュレーション装置１００の機能構成）
次に、シミュレーション装置１００の機能について説明する。図３は、シミュレーション装置の機能構成例を示すブロック図である。シミュレーション装置１００は、判断部３０１と、出力部３０２と、実行部３０３とを含む。制御部となる判断部３０１〜実行部３０３は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、判断部３０１〜実行部３０３の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などである。または、通信インターフェース２０６を経由して他のＣＰＵが実行することにより、判断部３０１〜実行部３０３の機能を実現してもよい。
【００３５】
また、シミュレーション装置１００は、処理テーブル３１０にアクセス可能である。処理テーブル３１０は、特定の記憶領域のアドレスを記憶する。たとえば、メモリモデル１０３＿ｓが、アドレスＡ、アドレスＢ、アドレスＣの記憶内容を記憶するとする。このとき、処理テーブル３１０には、特定の記憶領域のアドレスとして、アドレスＣを記憶する。また、処理テーブル３１０は、特定の記憶領域が複数ある場合、特定の記憶領域の上限のアドレスと下限のアドレスとを記憶していてもよい。
【００３６】
また、処理テーブル３１０は、ハードウェアモデル１０１の記憶領域のうちの更新処理に用いられる情報の記憶先の記憶領域のアドレスを記憶していてもよい。たとえば、処理テーブル３１０は、アドレスＣの記憶内容が更新される際に、ハードウェアモデル１０１の更新処理に用いられる情報の記憶先の記憶領域のアドレスであるアドレスＡを記憶する。以降の説明では、ハードウェアモデル１０１の更新処理に用いられる情報の記憶先の記憶領域を、「更新処理に用いられる記憶領域」と称する。また、処理テーブル３１０は、ＲＡＭ２０３、ディスク２０５といった記憶装置に格納されている。また、処理テーブル３１０の記憶内容の一例は、図４にて後述する。
【００３７】
判断部３０１は、処理テーブル３１０を参照して、アクセス要求のアクセス先のアドレスに基づいて、アクセス要求が特定の記憶領域への読込要求か否かを判断してもよい。たとえば、判断部３０１は、アクセス要求のアクセス先のアドレスが処理テーブル３１０に記憶されている上限のアドレスと下限のアドレスの間であり、かつ、アクセス要求が読込要求であれば、アクセス要求が特定の記憶領域への読込要求であると判断する。
【００３８】
また、判断部３０１は、処理テーブル３１０を参照して、アクセス要求のアクセス先のアドレスに基づいて、アクセス要求が更新処理に用いられる記憶領域への書込要求であるか否かを判断する。なお、判断結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００３９】
出力部３０２は、判断部３０１によってアクセス要求が特定の記憶領域への読込要求であると判断された場合、特定の記憶領域を更新する更新処理の実行要求を出力する。たとえば、判断部３０１が、アクセス要求が特定の記憶領域となるアドレスＣへの読込要求であると判断したとする。このとき、出力部３０２は、アドレスＣを更新する更新処理の実行要求を出力する。具体的な出力例として、たとえば、出力部３０２は、シミュレータ１１１に、ハードウェアモデル１０１に対する実行要求を出力する。続けて、シミュレータ１１１は、実行権をソフトウェア１０２からハードウェアモデル１０１に切り換える。実行権を得たハードウェアモデル１０１は、更新処理を実行する。
【００４０】
実行部３０３は、判断部３０１によってアクセス要求が特定の記憶領域への読込要求でないと判断された場合、メモリモデル１０３＿ｓにアクセスして、アクセス要求に対するアクセス処理を実行する。たとえば、判断部３０１が、アクセス要求を特定の記憶領域とならない、アドレスＢへの読込要求であると判断したとする。このとき、実行部３０３は、メモリモデル１０３＿ｓにアクセスして、アドレスＢへの読込処理を実行する。また、判断部３０１が、アクセス要求を特定の記憶領域となる、アドレスＣへの書込要求であると判断したとする。このとき、実行部３０３は、メモリモデル１０３＿ｓにアクセスして、アドレスＣへの書込処理を実行する。
【００４１】
また、実行部３０３は、出力部３０２によって実行要求が出力された結果、ハードウェアモデル１０１によって更新処理が実行された場合、特定の記憶領域を読み込んで、ソフトウェア１０２に読込結果を通知してもよい。たとえば、実行部３０３は、ハードウェアモデル１０１が更新処理を実行して、アドレスＣの記憶内容が更新された後、アドレスＣの記憶内容を読み込んで、ソフトウェア１０２に読込結果を通知する。
【００４２】
また、実行部３０３は、判断部３０１によってアクセス要求が更新処理に用いられる記憶領域への書込要求であると判断された場合、バッファに書込要求の書込データを書き込む。書き込んだ後、実行部３０３は、書込完了通知をソフトウェア１０２に出力してもよい。また、ソフトウェア１０２が、書込要求に対する応答を待たずに処理を進める場合、実行部３０３は、書込完了通知をソフトウェア１０２に出力しなくともよい。ここで、バッファは、アクセス要求以降に発生する特定の記憶領域への読込要求に対して実行される更新処理に用いられる情報を蓄積するバッファである。バッファは、たとえば、Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ（ＦＩＦＯ：先入れ先出し）方式を用いて、情報を蓄積する。
【００４３】
たとえば、更新処理に用いられる記憶領域のアドレスをアドレスＡとし、特定の記憶領域をアドレスＣとする。さらに、ソフトウェア１０２から２回のアクセス要求が発生したとして、１回目のアクセス要求が、アドレスＡに対する書込データ“０ｘ０２”の書込要求であるとする。２回目のアクセス要求が、アドレスＡに対する書込データ“０ｘ０３”の書込要求であるとする。バッファは、１回目のアクセス要求となる書込データ“０ｘ０２”と２回目のアクセス要求となる書込データ“０ｘ０３”を記憶する。２回目のアクセス要求以降、アドレスＣへの読込要求が発生した場合、ハードウェアモデル１０１は、書込データ“０ｘ０２”と書込データ“０ｘ０３”とを用いて、アドレスＣに対する更新処理を実行する。
【００４４】
ところで、本実施の形態では、ＡＰＩ１１２が呼び出される場合、アクセス要求が発生していることになるため、ＡＰＩ１１２は、アクセス要求の発生を検出しなくてもよい。一方、他の形態として、シミュレータ１１１が、ハードウェアモデル１０１とソフトウェア１０２との協調シミュレーションの実行中に、ソフトウェア１０２から、ハードウェアモデル１０１の記憶領域へのアクセス要求が発生したことを検出してもよい。具体的には、シミュレータ１１１は、ソフトウェア１０２が実行する命令を監視しており、ソフトウェア１０２が実行した命令がＲｅｇＷｒｉｔｅ命令かＲｅｇＲｅａｄ命令かを検出する。検出した結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００４５】
アクセス要求が発生したことを検出した場合、判断部３０１〜実行部３０３が、上述した処理を実行する。判断部３０１〜実行部３０３は、ＡＰＩ１１２に含まれていてもよいし、シミュレータ１１１に含まれていてもよい。
【００４６】
続けて、図４〜図１６を用いて、処理テーブル３１０の説明と、ハードウェアモデル１０１と、ソフトウェア１０２と、シミュレータ１１１の動作について説明する。また、ハードウェアモデル１０１について、異なるハードウェアを模した、ハードウェアモデル１０１＃１とハードウェアモデル１０１＃２を用いて説明を行う。
【００４７】
図４は、処理テーブルの記憶内容の一例を示す説明図である。図４に示す処理テーブル３１０は、レコード４０１−１〜４０１−３を記憶する。処理テーブル３１０は、指定アドレス、対応ハードウェアモデル、処理内容という３つのフィールドを含む。指定アドレスフィールドには、メモリモデル１０３＿ｓ内のアドレスが格納される。対応ハードウェアモデルフィールドには、アドレスに対して書込を行うハードウェアモデル１０１の識別情報が格納される。処理内容フィールドには、ハードウェアモデル１０１またはソフトウェア１０２が指定アドレスに対して実行する処理内容が格納される。
【００４８】
たとえば、レコード４０１−１は、指定アドレスがアドレスＡであり、アドレスＡに対して書き込むハードウェアモデル１０１が無いことを示す。さらに、レコード４０１−１は、アドレスＡに対するＷｒｉｔｅアクセス時には、処理内容が、ソフトウェア１０２がアドレスＡに書込データを書き込むことを示す。また、レコード４０１−１は、アドレスＡに対するＲｅａｄアクセス時には、処理内容が、ソフトウェア１０２がアドレスＡを読み込むことを示す。
【００４９】
また、レコード４０１−３は、指定アドレスがアドレスＣであり、アドレスＣに対して書き込むハードウェアモデル１０１がハードウェアモデル１０１＃１であることを示す。さらに、レコード４０１−３は、アドレスＣに対するＲｅａｄアクセス時には、処理内容が、ハードウェアモデル１０１＃１がアドレスＡとアドレスＢの和をアドレスＣに書き込んだ後、ソフトウェア１０２がアドレスＣを読み込むことを示す。
【００５０】
また、処理テーブル３１０は、更新処理に用いられる記憶領域であるか否かを示す識別子を格納するフィールドを有していてもよい。たとえば、アドレスＡについて格納するレコード４０１−１は、更新処理に用いられる記憶領域であることを示す識別子を有してもよい。同様に、たとえば、アドレスＢについて格納するレコード４０１−２は、更新処理に用いられる記憶領域でないことを示す識別子を有してもよい。
【００５１】
図５は、ソフトウェアのソースコードの一例を示す説明図である。図５では、ソフトウェアソースコード５０１に含まれる、行番号０００１〜行番号０００３について説明する。行番号０００１の命令“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０２）；”は、アドレスＡに値０ｘ０２を書き込むことを示す。行番号０００２の命令“ＲｅｇＷｒｉｔｅ（アドレスＢ，０ｘ０３）；”は、アドレスＢに値０ｘ０３を書き込むことを示す。行番号０００３の命令“Ｒｅｓｕｌｔ＝ＲｅｇＲｅａｄ（アドレスＣ）；”は、アドレスＣから演算結果を読み込むことを示す。
【００５２】
図６は、メモリモデルのソースコードの一例を示す説明図である。図６では、メモリモデルソースコード６０１に含まれる、アドレスＡ〜アドレスＣのソースコードを示す。アドレスＡ〜アドレスＣは、ｉｎｔ型にて定義されている。また、更新処理に用いられる記憶領域であって、同じアドレスに連続してアクセスされる可能性がある場合には、開発者は配列にて定義してもよい。たとえば、更新処理に用いられる記憶領域となるアドレスＡが２回連続してアクセスされる可能性がある場合、開発者は“ｉｎｔ  アドレスＡ［２］；”として定義する。さらに、アドレスＡ［２］を先入れ先出し方式にてアクセスするため、開発者は、アドレスＡ［２］に対するリードポインタ、ライトポインタを定義してもよい。リードポインタ、ライトポインタは、ＡＰＩ１１２、ハードウェアモデル１０１にて用いられる。
【００５３】
図７は、ハードウェアモデルのソースコードの一例を示す説明図である。図７では、ハードウェアモデルソースコード７０１に含まれる、ハードウェアモデル記述言語に従って、ハードウェアモデル１０１の動作を記述したソースコードを示している。図７に示すハードウェアモデルソースコード７０１は、ハードウェアモデル１０１＃１のヘッダファイルとなる“ｈｗ１＿ｍｏｄｅｌ．ｈ”と、ソースファイルとなる“ｈｗ１＿ｍｏｄｅｌ．ｃ”を示している。“ｈｗ１＿ｍｏｄｅｌ．ｈ”は、ハードウェアモデル１０１＃１の入出力のポートとプロセスの宣言を行っている。“ｈｗ１＿ｍｏｄｅｌ．ｃ”は、ハードウェアモデル１０１＃１のプロセスの実装を記述している。
【００５４】
図８Ａは、ソフトウェアのソースコードとハードウェアモデルのソースコードのビルドの一例を示す説明図である。図８Ａでは、命令セットレベルでシミュレーションを行う命令セットシミュレータを用いた場合の、ビルドの一例を示す。ビルドとは、実行オブジェクトを生成する処理のことであり、具体的には、ソースコードから中間言語ファイルを生成するコンパイルと、中間言語ファイルを結合して実行オブジェクトを生成するリンクとを行う。ビルドを行う装置は、シミュレーション装置１００でもよいし、他の装置でもよい。図８Ａおよび図８Ｂでは、シミュレーション装置１００がビルドを行う例にて説明する。
【００５５】
用語の定義として、協調シミュレーションの模擬対象となるＣＰＵを、「ターゲット」と呼称する。また、ターゲットが実行可能なコードを、「ターゲットコード」と呼称する。一方、ＣＰＵ２０１が実行可能なコードを、「ネイティブコード」と呼称する。
【００５６】
シミュレーション装置１００は、ソフトウェアソースコード５０１を、ターゲット用にコンパイルおよびリンクして、ターゲットコードで記述されたソフトウェア実行オブジェクト８０１を生成する。ソフトウェア実行オブジェクト８０１には、ＲｅｇＲｅａｄ命令またはＲｅｇＷｒｉｔｅ命令が呼ぶコードが含まれる。また、シミュレーション装置１００は、ハードウェアモデルソースコード７０１とＡＰＩソースコード８０２とを、ネイティブ用にコンパイルおよびリンクして、ネイティブコードで記述されたハードウェアモデル実行オブジェクト８０３を生成する。ＡＰＩソースコード８０２は、ＡＰＩ１１２の処理内容が記述されたソースコードである。
【００５７】
シミュレータ１１１は、ソフトウェア実行オブジェクト８０１を、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ（ＩＳＳ）８１０を用いて読み込んで、ソフトウェア１０２を生成する。また、シミュレータ１１１は、ハードウェアモデル実行オブジェクト８０３を読み込んでハードウェアモデル１０１を生成する。
【００５８】
図８Ｂは、ソフトウェアのソースコードとハードウェアモデルのソースコードのビルドの他の例を示す説明図である。図８Ｂは、ＩＳＳ８１０を用いない例を示している。
【００５９】
シミュレーション装置１００は、ソフトウェアソースコード５０１を、ネイティブ用にコンパイルおよびリンクして、ネイティブコードで記述されたソフトウェア実行オブジェクト８０４を生成する。ソフトウェア実行オブジェクト８０４には、ＲｅｇＲｅａｄ命令またはＲｅｇＷｒｉｔｅ命令が呼ぶコードが含まれる。ハードウェアモデルソースコード７０１とＡＰＩソースコード８０２のコンパイル、リンクについては図８Ａと同等であるため、説明を省略する。
【００６０】
シミュレータ１１１は、ソフトウェア実行オブジェクト８０４とハードウェアモデル実行オブジェクト８０３を読み込んでソフトウェア１０２とハードウェアモデル１０１を生成する。
【００６１】
以下、図９Ａ〜図１１Ｂにて、ＲｅｇＷｒｉｔｅ命令実行時と、ＲｅｇＲｅａｄ命令実行時のシーケンス図を示す。図９Ａと図９Ｂでは、ＲｅｇＷｒｉｔｅ命令実行時のシーケンス図を示す。図１０Ａと図１０Ｂでは、特定の記憶領域へのＲｅｇＲｅａｄ命令実行時のシーケンス図を示す。図１１Ａと図１１Ｂでは、特定の記憶領域でない記憶領域へのＲｅｇＲｅａｄ命令実行時のシーケンス図を示す。
【００６２】
図９Ａは、メモリモデルがハードウェアモデルに含まれる形態におけるＲｅｇＷｒｉｔｅ命令実行時のシミュレーション処理の一例を示すシーケンス図である。図９Ａにおいて、ソフトウェア１０２は、“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０２）；”を実行する（ステップＳ９０１）。アドレスＡに値０ｘ０２を書き込むため、実行権がシミュレータ１１１に切り替わり、シミュレータ１１１は、アドレスＡに対応する処理内容を実行するハードウェアモデル１０１を選択する（ステップＳ９０２）。本実施の形態では、アドレスＡに対応するハードウェアモデルがハードウェアモデル１０１＃２であるとする。
【００６３】
次に、シミュレータ１１１は、実行権をハードウェアモデル１０１＃２に設定する（ステップＳ９０３）。実行権を得たハードウェアモデル１０１＃２は、アドレスＡに値０ｘ０２を書き込む（ステップＳ９０４）。ハードウェアモデル１０１＃２の処理が終了したため、シミュレータ１１１は、実行権をシミュレータ１１１に設定する（ステップＳ９０５）。続けて、シミュレータ１１１は、実行権をソフトウェア１０２に設定する（ステップＳ９０６）。実行権を得たソフトウェア１０２は、次の命令を実行する。
【００６４】
図９Ｂは、本実施の形態におけるＲｅｇＷｒｉｔｅ命令実行時のシミュレーション処理の一例を示すシーケンス図である。図９Ｂにおいて、ソフトウェア１０２は、“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０２）；”を実行することにより、アドレスＡに値０ｘ０２を書き込む（ステップＳ９５１）。続けて、ソフトウェア１０２は、次の命令を実行する。
【００６５】
ここで、図９Ａと図９Ｂの実行結果を用いて、実行権の切換回数について説明する。図９Ａでは、ステップＳ９０１、ステップＳ９０３、ステップＳ９０５、ステップＳ９０６にて実行権の切換が行われており、実行権の切換回数は４回である。一方、図９Ｂでは、実行権の切換が行われておらず、実行権の切換回数は０回である。このように、ソフトウェア１０２が実行する命令群にＲｅｇＷｒｉｔｅ命令が含まれる場合、シミュレーション装置１００は、実行権の切換回数が少なくなるため、協調シミュレーションにかかる処理時間を短縮することができる。
【００６６】
図１０Ａは、メモリモデルがハードウェアモデルに含まれる形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の一例を示すシーケンス図である。図１０Ａにおいて、ソフトウェア１０２は、“Ｒｅｓｕｌｔ＝ＲｅｇＲｅａｄ（アドレスＣ）；”を実行する（ステップＳ１００１）。アドレスＣを読み込むため、実行権がシミュレータ１１１に切り替わり、シミュレータ１１１は、アドレスＣに対応するハードウェアモデル１０１を選択する（ステップＳ１００２）。本実施の形態では、アドレスＣに対応するハードウェアモデル１０１がハードウェアモデル１０１＃１であるとする。
【００６７】
次に、シミュレータ１１１は、実行権をハードウェアモデル１０１＃１に設定する（ステップＳ１００３）。実行権を得たハードウェアモデル１０１＃１は、アドレスＣに対応する処理内容を取得する（ステップＳ１００４）。次に、ハードウェアモデル１０１＃１は、処理内容の引数の１つ目となるアドレスＡの値を読み込む（ステップＳ１００５）。同様に、ハードウェアモデル１０１＃１は、処理内容の引数の２つ目となるアドレスＢの値を読み込む（ステップＳ１００６）。
【００６８】
引数を読み込んだため、ハードウェアモデル１０１＃１は、処理内容となる“アドレスＣ＝アドレスＡ＋アドレスＢ”を実行する（ステップＳ１００７）。具体的に、ハードウェアモデル１０１＃１は、アドレスＣの値を、アドレスＡの値０ｘ０２＋アドレスＢの値０ｘ０３＝０ｘ０５として算出する。次に、ハードウェアモデル１０１＃１は、アドレスＣに演算結果を書き込む（ステップＳ１００８）。また、ハードウェアモデル１０１＃１は、演算結果をソフトウェア１０２に通知する（ステップＳ１００９）。続けて、ハードウェアモデル１０１＃１の処理が終了したため、シミュレータ１１１は、実行権をシミュレータ１１１に設定する（ステップＳ１０１０）。
【００６９】
続けて、シミュレータ１１１は、実行権をソフトウェア１０２に設定する（ステップＳ１０１１）。実行権を得たソフトウェア１０２は、ハードウェアモデル１０１＃１から受け付けた値をＲｅｓｕｌｔに設定する（ステップＳ１０１２）。続けて、ソフトウェア１０２は、次の命令を実行する。
【００７０】
図１０Ｂは、本実施の形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の一例を示すシーケンス図である。図１０Ｂにおいて、ステップＳ１０５５〜ステップＳ１０５８は、ステップＳ１００５〜ステップＳ１００８と同一の処理内容であるため、説明を省略する。
【００７１】
図１０Ｂにおいて、ソフトウェア１０２は、“Ｒｅｓｕｌｔ＝ＲｅｇＲｅａｄ（アドレスＣ）；”を実行する（ステップＳ１０５１）。アドレスＣを読み込むため、実行権がシミュレータ１１１に切り替わり、シミュレータ１１１は、アドレスＣの値を更新する処理内容を実行するハードウェアモデル１０１を選択する（ステップＳ１０５２）。本実施の形態では、アドレスＣの値を更新する処理内容を実行するハードウェアモデル１０１がハードウェアモデル１０１＃１であるとする。
【００７２】
次に、シミュレータ１１１は、実行権をハードウェアモデル１０１＃１に設定する（ステップＳ１０５３）。実行権を得たハードウェアモデル１０１＃１は、アドレスＣの値を更新する処理内容を取得する（ステップＳ１０５４）。次に、ハードウェアモデル１０１＃１は、ステップＳ１０５５の処理を実行する。
【００７３】
ステップＳ１０５８の処理実行後、ハードウェアモデル１０１＃１の処理が終了したため、シミュレータ１１１は、実行権をシミュレータ１１１に設定する（ステップＳ１０５９）。続けて、シミュレータ１１１は、実行権をソフトウェア１０２に設定する（ステップＳ１０６０）。実行権を得たソフトウェア１０２は、アドレスＣの値を読み込む（ステップＳ１０６１）。次に、ソフトウェア１０２は、読み込んだ値をＲｅｓｕｌｔに設定する（ステップＳ１０６２）。続けて、ソフトウェア１０２は、次の命令を実行する。
【００７４】
ここで、図１０Ａと図１０Ｂの実行結果を用いて、実行権の切換回数について説明する。図１０Ａでは、ステップＳ１００１、ステップＳ１００３、ステップＳ１０１０、ステップＳ１０１１にて実行権の切換が行われており、実行権の切換回数は４回である。一方、図１０Ｂでは、ステップＳ１０５１、ステップＳ１０５３、ステップＳ１０５９、ステップＳ１０６０にて実行権の切換が行われており、実行権の切換回数は４回である。このように、特定のアドレスへのＲｅｇＲｅａｄ命令が含まれる場合、シミュレーション装置１００の実行権の切換回数は、メモリモデル１０３＿ｓがハードウェアモデル１０１に含まれる形態におけるシミュレーション装置と実行権の切換回数と同一となる。
【００７５】
図１１Ａは、メモリモデルがハードウェアモデルに含まれる形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の他の例を示すシーケンス図である。図１１Ａにおいて、ソフトウェア１０２は、“Ｒｅｓｕｌｔ＝ＲｅｇＲｅａｄ（アドレスＡ）；”を実行する（ステップＳ１１０１）。アドレスＡを読み込むため、実行権がシミュレータ１１１に切り替わり、シミュレータ１１１は、アドレスＡに対応したハードウェアモデル１０１を選択する（ステップＳ１１０２）。本実施の形態では、アドレスＡに対応するハードウェアモデル１０１がハードウェアモデル１０１＃２であるとする。
【００７６】
次に、シミュレータ１１１は、実行権をハードウェアモデル１０１＃２に設定する（ステップＳ１１０３）。実行権を得たハードウェアモデル１０１＃２は、アドレスＡから値を読み込む（ステップＳ１１０４）。次に、ハードウェアモデル１０１＃２は、読み込んだ値をソフトウェア１０２に通知する（ステップＳ１１０５）。続けて、ハードウェアモデル１０１＃２の処理が終了したため、シミュレータ１１１は、実行権をシミュレータ１１１に設定する（ステップＳ１１０６）。続けて、シミュレータ１１１は、実行権をソフトウェア１０２に設定する（ステップＳ１１０７）。実行権を得たソフトウェア１０２は、ハードウェアモデル１０１＃２から受け付けた値をＲｅｓｕｌｔに設定する（ステップＳ１１０８）。続けて、ソフトウェア１０２は、次の命令を実行する。
【００７７】
図１１Ｂは、本実施の形態におけるＲｅｇＲｅａｄ命令実行時のシミュレーション処理の他の例を示すシーケンス図である。図１１Ｂにおいて、ソフトウェア１０２は、“Ｒｅｓｕｌｔ＝ＲｅｇＲｅａｄ（アドレスＡ）；”を実行する（ステップＳ１１５１）。アドレスＡを読み込むため、実行権がシミュレータ１１１に切り替わり、シミュレータ１１１は、処理テーブル３１０を参照して、アドレスＡの値を更新する処理内容を実行するハードウェアモデル１０１を選択する（ステップＳ１１５２）。図４に示したように、レコード４０１−１の対応ハードウェアモデルフィールドには、Ａの値を更新する処理内容を実行するハードウェアモデル１０１が無いことを示す“無し”が格納されている。したがって、シミュレータ１１１は、アドレスＡに対応するハードウェアモデル１０１が無いと判断し、実行権をソフトウェア１０２に設定する（ステップＳ１１５３）。
【００７８】
実行権を得たソフトウェア１０２は、アドレスＡから値を読み込む（ステップＳ１１５４）。次に、ソフトウェア１０２は、読み込んだ値をＲｅｓｕｌｔに設定する（ステップＳ１１５５）。続けて、ソフトウェア１０２は、次の命令を実行する。
【００７９】
ここで、図１１Ａと図１１Ｂの実行結果を用いて、実行権の切換回数について説明する。図１１Ａでは、ステップＳ１１０１、ステップＳ１１０３、ステップＳ１１０６、ステップＳ１１０７にて実行権の切換が行われており、実行権の切換回数は４回である。一方、図１１Ｂでは、ステップＳ１１５１、ステップＳ１１５３にて実行権の切換が行われており、実行権の切換回数は２回である。このように、ソフトウェア１０２が実行する命令群に特定の記憶領域でない記憶領域へのＲｅｇＲｅａｄ命令が含まれる場合、シミュレーション装置１００は、実行権の切換回数が少なくなるため、協調シミュレーションにかかる処理時間を短縮することができる。
【００８０】
図１２は、同一のアドレスに連続してＲｅｇＷｒｉｔｅ命令を行う場合の動作の一例を示すシーケンス図である。図１２にて示すソフトウェア１０２は、行番号０００２の命令が“ＲｅｇＷｒｉｔｅ（アドレスＢ，０ｘ０３）；”から“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０３）；”に開発者によって書き換えられている。また、ＡＰＩ１１２は、メモリモデル１０３＿ｓのアドレスＡに記憶される値を、先入れ先出し方式を用いて、ＦＩＦＯバッファ１２０１に記憶する。また、処理テーブル３１０のアドレスＣの処理内容フィールドに、“Ｒｅａｄアクセス時  ハードウェアモデル１０１＃１：アドレスＣ＝アドレスＡに書き込まれた値の合計値  ソフトウェア：アドレスＣを読込”が格納されている。
【００８１】
ソフトウェア１０２は、行番号０００１の命令を読み込んで“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０２）；”を実行することにより、アドレスＡに値０ｘ０２を書き込む（ステップＳ１２０１）。ステップＳ１２０１の処理について、ソフトウェア１０２は、ＦＩＦＯバッファ１２０１に０ｘ０２をエンキューする。具体的な実装として、ソフトウェア１０２から呼ばれたＡＰＩ１１２が、ＦＩＦＯバッファ１２０１のライトポインタが示す位置に０ｘ０２を書き込み、ライトポインタの値をインクリメントする。
【００８２】
次に、ソフトウェア１０２は、行番号０００２の命令を読み込んで“ＲｅｇＷｒｉｔｅ（アドレスＡ，０ｘ０３）；”を実行することにより、アドレスＡに値０ｘ０３を書き込む（ステップＳ１２０２）。ステップＳ１２０２の処理について、ソフトウェア１０２は、ＦＩＦＯバッファ１２０１に０ｘ０３をエンキューする。具体的な実装として、ソフトウェア１０２から呼ばれたＡＰＩ１１２が、ＦＩＦＯバッファ１２０１のライトポインタが示す位置に０ｘ０３を書き込み、ライトポインタの値をインクリメントする。
【００８３】
続けて、ソフトウェア１０２は、行番号０００３の命令を読み込んで“ＲｅｇＲｅａｄ（アドレスＣ）；”を実行する（ステップＳ１２０３）。図１２では図示していないが、シミュレータ１１１は、処理テーブル３１０を参照して、アドレスＣの値を更新する処理内容があるか検索する。図１２の場合、アドレスＣの値を更新する処理内容が有ると判断し、シミュレータ１１１は、実行権を、処理内容を実行するハードウェアモデル１０１＃１に設定する。このとき、処理内容は、アドレスＡに書き込まれた値の合計値を算出し、算出した値をアドレスＣに書き込む処理とする。
【００８４】
ハードウェアモデル１０１＃１は、アドレスＣの値を更新する処理内容を取得する（ステップＳ１２０４）。ハードウェアモデル１０１＃１は、処理内容の引数となるアドレスＡから値を読み込む。このとき、ハードウェアモデル１０１＃１は、ＦＩＦＯバッファ１２０１に格納された値を全て読み込む。具体的に、ハードウェアモデル１０１＃１は、ＦＩＦＯバッファ１２０１から０ｘ０２を読み込む（ステップＳ１２０５）。続けて、ハードウェアモデル１０１＃１は、ＦＩＦＯバッファ１２０１から０ｘ０３を読み込む（ステップＳ１２０６）。具体的な実装として、ハードウェアモデル１０１＃１は、ＦＩＦＯバッファ１２０１の、リードポインタが示す位置の値を読み込んで、リードポインタをインクリメントする。続けて、ハードウェアモデル１０１＃１は、リードポインタとライトポインタが一致するまで読込を続ける。
【００８５】
引数を読み込んだため、ハードウェアモデル１０１＃１は、処理内容となる“アドレスＡに書き込まれた値の合計値の算出処理”を実行する（ステップＳ１２０７）。具体的に、ハードウェアモデル１０１＃１は、アドレスＣの値を、１回目にアドレスＡに書き込まれた値０ｘ０２＋２回目にアドレスＡに書き込まれた値０ｘ０３＝０ｘ０５として算出する。次に、ハードウェアモデル１０１＃１は、アドレスＣに算出した値となる０ｘ０５を書き込む（ステップＳ１２０８）。
【００８６】
続けて、ハードウェアモデル１０１＃１の処理が終了したため、シミュレータ１１１は、実行権をソフトウェア１０２に設定する。実行権を得たソフトウェア１０２は、アドレスＣの値０ｘ０５をＲｅｓｕｌｔに設定する（ステップＳ１２０９）。続けて、ソフトウェア１０２は、次の命令を実行する。続けて、図１３〜図１６にて、シミュレーション処理のフローチャートを説明する。図１３〜図１６のフローチャートにて、アドレスＡが更新処理に用いられる記憶領域であり、アドレスＣが特定の記憶領域であり、アドレスＢが更新処理に用いられる記憶領域でもなく、特定の記憶領域でもないものとして、説明する。
【００８７】
図１３は、シミュレーション処理手順の一例を示すフローチャートである。シミュレーション処理は、ハードウェアモデル１０１とソフトウェア１０２の協調シミュレーションを行う処理である。シミュレーション装置１００は、シミュレータ１１１により、実行権をソフトウェア１０２に設定する（ステップＳ１３０１）。次に、シミュレーション装置１００は、ソフトウェア１０２により、１命令を読み込む（ステップＳ１３０２）。続けて、シミュレーション装置１００は、ソフトウェア１０２により、読み込んだ命令の種類を確認する（ステップＳ１３０３）。読み込んだ命令の種類がＲｅｇＷｒｉｔｅ命令である場合（ステップＳ１３０３：ＲｅｇＷｒｉｔｅ命令）、シミュレーション装置１００は、ソフトウェア１０２から呼ばれたＡＰＩ１１２により、ＲｅｇＷｒｉｔｅ命令で指定されたアドレスを確認する（ステップＳ１３０４）。
【００８８】
アドレスＡである場合（ステップＳ１３０４：アドレスＡ）、シミュレーション装置１００は、ＡＰＩ１１２により、アドレスＡのＦＩＦＯバッファ１２０１にＲｅｇＷｒｉｔｅ命令で指定された値を書き込む（ステップＳ１３０５）。また、アドレスＡとは異なる他のアドレスである場合（ステップＳ１３０４：他のアドレス）、シミュレーション装置１００は、ＡＰＩ１１２により、他のアドレスにＲｅｇＷｒｉｔｅ命令で指定された値を書き込む（ステップＳ１３０６）。ステップＳ１３０５、またはステップＳ１３０６の処理終了後、ＡＰＩ１１２は処理を終了する。続けて、シミュレーション装置１００は、ステップＳ１３０２の処理に移行する。
【００８９】
読み込んだ命令の種類がＲｅｇＲｅａｄ命令である場合（ステップＳ１３０３：ＲｅｇＲｅａｄ命令）、シミュレーション装置１００は、ＡＰＩ１１２により、ＲｅｇＲｅａｄ処理を実行する（ステップＳ１３０７）。ＲｅｇＲｅａｄ処理の詳細は、図１５にて後述する。ステップＳ１３０７の終了後、シミュレーション装置１００は、ステップＳ１３０２の処理に移行する。また、読み込んだ命令の種類が、ＲｅｇＷｒｉｔｅ命令およびＲｅｇＲｅａｄ命令とは異なる他の命令である場合（ステップＳ１３０３：他の命令）、シミュレーション装置１００は、ソフトウェア１０２により、他の命令に従った処理を実行する。実行後、シミュレーション装置１００は、ステップＳ１３０２の処理に移行する。
【００９０】
図１４は、シミュレーション処理手順の他の例を示すフローチャートである。図１４にて示すシミュレーション処理は、アクセス要求をシミュレータ１１１にて検出する処理の例である。
【００９１】
シミュレーション装置１００は、シミュレータ１１１により、実行権をソフトウェア１０２に設定する（ステップＳ１４０１）。次に、シミュレーション装置１００は、シミュレータ１１１により、ＲｅｇＷｒｉｔｅ命令かＲｅｇＲｅａｄ命令が呼ばれたことを検出したか否かを判断する（ステップＳ１４０２）。検出していない場合（ステップＳ１４０２：Ｎｏ）、シミュレーション装置１００は、一定時間経過後、ステップＳ１４０２の処理を再び実行する。検出した場合（ステップＳ１４０２：Ｙｅｓ）、シミュレーション装置１００は、シミュレータ１１１により、呼ばれた命令の種類を確認する（ステップＳ１４０３）。
【００９２】
呼ばれた命令の種類がＲｅｇＷｒｉｔｅ命令である場合（ステップＳ１４０３：ＲｅｇＷｒｉｔｅ命令）、シミュレーション装置１００は、ソフトウェア１０２から呼ばれたＡＰＩ１１２により、ＲｅｇＷｒｉｔｅ命令で指定されたアドレスを確認する（ステップＳ１４０４）。
【００９３】
アドレスＡである場合（ステップＳ１４０４：アドレスＡ）、シミュレーション装置１００は、ＡＰＩ１１２により、アドレスＡのＦＩＦＯバッファ１２０１にＲｅｇＷｒｉｔｅ命令で指定された値を書き込む（ステップＳ１４０５）。また、アドレスＡとは異なる他のアドレスである場合（ステップＳ１４０４：他のアドレス）、シミュレーション装置１００は、ＡＰＩ１１２により、他のアドレスにＲｅｇＷｒｉｔｅ命令で指定された値を書き込む（ステップＳ１４０６）。ステップＳ１４０５、または、ステップＳ１４０６の終了後、ＡＰＩ１１２は処理を終了する。続けて、シミュレーション装置１００は、ステップＳ１４０２の処理に移行する。
【００９４】
呼ばれた命令の種類がＲｅｇＲｅａｄ命令である場合（ステップＳ１４０３：ＲｅｇＲｅａｄ命令）、シミュレーション装置１００は、ＡＰＩ１１２により、ＲｅｇＲｅａｄ処理を実行する（ステップＳ１４０７）。ステップＳ１４０７の終了後、シミュレーション装置１００は、ステップＳ１４０２の処理に移行する。
【００９５】
図１５は、ＲｅｇＲｅａｄ処理手順の一例を示すフローチャートである。シミュレーション装置１００は、ＡＰＩ１１２により、実行権をシミュレータ１１１に設定する（ステップＳ１５０１）。次に、シミュレーション装置１００は、ＲｅｇＲｅａｄ命令で指定されたアドレスを確認する（ステップＳ１５０２）。
【００９６】
指定されたアドレスがアドレスＣである場合（ステップＳ１５０２：アドレスＣ）、シミュレーション装置１００は、シミュレータ１１１により、アドレスＣに対するハードウェアモデル処理を実行する（ステップＳ１５０３）。ハードウェアモデル処理の詳細については、図１６にて後述する。ステップＳ１５０３の実行後、シミュレーション装置１００は、シミュレータ１１１により、実行権をソフトウェア１０２に設定する（ステップＳ１５０４）。次に、シミュレーション装置１００は、ソフトウェア１０２から呼ばれているＡＰＩ１１２により、アドレスＣから値を読み込む（ステップＳ１５０５）。続けて、シミュレーション装置１００は、ＡＰＩ１１２により、読み込んだ値をＲｅｓｕｌｔに設定する（ステップＳ１５０６）。ステップＳ１５０６の実行終了後、シミュレーション装置１００は、ＲｅｇＲｅａｄ処理を終了する。
【００９７】
指定されたアドレスがアドレスＡである場合（ステップＳ１５０２：アドレスＡ）、シミュレーション装置１００は、シミュレータ１１１により、実行権をソフトウェア１０２に設定する（ステップＳ１５０７）。次に、シミュレーション装置１００は、ソフトウェア１０２から呼ばれているＡＰＩ１１２により、アドレスＡから値を読み込む（ステップＳ１５０８）。続けて、シミュレーション装置１００は、ＡＰＩ１１２により、読み込んだ値をＲｅｓｕｌｔに設定する（ステップＳ１５０９）。ステップＳ１５０９の実行終了後、シミュレーション装置１００は、ＲｅｇＲｅａｄ処理を終了する。
【００９８】
指定されたアドレスが、アドレスＣともアドレスＡとも異なる他のアドレスである場合（ステップＳ１５０２：他のアドレス）、シミュレーション装置１００は、シミュレータ１１１により、実行権をソフトウェア１０２に設定する。次に、シミュレーション装置１００は、ソフトウェア１０２から呼ばれているＡＰＩ１１２により、アドレスＡから値を読み込んで、読み込んだ値をＲｅｓｕｌｔに設定する。続けて、シミュレーション装置１００は、ＲｅｇＲｅａｄ処理を終了する。
【００９９】
図１６は、アドレスＣに対するハードウェアモデル処理手順の一例を示すフローチャートである。シミュレーション装置１００は、シミュレータ１１１により、実行権をハードウェアモデル１０１＃１に設定する（ステップＳ１６０１）。次に、シミュレーション装置１００は、ハードウェアモデル１０１＃１により、処理テーブル３１０の処理内容フィールドを基に、アドレスＡの値を読み込む（ステップＳ１６０２）。続けて、シミュレーション装置１００は、ハードウェアモデル１０１＃１により、処理テーブル３１０の処理内容フィールドを基に、アドレスＢの値を読み込む（ステップＳ１６０３）。次に、シミュレーション装置１００は、ハードウェアモデル１０１＃１により、アドレスＡの値にアドレスＢの値を加算する（ステップＳ１６０４）。
【０１００】
続けて、シミュレーション装置１００は、ハードウェアモデル１０１＃１により、加算した値をアドレスＣに書き込む（ステップＳ１６０５）。次に、シミュレーション装置１００は、ハードウェアモデル１０１＃１により、実行権をシミュレータ１１１に設定する（ステップＳ１６０６）。ステップＳ１６０６の実行終了後、シミュレーション装置１００は、ハードウェアモデル処理を終了する。
【０１０１】
以上説明したように、ＡＰＩ１１２、シミュレータ１１１によれば、ソフトウェア１０２によるハードウェアモデル１０１のレジスタへのアクセス要求が、ソフトウェア１０２からの読込時に更新されるレジスタへの読込要求でなければＡＰＩ１１２が処理する。これにより、シミュレーション装置１００は、ハードウェアモデル１０１に実行権を渡さずに済むため、ソフトウェア１０２の検証時間を短縮することができる。
【０１０２】
また、ＡＰＩ１１２、シミュレータ１１１によれば、ソフトウェア１０２からのアクセス要求が、ソフトウェア１０２からの読込時に更新されるレジスタへの読込要求であれば、ハードウェアモデル１０１に処理させる。これにより、シミュレーション装置１００は、実際の処理結果と、シミュレーションの処理結果とを同一にすることができる。
【０１０３】
また、ＡＰＩ１１２、シミュレータ１１１によれば、ソフトウェア１０２からのアクセス要求が、読込時に更新されるレジスタの更新処理に用いられる情報の記憶先となるレジスタへの書込要求であれば、バッファに書込要求の書込データを書き込んでもよい。これにより、実際にはソフトウェア１０２からの書込要求の度にハードウェアが処理するといった一連の処理群がある場合でも、シミュレーション装置１００は、実際の処理結果と、シミュレーションの処理結果とを同一にすることができる。
【０１０４】
また、シミュレーション対象システムとして組み込みシステムを想定することがあり、この場合、組み込みシステム内のプロセッサが行う処理は、他のハードウェアに対するアクセスを行う処理が、全体の大半を占める場合がある。したがって、メモリモデル１０３＿ｓがハードウェアモデル１０１に含まれる形態におけるシミュレーション装置は、ハードウェアモデル１０１とソフトウェア１０２を切り換える回数が多くなる。一方、本実施の形態にかかるシミュレーション装置１００は、協調シミュレーションにかかる処理時間を大きく削減することができる。
【０１０５】
また、メモリモデル１０３＿ｒがハードウェアモデル１０１に含まれる形態における本実施の形態であっても、ソフトウェア１０２は、ＲｅｇＲｅａｄ命令やＲｅｇＷｒｉｔｅ命令を提供するＡＰＩを呼び出している。したがって、メモリモデル１０３＿ｒがハードウェアモデル１０１に含まれる形態から、本実施の形態に対応する際、開発者は、ソフトウェア１０２の記述を変更しなくて済む。開発者は、ソフトウェア１０２に、本実施の形態にかかるＡＰＩ１１２を合わせてコンパイル、リンクするだけで、本実施の形態にかかるシミュレーション環境を得ることができる。
【０１０６】
なお、本実施の形態で説明したシミュレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本シミュレーションプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本シミュレーションプログラムは、インターネット等のネットワークを介して配布してもよい。
【０１０７】
上述した本実施の形態に関し、さらに以下の付記を開示する。
【０１０８】
（付記１）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御プログラムであって、
コンピュータに、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する、
処理を実行させることを特徴とするシミュレーション制御プログラム。
【０１０９】
（付記２）前記コンピュータに、
前記アクセス要求が前記特定の記憶領域への読込要求であると判断した場合、前記特定の記憶領域の記憶内容を更新する更新処理の実行要求を出力する処理を実行させ、
前記実行する処理は、
前記実行要求を出力した結果、前記ハードウェアモデルによって前記更新処理が完了した場合、前記特定の記憶領域を読み込んで、前記ソフトウェアに読込結果を出力することを特徴とする付記１に記載のシミュレーション制御プログラム。
【０１１０】
（付記３）前記記憶部は、さらに、前記ハードウェアモデルの記憶領域のうちの前記更新処理に用いられる情報の記憶先の記憶領域のアドレスを記憶しており、
前記コンピュータに、
前記記憶部を参照して、前記アクセス要求が前記記憶先の記憶領域への書込要求か否かを判断する処理を実行させ、
前記実行する処理は、
前記アクセス要求が前記記憶先の記憶領域への書込要求であると判断した場合、前記アクセス要求以降に前記ソフトウェアから発生する前記特定の記憶領域への読込要求に対して実行される前記更新処理に用いられる情報を蓄積するバッファに前記書込要求の書込データを書き込むことを特徴とする付記２に記載のシミュレーション制御プログラム。
【０１１１】
（付記４）コンピュータに、
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出し、
検出した前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する、
処理を実行させることを特徴とするシミュレーションプログラム。
【０１１２】
（付記５）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御プログラムであって、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する、
処理をコンピュータに実行させるシミュレーション制御プログラムを記録したことを特徴とする記録媒体。
【０１１３】
（付記６）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出し、
検出した前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する、
処理をコンピュータに実行させるシミュレーションプログラムを記録したことを特徴とする記録媒体。
【０１１４】
（付記７）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御装置であって、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断する判断部と、
前記判断部によって前記アクセス要求が前記特定の記憶領域への読込要求でないと判断された場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する実行部と、
を有することを特徴とするシミュレーション制御装置。
【０１１５】
（付記８）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御装置であって、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断する判断部と、
前記判断部によって前記アクセス要求が前記特定の記憶領域への読込要求でないと判断された場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する実行部と、
を有するコンピュータを含むことを特徴とするシミュレーション制御装置。
【０１１６】
（付記９）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出する検出部と、
前記検出部によって検出された前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断する判断部と、
前記判断部によって前記アクセス要求が前記特定の記憶領域への読込要求でないと判断された場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する実行部と、
を有することを特徴とするシミュレーション装置。
【０１１７】
（付記１０）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出する検出部と、
前記検出部によって検出された前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断する判断部と、
前記判断部によって前記アクセス要求が前記特定の記憶領域への読込要求でないと判断された場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する実行部と、
を有するコンピュータを含むことを特徴とするシミュレーション装置。
【０１１８】
（付記１１）ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に前記ソフトウェアから呼び出されるシミュレーション制御方法であって、
コンピュータが、
前記ソフトウェアから発生したアクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ハードウェアモデルの記憶領域にアクセスして、前記アクセス要求に対するアクセス処理を実行する、
処理を実行することを特徴とするシミュレーション制御方法。
【０１１９】
（付記１２）コンピュータが、
ハードウェアモデルとソフトウェアとの協調シミュレーションの実行中に、前記ソフトウェアから、前記ハードウェアモデルの記憶領域へのアクセス要求が発生したことを検出し、
検出した前記アクセス要求が、前記ハードウェアモデルの記憶領域のうちの前記ハードウェアモデルによって記憶内容が更新される特定の記憶領域のアドレスを記憶する記憶部を参照して、前記特定の記憶領域への読込要求か否かを判断し、
前記アクセス要求が前記特定の記憶領域への読込要求でないと判断した場合、前記ソフトウェアによって、前記ハードウェアモデルの記憶領域にアクセスして前記アクセス要求に対するアクセス処理を実行する、
処理を実行することを特徴とするシミュレーション方法。
【符号の説明】
【０１２０】
１０１  ハードウェアモデル
１０２  ソフトウェア
１０３＿ｓ  メモリモデル
１１１  シミュレータ
１１２  ＡＰＩ
３０１  判断部
３０２  出力部
３０３  実行部
３１０  処理テーブル
【図１】
2014085956.tif 000003
【図２】
2014085956.tif 000004
【図３】
2014085956.tif 000005
【図４】
2014085956.tif 000006
【図５】
2014085956.tif 000007
【図６】
2014085956.tif 000008
【図７】
2014085956.tif 000009
【図８Ａ】
2014085956.tif 000010
【図８Ｂ】
2014085956.tif 000011
【図９Ａ】
2014085956.tif 000012
【図９Ｂ】
2014085956.tif 000013
【図１０Ａ】
2014085956.tif 000014
【図１０Ｂ】
2014085956.tif 000015
【図１１Ａ】
2014085956.tif 000016
【図１１Ｂ】
2014085956.tif 000017
【図１２】
2014085956.tif 000018
【図１３】
2014085956.tif 000019
【図１４】
2014085956.tif 000020
【図１５】
2014085956.tif 000021
【図１６】
2014085956.tif 000022