(57)【特許請求の範囲】
【請求項１】
検証対象がハードウェアの処理とソフトウェアの処理とを行う場合に、前記検証対象がこれら処理を実行することで経過する時間の情報であるシミュレーション時間を管理することにより、前記検証対象の各処理の実行タイミングを再現するシミュレーション装置であって、
検証対象に実装されるハードウェアの処理を模擬するハードウェアモデルであって、該ハードウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するハードウェアモデルを実行するハードウェアモデル実行部と、
前記検証対象に実装されるソフトウェアの処理を模擬するソフトウェアモデルであって、該ソフトウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するソフトウェアモデルを実行するソフトウェアモデル実行部と、
ハードウェアモデルのシミュレーション時間の総経過時間である第１シミュレーション時間と、ソフトウェアモデルのシミュレーション時間の総経過時間である第２シミュレーション時間とを記憶するとともに、前記ハードウェアモデルが通知したシミュレーション時間を取得して、前記第１シミュレーション時間を取得したシミュレーション時間経過させ、前記ソフトウェアモデルが通知したシミュレーション時間を取得して、前記第２シミュレーション時間を取得したシミュレーション時間経過させるシミュレーション時間管理部と、
前記第１シミュレーション時間と前記第２シミュレーション時間とを比較し、前記第１シミュレーション時間の方が前記第２シミュレーション時間よりも経過している場合、前記ソフトウェアモデルを実行させ、前記第２シミュレーション時間の方が前記第１シミュレーション時間よりも経過している場合、前記ハードウェアモデルを実行させる実行指示部と、
前記ハードウェアモデルから前記ソフトウェアモデルへの割込み通知が現在有るか否かの情報を記憶する割込み管理部と、を有し、
前記実行指示部は、前記割込み管理部に割込み通知の有無を問い合わせ、割込み通知がある場合、前記ソフトウェアモデルの割込みハンドラを実行させ、割込み通知が無い場合、前記ソフトウェアモデルのタスクを実行させ、ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合には、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりにハードウェアモデルのみを実行させ、ハードウェアモデルから割込みが発生したときに、前記第２シミュレーション時間を前記第１シミュレーション時間まで進めることを特徴とするシミュレーション装置。
【請求項２】
請求項１に記載のシミュレーション装置において、
さらに、前記ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合に、その時点の第１シミュレーション時間において動作すべきハードウェアモデルがなければ、直近にハードウェアモデルが動作すべき時間まで第１シミュレーション時間を進めてハードウェアモデルを動作させることを特徴とするシミュレーション装置。
【請求項３】
検証対象がハードウェアの処理とソフトウェアの処理とを行う場合に、前記検証対象がこれら処理を実行することで経過する時間の情報であるシミュレーション時間を管理することにより、前記検証対象の各処理の実行タイミングを再現するシミュレーション処理を、コンピュータに実行させるシミュレーションプログラムであって、
検証対象に実装されるハードウェアの処理を模擬するプログラムであるハードウェアモデルであって、該ハードウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するハードウェアモデルをコンピュータに実行させ、
前記検証対象に実装されるソフトウェアの処理を模擬するプログラムであるソフトウェアモデルであって、該ソフトウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するソフトウェアモデルを前記コンピュータに実行させ、
ハードウェアモデルのシミュレーション時間の総経過時間である第１シミュレーション時間と、ソフトウェアモデルのシミュレーション時間の総経過時間である第２シミュレーション時間とを記憶装置に記憶させるとともに、前記ハードウェアモデルが通知したシミュレーション時間を取得して、前記第１シミュレーション時間を取得したシミュレーション時間経過させ、前記ソフトウェアモデルが通知したシミュレーション時間を取得して、前記第２シミュレーション時間を取得したシミュレーション時間経過させ、
前記第１シミュレーション時間と前記第２シミュレーション時間とを比較し、前記第１シミュレーション時間の方が前記第２シミュレーション時間よりも経過している場合、前記ソフトウェアモデルを実行させ、前記第２シミュレーション時間の方が前記第１シミュレーション時間よりも経過している場合、前記ハードウェアモデルを実行させる処理を前記コンピュータに実行させ、
さらに、前記ソフトウェアモデルを実行させる場合、前記ハードウェアモデルから前記ソフトウェアモデルへの割込み通知が現在有るか否かの情報が記憶される割込み管理部に、割込み通知の有無を問い合わせ、割込み通知がある場合、前記ソフトウェアモデルの割込みハンドラを実行させ、割込み通知が無い場合、前記ソフトウェアモデルのタスクを実行させ、
ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合には、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりにハードウェアモデルのみを実行させ、ハードウェアモデルから割込みが発生したときに、前記第２シミュレーション時間を前記第１シミュレーション時間まで進める処理を、前記コンピュータに実行させるシミュレーションプログラム。
【請求項４】
請求項３に記載のシミュレーションプログラムにおいて、
さらに、前記ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合に、その時点の第１シミュレーション時間において動作すべきハードウェアモデルがなければ、直近にハードウェアモデルが動作すべき時間まで第１シミュレーション時間を進めてハードウェアモデルを動作させる処理を、前記コンピュータに実行させることを特徴とするシミュレーションプログラム。
【請求項５】
検証対象がハードウェアの処理とソフトウェアの処理とを行う場合に、前記検証対象がこれら処理を実行することで経過する時間の情報であるシミュレーション時間を管理することにより、前記検証対象の各処理の実行タイミングを再現するシミュレーション処理を、コンピュータが実行するシミュレーション方法であって、
前記コンピュータが、
検証対象に実装されるハードウェアの処理を模擬するプログラムであるハードウェアモデルであって、該ハードウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するハードウェアモデルを実行し、
前記検証対象に実装されるソフトウェアの処理を模擬するプログラムであるソフトウェアモデルであって、該ソフトウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するソフトウェアモデルを実行し、
ハードウェアモデルのシミュレーション時間の総経過時間である第１シミュレーション時間と、ソフトウェアモデルのシミュレーション時間の総経過時間である第２シミュレーション時間とを記憶装置に記憶させるとともに、前記ハードウェアモデルが通知したシミュレーション時間を取得して、前記第１シミュレーション時間を取得したシミュレーション時間経過させ、前記ソフトウェアモデルが通知したシミュレーション時間を取得して、前記第２シミュレーション時間を取得したシミュレーション時間経過させ、
前記第１シミュレーション時間と前記第２シミュレーション時間とを比較し、前記第１シミュレーション時間の方が前記第２シミュレーション時間よりも経過している場合、前記ソフトウェアモデルを実行し、前記第２シミュレーション時間の方が前記第１シミュレーション時間よりも経過している場合、前記ハードウェアモデルを実行する処理を実行し、
さらに、前記ソフトウェアモデルを実行する場合、前記ハードウェアモデルから前記ソフトウェアモデルへの割込み通知が現在有るか否かの情報が記憶される割込み管理部に、割込み通知の有無を問い合わせ、割込み通知がある場合、前記ソフトウェアモデルの割込みハンドラを実行し、割込み通知が無い場合、前記ソフトウェアモデルのタスクを実行し、
ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合には、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりにハードウェアモデルのみを実行し、ハードウェアモデルから割込みが発生したときに、前記第２シミュレーション時間を前記第１シミュレーション時間まで進める処理を、
実行するシミュレーション方法。
【請求項６】
請求項５に記載のシミュレーション方法において、
さらに、前記ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合に、動作すべきハードウェアモデルがなければ、ハードウェアモデルが動作すべき時間まで第１シミュレーション時間を進めてハードウェアモデルを動作させることを特徴とするシミュレーション方法。
【請求項７】
検証対象がハードウェアの処理とソフトウェアの処理とを行う場合に、前記検証対象がこれら処理を実行することで経過する時間の情報であるシミュレーション時間を管理することにより、前記検証対象の各処理の実行タイミングを再現するシミュレーション装置であって、
検証対象に実装されるハードウェアの処理を模擬するハードウェアモデルであって、該ハードウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するハードウェアモデルを実行するハードウェアモデル実行部と、
前記検証対象に実装されるソフトウェアの処理を模擬するソフトウェアモデルであって、該ソフトウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するソフトウェアモデルを実行するソフトウェアモデル実行部と、
ハードウェアモデルのシミュレーション時間の総経過時間である第１シミュレーション時間と、ソフトウェアモデルのシミュレーション時間の総経過時間である第２シミュレーション時間とを記憶するとともに、前記ハードウェアモデルが通知したシミュレーション時間を取得して、前記第１シミュレーション時間を取得したシミュレーション時間経過させ、前記ソフトウェアモデルが通知したシミュレーション時間を取得して、前記第２シミュレーション時間を取得したシミュレーション時間経過させるシミュレーション時間管理部と、
前記第１シミュレーション時間と前記第２シミュレーション時間とを比較し、前記第１シミュレーション時間の方が前記第２シミュレーション時間よりも経過している場合、前記ソフトウェアモデルを実行させ、前記第２シミュレーション時間の方が前記第１シミュレーション時間よりも経過している場合、前記ハードウェアモデルを実行させる実行指示部と、
前記ハードウェアモデルから前記ソフトウェアモデルへの割込通知が現在有るか否かの情報を記憶する割込み管理部と、
前記シミュレーション装置に接続された機器との入出力を行い、シミュレーションエンジンとの通信を行うプログラムであって、前記シミュレーション装置のＣＰＵで直接動作する外界モデルと、
前記ハードウェアモデルと前記外界モデルとの間の双方向または片方向の通信を制御する外界モデル通信制御部と、
を有し、
前記実行指示部は、前記割込み管理部に割込み通知の有無を問い合わせ、割込み通知がある場合、前記ソフトウェアモデルの割込みハンドラを実行させ、割込みが無い場合、前記ソフトウェアモデルのタスクを実行させ、ソフトウェアモデルがハードウェアモデルからの割込を待つ場合には、動作可能なハードウェアモデルがあれば、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりに動作可能なハードウェアモデルのみを実行させ、動作可能なハードウェアモデルが無ければ、ハードウェアモデルが動作可能になるまでアイドラを実行し、ハードウェアモデルが動作可能になればソフトウェアモデルのアイドラを実行する代わりに動作可能なハードウェアモデルのみを実行させ、ハードウェアモデルから割込みが発生したときに、第２シミュレーション時間を第１シミュレーション時間まで進めることを特徴とするシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ソフトウェア及びハードウェアによって構成される機器を擬似的に模擬するシミュレーション技術に関する。
【背景技術】
【０００２】
従来、ハードウェアとソフトウェアとが協働することで機能する機器をシミュレートするシミュレーション装置が知られている。このようなシミュレーション装置は、ハードウェア処理を模擬するＨＷ（Ｈａｒｄｗａｒｅ）モデルと、ソフトウェア処理を模擬するＳＷ（Ｓｏｆｔｗａｒｅ）モデルとを有し、これらＨＷモデル、ＳＷモデルを用いてシミュレートする。また、このシミュレーション装置は、シミュレート対象の機器（以降、実機と称す）のハードウェア構成及びソフトウェア構成の並列動作を、ＨＷモデル及びＳＷモデルの逐次処理によって実現する。
【０００３】
またシミュレーション装置は、実機の時間経過、タイミングを再現するため、ＨＷモデル、ＳＷモデルごとに「シミュレーション時間」という時間情報を保持し、管理する。
【０００４】
また、以下の技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２３４５２８号公報
【特許文献２】特開２００５−２９３２１９号公報
【特許文献３】特開２００６−０２３８５２号公報
【特許文献４】特開２００９-２６１１３号公報
【特許文献５】特開２００６−１６３９８３号公報
【非特許文献】
【０００６】
【非特許文献１】「ハード−ソフト協調検証の高速化技術System-CベースでSTARCが開発」日経マイクロデバイス、2005年1月号、P.106-107
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ここで、シミュレーション時間とシミュレーション装置での演算によって経過した時間とについて、図１０を参照しつつ説明する。図１０（Ａ）は、実機が実際に稼動しているときに各処理にかかる時間（または設計段階である場合は各処理の想定時間）の一例を示す図であり、図１０（Ｂ）は、シミュレーション装置上でのシミュレーション時間の一例を示す図である。また図１０（Ｃ）は、シミュレーション装置で実機の各処理をシミュレートするときに、実際にかかる時間（以下、実時間と称す）である。
【０００８】
実機での処理時間が、例えば図１０（Ａ）で示すように処理Ａが１ｍｓ、処理Ｂが２ｍｓ、処理Ｃが１ｍｓ、処理Ｄが１ｍｓであるとする。シミュレーション時間を考慮するシミュレーション装置では、この実機での各処理の時間をシミュレーション時間として管理している。すなわち、図１０（Ａ）、図１０（Ｂ）に示すように、実機での処理時間とシミュレーション時間とは同値となる。
【０００９】
シミュレーション装置で実機の各処理をシミュレートする場合、シミュレーション装置のハードウェア資源の制御による処理時間、およびソフトウェア制御による処理時間が発生するため、実時間は図１０（Ｃ）に示すように実機での処理時間に収まることは無く、それぞれの処理で遅延が生ずる。
【００１０】
従来技術では、ＳＷモデルがＨＷモデルからの割込みを待っている状態である場合、シミュレーション装置は、待機処理用のループ（以下、アイドラ）を実行することになる。つまり、シミュレーションを実行するシミュレーション装置は、ＳＷモデルのアイドリング状態に係る処理に対してハードウェアリソースを割り当てなければならず、その結果としてシミュレーションの実行速度が低下してしまうという問題がある。
【００１１】
また従来方法は、ＯＳ（Operating System）のアイドラにおけるビジーループの実行にホスト計算機のリソースを割り当てる。ホスト計算機は、割込みが発生するまでのシミュレーション時間が経過するのを待つ間、ハードウェアリソースを必要以上に消費し、シミュレーション実行性能を低下させている。
【００１２】
この従来技術の問題点ついて、図１１を参照しつつ説明する。図１１は、シミュレーションエンジンが、アイドリング中のＳＷモデルとＨＷモデルをシミュレーション時間に従って実行単位を切り替えながらシミュレーションするときの遷移を示している。
【００１３】
これらのシミュレーション方式は、ＨＷモデル側で経過するシミュレーション時間と同じ時間だけ、シミュレーション時間が経過するのを待つ（アイドラが実行される）ことでシミュレーション対象の時間経過、タイミングを再現する。すなわち、これらのシミュレーション方式は、ＳＷモデル側のアイドラを随時実行するため、ホストＣＰＵ（Central Processing Unit）のリソースを必要以上に消費する、という問題がある。また、これらシミュレーション方式は、実行単位の切り替えのためにシミュレーションエンジンのオーバヘッドが発生する、という問題がある。これらホストＣＰＵのリソース消費、および実行単位の切り替えは、共にシミュレーション実行性能を低下させる要因である。
【００１４】
また、シミュレーション時間の情報を有する従来のシミュレーション方式では、ＳＷモデルの実行単位とＨＷモデルの実行単位が同じシミュレーション時間を経過させながら並行動作する。ＨＷモデルが割込みを発生させるまでに要するシミュレーション時間と同じ時間だけＳＷモデルもシミュレーション実行する必要がある。しかし、このときＳＷモデル側ではアイドラ以外に動作するタスクがないため、アイドラが無駄なループ処理を実行してシミュレーション時間の経過を待つことになる。
【００１５】
アイドリング状態のシミュレーションにおいて、ホスト計算機に無駄な負荷をかけない方法として、プロセス相対時間タイマ機能と実時間タイマ機能の切り替えによって、アイドリング状態になったときのＯＳ（Operating System）への負荷を軽減する方法（リアルタイムＯＳシミュレーション方式）がある。しかし、この方法は、ホスト計算機のリソースを使ってアイドリング状態をシミュレートする必要があり、実時間を経過させる必要がある。
【００１６】
本発明の実施形態は上述した問題点を解決するためになされたものであり、アイドリング状態のシミュレーションにホスト計算機のリソースを使わず、且つシミュレーション装置で実行する時間を短縮することで、ホストＯＳへの負荷を軽減するのみではなく、実機の時間経過、タイミングの再現精度を劣化させることなく、シミュレーション実行性能を高速化することができる技術を提供することを目的とする。
【課題を解決するための手段】
【００１７】
実施形態のシミュレーション装置は、検証対象がハードウェアの処理とソフトウェアの処理とを行う場合に、検証対象がこれら処理を実行することで経過する時間の情報であるシミュレーション時間を管理することで、検証対象の各処理の実行タイミングを再現するシミュレーション装置である。また、このシミュレーション装置は、検証対象に実装されるハードウェアの処理を模擬するハードウェアモデルであって、ハードウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するハードウェアモデルを実行するハードウェアモデル実行部を有する。またシミュレーション装置は、検証対象に実装されるソフトウェアの処理を模擬するソフトウェアモデルであって、ソフトウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するソフトウェアモデルを実行するソフトウェアモデル実行部を有する。実施形態のシミュレーション装置は、ハードウェアモデルのシミュレーション時間の総経過時間である第１シミュレーション時間と、ソフトウェアモデルのシミュレーション時間の総経過時間である第２シミュレーション時間とを記憶するとともに、ハードウェアモデルが通知したシミュレーション時間を取得して、第１シミュレーション時間を、取得したシミュレーション時間経過させ、ソフトウェアモデルが通知したシミュレーション時間を取得して、第２シミュレーション時間を、取得したシミュレーション時間経過させるシミュレーション時間管理部を有する。またシミュレーション装置は、第１シミュレーション時間と第２シミュレーション時間とを比較し、第１シミュレーション時間の方が第２シミュレーション時間よりも経過している場合、ソフトウェアモデルを実行させ、第２シミュレーション時間の方が第１シミュレーション時間よりも経過している場合、ハードウェアモデルを実行させる実行指示部を有する。またシミュレーション装置は、ハードウェアモデルからソフトウェアモデルへの割込み通知が現在有るか否かの情報を記憶する割込み管理部を有する。実施形態のシミュレーション装置の実行指示部は、さらに、割込み管理部に割込み通知の有無を問い合わせ、割込み通知がある場合、ソフトウェアモデルの割込みハンドラを実行させる。一方、割込み通知が無い場合、実行指示部はソフトウェアモデルのタスクを実行させる。また実行指示部は、ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合には、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりにハードウェアモデルのみを実行させる。実行指示部は、ハードウェアモデルから割込みが発生したときに、第２シミュレーション時間を第１シミュレーション時間まで進める。
【図面の簡単な説明】
【００１８】
【図１】第１の実施の形態に係るシミュレーション装置の機能構成の一例を示すブロック図である。
【図２】モデル識別情報とシミュレーション時間との対応関係を管理するテーブルの一例を示す図である。
【図３】第１の実施の形態に係るシミュレーション実行の遷移の一例を示す図である。
【図４】第１の実施の形態に係るシミュレーション装置の動作の一例を示すフローチャートである（その１）。
【図５】第１の実施の形態に係るシミュレーション装置の動作の一例を示すフローチャートである（その２）。
【図６】第２の実施の形態に係るシミュレーション装置の機能構成の一例を示すブロック図である。
【図７】第２の実施の形態に係るシミュレーション実行の遷移の一例を示す図である。
【図８】第４の実施の形態に係るシミュレーション装置の機能構成の一例を示すブロック図である。
【図９】第４の実施の形態に係るシミュレーション装置の動作の一例を示すフローチャートである（図５に対応）。
【図１０】シミュレーション時間と実時間を説明する図である。
【図１１】従来のシミュレーション実行の遷移の一例を示す図である。
【発明を実施するための形態】
【００１９】
（第１の実施の形態）
第１の実施の形態のシミュレーション装置は、アイドリング状態になる際、ＳＷモデルのビジーループ処理を実行せず、ＨＷモデルからの割込みが次に発生するまでの時間だけシミュレーション時間を進めることで、ホスト計算機のリソースを使わず、且つシミュレーション実行を高速化する。
【００２０】
図１に、第１の実施の形態に係るシミュレーション装置の機能ブロックの一例を示す。尚、シミュレーション装置１は、ＣＰＵ、主記憶装置、及びハードディスクドライブやフラッシュメモリ等の不揮発性記憶装置等のハードウェア資源を備えるコンピュータである。
【００２１】
シミュレーション装置１は、シミュレーションエンジン１０、ＳＷモデル実行部２０、ＨＷモデル実行部３０を有する。これら各機能ブロックは、不揮発性記憶装置に予めインストールされたプログラムが主記憶装置にロードされ、ＣＰＵで演算実行されることで実現される。
【００２２】
ＳＷモデル実行部２０は、シミュレート対象の機器（シミュレーション装置１が例えばデジタルカメラをシミュレートする場合の当該デジタルカメラ。上述同様にシミュレート対象の機器を実機と称す。）のソフトウェア処理をシミュレートする。ＳＷモデル実行部２０は、実機上のＣＰＵをソフトウェア処理によってシミュレートするＣＰＵモデル２５を有する。ＳＷモデル実行部２０は、ＣＰＵモデル２５上で動作するように、ＳＷモデル２６を実行する。
【００２３】
ＳＷモデル２６は、ＣＰＵモデル２５上で実行されるプログラム（実機のＯＳを含めたプログラム）であり、実機におけるソフトウェアの処理を模擬し、シミュレーション時間更新手段を用いることで、実行する処理によって経過するシミュレーション時間を処理ごとにシミュレーションエンジン１０のシミュレーション時間管理部１１に通知する。ＳＷモデル２６は、タスク２１Ａ、タスク２１Ｂ、アイドラ２２、割込みハンドラ２３、タスクスケジューラ２４のプログラムモジュールで構成される。タスク２１Ａ、２１Ｂは、ＳＷモデル２６が有する機能を実現するプログラムである。アイドラ２２は、タスク２１Ａ、２１Ｂのいずれも実行されないとき、すなわちアイドリング状態をシミュレートするときに実行されるプログラムである。
【００２４】
タスクスケジューラ２４は、タスク２１Ａ、タスク２１Ｂ、アイドラ２２の各プログラムを切り替えるモジュールであり、ＣＰＵモデル２５のリソースを各タスクで共有するための機能であるコンテキストスイッチを実現するモジュールである。割込みハンドラ２３は、ＨＷモデル実行部３０からの割込み要求があった場合、事前に定義された処理を実行するプログラムである。
【００２５】
ＨＷモデル実行部３０は、ＨＷモデル３１Ａ、３１Ｂ、割込みコントローラ３２を実行することで、実機のハードウェアの動作を模擬する。ＨＷモデル３１Ａ、３１Ｂは、例えば実機がデジタルカメラである場合のシャッターの開閉制御部やＣＣＤ（Charge Coupled Device）イメージセンサ等、実機内のハードウェアそれぞれの動作を模擬するプログラムである。ＨＷモデル３１Ａ、３１Ｂは、シミュレーション時間更新手段を用いることで、実行する処理によって経過するシミュレーション時間を処理ごとにシミュレーションエンジン１０のシミュレーション時間管理部１１に通知する。ＨＷモデル３１Ａ、３１Ｂの実装は、Ｃ言語を拡張したシステムレベル記述言語が用いられている。またＨＷモデル３１Ａ、３１Ｂは、必要に応じ割込み要求を出力する。
【００２６】
割込みコントローラ３２は、ＨＷモデル３１Ａ、３１Ｂによって出力された割込み要求を取得し、いずれのＨＷモデルがいずれのＳＷモデルに対して出力した要求かを少なくとも有するフォーマットに変換した後に、割込み通知をシミュレーションエンジン１０の割込みシミュレーション管理部１２に送信する。
【００２７】
尚、図１において、破線で囲まれているモジュールがシミュレーションエンジン１０が管理制御する実行単位であり、これらは並列に動作する。
【００２８】
シミュレーションエンジン１０は、ＳＷモデル実行部２０、ＨＷモデル実行部３０で相互に使用するデータの管理や、各種通知の伝達を担うフレームワークである。シミュレーションエンジン１０は、ＳＷモデル２６のシミュレーション時間と、ＨＷモデル３１Ａ、３１Ｂのシミュレーション時間が常に同じになるように、それぞれのシミュレーション時間の更新を行うとともに、実行単位の実行を切り替える。シミュレーションエンジン１０は、シミュレーション時間管理部１１、割込みシミュレーション管理部１２、スケジューラ１３の各プログラムモジュールを有する。
【００２９】
シミュレーション時間管理部１１は、ＳＷモデル２６のシミュレーション時間、ＨＷモデル３１Ａ、３１Ｂそれぞれのシミュレーション時間の更新処理を行う。シミュレーション時間管理部１１は、ＨＷモデル３１Ａ、３１Ｂごとにシミュレーション時間の総経過時間（以下、必要に応じて第１シミュレーション時間と称す）を主記憶装置に記憶し、また、ＳＷモデル２６のシミュレーション時間の総経過時間（以下、必要に応じて第２シミュレーション時間と称す）を主記憶装置に記憶する。また、シミュレーション時間管理部１１は、ＨＷモデル３１Ａ、３１Ｂがそれぞれ通知したシミュレーション時間を取得して、第１シミュレーション時間を、取得したシミュレーション時間分加算することで経過させる。シミュレーション時間管理部１１は、ＳＷモデル２６が通知したシミュレーション時間を取得して、第２シミュレーション時間を、取得したシミュレーション時間分加算することで経過させる。
【００３０】
シミュレーション時間管理部１１は、ＳＷモデルが複数存在するときはＳＷモデル毎の第２シミュレーション時間を管理する。ＨＷモデルが複数存在する場合も同様に、シミュレーション時間管理部１１はＨＷモデル毎に第１シミュレーション時間を管理する。シミュレーション時間管理部１１は、シミュレーション装置１内の主記憶装置にＳＷモデル、ＨＷモデルの識別情報とシミュレーション時間の総経過時間との対応関係（テーブル）を記憶させ、このテーブルを更新することで、ＳＷモデル、ＨＷモデルごとのシミュレーション時間を管理する。図２はモデル識別情報とシミュレーション時間との対応関係を管理するテーブルの一例である。
【００３１】
割込みシミュレーション管理部１２は、ＨＷモデル実行部３０からの割込み通知を取得し、いずれのモデルからいずれのモデルへの割込み通知が現在有るかの情報をシミュレーション装置１の主記憶装置に記憶させることで、割込みの有無を管理する。
【００３２】
スケジューラ１３は、シミュレーション時間管理部１１からＳＷモデル２６、ＨＷモデル３１Ａ、３１Ｂのシミュレーション時間を取得し、いずれのモデルを実行させるかを判断し、判断結果後のモデルに対して実行指示する。スケジューラ１３は、第１シミュレーション時間と第２シミュレーション時間とを比較し、第１シミュレーション時間の方が第２シミュレーション時間よりも経過している（大きい）場合、ＳＷモデル２６を実行させ、第２シミュレーション時間の方が第１シミュレーション時間よりも経過している（大きい）場合、ＨＷモデル３１Ａ、３１Ｂのいずれかを実行させるように、ＳＷモデル実行部２０、ＨＷモデル実行部３０に指示する。
【００３３】
またスケジューラ１３は、割込みシミュレーション管理部１２に割込み通知の有無を問い合わせ、割込み通知がある場合、ＳＷモデル２６の割込みハンドラ２３を実行させるようにＳＷモデル実行部２０に指示する。一方、割込みが無い場合、スケジューラ１３はＳＷモデル２６のタスク２１Ａ、２１Ｂもしくはアイドラ２２を実行させるようにＳＷモデル実行部２０に指示する。
【００３４】
上記以外にも、シミュレーションエンジン１０は、ＨＷモデル３１Ａ、３１ＢからＳＷモデル２６への割込み通知が現在有るか否かの情報を記憶するアイドル中フラグ１５を有する。アイドル中フラグ１５は、主記憶装置または不揮発性記憶装置に記憶されており、シミュレーションエンジン１０内のスケジューラ１３が管理するフラグであって、アイドリングしているか否かの判定に使用される。またアイドル中フラグ１５は、ＳＷモデル２６毎に存在する。尚、アイドル中フラグ１５の設置位置については、様々な態様が考えられ、例えば割込みシミュレーション管理部１２に含まれる構成であってもよい。また、アイドル中フラグ１５の書き込み制御、読み出し制御や管理も他のユニット（例えば割込みシミュレーション管理部１２）が行ってもよい。
【００３５】
次に、シミュレーション装置１でのＨＷモデル実行部３０からＳＷモデル実行部２０への割込通知について説明する。
【００３６】
ＨＷモデル３１Ａまたは３１Ｂは、割込みコントローラ３２にＳＷモデル２６に対する割込みを要求する。割込みコントローラ３２は、いずれのＨＷモデルがいずれのＳＷモデルに対して割込み要求を行ったかをシミュレーションエンジン１０の割込みシミュレーション管理部１２に通知する。割込みシミュレーション管理部１２は、ＳＷモデル実行部２０のＣＰＵモデル２５を経由して、ＳＷモデル２６に対して割込みを発生させる。ＳＷモデル２６のタスクスケジューラ２４は、割込みが発生した場合、現在稼動しているタスクの実行を中断して割込みハンドラ２３を実行する。割込みハンドラ２３の処理が終わると、割込み発生前に実行していたタスクが再開されるか、またはタスクスケジューラ２４が実行され、タスクの切り替え処理が実行される。
【００３７】
また、ＳＷモデル２６のタスク２１Ａまたは２１Ｂが、タスクスケジューラ２４を呼び出して実行権を放棄すると、タスクスケジューラ２４は、その時点で最も実行優先度の高いタスクに実行権を与える。実行すべきタスクが存在しないときは、アイドラ２２に実行権を与える。
【００３８】
次に、シミュレーション時間更新手段の詳細について説明する。ＳＷモデル２６、およびＨＷモデル３１Ａ、３１Ｂは、シミュレーション時間更新手段（ｗａｉｔｆｏｒ関数）が組み込まれており、シミュレーションエンジン１０にシミュレーション時間経過を通知する。シミュレーション時間更新手段であるｗａｉｔｆｏｒ関数について説明する。ｗａｉｔｆｏｒ（ｔ）の関数は、シミュレーション時間を更新する関数であり、呼び出し元の総シミュレーション時間（現在のシミュレーション時間の総計）に引数ｔを加算するようにシミュレーション時間管理部１１に通知する関数である。例えばＳＷモデル２６がｗａｉｔｆｏｒ（ｔ）を呼び出した場合、シミュレーション時間管理部１１は、ＳＷモデル２６の総シミュレーション時間に引数ｔを加算する。ＨＷモデル３１Ａ、３１Ｂがｗａｉｔｆｏｒ（ｔ）を呼び出した場合も同様に、シミュレーション時間管理部１１は、ＨＷモデル３１Ａ、３１Ｂそれぞれに対応した総シミュレーション時間に引数ｔを加算する。
【００３９】
シミュレーションエンジン１０のスケジューラ１３は、シミュレーション時間ｔが経過するまでｗａｉｔｆｏｒ（ｔ）を発行した実行単位を実行待ち状態にして、シミュレーション時間ｔだけ経過したらその実行単位を実行可能状態にする。
【００４０】
図３は、シミュレーション装置１による実行単位の遷移を表す。ＳＷモデル２６では、図１１で示したようにアイドラ２２でループ処理を行う代わりに、割込み発生までのシミュレーション時間を経過させる。そして、シミュレーション装置１は、ＨＷモデル側のシミュレーション時間が経過するまでＨＷモデルのみを実行させる。このようにすることで、無駄なループ処理が無くなり、また実行単位の切り替えが最小で済み、無駄な切り替えが無くなる。
【００４１】
次に、シミュレーション装置１の動作について、図４、図５のフローチャートを参照しつつ説明する。
【００４２】
ＳＷモデル実行部２０の実行単位であるＳＷモデル２６は、ＨＷモデル３１Ａ、３１Ｂからの割込みを待つためにアイドリングする場合（Ｓ１、Ｙｅｓ）、スケジューラ１３にアイドリングである旨を通知し、アイドル中フラグ１５をＯＮにさせる（Ｓ２）。アイドリングしない場合（Ｓ１、Ｎｏ）、処理はステップＳ３に進む。ＳＷモデル２６は、シミュレーション時間をｔ進めるため、シミュレーション時間更新手段であるｗａｉｔｆｏｒ関数を呼び出す（Ｓ３）。
【００４３】
また一方、ＨＷモデル実行部３０の実行単位であるＨＷモデル３１Ａ、３１Ｂは、ＳＷモデル２６への割込み要因がある場合（Ｓ４、Ｙｅｓ）、割込みシミュレーション管理部１２に割込み要因を通知し（Ｓ５）、スケジューラ１３にアイドル中フラグ１５をＯＦＦにさせる。ここで、Ｓ２でアイドル中フラグ１５がＯＮにされた状態のまま（ＯＮ状態）であれば（Ｓ６、Ｙｅｓ）、シミュレーション時間管理部１１にアイドル中フラグ１５がＯＮからＯＦＦに変更されたことを通知し（Ｓ７）、アイドル中フラグ１５はＯＦＦの状態になる（Ｓ８）。一方、アイドル中フラグ１５がＯＦＦの場合（Ｓ６、Ｎｏ）、現状のＯＦＦの状態が維持される（Ｓ８）。
また一方、ＳＷモデル２６への割込み要因が無い場合（Ｓ４、Ｎｏ）、処理はＳ９へ進む。ＨＷモデル３１Ａ、３１Ｂはシミュレーション時間をｔ進めるため、シミュレーション時間更新手段であるｗａｉｔｆｏｒ関数を呼び出す（Ｓ９）。
【００４４】
シミュレーション時間管理部１１は、ｗａｉｔｆｏｒ関数の呼び出し元を判別する（Ｓ１０）。ここで、呼び出し元がＳＷモデル２６である場合（Ｓ１０、ＳＷモデル）、ＳＷモデル２６の現時点での総シミュレーション時間ＴSWにｔを加えることで更新する（Ｓ１１）。一方、呼び出し元がＨＷモデル３１Ａ、３１Ｂである場合（Ｓ１０、ＨＷモデル）、ＨＷモデル３１Ａ、３１Ｂの現在の総シミュレーション時間ＴHWにtを加えることで、ＨＷモデルのシミュレーション時間を更新する（Ｓ１２）。またシミュレーション時間管理部１１は、ＨＷモデル３１Ａ、３１Ｂからアイドル中フラグ１５がＯＮからＯＦＦに変更されたことの通知を受けていない場合（Ｓ１３、Ｎｏ）、処理はＳ１５へ進み、一方アイドル中フラグ１５がＯＮからＯＦＦに変更されたことの通知を受けている場合（Ｓ１３、Ｙｅｓ）、ＳＷモデル２６の現在の総シミュレーション時間ＴSWを、ＨＷモデル３１Ａ、３１Ｂの現時点での総シミュレーション時間ＴHWにする（Ｓ１４）。
【００４５】
ステップＳ１４について説明する。アイドリング中は、ＨＷモデル３１Ａ、３１Ｂのみが実行されるため（Ｓ２５参照）、ＳＷモデル２６の総シミュレーション時間ＴSWは更新されない。この状態のままでは、ＨＷモデル３１Ａ、３１Ｂの総シミュレーション時間ＴHWのみ更新され、ＳＷモデル２６とＨＷモデル３１Ａ、３１Ｂとの同期がとれなくなってしまう。このため、前述のようにＨＷモデル３１Ａ、３１Ｂの総シミュレーション時間ＴHWを使って、ＳＷモデル２６の総シミュレーション時間ＴSWを進める設定をする。
【００４６】
スケジューラ１３は、シミュレーション時間管理部１１からＴHWを取得し（Ｓ１５）、またアイドル中フラグ１５の状態を判別する（Ｓ１６）。ここで、アイドル中フラグ１５がＯＦＦである場合（Ｓ１６、Ｙｅｓ）、スケジューラ１３は、シミュレーション時間管理部１１からＴSWを取得する（Ｓ１７）。スケジューラ１３は、取得したＴSWとＴHWとを比較し、ＴSW≧ＴHWが成立する場合（Ｓ１８、「≧」）、ＨＷモデルが実行され（Ｓ２５）、処理はＳ４に戻る。一方、ＴSW＜ＴHWが成立する場合（Ｓ１８、「＜」）、スケジューラ１３は、割込みシミュレーション管理部１２に割込み要因の有無を問い合わせる（Ｓ１９）。
【００４７】
ここで、割込み要因が無い場合（Ｓ２０、Ｎｏ）、ＳＷモデル２６のタスク２１Ａ、２１Ｂもしくはアイドラ２２が実行される（Ｓ２２）。割込み要因がある場合（Ｓ２０、Ｙｅｓ）、割込みハンドラ２３が実行される（Ｓ２１）。ステップＳ２１、ステップＳ２２の後、処理はステップＳ１に戻る。
【００４８】
ステップＳ１６の判別処理で、アイドル中フラグ１５がＯＮである場合（Ｓ１６、Ｎｏ）、スケジューラ１３は、ＴHWに動作すべきＨＷモデルがあるかを判別する（Ｓ２３）。ここで、動作すべきＨＷモデルが無い場合（Ｓ２３、Ｎｏ）、スケジューラ１３は、直近に動作するＨＷモデルの総シミュレーション時間までＴHWを進め（Ｓ２４）、その後、ＨＷモデルが実行される（Ｓ２５）。またＴHWに動作すべきＨＷモデルがある場合（Ｓ２３、Ｙｅｓ）、処理はステップＳ２５へ進む。
【００４９】
図４、図５で示した動作例は、モデルの数が３つ以上のときでも同様の処理となり、またステップＳ１８の判定処理において、いずれの判定結果に等号を付けるかはスケジューラ実装ポリシーに依拠するものであり、いずれであってもよい。
【００５０】
また第１の実施の形態で示したｗａｉｔｆｏｒ関数は、シミュレーション時間更新手段の一例であり、ＨＷモデルやＳＷモデルをＳｙｓｔｅｍＣやＳｐｅｃＣなど、Ｃ言語を拡張したシステムレベル記述言語で記述する場合に用いられるものである。よって、第１の実施の形態におけるシミュレーション時間更新手段をｗａｉｔｆｏｒ関数に限定するものではない。
【００５１】
このように、シミュレーション時間を管理し、ＳＷモデルがアイドル中の場合はＨＷモデルのみ実行させることで、無駄なループ処理が無くなり、且つ実行単位の切り替えが最小で済む。また、再現精度を劣化させることなく、実機の時間経過、タイミングを再現することができる。
【００５２】
（第２の実施の形態）
シミュレーション装置が模擬する対象の機器（実機）には、ドライバソフトがハードウェアに対してポーリングすることで、ハードウェアの状態の変化を監視するような機器がある。第２の実施の形態では、このようなドライバソフトが採用された機器を模擬するシミュレーション装置について説明する。
【００５３】
図６は、第２の実施の形態に係るシミュレーション装置の構成の一例を示す図である。シミュレーション装置１Ａは、タスク２１Ａ、タスク２１Ｂ、タスクスケジューラ２４を有するＳＷモデル２６Ａを有する。また、シミュレーション装置１Ａは、ＨＷモデル３１Ａ、３１Ｂに対してポーリングし、ＨＷモデル３１Ａ、３１Ｂの状態の変化を監視するドライバ２７を有する。図６において、図１と同一符号のユニットは第１の実施の形態と同様であるため、説明を割愛する。
【００５４】
図７は、第２の実施の形態におけるシミュレーション実行の遷移の一例を示す図である。ドライバ２７は、ＨＷモデル３１Ａ、３１Ｂの処理が完了したタイミングでＨＷモデルに対しポーリングを行う。ＨＷモデル３１Ａ、３１Ｂは、ドライバ２７から要求された処理の実行と、ドライバ２７からのポーリングに対する状態通知処理を実行する。シミュレーション装置１Ａは、処理の最後にポーリング処理が発生すること以外は、第１の実施の形態のシミュレーション装置１と同様の動作となる。
【００５５】
（第３の実施の形態）
第３の実施の形態では、実機がＯＳレスの場合についての説明をする。ＯＳを含む場合は、ＯＳのアイドラタスクのビジーループ処理が高速化の改善対象であるが、第３の実施の形態では、実機がＯＳレスの場合に高速化を図る例を説明する。
【００５６】
ＯＳレスのソフトウェアで、外部とのタイミング調整のために時間経過を待つ場合、ビジーループを行うことがある。第３の実施の形態では、そのビジーループ処理のシミュレーション高速化を行う。
【００５７】
実施の形態で適用されるループ処理は、ループ外への副作用のないループ処理であることが必要となり、そのループ処理開始時に第１の実施の形態におけるアイドラ開始通知を行う。
【００５８】
ループ外への副作用のないループ処理のソースコードを検証対象ソフトウェアの中から抽出してアイドラ開始通知処理を挿入するには、コンパイラのプリプロセッサを利用することでも良いが、比較的長時間ループするようなループ箇所は一般的に多くないため、シミュレーション装置に対して外部から当該個所を指示する方法でも良い。
【００５９】
例えば、ＯＳのアイドラタスクのビジーループは、検証対象ソフトウェアの一箇所である場合が多く、プログラムによって自動抽出するまでもない。
【００６０】
（第４の実施の形態）
第１の実施の形態で、例えばデジタル時計を模擬する場合、シミュレーション装置では以下の処理が行われる。
１．時間経過を待つ（アイドリング）。
２．時間が経つとタイマー割り込みが発生する。
３．ソフトウェア制御で時間表示を更新する。
ここで、１．で動作すべきＨＷモデル（本例ではタイマ）が無いため、第１の実施の形態ではＨＷモデルが直近に動作すべき時間まで、ＨＷモデルの時間を進めて直ちに２．を実行する。この場合、時計は連続して時間更新することになる。この動作によって高速シミュレートを可能にし、且つ期待通りのシミュレーションを実現できる。
【００６１】
また一方、例えば電卓を模擬する場合、任意に発生するキー入力（シミュレーション装置外部（外界）の動作）がメインイベントとなり、キー入力された場合、計算して結果を表示する処理となる。ここで、キー入力が無い状態で一定時間経過するとパワーオフになる電卓を模擬する場合、第１の実施の形態の例ではパワーオンしてもすぐにパワーオフしてしまうため、所望のシミュレーションが期待できない。
【００６２】
第４の実施の形態のシミュレーション装置は、ＳＷモデルがアイドリング状態になる際、動作すべきＨＷモデルがあればＳＷモデルのビジーループ処理を実行せず、ＨＷモデルからの割込みが次に発生するまでＨＷモデルのみを実行することで、無駄なビジーループ処理のためにホスト計算機のリソースを使わず、且つシミュレーション実行を高速化する。
【００６３】
図８に、第４の実施の形態に係るシミュレーション装置の機能ブロックの一例を示す。尚、シミュレーション装置１Ｂは、ＣＰＵ、主記憶装置、及びハードディスクドライブやフラッシュメモリ等の不揮発性記憶装置等のハードウェア資源を備えるコンピュータである。
【００６４】
第４の実施の形態は主に外界モデル４０と外界モデル通信制御部１４、および機器５０を含む点が第１の実施の形態と異なる。図８において、図１と同一符号のユニットは第１の実施の形態と同様である。
【００６５】
シミュレーション装置１Ｂは、シミュレーションエンジン１０Ｂ、ＳＷモデル実行部２０Ｂ、ＨＷモデル実行部３０Ｂ、外界モデル４０を有する。これら各機能ブロックは、不揮発性記憶装置に予めインストールされたプログラムが主記憶装置にロードされ、ＣＰＵで演算実行されることで実現される。
【００６６】
ＳＷモデル実行部２０ＢとＨＷモデル実行部３０Ｂは、シミュレーションエンジン１０Ｂの制御下で動作するのに対し、外界モデル４０は、シミュレーションエンジン１０Ｂとは独立して、シミュレーションエンジン１０Ｂと並列動作し、シミュレーションエンジン１０Ｂの外界モデル通信制御部１４を経由してＨＷモデルとインタラクティブな通信を行う。
【００６７】
外界モデル４０は、シミュレーション装置１Ｂに内部接続、または外部接続された機器５０（例えば、ＣＰＵボード、タッチパネル、ディスプレイ、キーボード、マウス、カメラ、ハードディスク、ＵＳＢ接続記憶装置など）との入出力を行い、シミュレーションエンジン１０Ｂとの通信を行うプログラムであって、ホスト計算機上のＣＰＵで直接動作するプログラムモジュールである。
【００６８】
外界モデル通信制御部１４は、ＨＷモデル３１Ａ、３１Ｂと外界モデル４０との間の双方向または片方向の通信を制御するプログラムモジュールである。
【００６９】
外界モデル４０から外界モデル通信制御部１４にデータ送受信の要求が通知されると、外界モデル通信制御部１４は、スケジューラ１３ＢにＨＷモデル３１Ａまたは３１Ｂのデータ送受信処理の実行を指示する。スケジューラ１３Ｂは、シミュレーション時間管理部１１が持つスケジュール時間情報に依らず、ＨＷモデル３１Ａまたは３１Ｂのデータ送受信処理を実行し、ＨＷモデルと外界モデル４０の通信が成立する。
【００７０】
ＨＷモデル３１Ａまたは３１Ｂから外界モデル通信制御部１４にデータ送受信の要求が通知されると、外界モデル通信制御部１４はプロセス間通信により外界モデル４０とのデータ通信を行い、ＨＷモデルと外界モデル４０の通信処理が成立する。
【００７１】
次に、シミュレーション装置１Ｂの動作について、図９のフローチャートを参照しつつ説明する。図９は、第１の実施の形態で説明した図５に対応したフローチャートである。シミュレーション装置１Ｂは、図４で示した各処理を実行し、その後、図９の各処理を実行し、図９の各処理が行われた後に図４で示した処理に戻る。また、図４、図５のフローチャートと同一符号の処理は第１の実施の形態と同様であるため、ここでは主に第１の実施の形態と異なるステップの説明をする。
【００７２】
スケジューラ１３Ｂは、シミュレーション時間管理部１１からＴHWを取得する（Ｓ１５）。スケジューラ１３Ｂは、アイドル中フラグ１５の状態を判別する（Ｓ１６）。ここで、アイドル中フラグ１５がＯＮである場合（Ｓ１６、Ｎｏ）、スケジューラ１３Ｂはシミュレーション時間ＴHWに動作すべきＨＷモデルの有無を調べる（Ｓ２３）。
【００７３】
ここで、動作すべきＨＷモデルがある場合（Ｓ２３、Ｙｅｓ）、ＨＷモデルを実行させ（Ｓ２５）、処理はステップＳ４へ戻る。動作すべきＨＷモデルが無い場合（Ｓ２３、Ｎｏ）、スケジューラ１３Ｂは、アイドル中フラグ１５をＯＦＦにリセットして（Ｓ２４Ａ）、通常のスケジューリング処理を継続する（Ｓ１７へ進む）。第１の実施の形態では、直近に動作すべきＨＷモデルがシミュレーション時間ＴHWに動作すべきか否か判断をせずに、直近に動作すべきＨＷモデルを動作させるか、またはシミュレーション時間ＴHWに動作すべきＨＷモデルがなければ、直近にＨＷモデルが動作すべき時間までＴHWを進めてＨＷモデルを実行させる。この処理が第４の実施の形態とは異なっている。動作すべきＨＷモデルが無いというのは、実行可能状態のＨＷモデルがないということを意味する。
【００７４】
外界モデルを含まないシミュレーション装置においては、ＳＷモデルがＨＷモデルからの割込みを待つためにアイドリング実行する場合、必ず直近に動作すべきＨＷモデルが存在する。存在しなければ、永遠にＳＷモデルのアイドリングが解かれることがない。このことは、ＨＷモデルまたはＳＷモデルにバグが潜在することを意味するので、直近に動作すべきＨＷモデルが存在しない場合、シミュレーション装置は検証対象ＳＷモデル、ＨＷモデルのバグ検出と判断してシミュレーションを停止しても良い。
【００７５】
一方、外界モデルを含むシミュレーション装置においては、ＳＷモデルがＨＷモデルからの割込みを待つためにアイドリング実行する場合、その時点で実行可能状態のＨＷモデルが存在しなくても、時間経過した後に外界モデルからの通信が発生してＨＷモデルが実行可能状態になるので、シミュレーション実行を継続する必要がある。
【００７６】
第４の実施の形態によれば、ＳＷモデルがＨＷモデルからの割込みを待つためにアイドリング実行する場合、動作すべきＨＷモデルがなければアイドラのビジーループ処理をシミュレーション単位時間づつ経過させながらＨＷモデルが実行可能状態になる事象発生を待ち合わせることが可能で、且つ、動作すべきＨＷモデルが存在する場合には、ＨＷモデルのみを実行させることで、無駄なループ処理が無くなり、更に実行単位の切り替えが最少で済む。また、精度を劣化させることなく、実機の時間経過、タイミングを再現することができる。
【００７７】
ターゲットプロセッサが、アイドルモード（スリープモードと呼ぶこともある）をサポートするプロセッサである場合、ＯＳはアイドリング状態に移行する際にアイドラでビジーループするのではなく、プロセッサをアイドルモードに切り替える。アイドルモードになったプロセッサは、ハードウェアからの割込みを受け付けると通常モードに切り替わる。
【００７８】
実施の形態は、ターゲットプロセッサがアイドルモードをサポートする場合にも適用可能であり、シミュレーション実行性能を高速化できる。プロセッサをアイドルモードに切り替える代わりに、次にＨＷモデルから割込みが発生するまでの時間だけＳＷモデルのシミュレーション時間を経過させることで実現できる。
【００７９】
以上説明したように、第１の実施の形態には、検証対象がハードウェアの処理とソフトウェアの処理とを行う場合に、検証対象がこれら処理を実行することで経過する時間の情報であるシミュレーション時間を管理することで、検証対象の各処理の実行タイミングを再現するシミュレーション装置１が開示されている。シミュレーション装置１は、検証対象に実装されるハードウェアの処理を模擬するハードウェアモデルであってハードウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するハードウェアモデルを実行するＨＷモデル実行部３０と、検証対象に実装されるソフトウェアの処理を模擬するソフトウェアモデルであってソフトウェアモデルの処理によって経過するシミュレーション時間を処理ごとに通知するソフトウェアモデルを実行するＳＷモデル実行部２０とを有する。
【００８０】
また、第１の実施の形態のシミュレーション装置１は、ハードウェアモデルのシミュレーション時間の総経過時間である第１シミュレーション時間と、ソフトウェアモデルのシミュレーション時間の総経過時間である第２シミュレーション時間とを記憶するとともに、ハードウェアモデルが通知したシミュレーション時間を取得して、第１シミュレーション時間を取得したシミュレーション時間経過させ、ソフトウェアモデルが通知したシミュレーション時間を取得して、第２シミュレーション時間を取得したシミュレーション時間経過させるシミュレーション時間管理部１１と、第１シミュレーション時間と第２シミュレーション時間とを比較し、第１シミュレーション時間の方が第２シミュレーション時間よりも経過している場合、ソフトウェアモデルを実行させ、第２シミュレーション時間の方が第１シミュレーション時間よりも経過している場合、ハードウェアモデルを実行させるスケジューラ１３と、ハードウェアモデルからソフトウェアモデルへの割込み通知が現在有るか否かの情報を記憶する割込みシミュレーション管理部１２とを有する。
【００８１】
また、第１の実施の形態のスケジューラ１３は、割込みシミュレーション管理部１２に割込み通知の有無を問い合わせ、割込み通知がある場合、ソフトウェアモデルの割込みハンドラを実行させ、割込み通知が無い場合、ソフトウェアモデルのタスクを実行させる。
【００８２】
また、第１の実施の形態で開示されているシミュレーション装置１は、ソフトウェアモデルがハードウェアモデルからの割込みを待つ場合（すなわち、ステップＳ１、ＹｅｓからステップＳ２への処理）には、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりにハードウェアモデルのみを実行させる。すなわち、ステップＳ１６で、アイドル中フラグ１５がＯＮならばＨＷモデルのみが実行され、また、ステップＳ４、ＹｅｓからステップＳ５の処理で割り込み要因が発生し、その後アイドル中フラグ１５がＯＦＦになるまで、ＳＷモデル（＝アイドラ）は実行されず、ＨＷモデルのみが実行される。
【００８３】
またシミュレーション装置１は、ハードウェアモデルから割込みが発生したときに（すなわち、ステップＳ４、Ｙｅｓの処理）、前記第２シミュレーション時間を前記第１シミュレーション時間まで進める。すなわち、ステップＳ１４の処理が実行される。
【００８４】
第４の実施の形態で開示されているシミュレーション装置１Ｂは、シミュレーション装置１Ｂに接続された機器との入出力を行い、シミュレーションエンジンとの通信を行うプログラムであって、シミュレーション装置１ＢのＣＰＵで直接動作する外界モデル４０と、ハードウェアモデルと外界モデル４０との間の双方向または片方向の通信を制御する外界モデル通信制御部１４を有する。
【００８５】
また、第４の実施の形態で開示されているシミュレーション装置１Ｂは、ソフトウェアモデルがハードウェアモデルからの割込を待つ場合（すなわち、ステップＳ１、ＹｅｓからステップＳ２への処理）には、動作可能なハードウェアモデルがあれば（すなわち、ステップＳ２３、Ｙｅｓ）、ハードウェアモデルからの割込みが発生するまでソフトウェアモデルのアイドラを実行する代わりに動作可能なハードウェアモデルのみを実行させる。すなわち、ステップＳ２３がＹｅｓの場合はＨＷモデルのみが実行される。
【００８６】
また、第４の実施の形態で開示されているシミュレーション装置１Ｂは、動作可能なハードウェアモデルが無ければ、ハードウェアモデルが動作可能になるまでアイドラを実行する。すなわち、ステップＳ２３がＮｏの場合、ＳＷモデル（アイドラ２２）が実行される。アイドラ２２の実行が継続する場合には、ステップＳ２４Ａで一旦ＯＦＦにリセットされたアイドル中フラグ１５が再度ステップＳ２でＯＮになる。
【００８７】
第４の実施の形態で開示されているシミュレーション装置１Ｂは、ハードウェアモデルが動作可能になれば（すなわちステップＳ２３、Ｙｅｓ）、ソフトウェアモデルのアイドラを実行する代わりに動作可能なハードウェアモデルのみを実行させ（すなわち、ステップＳ２５の処理）、ハードウェアモデルから割込みが発生したときに（すなわち、ステップＳ４、Ｙｅｓ）、第２シミュレーション時間を第１シミュレーション時間まで進める（すなわち、ステップＳ１４の処理が実行される）。
【００８８】
また、上記の実施の形態で示したフローチャートやステップに示された各動作をコンピュータにより実行させるシミュレーションプログラムを提供することができる。このプログラムは、コンピュータにより読取可能な媒体、例えばＣＤ−ＲＯＭ、フレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、データベース等に記録されてコンピュータにより実行させることができる。
【００８９】
以上説明した実施形態によれば、無駄なループ処理が無くなり、且つ実行単位の切り替えが最小で済む。よってシミュレーション装置で実行する時間を短縮させ、実機の時間経過、タイミングの再現精度を劣化させることなく、シミュレーションの高速化を図ることができる。
【００９０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これらの新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９１】
１、１Ａ、１Ｂ  シミュレーション装置、１０、１０Ｂ  シミュレーションエンジン、１１  シミュレーション時間管理部、１２  割込みシミュレーション管理部、１３、１３Ｂ  スケジューラ、１４  外界モデル通信制御部、１５  アイドル中フラグ、２０、２０Ａ、２０Ｂ  ＳＷモデル実行部、２１Ａ、２１Ｂ  タスク、２２  アイドラ、２３  割込みハンドラ、２４  タスクスケジューラ、２５  ＣＰＵモデル、２６、２６Ａ  ＳＷモデル、２７  ドライバ、３０、３０Ｂ  ＨＷモデル実行部、３１Ａ、３１Ｂ  ＨＷモデル、３２  割込みコントローラ、４０  外界モデル、５０  機器。
【図１】
0005450271.tif 000002
【図２】
0005450271.tif 000003
【図３】
0005450271.tif 000004
【図４】
0005450271.tif 000005
【図５】
0005450271.tif 000006
【図６】
0005450271.tif 000007
【図７】
0005450271.tif 000008
【図８】
0005450271.tif 000009
【図９】
0005450271.tif 000010
【図１０】
0005450271.tif 000011
【図１１】
0005450271.tif 000012