(57)【要約】【課題】高速なシミュレーション方式と、低速で精度の高いシミュレーション方式との切り換え自由度を向上させ、好適にシミュレーションを実行する情報処理装置を提供する。【解決手段】本発明は、シミュレーションを実行する情報処理装置で解釈可能なネイティブコードを用いてシミュレーションを実行する第１のシミュレータと、ターゲット計算機で解釈可能な実行命令コードを用いて１命令毎にシミュレーションを実行する第２のシミュレータとを連携して実行する情報処理装置に関する。具体的には、本情報処理装置は、ターゲット計算機のシミュレーションの一部の処理を前記第１のシミュレータと前記第２のシミュレータとの間で切り換えて実行させる。ここで、本情報処理装置は、切換先のシミュレータに応じて、各シミュレータ間の処理を同期させ、各シミュレータ間の情報伝達経路を配線する。【選択図】図１
2009252113.tif 000002
【特許請求の範囲】
【請求項１】
シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置であって、
前記シミュレーションの一部の処理を、前記情報処理装置で解釈可能なネイティブコードを用いて実行する第１のシミュレータと、前記ターゲット計算機で解釈可能なターゲットコードを用いて１命令毎にシミュレーションを実行する第２のシミュレータとの間で切り換えて実行させるシミュレーション切換手段と、
前記シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期手段と、
前記シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記同期手段は、
シミュレーション上の仮想時間における一定間隔毎に各シミュレータを同期させる時間同期手段と、
各シミュレータから発生するイベントに応じて当該シミュレータを同期させるイベント同期手段と、
前記切換先のシミュレータに応じて、前記時間同期手段での同期処理と前記イベント同期手段での同期処理とを切り換える同期切換手段と
を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記同期切換手段は、
前記切換先のシミュレータが前記第１のシミュレータである場合に、前記第１のシミュレータを他のシミュレータと前記時間同期手段によって同期させ、
前記切換先のシミュレータが前記第２のシミュレータである場合に、前記第２のシミュレータを、前記イベント同期手段によって前記第１のシミュレータと同期させるとともに、前記時間同期手段によって前記第１のシミュレータ以外の全てのシミュレータと同期させることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記配線手段は、
各シミュレーション間の情報伝達を行う信号線を接続する配線接続手段と、
前記切換先のシミュレータに応じて信号線の接続又は遮断を行う配線切換手段と
を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記配線切換手段は、
前記切換先のシミュレータが前記第１のシミュレータである場合に、前記第２のシミュレータからの出力情報を遮断し、
前記切換先のシミュレータが前記第２のシミュレータである場合に、前記第１のシミュレータからの出力情報を遮断することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記シミュレーション切換手段は、
前記情報処理装置のオペレータがシミュレーションの切換条件を設定するためのユーザインタフェースと、
前記ユーザインタフェースによって設定された前記シミュレーションの切換条件を管理する切換条件管理手段と、
前記切換条件の情報に従ってシミュレータの切換条件を監視するとともに、該切換条件が成立すると、前記ターゲット計算機のシミュレーションを前記第１のシミュレータと前記第２のシミュレータとの間で切り換える処理引渡手段と
を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記シミュレーションの切換条件は、指定関数の実行であり、
前記処理引渡手段は、
前記第１のシミュレータにおける関数コールイベントの発生により、シミュレーションの実行を前記第１のシミュレータから前記第２のシミュレータに移行し、
前記第２のシミュレータからの関数リターンイベントの発生により、シミュレーションの実行を前記第２のシミュレータから前記第１のシミュレータに移行することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記処理引渡手段は、
前記第１のシミュレータから前記第２のシミュレータへの処理引渡しに際して、前記第１のシミュレータから関数名、関数への引数値を取得し、前記第２のシミュレータから前記関数名を元に関数アドレスを取得し、前記第２のシミュレータの仮想プログラムカウンタに前記関数アドレスを設定し、前記第２のシミュレータの仮想レジスタ又は仮想メモリ領域に前記関数への引数値をターゲット計算機の仕様に従い設定し、
前記第２のシミュレータから前記第１のシミュレータへの処理引渡しに際して、前記第２のシミュレータからの仮想レジスタ又は仮想メモリ領域から関数の戻り値をターゲット計算機の仕様に従い取得し、前記第１のシミュレータに関数の戻り値を設定することを特徴とする請求項６に記載の情報処理装置。
【請求項９】
前記同期切換手段は、
前記時間同期手段から前記イベント同期手段による同期処理に切り換える際の条件として、関数コールイベントの発生を含み、
前記時間同期手段による同期処理に復帰させる際の条件として、関数リターンイベントの発生を含むことを特徴とする請求項２に記載の情報処理装置。
【請求項１０】
前記同期切換手段は、
前記時間同期手段から前記イベント同期手段による同期処理に切り換える際の条件として、メモリリードを行うためのイベントの発生をさらに含むことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記同期切換手段は、
前記関数コールイベントの発生回数を記憶するカウンタを備え、
前記関数リターンイベントの発生ごとに前記カウンタの値を１値だけ減算し、該カウンタの値が０値になった場合に前記時間同期手段による同期処理に復帰させることを特徴とする請求項９に記載の情報処理装置。
【請求項１２】
前記同期切換手段は、
前記時間同期手段から前記イベント同期手段による同期処理に切り換える際の条件として、割り込み処理の発生をさらに含むことを特徴とする請求項９に記載の情報処理装置。
【請求項１３】
シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置の制御方法であって、
前記シミュレーションの一部の処理を、前記情報処理装置で解釈可能なネイティブコードを用いて実行する第１のシミュレータと、前記ターゲット計算機で解釈可能なターゲットコードを用いて１命令毎にシミュレーションを実行する第２のシミュレータとの間で切り換えて実行させるシミュレーション切換ステップと、
前記シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期ステップと、
前記シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線ステップと
を実行することを特徴とする情報処理装置の制御方法。
【請求項１４】
請求項１３に記載の制御方法をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ターゲット計算機の実行命令をターゲットシステムとは異なる計算機上でシミュレーション実行する情報処理システム及びその制御方法に関するものである。
【背景技術】
【０００２】
従来より、ターゲット計算機の命令をパーソナルコンピュータ等の情報処理装置上でシミュレーション実行するシミュレーション装置が提案されている。以下では、当該シミュレーション装置をＣＰＵシミュレータと称する。
【０００３】
例えば、特許文献１には、ターゲット計算機が解釈できる実行命令コードであるターゲットコードで作成されたプログラムをターゲットシステムとは異なる情報処理装置上で実行するＣＰＵシミュレータが提案されている。具体的には、ターゲット計算機のメモリ空間であるターゲットメモリ、ターゲットレジスタ等を情報処理装置上に仮想的に設ける。さらに、ターゲットコードを１命令毎に解釈、実行して、仮想ターゲットメモリ、仮想ターゲットレジスタに対して作用させるプログラムを情報処理装置が実行する。以下、ターゲットコードを１命令毎に解釈、実行するＣＰＵシミュレータを命令セットシミュレータと称する。このような命令セットシミュレータでは、ターゲット計算機の動作を情報処理装置上で正確にシミュレーションできる利点がある一方で、ターゲットコードを１命令毎に解釈するためシミュレーション速度が遅くなる欠点がある。
【０００４】
また、特許文献２には、ターゲット計算機の命令を予め情報処理装置が解釈できる実行命令コードであるネイティブコードに変換し、シミュレーションの実行の際には情報処理装置がネイティブコードを実行するＣＰＵシミュレータが提案されている。また、特許文献３には、ターゲット計算機用のプログラムを、１命令単位ではなく高級言語で記述された上位の論理レベルから情報処理装置のネイティブコードを生成し実行するシミュレーション方法が提案されている。以下、ターゲット計算機用のプログラムを情報処理装置のネイティブコードに変換しシミュレーション実行するＣＰＵシミュレータを論理シミュレータと称する。このような論理シミュレータは、命令セットシミュレータと比較して、高速シミュレーションが可能な反面、シミュレーション精度は低下する。
【０００５】
これら２種類のＣＰＵシミュレータの長所を生かし、短所を補う方法として特許文献４の方法が提案されている。特許文献４の方法は、ターゲット計算機のプログラム（以下、ターゲットプログラムと称する。）を定型処理部と非定型処理部とに分ける。さらに、定型処理部を命令セットシミュレータによって高速にシミュレーションし、非定型処理部を論理シミュレータによって精度の高いシミュレーションを実行する方法である。
【特許文献１】特開昭６２−１９４５４９号公報
【特許文献２】特開平０６−２５０８７４号公報
【特許文献３】特開平０６−０１９７４３号公報
【特許文献４】特開平１０−０３１５９５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術においては以下に示す問題がある。例えば、特許文献４に記載の方法では、ターゲットプログラムを予め定型処理部と非定型処理部とに分ける必要がある。そのため、シミュレーション実行時に、高精度にシミュレーションが必要な個所と、精度は必要なく高速にシミュレーションを行いたい個所とを変更する必要が生じた場合に、改めて定型処理部及び非定型処理部を再定義する必要がある。具体的には、定型処理部に対応するネイティブコードと、シミュレーション方式を切り換える判断基準となるエントリアドレス情報とを作成しなおす必要がある。したがって、シミュレーションの実行を中断させて上述のような処理を実行することは、シミュレーションの実行効率を低減させることとなる。
【０００７】
本発明は、上述の問題を鑑みて成されたものであり、高速なシミュレーション方式と、低速で精度の高いシミュレーション方式との切り換え自由度を向上させ、好適にシミュレーションを実行する情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、例えば、シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置として実現できる。本情報処理装置は、シミュレーションの一部の処理を、情報処理装置で解釈可能なネイティブコードを用いて実行する第１のシミュレータと、ターゲット計算機で解釈可能なターゲットコードを用いて１命令毎にシミュレーションを実行する第２のシミュレータとの間で切り換えて実行させるシミュレーション切換手段と、シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期手段と、シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線手段とを備えることを特徴とする。
【０００９】
また、本発明は、例えば、シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置の制御方法として実現できる。制御方法は、シミュレーションの一部の処理を、情報処理装置で解釈可能なネイティブコードを用いて実行する第１のシミュレータと、ターゲット計算機で解釈可能なターゲットコードを用いて１命令毎にシミュレーションを実行する第２のシミュレータとの間で切り換えて実行させるシミュレーション切換ステップと、シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期ステップと、シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線ステップとを実行することを特徴とする。
【発明の効果】
【００１０】
本発明は、例えば、高速なシミュレーション方式と、低速で精度の高いシミュレーション方式との切り換え自由度を向上させ、好適にシミュレーションを実行する情報処理装置を提供できる。
【発明を実施するための最良の形態】
【００１１】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１２】
［第１の実施形態］
＜情報処理装置の構成＞
以下では、図１乃至図１０を参照して、第１の実施形態について説明する。本実施形態に係る情報処理装置は、パーソナルコンピュータ、ワークステーション等を含む。まず、図２を参照して、情報処理装置の構成について説明する。図２は、第１の実施形態に係る情報処理装置２０１のハードウェア構成を示す図である。
【００１３】
情報処理装置２０１は、本体部２０２、表示装置２０３、キーボード２０４、及びマウス２０５を備える。表示装置２０３は、本体部２０２からの指示により画面表示を行う。キーボード２０４は、情報処理装置２０１にユーザ（オペレータ）の指示や文字情報を入力する。マウス２０５は、表示装置２０３上の任意の位置を指定することにより、その位置に表示されていたアイコン等に応じた指示を入力する。また、本体部２０２は、中央処理装置２０６、主記憶装置２０７及びハードディスク２０８を備える。
【００１４】
ハードディスク２０８には、シミュレータの各機能を実現するためのプログラム、及び、シミュレーション対象装置に関する情報を含むシミュレーションのための各種データが格納される。本実施形態に係るシミュレーションは、例えば、中央処理装置２０６がプログラム、各種データを主記憶装置２０７にロードし、当該プログラムを実行することにより実行される。また、情報処理装置２０１に対する基本制御は基本プログラムであるオペレーティングシステム（以下、ＯＳと記す）によって行われる。
【００１５】
＜シミュレータの構成＞
次に、図１を参照して、本実施形態におけるシミュレータの構成について説明する。図１は、第１の実施形態に係るシミュレータの機能構成を示す図である。以下で説明する構成は、例えば中央処理装置２０６によって実現される。また、以下では、一例として、ターゲット計算機である機械装置組み込み型の計算機と、当該計算機の制御対象である機械装置をシミュレーションするシミュレータについて説明する。
【００１６】
機器制御シミュレータ１１１は、ターゲット計算機をシミュレーションする２つのＣＰＵシミュレータとして動作する、第１のシミュレータである論理シミュレータ１０１と、第２のシミュレータである命令セットシミュレータ１０２とを備える。さらに、機器制御シミュレータ１１１は、制御対象の装置をシミュレーションする仮想装置シミュレータ１０３と、シミュレータハブ（以下、ＨＵＢと記す）１０４とを備える。
【００１７】
ＨＵＢ１０４は、同期部１０５、配線部１０６、ＣＰＵシミュレーション切換部１０７及びシミュレータインタフェース１０８を備える。同期部１０５は、時間同期部１２７、イベント同期部１２８及び同期切換部１２９を備える。配線部１０６は、配線接続部１３０及び配線切換部１３１を備える。ＣＰＵシミュレーション切換部１０７は、処理引渡部１３２、切換関数管理部１３３及びシミュレーション切換ユーザインタフェース１３４を備える。
【００１８】
論理シミュレータ１０１、命令セットシミュレータ１０２及び仮想装置シミュレータ１０３は、例えば、それぞれがＯＳ上で個別に動作するアプリケーションソフトとして実現されてもよく、それぞれが独立したプロセスとして存在してもよい。ここで、論理シミュレータとは、ターゲット計算機の命令を予め情報処理装置が解釈可能な実行命令コードであるネイティブコードに変換し、シミュレーションの実行の際には情報処理装置がネイティブコードを実行するＣＰＵシミュレータを示す。また、命令セットシミュレータとは、ターゲット計算機が解釈可能な実行命令コードであるターゲットコードで作成されたプログラムをターゲットシステムとは異なる情報処理装置上で実行するＣＰＵシミュレータを示す。具体的には、ターゲット計算機のメモリ空間であるターゲットメモリ、ターゲットレジスタ等を情報処理装置上に仮想的に設ける。さらに、ターゲットコードを１命令毎に解釈、実行して、仮想ターゲットメモリ、仮想ターゲットレジスタに対して作用させるプログラムを情報処理装置が実行する。したがって、命令セットシミュレータは、論理シミュレータと比較して、処理が低速になるが１命令毎に解釈するためターゲット計算機の動作をより正確に実行することができる。本実施形態では、論理シミュレータ１０１を基本とし、ユーザが指定した処理のみを命令セットシミュレータで行う。これにより、高速で、かつ、精度の高いシミュレーションを実行することができる。
【００１９】
本実施形態において、ＨＵＢ１０４に接続される各シミュレータは、それぞれがプロセス間通信を介してそれぞれのシミュレーション実行において発生する各種イベントを接続相手のプロセスに通知し、接続相手からの処理通知を受ける。そのため、各シミュレータは、外部と通信するための外部インタフェース１２３、１２６を有する。外部インタフェース１２３、１２６を通じてＨＵＢ１０４と各シミュレータ間で通信を行い、１つのシミュレーションシステムとして動作する。ＨＵＢ１０４と各シミュレータとの通信内容については後述する。
【００２０】
次に、各構成要素の機能について説明する。
【００２１】
論理シミュレータ１０１及び命令セットシミュレータ１０２は、シミュレーション対象となるターゲット計算機の動作を情報処理装置２０１上でシミュレーションするシミュレータである。以下では、ＣＰＵシミュレータである論理シミュレータ１０１及び命令セットシミュレータ１０２に共通する機能を説明する。
【００２２】
ＣＰＵシミュレータは、ターゲット計算機の制御プログラム（以下、ターゲットファームウェアと称する。）に従って、ターゲット計算機の端子に対応して定義された仮想入力端子の情報を読み込み、仮想出力端子を制御する。
【００２３】
また、ＣＰＵシミュレータは、ターゲット計算機のアドレス空間に対応した仮想アドレス空間を設けている。ここで、仮想アドレス空間とは、ターゲット計算機の管理するアドレス空間上の個々の領域と１対１で対応する領域を情報処理装置２０１の主記憶装置上に定義したものである。仮想アドレス空間の情報処理装置２０１上の実アドレス値は、ターゲット計算機の扱うアドレス値とは異なる。したがって、ＣＰＵシミュレータは、ターゲットファームウェアによるターゲット計算機のアドレス空間上のアドレス値へのアクセス命令に従って、仮想アドレス空間上の対応する領域にアクセスする。
【００２４】
ターゲット計算機のレジスタ類も、アドレス空間上に配置されたレジスタについては、仮想アドレス空間上に対応する領域が設定され、アクセスについても仮想アドレス空間へのアクセスによってシミュレーションされる。ターゲット計算機の内部に設けられる専用レジスタ（アキュムレータ、プログラムカウンタ、スタックポインタ等）については、ターゲットシステム内ではアドレス空間に配置されないが、ＣＰＵシミュレータ上では主記憶装置２０７上に定義される。しかし、上位概念でのシミュレーションを行う論理シミュレータの場合にはシミュレーションされない場合もある。
【００２５】
論理シミュレータ１０１は、制御部１２１、デバッグ部１２２及び外部インタフェース１２３を備え、情報処理装置２０１のネイティブコードを対象にシミュレーションを行う。制御部１２１は、論理シミュレータ１０１におけるシミュレーションの実行を統括的に制御する。論理シミュレータ１０１用のシミュレーション対象プログラムコードは、論理シミュレータ１０１用のネイティブコンパイラ１０９により生成される。ネイティブコンパイラ１０９は、高級言語で記述されたターゲットソフトウェアソースプログラムを情報処理装置２０１のネイティブコードにコンパイルする。また、ネイティブコンパイラ１０９は、論理シミュレータ１０１によるシミュレーションに必要な制御情報を生成する。ここで制御情報としては、ソースプログラム上の関数、変数のネイティブコード上のアドレス情報、ネイティブコードに対応するソースプログラム上の位置関係、ソースプログラム上の実行命令に対するターゲット計算機における実行サイクル数等がある。
【００２６】
論理シミュレータ１０１によるターゲット計算機の動作シミュレーション方法については公知の技術であるため詳述は省略する。本実施形態に係る論理シミュレータ１０１は、シミュレーション実行に伴うターゲット計算機における実行サイクル数に相当するシミュレーション上の実行サイクル数を計測する機能を有する。実行サイクル数は、ネイティブコンパイラ１０９により生成されるソースプログラム上の実行命令に対するターゲット計算機における実行サイクル数情報を使って、ソースプログラム上の１命令の実行サイクル数をトータル実行サイクル数に加算して求められる。
【００２７】
また、論理シミュレータ１０１は、プログラムデバッグのためのデバッグ部１２２を備え、デバッガ機能としてはブレーク、トレース、仮想メモリのモニタ／書き換え、関数引数のモニタ／書き換え、関数戻り値のモニタ／書き換え等を有している。論理シミュレータ１０１は、ターゲット計算機のレジスタについてはシミュレーションを行わないため、レジスタやスタック領域を使用するターゲット計算機の関数引数、戻り値の状態を直接的にモニタしたり、書き換えたりすることができない。このため、論理シミュレータ１０１は、デバッガ機能として関数引数、戻り値を間接的にモニタ／書き換えできる機能を有している。
【００２８】
命令セットシミュレータ１０２は、制御部１２４、デバッグ部１２５及び外部インタフェース１２６を備え、ターゲットコードを対象にシミュレーションを実行する。制御部１２４は、命令セットシミュレータ１０２におけるシミュレーションの実行を統括的に制御する。ターゲットコードは、ターゲット計算機用のコンパイラであるターゲットコンパイラ１１０により生成される。ターゲットコンパイラ１１０は、高級言語で記述されたターゲットソフトウェアソースプログラムをターゲットコードにコンパイルする。また、ターゲットコンパイラ１１０は、命令セットシミュレータ１０２によるシミュレーションに必要な制御情報を生成する。制御情報としては、ソースプログラム上の関数、変数ラベルのターゲットコード上のアドレス情報、ターゲットコードに対応するソースプログラム上の位置関係等がある。なお、命令セットシミュレータ１０２は、ターゲットコード１命令毎の実行サイクル数情報を基本情報として有している。
【００２９】
また、命令セットシミュレータ１０２は、論理シミュレータ１０１と同様に、デバッガ機能として、ブレーク、トレース、仮想メモリのモニタ／書き換え、関数引数のモニタ／書き換え、関数戻り値のモニタ／書き換え等を有している。また、命令セットシミュレータ１０２は、デバッガ機能として仮想レジスタのモニタ／書き換え機能も有している。命令セットシミュレータ１０２によるターゲット計算機の動作シミュレーション方法については公知の技術であるため詳述は省略する。
【００３０】
仮想装置シミュレータ１０３は、アクチュエータ、センサを含む複数の部品からなる機構モデル、及び、アクチュエータ類のドライバハードウェアを情報処理装置２０１上で擬似的に動作させるシミュレータである。機構モデルの各要素（以下、機構部品と称する。）は、ユーザにより形状、種類、動作、機構部品間の干渉と連携条件等が定義される。さらに、センサ、アクチュエータについては外部信号定義が行われる。仮想装置シミュレータ１０３による機械装置のシミュレーション方法は公知の技術であるため詳述は省略する。
【００３１】
ＨＵＢ１０４は、論理シミュレータ１０１、命令セットシミュレータ１０２及び仮想装置シミュレータ１０３が備える外部インタフェースにより各シミュレータからのイベント発生通知を受け、各シミュレータに対して処理を通知する。各シミュレータの外部インタフェースを通じたやり取りはシミュレータインタフェース１０８によって制御される。
【００３２】
＜シミュレータインタフェース＞
次に、図３を参照して、シミュレータインタフェース１０８の詳細な動作について説明する。図３は、第１の実施形態に係るシミュレータインタフェース１０８による各シミュレータとＨＵＢ１０４とのデータ通信を示す図である。ここで、各シミュレータとは、図１に示す論理シミュレータ１０１、命令セットシミュレータ１０２及び仮想装置シミュレータ１０３を示す。
【００３３】
各シミュレータは、シミュレーション実行中に予め定義されたイベントが発生するとプロセス間通信を介してシミュレータインタフェース１０８にイベントを通知する。このときイベントを通知したシミュレータは、シミュレータインタフェース１０８からの返答を受信するまでシミュレーション動作を停止する。シミュレータインタフェース１０８は、イベント通知に応じてＨＵＢ１０４内のイベントに対応したコールバック関数を呼び出す。ＨＵＢ１０４内の各機能（同期部１０５、配線部１０６、ＣＰＵシミュレーション切換部１０７）の各々がイベント毎に対応した関数をシミュレータインタフェース１０８に登録しており、シミュレータインタフェース１０８はイベント毎の登録関数を呼び出す。そして、各コールバック処理の結果、対象シミュレータに対する処理通知が各コールバック関数からシミュレータインタフェース１０８を介して各シミュレータに通知される。
【００３４】
本実施形態では、各シミュレータとＨＵＢ１０４との接続をプロセス間通信を用いて行い、イベントに対するコールバックをシミュレータインタフェース１０８が実行している。しかし、本発明は、この方式に限定されず、シミュレータが外部インタフェースとしてダイナミックリンクライブラリ（以下、ｄｌｌと記す。）関数の呼出し方式を有している場合には、ＨＵＢをシミュレータのｄｌｌとして構成してもよい。これにより、イベントに対するコールバックをシミュレータからの直接呼出方式により実現することもできる。
【００３５】
本実施形態のシミュレータにおいて、各シミュレータからＨＵＢ１０４に対して通知されるイベントには、以下に示すものがある。
【００３６】
論理シミュレータ１０１及び命令セットシミュレータ１０２では、各ＣＰＵシミュレータの状態変化（起動、初期化、終了）や、ターゲット計算機の動作シミュレーションにおけるイベントがある。動作シミュレーションにおけるイベントには、メモリアクセス、レジスタアクセス、命令実行、関数コール、関数リターン、割り込み、リセット、サイクル数等がある。また、仮想装置シミュレータ１０３では、仮想装置シミュレータの状態変化（起動、初期化、終了）や、装置シミュレーションにおけるイベントがある。装置シミュレーションにおけるイベントには、機構の動作完了、センサの状態変化、実行時間等がある。
【００３７】
また、ＨＵＢ１０４から各シミュレータへ通知される処理には、以下に示すものがある。
【００３８】
論理シミュレータ１０１及び命令セットシミュレータ１０２に対しては、初期化における各種設定、終了における各種設定、メモリ及びレジスタの値の報知指示、メモリ及びレジスタの値の変更指示、シミュレーション実行指示、シミュレーション実行時間（サイクル数）指定、実行イベント発生条件（実行アドレス、関数）指定／解除、割込み発生指示、リセット指示等がある。仮想装置シミュレータ１０３に対しては、アクチュエータ動作指示、センサ状態の報知指示、シミュレーション実行指示、イベント発生時間指示等がある。
【００３９】
＜同期部＞
次に、同期部１０５について説明する。上述のようなインタフェースによりＨＵＢ１０４は、接続される全シミュレータの同期と信号接続を制御し１つのシミュレーションシステムとして動作させる。通常、同期処理は、同期部１０５の時間同期部１２７によって一定間隔毎（シミュレーションにおける仮想時間上の一定時間毎）に接続されるシミュレータの同期をとる。具体的には、時間同期部１２７が各シミュレータの外部インタフェースを通じて各シミュレータに対して同期間隔分のシミュレーション実行を指示する。その後、全シミュレータから実行終了の通知（ＣＰＵシミュレータはサイクル数イベント通知、仮想装置シミュレータは実行時間イベント通知）を受けると、各シミュレータに対して、次の１同期間隔分のシミュレーション実行を指示する。このような処理の繰返しにより仮想時間上の同期を実現する。本実施形態における時間同期部１２７では、ＨＵＢ１０４に接続されているアプリケーション（シミュレータ）の内、時間同期対象に指定されているものについて時間同期処理を行う。時間同期対象のデフォルト設定は、論理シミュレータ１０１と仮想装置シミュレータ１０３である。
【００４０】
本実施形態に係る機器制御シミュレータ１１１では、ＣＰＵシミュレーションに関して、大部分のシミュレーションを論理シミュレーションで実行し、ユーザが指定する関数のみ命令セットシミュレーションで実行する。これにより、高速なＣＰＵシミュレーションを実行しつつ、必要な個所はターゲット計算機に近い動作のシミュレーションを実行するようにしている。
【００４１】
上述したように、本実施形態に係るＨＵＢ１０４は、各シミュレータ間での同期機能や接続機能を提供する。しかし、ＨＵＢ１０４は、さらに、イベント同期部１２８、同期切換部１２９、配線切換部１３１及びＣＰＵシミュレーション切換部１０７を備える。これにより、ターゲットソフトウェアの実行シミュレーションを必要に応じて命令セットシミュレーションに切り換える機能が付加される。
【００４２】
次に、図４を参照して、イベント同期部１２８の動作について説明する。イベント同期部１２８は、時間同期部１２７による仮想時間上の同期とは別に指定されたイベントによる同期処理を行う。また、イベント同期処理は、命令セットシミュレーション実行時に論理シミュレータ１０１と命令セットシミュレータ１０２との間でのみ行われる。具体的には、イベント同期部１２８は、後述の同期切換部１２９からイベント同期実行指示と同期条件イベントの指定を受けて論理シミュレータ１０１と命令セットシミュレータ１０２との間のイベント同期処理を実行する。
【００４３】
図４は、第１の実施形態に係るイベント同期部１２８の処理手順を示すフローチャートである。イベント同期部１２８は、後述の同期切換部１２９からイベント同期実行開始時に呼び出されるとともに、接続先の各シミュレータからの全てのイベント通知に応じてシミュレータインタフェース１０８によりコールバック関数として呼び出される。
【００４４】
まず、ステップＳ４０１において、イベント同期部１２８は、同期切換部１２９から同期条件の指定を受けて呼び出されると、指定された同期イベントを記憶し、ステップＳ４０２乃至Ｓ４０５のＣＰＵシミュレーション実行処理に進む。
【００４５】
ステップＳ４０２において、イベント同期部１２８は、時間同期部１２７に対して、論理シミュレータ１０１について時間同期待機中であるか否かを問い合わせる。ここで、時間同期待機中でない場合には、Ｓ４０３に進み、論理シミュレータ１０１にシミュレーション実行を指示してＳ４０４に進む。一方、時間同期待機中である場合には、Ｓ４０４に進む。
【００４６】
ステップＳ４０４において、イベント同期部１２８は、時間同期部１２７に対して、命令セットシミュレータについて時間同期待機中であるか否かを問い合わせる。ここで、時間同期待機中でない場合には、Ｓ４０５に進み、命令セットシミュレータ１０２にシミュレーション実行を指示してＳ４０６に進む。一方、時間同期待機中である場合には、Ｓ４０６に進む。
【００４７】
このように、何れのＣＰＵシミュレータに対しても、時間同期部１２７から時間同期待機中の報知がある場合にはシミュレーション実行を指示しない。これは、時間同期待機中の場合に各ＣＰＵシミュレータに対してシミュレーション実行指示を出すと時間同期処理ができなくなるためである。
【００４８】
次に、ステップＳ４０６において、イベント同期部１２８は、論理シミュレータ１０１及び命令セットシミュレータ１０２からのメモリアクセス、又は、関数リターンイベントが発生するまで待機する。実際の処理ではＳ４０２乃至Ｓ４０５で一度処理を終了し、Ｓ４０６はシミュレータインタフェース１０８からの呼出し待ちとなる。
【００４９】
イベントが発生すると、ステップＳ４０７において、イベント同期部１２８は、発生イベントを確認し発生イベントがＳ４０１で記憶した指定同期イベントであるか否かを判定する。ここで指定同期イベントでなければＳ４１３において、イベント同期部１２８は、イベントを発生させたシミュレータにシミュレーション実行を指示しＳ４０６に戻る。Ｓ４１３において実行処理通知の発行先はシミュレータインタフェース１０８により判別されるため、イベント同期部１２８は、処理通知先のＣＰＵシミュレータを意識する必要が無い。
【００５０】
一方、Ｓ４０７で発生イベントが指定同期イベントである場合には、ステップＳ４０８において、イベント同期部１２８は、発生イベント内容を記憶し、Ｓ４０９で次のイベントが発生するまで待機する。ここも、実際にはＳ４０８で一度処理を終了し、Ｓ４０９はシミュレータインタフェース１０８からの呼出し待ちとなる。
【００５１】
イベントが発生すると、Ｓ４１０へ進む。Ｓ４０６でイベント通知を発行したＣＰＵシミュレータはイベント通知状態でシミュレーションを停止しているため、Ｓ４０９で発生するイベント通知はもう一方のＣＰＵシミュレータからのものとなる。したがって、ステップＳ４１０において、イベント同期部１２８は、Ｓ４０９で通知を受けたイベントとＳ４０８で記憶したイベントとが同じ種類のものであるかを比較する。Ｓ４１０の結果、２つのイベントが異なると判断された場合には、ステップＳ４１４において、イベント同期部１２８は、イベントを発生したシミュレータにシミュレーション実行を指示しＳ４０９に戻る。Ｓ４１４においてもＳ４１３と同様に、イベント同期部１２８は、処理通知先のＣＰＵシミュレータを意識する必要は無い。
【００５２】
一方、Ｓ４１０の結果、２つのイベントが同じであると判断された場合には、ステップＳ４１１において、イベント同期部１２８は、同期切換部１２９に対して、イベント同期発生をイベント種別とともに通知する。続いて、ステップＳ４１２において、イベント同期部１２８は、Ｓ４１１の通知の結果、同期切換部１２９からイベント同期終了が報知されればイベント同期処理を終了する。一方、イベント同期終了が報知されない場合、Ｓ４０２に戻る。
【００５３】
以上の処理を繰返すことにより、論理シミュレータ１０１と命令セットシミュレータ１０２における同一イベントでの同期を実現できる。
【００５４】
次に、図５を参照して、同期切換部１２９の動作について説明する。同期切換部１２９は、後述する処理引渡部１３２からの命令セットシミュレーション実行開始を受けると、シミュレータ間の同期方式の切換処理を行う。図５は、第１の実施形態に係る同期切換部１２９の処理手順を示すフローチャートである。同期切換部１２９は、切換先のシミュレータ（論理シミュレータ１０１又は命令セットシミュレータ１０２）に応じて、各シミュレータ間での同期方法（時間同期部１２７による同期処理又はイベント同期部１２８による同期処理）を切り換える。
【００５５】
本フローチャートは、同期切換部１２９が処理引渡部１３２からの命令セットシミュレーションの実行開始通知を受信すると開始される。ステップＳ５０１において、同期切換部１２９は、時間同期部１２７に論理シミュレータ１０１を時間同期の対象から除外し、命令セットシミュレータ１０２を時間同期の対象とする指示を出す。
【００５６】
次に、ステップＳ５０２において、同期切換部１２９は、イベント同期部１２８に関数リターンイベントによる論理シミュレータ１０１と命令セットシミュレータ１０２のイベント同期処理の開始を指示する。続いて、ステップＳ５０３において、同期切換部１２９は、イベント同期部１２８からイベント同期発生が通知されるまで待機する。イベント同期発生の通知を受けると、ステップＳ５０４において、同期切換部１２９は、同期イベントの種別を確認する。ここで、同期イベントが関数リターンでなければＳ５０３のイベント同期通知待ちに戻る。ここでは、イベント同期から時間同期に復帰させるための判定を行っている。
【００５７】
一方、同期イベントが関数リターンであれば、ステップＳ５０５において、同期切換部１２９は、処理引渡部１３２に命令セットシミュレーション終了を通知した後に、ステップＳ５０６でイベント同期部１２８にイベント同期処理の終了を指示する。さらに、ステップＳ５０７において、同期切換部１２９は、時間同期部１２７に論理シミュレータ１０１を時間同期の対象とし、命令セットシミュレータ１０２を時間同期の対象から除外する指示を出して同期切換処理を終了する。
【００５８】
＜配線部＞
以下では、図６乃至図８Ｂを参照して、配線部１０６について説明する。本実施形態の機器制御シミュレータ１１１では、論理シミュレータ１０１と仮想装置シミュレータ１０３との間、命令セットシミュレータ１０２と仮想装置シミュレータ１０３との間に、各々、情報伝達経路となる信号線が配線されている。具体的には、配線部１０６によってセンサ、アクチュエータ類に関する信号線の配線が行われている。２つのＣＰＵシミュレータと仮想装置シミュレータ１０３との間に配線される信号線はまったく同じ種類のものである。また、命令セットシミュレータ１０２と仮想装置シミュレータ１０３との間で配線されている信号線は、配線切換部１３１によってシミュレーション動作中に接続状態が接続又は遮断に切り換えられる。
【００５９】
さらに、機器制御シミュレータ１１１では、論理シミュレータ１０１と命令セットシミュレータ１０２との間に、配線部１０６によって仮想メモリ領域、及び、機能レジスタの配線が行われている。仮想メモリ領域で接続されるのは、ターゲットソフトウェアソースプログラム上で常駐の変数として定義されている領域である。また、機能レジスタは、ターゲット計算機の周辺ハードウェア（Ｉ／Ｏポート、割り込み、タイマ等）をコントロールするためのレジスタである。通常、ターゲット計算機のプログラムカウンタ、スタックポインタ、アキュムレータ等の専用レジスタについては論理シミュレーションではシミュレーションされないため接続対象としない。ただし、割込み許可フラグ等の専用レジスタ内でシステム制御に関連するものはシミュレーション対象となる場合があり、この場合には個別に接続定義を行う。仮想メモリ、機能レジスタは定義単位毎に１つの信号線として通常の信号線と同じ配線方法で配線される。
【００６０】
ここで、図６を参照して、配線部１０６による配線接続処理、及び遮断処理について説明する。図６は、第１の実施形態に係る配線接続部１３０の機能構成を示す図である。配線接続部１３０は、配線定義された各信号線（以下、特記しない限り「信号線」は「メモリ領域」を含むものとする。）の値をそれぞれの切り口（各シミュレータとの接続部）毎に保持し、必要に応じて接続先に伝達する。
【００６１】
配線接続部１３０は、論理シミュレータ配線部６０１、命令セットシミュレータ配線部６０２、仮想装置シミュレータ配線部６０３、論理シミュレータ信号保持部６０４、命令セットシミュレータ信号保持部６０５、仮想装置シミュレータ信号保持部６０６及び信号伝達管理部６０７を備える。
【００６２】
論理シミュレータ配線部６０１、命令セットシミュレータ配線部６０２、及び仮想装置シミュレータ配線部６０３は、例えば、コールバック関数として実現されてもよい。コールバック関数は、接続先の各シミュレータからのイベント通知に応じてシミュレータインタフェース１０８から呼び出される。
【００６３】
論理シミュレータ１０１は、メモリリード、レジスタリードの直前にリードアクセス通知を、メモリライト、レジスタライトの直前にライトアクセス通知を発行する。シミュレータインタフェース１０８はアクセス通知に応じてアクセスアドレス、又は、アクセスレジスタ情報をパラメータとして論理シミュレータ配線部６０１を呼び出す。論理シミュレータ配線部６０１は論理シミュレータ１０１にシミュレータインタフェース１０８を介して以下の処理通知を発行する。
リードアクセスの場合：アクセス対象の領域に対する値の書き込み。
ライトアクセスの場合：アクセス対象の領域データの報知。
【００６４】
リードアクセスの場合に指示する書き込み値は、論理シミュレータ信号保持部６０４中の対応する領域の値である。また、ライトアクセスの場合に報知されたアクセス領域の値は、論理シミュレータ信号保持部６０４中の対応する領域に書き込まれる。
【００６５】
ここで、ターゲット計算機における入出力信号は全てアドレス空間上に配置されているため、上記メモリ、又は、レジスタへのアクセス処理によって信号入出力のシミュレーションも可能である。
【００６６】
命令セットシミュレータ配線部６０２の処理は、対象が命令セットシミュレータ１０２、命令セットシミュレータ信号保持部６０５に代わるだけで、論理シミュレータ配線部６０１の動作と同様である。したがって、詳細な説明は省略する。
【００６７】
以上のような配線処理により、各ＣＰＵシミュレータとＨＵＢ１０４との信号のやり取りはターゲットソフトウェアによるアクセス時に、アクセス対象の信号線についてのみ実行される。したがって、仮想メモリ領域を含めた配線を行っても、高速なシミュレーションが可能となる。
【００６８】
仮想装置シミュレータ配線部６０３の動作も、対象を仮想装置シミュレータ１０３、仮想装置シミュレータ信号保持部６０６に置き換えれば、論理シミュレータ配線部６０１の処理と同様である。しかし、仮想装置シミュレータ配線部６０３がシミュレータインタフェース１０８から呼び出されるのは、仮想装置シミュレータ１０３からのセンサ状態変化通知、及び、実行時間通知を受けた場合となる。ここで、実行時間通知とは所定時間（シミュレーション上の仮想時間）のシミュレーション実行を完了した場合の通知を示す。本実施形態の機器制御シミュレータ１１１においては、時間同期部１２７から１同期時間分のシミュレーション実行指示を受けて発生するイベントである。仮想装置シミュレータ配線部６０３は、センサ状態変化通知に対しては対象センサ値の報知を、実行時間通知に対してはＨＵＢ１０４と仮想装置シミュレータ１０３との接続信号全ての書き込みを通知する。
【００６９】
論理シミュレータ信号保持部６０４は、論理シミュレータ配線部６０１、及び、信号伝達管理部６０７からの指示に従い対象信号線の値の報知、書き換えを行う。また、論理シミュレータ信号保持部６０４は、論理シミュレータ配線部６０１からの書き換え指示に応じて対象信号線の値の書き換え後に信号伝達管理部６０７に信号線の値書き換えを報知する。
【００７０】
命令セットシミュレータ信号保持部６０５、仮想装置シミュレータ信号保持部６０６の処理は、対象が命令セットシミュレータ配線部６０２、仮想装置シミュレータ配線部６０３に代わるだけで、論理シミュレータ信号保持部６０４の動作と同様である。したがって、詳細な説明は省略する。
【００７１】
信号伝達管理部６０７は、論理シミュレータ信号保持部６０４、命令セットシミュレータ信号保持部６０５、仮想装置シミュレータ信号保持部６０６の間で、対応する信号線の値の伝達を管理する。
【００７２】
図７は、第１の実施形態に係る信号伝達管理部６０７の処理手順を示すフローチャートである。まず、ステップＳ７０１において、信号伝達管理部６０７は、何れかの信号保持部から信号線書き換えが報知されるまで待機する。何れかの信号保持部から信号線書き換えが報知されると、ステップＳ７０２において、信号伝達管理部６０７は、配線切換部１３１に対象信号線についての接続先との接続状態を問い合わせる。
【００７３】
次に、ステップＳ７０３において、信号伝達管理部６０７は、問い合わせ結果を判定する。ここで、対象信号線が接続状態である場合にはＳ７０４で報知元の信号保持部に対象信号線の値を問い合わせ、Ｓ７０５で対象信号線の接続先の信号保持部に対象信号線の値についてＳ７０４で得た信号線の値への変更を指示する。一方、Ｓ７０３で対象信号線が断線状態である場合には処理を終了する。
【００７４】
配線切換部１３１は、ＣＰＵシミュレーション切換部１０７からのＣＰＵシミュレーション情報（論理シミュレーション実行／命令セットシミュレーション実行）に応じて各信号線の配線接続状態を変更する。図８Ａ及び図８Ｂは、第１の実施形態に係る配線切換部１３１の配線接続状態管理テーブルを示す図である。図８Ａは、ＣＰＵシミュレーション切換部１０７から論理シミュレーション実行が報知された場合の管理テーブルの状態を示す。図８Ｂは、ＣＰＵシミュレーション切換部１０７から命令セットシミュレーション実行が報知された場合の管理テーブルの状態を示す。
【００７５】
図８Ａに示すように、論理シミュレーション実行の場合には命令セットシミュレータ１０２から他の２つのシミュレータへの信号伝達（出力情報）を遮断し、それ以外の信号線は接続とする。一方、図８Ｂに示すように、命令セットシミュレーション実行の場合には論理シミュレータ１０１から他の２つのシミュレータへの信号伝達（出力情報）を遮断し、それ以外の信号線は接続とする。
【００７６】
配線切換部１３１は、信号伝達管理部６０７から配線の接続状態の問い合わせを受けると、配線接続状態管理テーブルに応じた接続状態を報知する。また、配線切換部１３１は、デフォルトのＣＰＵシミュレーション情報を論理シミュレーション実行とする。即ち、配線接続状態管理テーブルの初期値は図８Ａの状態となる。
【００７７】
＜ＣＰＵシミュレーション切換部＞
次に、ＣＰＵシミュレーション切換部１０７の動作について説明する。ＣＰＵシミュレーション切換部１０７は、処理引渡部１３２、切換関数管理部１３３及びシミュレーション切換ユーザインタフェース１３４を備える。
【００７８】
シミュレーション切換ユーザインタフェース１３４は、ユーザがシミュレーションの切換条件を設定するためのユーザインタフェースを提供する。例えば、当該ユーザインタフェースは、ユーザから命令セットシミュレーションを実行する関数（切換条件）を指定するために用いられる。このユーザインタフェースについては公知の技術によるため詳述は避けるが、表示装置２０３に関数名入力画面を表示し、キーボード２０４、マウス２０５を使用してユーザから関数名を文字列によって指定するインタフェースを提供する。また、ユーザが指定した関数を削除する場合のために、登録関数リストを表示装置２０３に表示し、キーボード２０４、マウス２０５を使用して削除対象の関数名を指定することによりシミュレーション切換対象の関数から削除するインタフェースを提供する。
【００７９】
また、関数登録に関しては、ネイティブコンパイラ１０９、又は、ターゲットコンパイラ１１０が関数名リストを出力する機能を持っている場合が想定される。この場合、シミュレーション切換ユーザインタフェース１３４は、コンパイラから取得した関数名リストを表示装置２０３上に表示し、キーボード２０４、マウス２０５によってユーザに所望の関数を選択させるインタフェースを提供することもできる。
【００８０】
切換関数管理部１３３は、切換条件管理手段として機能し、シミュレーション切換ユーザインタフェース１３４を介して指定される命令セットシミュレーション対象関数情報（切換条件）を保持する。さらに、切換関数管理部１３３は、処理引渡部１３２からの問い合わせに応じて命令セットシミュレーション対象関数情報の更新情報を報知する。
【００８１】
処理引渡部１３２は、シミュレータインタフェース１０８、及び、イベント同期部１２８により呼び出されるコールバック関数で構成され、切換条件を監視するとともに、当該切換条件が成立すると各シミュレータの間で処理を引き渡す。シミュレータインタフェース１０８は、論理シミュレータ１０１からのサイクル数イベント通知、及び、命令実行イベント通知に応じて、処理引渡部１３２をコールする。ここで、サイクル数通知とは、所定サイクルのＣＰＵシミュレーション実行を完了した場合の通知を示す。本実施形態の機器制御シミュレータ１１１においては、時間同期部１２７による時間同期制御において、論理シミュレータ１０１が１同期時間分に相当するサイクル数のシミュレーション実行指示を受けて発生するイベントである。また、イベント同期部１２８はイベント同期条件発生時に処理引渡部１３２をコールする。
【００８２】
また、処理引渡部１３２は、サイクル数イベント通知による呼び出しを受けた場合、即ち、時間同期部１２７による１同期時間分の処理の区切りに達した場合、必要に応じてイベント通知登録処理を論理シミュレータ１０１に対して通知する。これは、シミュレータインタフェース１０８を介して切換関数管理部１３３に登録されている関数を実行することにより行われる。
【００８３】
図９は、第１の実施形態に係る処理引渡部１３２におけるサイクル数イベント通知時の処理手順を示すフローチャートである。
【００８４】
まず、ステップＳ９０１において、処理引渡部１３２は、切換関数管理部１３３に命令セットシミュレーション対象関数情報が更新されたか否かを問い合わせ、更新が無い場合にはそのまま終了する。一方、Ｓ９０１で命令セットシミュレーション対象関数情報に更新がある場合には、ステップＳ９０２において、処理引渡部１３２は、切換関数管理部１３３から更新情報を取得する。そして、ステップＳ９０３において、処理引渡部１３２は、更新内容が追加であるか削除であるかを確認し、追加である場合にはＳ９０４で関数実行イベントを登録する。本実施形態の論理シミュレータ１０１では、関数実行によるイベント通知登録は、実行アドレス指定による命令実行通知イベントの登録によって行う（即ち、関数コールイベントは使わない）。実行アドレス指定は切換関数管理部１３３に登録されている関数名（ラベルの文字列）により指定することで、論理シミュレータ１０１で実行アドレスに変換し命令実行通知対象として登録される。Ｓ９０３で更新内容が削除である場合には、Ｓ９０５で関数実行イベントの削除を行う。関数実行イベントの登録と同様に、論理シミュレータ１０１に対して、関数名（ラベルの文字列）により命令実行イベントの削除を指定する。
【００８５】
上述のように、命令実行イベントの登録を受けた論理シミュレータ１０１は、登録された実行アドレスのシミュレーション実行直前にシミュレーションを中断し、シミュレータインタフェース１０８に命令実行イベントの通知を行う。論理シミュレータ１０１は実行命令に対応するラベル（関数名）が存在する場合、ラベルの文字列情報をパラメータの１つとして通知する。シミュレータインタフェース１０８は、この通知に応じて、上述したように処理引渡部１３２をコールする。
【００８６】
図１０は、第１の実施形態に係る処理引渡部１３２における命令実行イベント通知時の処理手順を示すフローチャートである。
【００８７】
命令実行イベントの通知によるコールを受けた場合、ステップＳ１００１において、処理引渡部１３２は、論理シミュレータ１０１からラベルの文字列として引き渡された関数名を取得する。続いて、ステップＳ１００２において、処理引渡部１３２は、命令セットシミュレータ１０２に対して、関数名に対応する関数アドレスの報知要求を通知して対象の関数に対応するターゲットコード上のアドレス値を取得する。
【００８８】
また、ステップＳ１００３において、処理引渡部１３２は、論理シミュレータ１０１より関数への引数値を取得する。ここで、上述したように、論理シミュレーションにおいては、専用レジスタのシミュレーションを行わないため、関数への引数の取得や戻り値の設定もターゲットコードの仕様どおりの仮想専用レジスタや仮想スタック領域へのアクセスでは行えない。したがって、論理シミュレータ１０１は、関数の引数取得、戻り値設定のための外部インタフェースを用意している。関数引数については関数コール時（関数コールイベント発生）から関数からのリターン（関数リターンイベント発生）までの間に引数取得要求通知によって取得可能である。また、関数戻り値については関数からのリターン時（関数リターンイベント発生中）の戻り値設定処理通知によって設定可能になっている。したがって、Ｓ１００３では論理シミュレータ１０１に関数引数報知要求を通知することで当該関数への引数を取得する。
【００８９】
次に、ステップＳ１００４において、処理引渡部１３２は、命令セットシミュレータ１０２の仮想プログラムカウンタの値をＳ１００２で取得した関数アドレスに設定する。続いて、ステップＳ１００５において、処理引渡部１３２は、命令セットシミュレータ１０２の仮想スタックポインタの値を適切な値（例えば仮想メモリ領域の最後尾）に設定する。さらに、処理引渡部１３２は、当該関数への引数を命令セットシミュレータ１０２の仮想領域（スタック領域、レジスタ等）に設定する。関数への引数引渡し方式は、ターゲット計算機の構成やターゲットコンパイラの仕様に依存する。しかし、当該方式は、ターゲット毎に一意的に決まるため、ターゲット計算機の仕様に応じた引数設定機能をターゲット計算機毎に用意することで各種計算機に対応することができる。
【００９０】
ステップＳ１００６において、処理引渡部１３２は、同期切換部１２９及び配線切換部１３１に命令セットシミュレーション実行を通知する。上述したように、同期切換部１２９は、命令セットシミュレーション実行通知に応じて、論理シミュレータ１０１と命令セットシミュレータ１０２との関数リターンイベントによる同期実行処理を行う。さらに、同期切換部１２９は、論理シミュレータ１０１を時間同期処理対象から除外し、命令セットシミュレータ１０２を時間同期対象とする。また、配線切換部１３１は命令セットシミュレーション実行通知に応じて、配線接続状態を論理シミュレータ１０１からの信号出力について遮断し、命令セットシミュレータ１０２からの信号出力を他のシミュレータと接続する。
【００９１】
上述したように、論理シミュレーション中においても他の２つのシミュレータから命令セットシミュレータ１０２への信号線は接続状態となっている。したがって、切換時点で命令セットシミュレータ信号保持部６０５の信号線値は論理シミュレータ信号保持部６０４と完全に一致している。そして、Ｓ１００４乃至Ｓ１００６の設定により命令セットシミュレータ１０２の関数実行アドレス、スタック領域、関数引数の設定が完了する。これにより、機器制御シミュレータ１１１におけるＣＰＵシミュレーションを命令セットシミュレーションに移行させることができる。
【００９２】
命令セットシミュレーション開始後、ステップＳ１００８において、処理引渡部１３２は、同期切換部１２９からの命令セットシミュレーション終了通知を受信するまで待機する。Ｓ１００８で命令セットシミュレーションの終了通知を受けると、ステップＳ１００９において、処理引渡部１３２は、命令セットシミュレータ１０２より関数戻り値を取得する。なお、関数戻り値についても、引数と同様にターゲット計算機の仕様に応じて所定の仮想領域から取得することが可能である。続いて、ステップＳ１０１０において、処理引渡部１３２は、配線切換部１３１に論理シミュレーション実行を通知し、Ｓ１０１１で論理シミュレータ１０１の戻り値設定処理通知によりＳ１００９で取得した戻り値を設定して処理を終了する。
【００９３】
上述したように、処理引渡部１３２によるＳ１０１１の処理の後、同期切換部１２９は自動的に同期処理を論理シミュレーション状態に切換える。
【００９４】
上述の処理では、命令セットシミュレータ１０２による指定関数のシミュレーション実行中も論理シミュレータ１０１によるシミュレーションは継続される。この間の論理シミュレータ１０１によるシミュレーションは他の２つのシミュレータとの仮想時間同期がとられていない。さらに、論理シミュレータ１０１への入力は、ＣＰＵシミュレータによって実行されるターゲットソフトウェアの処理が反映されたものではない。したがって、論理シミュレータ１０１上のターゲットソフトウェアの処理は、正しく実行されないことが予想される。しかし、処理により関数からのリターン時における仮想メモリ領域、機能レジスタ領域、関数戻り値、入出力信号値は全て命令セットシミュレータ１０２によるシミュレーション結果が反映される。よって、指定関数からリターン後における論理シミュレータ１０１上のターゲットソフトウェアが正しく動作することとなる。
【００９５】
また、上述の処理は、割込み処理においても使用可能である。即ち、割込み関数のみを命令セットシミュレーションしたい場合には、切換関数として割込み関数名を登録しておく。論理シミュレータで所定の割込みシミュレーションが発生し、割込み関数がコールされた場合にも関数コールイベントから所定の処理により命令セットシミュレータにおける割込み関数シミュレーションに移行する。
【００９６】
以上説明したように、本実施形態に係る情報処理装置は、ＣＰＵシミュレーションにおいて論理シミュレーションを基本とし、必要に応じて命令セットシミュレーションに切り換える。さらに、シミュレーションの整合性を維持するために、切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させ、異なる情報伝達方法で各シミュレータ間の信号線を配線する。これにより、本情報処理装置は、オペレータの要望に合わせて、高速なシミュレーションと低速で精度の高いシミュレーションを切り換えて実行することができる。また、切換先のシミュレータに応じて、同期方法及び情報伝達方法を切り換えるため、シミュレーションの実行中にシミュレータを切り換えることもできる。
【００９７】
なお、本発明は上記実施形態に限らず様々な変形が可能である。例えば、本情報処理装置は、切換先のシミュレータに応じて、各シミュレータごとに時間同期での同期処理とイベント同期での同期処理とを切り換えてもよい。これにより、シミュレーションの整合性を維持した状態で、イベントの発生をトリガにシミュレータを切り換えることができる。例えば、プログラムでは、通常、１つの機能としてまとまった処理（規模に関わらず）を１つの関数として定義している。したがって、本情報処理装置は、ある関数が呼び出された場合に、当該関数の実行を命令セットシミュレータで行うことができ、効率的なシミュレーションを実現することができる。
【００９８】
また、本情報処理装置は、切換先のシミュレータに応じて、各シミュレータごとに信号線の接続状態を接続又は遮断に切り換えてもよい。これにより、データの整合性を維持した状態でシミュレータを切り換えることができる。
【００９９】
［第２の実施形態］
次に、図１１を参照して、第２の実施形態について説明する。第１の実施形態では、命令セットシミュレーションの実行中において論理シミュレータ１０１上のターゲットソフトウェアの処理が正しく実行されない可能性がある。例えば、対象となる関数において外部信号の変化待ちのような処理がある場合、関数からのリターンに至らず関数リターンによるイベント同期待ちでシミュレーションが止まってしまう虞がある。
【０１００】
具体的には、ターゲットソフトウェアの関数の中で仮想装置シミュレータ１０３からのセンサ入力の変化を待機する処理において発生する場合がある。具体的には、同センサの変化がターゲットソフトウェアの信号出力に応じて発生する場合、命令セットシミュレーションにおいては、命令セットシミュレータ１０２からの信号出力があるまでセンサの変化は発生しない。しかし、論理シミュレータ１０１と命令セットシミュレータ１０２は、関数リターンまで非同期に処理が行われる。したがって、論理シミュレータ１０１上でのターゲットソフトウェアの信号待ち処理が命令セットシミュレータ１０２上でのターゲットソフトウェアからの信号出力の結果、仮想装置シミュレータ１０３からのセンサ信号が変化した後に実行される場合がある。この場合、論理シミュレータ１０１上でのターゲットソフトウェアの信号待ち処理は信号変化を捉えることができない。
【０１０１】
そこで、本実施形態の機器制御シミュレータ１１１においては、イベント同期における同期条件にメモリリードイベントの発生による同期条件を付加することで、上述のような問題にも対処できるようにしている。
【０１０２】
本実施形態に係る機器制御シミュレータ１１１の構成は第１の実施形態とほぼ同じであり、異なるのは同期切換部１２９の処理のみである。図１１は、第２の実施形態に係る同期切換部１２９の同期方式切換処理の処理手順を示すフローチャートである。以下では、図５のフローチャートと異なる処理についてのみ説明する。即ち、ステップＳ１１０１、Ｓ１１０３乃至Ｓ１１０７の処理は、ステップＳ５０１、Ｓ５０３乃至Ｓ５０７の処理と同様であるため説明を省略する。
【０１０３】
Ｓ５０２では同期イベントとして関数リターンのみを条件としているのを、ステップＳ１１０２では関数リターンとともにメモリリードを同期イベントに加えている。これにより、命令セットシミュレーション対象関数内で外部信号の変化待ち処理があった場合でも、外部信号読み取り処理で命令セットシミュレータ１０２と同期が取れるため、外部信号変化を正しく捉えることができる。
【０１０４】
［第３の実施形態］
次に、図１２を参照して、第３の実施形態について説明する。第１及び第２の実施形態では、命令セットシミュレーションにおけるイベント同期終了条件を１回の関数リターンイベントのみで判断している。このため、命令セットシミュレーションが可能な関数は最下層の関数に限られてしまう。即ち、対象となる関数内でさらに関数コールを行っている場合には、その関数からのリターンイベントをイベント同期終了条件として捉えてしまうため、命令セットシミュレーションから論理シミュレーションへの切換が正しく実行できない場合がある。
【０１０５】
そこで、本実施形態の機器制御シミュレータ１１１においては、同期切換部１２９におけるイベント同期終了条件に関数コールと関数リターンの対応確認処理を加える。具体的には、本機器制御シミュレータ１１１では、関数コールイベントの発生回数を記憶するカウンタを設け、関数リターンイベントの発生ごとにカウンタの値を１値だけ減算し、当該カウンタの値が０値になった場合にイベント同期終了条件が成立したと判定する。これにより、関数内で関数コールが行われているケースであっても対応することができる。
【０１０６】
本実施形態に係る機器制御シミュレータ１１１の構成は第１の実施形態とほぼ同じであり、異なるのは同期切換部１２９の処理のみである。図１２は、第３の実施形態に係る同期切換部１２９の同期方式切換処理の処理手順を示すフローチャートである。以下では、図５のフローチャートと異なる処理についてのみ説明する。即ち、ステップＳ１２０１乃至Ｓ１２０４、Ｓ１２０７乃至１２０９の処理は、ステップＳ５０１乃至Ｓ５０４、Ｓ５０５乃至Ｓ５０７の処理と同様であるため説明を省略する。また、Ｓ１２０２で指定する同期イベントとして本実施形態においては関数コールを加えている。さらに、関数コールイベントと関数リターンイベントの数を一致させるため、関数コールカウンタを設けている。
【０１０７】
ステップＳ１２０１において、同期切換部１２９は、関数コールカウンタを１で初期化する。その後Ｓ１２０１及びＳ１２０２の処理を実行した後にＳ１２０３でイベント同期が発生した場合、ステップＳ１２０４において、同期切換部１２９は、同期イベントの種別を確認する。ここで、同期イベントが関数リターンでなかった場合、ステップＳ１２１０において、同期切換部１２９は、同期イベントが関数コールイベントか否かを判定する。ここで関数コールイベントの場合には、ステップＳ１２１１において、同期切換部１２９は、関数コールカウンタを１カウントアップさせ、Ｓ１２０３に戻る。
【０１０８】
一方、Ｓ１２０４で同期イベントが関数リターンであると判定すると、ステップＳ１２０５において、同期切換部１２９は、関数コールカウンタを１カウントダウンさせる。さらに、ステップＳ１２０６において、同期切換部１２９は、同カウンタが０であるか否かを判定し、０である場合のみＳ１２０７以降のイベント同期終了処理に進む。一方、Ｓ１２０６で同カウンタが１以上であった場合にはＳ１２０３に戻る。
【０１０９】
これにより、命令セットシミュレーション対象関数内でさらに関数コールを行っている場合であっても、命令セットシミュレーションから論理シミュレーションへの切換を正しく実行することができる。
【０１１０】
［第４の実施形態］
次に、第４の実施形態について説明する。本実施形態は、論理シミュレーション実行中におけるクロック同期事象のシミュレーションを可能にしたものである。例えば、論理シミュレーション実行中にタイマ割り込みを発生させ、割り込みハンドラの処理を命令セットシミュレーションによってシミュレーションする場合には、タイマ割込みイベントと同期してＣＰＵシミュレーション方式を切換える必要がある。
【０１１１】
そこで、本実施形態の機器制御シミュレータ１１１では、イベント同期における同期条件に割込みイベントによる同期条件を付加する。これにより、ターゲットソフトウェアが設定しているタイマ設定に同期させてＣＰＵシミュレーション方式の切換えを行うようにしている。
【０１１２】
本実施形態における機器制御シミュレータ１１１の構成は第１乃至第３の実施形態とほぼ同じであり、異なるのは同期切換部１２９のコールバック条件に割込みイベントを加えている点である。
【０１１３】
上述したように、論理シミュレータ１０１はシミュレーション実行に伴うターゲット計算機における実行サイクル数に相当するシミュレーション上の実行サイクル数を計測する機能を有しており、これによってタイマ割込みシミュレーションを可能にしている。
本実施形態によれば、時間同期部１２７の同期間隔設定をターゲットソフトウェアのタイマカウント値、又は、その約数に設定する。さらに、所定の時間同期タイミングで時間同期部１２７が論理シミュレータ１０１に割込み処理通知を発行することによってタイマ割り込みを発生させる。ターゲットソフトウェアのタイマ設定はメモリ、又は、レジスタ値の読み込みによって可能である。
【０１１４】
割り込み処理通知によって割り込みが発生すると、論理シミュレータ１０１から割込みイベントが通知される。上述したように、割り込みイベントによって同期切換部１２９がコールバックされるため、割込みイベントに対応する割込み関数の実行を第１の実施形態と同様に命令セットシミュレータ１０２で実行させる。これにより、命令セットシミュレーション対象関数内で外部信号の変化待ち処理があった場合でも、外部信号読み取り処理で命令セットシミュレータ１０２と同期が取れるため、外部信号の変化を正しく捉えることができる。
【０１１５】
［他の実施形態］
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。なお、この場合のプログラムとは、実施形態において図に示したフローチャートに対応したプログラムである。
【０１１６】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【０１１７】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等の形態であっても良い。
【０１１８】
プログラムを供給するための記録媒体としては、以下に示す媒体がある。例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などである。
【０１１９】
プログラムの供給方法としては、以下に示す方法も可能である。すなわち、クライアントコンピュータのブラウザからインターネットのホームページに接続し、そこから本発明のコンピュータプログラムそのもの（又は圧縮され自動インストール機能を含むファイル）をハードディスク等の記録媒体にダウンロードする。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【０１２０】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせることも可能である。すなわち該ユーザは、その鍵情報を使用することによって暗号化されたプログラムを実行し、コンピュータにインストールさせることができる。
【０１２１】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。さらに、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【０１２２】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、実行されることによっても、前述した実施形態の機能が実現される。すなわち、該プログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行うことが可能である。
【図面の簡単な説明】
【０１２３】
【図１】第１の実施形態に係るシミュレータの機能構成を示す図である。
【図２】第１の実施形態に係る情報処理装置２０１のハードウェア構成を示す図である。
【図３】第１の実施形態に係るシミュレータインタフェース１０８による各シミュレータとＨＵＢ１０４とのデータ通信を示す図である。
【図４】第１の実施形態に係るイベント同期部１２８の処理手順を示すフローチャートである。
【図５】第１の実施形態に係る同期切換部１２９の処理手順を示すフローチャートである。
【図６】第１の実施形態に係る配線接続部１３０の機能構成を示す図である。
【図７】第１の実施形態に係る信号伝達管理部６０７の処理手順を示すフローチャートである。
【図８Ａ】、
【図８Ｂ】第１の実施形態に係る配線切換部１３１の配線接続状態管理テーブルを示す図である。
【図９】第１の実施形態に係る処理引渡部１３２におけるサイクル数イベント通知時の処理手順を示すフローチャートである。
【図１０】第１の実施形態に係る処理引渡部１３２における命令実行イベント通知時の処理手順を示すフローチャートである。
【図１１】第２の実施形態に係る同期切換部１２９の同期方式切換処理の処理手順を示すフローチャートである。
【図１２】第３の実施形態に係る同期切換部１２９の同期方式切換処理の処理手順を示すフローチャートである。
【符号の説明】
【０１２４】
１０１‥‥論理シミュレータ
１０２‥‥命令セットシミュレータ
１０３‥‥仮想装置シミュレータ
１０４‥‥シミュレータハブ
１０５‥‥同期部
１２７‥‥時間同期部
１２８‥‥イベント同期部
１２９‥‥同期切換部
１０６‥‥配線部
１３０‥‥配線接続部
１３１‥‥配線切換部
１０７‥‥シミュレーション切換部
１３２‥‥処理引渡部
１３３‥‥切換関数管理部
１３４‥‥シミュレーション切換ユーザインタフェース
１０８‥‥シミュレータインタフェース
【図１】
2009252113.tif 000003
【図２】
2009252113.tif 000004
【図３】
2009252113.tif 000005
【図４】
2009252113.tif 000006
【図５】
2009252113.tif 000007
【図６】
2009252113.tif 000008
【図７】
2009252113.tif 000009
【図８Ａ】
2009252113.tif 000010
【図８Ｂ】
2009252113.tif 000011
【図９】
2009252113.tif 000012
【図１０】
2009252113.tif 000013
【図１１】
2009252113.tif 000014
【図１２】
2009252113.tif 000015