(57)【特許請求の範囲】
【請求項１】
組込みソフトウェアと協調動作する論理的な単体又は複数のハードウェアモデルを検証するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した、前記ハードウェアシミュレータによって検証される前記ハードウェアモデルであり、前記組込みソフトウェアの前記ハードウェアシミュレータとの命令毎の同期を省略して前記組込みソフトウェアを動作させるＣＰＵモデルと
を有し、
前記ＣＰＵモデルは、メモリモデルを有し、
前記メモリモデルは、前記メモリモデルのアドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列と、前記アドレスの前記所定ビット以外をキーとして、メモリ領域の領域ポインタと前記関数用連想配列の配列ポインタの対を値とするポインタ用連想配列とを有し、
前記ＣＰＵモデルは、前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタでない場合、前記ＩＯ関数を呼び出してデータアクセスを行い、
前記組込みソフトウェアと前記単体又は複数のハードウェアモデルとの協調シミュレーションを行うことを特徴とするシミュレーション装置。
【請求項２】
前記単体又は複数のハードウェアモデルの一つであり、割り込みを発生させる割り込みモデル
を有することを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記シミュレーション装置は、更に、組込みソフトウェアを表現する命令列を読み込んで前記メモリモデルに書き込む際に、無限ループ部分となる命令を割り込み待機命令に置き換えて該メモリモデルに書き込む置換手段を有し、
前記ＣＰＵモデルは、前記割り込み待機命令により次の割り込みまで待機することを特徴とする請求項１又は２記載のシミュレーション装置。
【請求項４】
前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタの場合、前記関数用連想配列の値が空ポインタでない前記アドレスより小さい前記アドレスのうち、最も大きな前記アドレスに従って前記ＩＯ関数を呼び出してデータアクセスを行うことを特徴とする請求項１乃至３のいずれか一項記載のシミュレーション装置。
【請求項５】
前記アドレスに従って前記ポインタ用連想配列により、空ポインタが前記配列ポインタに与えられる場合、前記メモリ領域のへのデータアクセスを行うことを特徴とする請求項４記載のシミュレーション装置。
【請求項６】
前記ＩＯ関数は前記単体又は複数のハードウェアモデルが有するアクセス関数であることを特徴とする請求項１乃至５のいずれか一項記載のシミュレーション装置。
【請求項７】
コンピュータを組込みソフトウェアを検証するシミュレーション装置として機能させるコンピュータ実行可能なプログラムであって、該コンピュータを、
前記組込みソフトウェアと協調動作する論理的な単体又は複数のハードウェアモデルを検証するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した、前記ハードウェアシミュレータによって検証される前記ハードウェアモデルであり、前記組込みソフトウェアの前記ハードウェアシミュレータとの命令毎の同期を省略して前記組込みソフトウェアを動作させるＣＰＵモデルとして機能させ、
前記ＣＰＵモデルは、メモリモデルを有し、
前記メモリモデルは、前記メモリモデルのアドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列と、前記アドレスの前記所定ビット以外をキーとして、メモリ領域の領域ポインタと前記関数用連想配列の配列ポインタの対を値とするポインタ用連想配列とを有し、
前記ＣＰＵモデルは、前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタでない場合、前記ＩＯ関数を呼び出してデータアクセスを行い、
前記組込みソフトウェアと前記単体又は複数のハードウェアモデルとの協調シミュレーションを行うことを特徴とするコンピュータ実行可能なプログラム。
【請求項８】
前記コンピュータを、前記単体又は複数のハードウェアモデルの一つであり、割り込みを発生させるモデルとして機能させることを特徴とする請求項７記載のコンピュータ実行可能なプログラム。
【請求項９】
コンピュータを組込みソフトウェアを検証するシミュレーション装置として機能させるプログラムを格納したコンピュータ読取可能な記憶媒体であって、該コンピュータを、
前記組込みソフトウェアと協調動作する論理的な単体又は複数のハードウェアモデルを検証するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した、前記ハードウェアシミュレータによって検証される前記ハードウェアモデルであり、前記組込みソフトウェアの前記ハードウェアシミュレータとの命令毎の同期を省略して前記組込みソフトウェアを動作させるＣＰＵモデルとして機能させ、
前記ＣＰＵモデルは、メモリモデルを有し、
前記メモリモデルは、前記メモリモデルのアドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列と、前記アドレスの前記所定ビット以外をキーとして、メモリ領域の領域ポインタと前記関数用連想配列の配列ポインタの対を値とするポインタ用連想配列とを有し、
前記ＣＰＵモデルは、前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタでない場合、前記ＩＯ関数を呼び出してデータアクセスを行い、
前記組込みソフトウェアと前記単体又は複数のハードウェアモデルとの協調シミュレーションを行うことを特徴とするコンピュータ読取可能な記憶媒体。
【請求項１０】
前記コンピュータを、前記単体又は複数のハードウェアモデルの一つであり、割り込みを発生させるモデルとして機能させることを特徴とする請求項９記載のコンピュータ読取可能な記憶媒体。
【請求項１１】
組込みソフトウェアを検証するシミュレーション装置で実行されるシミュレーション方法であって、
前記シミュレーション装置は、
前記組込みソフトウェアと協調動作する論理的な単体又は複数のハードウェアモデルを検証するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した、前記ハードウェアシミュレータによって検証される前記ハードウェアモデルであり、前記組込みソフトウェアの前記ハードウェアシミュレータとの命令毎の同期を省略して前記組込みソフトウェアを動作させるＣＰＵモデルとして機能し、
前記ＣＰＵモデルは、メモリモデルを有し、
前記メモリモデルは、前記メモリモデルのアドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列と、前記アドレスの前記所定ビット以外をキーとして、メモリ領域の領域ポインタと前記関数用連想配列の配列ポインタの対を値とするポインタ用連想配列とを有し、
前記ＣＰＵモデルは、前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタでない場合、前記ＩＯ関数を呼び出してデータアクセスを行い、
前記組込みソフトウェアと前記単体又は複数のハードウェアモデルとの協調シミュレーションを行うことを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアシミュレーションを用いて組込みソフトウェアを動作させ検証するシミュレーション装置、プログラム、記憶媒体、及び方法に関する。
【背景技術】
【０００２】
近年、ソフトウェアを組み込んだ種々の電化製品、精密機器などの製品が普及するようになった。このような組込みソフトウェアの開発では、ソフトウェアを組み込むハードウェアの動作を模した論理的なハードウェアモデルによってシミュレーションするハードウェアシミュレータを用いて、ソフトウェアの動作を検証することが行なわれている。
【０００３】
ソフトウェアとハードウェアとの協調シミュレーションに関して、ソフトウェアを実機で動作させた場合と同様に動作する模擬的なハードウェアシミュレーションで動作させた場合とで実行タイミングが不一致とならないようにソフトウェアとハードウェアのシミュレーション間で適切に同期させて検証することが重要である。その一方で、ソフトウェアの検証を高速に行なうために、ソフトウェアの動作に影響を与えないハードウェアモデルによるシミュレーションを抑制する等が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−３１２３１５号公報
【特許文献２】特開２００５−３２１８４８号公報
【特許文献３】特開２００９−３６８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、組込みソフトウェアには無限ループが存在し、その無限ループが実行される際にもソフトウェアとハードウェアのシミュレーション間で同期させるため、シミュレーション時間が消費されると言った問題があった。上述した従来技術では、このようなソフトウェアの検証に影響を与えない動作についてもシミュレーションが行われてしまい、シミュレーションを効率的に行うことができなかった。
【課題を解決するための手段】
【０００６】
開示の技術は、組込みソフトウェアと協調動作する論理的な単体又は複数のハードウェアモデルを検証するハードウェアシミュレータと、前記組込みソフトウェアを実行するＣＰＵの動作を模した、前記ハードウェアシミュレータによって検証される前記ハードウェアモデルであり、前記組込みソフトウェアの前記ハードウェアシミュレータとの命令毎の同期を省略して前記組込みソフトウェアを動作させるＣＰＵモデルとを有し、前記ＣＰＵモデルは、メモリモデルを有し、前記メモリモデルは、前記メモリモデルのアドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列と、前記アドレスの前記所定ビット以外をキーとして、メモリ領域の領域ポインタと前記関数用連想配列の配列ポインタの対を値とするポインタ用連想配列とを有し、前記ＣＰＵモデルは、前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタでない場合、前記ＩＯ関数を呼び出してデータアクセスを行い、前記組込みソフトウェアと前記単体又は複数のハードウェアモデルとの協調シミュレーションを行うことを特徴とするシミュレーション装置のように構成される。
【０００７】
また、上記課題を解決するための手段として、コンピュータに上記シミュレーション装置として機能させるためのプログラム、そのプログラムを記録した記録媒体、及びシミュレーション方法とすることもできる。
【発明の効果】
【０００８】
開示の技術では、ソフトウェアとハードウェアの協調シミュレーションにおいて、ソフトウェアとハードウェア間の同期回数を削減することができ、高速にシミュレーションを行うことができる。
【図面の簡単な説明】
【０００９】
【図１】シミュレーション対象の例を説明するための図である。
【図２】シミュレーション対象のソフトウェアの構成例を示す図である。
【図３】ソフトウェアの処理フローを説明するための図である。
【図４】本実施の形態に係るシミュレーション装置のハードウェア構成を示す図である。
【図５】第１実施例に係るシミュレーション装置の機能構成例を示す図である。
【図６】実機とシミュレーション装置との対応を説明するための図である。
【図７】第１実施例に係るＨＥＸ読み込み部による処理概要を説明するための図である。
【図８】ＨＥＸファイル読み込み処理を説明するためのフローチャート図である。
【図９】置き換え部による処理を説明するための図である。
【図１０】置き換え例を説明するための図である。
【図１１】実行部による処理の概要を説明するための図である。
【図１２】実行部による処理を説明するためのフローチャート図である。
【図１３】割り込み処理を考慮した命令列の実行処理を説明するためのフローチャート図である。
【図１４】シミュレーションの実行時間の比較例を示す図である。
【図１５】第２実施例に係るシミュレーション装置の機能構成例を示す図である。
【図１６】第２実施例に係るソフトウェアの例を示す図である。
【図１７】第２実施例に係るレジスタモデルの例を示す図である。
【図１８】第２実施例に係るメモリモデルの例を示す図である。
【図１９】メモリモデルの初期化処理を説明するためのフローチャート図である。
【図２０】メモリモデルのデータ読出処理を説明するためのフローチャート図である。
【図２１】メモリモデルのデータ書込処理を説明するためのフローチャート図である。
【図２２】タイマーモデルの構成例を示す図である。
【図２３】タイマーモデルのプログラム例である。
【図２４】第２実施例に係るシミュレーション装置の動作シーケンスを示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を図面に基づいて説明する。本実施の形態に係るシミュレーション装置は、組み込みソフトウェア（以下、単に「ＳＷ」と示す場合がある）と、そのソフトウェアを動作させるハードウェア（以下、単に「ＨＷ」と示す場合がある）とを協調させてシミュレーションを行う装置であり、ＳＷとＨＷとの協調シミュレーション時において、ＳＷ−ＨＷ間のオーバーヘッドとなるＳＷ−ＨＷ間同期回数を削減することによって、高速シミュレーションを実現するものである。
【００１１】
先ず、シミュレーション装置で検証されるシミュレーション対象について説明する。図１は、シミュレーション対象の例を説明するための図である。図１において、シミュレーション対象となるソフトウェアは、ＣＰＵ３１に組み込まれ、バス３３によってＣＰＵ３１と接続される周期タイマー３２の割り込み要求に応じて所定動作を行う。周期タイマー３２は、５μｓ周期で割り込み要求を行うタイマーである。
【００１２】
シミュレーション対象のソフトウェアは、周期タイマー３２からの割り込み要求に応じて、レジスタ０（単に、「ｒ０」とする）に１を加算するアプリケーションとする。
【００１３】
ＣＰＵ３１は、少なくとも、
・１命令の命令長は１バイト
・１命令の実行は１サイクル
・動作は１ＭＨｚ
の構成を有する。
【００１４】
周期タイマー３２は、所定間隔（５μｓ周期）でＣＰＵ３１に割り込み要求を行う。
【００１５】
図２は、シミュレーション対象のソフトウェアの構成例を示す図である。シミュレーション対象のソフトウェアは、図２に示すリストＬ１及びＬ２を表現するメモリに書き込まれるデータ形式のＨＥＸファイルであるとする。ＨＥＸファイルには、命令語とその配置アドレスを対応させたリストが記述されている。
【００１６】
リストＬ１は、スタートアップルーチンであり、アイドルループのみで構成される。また、リストＬ２は、タイマー割り込みルーチンであり、レジスタ０（ｒ０）に１を加算する処理を行う。
【００１７】
ソフトウェアは、ＣＰＵ３１がリストＬ１及びＬ２を実行することにより、図３に示すように動作する。図３は、ソフトウェアの処理フローを説明するための図である。図３中、リストＬ１の範囲４ａがステップＳ１に相当し、リストＬ２の範囲４ｂがステップＳ３及びＳ４に相当する。
【００１８】
ＣＰＵ３１によりシミュレーション対象のソフトウェアが実行開始されると、ＣＰＵ３１によりリストＬ１の"jump end"命令が実行される（ステップＳ１）。この"jump end"命令は自分自身を次に実行する命令（リストＬ１の"end"ラベルの次の命令）に指定し、アイドルループを形成する。
【００１９】
そして、ＣＰＵ３１によりタイマー割り込みが発生したか否かが判断される（ステップＳ２）。発生していない場合、ＣＰＵ３１は、通常処理のステップＳ１を繰り返すアイドルループを続行する。一方、発生していた場合、ＣＰＵ３１は、通常処理（ステップＳ１の繰り返し）の代わりにリストＬ２に記述されるタイマー割り込みルーチンを実行するため、ステップＳ３へと進む。
【００２０】
タイマー割り込みルーチンが実行されると、ＣＰＵ３１により"inc r0"命令が実行される（ステップＳ３）。この"inc r0"命令により、レジスタ０（ｒ０）に１が加算される。
【００２１】
続けて、ＣＰＵ３１により"reti"（return from interrupt）命令が実行される（ステップＳ４）。この"reti"命令により、ＣＰＵ３１は、ステップＳ１へ戻り通常処理を繰り返す。
【００２２】
上述したようなシミュレーション対象のソフトウェアに対して、ＳＷ−ＨＷ間のオーバーヘッドとなるＳＷ−ＨＷ間同期回数を削減する仕組みについて、以下に説明する。
【００２３】
図４は、本実施の形態に係るシミュレーション装置のハードウェア構成を示す図である。図４に示すシミュレーション装置１００は、コンピュータによって制御される装置であって、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、出力ユニット１４と、入力ユニット１５と、記憶装置１７と、ドライバ１８とを有し、システムバスＢに接続される。
【００２４】
ＣＰＵ１１は、メモリユニット１２に格納されたプログラムに従ってシミュレーション装置１００を制御する。メモリユニット１２には、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read-Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００２５】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。出力ユニット１４は、プリンタ等を有し、利用者からの指示に応じて各種情報を出力するために用いられる。入力ユニット１５は、マウス、キーボード等を有し、ユーザが、シミュレーション装置１００が処理を行なうための必要な各種情報を入力するために用いられる。記憶装置１７には、例えば、ハードディスクユニットが用いられ、各種処理を実行するプログラム等のデータを格納する。
【００２６】
シミュレーション装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によってシミュレーション装置１００に提供される。即ち、プログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがシステムバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたプログラムに従ってＣＰＵ１１がその処理を開始する。尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００２７】
［第１実施例］
図５は、第１実施例に係るシミュレーション装置の機能構成例を示す図である。図５において、シミュレーション装置１００は、図４のＣＰＵ１１がプログラムを実行することによって実現される、ＨＥＸ読み込み部５０と、ＣＰＵモデル６０と、ＨＷ（ハードウェア）モデル８０と、ＨＷシミュレータ９０とを有する。
【００２８】
ソフトウェア４０は、ＨＥＸファイルであり、図４の記憶装置１７に格納される。
【００２９】
ＨＥＸ読み込み部５０は、記憶装置１７に格納されるソフトウェア４０を読み込んで、ＣＰＵモデル６０のメモリモデル６３に命令列を書き込む。また、ＨＥＸ読み込み部５０は、置き換え部５０ａを有し、置き換え部５０ａによって、メモリモデル６３に書き込んだ命令列のうち、アイドルループを構成する命令列を全て割り込み待機命令に置き換える。
【００３０】
ＣＰＵモデル６０は、ソフトウェア４０を組み込むＣＰＵ３１（図１）の動作を模した論理的なハードウェアモデルであり、実行部６１と、レジスタモデル６２と、メモリモデル６３とを有し、ソフトウェア４０を実行することによって、ＨＷモデル８０からの割り込みに応じた処理を行う。
【００３１】
実行部６１は、レジスタモデル６２と、メモリモデル６３とにアクセスすることによって、メモリモデル６３に格納された命令列を逐次的に解釈して実行する命令実行部のモデルである。また、実行部６１は、割り込み待機部６１ａを有し、割り込み待機部６１ａによって、置き換え部５０ａによって置き換えられた割り込み待機命令を実行する。
【００３２】
レジスタモデル６２は、シミュレーション対象のＣＰＵのレジスタファイルを表現するモデルであり、各レジスタはシミュレーション装置１００上の変数として確保される。
【００３３】
メモリモデル６３は、シミュレーション対象の主記憶を表現するモデルである。
【００３４】
ＨＷモデル８０は、例えば、５μｓの所定間隔で割り込みを要求するタイマーモデルである。
【００３５】
ＨＷシミュレータ９０は、ＣＰＵモデル６０とＨＷモデル８０とを駆動可能なシミュレータである。
【００３６】
図６は、実機とシミュレーション装置との対応を説明するための図である。図６において、実機の場合において、ソフトウェア４０は、デバイスプログラマ４１によって実機ＣＰＵ４２内の記憶領域に書き込まれ組み込まれる。その同一のソフトウェア４０が、シミュレーション装置１００の場合、ＨＥＸ読み込み部５０によって、実機ＣＰＵ４２相当の動作をするＣＰＵモデル６０のメモリモデル６３に書き込まれる。
【００３７】
ソフトウェア４０は、命令語と配置アドレスの対のリストか、これに変換可能な形式で記述されたＨＥＸファイルである。命令語と配置アドレスの対のリストに変換可能な形式として、Ｉｎｔｅｌ  ＨＥＸ形式や、Ｍｏｔｏｒｏｌａ  Ｓ１９形式などが適用される。
【００３８】
図７は、第１実施例に係るＨＥＸ読み込み部による処理概要を説明するための図である。図７において、ＨＥＸファイル７ｂは、フォーマット７ａで示すように配置アドレスに対応させて命令語が記述される形式で、ソフトウェア４０の処理が記述されている。例えば、ＨＥＸファイル７ｂでは、配置アドレス「２３」と命令「Ｃ０」とが対で記述され、配置アドレス「４２」と命令「ＦＦ」とが対で記述され、配置アドレス「４３」と命令「ＥＥ」とが対で記述されている。ここで、命令「Ｃ０」は１命令でアイドルループを構成する命令とする。
【００３９】
ＨＥＸ読み込み部５０によってＨＥＸファイル７ｂが読み込まれると、記述に従ってメモリモデル６３に命令列の書き込みが行われる。従って、メモリモデル６３では、０ｘ２３番地に０ｘＣ０が書き込まれ、０ｘ４２番地に０ｘＦＦが書き込まれ、０ｘ４３番地に０ｘＥＥが書き込まれる。
【００４０】
命令列がメモリモデル６３に書き込まれると、ＨＥＸ読み込み部５０の置き換え部５０ａが、アイドルループを示す０ｘＣ０を割り込み待機命令を示す０ｘＢＢで置き換える。
【００４１】
ＨＥＸファイル７ｂを読み込むＨＥＸファイル読み込み処理について、置き換え部５０ａを備えないため置き換え処理が行われない場合の処理を対比させて、第１実施例に係る置き換え部５０ａを有するＨＥＸ読み込み部５０による処理について説明する。
【００４２】
図８は、ＨＥＸファイル読み込み処理を説明するためのフローチャート図である。図８（Ａ）は置き換え処理が行われない場合のフローチャートを示し、図８（Ｂ）は置き換え処理が行われる場合のフローチャートを示しており、同一処理には同一ステップ番号を付してある。
【００４３】
図８（Ｂ）を参照して、ＨＥＸ読み込み部５０による処理を説明する。図８（Ｂ）において、ＨＥＸ読み込み部５０は、ＨＥＸファイルの先頭から順に、配置アドレスを取得し、変数Ａに設定し（ステップＳ１１）、取得した配置アドレスに対応させたデータ列から１バイトのＯＰ（命令語）を読み込み、ＯＰをメモリモデル６３のアドレスＡに格納する（ステップＳ１２）。
【００４４】
ＨＥＸ読み込み部５０は、置き換え部５０ａによってアイドルループの割り込み待機命令への置き換え処理Ｐ２０を実行する。置き換え処理Ｐ２０は図９で説明される。
【００４５】
置き換え処理Ｐ２０の終了後、ＨＥＸ読み込み部５０は、ＨＥＸファイルの末尾まで読み込んだか否かを判断する（ステップＳ１３）。ＨＥＸファイルの末尾まで読み込んでいない場合、ＨＥＸ読み込み部５０は、ステップＳ１１へ戻り上述同様の処理を繰り返し、ＨＥＸファイルの末尾まで読み込んだ場合、この処理を終了する。
【００４６】
図８（Ａ）に示す置き換え処理が行われない場合のフローチャートでは、図８（Ｂ）と同様のステップＳ１１及びＳ１２を行った後、ＨＥＸファイルの末尾まで読み込んだか否かを判断するステップＳ１３を行う処理となる。
【００４７】
一方、図８（Ｂ）の置き換え処理が行われる場合では、図９に示すような置き換え処理Ｐ２０が実行される。図９は、置き換え部による処理を説明するための図である。図９において、置き換え部５０ａは、ＯＰ（命令語）が変数Ａの値以下のアドレスへの無条件ジャンプか否かを判断する（ステップＳ２１）。無条件ジャンプでない場合、置き換え部５０ａは、この処理を終了する。
【００４８】
一方、無条件ジャンプである場合、置き換え部５０ａは、ジャンプ先のアドレスを変数Ａ'とする（ステップＳ２２）。
【００４９】
そして、置き換え部５０ａは、変数Ａ'（アドレスＡ'）から変数Ａ（アドレスＡ）までの命令が全てｎｏｐ又はｗａｉｔか否かを判断する（ステップＳ２３）。ここで、ｗａｉｔはＣＰＵ固有の待機命令とする。全てｎｏｐ又はｗａｉｔでない場合、置き換え部５０ａは、この処理を終了する。
【００５０】
一方、全てｎｏｐ又はｗａｉｔである場合、置き換え部５０ａは、変数Ａ'（アドレスＡ'）から変数Ａ（アドレスＡ）の命令を全て割り込み待機命令に置き換える（ステップＳ２４）。そして、置き換え部５０ａは、この処理を終了する。
【００５１】
このような置き換え処理Ｐ２０を実行することによって、置き換えられるアイドルループの例と、置き換えられた割り込み待機命令の例について説明する。図１０は、置き換え例を説明するための図である。図１０において、リストＬ３では、置き換えられるアイドルループ例（１）、（２）、（３）が示され、リストＬ４では、リストＬ３のアイドルループ例（１）、（２）、（３）を割り込み待機命令で置き換えた結果を示している。
【００５２】
アイドルループ例（１）では、"end1"命令の直後に"jump end1"命令となるため、"jump end1"命令のみが割り込み待機命令である"wait-for-interrupt"命令に置き換わる。
【００５３】
アイドルループ例（２）では、"end2"命令後に"nop"命令が２回続き"jump end2"命令となるため、２回の"nop"命令と"jump end2"とが"wait-for-interrupt"命令に置き換わる。
【００５４】
アイドルループ例（３）では、"end3"命令後に"wait"命令そして"jump end3"命令となるため、その"wait"命令と"jump end3"命令とが"wait-for-interrupt"命令に置き換わる。
【００５５】
図１０では、置き換え前のリストＬ３と置き換え後のリストＬ４で、置き換え部５０ａによる置き換え処理Ｐ２０の例を説明したが、置き換え処理Ｐ２０は、図７で説明したように、メモリモデル６３内のＨＥＸコードが置き換わる処理である。
【００５６】
次に、実行部６１での処理について説明する。図１１は、実行部による処理の概要を説明するための図である。図１１において、レジスタモデル６２は、ＰＣ（プログラムカウンタ）６２ａと、その他のレジスタ６２ｂとを有する。
【００５７】
先ず、実行部６１は、ＰＣ６２ａから値を取得して（ステップＳ３１）、取得した値をアドレスとしてメモリモデル６３から命令を読み出す（ステップＳ３２）。そして、実行部６１は、ステップＳ３２で読み出した命令の長さ分のバイト数をＰＣ６２ａの値に加算する（ステップＳ３３）。
【００５８】
次に、実行部６１は、読み出した命令が割り込み待機命令であるか否かを判断する（ステップＳ３４）。
【００５９】
割り込み待機命令である場合、実行部６１は、ステップＳ３３で加算したＰＣ６２ａを加算前の状態に戻し、ＨＷシミュレータ９０から割り込みイベントが通知されるまで待機する。割り込みイベントが通知されると、実行部６１は、ステップＳ３１へ戻り、上述同様の処理を繰り返す。
【００６０】
一方、割り込み待機命令でない場合、実行部６１は、ステップＳ３２で読み出した命令に相当するホストＣＰＵの命令列を実行し、必要ならレジスタモデル６２の値や、メモリモデル６３の値を変更する。
【００６１】
ステップＳ３２の命令がメモリモデル６３などを通してハードウェアにアクセスし、ＨＷモデル８０内で時間が経過し、その間に割り込みが発生した場合、実行部６１は、ステップＳ３２で読み出した命令が不可分であるか否かを判断する（ステップＳ３５）。
【００６２】
読み出した命令が不可分である場合、実行部６１は、割り込み待機部６１ａによって、割り込みの発生を保存し、ステップＳ３２の命令が完了するまで待機する。ステップＳ３２の命令の処理完了後、割り込みを実行する。
【００６３】
読み出した命令が不可分でない場合、実行部６１は、ソフトウェア４０が組み込まれるＣＰＵ３１の仕様に従ってＰＣ６２ａの値などを保存し、割り込みを実行する。ＣＰＵ３１がIntel社が開発したｘ８６系のＣＰＵであれば、ｘ８６系の仕様に従ってＰＣ６２ａの値などを保存する。以下同様である。
【００６４】
置き換え処理の有無の違いによる実行部の処理を対比させて、第１実施例に係る実行部６１による処理について説明する。
【００６５】
図１２は、実行部による処理を説明するためのフローチャート図である。図１２（Ａ）は置き換え処理が行われない場合の実行部による処理のフローチャートを示し、図１２（Ｂ）は置き換え処理が行われる場合の実行部６１による処理のフローチャートを示しており、同一処理には同一ステップ番号を付してある。
【００６６】
図１２（Ｂ）を参照して、実行部６１による処理を説明する。図１２（Ｂ）において、実行部６１は、メモリモデル６３内のＰＣ６２ａが示すアドレスから１バイトを読み込み、ＯＰ（命令語）を取得して（ステップＳ４１）、ＰＣ６２ａの値に１を加算する（ステップＳ４２）。
【００６７】
実行部６１は、ステップＳ４１で取得したＯＰが割り込み待機命令か否かを判断する（ステップＳ４２−５）。
【００６８】
割り込み待機命令の場合、実行部６１は、割り込み待機部６１ａによって割り込み待機処理Ｐ４５を行う。割り込み待機処理Ｐ４５は、以下のステップＳ４５−１からＳ４５−４を含む。
【００６９】
割り込み待機部６１ａは、ＰＣ６２ａの値からステップＳ４２で加算した値「１」を減算し（ステップＳ４５−１）、割り込み発生まで待機する（ステップＳ４５−２）。割り込み待機部６１ａは、ＰＣ６２ａの値を退避した後（ステップＳ４５−３）、割り込み処理のアドレスをＰＣ６２ａにセットする（ステップＳ４５−４）。割り込み待機処理Ｐ４５の終了後、実行部６１は、ステップＳ４１へと戻り、上述同様の処理を繰り返す。
【００７０】
一方、ステップＳ４２−５にて、割り込み待機命令ではないと判断した場合、実行部６１は、割り込み処理を考慮しつつ、ソフトウェア４０が組み込まれるＣＰＵ３１の仕様に従って、ＯＰに相当する命令列を実行し（ステップＳ４６）、ステップＳ４１へと戻る。ステップＳ４６における命令列の実行中の割り込み処理については、図１３で詳述される。
【００７１】
図１２（Ａ）に示す置き換え処理が行われない場合のフローチャートでは、図１２（Ｂ）と同様のステップＳ４１及びＳ４２を実行した後、単に、ソフトウェア４０が組み込まれるＣＰＵ３１の仕様に従って、ＯＰに相当する命令列を実行し（ステップＳ４３）、１μｓの所定時間待機する（ステップＳ４４）。
【００７２】
図１２（Ｂ）に戻り、第１実施例に係る実行部６１の処理では、符号Ｄ４４で示されるように、図１２（Ａ）に示す所定時間待機するステップＳ４４の処理が省略可能となる。従って、１命令を実行する毎に発生する待機時間を省略することができる。
【００７３】
図１３は、割り込み処理を考慮した命令列の実行処理を説明するためのフローチャート図である。図１３において、実行部６１は、ＯＰ（命令語）の実行中に時間が経過したか否かを判断する（ステップＳ４６−１）。経過していない場合、実行部６１は、この処理を終了する。
【００７４】
時間が経過した場合、実行部６１は、ＯＰの実行中に割り込みが発生したか否かを判断する（ステップＳ４６−２）。発生していない場合、実行部６１は、この処理を終了する。
【００７５】
割り込みが発生した場合、実行部６１は、更に、命令は不可分か否かを判断する（ステップＳ４６−３）。不可分である場合、実行部６１は、ＯＰ完了を待機し（ステップＳ４６−４）、ＰＣ６２ａの値などを退避する（ステップＳ４６−５）。そして、実行部６１は、割り込み処理のアドレスをＰＣ６２ａにセットして（ステップＳ４６−６）、この処理を終了する。
【００７６】
不可分でない場合、実行部６１は、ＰＣ６２ａの値などを退避する（ステップＳ４６−７）。そして、実行部６１は、割り込み処理のアドレスをＰＣ６２ａにセットして（ステップＳ４６−８）、この処理を終了する。
【００７７】
上述した、第１実施例に係るＨＥＸ読み込み部５０及び実行部６１によって、１命令毎の待機を省略し、割り込み毎の待機とすることで、シミュレーションの実行時間を短縮することができる。第１実施例を適用しないために１命令毎に待機処理が発生する場合と、第１実施例を適用することにより割り込み毎の待機処理とした場合の比較を図１４に示す。
【００７８】
図１４は、シミュレーションの実行時間の比較例を示す図である。図１４中、シミュレーション時間を横軸に示している。また、図２に示すリストＬ１及びＬ２に従って、図３に示すように動作するソフトウェアの処理フローをシミュレーションした場合の比較例を示す。図３に示すステップに相当する箇所を同一符号で示している。
【００７９】
図１４（Ａ）では、第１実施例を適用しない場合を、ＨＷシミュレータ１４ａ、ＨＷモデル１４ｂ、ＣＰＵモデル１４ｃとして示す。ステップＳ２の割り込み発生によって、ステップＳ３の"inc"命令、ステップＳ４の"reti"命令、次の割り込みが発生するまでの間繰り返されるステップＳ１の"jump"命令の実行毎に、図１２（Ａ）のステップＳ４４の実行により、１μｓの待機処理１４ｐがＨＷシミュレータ１４ａに発生する。
【００８０】
そのため、１μｓの待機処理１４ｐにかかる３００ｎｓがシミュレーション時間に累積されることにより、次の割り込みまでの実時間の合計が２１７０ｎｓとなる。
【００８１】
一方、第１実施例を適用した図１４（Ｂ）に示すシミュレーションでは、１命令毎の１μｓの待機処理１４ｐ（図１２（Ａ）のステップＳ４４）を省略可能とし（図１２（Ｂ）の符号Ｄ４４）、更に、"jump"命令が割り込み待機命令に置き換わることにより（図８及び図９の置き換え処理Ｐ２０）、ＣＰＵモデル６０による"jump"命令の実行が省略される。よって、１命令毎の１μｓの待機処理１４ｐにかかる３００ｎｓと、"jump"命令の実行に必要な１０ｎｓとが省略される。
【００８２】
ＣＰＵモデル６０は、１命令毎に待機することなく、１処理ルーチン内のアイドルループ以外の命令列を連続してソフトウェア４０を動作させることができる。
【００８３】
また、アイドルループが割り込み待機命令に置き換わることにより、ＨＷシミュレータ９０は、所定の５μｓ時間待機することなく、次の割り込み要求をＨＷモデル８０からＣＰＵモデル６０に行わせることができる。
【００８４】
このように、ソフトウェア４０をシミュレーションする際のＨＷシミュレータ９０との同期回数を削減することによって、シミュレーション全体における次の割り込みまでのシミュレーションの実時間の合計は９５０ｎｓとなる。従って、第１実施例を適用しない図１４（Ａ）に示すシミュレーション例と比べると、よりシミュレーション時間を短縮することが可能となる。
【００８５】
第１実施例では、レジスタモデル６２は既存のレジスタモデルを適用可能である。また、メモリモデル６３についても、時間精度が時間を評価するタイムドか時間を評価しないアンタイムドかを問わず既存のメモリモデルを適用可能である。同様に、ＨＷモデル８０についても、タイムドかアンタイムドかを問わず既存のＨＷモデルを適用可能である。ＨＷシミュレータ９０は、ＨＷモデル８０を駆動できるシミュレータであればよい。
【００８６】
［第２実施例］
第２実施例では、オブジェクト指向言語C++を利用して電子回路設計を可能とするＳｙｓｔｅｍＣによるＨＷシミュレータにおいて、第１実施例で説明したＨＥＸ読み込み部５０と実行部６１とを適用した場合の各モデルの構成例について説明する。
【００８７】
図１５は、第２実施例に係るシミュレーション装置の機能構成例を示す図である。図１５において、シミュレーション装置１００−２は、図４のＣＰＵ１１がプログラムを実行することによって実現される、ＨＥＸ読み込み部５０と、ＣＰＵモデル６０−２と、ＨＷモデルであるタイマーモデル８０−２と、ＨＷシミュレータ９０−２とを有する。
【００８８】
ソフトウェア４０−２は、後述される図１６に示すリストＬ５及びＬ６のＨＥＸファイルであり、図４の記憶装置１７に格納される。
【００８９】
置き換え部５０ａを有するＨＥＸ読み込み部５０は、第１実施例と同様である。
【００９０】
ＣＰＵモデル６０−２は、実行部６１と、レジスタモデル６２−２と、メモリモデル６３−２とを有し、ソフトウェア４０−２を実行することによって、タイマーモデル８０−２からの割り込みに応じた処理を行う。
【００９１】
実行部６１は、第１実施例と同様である。
【００９２】
レジスタモデル６２−２は、シミュレーション対象のＣＰＵのレジスタファイルを表現するモデルであり、各レジスタはシミュレーション装置１００上の変数として確保される。レジスタモデル６２−２は、後述される図１７に示す５つのレジスタを有する。
【００９３】
メモリモデル６３は、シミュレーション対象の主記憶を表現するモデルであり、後述される図１８に示す構造を有する。
【００９４】
タイマーモデル８０−２は、５μｓの所定間隔で割り込みを要求するタイマーモデルであり、後述される図２２の構成を有する。
【００９５】
ＨＷシミュレータ９０は、タイマーモデル８０−２を駆動可能なＳｙｓｔｅｍＣによるシミュレータである。
【００９６】
図１６は、第２実施例に係るソフトウェアの例を示す図である。図１６に示すように、ソフトウェア４０−２は、リストＬ５とリストＬ６を表現するＨＥＸファイルである。ＨＥＸファイルには、命令語とその配置アドレスの対のリストが記述され、命令語長は４バイト、データ幅も４バイトである。
【００９７】
リストＬ５は、スタートアップルーチンであり、アイドルループのみで構成される。リストＬ５の"jump end"命令は、第１実施例に従って割り込み待機命令である"wait-for-interrupt"命令に置き換わる。
【００９８】
また、リストＬ６は、タイマー割り込み処理ルーチンであり、レジスタ０にタイマーモデル８０−２の値をコピーする“load”命令と、主記憶（後述されるメモリ領域６３ｂ）にレジスタ０をコピーする“store”命令と、割り込み処理ルーチンを完了する“reti”命令とを有する。第１実施例が適用されるため、ソフトウェア４０−２を動作させた際には、１命令毎の待機は省略される。
【００９９】
図１７は、第２実施例に係るレジスタモデルの例を示す図である。図１７に示すように、レジスタモデル６２−２は、以下の５種類の３２ビットレジスタを有する。
・Ｒ０レジスタ６ａは、汎用レジスタである。
・ＰＣレジスタ６ｂは、プログラムカウンタ用のレジスタである。
・ＳＴＡＴＵＳレジスタ６ｃは、ステータス／フラグレジスタである。
・ＥＩＰＣレジスタ６ｄは、割り込み発生時のＰＣレジスタ６ｂの値を退避するための退避レジスタである。
・ＥＩＳＴＡＴＩＳレジスタ６ｅは、割り込み発生時のＳＴＡＴＵＳレジスタ６ｃの値を退避するための退避レジスタである。
【０１００】
図１８は、第２実施例に係るメモリモデルの例を示す図である。図１８に示すメモリモデル６３−２は、アンタイムドのメモリモデルとして、アドレスをキーとする連想配列６３ａの構造と、Ｉｎｉｔ関数Ｉ／Ｆ（インタフェース）６３ｉと、Ｒｅａｄ関数Ｉ／Ｆ６３ｒと、Ｗｒｉｔｅ関数Ｉ／Ｆ６３ｗとを有する。
【０１０１】
連想配列６３ａは、アドレス値が３２ビットの場合、上位８ビットをキー６３ａ−２とし、メモリ領域６３ｂへのポインタと連想配列６３ｃへのポインタとの対を示す値６３ａ−４によって構成される。
【０１０２】
連想配列６３ａにおいて、キー６３ａ−２が「００」の場合、連想配列６３ａの値６３ａ−４によって、メモリ領域６３ｂへのポインタと、連想配列６３ｃへのポインタとの対が与えられる。キー６３ａ−２が「０１」の場合、メモリ領域６３ｂへのポインタと、連想配列６３ｃは存在せず空ポインタとの対が与えられる。キー６３ａ−２が「０２」の場合、メモリ領域６３ｂ及び連想配列６３ｃとも存在せず空ポインタの対が与えられる。
【０１０３】
メモリ領域６３ｂは、１６ＭＢの連続した領域を持ち、シミュレーション装置１００−２における主記憶を表現する。
【０１０４】
連想配列６３ｃは、ＩＯ関数のアドレスをキー６３ｃ−２として、呼び出すＩＯ関数が値６３ｃ−４で与えられる。ＩＯ関数の一例は、図２２及び図２３で後述される。
【０１０５】
Ｉｎｉｔ関数Ｉ／Ｆ６３ｉは、連想配列６３ａと連想配列６３ｃとを初期化してＩＯ関数を設定するためのＩｎｉｔ（初期化）関数用のインタフェースである。
【０１０６】
Ｒｅａｄ関数Ｉ／Ｆ６３ｒは、ＲＥＡＤモードでＩＯ関数を呼び出してデータを読み出すＲｅａｄ関数用のインタフェースである。
【０１０７】
Ｗｒｉｔｅ関数Ｉ／Ｆ６３ｗは、ＷＲＩＴＥモードでＩＯ関数を呼び出してデータを書き込むＷｒｉｔｅ関数用のインタフェースである。
【０１０８】
メモリモデル６３−２へのアクセスは、初期化時は、ＨＷシミュレータ９０−２によりＩｎｉｔ関数を通してＩＯ関数の設定が行われる。命令列の設定は、ＨＷシミュレータ９０−２により、Ｗｒｉｔｅ関数を通して行われる。また、シミュレーション実行時は、実行部６１からＲｅａｄ関数とＷｒｉｔｅ関数を通して行われる。
【０１０９】
図１９は、メモリモデルの初期化処理を説明するためのフローチャート図である。図１９に示すメモリモデル６３−２の初期化関数は、Ｉｎｉｔ関数Ｉ／Ｆ６３ｉを介して、ＨＷシミュレータ９０−２のメイン処理部から呼び出され、ＩＯ関数のアドレスと、ＩＯ関数へのポインタと、アクセスワードサイズの組のリストを受け取り（ステップＳ１０１）、初期化処理が行われる。
【０１１０】
リストが空リストか否かが判断される（ステップＳ１０２）。リストが空リストでない場合、リストの先頭から順に組を取得して変数Ｈに設定し、リストの先頭が次の組を指定するようにして残りの組をリストとする（ステップＳ１０３）。そして、変数Ｈをメモリモデル６３−２内に格納する処理を行い（リスト格納処理Ｐ１２０）、ステップＳ１０２へ戻る。
【０１１１】
一方、ステップＳ１０２において、リストが空リストである場合、つまり、メモリモデル６３−２に格納する組が存在しない場合、この初期化処理が終了する。
【０１１２】
リスト格納処理Ｐ１２０について説明する。リスト格納処理Ｐ１２０では、ＩＯ関数のアドレスを変数Ａに設定し、ＩＯ関数のポインタ値を変数Ｐに設定し、ワードサイズを変数Ｌに設定する（ステップＳ１２１）。そして、変数Ａの上位８ビットを変数ＡＨに設定し、下位２４ビットを変数ＡＬに設定する（ステップＳ１２２）。
【０１１３】
変数ＡＨは連想配列６３ａのキー６３ａ−２を示し、変数ＡＬは連想配列６３ｃのキー６３ｃ−２を示す。
【０１１４】
変数ＡＨの値をキー６３ａ−２とするメモリ領域６３ｂへのポインタが空ポインタか否かを判断する（ステップＳ１２３）。空ポインタの場合、１６ＭＢのメモリ領域６３ｂを確保し、その先頭アドレスを連想配列６３ａの値６３ａ−４のメモリ領域へのポインタに格納する（ステップＳ１２４）。また、空の連想配列６３ｃを作成し、その先頭アドレスを連想配列６３ａの値６３ａ−４の連想配列へのポインタに格納して（ステップＳ１２５）、ステップＳ１２６へと進む。
【０１１５】
ステップＳ１２３にて、変数ＡＨの値をキー６３ａ−２とするメモリ領域６３ｂへのポインタが空ポインタでない場合、更に、変数ＡＨの値をキー６３ａ−２とする連想配列６３ｃへのポインタが空ポインタか否かを判断する（ステップＳ１２３−２）。空ポインタの場合、ステップＳ１２５での処理を行うことによって、空の連想配列６３ｃを作成し、その先頭アドレスを連想配列６３ａの値６３ａ−４の連想配列へのポインタに格納して、ステップＳ１２６へと進む。ステップＳ１２３−２にて、変数ＡＨの値をキー６３ａ―２とする連想配列６３ｃへのポインタが空ポインタでない場合、ステップＳ１２６へ進む。
【０１１６】
［ＡＬ  ．．  ＡＬ＋Ｌ−１］の夫々をキー６３ｃ−２とする値６３ｃ−４に、空ポインタを格納し（ステップＳ１２６）、ＡＬをキー６３ｃ−２とする値６３ｃ−４にステップＳ１２１で設定した変数Ｐの値を格納する（ステップＳ１２７）。そして、このリスト格納処理が終了する。
【０１１７】
図２０は、メモリモデルのデータ読出処理を説明するためのフローチャート図である。ここでは、アライメントデータアクセスの場合で説明する。図２０に示すメモリモデル６３−２からデータを読み出すためのＲｅａｄ関数が、Ｒｅａｄ関数Ｉ／Ｆ６３ｒを介して呼び出されると、データ読出処理を開始する。
【０１１８】
読み出すデータのアドレスを変数Ａに設定し、読み出したデータの格納先へのポインタを変数Ｐに設定し、読み出しバイト数を変数Ｌに設定する（ステップＳ１３１）。また、変数Ａの上位８ビットを変数ＡＨに設定し、下位２４ビットを変数ＡＬに設定する（ステップＳ１３２）。
【０１１９】
そして、変数ＡＨの値をキー６３ａ−２とするメモリ領域６３ｂへのポインタが空ポインタか否かを判断する（ステップＳ１３３）。空ポインタの場合、変数Ｐの指す格納先に０を格納して（ステップＳ１３４）、このデータ読出処理を終了する。これは、連想配列６３ａのキー６３ａ−２が「０２」を示す場合の処理である。
【０１２０】
一方、メモリ領域６３ｂへのポインタが空ポインタでない場合、更に、変数ＡＨの値をキー６３ａ−２とする連想配列６３ｃへのポインタが空ポインタか否かを判断する（ステップＳ１３５）。空ポインタの場合、メモリ領域６３ｂのＡＬバイト目からＬバイトのデータを読み出して変数Ｐの指す格納先に格納し（ステップＳ１３６）、このデータ読出処理を終了する。メモリ領域６３ｂの先頭に変数ＡＬで示されるバイト数を加算した読み出し開始位置から変数Ｌで示される読み出しバイト数分のデータが読み出され、変数Ｐの指す格納先に格納される。これは、連想配列６３ａのキー６３ａ−２が「０１」を示す場合の処理である。
【０１２１】
以下のステップＳ１３７からＳ１３９での処理が連想配列６３ａのキー６３ａ−２が「００」を示す場合の処理に相当する。
【０１２２】
ステップＳ１３５にて、連想配列６３ｃへのポインタが空ポインタでない場合、連想配列６３ｃに変数ＡＬの値をキー６３ｃ−２とするエントリーが存在するか否かを判断する（ステップＳ１３７）。エントリーが存在しない場合、メモリ領域６３ｂのＡＬバイト目からＬバイトのデータを読み出して変数Ｐの指す格納先に格納し（ステップＳ１３８）、このデータ読出処理を終了する。メモリ領域６３ｂの先頭に変数ＡＬで示されるバイト数を加算した読み出し開始位置から変数Ｌで示される読み出しバイト数分のデータが読み出され、変数Ｐの示す値に格納される。
【０１２３】
一方、エントリーが存在する場合、変数ＡＬの値をキー６３ｃ−２とする連想配列６３ｃの値６３ｃ−４のＩＯ関数をＲＥＡＤモードで呼び出し、結果を変数Ｐの指す格納先に格納する（ステップＳ１３９）。そして、このデータ読出処理を終了する。
【０１２４】
図２１は、メモリモデルのデータ書込処理を説明するためのフローチャート図である。ここでは、アライメントデータアクセスの場合で説明する。図２１に示すメモリモデル６３−２へデータを書き込むためのＷｒｉｔｅ関数が、Ｗｒｉｔｅ関数Ｉ／Ｆ６３ｗを介して、ＨＷシミュレータ９０−２のメイン処理部から呼び出されると、データ書込処理を開始する。
【０１２５】
書き込むアドレスを変数Ａに設定し、書き込むデータが格納された左辺値へのポインタを変数Ｐに設定し、書き込むバイト数を変数Ｌに設定する（ステップＳ１４１）。また、変数Ａの上位８ビットを変数ＡＨに設定し、下位２４ビットを変数ＡＬに設定する（ステップＳ１４２）。
【０１２６】
そして、変数ＡＨの値をキー６３ａ−２とするメモリ領域６３ｂへのポインタが空ポインタか否かを判断する（ステップＳ１４３）。空ポインタの場合、１６ＭＢのメモリ領域６３ｂを確保し、先頭アドレスを連想配列６３ａのメモリ領域６３ｂへのポインタに格納する（ステップＳ１４４）。続けて、メモリ領域６３ｂのＡＬバイト目からＬバイトに変数Ｐの指す格納先のデータを書き込み（ステップＳ１４６）、このデータ書込処理を終了する。メモリ領域６３ｂの先頭に変数ＡＬで示されるバイト数を加算した書き込み開始位置から変数Ｌで示される書き込みバイト数分の領域に、変数Ｐの指す格納先のデータを書き込む。これは、連想配列６３ａのキー６３ａ−２が「０２」を示す場合の処理である。
【０１２７】
一方、メモリ領域６３ｂへのポインタが空ポインタでない場合、更に、変数ＡＨの値をキー６３ａ−２とする連想配列６３ｃへのポインタが空ポインタか否かを判断する（ステップＳ１４５）。空ポインタの場合、メモリ領域６３ｂのＡＬバイト目からＬバイトに変数Ｐの指す格納先のデータを書き込み（ステップＳ１４６）、このデータ書込処理を終了する。これは、連想配列６３ａのキー６３ａ−２が「０１」を示す場合の処理である。
【０１２８】
以下のステップＳ１４７からＳ１４９での処理が連想配列６３ａのキー６３ａ−２が「００」を示す場合の処理に相当する。
【０１２９】
ステップＳ１４５にて、連想配列６３ｃへのポインタが空ポインタでない場合、連想配列６３ｃに変数ＡＬの値をキー６３ｃ−２とするエントリーが存在するか否かを判断する（ステップＳ１４７）。エントリーが存在しない場合、メモリ領域６３ｂのＡＬバイト目からＬバイト分の領域に変数Ｐの指す格納先のデータを書き込み（ステップＳ１４８）、このデータ書込処理を終了する。メモリ領域６３ｂの先頭に変数ＡＬで示されるバイト数を加算した書き込む開始位置から変数Ｌで示される書き込みバイト数分の領域に、変数Ｐの指す格納先のデータが書き込まれる。
【０１３０】
一方、エントリーが存在する場合、変数ＡＬの値をキー６３ｃ−２とする連想配列６３ｃの値６３ｃ−４のＩＯ関数をＷＲＩＴＥモードで呼び出す（ステップＳ１４９）。そして、このデータ書込処理を終了する。
【０１３１】
次に、タイマーモデル８０−２について図２２及び図２３で説明する。図２２は、タイマーモデルの構成例を示す図である。図２３は、タイマーモデルのプログラム例である。図２２において、タイマーモデル８０−２は、ＳｙｓｔｅｍＣを使用したＨＷシミュレータ上で動作するＨＷモデルであり、時刻データ（Tick）８３と、図２３に示すようなbehavior関数８４ａ及びaccess関数８４ｂと、behavior関数８４ａ用のbehavior関数Ｉ／Ｆ８２ａと、access関数８４ｂ用のaccess関数Ｉ／Ｆ８２ｂと、ＣＰＵモデル６０−２に割り込み要求を行うためのＩＲＱ（Interrupt ReQuest）  Ｉ／Ｆ８２ｃとを有する。
【０１３２】
behavior関数８４ａは、ＳｙｓｔｅｍＣのSC_METHOD又はSC_THREADとして表現され、図２３に示すように、時刻データ８３に１加算して、ＣＰＵモデル６０−２に割り込みを通知した後、所定間隔の５μｓ待機する処理を行う。
【０１３３】
access関数８４ｂは、メモリモデル６３−２にＩＯ関数としてマッピングされる、制御の遷移の伴わない関数であり、図２３に示すように、指定されたアドレスに時刻データ（Tick）８３を書き込む処理を行う。時刻などの待機は行わない。
【０１３４】
図２４は、第２実施例に係るシミュレーション装置の動作シーケンスを示す図である。図２４中、横軸にシミュレーション時間を示す。図２４において、割り込みが発生するたびに、ＬＯＡＤ命令、ＳＴＯＲＥ命令、ＲＥＴＩ命令、及び割り込み待機命令が行われることを示している。割り込み待機命後の動作は、図１４（Ｂ）で説明した通りである。
【０１３５】
ＬＯＡＤ命令によって、ＣＰＵモデル６０−２は、メモリモデル６３−２を通して、タイマーモデル６３−２から時刻データ８３を取得する。タイマーモデル６３−２の制御の遷移の伴わないaccess関数８４ｂを通して時刻データ８３を取得する。
【０１３６】
ＳＴＯＲＥ命令によって、ＣＰＵモデル６０−２は、メモリモデル６３−２を通して、主記憶を表現するメモリ領域６３ｂに時刻データ８３を書き込む。
【０１３７】
ＲＥＴＩ命令によって、ＣＰＵモデル６０−２は、割り込み処理ルーチンを完了する。
【０１３８】
割り込み待機命令によって、ＣＰＵモデル６０−２は、次の割り込み発生まで待機する。
【０１３９】
図２４に示すシミュレーション装置１００−２の動作シーケンスは、ソフトウェア４０−２（図１６に示すリストＬ５及びＬ６のＨＥＸファイル）を実機で実行した場合と同じ動作であり、第２実施例に係るシミュレーション装置１００−２でソフトウェア４０−２の検証が可能であることを示している。
【０１４０】
上述したように、第１実施例では、ＨＥＸ読み込み部５０が、シミュレーション対象のＣＰＵ３１が解釈可能な命令列から無限ループ部分を検出し、これをシミュレーション内でのみ有効な割り込み待機命令に置き換える置き換え部５０ａを有し、実行部６１が、シミュレーション実行時に割り込み待機命令を解釈し、その命令によって周辺ハードウェアモデルからの割り込みが発生するまで待機する割り込み待機部６１ａを有することによって、ＨＷシミュレータ９０の処理における待機回数を削減できる。
【０１４１】
このように、協調シミュレーションにおいて、割り込みまでの無限ループ部分を割り込み待機命令に置き換えてソフトウェアとハードウェア間の命令毎の同期を省略し割り込み毎の同期とすることによりシミュレーションを高速に行うことができる。従って、クロック同期によるＩＳＳ（命令セットシミュレータ）よりも高速にシミュレーションすることが可能となる。
【０１４２】
また、第１実施例の機能構成に加えて、第２実施例に示すようなアンタイムドのメモリモデル６３−２をＣＰＵモデル６０−２に組み込むことによって、メモリ領域６３ｂ（主記憶）へのＩＯアクセスを、ソフトウェア４０−２を実機で実行した場合と同じ動作で実現できる。
【０１４３】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【０１４４】
以上の第１から第２実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
組込みソフトウェアを検証するための論理的な単体又は複数のハードウェアモデルを駆動するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した前記単体又は複数のハードウェアモデルの一つであり、前記ハードウェアシミュレータとの命令毎の同期を省略して該組込みソフトウェアを動作させるＣＰＵモデルと
を有することを特徴とするシミュレーション装置。
（付記２）
前記単体又は複数のハードウェアモデルの一つであり、割り込みを発生させる割り込みモデル
を有することを特徴とする付記１記載のシミュレーション装置。
（付記３）
前記ＣＰＵモデルは、メモリモデルを有し、
前記シミュレーション装置は、更に、組込みソフトウェアを表現する命令列を読み込んで前記メモリモデルに書き込む際に、無限ループ部分となる命令を割り込み待機命令に置き換えて該メモリモデルに書き込む置換手段を有し、
前記ＣＰＵモデルは、前記割り込み待機命令により次の割り込みまで待機することを特徴とする付記１又は２記載のシミュレーション装置。
（付記４）
前記メモリモデルは、アドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列を有し、
前記アドレスに従って対応する前記ＩＯ関数を呼び出してデータアクセスを行うことを特徴とする付記１乃至３のいずれか一項記載のシミュレーション装置。
（付記５）
前記メモリモデルは、前記アドレスの前記所定ビット以外をキーとして、メモリ領域の領域ポインタと前記関数用連想配列の配列ポインタの対を値とするポインタ用連想配列を有し、
前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタでない場合、前記アドレスに従って前記ＩＯ関数を呼び出してデータアクセスを行うことを特徴とする付記４記載のシミュレーション装置。
（付記６）
前記アドレスに従って前記ポインタ用連想配列により与えられた前記対の値に、前記領域ポインタ及び前記配列ポインタが与えられると共に前記関数用連想配列のキーが存在し、前記関数用連想配列の値が空ポインタの場合、前記関数用連想配列の値が空ポインタでない前記アドレスより小さい前記アドレスのうち、最も大きな前記アドレスに従って前記ＩＯ関数を呼び出してデータアクセスを行うことを特徴とする付記５記載のシミュレーション装置。
（付記７）
前記アドレスに従って前記ポインタ用連想配列により、空ポインタが前記配列ポインタに与えられる場合、前記メモリ領域のへのデータアクセスを行うことを特徴とする付記５又は６記載のシミュレーション装置。
（付記８）
前記ＩＯ関数は前記単体又は複数のハードウェアモデルが有するアクセス関数であることを特徴とする付記４乃至７のいずれか一項記載のシミュレーション装置。
（付記９）
コンピュータを組込みソフトウェアを検証するシミュレーション装置として機能させるコンピュータ実行可能なプログラムであって、該コンピュータを、
論理的な単体又は複数のハードウェアモデルを駆動するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した前記単体又は複数のハードウェアモデルの一つであり、前記ハードウェアシミュレータとの命令毎の同期を省略して該組込みソフトウェアを動作させるＣＰＵモデルとして機能させることを特徴とするコンピュータ実行可能なプログラム。
（付記１０）
前記コンピュータを、前記単体又は複数のハードウェアモデルの一つであり、割り込みを発生させる割り込みモデルとして機能させることを特徴とする付記９記載のコンピュータ実行可能なプログラム。
（付記１１）
前記ＣＰＵモデルは、メモリモデルを有し、
前記シミュレーション装置は、更に、組込みソフトウェアを表現する命令列を読み込んで前記メモリモデルに書き込む際に、無限ループ部分となる命令を割り込み待機命令に置き換えて該メモリモデルに書き込む置換手段を有し、
前記ＣＰＵモデルは、前記割り込みモデルからの割り込みに応じた前記組込みソフトウェアの動作後、前記割り込み待機命令により次の割り込みまで待機することを特徴とする付記１０記載のコンピュータ実行可能なプログラム。
（付記１２）
コンピュータを組込みソフトウェアを検証するシミュレーション装置として機能させるプログラムを格納したコンピュータ読取可能な記憶媒体であって、該コンピュータを、
論理的な単体又は複数のハードウェアモデルを駆動するハードウェアシミュレータと、
前記組込みソフトウェアを実行するＣＰＵの動作を模した前記単体又は複数のハードウェアモデルの一つであり、前記ハードウェアシミュレータとの命令毎の同期を省略して該組込みソフトウェアを動作させるＣＰＵモデルとして機能させることを特徴とするコンピュータ読取可能な記憶媒体。
（付記１３）
前記コンピュータを、前記単体又は複数のハードウェアモデルの一つであり、割り込みを発生させる割り込みモデルとして機能させることを特徴とする請求項１２記載のコンピュータ読み取り可能な記憶媒体。
（付記１４）
前記ＣＰＵモデルは、メモリモデルを有し、
前記シミュレーション装置は、更に、組込みソフトウェアを表現する命令列を読み込んで前記メモリモデルに書き込む際に、無限ループ部分となる命令を割り込み待機命令に置き換えて該メモリモデルに書き込む置換手段を有し、
前記ＣＰＵモデルは、前記割り込みモデルからの割り込みに応じた前記組込みソフトウェアの動作後、前記割り込み待機命令により次の割り込みまで待機することを特徴とする付記１３記載のコンピュータ読取可能な記憶媒体。
（付記１５）
前記メモリモデルは、アドレスの所定ビットをキーとするＩＯ関数呼び出しのための関数用連想配列を有し、
前記コンピュータに、前記アドレスに従って対応する前記ＩＯ関数を呼び出してデータアクセスを行わせることを特徴とする付記１４記載のコンピュータ読取可能な記憶媒体。
（付記１６）
組込みソフトウェアを検証するシミュレーション装置で実行されるシミュレーション方法であって、
ハードウェアシミュレータ上で駆動し、前記組込みソフトウェアを実行するＣＰＵの動作を模したＣＰＵモデルが、該ハードウェアシミュレータとの命令毎の同期を省略して該組込みソフトウェアを動作させることを特徴とするシミュレーション方法。
（付記１７）
前記ＣＰＵモデルは、メモリモデルを有し、
前記シミュレーション装置は、更に、組込みソフトウェアを表現する命令列を読み込んで前記メモリモデルに書き込む際に、無限ループ部分となる命令を割り込み待機命令に置き換えて該メモリモデルに書き込む置換手段を有し、
前記ＣＰＵモデルは、所定間隔で割り込みを発生させる割り込みモデルからの割り込み要求に応じた前記組込みソフトウェアの動作後、前記割り込み待機命令により次の割り込みまで待機することを特徴とする
付記１６記載のシミュレーション方法。
【符号の説明】
【０１４５】
６ａ          Ｒ０レジスタ
６ｂ          ＰＣレジスタ
６ｃ          ＳＴＡＴＵＳレジスタ
６ｄ          ＥＩＰＣレジスタ
６ｅ          ＥＩＳＴＡＴＩＳレジスタ
１１          ＣＰＵ
１２          メモリユニット
１３          表示ユニット
１４          出力ユニット
１５          入力ユニット
１６          通信ユニット
１７          記憶装置
１８          ドライバ
１９          記憶媒体
４０、４０−２    ソフトウェア
５０          ＨＥＸ読み込み部
５０ａ        置き換え部
６０、６０−２    ＣＰＵモデル
６１          実行部
６１ａ        割り込み待機部
６２、６２−２    レジスタモデル
６２ａ        ＰＣ
６２ｂ        その他のレジスタ
６３、６３−２    メモリモデル
６３ａ        連想配列
６３ａ−２    キー
６３ａ−４    値
６３ｂ        メモリ領域
６３ｃ        連想配列
６３ｃ−２    キー
６３ｃ−４    値
６３ｉ        Ｉｎｉｔ関数Ｉ／Ｆ
６３ｒ        Ｒｅａｄ関数Ｉ／Ｆ
６３ｗ        Ｗｒｉｔｅ関数Ｉ／Ｆ
８０          ＨＷモデル
８０−２      タイマーモデル
８２ａ        behavior関数Ｉ／Ｆ
８２ｂ        access関数Ｉ／Ｆ
８２ｃ        ＩＲＱ  Ｉ／Ｆ
８３          時刻データ
８４ａ        behavior関数
８４ｂ        access関数
９０          ＨＷシミュレータ
Ｌ１、Ｌ２、Ｌ３、Ｌ４、Ｌ５、Ｌ６  リスト
【図１】
0005625714.tif 000002
【図２】
0005625714.tif 000003
【図３】
0005625714.tif 000004
【図４】
0005625714.tif 000005
【図５】
0005625714.tif 000006
【図６】
0005625714.tif 000007
【図７】
0005625714.tif 000008
【図８】
0005625714.tif 000009
【図９】
0005625714.tif 000010
【図１０】
0005625714.tif 000011
【図１１】
0005625714.tif 000012
【図１２】
0005625714.tif 000013
【図１３】
0005625714.tif 000014
【図１４】
0005625714.tif 000015
【図１５】
0005625714.tif 000016
【図１６】
0005625714.tif 000017
【図１７】
0005625714.tif 000018
【図１８】
0005625714.tif 000019
【図１９】
0005625714.tif 000020
【図２０】
0005625714.tif 000021
【図２１】
0005625714.tif 000022
【図２２】
0005625714.tif 000023
【図２３】
0005625714.tif 000024
【図２４】
0005625714.tif 000025