説明

情報処理装置、その制御方法及びコンピュータプログラム

【課題】高速なシミュレーション方式と、低速で精度の高いシミュレーション方式との切り換え自由度を向上させ、好適にシミュレーションを実行する情報処理装置を提供する。
【解決手段】本発明は、シミュレーションを実行する情報処理装置で解釈可能なネイティブコードを用いてシミュレーションを実行する第1のシミュレータと、ターゲット計算機で解釈可能な実行命令コードを用いて1命令毎にシミュレーションを実行する第2のシミュレータとを連携して実行する情報処理装置に関する。具体的には、本情報処理装置は、ターゲット計算機のシミュレーションの一部の処理を前記第1のシミュレータと前記第2のシミュレータとの間で切り換えて実行させる。ここで、本情報処理装置は、切換先のシミュレータに応じて、各シミュレータ間の処理を同期させ、各シミュレータ間の情報伝達経路を配線する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ターゲット計算機の実行命令をターゲットシステムとは異なる計算機上でシミュレーション実行する情報処理システム及びその制御方法に関するものである。
【背景技術】
【0002】
従来より、ターゲット計算機の命令をパーソナルコンピュータ等の情報処理装置上でシミュレーション実行するシミュレーション装置が提案されている。以下では、当該シミュレーション装置をCPUシミュレータと称する。
【0003】
例えば、特許文献1には、ターゲット計算機が解釈できる実行命令コードであるターゲットコードで作成されたプログラムをターゲットシステムとは異なる情報処理装置上で実行するCPUシミュレータが提案されている。具体的には、ターゲット計算機のメモリ空間であるターゲットメモリ、ターゲットレジスタ等を情報処理装置上に仮想的に設ける。さらに、ターゲットコードを1命令毎に解釈、実行して、仮想ターゲットメモリ、仮想ターゲットレジスタに対して作用させるプログラムを情報処理装置が実行する。以下、ターゲットコードを1命令毎に解釈、実行するCPUシミュレータを命令セットシミュレータと称する。このような命令セットシミュレータでは、ターゲット計算機の動作を情報処理装置上で正確にシミュレーションできる利点がある一方で、ターゲットコードを1命令毎に解釈するためシミュレーション速度が遅くなる欠点がある。
【0004】
また、特許文献2には、ターゲット計算機の命令を予め情報処理装置が解釈できる実行命令コードであるネイティブコードに変換し、シミュレーションの実行の際には情報処理装置がネイティブコードを実行するCPUシミュレータが提案されている。また、特許文献3には、ターゲット計算機用のプログラムを、1命令単位ではなく高級言語で記述された上位の論理レベルから情報処理装置のネイティブコードを生成し実行するシミュレーション方法が提案されている。以下、ターゲット計算機用のプログラムを情報処理装置のネイティブコードに変換しシミュレーション実行するCPUシミュレータを論理シミュレータと称する。このような論理シミュレータは、命令セットシミュレータと比較して、高速シミュレーションが可能な反面、シミュレーション精度は低下する。
【0005】
これら2種類のCPUシミュレータの長所を生かし、短所を補う方法として特許文献4の方法が提案されている。特許文献4の方法は、ターゲット計算機のプログラム(以下、ターゲットプログラムと称する。)を定型処理部と非定型処理部とに分ける。さらに、定型処理部を命令セットシミュレータによって高速にシミュレーションし、非定型処理部を論理シミュレータによって精度の高いシミュレーションを実行する方法である。
【特許文献1】特開昭62−194549号公報
【特許文献2】特開平06−250874号公報
【特許文献3】特開平06−019743号公報
【特許文献4】特開平10−031595号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、従来技術においては以下に示す問題がある。例えば、特許文献4に記載の方法では、ターゲットプログラムを予め定型処理部と非定型処理部とに分ける必要がある。そのため、シミュレーション実行時に、高精度にシミュレーションが必要な個所と、精度は必要なく高速にシミュレーションを行いたい個所とを変更する必要が生じた場合に、改めて定型処理部及び非定型処理部を再定義する必要がある。具体的には、定型処理部に対応するネイティブコードと、シミュレーション方式を切り換える判断基準となるエントリアドレス情報とを作成しなおす必要がある。したがって、シミュレーションの実行を中断させて上述のような処理を実行することは、シミュレーションの実行効率を低減させることとなる。
【0007】
本発明は、上述の問題を鑑みて成されたものであり、高速なシミュレーション方式と、低速で精度の高いシミュレーション方式との切り換え自由度を向上させ、好適にシミュレーションを実行する情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、例えば、シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置として実現できる。本情報処理装置は、シミュレーションの一部の処理を、情報処理装置で解釈可能なネイティブコードを用いて実行する第1のシミュレータと、ターゲット計算機で解釈可能なターゲットコードを用いて1命令毎にシミュレーションを実行する第2のシミュレータとの間で切り換えて実行させるシミュレーション切換手段と、シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期手段と、シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線手段とを備えることを特徴とする。
【0009】
また、本発明は、例えば、シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置の制御方法として実現できる。制御方法は、シミュレーションの一部の処理を、情報処理装置で解釈可能なネイティブコードを用いて実行する第1のシミュレータと、ターゲット計算機で解釈可能なターゲットコードを用いて1命令毎にシミュレーションを実行する第2のシミュレータとの間で切り換えて実行させるシミュレーション切換ステップと、シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期ステップと、シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線ステップとを実行することを特徴とする。
【発明の効果】
【0010】
本発明は、例えば、高速なシミュレーション方式と、低速で精度の高いシミュレーション方式との切り換え自由度を向上させ、好適にシミュレーションを実行する情報処理装置を提供できる。
【発明を実施するための最良の形態】
【0011】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【0012】
[第1の実施形態]
<情報処理装置の構成>
以下では、図1乃至図10を参照して、第1の実施形態について説明する。本実施形態に係る情報処理装置は、パーソナルコンピュータ、ワークステーション等を含む。まず、図2を参照して、情報処理装置の構成について説明する。図2は、第1の実施形態に係る情報処理装置201のハードウェア構成を示す図である。
【0013】
情報処理装置201は、本体部202、表示装置203、キーボード204、及びマウス205を備える。表示装置203は、本体部202からの指示により画面表示を行う。キーボード204は、情報処理装置201にユーザ(オペレータ)の指示や文字情報を入力する。マウス205は、表示装置203上の任意の位置を指定することにより、その位置に表示されていたアイコン等に応じた指示を入力する。また、本体部202は、中央処理装置206、主記憶装置207及びハードディスク208を備える。
【0014】
ハードディスク208には、シミュレータの各機能を実現するためのプログラム、及び、シミュレーション対象装置に関する情報を含むシミュレーションのための各種データが格納される。本実施形態に係るシミュレーションは、例えば、中央処理装置206がプログラム、各種データを主記憶装置207にロードし、当該プログラムを実行することにより実行される。また、情報処理装置201に対する基本制御は基本プログラムであるオペレーティングシステム(以下、OSと記す)によって行われる。
【0015】
<シミュレータの構成>
次に、図1を参照して、本実施形態におけるシミュレータの構成について説明する。図1は、第1の実施形態に係るシミュレータの機能構成を示す図である。以下で説明する構成は、例えば中央処理装置206によって実現される。また、以下では、一例として、ターゲット計算機である機械装置組み込み型の計算機と、当該計算機の制御対象である機械装置をシミュレーションするシミュレータについて説明する。
【0016】
機器制御シミュレータ111は、ターゲット計算機をシミュレーションする2つのCPUシミュレータとして動作する、第1のシミュレータである論理シミュレータ101と、第2のシミュレータである命令セットシミュレータ102とを備える。さらに、機器制御シミュレータ111は、制御対象の装置をシミュレーションする仮想装置シミュレータ103と、シミュレータハブ(以下、HUBと記す)104とを備える。
【0017】
HUB104は、同期部105、配線部106、CPUシミュレーション切換部107及びシミュレータインタフェース108を備える。同期部105は、時間同期部127、イベント同期部128及び同期切換部129を備える。配線部106は、配線接続部130及び配線切換部131を備える。CPUシミュレーション切換部107は、処理引渡部132、切換関数管理部133及びシミュレーション切換ユーザインタフェース134を備える。
【0018】
論理シミュレータ101、命令セットシミュレータ102及び仮想装置シミュレータ103は、例えば、それぞれがOS上で個別に動作するアプリケーションソフトとして実現されてもよく、それぞれが独立したプロセスとして存在してもよい。ここで、論理シミュレータとは、ターゲット計算機の命令を予め情報処理装置が解釈可能な実行命令コードであるネイティブコードに変換し、シミュレーションの実行の際には情報処理装置がネイティブコードを実行するCPUシミュレータを示す。また、命令セットシミュレータとは、ターゲット計算機が解釈可能な実行命令コードであるターゲットコードで作成されたプログラムをターゲットシステムとは異なる情報処理装置上で実行するCPUシミュレータを示す。具体的には、ターゲット計算機のメモリ空間であるターゲットメモリ、ターゲットレジスタ等を情報処理装置上に仮想的に設ける。さらに、ターゲットコードを1命令毎に解釈、実行して、仮想ターゲットメモリ、仮想ターゲットレジスタに対して作用させるプログラムを情報処理装置が実行する。したがって、命令セットシミュレータは、論理シミュレータと比較して、処理が低速になるが1命令毎に解釈するためターゲット計算機の動作をより正確に実行することができる。本実施形態では、論理シミュレータ101を基本とし、ユーザが指定した処理のみを命令セットシミュレータで行う。これにより、高速で、かつ、精度の高いシミュレーションを実行することができる。
【0019】
本実施形態において、HUB104に接続される各シミュレータは、それぞれがプロセス間通信を介してそれぞれのシミュレーション実行において発生する各種イベントを接続相手のプロセスに通知し、接続相手からの処理通知を受ける。そのため、各シミュレータは、外部と通信するための外部インタフェース123、126を有する。外部インタフェース123、126を通じてHUB104と各シミュレータ間で通信を行い、1つのシミュレーションシステムとして動作する。HUB104と各シミュレータとの通信内容については後述する。
【0020】
次に、各構成要素の機能について説明する。
【0021】
論理シミュレータ101及び命令セットシミュレータ102は、シミュレーション対象となるターゲット計算機の動作を情報処理装置201上でシミュレーションするシミュレータである。以下では、CPUシミュレータである論理シミュレータ101及び命令セットシミュレータ102に共通する機能を説明する。
【0022】
CPUシミュレータは、ターゲット計算機の制御プログラム(以下、ターゲットファームウェアと称する。)に従って、ターゲット計算機の端子に対応して定義された仮想入力端子の情報を読み込み、仮想出力端子を制御する。
【0023】
また、CPUシミュレータは、ターゲット計算機のアドレス空間に対応した仮想アドレス空間を設けている。ここで、仮想アドレス空間とは、ターゲット計算機の管理するアドレス空間上の個々の領域と1対1で対応する領域を情報処理装置201の主記憶装置上に定義したものである。仮想アドレス空間の情報処理装置201上の実アドレス値は、ターゲット計算機の扱うアドレス値とは異なる。したがって、CPUシミュレータは、ターゲットファームウェアによるターゲット計算機のアドレス空間上のアドレス値へのアクセス命令に従って、仮想アドレス空間上の対応する領域にアクセスする。
【0024】
ターゲット計算機のレジスタ類も、アドレス空間上に配置されたレジスタについては、仮想アドレス空間上に対応する領域が設定され、アクセスについても仮想アドレス空間へのアクセスによってシミュレーションされる。ターゲット計算機の内部に設けられる専用レジスタ(アキュムレータ、プログラムカウンタ、スタックポインタ等)については、ターゲットシステム内ではアドレス空間に配置されないが、CPUシミュレータ上では主記憶装置207上に定義される。しかし、上位概念でのシミュレーションを行う論理シミュレータの場合にはシミュレーションされない場合もある。
【0025】
論理シミュレータ101は、制御部121、デバッグ部122及び外部インタフェース123を備え、情報処理装置201のネイティブコードを対象にシミュレーションを行う。制御部121は、論理シミュレータ101におけるシミュレーションの実行を統括的に制御する。論理シミュレータ101用のシミュレーション対象プログラムコードは、論理シミュレータ101用のネイティブコンパイラ109により生成される。ネイティブコンパイラ109は、高級言語で記述されたターゲットソフトウェアソースプログラムを情報処理装置201のネイティブコードにコンパイルする。また、ネイティブコンパイラ109は、論理シミュレータ101によるシミュレーションに必要な制御情報を生成する。ここで制御情報としては、ソースプログラム上の関数、変数のネイティブコード上のアドレス情報、ネイティブコードに対応するソースプログラム上の位置関係、ソースプログラム上の実行命令に対するターゲット計算機における実行サイクル数等がある。
【0026】
論理シミュレータ101によるターゲット計算機の動作シミュレーション方法については公知の技術であるため詳述は省略する。本実施形態に係る論理シミュレータ101は、シミュレーション実行に伴うターゲット計算機における実行サイクル数に相当するシミュレーション上の実行サイクル数を計測する機能を有する。実行サイクル数は、ネイティブコンパイラ109により生成されるソースプログラム上の実行命令に対するターゲット計算機における実行サイクル数情報を使って、ソースプログラム上の1命令の実行サイクル数をトータル実行サイクル数に加算して求められる。
【0027】
また、論理シミュレータ101は、プログラムデバッグのためのデバッグ部122を備え、デバッガ機能としてはブレーク、トレース、仮想メモリのモニタ/書き換え、関数引数のモニタ/書き換え、関数戻り値のモニタ/書き換え等を有している。論理シミュレータ101は、ターゲット計算機のレジスタについてはシミュレーションを行わないため、レジスタやスタック領域を使用するターゲット計算機の関数引数、戻り値の状態を直接的にモニタしたり、書き換えたりすることができない。このため、論理シミュレータ101は、デバッガ機能として関数引数、戻り値を間接的にモニタ/書き換えできる機能を有している。
【0028】
命令セットシミュレータ102は、制御部124、デバッグ部125及び外部インタフェース126を備え、ターゲットコードを対象にシミュレーションを実行する。制御部124は、命令セットシミュレータ102におけるシミュレーションの実行を統括的に制御する。ターゲットコードは、ターゲット計算機用のコンパイラであるターゲットコンパイラ110により生成される。ターゲットコンパイラ110は、高級言語で記述されたターゲットソフトウェアソースプログラムをターゲットコードにコンパイルする。また、ターゲットコンパイラ110は、命令セットシミュレータ102によるシミュレーションに必要な制御情報を生成する。制御情報としては、ソースプログラム上の関数、変数ラベルのターゲットコード上のアドレス情報、ターゲットコードに対応するソースプログラム上の位置関係等がある。なお、命令セットシミュレータ102は、ターゲットコード1命令毎の実行サイクル数情報を基本情報として有している。
【0029】
また、命令セットシミュレータ102は、論理シミュレータ101と同様に、デバッガ機能として、ブレーク、トレース、仮想メモリのモニタ/書き換え、関数引数のモニタ/書き換え、関数戻り値のモニタ/書き換え等を有している。また、命令セットシミュレータ102は、デバッガ機能として仮想レジスタのモニタ/書き換え機能も有している。命令セットシミュレータ102によるターゲット計算機の動作シミュレーション方法については公知の技術であるため詳述は省略する。
【0030】
仮想装置シミュレータ103は、アクチュエータ、センサを含む複数の部品からなる機構モデル、及び、アクチュエータ類のドライバハードウェアを情報処理装置201上で擬似的に動作させるシミュレータである。機構モデルの各要素(以下、機構部品と称する。)は、ユーザにより形状、種類、動作、機構部品間の干渉と連携条件等が定義される。さらに、センサ、アクチュエータについては外部信号定義が行われる。仮想装置シミュレータ103による機械装置のシミュレーション方法は公知の技術であるため詳述は省略する。
【0031】
HUB104は、論理シミュレータ101、命令セットシミュレータ102及び仮想装置シミュレータ103が備える外部インタフェースにより各シミュレータからのイベント発生通知を受け、各シミュレータに対して処理を通知する。各シミュレータの外部インタフェースを通じたやり取りはシミュレータインタフェース108によって制御される。
【0032】
<シミュレータインタフェース>
次に、図3を参照して、シミュレータインタフェース108の詳細な動作について説明する。図3は、第1の実施形態に係るシミュレータインタフェース108による各シミュレータとHUB104とのデータ通信を示す図である。ここで、各シミュレータとは、図1に示す論理シミュレータ101、命令セットシミュレータ102及び仮想装置シミュレータ103を示す。
【0033】
各シミュレータは、シミュレーション実行中に予め定義されたイベントが発生するとプロセス間通信を介してシミュレータインタフェース108にイベントを通知する。このときイベントを通知したシミュレータは、シミュレータインタフェース108からの返答を受信するまでシミュレーション動作を停止する。シミュレータインタフェース108は、イベント通知に応じてHUB104内のイベントに対応したコールバック関数を呼び出す。HUB104内の各機能(同期部105、配線部106、CPUシミュレーション切換部107)の各々がイベント毎に対応した関数をシミュレータインタフェース108に登録しており、シミュレータインタフェース108はイベント毎の登録関数を呼び出す。そして、各コールバック処理の結果、対象シミュレータに対する処理通知が各コールバック関数からシミュレータインタフェース108を介して各シミュレータに通知される。
【0034】
本実施形態では、各シミュレータとHUB104との接続をプロセス間通信を用いて行い、イベントに対するコールバックをシミュレータインタフェース108が実行している。しかし、本発明は、この方式に限定されず、シミュレータが外部インタフェースとしてダイナミックリンクライブラリ(以下、dllと記す。)関数の呼出し方式を有している場合には、HUBをシミュレータのdllとして構成してもよい。これにより、イベントに対するコールバックをシミュレータからの直接呼出方式により実現することもできる。
【0035】
本実施形態のシミュレータにおいて、各シミュレータからHUB104に対して通知されるイベントには、以下に示すものがある。
【0036】
論理シミュレータ101及び命令セットシミュレータ102では、各CPUシミュレータの状態変化(起動、初期化、終了)や、ターゲット計算機の動作シミュレーションにおけるイベントがある。動作シミュレーションにおけるイベントには、メモリアクセス、レジスタアクセス、命令実行、関数コール、関数リターン、割り込み、リセット、サイクル数等がある。また、仮想装置シミュレータ103では、仮想装置シミュレータの状態変化(起動、初期化、終了)や、装置シミュレーションにおけるイベントがある。装置シミュレーションにおけるイベントには、機構の動作完了、センサの状態変化、実行時間等がある。
【0037】
また、HUB104から各シミュレータへ通知される処理には、以下に示すものがある。
【0038】
論理シミュレータ101及び命令セットシミュレータ102に対しては、初期化における各種設定、終了における各種設定、メモリ及びレジスタの値の報知指示、メモリ及びレジスタの値の変更指示、シミュレーション実行指示、シミュレーション実行時間(サイクル数)指定、実行イベント発生条件(実行アドレス、関数)指定/解除、割込み発生指示、リセット指示等がある。仮想装置シミュレータ103に対しては、アクチュエータ動作指示、センサ状態の報知指示、シミュレーション実行指示、イベント発生時間指示等がある。
【0039】
<同期部>
次に、同期部105について説明する。上述のようなインタフェースによりHUB104は、接続される全シミュレータの同期と信号接続を制御し1つのシミュレーションシステムとして動作させる。通常、同期処理は、同期部105の時間同期部127によって一定間隔毎(シミュレーションにおける仮想時間上の一定時間毎)に接続されるシミュレータの同期をとる。具体的には、時間同期部127が各シミュレータの外部インタフェースを通じて各シミュレータに対して同期間隔分のシミュレーション実行を指示する。その後、全シミュレータから実行終了の通知(CPUシミュレータはサイクル数イベント通知、仮想装置シミュレータは実行時間イベント通知)を受けると、各シミュレータに対して、次の1同期間隔分のシミュレーション実行を指示する。このような処理の繰返しにより仮想時間上の同期を実現する。本実施形態における時間同期部127では、HUB104に接続されているアプリケーション(シミュレータ)の内、時間同期対象に指定されているものについて時間同期処理を行う。時間同期対象のデフォルト設定は、論理シミュレータ101と仮想装置シミュレータ103である。
【0040】
本実施形態に係る機器制御シミュレータ111では、CPUシミュレーションに関して、大部分のシミュレーションを論理シミュレーションで実行し、ユーザが指定する関数のみ命令セットシミュレーションで実行する。これにより、高速なCPUシミュレーションを実行しつつ、必要な個所はターゲット計算機に近い動作のシミュレーションを実行するようにしている。
【0041】
上述したように、本実施形態に係るHUB104は、各シミュレータ間での同期機能や接続機能を提供する。しかし、HUB104は、さらに、イベント同期部128、同期切換部129、配線切換部131及びCPUシミュレーション切換部107を備える。これにより、ターゲットソフトウェアの実行シミュレーションを必要に応じて命令セットシミュレーションに切り換える機能が付加される。
【0042】
次に、図4を参照して、イベント同期部128の動作について説明する。イベント同期部128は、時間同期部127による仮想時間上の同期とは別に指定されたイベントによる同期処理を行う。また、イベント同期処理は、命令セットシミュレーション実行時に論理シミュレータ101と命令セットシミュレータ102との間でのみ行われる。具体的には、イベント同期部128は、後述の同期切換部129からイベント同期実行指示と同期条件イベントの指定を受けて論理シミュレータ101と命令セットシミュレータ102との間のイベント同期処理を実行する。
【0043】
図4は、第1の実施形態に係るイベント同期部128の処理手順を示すフローチャートである。イベント同期部128は、後述の同期切換部129からイベント同期実行開始時に呼び出されるとともに、接続先の各シミュレータからの全てのイベント通知に応じてシミュレータインタフェース108によりコールバック関数として呼び出される。
【0044】
まず、ステップS401において、イベント同期部128は、同期切換部129から同期条件の指定を受けて呼び出されると、指定された同期イベントを記憶し、ステップS402乃至S405のCPUシミュレーション実行処理に進む。
【0045】
ステップS402において、イベント同期部128は、時間同期部127に対して、論理シミュレータ101について時間同期待機中であるか否かを問い合わせる。ここで、時間同期待機中でない場合には、S403に進み、論理シミュレータ101にシミュレーション実行を指示してS404に進む。一方、時間同期待機中である場合には、S404に進む。
【0046】
ステップS404において、イベント同期部128は、時間同期部127に対して、命令セットシミュレータについて時間同期待機中であるか否かを問い合わせる。ここで、時間同期待機中でない場合には、S405に進み、命令セットシミュレータ102にシミュレーション実行を指示してS406に進む。一方、時間同期待機中である場合には、S406に進む。
【0047】
このように、何れのCPUシミュレータに対しても、時間同期部127から時間同期待機中の報知がある場合にはシミュレーション実行を指示しない。これは、時間同期待機中の場合に各CPUシミュレータに対してシミュレーション実行指示を出すと時間同期処理ができなくなるためである。
【0048】
次に、ステップS406において、イベント同期部128は、論理シミュレータ101及び命令セットシミュレータ102からのメモリアクセス、又は、関数リターンイベントが発生するまで待機する。実際の処理ではS402乃至S405で一度処理を終了し、S406はシミュレータインタフェース108からの呼出し待ちとなる。
【0049】
イベントが発生すると、ステップS407において、イベント同期部128は、発生イベントを確認し発生イベントがS401で記憶した指定同期イベントであるか否かを判定する。ここで指定同期イベントでなければS413において、イベント同期部128は、イベントを発生させたシミュレータにシミュレーション実行を指示しS406に戻る。S413において実行処理通知の発行先はシミュレータインタフェース108により判別されるため、イベント同期部128は、処理通知先のCPUシミュレータを意識する必要が無い。
【0050】
一方、S407で発生イベントが指定同期イベントである場合には、ステップS408において、イベント同期部128は、発生イベント内容を記憶し、S409で次のイベントが発生するまで待機する。ここも、実際にはS408で一度処理を終了し、S409はシミュレータインタフェース108からの呼出し待ちとなる。
【0051】
イベントが発生すると、S410へ進む。S406でイベント通知を発行したCPUシミュレータはイベント通知状態でシミュレーションを停止しているため、S409で発生するイベント通知はもう一方のCPUシミュレータからのものとなる。したがって、ステップS410において、イベント同期部128は、S409で通知を受けたイベントとS408で記憶したイベントとが同じ種類のものであるかを比較する。S410の結果、2つのイベントが異なると判断された場合には、ステップS414において、イベント同期部128は、イベントを発生したシミュレータにシミュレーション実行を指示しS409に戻る。S414においてもS413と同様に、イベント同期部128は、処理通知先のCPUシミュレータを意識する必要は無い。
【0052】
一方、S410の結果、2つのイベントが同じであると判断された場合には、ステップS411において、イベント同期部128は、同期切換部129に対して、イベント同期発生をイベント種別とともに通知する。続いて、ステップS412において、イベント同期部128は、S411の通知の結果、同期切換部129からイベント同期終了が報知されればイベント同期処理を終了する。一方、イベント同期終了が報知されない場合、S402に戻る。
【0053】
以上の処理を繰返すことにより、論理シミュレータ101と命令セットシミュレータ102における同一イベントでの同期を実現できる。
【0054】
次に、図5を参照して、同期切換部129の動作について説明する。同期切換部129は、後述する処理引渡部132からの命令セットシミュレーション実行開始を受けると、シミュレータ間の同期方式の切換処理を行う。図5は、第1の実施形態に係る同期切換部129の処理手順を示すフローチャートである。同期切換部129は、切換先のシミュレータ(論理シミュレータ101又は命令セットシミュレータ102)に応じて、各シミュレータ間での同期方法(時間同期部127による同期処理又はイベント同期部128による同期処理)を切り換える。
【0055】
本フローチャートは、同期切換部129が処理引渡部132からの命令セットシミュレーションの実行開始通知を受信すると開始される。ステップS501において、同期切換部129は、時間同期部127に論理シミュレータ101を時間同期の対象から除外し、命令セットシミュレータ102を時間同期の対象とする指示を出す。
【0056】
次に、ステップS502において、同期切換部129は、イベント同期部128に関数リターンイベントによる論理シミュレータ101と命令セットシミュレータ102のイベント同期処理の開始を指示する。続いて、ステップS503において、同期切換部129は、イベント同期部128からイベント同期発生が通知されるまで待機する。イベント同期発生の通知を受けると、ステップS504において、同期切換部129は、同期イベントの種別を確認する。ここで、同期イベントが関数リターンでなければS503のイベント同期通知待ちに戻る。ここでは、イベント同期から時間同期に復帰させるための判定を行っている。
【0057】
一方、同期イベントが関数リターンであれば、ステップS505において、同期切換部129は、処理引渡部132に命令セットシミュレーション終了を通知した後に、ステップS506でイベント同期部128にイベント同期処理の終了を指示する。さらに、ステップS507において、同期切換部129は、時間同期部127に論理シミュレータ101を時間同期の対象とし、命令セットシミュレータ102を時間同期の対象から除外する指示を出して同期切換処理を終了する。
【0058】
<配線部>
以下では、図6乃至図8Bを参照して、配線部106について説明する。本実施形態の機器制御シミュレータ111では、論理シミュレータ101と仮想装置シミュレータ103との間、命令セットシミュレータ102と仮想装置シミュレータ103との間に、各々、情報伝達経路となる信号線が配線されている。具体的には、配線部106によってセンサ、アクチュエータ類に関する信号線の配線が行われている。2つのCPUシミュレータと仮想装置シミュレータ103との間に配線される信号線はまったく同じ種類のものである。また、命令セットシミュレータ102と仮想装置シミュレータ103との間で配線されている信号線は、配線切換部131によってシミュレーション動作中に接続状態が接続又は遮断に切り換えられる。
【0059】
さらに、機器制御シミュレータ111では、論理シミュレータ101と命令セットシミュレータ102との間に、配線部106によって仮想メモリ領域、及び、機能レジスタの配線が行われている。仮想メモリ領域で接続されるのは、ターゲットソフトウェアソースプログラム上で常駐の変数として定義されている領域である。また、機能レジスタは、ターゲット計算機の周辺ハードウェア(I/Oポート、割り込み、タイマ等)をコントロールするためのレジスタである。通常、ターゲット計算機のプログラムカウンタ、スタックポインタ、アキュムレータ等の専用レジスタについては論理シミュレーションではシミュレーションされないため接続対象としない。ただし、割込み許可フラグ等の専用レジスタ内でシステム制御に関連するものはシミュレーション対象となる場合があり、この場合には個別に接続定義を行う。仮想メモリ、機能レジスタは定義単位毎に1つの信号線として通常の信号線と同じ配線方法で配線される。
【0060】
ここで、図6を参照して、配線部106による配線接続処理、及び遮断処理について説明する。図6は、第1の実施形態に係る配線接続部130の機能構成を示す図である。配線接続部130は、配線定義された各信号線(以下、特記しない限り「信号線」は「メモリ領域」を含むものとする。)の値をそれぞれの切り口(各シミュレータとの接続部)毎に保持し、必要に応じて接続先に伝達する。
【0061】
配線接続部130は、論理シミュレータ配線部601、命令セットシミュレータ配線部602、仮想装置シミュレータ配線部603、論理シミュレータ信号保持部604、命令セットシミュレータ信号保持部605、仮想装置シミュレータ信号保持部606及び信号伝達管理部607を備える。
【0062】
論理シミュレータ配線部601、命令セットシミュレータ配線部602、及び仮想装置シミュレータ配線部603は、例えば、コールバック関数として実現されてもよい。コールバック関数は、接続先の各シミュレータからのイベント通知に応じてシミュレータインタフェース108から呼び出される。
【0063】
論理シミュレータ101は、メモリリード、レジスタリードの直前にリードアクセス通知を、メモリライト、レジスタライトの直前にライトアクセス通知を発行する。シミュレータインタフェース108はアクセス通知に応じてアクセスアドレス、又は、アクセスレジスタ情報をパラメータとして論理シミュレータ配線部601を呼び出す。論理シミュレータ配線部601は論理シミュレータ101にシミュレータインタフェース108を介して以下の処理通知を発行する。
リードアクセスの場合:アクセス対象の領域に対する値の書き込み。
ライトアクセスの場合:アクセス対象の領域データの報知。
【0064】
リードアクセスの場合に指示する書き込み値は、論理シミュレータ信号保持部604中の対応する領域の値である。また、ライトアクセスの場合に報知されたアクセス領域の値は、論理シミュレータ信号保持部604中の対応する領域に書き込まれる。
【0065】
ここで、ターゲット計算機における入出力信号は全てアドレス空間上に配置されているため、上記メモリ、又は、レジスタへのアクセス処理によって信号入出力のシミュレーションも可能である。
【0066】
命令セットシミュレータ配線部602の処理は、対象が命令セットシミュレータ102、命令セットシミュレータ信号保持部605に代わるだけで、論理シミュレータ配線部601の動作と同様である。したがって、詳細な説明は省略する。
【0067】
以上のような配線処理により、各CPUシミュレータとHUB104との信号のやり取りはターゲットソフトウェアによるアクセス時に、アクセス対象の信号線についてのみ実行される。したがって、仮想メモリ領域を含めた配線を行っても、高速なシミュレーションが可能となる。
【0068】
仮想装置シミュレータ配線部603の動作も、対象を仮想装置シミュレータ103、仮想装置シミュレータ信号保持部606に置き換えれば、論理シミュレータ配線部601の処理と同様である。しかし、仮想装置シミュレータ配線部603がシミュレータインタフェース108から呼び出されるのは、仮想装置シミュレータ103からのセンサ状態変化通知、及び、実行時間通知を受けた場合となる。ここで、実行時間通知とは所定時間(シミュレーション上の仮想時間)のシミュレーション実行を完了した場合の通知を示す。本実施形態の機器制御シミュレータ111においては、時間同期部127から1同期時間分のシミュレーション実行指示を受けて発生するイベントである。仮想装置シミュレータ配線部603は、センサ状態変化通知に対しては対象センサ値の報知を、実行時間通知に対してはHUB104と仮想装置シミュレータ103との接続信号全ての書き込みを通知する。
【0069】
論理シミュレータ信号保持部604は、論理シミュレータ配線部601、及び、信号伝達管理部607からの指示に従い対象信号線の値の報知、書き換えを行う。また、論理シミュレータ信号保持部604は、論理シミュレータ配線部601からの書き換え指示に応じて対象信号線の値の書き換え後に信号伝達管理部607に信号線の値書き換えを報知する。
【0070】
命令セットシミュレータ信号保持部605、仮想装置シミュレータ信号保持部606の処理は、対象が命令セットシミュレータ配線部602、仮想装置シミュレータ配線部603に代わるだけで、論理シミュレータ信号保持部604の動作と同様である。したがって、詳細な説明は省略する。
【0071】
信号伝達管理部607は、論理シミュレータ信号保持部604、命令セットシミュレータ信号保持部605、仮想装置シミュレータ信号保持部606の間で、対応する信号線の値の伝達を管理する。
【0072】
図7は、第1の実施形態に係る信号伝達管理部607の処理手順を示すフローチャートである。まず、ステップS701において、信号伝達管理部607は、何れかの信号保持部から信号線書き換えが報知されるまで待機する。何れかの信号保持部から信号線書き換えが報知されると、ステップS702において、信号伝達管理部607は、配線切換部131に対象信号線についての接続先との接続状態を問い合わせる。
【0073】
次に、ステップS703において、信号伝達管理部607は、問い合わせ結果を判定する。ここで、対象信号線が接続状態である場合にはS704で報知元の信号保持部に対象信号線の値を問い合わせ、S705で対象信号線の接続先の信号保持部に対象信号線の値についてS704で得た信号線の値への変更を指示する。一方、S703で対象信号線が断線状態である場合には処理を終了する。
【0074】
配線切換部131は、CPUシミュレーション切換部107からのCPUシミュレーション情報(論理シミュレーション実行/命令セットシミュレーション実行)に応じて各信号線の配線接続状態を変更する。図8A及び図8Bは、第1の実施形態に係る配線切換部131の配線接続状態管理テーブルを示す図である。図8Aは、CPUシミュレーション切換部107から論理シミュレーション実行が報知された場合の管理テーブルの状態を示す。図8Bは、CPUシミュレーション切換部107から命令セットシミュレーション実行が報知された場合の管理テーブルの状態を示す。
【0075】
図8Aに示すように、論理シミュレーション実行の場合には命令セットシミュレータ102から他の2つのシミュレータへの信号伝達(出力情報)を遮断し、それ以外の信号線は接続とする。一方、図8Bに示すように、命令セットシミュレーション実行の場合には論理シミュレータ101から他の2つのシミュレータへの信号伝達(出力情報)を遮断し、それ以外の信号線は接続とする。
【0076】
配線切換部131は、信号伝達管理部607から配線の接続状態の問い合わせを受けると、配線接続状態管理テーブルに応じた接続状態を報知する。また、配線切換部131は、デフォルトのCPUシミュレーション情報を論理シミュレーション実行とする。即ち、配線接続状態管理テーブルの初期値は図8Aの状態となる。
【0077】
<CPUシミュレーション切換部>
次に、CPUシミュレーション切換部107の動作について説明する。CPUシミュレーション切換部107は、処理引渡部132、切換関数管理部133及びシミュレーション切換ユーザインタフェース134を備える。
【0078】
シミュレーション切換ユーザインタフェース134は、ユーザがシミュレーションの切換条件を設定するためのユーザインタフェースを提供する。例えば、当該ユーザインタフェースは、ユーザから命令セットシミュレーションを実行する関数(切換条件)を指定するために用いられる。このユーザインタフェースについては公知の技術によるため詳述は避けるが、表示装置203に関数名入力画面を表示し、キーボード204、マウス205を使用してユーザから関数名を文字列によって指定するインタフェースを提供する。また、ユーザが指定した関数を削除する場合のために、登録関数リストを表示装置203に表示し、キーボード204、マウス205を使用して削除対象の関数名を指定することによりシミュレーション切換対象の関数から削除するインタフェースを提供する。
【0079】
また、関数登録に関しては、ネイティブコンパイラ109、又は、ターゲットコンパイラ110が関数名リストを出力する機能を持っている場合が想定される。この場合、シミュレーション切換ユーザインタフェース134は、コンパイラから取得した関数名リストを表示装置203上に表示し、キーボード204、マウス205によってユーザに所望の関数を選択させるインタフェースを提供することもできる。
【0080】
切換関数管理部133は、切換条件管理手段として機能し、シミュレーション切換ユーザインタフェース134を介して指定される命令セットシミュレーション対象関数情報(切換条件)を保持する。さらに、切換関数管理部133は、処理引渡部132からの問い合わせに応じて命令セットシミュレーション対象関数情報の更新情報を報知する。
【0081】
処理引渡部132は、シミュレータインタフェース108、及び、イベント同期部128により呼び出されるコールバック関数で構成され、切換条件を監視するとともに、当該切換条件が成立すると各シミュレータの間で処理を引き渡す。シミュレータインタフェース108は、論理シミュレータ101からのサイクル数イベント通知、及び、命令実行イベント通知に応じて、処理引渡部132をコールする。ここで、サイクル数通知とは、所定サイクルのCPUシミュレーション実行を完了した場合の通知を示す。本実施形態の機器制御シミュレータ111においては、時間同期部127による時間同期制御において、論理シミュレータ101が1同期時間分に相当するサイクル数のシミュレーション実行指示を受けて発生するイベントである。また、イベント同期部128はイベント同期条件発生時に処理引渡部132をコールする。
【0082】
また、処理引渡部132は、サイクル数イベント通知による呼び出しを受けた場合、即ち、時間同期部127による1同期時間分の処理の区切りに達した場合、必要に応じてイベント通知登録処理を論理シミュレータ101に対して通知する。これは、シミュレータインタフェース108を介して切換関数管理部133に登録されている関数を実行することにより行われる。
【0083】
図9は、第1の実施形態に係る処理引渡部132におけるサイクル数イベント通知時の処理手順を示すフローチャートである。
【0084】
まず、ステップS901において、処理引渡部132は、切換関数管理部133に命令セットシミュレーション対象関数情報が更新されたか否かを問い合わせ、更新が無い場合にはそのまま終了する。一方、S901で命令セットシミュレーション対象関数情報に更新がある場合には、ステップS902において、処理引渡部132は、切換関数管理部133から更新情報を取得する。そして、ステップS903において、処理引渡部132は、更新内容が追加であるか削除であるかを確認し、追加である場合にはS904で関数実行イベントを登録する。本実施形態の論理シミュレータ101では、関数実行によるイベント通知登録は、実行アドレス指定による命令実行通知イベントの登録によって行う(即ち、関数コールイベントは使わない)。実行アドレス指定は切換関数管理部133に登録されている関数名(ラベルの文字列)により指定することで、論理シミュレータ101で実行アドレスに変換し命令実行通知対象として登録される。S903で更新内容が削除である場合には、S905で関数実行イベントの削除を行う。関数実行イベントの登録と同様に、論理シミュレータ101に対して、関数名(ラベルの文字列)により命令実行イベントの削除を指定する。
【0085】
上述のように、命令実行イベントの登録を受けた論理シミュレータ101は、登録された実行アドレスのシミュレーション実行直前にシミュレーションを中断し、シミュレータインタフェース108に命令実行イベントの通知を行う。論理シミュレータ101は実行命令に対応するラベル(関数名)が存在する場合、ラベルの文字列情報をパラメータの1つとして通知する。シミュレータインタフェース108は、この通知に応じて、上述したように処理引渡部132をコールする。
【0086】
図10は、第1の実施形態に係る処理引渡部132における命令実行イベント通知時の処理手順を示すフローチャートである。
【0087】
命令実行イベントの通知によるコールを受けた場合、ステップS1001において、処理引渡部132は、論理シミュレータ101からラベルの文字列として引き渡された関数名を取得する。続いて、ステップS1002において、処理引渡部132は、命令セットシミュレータ102に対して、関数名に対応する関数アドレスの報知要求を通知して対象の関数に対応するターゲットコード上のアドレス値を取得する。
【0088】
また、ステップS1003において、処理引渡部132は、論理シミュレータ101より関数への引数値を取得する。ここで、上述したように、論理シミュレーションにおいては、専用レジスタのシミュレーションを行わないため、関数への引数の取得や戻り値の設定もターゲットコードの仕様どおりの仮想専用レジスタや仮想スタック領域へのアクセスでは行えない。したがって、論理シミュレータ101は、関数の引数取得、戻り値設定のための外部インタフェースを用意している。関数引数については関数コール時(関数コールイベント発生)から関数からのリターン(関数リターンイベント発生)までの間に引数取得要求通知によって取得可能である。また、関数戻り値については関数からのリターン時(関数リターンイベント発生中)の戻り値設定処理通知によって設定可能になっている。したがって、S1003では論理シミュレータ101に関数引数報知要求を通知することで当該関数への引数を取得する。
【0089】
次に、ステップS1004において、処理引渡部132は、命令セットシミュレータ102の仮想プログラムカウンタの値をS1002で取得した関数アドレスに設定する。続いて、ステップS1005において、処理引渡部132は、命令セットシミュレータ102の仮想スタックポインタの値を適切な値(例えば仮想メモリ領域の最後尾)に設定する。さらに、処理引渡部132は、当該関数への引数を命令セットシミュレータ102の仮想領域(スタック領域、レジスタ等)に設定する。関数への引数引渡し方式は、ターゲット計算機の構成やターゲットコンパイラの仕様に依存する。しかし、当該方式は、ターゲット毎に一意的に決まるため、ターゲット計算機の仕様に応じた引数設定機能をターゲット計算機毎に用意することで各種計算機に対応することができる。
【0090】
ステップS1006において、処理引渡部132は、同期切換部129及び配線切換部131に命令セットシミュレーション実行を通知する。上述したように、同期切換部129は、命令セットシミュレーション実行通知に応じて、論理シミュレータ101と命令セットシミュレータ102との関数リターンイベントによる同期実行処理を行う。さらに、同期切換部129は、論理シミュレータ101を時間同期処理対象から除外し、命令セットシミュレータ102を時間同期対象とする。また、配線切換部131は命令セットシミュレーション実行通知に応じて、配線接続状態を論理シミュレータ101からの信号出力について遮断し、命令セットシミュレータ102からの信号出力を他のシミュレータと接続する。
【0091】
上述したように、論理シミュレーション中においても他の2つのシミュレータから命令セットシミュレータ102への信号線は接続状態となっている。したがって、切換時点で命令セットシミュレータ信号保持部605の信号線値は論理シミュレータ信号保持部604と完全に一致している。そして、S1004乃至S1006の設定により命令セットシミュレータ102の関数実行アドレス、スタック領域、関数引数の設定が完了する。これにより、機器制御シミュレータ111におけるCPUシミュレーションを命令セットシミュレーションに移行させることができる。
【0092】
命令セットシミュレーション開始後、ステップS1008において、処理引渡部132は、同期切換部129からの命令セットシミュレーション終了通知を受信するまで待機する。S1008で命令セットシミュレーションの終了通知を受けると、ステップS1009において、処理引渡部132は、命令セットシミュレータ102より関数戻り値を取得する。なお、関数戻り値についても、引数と同様にターゲット計算機の仕様に応じて所定の仮想領域から取得することが可能である。続いて、ステップS1010において、処理引渡部132は、配線切換部131に論理シミュレーション実行を通知し、S1011で論理シミュレータ101の戻り値設定処理通知によりS1009で取得した戻り値を設定して処理を終了する。
【0093】
上述したように、処理引渡部132によるS1011の処理の後、同期切換部129は自動的に同期処理を論理シミュレーション状態に切換える。
【0094】
上述の処理では、命令セットシミュレータ102による指定関数のシミュレーション実行中も論理シミュレータ101によるシミュレーションは継続される。この間の論理シミュレータ101によるシミュレーションは他の2つのシミュレータとの仮想時間同期がとられていない。さらに、論理シミュレータ101への入力は、CPUシミュレータによって実行されるターゲットソフトウェアの処理が反映されたものではない。したがって、論理シミュレータ101上のターゲットソフトウェアの処理は、正しく実行されないことが予想される。しかし、処理により関数からのリターン時における仮想メモリ領域、機能レジスタ領域、関数戻り値、入出力信号値は全て命令セットシミュレータ102によるシミュレーション結果が反映される。よって、指定関数からリターン後における論理シミュレータ101上のターゲットソフトウェアが正しく動作することとなる。
【0095】
また、上述の処理は、割込み処理においても使用可能である。即ち、割込み関数のみを命令セットシミュレーションしたい場合には、切換関数として割込み関数名を登録しておく。論理シミュレータで所定の割込みシミュレーションが発生し、割込み関数がコールされた場合にも関数コールイベントから所定の処理により命令セットシミュレータにおける割込み関数シミュレーションに移行する。
【0096】
以上説明したように、本実施形態に係る情報処理装置は、CPUシミュレーションにおいて論理シミュレーションを基本とし、必要に応じて命令セットシミュレーションに切り換える。さらに、シミュレーションの整合性を維持するために、切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させ、異なる情報伝達方法で各シミュレータ間の信号線を配線する。これにより、本情報処理装置は、オペレータの要望に合わせて、高速なシミュレーションと低速で精度の高いシミュレーションを切り換えて実行することができる。また、切換先のシミュレータに応じて、同期方法及び情報伝達方法を切り換えるため、シミュレーションの実行中にシミュレータを切り換えることもできる。
【0097】
なお、本発明は上記実施形態に限らず様々な変形が可能である。例えば、本情報処理装置は、切換先のシミュレータに応じて、各シミュレータごとに時間同期での同期処理とイベント同期での同期処理とを切り換えてもよい。これにより、シミュレーションの整合性を維持した状態で、イベントの発生をトリガにシミュレータを切り換えることができる。例えば、プログラムでは、通常、1つの機能としてまとまった処理(規模に関わらず)を1つの関数として定義している。したがって、本情報処理装置は、ある関数が呼び出された場合に、当該関数の実行を命令セットシミュレータで行うことができ、効率的なシミュレーションを実現することができる。
【0098】
また、本情報処理装置は、切換先のシミュレータに応じて、各シミュレータごとに信号線の接続状態を接続又は遮断に切り換えてもよい。これにより、データの整合性を維持した状態でシミュレータを切り換えることができる。
【0099】
[第2の実施形態]
次に、図11を参照して、第2の実施形態について説明する。第1の実施形態では、命令セットシミュレーションの実行中において論理シミュレータ101上のターゲットソフトウェアの処理が正しく実行されない可能性がある。例えば、対象となる関数において外部信号の変化待ちのような処理がある場合、関数からのリターンに至らず関数リターンによるイベント同期待ちでシミュレーションが止まってしまう虞がある。
【0100】
具体的には、ターゲットソフトウェアの関数の中で仮想装置シミュレータ103からのセンサ入力の変化を待機する処理において発生する場合がある。具体的には、同センサの変化がターゲットソフトウェアの信号出力に応じて発生する場合、命令セットシミュレーションにおいては、命令セットシミュレータ102からの信号出力があるまでセンサの変化は発生しない。しかし、論理シミュレータ101と命令セットシミュレータ102は、関数リターンまで非同期に処理が行われる。したがって、論理シミュレータ101上でのターゲットソフトウェアの信号待ち処理が命令セットシミュレータ102上でのターゲットソフトウェアからの信号出力の結果、仮想装置シミュレータ103からのセンサ信号が変化した後に実行される場合がある。この場合、論理シミュレータ101上でのターゲットソフトウェアの信号待ち処理は信号変化を捉えることができない。
【0101】
そこで、本実施形態の機器制御シミュレータ111においては、イベント同期における同期条件にメモリリードイベントの発生による同期条件を付加することで、上述のような問題にも対処できるようにしている。
【0102】
本実施形態に係る機器制御シミュレータ111の構成は第1の実施形態とほぼ同じであり、異なるのは同期切換部129の処理のみである。図11は、第2の実施形態に係る同期切換部129の同期方式切換処理の処理手順を示すフローチャートである。以下では、図5のフローチャートと異なる処理についてのみ説明する。即ち、ステップS1101、S1103乃至S1107の処理は、ステップS501、S503乃至S507の処理と同様であるため説明を省略する。
【0103】
S502では同期イベントとして関数リターンのみを条件としているのを、ステップS1102では関数リターンとともにメモリリードを同期イベントに加えている。これにより、命令セットシミュレーション対象関数内で外部信号の変化待ち処理があった場合でも、外部信号読み取り処理で命令セットシミュレータ102と同期が取れるため、外部信号変化を正しく捉えることができる。
【0104】
[第3の実施形態]
次に、図12を参照して、第3の実施形態について説明する。第1及び第2の実施形態では、命令セットシミュレーションにおけるイベント同期終了条件を1回の関数リターンイベントのみで判断している。このため、命令セットシミュレーションが可能な関数は最下層の関数に限られてしまう。即ち、対象となる関数内でさらに関数コールを行っている場合には、その関数からのリターンイベントをイベント同期終了条件として捉えてしまうため、命令セットシミュレーションから論理シミュレーションへの切換が正しく実行できない場合がある。
【0105】
そこで、本実施形態の機器制御シミュレータ111においては、同期切換部129におけるイベント同期終了条件に関数コールと関数リターンの対応確認処理を加える。具体的には、本機器制御シミュレータ111では、関数コールイベントの発生回数を記憶するカウンタを設け、関数リターンイベントの発生ごとにカウンタの値を1値だけ減算し、当該カウンタの値が0値になった場合にイベント同期終了条件が成立したと判定する。これにより、関数内で関数コールが行われているケースであっても対応することができる。
【0106】
本実施形態に係る機器制御シミュレータ111の構成は第1の実施形態とほぼ同じであり、異なるのは同期切換部129の処理のみである。図12は、第3の実施形態に係る同期切換部129の同期方式切換処理の処理手順を示すフローチャートである。以下では、図5のフローチャートと異なる処理についてのみ説明する。即ち、ステップS1201乃至S1204、S1207乃至1209の処理は、ステップS501乃至S504、S505乃至S507の処理と同様であるため説明を省略する。また、S1202で指定する同期イベントとして本実施形態においては関数コールを加えている。さらに、関数コールイベントと関数リターンイベントの数を一致させるため、関数コールカウンタを設けている。
【0107】
ステップS1201において、同期切換部129は、関数コールカウンタを1で初期化する。その後S1201及びS1202の処理を実行した後にS1203でイベント同期が発生した場合、ステップS1204において、同期切換部129は、同期イベントの種別を確認する。ここで、同期イベントが関数リターンでなかった場合、ステップS1210において、同期切換部129は、同期イベントが関数コールイベントか否かを判定する。ここで関数コールイベントの場合には、ステップS1211において、同期切換部129は、関数コールカウンタを1カウントアップさせ、S1203に戻る。
【0108】
一方、S1204で同期イベントが関数リターンであると判定すると、ステップS1205において、同期切換部129は、関数コールカウンタを1カウントダウンさせる。さらに、ステップS1206において、同期切換部129は、同カウンタが0であるか否かを判定し、0である場合のみS1207以降のイベント同期終了処理に進む。一方、S1206で同カウンタが1以上であった場合にはS1203に戻る。
【0109】
これにより、命令セットシミュレーション対象関数内でさらに関数コールを行っている場合であっても、命令セットシミュレーションから論理シミュレーションへの切換を正しく実行することができる。
【0110】
[第4の実施形態]
次に、第4の実施形態について説明する。本実施形態は、論理シミュレーション実行中におけるクロック同期事象のシミュレーションを可能にしたものである。例えば、論理シミュレーション実行中にタイマ割り込みを発生させ、割り込みハンドラの処理を命令セットシミュレーションによってシミュレーションする場合には、タイマ割込みイベントと同期してCPUシミュレーション方式を切換える必要がある。
【0111】
そこで、本実施形態の機器制御シミュレータ111では、イベント同期における同期条件に割込みイベントによる同期条件を付加する。これにより、ターゲットソフトウェアが設定しているタイマ設定に同期させてCPUシミュレーション方式の切換えを行うようにしている。
【0112】
本実施形態における機器制御シミュレータ111の構成は第1乃至第3の実施形態とほぼ同じであり、異なるのは同期切換部129のコールバック条件に割込みイベントを加えている点である。
【0113】
上述したように、論理シミュレータ101はシミュレーション実行に伴うターゲット計算機における実行サイクル数に相当するシミュレーション上の実行サイクル数を計測する機能を有しており、これによってタイマ割込みシミュレーションを可能にしている。
本実施形態によれば、時間同期部127の同期間隔設定をターゲットソフトウェアのタイマカウント値、又は、その約数に設定する。さらに、所定の時間同期タイミングで時間同期部127が論理シミュレータ101に割込み処理通知を発行することによってタイマ割り込みを発生させる。ターゲットソフトウェアのタイマ設定はメモリ、又は、レジスタ値の読み込みによって可能である。
【0114】
割り込み処理通知によって割り込みが発生すると、論理シミュレータ101から割込みイベントが通知される。上述したように、割り込みイベントによって同期切換部129がコールバックされるため、割込みイベントに対応する割込み関数の実行を第1の実施形態と同様に命令セットシミュレータ102で実行させる。これにより、命令セットシミュレーション対象関数内で外部信号の変化待ち処理があった場合でも、外部信号読み取り処理で命令セットシミュレータ102と同期が取れるため、外部信号の変化を正しく捉えることができる。
【0115】
[他の実施形態]
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。なお、この場合のプログラムとは、実施形態において図に示したフローチャートに対応したプログラムである。
【0116】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【0117】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
【0118】
プログラムを供給するための記録媒体としては、以下に示す媒体がある。例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などである。
【0119】
プログラムの供給方法としては、以下に示す方法も可能である。すなわち、クライアントコンピュータのブラウザからインターネットのホームページに接続し、そこから本発明のコンピュータプログラムそのもの(又は圧縮され自動インストール機能を含むファイル)をハードディスク等の記録媒体にダウンロードする。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
【0120】
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせることも可能である。すなわち該ユーザは、その鍵情報を使用することによって暗号化されたプログラムを実行し、コンピュータにインストールさせることができる。
【0121】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。さらに、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【0122】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、実行されることによっても、前述した実施形態の機能が実現される。すなわち、該プログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行うことが可能である。
【図面の簡単な説明】
【0123】
【図1】第1の実施形態に係るシミュレータの機能構成を示す図である。
【図2】第1の実施形態に係る情報処理装置201のハードウェア構成を示す図である。
【図3】第1の実施形態に係るシミュレータインタフェース108による各シミュレータとHUB104とのデータ通信を示す図である。
【図4】第1の実施形態に係るイベント同期部128の処理手順を示すフローチャートである。
【図5】第1の実施形態に係る同期切換部129の処理手順を示すフローチャートである。
【図6】第1の実施形態に係る配線接続部130の機能構成を示す図である。
【図7】第1の実施形態に係る信号伝達管理部607の処理手順を示すフローチャートである。
【図8A】、
【図8B】第1の実施形態に係る配線切換部131の配線接続状態管理テーブルを示す図である。
【図9】第1の実施形態に係る処理引渡部132におけるサイクル数イベント通知時の処理手順を示すフローチャートである。
【図10】第1の実施形態に係る処理引渡部132における命令実行イベント通知時の処理手順を示すフローチャートである。
【図11】第2の実施形態に係る同期切換部129の同期方式切換処理の処理手順を示すフローチャートである。
【図12】第3の実施形態に係る同期切換部129の同期方式切換処理の処理手順を示すフローチャートである。
【符号の説明】
【0124】
101‥‥論理シミュレータ
102‥‥命令セットシミュレータ
103‥‥仮想装置シミュレータ
104‥‥シミュレータハブ
105‥‥同期部
127‥‥時間同期部
128‥‥イベント同期部
129‥‥同期切換部
106‥‥配線部
130‥‥配線接続部
131‥‥配線切換部
107‥‥シミュレーション切換部
132‥‥処理引渡部
133‥‥切換関数管理部
134‥‥シミュレーション切換ユーザインタフェース
108‥‥シミュレータインタフェース

【特許請求の範囲】
【請求項1】
シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置であって、
前記シミュレーションの一部の処理を、前記情報処理装置で解釈可能なネイティブコードを用いて実行する第1のシミュレータと、前記ターゲット計算機で解釈可能なターゲットコードを用いて1命令毎にシミュレーションを実行する第2のシミュレータとの間で切り換えて実行させるシミュレーション切換手段と、
前記シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期手段と、
前記シミュレーション切換手段によって切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線手段と
を備えることを特徴とする情報処理装置。
【請求項2】
前記同期手段は、
シミュレーション上の仮想時間における一定間隔毎に各シミュレータを同期させる時間同期手段と、
各シミュレータから発生するイベントに応じて当該シミュレータを同期させるイベント同期手段と、
前記切換先のシミュレータに応じて、前記時間同期手段での同期処理と前記イベント同期手段での同期処理とを切り換える同期切換手段と
を備えることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記同期切換手段は、
前記切換先のシミュレータが前記第1のシミュレータである場合に、前記第1のシミュレータを他のシミュレータと前記時間同期手段によって同期させ、
前記切換先のシミュレータが前記第2のシミュレータである場合に、前記第2のシミュレータを、前記イベント同期手段によって前記第1のシミュレータと同期させるとともに、前記時間同期手段によって前記第1のシミュレータ以外の全てのシミュレータと同期させることを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記配線手段は、
各シミュレーション間の情報伝達を行う信号線を接続する配線接続手段と、
前記切換先のシミュレータに応じて信号線の接続又は遮断を行う配線切換手段と
を備えることを特徴とする請求項1に記載の情報処理装置。
【請求項5】
前記配線切換手段は、
前記切換先のシミュレータが前記第1のシミュレータである場合に、前記第2のシミュレータからの出力情報を遮断し、
前記切換先のシミュレータが前記第2のシミュレータである場合に、前記第1のシミュレータからの出力情報を遮断することを特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記シミュレーション切換手段は、
前記情報処理装置のオペレータがシミュレーションの切換条件を設定するためのユーザインタフェースと、
前記ユーザインタフェースによって設定された前記シミュレーションの切換条件を管理する切換条件管理手段と、
前記切換条件の情報に従ってシミュレータの切換条件を監視するとともに、該切換条件が成立すると、前記ターゲット計算機のシミュレーションを前記第1のシミュレータと前記第2のシミュレータとの間で切り換える処理引渡手段と
を備えることを特徴とする請求項1に記載の情報処理装置。
【請求項7】
前記シミュレーションの切換条件は、指定関数の実行であり、
前記処理引渡手段は、
前記第1のシミュレータにおける関数コールイベントの発生により、シミュレーションの実行を前記第1のシミュレータから前記第2のシミュレータに移行し、
前記第2のシミュレータからの関数リターンイベントの発生により、シミュレーションの実行を前記第2のシミュレータから前記第1のシミュレータに移行することを特徴とする請求項6に記載の情報処理装置。
【請求項8】
前記処理引渡手段は、
前記第1のシミュレータから前記第2のシミュレータへの処理引渡しに際して、前記第1のシミュレータから関数名、関数への引数値を取得し、前記第2のシミュレータから前記関数名を元に関数アドレスを取得し、前記第2のシミュレータの仮想プログラムカウンタに前記関数アドレスを設定し、前記第2のシミュレータの仮想レジスタ又は仮想メモリ領域に前記関数への引数値をターゲット計算機の仕様に従い設定し、
前記第2のシミュレータから前記第1のシミュレータへの処理引渡しに際して、前記第2のシミュレータからの仮想レジスタ又は仮想メモリ領域から関数の戻り値をターゲット計算機の仕様に従い取得し、前記第1のシミュレータに関数の戻り値を設定することを特徴とする請求項6に記載の情報処理装置。
【請求項9】
前記同期切換手段は、
前記時間同期手段から前記イベント同期手段による同期処理に切り換える際の条件として、関数コールイベントの発生を含み、
前記時間同期手段による同期処理に復帰させる際の条件として、関数リターンイベントの発生を含むことを特徴とする請求項2に記載の情報処理装置。
【請求項10】
前記同期切換手段は、
前記時間同期手段から前記イベント同期手段による同期処理に切り換える際の条件として、メモリリードを行うためのイベントの発生をさらに含むことを特徴とする請求項9に記載の情報処理装置。
【請求項11】
前記同期切換手段は、
前記関数コールイベントの発生回数を記憶するカウンタを備え、
前記関数リターンイベントの発生ごとに前記カウンタの値を1値だけ減算し、該カウンタの値が0値になった場合に前記時間同期手段による同期処理に復帰させることを特徴とする請求項9に記載の情報処理装置。
【請求項12】
前記同期切換手段は、
前記時間同期手段から前記イベント同期手段による同期処理に切り換える際の条件として、割り込み処理の発生をさらに含むことを特徴とする請求項9に記載の情報処理装置。
【請求項13】
シミュレーションの対象装置となるターゲット計算機のシミュレーションを複数のシミュレータを連携させて実行する情報処理装置の制御方法であって、
前記シミュレーションの一部の処理を、前記情報処理装置で解釈可能なネイティブコードを用いて実行する第1のシミュレータと、前記ターゲット計算機で解釈可能なターゲットコードを用いて1命令毎にシミュレーションを実行する第2のシミュレータとの間で切り換えて実行させるシミュレーション切換ステップと、
前記シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる同期方法で各シミュレータ間の処理を同期させる同期ステップと、
前記シミュレーション切換ステップにおいて切り換えられる切換先のシミュレータに応じて、異なる情報伝達方法で各シミュレータ間の情報伝達経路となる信号線を配線する配線ステップと
を実行することを特徴とする情報処理装置の制御方法。
【請求項14】
請求項13に記載の制御方法をコンピュータに実行させるためのコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2009−252113(P2009−252113A)
【公開日】平成21年10月29日(2009.10.29)
【国際特許分類】
【出願番号】特願2008−101819(P2008−101819)
【出願日】平成20年4月9日(2008.4.9)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】