(57)【要約】      （修正有）【課題】ＣＰＵシミュレータに対して発生する各イベントに好適に対応するとともに、不要な処理による処理効率の低下を防ぎつつ、必要な精度で模擬時刻の同期を行う仕組みを提供する。【解決手段】ＣＰＵシミュレータ１０１は、検証対象のターゲットコードを実行するターゲットＣＰＵの動作を模擬する。装置シミュレータ１０３は、ターゲットＣＰＵの制御対象装置の動作を模擬する。シミュレータ接続部１０２は、ＣＰＵシミュレータの通知に従って装置シミュレータの模擬動作を管理するとともに、タイマシミュレータ１１１から発生するタイマイベントの時刻を判定し、判定したタイマイベントが発生する時刻までの模擬動作を装置シミュレータに指示し、模擬動作の終了、又は、模擬動作が終了する前に装置シミュレータ発生した外部割込みを、ＣＰＵシミュレータに通知し、ＣＰＵシミュレータと、装置シミュレータとの模擬動作を同期させる。【選択図】図１
2015133083.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
検証対象のターゲットコードを実行するターゲットＣＰＵの動作を模擬するＣＰＵシミュレータと、
前記ターゲットＣＰＵの制御対象装置の動作を模擬する装置シミュレータと、
前記ＣＰＵシミュレータの通知に従って前記装置シミュレータの模擬動作を管理するとともに、前記ＣＰＵシミュレータと、前記装置シミュレータとの模擬動作を同期させるシミュレータ接続部と
を備え、
前記シミュレータ接続部は、
前記ＣＰＵシミュレータに設けられたタイマシミュレータから発生するタイマイベントの時刻を判定する判定手段と、
前記判定手段によって判定したタイマイベントが発生する時刻までの模擬動作を前記装置シミュレータに指示する指示手段と、
前記装置シミュレータからの応答に従って、前記指示手段によって指示された模擬動作の終了、又は、前記指示手段によって指示された模擬動作が終了する前に前記装置シミュレータにおいて発生した外部割込みを、前記ＣＰＵシミュレータに通知する通知手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記通知手段は、前記指示手段によって指示された模擬動作が終了する前に前記装置シミュレータにおいて発生した外部割込みについて、対応する信号変化の情報及び現在時刻の情報を前記ＣＰＵシミュレータに通知することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記装置シミュレータは、所定の単位時間毎の模擬動作を実行し、該所定の単位時間毎の模擬動作を、前記指示手段によって指示された模擬動作を終了するまで繰り返すか、又は、前記外部割込みが発生するまで繰り返すことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記ＣＰＵシミュレータは、
前記通知手段からの通知に従って外部割込み処理を実行し、実行結果を前記シミュレータ接続部を介して前記装置シミュレータへ通知し、
前記装置シミュレータは、前記指示手段によって指示された模擬動作を再開することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記ＣＰＵシミュレータは、
前記タイマイベントの発生を判定するための時刻を保持する基準タイマを備え、
前記シミュレータ接続部は、
前記タイマシミュレータの設定から、前記ＣＰＵシミュレータに発生する各タイマイベントの時刻を示すタイマイベント管理テーブルと、
前記装置シミュレータの模擬動作が終了したときの前記装置シミュレータの第１の時刻が、前記タイマイベント管理テーブルの各タイマイベントの最先の第２の時刻より前である場合には、前記第１の時刻を前記基準タイマに設定し、前記第１の時刻が、前記第２の時刻と等しいか又は前記第２の時刻より後である場合には、前記第２の時刻を前記基準タイマに設定して、前記タイマイベント管理テーブルから前記第２の時刻を消去するＣＰＵタイマ管理手段と、をさらに備え、
前記指示手段は、前記ＣＰＵシミュレータが繰り返し実行する第１の命令を実行した際に、前記タイマイベント管理テーブルの各タイマイベントの最先の時刻までの模擬動作を前記装置シミュレータに指示することを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項６】
前記ＣＰＵタイマ管理手段は、前記ＣＰＵシミュレータが繰り返し実行する前記第１の命令とは異なる第２の命令に対応する時刻を、前記タイマイベント管理テーブルにタイマイベントの時刻として登録することを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記指示手段は、
前記判定手段によって判定したタイマイベントが発生する時刻までの模擬動作の代わりに、所定の単位時間ごとの模擬動作を前記装置シミュレータに指示することを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項８】
前記ＣＰＵシミュレータは、
前記ターゲットコードを実行するターゲット命令実行手段と、
割込み処理を実行する割り込み制御手段と、を備え、
前記ターゲット命令実行手段は、前記ターゲットコードを前記情報処理装置の実行形式に変換して実行するホストのネイティブシミュレータであり、
前記割込み制御手段は、
前記外部割込みの要求発生時に前記ＣＰＵシミュレータに対する前記情報処理装置のソフトウェア割込みによって割込み模擬処理を実行する第１の割込みシミュレーション手段と、
前記ターゲットコードによるハードウェアのアクセスイベントに同期して割込み模擬処理を実行する第２の割込みシミュレーション手段と、
前記外部割込みの要求発生時の前記ターゲットコードによるターゲットＣＰＵの制御状態に応じて、前記第１及び第２の割込みシミュレーション手段を選択的に実行する選択手段とを備えることを特徴とする請求項１乃至７の何れか１項に記載の情報処理装置。
【請求項９】
前記第２の割込みシミュレーション手段は、コールバック関数を用いて割込み模擬処理を実行し、前記選択手段によって選択されると、前記コールバック関数の発生通知を受けた後に前記割込み模擬処理を実行することを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記選択手段は、前記外部割込みの要求発生時の前記ターゲットコードによるターゲットＣＰＵの制御状態が、直ちに前記割込み模擬処理を実行可能な場合には前記第１の割込みシミュレーション手段を選択し、前記割込み模擬処理を保留すべき状態の場合には前記第２の割込みシミュレーション手段を選択することを特徴とする請求項８又は９に記載の情報処理装置。
【請求項１１】
前記ＣＰＵシミュレータは、前記第１の割込みシミュレーション手段によるターゲットＣＰＵの前記割込み模擬処理において、割込み要求の発生からターゲットコードの割込みハンドラの実行を開始するまでの間、他の処理における模擬時間を進行させないことを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
前記第１の割込みシミュレーション手段は、前記選択手段によって選択されると、前記割込み模擬処理を実行する前に、前記ターゲットＣＰＵの制御状態を確認し、直ちに前記割込み模擬処理を実行可能な場合には該割込み模擬処理を実行し、前記割込み模擬処理を保留すべき状態の場合には前記割込み模擬処理を実行せず、前記選択手段による選択を再び行わせることを特徴とする請求項８乃至１１の何れか１項に記載の情報処理装置。
【請求項１３】
前記第１の割込みシミュレーション手段は、
前記割込み模擬処理の複数の要求を管理する管理手段をさらに備え、
前記選択手段によって選択されると、前記割込み模擬処理を実行する前に、前記管理手段によって管理されている要求が有れば該割込み模擬処理を実行し、前記管理手段によって管理されている要求が無ければ該割込み模擬処理を実行しないことを特徴とする請求項８乃至１２の何れか１項に記載の情報処理装置。
【請求項１４】
前記管理手段は、
前記第１の割込みシミュレーション手段が前記割込み模擬処理の実行中に、前記選択手段によってさらに選択されると、当該割込み模擬処理の要求を保持することを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
前記第２の割込みシミュレーション手段は、
前記割込み模擬処理を実行する実行手段と、
前記割込み模擬処理の複数の要求を管理するリストを保持する保持手段とを備え、
前記保持手段は、
前記実行手段が前記割込み模擬処理を実行すると、対応する要求を前記リストから削除することを特徴とする請求項８乃至１４の何れか１項に記載の情報処理装置。
【請求項１６】
前記ＣＰＵシミュレータは、前記第２の割込みシミュレーション手段が前記割込み模擬処理を実行している間は、前記第１の割込みシミュレーション手段による割込み模擬処理の実行を禁止することを特徴とする請求項１５に記載の情報処理装置。
【請求項１７】
前記装置シミュレータは、画像形成装置の記録材の搬送をシミュレーショするシミュレータであり、
前記信号変化の情報は、所定のセンサによる、搬送される記録材の有無を示す信号の変化の情報であることを特徴とする請求項２乃至１６の何れか１項に記載の情報処理装置。
【請求項１８】
検証対象のターゲットコードを実行するターゲットＣＰＵの動作を模擬するＣＰＵシミュレータと、
前記ターゲットＣＰＵの制御対象装置の動作を模擬する装置シミュレータと、
前記ＣＰＵシミュレータの通知に従って前記装置シミュレータの模擬動作を管理するとともに、前記ＣＰＵシミュレータと、前記装置シミュレータとの模擬動作を同期させるシミュレータ接続部と
を備える情報処理装置の制御方法であって、
前記シミュレータ接続部において、
判定手段が、前記ＣＰＵシミュレータに設けられたタイマシミュレータから発生するタイマイベントの時刻を判定する判定工程と、
指示手段が、前記判定工程において判定したタイマイベントが発生する時刻までの模擬動作を前記装置シミュレータに指示する指示工程と、
通知手段が、前記装置シミュレータからの応答に従って、前記指示手段によって指示された模擬動作の終了、又は、前記指示手段によって指示された模擬動作が終了する前に前記装置シミュレータにおいて発生した外部割込みを、前記ＣＰＵシミュレータに通知する通知工程と
を実行することを特徴とする情報処理装置の制御方法。
【請求項１９】
検証対象のターゲットコードを実行するターゲットＣＰＵの動作を模擬するＣＰＵシミュレータと、
前記ターゲットＣＰＵの制御対象装置の動作を模擬する装置シミュレータと、
前記ＣＰＵシミュレータの通知に従って前記装置シミュレータの模擬動作を管理するとともに、前記ＣＰＵシミュレータと、前記装置シミュレータとの模擬動作を同期させるシミュレータ接続部と
を備える情報処理装置の制御方法をコンピュータでシミュレーションするためのプログラムであって、
前記シミュレータ接続部において、
判定手段が、前記ＣＰＵシミュレータに設けられたタイマシミュレータから発生するタイマイベントの時刻を判定する判定工程と、
指示手段が、前記判定工程において判定したタイマイベントが発生する時刻までの模擬動作を前記装置シミュレータに指示する指示工程と、
通知手段が、前記装置シミュレータからの応答に従って、前記指示手段によって指示された模擬動作の終了、又は、前記指示手段によって指示された模擬動作が終了する前に前記装置シミュレータにおいて発生した外部割込みを、前記ＣＰＵシミュレータに通知する通知工程と
を実行することを特徴とするプログラム。
【請求項２０】
請求項１９に記載のプログラムを記憶したコンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーションを実行する情報処理装置、その制御方法、プログラム、及び記憶媒体に関するものである。
【背景技術】
【０００２】
特許文献１には、装置に組み込まれたＣＰＵ（ターゲットＣＰＵ）で動作する組込みソフトウェア（ターゲットコード）の検証のため、コンピュータでシミュレーションを行うことが提案されている。以下では、シミュレーションを行うコンピュータをホストＰＣと称する。具体的には、ターゲットＣＰＵの動作を模擬するＣＰＵシミュレータと、ターゲットＣＰＵの制御対象装置の動作を模擬する装置シミュレータをホストＰＣ上で実現し、ＣＰＵシミュレータでターゲットコードを動作させるというものである。
【０００３】
このようなシステムにおいて、各シミュレータが制御対象装置やターゲットＣＰＵの所定時間分の模擬動作を行うのに実際に要した時間は、実際の時間とは異なる。以下では、各シミュレータの模擬動作に応じて進行する時間を模擬時間と称し、模擬対象の装置における時刻を模擬時刻と称する。つまり、例えば、移動速度が時速１０キロメートルである物体の動作をシミュレーションするものとする。この場合、シミュレータは、物体の１０キロメートル分の移動をシミュレーションすると、そのシミュレーションに要した実際の時間に拘わらず、模擬時間を１時間だけ進行させる。ＣＰＵシミュレータと装置シミュレータのように複数のシミュレータを有するシステムにおいては、異なるシミュレータ毎に模擬時間の進行度合いが異なる。つまり、模擬時間でＡミリ秒分の模擬動作を行うために実際に必要な時間が、ＣＰＵシミュレータと装置シミュレータでは異なる。よって、各シミュレータ間の模擬時刻の進行をあるタイミングで同期させる同期処理が必要となる。
【０００４】
また、このような装置制御システムをシミュレーションする場合、タイミング精度の高い処理を実現するために、ターゲットＣＰＵの割込み機能を使用した割込み処理が使用されるケースがある。このため、ホストＰＣ上で実行されるＣＰＵシミュレータにおいて、ターゲットシステムの中で発生する事象をトリガとする割込み処理をシミュレーションする必要がある。
【０００５】
このため特許文献１では、模擬時間軸での所定時間を同期単位時間として、各シミュレータに同期単位時間分の模擬動作を順次実行させることにより同期処理を行っている。特許文献２には、ＣＰＵシミュレータとして、ターゲットコードをホストＰＣの実行形式に変換して実行するホストＰＣネイティブ型シミュレータ（ネイティブシミュレータ）を用いる場合におけるＣＰＵシミュレータと装置シミュレータの連携が提案されている。特許文献２では、ネイティブシミュレータに模擬時間の概念を設けるために、ターゲットコードのソースプログラムを基本ブロックに分割し、基本ブロック毎に模擬時間の進行処理を設けている。そして、特許文献２のような構成においは、基本ブロック毎に設定される時間単位でＣＰＵシミュレータと装置シミュレータの模擬時間同期が行われる。また、特許文献３では、各シミュレータを中継するシミュレーションエンジン部を設け、シミュレーションエンジン部が、ターゲットＣＰＵの制御対象装置で発生するイベントに基づき模擬動作を行わせて模擬時間の同期を行っている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１７２１２８号公報
【特許文献２】特許第３９５１９２５号
【特許文献３】特開２００７−２３３６７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記従来技術には以下に記載する問題がある。シミュレーションを行うためには、各シミュレータ間で送受される各種信号等によって制御される動作を模擬する必要がある。しかしながら、同期単位時間や基本ブロックによる同期処理を行う場合、これら信号等の伝達のタイミングは、同期単位時間又は基本ブロック毎に設けられる時間の範囲でばらつくことになる。このことは、特に、高精度のタイミング制御を行う割込み処理を使用したターゲットコードの検証において、大きな問題となる。特に、特許文献２の対象とするネイティブシミュレータにおいては、ターゲットコードはホストＰＣの実行形式で実行されるため、ターゲットＣＰＵの割込み機能をそのまま組み込むことはできない。このため、前記のような基本ブロックごとに割込み要求の発生を確認し、割込み処理に実行を移すような方式となり、本来のターゲットシステムでの割込み発生タイミングを再現することが困難である。その一方で、信号等の伝達が必要なく、各シミュレータが独立して動作できる場合においても同期処理が行われることになる。つまり、あるシミュレータが他のシミュレータと模擬時刻を合わせるために、処理待ちを行わなければならない状態が発生し、処理効率が低下している。
【０００８】
また、特許文献３では、制御対象装置でのイベントをシミュレーションエンジン部が求める構成になっているが、シミュレーションエンジン部で予測不可能なイベントには対応できない。また、各シミュレータが、イベントに対応する模擬動作のみを実行するため、イベントと非同期に進行する模擬動作には対応できない。すなわち、ターゲットコードにおいて制御対象装置の動作によって非同期に発生する外部割込みのシミュレーションに対応できない。
【０００９】
本発明は、上述の問題に鑑みて成されたものであり、ＣＰＵシミュレータに対して発生する各イベントに好適に対応するとともに、不要な処理による処理効率の低下を防ぎつつ、必要な精度で模擬時刻の同期を行う仕組みを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、情報処理装置であって、検証対象のターゲットコードを実行するターゲットＣＰＵの動作を模擬するＣＰＵシミュレータと、前記ターゲットＣＰＵの制御対象装置の動作を模擬する装置シミュレータと、前記ＣＰＵシミュレータの通知に従って前記装置シミュレータの模擬動作を管理するとともに、前記ＣＰＵシミュレータと、前記装置シミュレータとの模擬動作を同期させるシミュレータ接続部とを備え、前記シミュレータ接続部は、前記ＣＰＵシミュレータに設けられたタイマシミュレータから発生するタイマイベントの時刻を判定する判定手段と、前記判定手段によって判定したタイマイベントが発生する時刻までの模擬動作を前記装置シミュレータに指示する指示手段と、前記装置シミュレータからの応答に従って、前記指示手段によって指示された模擬動作の終了、又は、前記指示手段によって指示された模擬動作が終了する前に前記装置シミュレータにおいて発生した外部割込みを、前記ＣＰＵシミュレータに通知する通知手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明は、ＣＰＵシミュレータに対して発生する各イベントに好適に対応するとともに、不要な処理による処理効率の低下を防ぎつつ、必要な精度で模擬時刻の同期を行う仕組みを提供できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態における情報処理装置上で実現されるシミュレータの構成図。
【図２】第１の実施形態における情報処理装置の実行環境であるホストＰＣのブロック図。
【図３】第１の実施形態における情報処理装置のシミュレーション対象装置となり得る画像形成装置の断面図。
【図４】第１の実施形態における装置シミュレータの模擬動作処理のフローチャート。
【図５】第１の実施形態におけるタイマイベント管理テーブルを示す図。
【図６】第１の実施形態における装置シミュレータ管理部での処理のフローチャート。
【図７】例示的な配線定義情報を示す図。
【図８】第１の実施形態における情報処理装置のシミュレーション対象となる画像形成装置の給紙搬送制御機能の説明図。
【図９】第１の実施形態における情報処理装置のシミュレーション対象となる画像形成装置の給紙搬送制御機能の説明図。
【図１０】第１の実施形態におけるタイマ構成を示す図。
【図１１】第１の実施形態における情報処理装置の動作を示すシーケンス図。
【図１２】第１の実施形態における情報処理装置の動作を示すシーケンス図。
【図１３】第１の実施形態における情報処理装置の動作を示すシーケンス図。
【図１４】第２の実施形態における実行管理部の処理を示すフローチャートである。
【図１５】第３の実施形態における情報処理装置の構成図。
【図１６】第３の実施形態におけるタイマイベント管理テーブルを示す図。
【図１７】第４の実施形態における情報処理装置の構成図。
【図１８】第４の実施形態における割込みシミュレーション実行管理部の処理のフローチャート。
【図１９】第４の実施形態における情報処理装置の動作を示すシーケンス図。
【図２０】第５の実施形態における割込みシミュレーション実行管理部の処理のフローチャート。
【図２１】第５の実施形態における情報処理装置の動作を示すシーケンス図。
【図２２】第６の実施形態における割込みシミュレーション実行管理部の処理のフローチャート。
【図２３】第６の実施形態における情報処理装置の動作を示すシーケンス図。
【図２４】第７の実施形態における情報処理装置の構成図。
【図２５】第７の実施形態における割込みシミュレーション部１の処理のフローチャート。
【図２６】第７の実施形態における割込み処理選択部の処理のフローチャート。
【図２７】第７の実施形態における情報処理装置の動作を示すシーケンス図。
【図２８】第７の実施形態における情報処理装置の動作を示すシーケンス図。
【図２９】第７の実施形態における情報処理装置の動作を示すシーケンス図。
【図３０】第７の実施形態における情報処理装置の動作を示すシーケンス図。
【発明を実施するための形態】
【００１３】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１４】
＜第１の実施形態＞
＜情報処理装置の構成＞
本実施形態における情報処理装置は、装置に組み込まれたターゲットＣＰＵで動作するプログラムであるターゲットコードを検証するものである。なお、情報処理装置は、パーソナルコンピュータ、ワークステーション等（以下、ホストＰＣと記す。）で実行されるプログラムや、当該プログラムを記憶した記憶媒体としても実現されうる。
【００１５】
まず、図２を参照して、ホストＰＣのハードウェア構成について説明する。図２に示すホストＰＣ２００のＣＰＵ２０１は、バス２１０を介して、ＲＯＭ２０２、ＲＡＭ２０３、入力インタフェース２０４、出力インタフェース２０６、及び外部記憶装置インタフェース２０８と接続されている。ＣＰＵ２０１は、ＲＯＭ２０２や外部記憶装置２０９に記憶されたプログラムを、ＲＡＭ２０３に読み出して実行する。また、ＣＰＵ２０１は、入力インタフェース２０４、外部記憶装置インタフェース２０８経由で受け取る外部入力に対する情報処理を行い、結果を出力インタフェース２０６、外部記憶装置インタフェース２０８経由で出力する。入力インタフェース２０４は、キーボード、マウス等の入力装置２０５を介してユーザからの入力を受け付ける。出力インタフェース２０６は、ＬＣＤや、プリンタ、プロッタ等の出力装置２０７に対しデータの表示や出力を行う。外部記憶装置インタフェース２０８は、ハードディスクやＣＤ−ＲＯＭ等の外部記憶装置２０９に対するデータの入出力を行う。
【００１６】
ＣＰＵ２０１は、外部記憶装置２０９に保存される設定データ２０９ｂ内のデータを使用して、処理プログラム２０９ａを実行することで、本実施形態による情報処理装置として機能する。検証対象のプログラムであるターゲットコード２０９ｃも外部記憶装置２０９に保存される。さらに、外部記憶装置２０９は、ＣＰＵ２０１で動作する基本ソフトウェアであるオペレーティングシステム（以下、ホストＯＳと記す。）を保存している。処理プログラム２０９ａは、ホストＯＳ上で動作する。
【００１７】
＜シミュレータ構成＞
続いて、図１を参照して、本実施形態における情報処理装置上で実現されるシミュレータの構成について説明する。図１において、ＣＰＵシミュレータ１０１は、それぞれ、制御対象装置に組み込まれたターゲットＣＰＵの動作を模擬するものである。また、装置シミュレータ１０３は、ターゲットＣＰＵが制御する制御対象装置の動作を模擬するものである。情報処理装置は、さらに、各シミュレータ間を接続し、各シミュレータ間の動作を協調させるシミュレータ接続部１０２を備えている。なお、ＣＰＵシミュレータ１０１のＣＰＵコアシミュレータ１０４は、ターゲットＣＰＵのコア機能を模擬するものであり、ＣＰＵ周辺回路シミュレータ１０５は、ターゲットＣＰＵの周辺回路を模擬するものである。
【００１８】
ＣＰＵシミュレータ１０１は、ＣＰＵコアシミュレータ１０４、ＣＰＵ周辺回路シミュレータ１０５、基準タイマ１０６、及びインタフェース部１０７を備える。ＣＰＵコアシミュレータ１０４は、ターゲット命令実行部１０８及び割込み制御部１０９を備える。ターゲット命令実行部１０８は、ターゲットコードの実行を模擬するものであり、ターゲットコード２０９ｃを解釈して、所定の演算処理や、ＣＰＵ周辺回路シミュレータ１０５へのアクセスを行う。例えば、ターゲット命令実行部１０８は、制御対象装置への出力信号の状態をＩ／Ｏシミュレータ１１２に通知する。また、ターゲット命令実行部１０８は、装置シミュレータ１０３が模擬する制御対象装置の例えばセンサ出力の状態等をＩ／Ｏシミュレータ１１２から取得する。さらに、ターゲット命令実行部１０８は、タイマイベントを発生させる必要が有る場合、タイマシミュレータ１１１に必要な通知を行う。例えば、制御対象装置の所定のセンサ出力の状態が変化したことに応じて所定の時間後に出力信号を変化させなければならない場合、この所定の時間後のタイマイベントをタイマシミュレータ１１１に通知する。タイマイベントの通知は、ＣＰＵ周辺回路内タイマモジュールのレジスタへのアクセス内容の通知である。タイマシミュレータ１１１は、レジスタへの設定内容をタイマモジュールのハードウェア仕様に基づいて解析することにより、タイマ割込み、ポート出力等の所定時間経過後に実行すべきタイマイベントの内容とイベントタイミングを認識する。
【００１９】
割込み制御部１０９は、ＣＰＵ周辺回路シミュレータ１０５からの割込み要求を受けて、ターゲットＣＰＵの割込み処理を模擬する。すなわち、割込み制御部１０９は、ＣＰＵ周辺回路シミュレータ１０５から要求を受けた割込み番号に応じてターゲットコード上の割込みベクタを参照する。そして、ターゲット命令実行部１０８によるターゲットコード上の命令参照位置を、所定の割込み処理の位置に移行させる。また、割込み制御部１０９は、必要に応じて割込み禁止設定への対応、割込み優先度設定への対応、レジスタバンクの切り換え等、ターゲットＣＰＵの割込み動作仕様に準じた処理を行う。
【００２０】
続いて、ＣＰＵ周辺回路シミュレータ１０５について説明する。ＣＰＵ周辺回路シミュレータ１０５は、タイマ、入出力ポート、アナログデジタル変換器、シリアル通信機能といったＣＰＵ周辺回路の動作を模擬するものである。本実施形態においては、ＣＰＵ周辺回路シミュレータ１０５は、タイマ部のタイマ機能を模擬するタイマシミュレータ１１１、及び入出力ポートの模擬動作を行うＩ／Ｏシミュレータ１１２を備える。タイマシミュレータ１１１は、ターゲットＣＰＵの各タイマユニットの設定に応じた個々のタイマの動作を模擬する。さらに、タイマシミュレータ１１１は、各タイマユニットに対する割込み発生条件を監視し、割込み発生条件が成立した場合、割り込要求を、ＣＰＵコアシミュレータ１０４に通知する。なお、タイマシミュレータ１１１の模擬動作における時間進行は基準タイマ１０６の値に従う。
【００２１】
基準タイマ１０６は、タイマシミュレータ１１１をはじめとするＣＰＵ周辺回路シミュレータ１０５における時間進行の基準となるタイマである。なお、基準タイマ１０６の値は、シミュレータ接続部１０２からの設定のみによって値が更新される。なお、インタフェース部１０７は、シミュレータ接続部１０２との各種信号の送受のためのインタフェース機能である。
【００２２】
続いて、装置シミュレータ１０３の説明を行う。なお、本実施形態において、装置シミュレータ１０３は、画像形成装置を模擬するものとする。まず、模擬対象の画像形成装置３０１の概略について、図３を用いて説明する。
【００２３】
カセット３０２に収容されている記録材（シート材）は、ピックアップローラ３０３によりピックアップされ、給紙ローラ３０４により搬送路に送り出される。給紙ローラ３０４の搬送路下流側には、記録材の有無を検出する給紙センサ３０５が設けられている。給紙センサ３０５の下流には、搬送ローラ３０６が配置され、さらにその下流にはレジストローラ３０７が配置されている。レジストローラ３０７は、搬送される記録材の斜行を矯正するものである。レジストローラ３０７の下流には、画像形成前の記録材の位置を確定するため、レジストセンサ３０８が設けられている。レジストセンサ３０８の下流には、レーザスキャナ部３１０からのレーザ光により感光ドラム上にトナー像を形成する画像形成部３０９が配置されている。また、画像形成部３０９の感光ドラムは、通過する記録材にトナー像を転写する。画像形成部３０９の下流には定着器３１１が配置されており、定着器３１１の下流には複数の排紙搬送ローラ３１２が配置されており、その下流に排紙トレイ３１６が配置されている。
【００２４】
装置シミュレータ１０３は、ＣＰＵシミュレータ１０１が出力する仮想信号、つまり、模擬上の信号に応じて用紙搬送、画像形成の状況を解析し、表示部に表示する。また、装置シミュレータ１０３は、ＣＰＵシミュレータ１０１に、解析した状況を通知する仮想信号を出力する。なお、装置シミュレータ１０３とＣＰＵシミュレータ１０１の仮想信号の交換は、シミュレータ接続部１０２の仮想信号伝達部１１８が行う。
【００２５】
装置シミュレータ１０３のシミュレーション実行部１２０は、シミュレータ接続部１０２から、時間指定と共にシミュレーションの実行指示を受けると、指定された時間分の模擬動作を実行する。そして、指定された時間の模擬が終了すると、シミュレータ接続部１０２に対して、模擬の終了と、その時点の模擬時刻を通知する。また、シミュレーション実行部１２０は、指定された時間の到達前に仮想信号の変化があった場合、その時点でシミュレーションを終了する。そして、終了時点の模擬時刻、変化があった信号の種別及びその値の情報と共にシミュレーション終了をシミュレータ接続部１０２に通知する。その後、シミュレーション実行部１２０は、シミュレータ接続部１０２からシミュレーションの実行指示を受けると、前回の模擬動作が終了した時点における模擬時刻から模擬動作を開始する。
【００２６】
シミュレーション実行部１２０による模擬は、模擬時間軸において、単位時間毎の画像形成装置３０１の動作状態の解析を繰り返すことで行われる。すなわち、シミュレーション実行部１２０は、画像形成装置３０１のある時点の状態から１単位時間後の状態を解析し、その結果を図示しない表示部に画面表示し、ＣＰＵシミュレータへの仮想信号に反映させ、模擬時刻を１単位時間進行させる。シミュレーション実行部１２０は、この単位時間毎の解析処理を指定された時間分だけ実行することで、画像形成装置３０１の動作を模擬する。なお、インタフェース部１２１は、シミュレータ接続部１０２との各種信号の送受のためのインタフェース機能である。
【００２７】
ここで、図４を参照して、シミュレーション実行部１２０の模擬処理の詳細について説明する。模擬処理は、シミュレータ接続部１０２からの実行指示により開始する。Ｓ１において、シミュレーション実行部１２０は、シミュレータ接続部１０２からの実行指示に含まれている時間を、保持する現在時刻に加えて終了時刻を設定する。Ｓ２において、シミュレーション実行部１２０は、現在時刻と終了時刻とを比較する。現在時刻が終了時刻と同じか、終了時刻より後の時刻であれば、シミュレーション実行部１２０は、Ｓ７において、シミュレーション実行部１２０は、現在時刻と共に模擬動作の終了をシミュレータ接続部１０２に通知する。Ｓ２において、現在時刻が終了時刻に達していなければ、シミュレーション実行部１２０は、Ｓ３において、１単位時間後の画像形成装置３０１の状態を解析し、図示しない表示装置への出力画像を更新すると共に、仮想信号値の変化を設定する。解析終了後、シミュレーション実行部１２０は、Ｓ４において、現在時刻を１単位時間だけ進める。その後、Ｓ５において、シミュレーション実行部１２０は、仮想信号に変化があったかどうかを判定する。仮想信号に変化がなければ、シミュレーション実行部１２０は、Ｓ２に戻って処理を繰り返す。一方、Ｓ５において、仮想信号に変化があると、シミュレーション実行部１２０は、Ｓ６において、模擬動作の終了を、現在時刻、変化した信号種別及びその値と共にシミュレータ接続部１０２に通知する。
【００２８】
図１の説明に戻り、シミュレータ接続部１０２について説明する。以下に説明するように、シミュレータ接続部１０２は、装置シミュレータ１０３における模擬動作を管理し、模擬動作の指示を行う指示部として機能する。ＣＰＵタイマ管理部１１７は、タイマイベント管理テーブル１１９の維持、つまり、生成及び更新を行う。タイマイベント管理テーブル１１９とは、ＣＰＵシミュレータ１０１の模擬動作における確定したタイマイベントの発生タイミングを発生順に保存したものであり、その概要を図５に示す。なお、タイマイベントとは、ＣＰＵ周辺回路によって実行される特定のタイミング（時刻）に対応した処理である。例えば、タイマユニットによるタイマ割込み、パルスジェネレータによる指定されたタイミングにおける信号出力、複数チャネルのアナログデジタル変換器の一巡の変換処理終了後の割込み等である。
【００２９】
なお、タイマイベントの発生有無、及び、その時刻については、ＣＰＵシミュレータ１０１のタイマシミュレータ１１１へのアクセス内容により判断できる。ＣＰＵタイマ管理部１１７は、ＣＰＵシミュレータ１０１に対してタイマイベントが発生する場合、そのタイマイベントをタイマイベント管理テーブル１１９に登録する。なお、ＣＰＵタイマ管理部１１７は、新たなタイマイベントの時刻と、既に登録されているタイマイベントの時刻を比較しタイマイベント管理テーブル１１９への登録イベントが発生時刻順に並ぶように登録する。
【００３０】
また、ＣＰＵタイマ管理部１１７は、装置シミュレータ１０３が模擬動作の終了を通知した場合、その通知に含まれる時刻を取得する。そして、ＣＰＵタイマ管理部１１７は、取得した時刻（第１の時刻）と、タイマイベント管理テーブル１１９の先頭、つまり、最先に発生するタイマイベントの時刻（第２の時刻）とを比較する。取得した時刻が、先頭のタイマイベントの時刻より早い場合、ＣＰＵタイマ管理部１１７は、取得した時刻を、基準タイマ１０６に設定する。それ以外の場合、つまり、取得した時刻が、先頭のタイマイベントの時刻以後の時刻である場合、先頭のタイマイベントの時刻を基準タイマ１０６に設定し、先頭のイベントを消去する。このとき、２番目以降のタイマイベントがあれば順次繰り上げる。ＣＰＵタイマ管理部１１７によって基準タイマ１０６の値が更新されると、タイマシミュレータ１１１は、基準タイマ１０６の変化に応じた模擬動作を行う。
【００３１】
実行管理部１１６は、タイマイベント管理テーブル１１９に応じて、装置シミュレータ１０３の模擬動作を管理する。図６は、実行管理部１１６の処理を示すフローチャートである。なお、実行管理部１１６は、ＣＰＵシミュレータ１０１からの命令実行イベントの通知をトリガに処理を開始する。ＣＰＵシミュレータ１０１は、この命令実行イベント（第１の命令）を適当な間隔で繰り返し通知する。なお、命令実行イベントの間隔は一定である必要はない。本実施形態においては、後述するように、ウォッチドックタイマリセット命令を命令実行イベントとして使用する。
【００３２】
処理が開始されると、実行管理部１１６は、Ｓ１１でタイマイベント管理テーブル１１９の先頭のタイマイベントの時刻（以下、対象時刻と記す。）と、装置シミュレータ１０３のその時点の時刻（以下、装置時刻と記す。）を比較する。対象時刻が装置時刻以下、つまり、同じか早い場合、実行管理部１１６は、Ｓ１９において、装置時刻と共に、装置シミュレータの模擬処終了をＣＰＵタイマ管理部１１７に通知して処理を終了する。
【００３３】
一方、Ｓ１１で対象時刻が装置時刻よりも大きい場合、実行管理部１１６は、Ｓ１２において、現在の装置時刻と対象時刻との差から装置シミュレータの模擬動作の時間を求める。そして、実行管理部１１６は、Ｓ１３で装置シミュレータ１０３に求めた時間分の模擬動作の実行を指示し、Ｓ１４において、装置シミュレータ１０３からの終了通知を待つ。
【００３４】
実行管理部１１６は、装置シミュレータ１０３から終了通知を受けると、Ｓ１５において、装置シミュレータ１０３の時刻を通知された時刻に更新する。さらに、実行管理部１１６は、Ｓ１６において、装置シミュレータ１０３の出力信号変化の有無を確認する。Ｓ１６で出力信号の変化がない場合、Ｓ１９に進む。一方、Ｓ１６で出力信号の変化がある場合、実行管理部１１６は、Ｓ１７で仮想信号伝達部１１８に発生した信号種別及びその値を通知し、Ｓ１８で仮想信号伝達部１１８の応答を待つ。実行管理部１１６は、Ｓ１８において、仮想信号伝達部１１８からの応答を受けた後にＳ１９に進む。実行管理部１１６は、Ｓ１９において、ＣＰＵタイマ管理部１１７に装置シミュレータ１０３の時刻と共に、装置シミュレータ１０３の模擬処理の終了を通知して処理を終了する。
【００３５】
仮想信号伝達部１１８は、ＣＰＵシミュレータ１０１と装置シミュレータ１０３間の仮想信号の接続を行う。つまり、装置シミュレータ１０３に出力する仮想信号をＩ／Ｏシミュレータ１１２のレジスタから取得して装置シミュレータ１０３に出力する。同様に、装置シミュレータ１０３が出力する仮想信号をＩ／Ｏシミュレータ１１２のレジスタに設定する。仮想信号伝達部１１８が伝達すべき仮想信号は、配線定義情報として予め定められている。図７は例示的な配線定義情報である。仮想信号名で特定される仮想信号について、データサイズ、信号種別、及び初期値が定義されている。なお、信号種別としては、例えば、バイナリ（Ｂ）、デジタル多値（Ｄ）、アナログ（Ａ）等が用いられる。さらに、各仮想信号について、Ｉ／Ｏシミュレータ１１２でのアドレス、ビット位置情報と、入力であるか出力であるかが定義されている。同様に、各仮想信号について、装置シミュレータ１０３での種別及びその識別子（ＩＤ）と、入力であるか出力であるかが定義されている。
【００３６】
＜画像形成装置における搬送制御＞
続いて、情報処理装置が模擬対象とする画像形成装置３０１におけるカセット３０２からレジストセンサ３０８までの記録材の搬送（以下、給紙搬送と記す。）制御について説明する。まず、図８及び図９を用いて、画像形成装置３０１の給紙搬送制御に関する制御機能を説明する。図８は、ターゲットＣＰＵ側のＯＳと、各タスクと、各ＣＰＵ周辺回路の関係を示す。また、図９は、ターゲットＣＰＵ側の各タスクと、画像形成装置３０１の給紙搬送に係る機構との関係を示す。なお、図９において、太破線は駆動力の伝達関係を示している。
【００３７】
図９において、メインモータ８０２は、レジストローラ３０７や、搬送経路においてその下流にある図示しない各要素の駆動源である。メインモータ８０２の駆動力は、レジストローラクラッチ８０４を介してレジストローラ３０７へ伝達される。給紙モータ８０３は、ピックアップローラ３０３、給紙ローラ３０４、給紙センサ３０５、搬送ローラ３０６の駆動源である。給紙モータ８０３の駆動力は、搬送ローラ３０６へは直接伝達され、給紙ローラ３０４へは給紙クラッチ８０５を介して伝達される。また、給紙ローラ３０４に伝達された給紙モータ８０３の回転力は、ベルト８１０を介してピックアップローラ３０３に伝達される。
【００３８】
ピックアップソレノイド８０６は、ピックアップローラ３０３をカセット３０２上に積載された用紙の表面と接離させるためのピックアップ機構を駆動するものである。ピックアップ機構は、ピックアップレバー８０７、ピックアップロッド８０８、ばね８０９から構成されている。ピックアップソレノイド８０６が非通電状態のときは、ばね８０９の力によりピックアップロッド８０８が上方に引っ張られ、ピックアップローラ３０３は用紙と離間する。ピックアップソレノイド８０６が通電状態になると、ピックアップレバー８０７を介してピックアップロッド８０８が下方に引っ張られ、ピックアップローラ３０３が用紙の最上面に接する。
【００３９】
従って、給紙モータ８０３が回転状態で、給紙クラッチ８０５が連結状態の時に、ピックアップソレノイド８０６を作動させることにより、カセット３０２から、ピックアップローラ３０３によって給紙ローラ３０４まで用紙が繰り出される。この用紙は、レジストローラ３０７方向に向かって搬送される。
【００４０】
画像形成装置３０１の制御は、画像形成装置３０１に搭載されたターゲットＣＰＵによって行われる。ターゲットＣＰＵの給紙搬送制御に関連する機能として、画像形成制御タスク、搬送停止処理、給紙搬送制御タスク、給紙モータ停止処理、システムタイマ生成処理がある。また、給紙搬送制御に関連するもではないが、ターゲットＣＰＵは、ウォッチドッグタイマ（ＷＤＴ）・クリア処理を実行する。
【００４１】
画像形成制御タスクは、画像形成装置３０１への画像形成指示に応じて画像形成を行うものである。メインモータ８０２は、画像形成部や定着器の駆動源となっているため、画像形成制御タスクは、メインモータ８０２を画像形成開始時に起動し、画像形成終了時に停止する。また、画像形成制御タスクは、１ページの画像形成処理毎に給紙搬送制御タスクに画像形成ジョブ発生を通知する。
【００４２】
給紙搬送制御タスクは、画像形成制御タスクからの画像形成ジョブに応じて、先行紙との紙間をとりながら１枚の用紙に対する給紙搬送制御を行う。給紙搬送制御タスクは、給紙モータ８０３、給紙クラッチ８０５、ピックアップソレノイド８０６を制御してカセット３０２から用紙を送り出す。その後、給紙搬送制御タスクは、給紙センサ３０５で用紙先端が検知された時点でピックアップソレノイドを停止しピックアップローラ３０３を用紙表面から離間させる。その後、給紙搬送制御タスクは、所定の先行紙との紙間調整処理を行いつつレジストセンサ３０８までの用紙搬送を制御し、搬送停止処理を介してレジストセンサ３０８による用紙先端検知によって用紙搬送を停止し、給紙搬送処理を完了する。
【００４３】
搬送停止処理は、レジストセンサ３０８による用紙先端検知に応じて給紙搬送を停止する機能で、外部割込み生成機能に対する割込み設定機能と、外部割込み生成機能からの割込み要求に応じて実行される割込み処理とで構成される。給紙搬送制御タスクは、給紙開始後の所定タイミングにおいて搬送停止処理に対して、処理実行許可通知を出す。これに応じて、搬送停止処理は外部割込み生成機能に対してレジストセンサ３０８の信号入力を外部入力とし、レジストセンサ３０８の信号の紙無しレベルから紙有りレベルへの変化をトリガとする外部割込みを有効とする設定を行う。給紙搬送中の用紙先端がレジストセンサ３０８に到達し、レジストセンサ３０８の信号が紙無しレベルから紙有りレベルに変化すると、外部割込み生成機能は、搬送停止処理の指定に基づき割込み要求を発生させる。この割込み要求に応じて、搬送停止処理の割込み処理が起動される。搬送停止処理の割込み処理では、クラッチ８０４の連結解除と共に給紙モータ停止処理を起動する。
【００４４】
給紙モータ停止処理は、レジストローラクラッチ８０４の連結解除から所定時間経過後に給紙モータを停止する処理を行う機能である。具体的には、給紙モータ停止処理は、搬送停止処理から呼び出され、タイマＡに対する割込み設定を行う機能と、タイマＡからの割込み要求に応じて実行される割込み処理とで構成される。給紙モータ停止処理は、搬送停止処理から起動されるとタイマＡに対して所定時間経過後に割込みを発生させる設定を行う。そして、タイマＡによる設定時間後の割込み要求に対応する割込み処理において、給紙モータ８０３の停止処理を行った後に、給紙搬送制御タスク８１３に停止処理終了を通知する。
【００４５】
給紙搬送制御タスクは、停止処理終了通知を所定時間以内に受けた場合、正常に給紙搬送が完了したと判断し、画像形成制御タスクに給紙搬送終了を通知する。一方、給紙搬送制御タスクは、所定時間経過までに停止処理終了通知がない場合、ジャム発生と判断し、不図示の状態管理タスクに給紙遅延ジャム発生を通知する。
【００４６】
画像形成制御タスクは、給紙搬送制御タスクからの給紙搬送終了通知を受けた後、所定の画像形成準備が完了した時点で給紙モータを駆動し、クラッチ８０４を連結して用紙に画像を形成するための搬送を開始する。画像形成制御タスクは、搬送開始から所定タイミング後に外部装置へＴＯＰ信号を出力する。外部装置はＴＯＰ信号に同期して画像データを出力するため、ＴＯＰ信号の出力タイミングに対する用紙の搬送位置の精度が用紙上への画像形成位置精度に影響する。従って、搬送開始時の用紙先端位置、すなわち、給紙搬送終了時の用紙の一時停止位置の精度が重要になる。給紙搬送終了時の一時停止処理をレジストセンサ３０８の信号に応じた外部割込みで処理するのはこのためである。
【００４７】
また、搬送を開始するため画像形成制御タスクによって給紙モータ８０３が駆動される際に、クラッチ８０５の連結よりも給紙モータ８０３の立ち上がりが遅いと搬送ローラ３０６による用紙の引っ張りが発生し、用紙搬送にずれが生じる恐れがある。給紙搬送終了時にクラッチ８０４の連結解除から時間差をつけて給紙モータ８０３の停止を行うのは、これにより搬送ローラ３０６とレジストローラ３０７の間に用紙のたるみを持たせて、搬送開始時に引っ張りが生じないようにするためである。
【００４８】
＜タイマ制御＞
システムタイマ生成処理は、ターゲットコードの制御において各種タイミングで制御を行うための基準となるシステムタイマを生成する機能で、機能の大部分はタイマＢからの割込み要求によって実行されるタイマ割込み処理として構成される。システムタイマ生成処理はタイマＢに対してシステムタイマの単位時間の間隔でタイマ割込みが発生するように設定し、タイマ割込みの発生毎にシステムタイマをカウントアップする。なお、以下の説明において、システムタイマの単位時間を１０ミリ秒に設定するものとする。
【００４９】
タスクタイマ管理部は、タスク毎に割り当てられるタイマの管理を行い、タスクからの指示に応じてタイマのカウント開始、停止、クリア、タスクタイマイベントの発生通知、タイマカウント値の通知などを行う。タスクタイマ管理部によるタスク毎のタイマ管理はシステムタイマを基準として行われる。給紙搬送制御タスクによる搬送停止処理に対する処理実行許可の通知、給紙遅延ジャム検出は、タスクタイマ管理部に登録した各々のタスクタイマイベントに応じて行っている。
【００５０】
図８の制御構成において、タイマイベントを発生させるＣＰＵ周辺回路の機能はタイマＡとタイマＢである。よって、本実施形態による情報処理装置は、タイマＡ及びＢの制御レジスタに対するアクセスイベントに応じてタイマイベント管理テーブル１１９を更新する。
【００５１】
また、図８のＷＤＴリセット回路は、ウォッチドッグタイマ（ＷＤＴ）と呼ばれる専用のタイマのリセットを行う。なお、ウォッチドッグタイマの値が所定値になるとターゲットＣＰＵのハードウェアリセット処理が開始される。これは、ソフトウェアの暴走対策であり、ソフトウェアが正常に動作している場合、ＷＤＴクリア処理が、ＷＤＴリセット回路を使用してウォッチドッグタイマの値が所定値になる前にリセットを行う。
【００５２】
よって、ＷＤＴクリア処理は、ソフトウェア全体の一連の処理の中で所定時間以内に必ず実行される処理として組み込まれている。なお、タイマ割込み等、ハードウェアから起動される処理の場合、タスク処理が暴走していても定期的に実行される可能性があるため、ＷＤＴクリア処理は、通常、非割込み処理として実装される。
【００５３】
図８のタイマＡ及びタイマＢは、ダウンカウント・リロード方式のタイマである。具体的には、図１０に示すように、タイマＡ及びＢは、それぞれ、タイマカウンタレジスタ（ＴＣＲ）と、リロードレジスタ（ＴＲＬＲ）と、制御・状態レジスタ（ＴＣＳＲ）を有している。ＴＲＬＲに設定された値は、ＴＣＲに設定され、ＴＣＳＲのカウント許可ビット（ＴＣＥ）が許可を示す値に設定されると、ＴＣＲは、その値を指定周期毎にカウントダウンする。なお、指定周期は、ＴＣＳＲのクロック（分周比）指定（ＣＬＳ）ビットにて指定される。ＴＣＲの値が零からアンダーフローした時点で、タイマは割込み要求を発生させ、ＴＣＳＲのアンダーフロー割込み要求（ＵＦＩＲ）ビットを、割込み要求が発生していることを示す値に設定する。なお、ＴＣＳＲのアンダーフロー割込み許可（ＵＦＩＤＵＦＩＥ）ビットが割込みを許可しない値である場合には割込みは発生しない。
【００５４】
本実施形態におけるタイマシミュレータ１１１は、上記タイマＡ及びＢの模擬動作を行う。また、ＣＰＵタイマ管理部１１７は、ＣＰＵコアシミュレータ１０４による、各タイマのＴＲＬＲ及びＴＣＳＲへの設定内容によりタイマイベントの発生と、そのタイミング、つまり時刻を判定する。以下の説明において、タイマＡの制御レジスタ名及び制御ビット名には、＿Ａを付与し、タイマＢの制御レジスタ名及び制御ビット名には、＿Ｂを付与して両者を区別する。
【００５５】
＜割込み制御＞
以下、図１１から図１３を用いて、各タイマイベントに基づく割込み制御について説明する。なお、図１１から図１３において、ＣＰＵ周辺回路シミュレータ１０５における各値は、基準タイマ１０６の値を示している。また、シミュレータ接続部１０２における各値は、タイマイベント管理テーブル１１９の先頭にあるタイマイベントの発生時刻を示している。さらに、装置シミュレータ１０３における各数字は、装置シミュレータ１０３における時刻の進行を示している。なお、装置シミュレータ１０３において単一の時刻のみを表示している箇所は、装置シミュレータ１０３が模擬動作を行っておらず、よって、時間が経過していないことを意味している。
【００５６】
情報処理装置の動作開始により、ＣＰＵコアシミュレータ１０４は、図１１のＳ１０１において、システムタイマの生成のためにタイマＢに対してタイマ割込み設定を行う。具体的には、ＴＲＬＲ＿Ｂにタイマイベント発生までの時間を設定して、ＵＦＩＥ＿Ｂビットを“許可”に設定後、ＴＣＥ＿Ｂビットを“許可”に設定する。なお、タイマ割込み設定で指定される値は、実際には、タイマイベントが発生するまでのクロック数から１を引いた値、つまり、期間を特定する値であり時刻ではない。しかしながら、説明を簡潔にするため、図１１から図１３の説明においては、期間で設定されるものであっても、時刻を用いて説明する。つまり、Ｓ１０１では、時刻Ｔ０にタイマイベントが発生するように、ＴＲＬＲ＿Ｂに値が設定されたものとする。
【００５７】
シミュレータ接続部１０２は、ＣＰＵコアシミュレータ１０４によるタイマシミュレータ１１１のアクセスに応じて、Ｓ１０２において、タイマイベントを判定する。この場合、ＵＦＩＥ＿Ｂビット及びＴＣＥ＿Ｂビットが共に“許可”であるため、ＴＲＬＲ＿Ｂの値から時刻Ｔ０にタイマイベントが発生すると判断する。よって、タイマイベント管理テーブル１１９の先頭に、時刻Ｔ０で発生するタイマイベントを登録する。
【００５８】
本実施形態のＣＰＵコアシミュレータ１０４は、一連の主要処理を実行する度に、ＷＤＴクリア処理を実行する。シミュレータ接続部１０２は、Ｓ１０３において発生したＷＤＴクリア処理をトリガとして、Ｓ１０４において、装置シミュレータ１０３に、タイマイベント管理テーブル１１９の先頭のタイマイベント発生時刻までの模擬動作を指示する。つまり、時刻Ｔ０までの模擬動作を指示する。
【００５９】
Ｓ１０５において、装置シミュレータ１０３が時刻Ｔ０までの模擬動作の終了をシミュレータ接続部１０２に通知する。これにより、既に説明したように、シミュレータ接続部１０２のＣＰＵタイマ管理部１１７は、Ｓ１０６において、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻を基準タイマ１０６に設定する。ＣＰＵ周辺回路シミュレータ１０５のタイマシミュレータ１１１は、基準タイマ１０６の更新により、ＴＣＲ＿Ｂの値から基準タイマ１０６の増加分に対応する値を引く。これにより、アンダーフローが発生するため、ＣＰＵ周辺回路シミュレータ１０５は、Ｓ１０７において、ＣＰＵコアシミュレータ１０４にタイマＢの割込み要求を通知する。これにより、ＣＰＵコアシミュレータ１０４は、例えば、図８を用いて説明したシステムタイマ生成処理のような、割込み処理を実行する。なお、タイマＢによる割込みは周期的に実行するものであるため、ＣＰＵコアシミュレータ１０４は、Ｓ１０８において、時刻Ｔ１におけるタイマイベントを発生させるためタイマＢに対してタイマ割込み設定を行う。
【００６０】
また、シミュレータ接続部１０２のＣＰＵタイマ管理部１１７は、ＣＰＵコアシミュレータ１０４によるタイマシミュレータ１１１のアクセスに応じて、Ｓ１０９において、タイマイベントを判定する。そして、タイマイベント管理テーブル１１９の先頭に、時刻Ｔ１で発生するタイマイベントを登録する。
【００６１】
続いて、装置シミュレータ１０３が仮想信号の変換により模擬動作を終了した場合について図１２を用いて説明する。図１２の初期状態において、装置シミュレータ１０３は、時刻Ｔ９から時刻Ｔ１１までの模擬動作を指示されているものとする。したがって、基準タイマ１０６の時刻はＴ９であり、タイマイベント管理テーブル１１９の先頭には、時刻Ｔ１１で発生するタイマイベントが登録されている。
【００６２】
ここで、Ｓ２０１において、仮想信号が変化したことにより、装置シミュレータ１０３は模擬動作を終了し、シミュレータ接続部１０２に仮想信号の変化と共に終了時刻Ｔ１０を通知している。これにより、シミュレータ接続部１０２の仮想信号伝達部１１８は、Ｓ２０２において、ＣＰＵ周辺回路シミュレータ１０５に信号変化を通知する。また、時刻Ｔ１０が、タイマイベント管理テーブル１１９の先頭のタイマイベントの時刻Ｔ１１より早いため、シミュレータ接続部１０２のＣＰＵタイマ管理部１１７は、Ｓ２０２において、基準タイマ１０６の値を時刻Ｔ１０に設定する。ＣＰＵ周辺回路シミュレータ１０５は、信号変化に応じて、Ｓ２０３において、ＣＰＵコアシミュレータ１０４に外部割込み要求を行う。
【００６３】
ここで、ターゲットコードは本外部割込み処理において、所定の出力信号値を変化させる処理、及び、タイマＡへの割込みを設定する処理を有しているものとする。
ターゲットコードの処理に基づき、ＣＰＵコアシミュレータ１０４は、外部割込みにより通知された信号変化に応答して、Ｓ２０４において、所定信号の出力を変化させ、この信号出力の変化は、ＣＰＵ周辺回路シミュレータ１０５及びシミュレータ接続部１０２経由で装置シミュレータ１０３に伝達される。さらに、ターゲットコードの処理に基づき、ＣＰＵコアシミュレータ１０４は、Ｓ２０３により通知された外部割込みにより、Ｓ２０５において、タイマＡに対して時刻Ｔ１１’における割込みを設定している。具体的には、ＣＰＵコアシミュレータ１０４は、ＴＲＬＲ＿Ａに時刻Ｔ１１’までの時間を設定して、ＵＦＩＥ＿Ａビットを“許可”に設定後、ＴＣＥ＿Ａビットを“許可”に設定する。なお、時刻Ｔ１１’は、時刻Ｔ１１より後の時刻であるものとする。
【００６４】
シミュレータ接続部１０２は、ＣＰＵコアシミュレータ１０４によるタイマシミュレータ１１１へのアクセスに応じて、Ｓ２０６において、時刻Ｔ１１’におけるタイマイベントを判定し、タイマイベント管理テーブル１１９に登録する。なお、時刻Ｔ１１’は、時刻Ｔ１１より後であるため、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻は時刻Ｔ１１のままである。
【００６５】
Ｓ２０７において、ＣＰＵコアシミュレータ１０４はＷＤＴクリア処理を実行する。シミュレータ接続部１０２は、ＷＤＴクリア処理をトリガとして、Ｓ２０８において、装置シミュレータ１０３に、タイマイベント管理テーブル１１９の先頭のタイマイベント発生時刻までの模擬動作を指示する。つまり、時刻Ｔ１１までの模擬動作を指示する。
【００６６】
Ｓ２０９において、装置シミュレータ１０３が時刻Ｔ１１までの模擬動作の終了をシミュレータ接続部１０２に通知する。これにより、既に説明したように、シミュレータ接続部１０２のＣＰＵタイマ管理部１１７は、Ｓ２１０において、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻を基準タイマ１０６に設定する。また、タイマイベント管理テーブル１１９の先頭のタイマイベントを削除する。これにより、タイマイベント管理テーブル１１９の先頭のタイマイベントは、Ｓ２０５において設定した時刻Ｔ１１’となる。
【００６７】
ＣＰＵ周辺回路シミュレータ１０５のタイマシミュレータ１１１は、基準タイマ１０６の更新により、図１１のＳ１０７と同様に、Ｓ２１１において、ＣＰＵコアシミュレータ１０４にタイマＢの割込み要求を通知する。これにより、ＣＰＵコアシミュレータ１０４は、タイマＢによる割込み処理を実行し、Ｓ２１１にて、時刻Ｔ１２おけるタイマイベントを発生させるためタイマＢに対してタイマ割込み設定を行う。なお、時刻Ｔ１２は、時刻Ｔ１１’より後の時刻であるものとする。
【００６８】
シミュレータ接続部１０２は、ＣＰＵコアシミュレータ１０４によるタイマシミュレータ１１１へのアクセスに応じて、Ｓ２１３おいて、時刻Ｔ１２におけるタイマイベントを判定し、タイマイベント管理テーブル１１９に登録する。なお、時刻Ｔ１２は、時刻Ｔ１１’より後であるため、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻は時刻Ｔ１１’のままである。
【００６９】
Ｓ２１４において、ＣＰＵコアシミュレータ１０４はＷＤＴクリア処理を実行し、既に説明したのと同様に、シミュレータ接続部１０２は、Ｓ２１５において、装置シミュレータ１０３に、時刻Ｔ１１’までの模擬動作を指示する。
【００７０】
Ｓ２１６において、装置シミュレータ１０３が時刻Ｔ１１’までの模擬動作の終了をシミュレータ接続部１０２に通知する。これにより、既に説明したように、シミュレータ接続部１０２のＣＰＵタイマ管理部１１７は、Ｓ２１７において、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻を基準タイマ１０６に設定する。また、タイマイベント管理テーブル１１９の先頭のタイマイベントを削除する。これにより、タイマイベント管理テーブル１１９の先頭のタイマイベントは、Ｓ２１３において設定した時刻Ｔ１２となる。ＣＰＵ周辺回路シミュレータ１０５のタイマシミュレータ１１１は、基準タイマ１０６の更新でＴＣＲ＿Ａがアンダーフローすることにより、Ｓ２１８において、ＣＰＵコアシミュレータ１０４にタイマＡの割込み要求を通知する。これにより、ＣＰＵコアシミュレータ１０４は、タイマＡによる割込み処理を実行する。
【００７１】
図１２においては、タイマＡに設定したタイマイベントの発生時刻Ｔ１１’が、時刻Ｔ１１より後の時刻であった。図１３に、タイマＡに設定したタイマイベントの発生時刻Ｔ１１’が、時刻Ｔ１１より前の時刻である場合のシーケンスを示す。
【００７２】
図１３のＳ３０１からＳ３０６までの処理は、図１２のＳ２０１からＳ２０６の処理と同様であり説明は省略する。なお、本例において、時刻Ｔ１１’は、時刻Ｔ１１より前であるため、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻は時刻Ｔ１１’に変更となる。
【００７３】
Ｓ３０７において、ＣＰＵコアシミュレータ１０４はＷＤＴクリア処理を実行する。シミュレータ接続部１０２は、ＷＤＴクリア処理をトリガとして、Ｓ３０８において、装置シミュレータ１０３に、タイマイベント管理テーブル１１９の先頭のタイマイベント発生時刻までの模擬動作を指示する。つまり、時刻Ｔ１１’までの模擬動作を指示する。
【００７４】
Ｓ３０９において、装置シミュレータ１０３が時刻Ｔ１１’までの模擬動作の終了をシミュレータ接続部１０２に通知する。これにより、既に説明したように、シミュレータ接続部１０２のＣＰＵタイマ管理部１１７は、Ｓ３１０において、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻を基準タイマ１０６に設定する。また、タイマイベント管理テーブル１１９の先頭のタイマイベントを削除する。これにより、タイマイベント管理テーブル１１９の先頭のタイマイベントは時刻Ｔ１１となる。ＣＰＵ周辺回路シミュレータ１０５のタイマシミュレータ１１１は、基準タイマ１０６の更新でＴＣＲ＿Ａがアンダーフローすることにより、Ｓ３１１において、ＣＰＵコアシミュレータ１０４にタイマＡの割込み要求を通知する。これにより、ＣＰＵコアシミュレータ１０４は、タイマＡによる割込み処理を実行する。その後、ＣＰＵコアシミュレータ１０４によるＷＤＴクリア処理をトリガとして、装置シミュレータ１０３は、時刻Ｔ１１までの模擬動作を実行する。
【００７５】
図１２のＳ２０１及びＳ３０１において変化した信号は、例えば、記録材の先端を検出するレジストセンサ３０８の出力信号である。この場合、図１２のＳ２０４及び図１３のＳ３０４においてＣＰＵコアシミュレータ１０４がその変化を通知する信号は、レジストローラクラッチ８０４をオフとする信号である。装置シミュレータ１０３は、ＣＰＵコアシミュレータ１０４から通知された信号の変化については、例えば、次のＷＤＴクリア処理をトリガとする模擬動作に反映させる。装置シミュレータ１０３の模擬動作は、基準タイマ１０６との時間同期が図られているため、実装置に対する正確な模擬動作を実現することができる。また、ＣＰＵコアシミュレータ１０４は、タイマＢを直接読み込むこともできる。なお、上述した実施形態においては、ダウンカウント・リロード方式のタイマを用いていたが、他の種類のタイマであってもよい。
【００７６】
＜第２の実施形態＞
以下では、図１４を参照して、本発明の第２の実施形態について説明する。上記第１の実施形態において、装置シミュレータ１０３は、シミュレータ接続部１０２が指定する時間分の模擬動作を実行していた。本実施形態において、装置シミュレータ１０３は、予め定めた単位時間分の模擬動作を順に行う。以下では、上記第１の実施形態との主な相違点を中心に説明する。
【００７７】
本実施形態において、装置シミュレータ１０３は、シミュレータ接続部１０２から実行指示を受け取る度に、１単位時間の模擬動作を行い、終了後、終了時刻と共に模擬動作の終了をシミュレータ接続部１０２に通知して、待ち状態となる。なお、模擬動作中に仮想信号の値が変化した場合には、仮想信号及びその値並びにその時点の時刻を特定する情報と共に模擬動作の終了をシミュレータ接続部１０２に通知する。
【００７８】
図１４は、本実施形態における実行管理部１１６の処理を示すフローチャートである。図６に示す第１の実施形態との相違点は、Ｓ１２の時間算出に対応する処理がないことと、Ｓ１６に対応するＳ２５の分岐先が異なることである。前者の相違点は、本実施形態において、装置シミュレータ１０３は単位時間毎に模擬動作を終了するからである。後者の相違点は、装置シミュレータ１０３は単位時間毎に模擬動作を終了するが、実行管理部１１６は、装置シミュレータ１０３による対象時刻までの模擬動作を管理するためである。つまり、図１４のＳ２５において信号変化がない場合、実行管理部１１６は、Ｓ２１からの処理を、装置時刻が対象時刻を超えるまで繰り返す。
以上、装置シミュレータ１０３については、単位時間毎に同期待ちとなる実行方式とすることができる。
【００７９】
＜第３の実施形態＞
第１及び第２の実施形態において、実行管理部１１６は、タイマイベントが存在する場合のみ装置シミュレータ１０３に実行指示を行うものであった。しかし、ターゲットコードによっては、タイマイベントが長時間発生しない場合も生じ得る。例えば、ターゲットコードが、非時間同期処理のみを実行している様な場合であり、この場合には制御対象装置との正確な時間同期は必要ないが、制御対象装置の連係動作については模擬する必要がある。
【００８０】
本実施形態においては、非時間同期処理もタイマイベントとして扱うことで、ＣＰＵコアシミュレータ１０４が長時間タイマイベントを設定しない場合においても、装置シミュレータ１０３が模擬動作を実行するようにするものである。
【００８１】
図１５は、本実施形態における情報処理装置の構成図である。図１との相違点は、ＣＰＵシミュレータ１０１にイベント制御部１４２を設け、シミュレータ接続部１０２にＣＰＵシミュレータ実行管理部１４１を設けたことである。
【００８２】
まず、イベント制御部１４２は、ＣＰＵシミュレータ１０１が、信号変化の通知等、シミュレータ接続部１０２に何らかの通知を行う度に、ＣＰＵコアシミュレータ１０４及びＣＰＵ周辺回路シミュレータ１０５の模擬動作を一時停止させる。その後、ＣＰＵシミュレータ実行管理部１４１から、実行再開指示を受けると、ＣＰＵコアシミュレータ１０４及びＣＰＵ周辺回路シミュレータ１０５の模擬動作を再開させる。
【００８３】
また、本実施形態において、ＣＰＵタイマ管理部１１７は、例えば、ＷＤＴクリア処理といった、ＣＰＵコアシミュレータ１０４が繰り返し実行する命令実行イベント（第２の命令）に応じてタイマイベント管理テーブル１１９にタイマイベントを設定する。この特定命令実行イベントよるタイマイベントを、他の通常のタイマイベントと区別するために、本実施形態においてはフラグ情報を使用する。具体的には、図１６に示すように、本実施形態において、タイマイベント管理テーブル１１９にフラグ情報を追加する。このフラグ情報が、例えば、“１”であると、それは、例えば、特定命令実行イベントであることを示す。
【００８４】
ＣＰＵタイマ管理部１１７は、ＣＰＵコアシミュレータ１０４の特定命令実行イベントが所定の回数実行される毎に、１つの特定命令実行イベントが発生するようにタイマイベント管理テーブル１１９に登録を行う。例えば、ＷＤＴクリア処理が、約１０ｍｓｅｃ間隔で実行される場合、例えば、ＷＤＴクリア処理が５回実行される度に１回の特定命令実行イベントが発生するように、タイマイベント管理テーブル１１９への登録を行う。なお、時刻は、例えば、現在の模擬時刻に対して５０ｍｓｅｃ後に実行されるようにする。他のタイマイベントについては第１の実施形態と同様である。
【００８５】
ＣＰＵシミュレータ実行管理部１４１は、ＣＰＵシミュレータ１０１からの各種通知を受けると直ちに実行再開を指示する。ただし、タイマイベント管理テーブル１１９の先頭のタイマイベントが、特定命令実行イベントである場合には、実行再開を指示せず待機する。その後、装置シミュレータ１０３が、この先頭のタイマイベントの時刻までの模擬動作を終了したときに、ＣＰＵシミュレータ実行管理部１４１は、ＣＰＵシミュレータ１０１に対して実行の再開を指示する。
【００８６】
以上の構成により、ＣＰＵコアシミュレータ１０４が長期間タイマイベントを設定しない場合でも、装置シミュレータ１０３の模擬動作を実行する。
【００８７】
以上説明したように、第１乃至第３の実施形態によれば、シミュレータ接続部１０２は、タイマイベント管理テーブル１１９の内容に基づきタイマイベントの発生時刻までの模擬動作を装置シミュレータ１０３に指示する。このように、タイマイベントを単位としてＣＰＵコアシミュレータ１０４と、装置シミュレータ１０３との模擬時間の同期を行うことで、必要な精度での時刻同期を維持しつつ、不要な時刻同期処理を防ぐことができる。よって、処理効率の低下を抑えることができる。
【００８８】
具体的には、実行管理部１１６は、ＣＰＵコアシミュレータ１０４が繰り返し実行する、例えば、ＷＤＴクリア処理を実行した際に、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻までの模擬動作を装置シミュレータ１０３に指示する。そして、ＣＰＵタイマ管理部１１７は、装置シミュレータ１０３が模擬動作の終了を通知したとき、その時点の装置シミュレータ１０３の時刻とタイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻を比較する。装置シミュレータ１０３側に信号の変化等のイベントが発生していないのであれば、通常、この時刻はタイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻と同じである。この場合、このタイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻を基準タイマ１０６に設定して、このタイマイベントを発生させる。この時点において、装置シミュレータ１０３と、ＣＰＵコアシミュレータ１０４の時刻は一致、つまり、時刻同期が行われる。一方、装置シミュレータ１０３側に信号の変化等のイベントが発生している場合、装置シミュレータ１０３は、タイマイベント管理テーブル１１９の先頭のタイマイベントの発生時刻より前の時刻を通知する。この場合、基準タイマ１０６には、装置シミュレータ１０３が通知した時刻を設定する。この時点において、装置シミュレータ１０３と、ＣＰＵコアシミュレータ１０４の時刻は一致する。また、ＣＰＵコアシミュレータ１０４は、仮想信号伝達部１１８経由で通知される信号の変換に合わせた処理を開始する。つまり、装置シミュレータ１０３と、ＣＰＵコアシミュレータ１０４の時刻同期が行われる。このように、不要な時刻同期処理を防ぐことができる。
【００８９】
また、ＣＰＵタイマ管理部１１７は、ＣＰＵコアシミュレータ１０４が繰り返し実行する、例えば、ＷＤＴ処理に対応する時刻を、タイマイベント管理テーブル１１９にタイマイベントとして、その時刻と共に登録する。この構成により、タイマイベントが長期間発生しない様な状況においても、装置シミュレータ１０３とＣＰＵコアシミュレータ１０４の時刻同期を行うことができる。
【００９０】
＜第４の実施形態＞
以下では、図１７乃至図１９を参照して、第４の実施形態について説明する。ターゲットコードをホストＰＣ上で実行するシミュレータとして、一般に以下の３つの方式が知られている。第１の方式は、ホストＰＣ上でターゲットＣＰＵの機械語コードを一語ずつ解釈し、実行する方式のものである。第２の方式は、Ｃ言語等で記述されたターゲットコードのソースプログラムをホストＰＣのＣＰＵ（ホストＣＰＵ）用のコンパイラによってコンパイルし、実行する方式である。第３の方式は、ターゲットＣＰＵの機械語コードをホストＰＣ上の模擬実行形式に変換して実行する方式である。これらは、ホストＰＣ上のソフトウェアでターゲットＣＰＵの命令実行処理を模擬するもの（第１の方式）と、ホストＰＣのＣＰＵ（ホストＣＰＵ）によりターゲットコードそのものを直接実行するもの（第２、第３の方式）に大別できる。ここでは、前者をインストラクションセットシミュレータ（ＩＳＳ）、後者をネイティブシミュレータと称する。第３の方式は、シミュレーションのレベルとしてはターゲットＣＰＵの機械語レベルで実施しているためＩＳＳの一種といえる。しかし、以下の説明においては、ＩＳＳをネイティブシミュレータに相対するものとし、第３の方式はＩＳＳに含めない。
【００９１】
一般的に、ターゲットコードの解釈処理を行うＩＳＳよりも、ホストＣＰＵで直接ターゲットコードを実行するネイティブシミュレータの方が高速にシミュレーションを実行できる。しかし、ＩＳＳはターゲットＣＰＵの機械語命令を一語ずつ取得し解釈しているため、ターゲット命令の実行順を自在に変更できる。従って、ＩＳＳではターゲットＣＰＵの割込み（以下、ホストＰＣ上の割込み機能と区別するため、ターゲット割込みと称する。）の模擬は、公知の技術により実現可能である。実際に既存の多くのＩＳＳがターゲット割込み模擬機能を有している。一方、ネイティブシミュレータのターゲット命令実行部は、ターゲットコードそのものであるため、ターゲット割込みを模擬できない。
【００９２】
従って、ＩＳＳは上記第１乃至第３の実施形態に示す情報処理装置におけるＣＰＵシミュレータ１０１のＣＰＵコアシミュレータ１０４にそのまま使用できる。一方、ネイティブシミュレータは、ＣＰＵコアシミュレータ１０４としてそのまま使用することはできない。そこで、本実施形態においては、ネイティブシミュレータを使用してターゲット割込みを模擬できるようにすることで、ＣＰＵコアシミュレータ１０４の処理をより高速に実行できるようにする。
【００９３】
＜シミュレータ構成＞
以下では、ターゲット命令実行部１０８をネイティブシミュレータで構成する場合の、割込み制御部１０９の実現方式について説明する。まず、図１７を参照して、本実施形態におけるシミュレータの構成について説明する。
【００９４】
本実施形態におけるシミュレータの構成は、上記第１の実施形態における図１の構成と基本的に同じであるが、本実施形態では、特にＣＰＵコアシミュレータ１０４を、ネイティブシミュレータとして構成する。すなわち、ＣＰＵコアシミュレータ１０４のターゲット命令実行部１０８は、ターゲットコードをホストＣＰＵ実行形式にコンパイルしたものとなっている。ただし、ターゲットコードにおいて、ＣＰＵ周辺回路等のターゲットハードウェア構成に依存する命令は、ホストＣＰＵ上で動作するように変更が加えられている。変更内容は、ターゲットコードのハードウェア依存の処理内容となっている部分をホストＰＣ上で擬似的に処理できるようにするものである。これらの処理については、一般的な手法によるものであり詳述は避ける。なお、本実施形態に関連するターゲットコードの変更については後述する。ターゲットコードに対するこれらの変更は、人手、或いは、専用のソフトウェアによって行われる。また、ターゲットコードにおけるハードウェア依存部分が組込みＯＳ等のライブラリ関数により隠蔽されている場合には、ライブラリをホストＰＣ上のシミュレーション用ライブラリに置き換え、ターゲットコードをホストＰＣ上での実行に対応することも可能である。
【００９５】
また、本実施形態においては、ターゲットＣＰＵの割込みシミュレーションに、ソフトウェア割込み発生機能１７０１により管理されるソフトウェア割込みを使用する。ソフトウェア割込み発生機能１７０１は、ホストＰＣ上のソフトウェアからの割込み要求に対して特定のプロセスに対する割込みを発生させるもので、例えば、Ｌｉｎｕｘ（登録商標）におけるシグナルによるソフトウェア割込み機能が使用できる。また、対象プロセスをマルチスレッド構成とし、メインの実行スレッドとは別に外部イベント監視スレッドが外部からのイベント（割込み要求）を受け付け、メインスレッドを中断して予め登録された割込みハンドラを呼出すように構成してもよい。或いは、マイクロソフト社のＷＩＮＤＯＷＳ（登録商標）ＯＳ上のシステムにおいては、同社の提供する構造化例外処理を予めターゲットコードに組込むことで実現しても良い。
【００９６】
割込み制御部１０９は、ソフトウェア割込みハンドラ１７０２、実行イベントコールバック関数１７０３、割込みシミュレーション実行管理部１７０４、割込み実行可否判断部１７０５、制御状態管理部１７０６、及びターゲット割込み模擬部１７０７を備える。また、割込みシミュレーション実行管理部１７０４は、割込みシミュレーション部１７０８、割込みシミュレーション部１７０９、割込み処理選択部１７１０から構成される。ターゲット割込み模擬部１７０７は、割込み要因・ハンドラ対応情報１７１２と１つ以上のターゲット割込みハンドラ１７１３から構成される。
【００９７】
次に、各部の機能を説明する。割込み処理選択部１７１０は、外部（ＣＰＵ周辺回路シミュレータ１０５）からのターゲット割込み要求を受けて、割込み実行可否判断部１７０５の判断結果に応じて、実行部として割込みシミュレーション部１７０８、１７０９の何れかを選択する機能である。割込み処理選択部１７１０は、当該ターゲット割込み要求に対する割込み実行可否判断部１７０５の判断結果が割込み処理を実行できる状態である場合には割込みシミュレーション部１７０８を選択する。一方、割込み処理を実行できない状態である場合には割込みシミュレーション部１７０９を割込みシミュレーションの実行部として選択する。割込みシミュレーション部１７０８は、ホストＯＳのソフトウェア割込み発生機能１７０１により管理されるソフトウェア割込みを使用してターゲット割込みの動作をシミュレーションする。一方、割込みシミュレーション部１７０９はターゲット命令実行部１０８からの実行イベントコールバックに同期してターゲット割込みの動作をシミュレーションする。
【００９８】
割込み実行可否判断部１７０５は、割込み番号をパラメータとして受け、指定された割込み番号についてターゲットＣＰＵの仕様に基づきターゲット割込みの可否を判断し、結果を返す。ここで、割込み番号は、ターゲットＣＰＵ上で割込み要因毎に設けられた固有の番号であり、１つの割込み番号に１つのベクタアドレスが割り当てられている。すなわち、各割込み番号に対して、固有の割込みハンドラが定義される。
【００９９】
ターゲットＣＰＵにおいて、割込み要求に対する割込み処理を実行できない例としては、要求された割込みがマスカブル割込みで割込み禁止状態である場合や、周辺回路毎に設定される割込み許可設定が無効（不許可）である場合などである。この例としては、図８のタイマＡにおけるアンダーフロー割込み許可条件がある。タイマＡにおけるアンダーフロー割込み許可条件は図１０に示されるＴＣＳＲのＵＦＩＥビットの設定によって決まる。割込み実行可否判断部１７０５は、制御状態管理部１７０６が管理するマスカブル割込みの禁止設定状態情報、各周辺回路の割込み許可設定情報に基づき、割込み番号で指定されたターゲット割込みが実行可能か否かを判断する。
【０１００】
制御状態管理部１７０６は、ターゲットＣＰＵの制御状態情報を管理する機能である。ターゲットＣＰＵの制御状態情報とは、ターゲットコードによりターゲットＣＰＵ、及び、周辺回路に対して設定される制御状態情報のことであり、具体的には、マスカブル割込み禁止設定や各周辺回路の割込み許可を含む動作指定情報などである。これら、ターゲットＣＰＵの制御状態情報は、実行イベントコールバック関数１７０３から受ける、ターゲットコードによるＣＰＵレジスタ、及び、周辺回路制御レジスタへの書込み内容の通知に応じて更新される。
【０１０１】
実行イベントコールバック関数１７０３は、ターゲット命令実行部１０８に対して登録されたコールバック関数である。上述のとおり、ターゲット命令実行部１０８はターゲットコードをホストＣＰＵのネイティブコードに変換したもので、ターゲットハードウェアに依存する処理のみ、ホストＣＰＵ上で実行可能なように変更されている。本実施形態では、ターゲットコードの外部との連携機能の実装として、ハードウェア（レジスタ）へのリードアクセス命令の直前にリードイベント関数呼出しを、ライトアクセス命令の実行直後にライトイベント関数呼出しを追加している。そして、リードイベント関数にはリード先の特定情報、アクセスサイズを、ライトイベント関数にはライト先の特定情報、アクセスサイズ、書込み値を引数として渡すように実装される。ここで、リード先、ライト先の特定情報は、ターゲットＣＰＵ、及び、周辺回路へのアクセス先を特定する情報として、予め定義されたものである。具体的な例としては、レジスタ名、メモリマップトＩＯにおけるアドレス値、又は、予め定義されたアクセス先ＩＤなどである。
【０１０２】
リードイベント関数、ライトイベント関数内には、予め登録されたコールバック関数を呼出す機能を有している。コールバック関数は、ターゲット命令実行部１０８と外部とのインタフェースとして定義されるもので、外部システム作成者は、所定の処理を実装したコールバック関数をコールバック関数登録関数によって登録する。コールバック関数の呼出し形式には、引数としてアクセス種別（リード／ライト）、アクセスサイズ、データポインタが定義されている。データポインタはターゲット命令実行部と外部との間でハードウェアアクセス値をやり取りする領域を指定する情報である。リードイベント関数は、コールバック関数からのリターン後にデータポインタ指示領域の値を参照し、ライトイベント関数は、データポインタ領域指示にライト先への書込み値を設定した後にコールバック関数を呼出す。コールバック関数は、アクセス先特定情報と関数ポインタを関連付けて登録される。リードイベント関数、ライトイベント関数は、各々、引数として渡されたアクセス先特定情報とコールバック登録されたアクセス先特定情報とを比較し、一致する場合に対応するコールバック関数を呼び出す。リードイベント関数、ライトイベント関数、コールバック関数登録関数、及び、ハードウェアアクセス関数をホストＰＣ上でシミュレーションする関数等は、ネイティブコードからターゲット命令実行部１０８を生成するためのライブラリ関数として用意される。実行イベントコールバック関数１７０３はターゲットＣＰＵ、及び、ターゲット周辺回路の各種レジスタ毎に作成され、上記コールバック関数登録関数を用いて対応するアクセス先特定情報に関連付けて登録されたものである。実行イベントコールバック関数１７０３内には、対応するターゲットハードウェアについての動作模擬機能、制御状態管理部１７０６、及び、ＣＰＵ周辺回路シミュレータ１０５内の対応するＣＰＵ周辺回路シミュレータへの設定情報通知機能を有する。さらに、ＣＰＵ周辺回路シミュレータ１０５からの設定情報更新機能や、割込みシミュレーション部２からの指示に応じてターゲット割込み模擬部１７０７の処理を起動する機能等を有している。また、実行イベントコールバック関数実行中は、後述のソフトウェア割込みに対するマスク設定がなされている。
【０１０３】
ソフトウェア割込みハンドラ１７０２は、割込みシミュレーション部１７０８が要求するソフトウェア割込みに対して登録された割込みハンドラである。割込みシミュレーション部１７０８が要求するソフトウェア割込みは、ターゲット命令実行部１０８に対して発行される割込み要求であり、ソフトウェア割込みハンドラ１７０２は、ターゲット命令実行部１０８のプロセス内に設けられている。本実施形態においては、模擬動作を行うターゲット割込みの種別毎に異なるソフトウェア割込みが割り当てられ、各々にソフトウェア割込みハンドラ１７０２を設定している。すなわち、ターゲット割込み種別とソフトウェア割込みハンドラが１対１に対応するように構成される。割込みシミュレーション部１７０８が模擬すべきターゲット割込み種別に対応したソフトウェア割込み要求を発行すると、ソフトウェア割込み発生機能１７０１によってターゲット命令実行部１０８のターゲット命令実行処理が中断される。その後、ソフトウェア割込みハンドラ１７０２に処理が移行する。そして、ソフトウェア割込みハンドラ１７０２の処理を終了すると、ターゲット命令実行部１０８のターゲット命令実行処理が再開される。ソフトウェア割込みハンドラ１７０２には、自身に対応したターゲット割込み番号をパラメータとしてターゲット割込み模擬部１７０７の処理を起動する機能を有している。
【０１０４】
ターゲット割込み模擬部１７０７は、ターゲットＣＰＵの割込み動作を模擬する機能で、外部からの指示に応じて、外部から指定された割込み番号に基づき所定のターゲットコードの割込みハンドラの処理を実行する。割込み要因・ハンドラ対応情報１７１２はターゲットＣＰＵの割込み要因毎に割込みハンドラを対応付けた情報で、具体的には割込み番号と、ターゲット割込みハンドラ１７１３へのポインタとを対応付けたテーブル情報となっている。ターゲット割込みハンドラ１７１３はターゲットコード中に各ターゲット割込みに定義された割込みハンドラをホストＣＰＵ実行形式に変換されたもので、通常の関数形式で実装される。
【０１０５】
＜処理フロー＞
次に、図１８を参照して、本実施形における割込みシミュレーション実行管理部１７０４の処理フローについて説明する。まず、Ｓ１８０１において、割込み処理選択部１７１０は、ＣＰＵ周辺回路シミュレータ１０５から割込み要求を受けると指定された割込み要求に対応する割込み番号をパラメータとして割込み実行可否判断部１７０５に割込み実行可否判断を要求する。さらに、割込み処理選択部１７１０は、要求した結果に基づいて、割込みシミュレーション実行部を選択する。
【０１０６】
続いて、Ｓ１８０２において、割込み処理選択部１７１０は、割込み実行可否判断部１７０５による割込み実行可否判断結果が実行可の場合、割込みシミュレーション部１７０８に実行要求を発行する。一方、実行可否判断結果が実行不可の場合は、Ｓ１８０３において、割込み処理選択部１７１０は、割込みシミュレーション部１７０９に実行要求を発行する。
【０１０７】
Ｓ１８０４において、割込みシミュレーション部１７０８は、割込み処理選択部１７１０から割込み実行要求を受け付けると、ソフトウェア割込み要求を発行し、処理を終了する。一方、Ｓ１８０５において、割込みシミュレーション部１７０９は、割込み処理選択部１７１０から割込み実行要求を受け付けると、実行イベントコールバック関数からのコールバック発生通知を待ち、コールバック発生通知を受け付けると、Ｓ１８０６に進む。Ｓ１８０６において、割込みシミュレーション部１７０９は、当該割込み番号をパラメータとして、その時点でのターゲットＣＰＵ制御状態における割込み実行可否判断を割込み実行可否判断部１７０５から取得する。その結果ターゲット割込み実行可の場合にはＳ１８０７に進む。Ｓ１８０７において、割込みシミュレーション部１７０９は、実行イベントコールバック関数に割込み番号を指定してターゲット割込みシミュレーションの実行を指示する。一方、Ｓ１８０６でターゲット割込み実行不可の場合にはＳ１８０５に戻り、新たな実行イベントの発生を待つ。
【０１０８】
＜動作シーケンス＞
次に、図１９を参照して、上述した割込み制御部１０９によるターゲット割込み動作シミュレーションの動作シーケンスについて説明する。ここでは、最初の割込み要求発生時にはターゲットＣＰＵの制御状態は割込み許可状態で、その後、ターゲットコードにより割込み禁止状態が設定され、次の割込み要求発生時にはターゲットＣＰＵの制御状態は割込み禁止状態である例を示している。ＣＰＵ周辺回路シミュレータ１０５から割込み制御部１０９に最初の割込み要求が通知されると、割込み制御部１０９は割込み実行可否判断部１７０５の判断結果に基づき、割込みシミュレーション部１７０８に割込み実行を要求する。
【０１０９】
割込みシミュレーション部１７０８は直ちにソフトウェア割込み発生機能１７０１にソフトウェア割込み要求を発行する。さらに、当該ソフトウェア割込み要求に応じてソフトウェア割込み発生機能１７０１によって、ターゲット命令実行部１０８の処理が中断し、ソフトウェア割込みハンドラ１７０２の処理が実行される。ソフトウェア割込みハンドラ１７０２は、自身に割り当てられたターゲット割込み番号でターゲット割込み模擬部１７０７を実行する。そして、ターゲット割込み模擬部１７０７によるターゲット割込みハンドラの実行が終了するとソフトウェア割込みハンドラ１７０２の処理が終了し、ターゲット命令実行部１０８の処理が再開される。
【０１１０】
その後、ターゲット命令実行部１０８によるターゲットコード実行の結果、ターゲットＣＰＵの制御状態が割込み禁止に設定される。ここで、ターゲットコードによる割込み禁止設定時にも実行イベントコールバック関数１７０３が呼び出され、割込みシミュレーション部１７０９に対してコールバック発生が通知される。このコールバック発生通知に対しては割込みシミュレーション部１７０９の不図示の外部Ｉ／Ｆはイベントコールバック待ちの割込み番号シミュレーション部が存在しないため、実行イベントコールバック関数１７０３に処理無しを通知する。実行イベントコールバック関数１７０３は処理無しの応答に対してターゲット割込みに関する処理を行わずにターゲット命令実行部１０８の処理に戻る。
【０１１１】
次に、ＣＰＵ周辺回路シミュレータ１０５から割込み制御部１０９に２つ目の割込み要求が通知されると、割込み制御部１０９は割込み実行可否判断部１７０５の判断結果に基づき、割込みシミュレーション部１７０９に割込み実行を要求する。割込みシミュレーション部１７０９は、割込み実行要求に応じて実行イベントコールバック関数１７０３からのコールバック発生通知を待つ。そして、割込みシミュレーション部１７０９は、コールバック発生通知を受けると、割込み実行可否判断部１７０５に当該割込み番号における割込み可否判断を依頼する。割込み実行可否判断部１７０５は、この時点でのターゲットＣＰＵの制御状態から割込み実行可との判断結果を割込みシミュレーション部１７０９に通知する。割込みシミュレーション部１７０９は、この結果に応じて、実行イベントコールバック関数１７０３に対して所定の割込み番号での割込みシミュレーション実行を指示する。実行イベントコールバック関数１７０３は、指定された割込み番号でターゲット割込み模擬部１７０７を実行する。そして、ターゲット割込み模擬部１７０７によるターゲット割込みハンドラの実行が終了すると実行イベントコールバック関数１７０３の処理が終了し、ターゲット命令実行部１０８の処理が再開される。なお、この時点の実行イベントが対処中の割込み番号に対する割込み許可状態への変更に関連しないもので、ＣＰＵの制御状態が当該割込みの実行可能状態に変化しない場合、割込みシミュレーション部１７０９は次のコールバック発生を待つ。
【０１１２】
以上説明したように、割込みシミュレーション実行管理部１７０４をソフトウェア割込みを使用した割込みシミュレーション部１７０８、実行イベントコールバックを使用した割込みシミュレーション部１７０９、割込み処理選択部１７１０で構成する。従って、割込み要求発生時のターゲットＣＰＵの制御状態に応じて２つの割込みシミュレーション部を選択的に実行し、ターゲット命令実行部１０８をネイティブシミュレータで構成した場合においても、ターゲット割込み動作を所定の精度で模擬できる。
【０１１３】
＜第５の実施形態＞
以下では、図２０及び図２１を参照して、本発明の第５の実施形態について説明する。上記第４の実施形態では、ＣＰＵ周辺回路シミュレータ１０５から割込み要求を受けた時点で当該割込みが直ちに実行可能である場合、割込みシミュレーション部１７０８によるターゲット割込みの模擬動作を実行している。これに対してＣＰＵ周辺回路シミュレータ１０５は非同期に処理を継続する処理を行っている。この場合、ターゲット割込み動作は実機通りに模擬できるが、ＣＰＵ周辺回路シミュレータ１０５での割込み要求発生時とターゲット割込みハンドラの処理実行時の基準タイマ１０６のタイマ値には、ずれが発生する可能性がある。そこで、本実施形態では、割込みシミュレーション部１７０８によるターゲット割込みの模擬動作実行に対してＣＰＵ周辺回路シミュレータ１０５の同期処理を設けることで、ターゲット割込み模擬における模擬時間の精度を向上させている。
【０１１４】
＜処理フロー＞
本実施形態におけるシミュレータの機能構成は図１７と同じである。しかし、本実施形態においては、割込みシミュレーション実行管理部１７０４の処理が上記第４の実施形態と異なる。図２０に本実施形態における割込みシミュレーション実行管理部１７０４の処理フローを示す。なお、図２０では、図１８と同様の制御については同一のステップ番号を付している。したがって、以下では、図１８と異なる制御について主に説明する。
【０１１５】
まず、割込み処理選択部１７１０において割込みシミュレーション部１７０８、又は、割込みシミュレーション部１７０９に対する実行要求発行（Ｓ１８０２、又は、Ｓ１８０３）の後にＳ２００１に進む。Ｓ２００１において、割込み処理選択部１７１０は、実行要求発行先からの応答通知を待機し、受け付けると、Ｓ２００２に進む。Ｓ２００２において、割込み処理選択部１７１０は、ＣＰＵ周辺回路シミュレータ１０５へ実行再開を指示する。
【０１１６】
一方、割込みシミュレーション部１７０８においては、Ｓ１８０４でのソフトウェア割込み要求発行処理の後に、Ｓ２００３に示すソフトウェア割込みハンドラ１７０２からの応答待ちが追加される。さらに、その後のＳ２００４に示すソフトウェア割込みハンドラ１７０２への割込み実行指示、割込み処理選択部への割込み受付通知が追加されている。また、割込みシミュレーション部１７０９においては、処理開始（割込み要求受付）直後にＳ２００５に示す割込み処理選択部１７１０への割込み受付通知が追加されている。
【０１１７】
さらに、ＣＰＵ周辺回路シミュレータ１０５には、割込みシミュレーション実行管理部１７０４への割込み要求後、割込みシミュレーション実行管理部１７０４からの応答を待つ機能が追加されている。ソフトウェア割込みハンドラ１７０２には、割込みシミュレーション部１７０８へのソフトウェア割込み通知発行と割込みシミュレーション部１７０８からの処理内容指示待ちが追加されている。
【０１１８】
＜動作シーケンス＞
次に、図２１を参照して、本実施形態におけるターゲット割込み動作シミュレーションの動作シーケンスについて説明する。ここでは、主に図１９との違いについて説明する。具体的には、ＣＰＵ周辺回路シミュレータ１０５が割込み要求発行後に割込み処理選択部１７１０からの実行再開通知を受けるまで処理を停止しているところである。そして、割込み要求発生時に割込み実行可能な場合には、ソフトウェア割込みハンドラ１７０２によるターゲット割込み動作実行開始に同期して割込み処理選択部１７１０からの実行再開通知が行われる。一方、割込み要求発生時に割込み実行不可能な場合には、直ちに割込み処理選択部１７１０からの実行再開通知が行われる。
【０１１９】
以上説明したように、本実施形態では、ＣＰＵ周辺回路シミュレータ１０５におけるターゲット割込み要求発生時に当該割込みが直ちに実行可能な場合にターゲット割込みハンドラの実行開始とＣＰＵ周辺回路シミュレータのシミュレーション動作を同期させる。これにより、ターゲット割込みの模擬動作の模擬時間上の実行タイミング精度を向上させることができる。
【０１２０】
さらに、本実施形態において、割込みシミュレーション部１７０８が、ソフトウェア割込みハンドラ１７０２からの応答を受信後のソフトウェア割込みハンドラ１７０２への割込み実行指示のタイミングで、割込み対象の割込み番号を通知する処理を設ける。ソフトウェア割込みハンドラ１７０２は、通知された割込み番号に対する割込み模擬動作をターゲット割込み模擬部１７０７に指示する処理を設ける。これにより、ソフトウェア割込みハンドラ１７０２をターゲット割込みの種別に関係なく共通化できる。従って、ターゲット割込みの種別数がソフトウェア割込みの種別数よりも多い場合でもターゲット割込みのシミュレーションに対応できる。
【０１２１】
＜第６の実施形態＞
以下では、図２２及び図２３を参照して、本発明の第６の実施形態について説明する。上記第５の実施形態では、ＣＰＵ周辺回路シミュレータ１０５におけるターゲット割込み要求発生時とターゲット割込みハンドラの実行開始時との模擬時間上のタイミング精度向上を図っている。しかしながら、ＣＰＵ周辺回路シミュレータ１０５におけるターゲット割込み要求発生時とターゲット命令実行部１０８の処理との同期が図られていない。このため、ＣＰＵ周辺回路シミュレータ１０５におけるターゲット割込み要求発生時に当該割込みが実行可能であったにもかかわらず、ターゲット割込みハンドラの実行開始時までにターゲットＣＰＵの制御状態が変化してしまう。これにより当該割込みが禁止状態になった場合、ターゲットＣＰＵの制御状態が割込み禁止であるにもかかわらず、割込み処理が実行されてしまうことになる。そこで、本実施形態では、ソフトウェア割込みによるターゲット割込み模擬処理の実行開始前に改めてターゲットＣＰＵの制御状態を確認することで、上記問題の発生を防止する。なお、本実施形態におけるシミュレータの機能構成は図１７と同じである。
【０１２２】
＜処理フロー＞
次に、図２２を参照して、本実施形態における割込みシミュレーション実行管理部１７０４の処理フローについて説明する。本実施形態の割込みシミュレーション実行管理部１７０４では、上記第５の実施形態の処理フロー（図２０）に対しての差異を主に説明する。
【０１２３】
まず、割込みシミュレーション部１７０８において、Ｓ２００３に示すソフトウェア割込みハンドラ１７０２からの応答待ちの後にＳ２２０１の判定が追加される。Ｓ２２０１において、割込みシミュレーション部１７０８は、割込み実行可否判断部１７０５による割込み実行可否判断結果を確認し、実行可の場合にはＳ２００４に進み、実行不可の場合にはＳ２２０２に進むように、処理を分岐させる。Ｓ２２０２において、割込みシミュレーション部１７０８は、ソフトウェア割込みハンドラ１７０２に未処理を通知し、割込み処理選択部１７１０に割込み不可を通知する。また、割込み処理選択部１７１０においては、Ｓ２００１における割込みシミュレーション実行要求先からの応答待ち処理において、割込み不可通知を受けた場合に処理をＳ１８０３の割込みシミュレーション部１７０９への実行要求発行に進む分岐が追加される。なお、割込みシミュレーション部１７０９は、上記第５の実施形態の処理フローと同じである。
【０１２４】
＜動作シーケンス＞
次に、図２３を参照して、ターゲット割込み動作シミュレーションの動作シーケンスについて説明する。ここでは、割込みシミュレーション部１７０８がソフトウェア割込み要求を発行した後にターゲット命令実行部１０８で割込み禁止指定が行われることによって、ターゲットＣＰＵの制御状態が割込み許可状態から割込み禁止状態に変化している。そして、割込みシミュレーション部１７０８は、ソフトウェア割込みハンドラ１７０２からのソフトウェア割込み通知を受けた時点で割込み実行可否判断部１７０５による割込み実行可否判断結果を確認する。割込み実行不可である結果を得ると、ソフトウェア割込みハンドラ１７０２に未処理を通知し、割込み処理選択部１７１０に割込み不可を通知する。そして、割込み処理選択部１７１０は、割込み不可通知を受けて、割込みシミュレーション部１７０９に割込みシミュレーションの実行要求を発行する。その後の割込みシミュレーション部１７０９の処理は、上記第５の実施形態と同様である。
【０１２５】
以上説明したように、本実施形態によれば、ターゲット割込みハンドラの実行開始直前のＣＰＵ制御状態における割込み実行可否判断を行う。これにより、ＣＰＵ周辺回路シミュレータ１０５におけるターゲット割込み要求発生時から割込み動作を模擬するまでの間にターゲットＣＰＵの制御状態が変化した場合でも、ターゲット割込みの動作を正確に模擬することができる。
【０１２６】
＜第７の実施形態＞
以下では、図２４乃至図３０を参照して、本発明の第７の実施形態について説明する。上記第４〜第６の実施形態では、同時に複数の割込み要求が発生した場合を考慮していない。そこで、本実施形態においては、割込みシミュレーション実行管理部１７０４を複数の割込み要求の同時発生に対応できるように構成する。図２４は、本実施形態におけるシミュレータの機能構成を示す。上記第４乃至第６の実施形態における図１７の構成に対して、割込みシミュレーション部１７０８に、実行待ち割込み情報２４０１を保持する領域を設けている。さらに、割込みシミュレーション部１７０９が、割込みシミュレーション実行部２４０２と割込み要求管理部２４０３で構成されていることが異なる。
【０１２７】
＜処理フロー＞
次に、図２５を参照して、本実施形態における割込みシミュレーション部１７０８の処理フローについて説明する。なお、図２２に示す割込みシミュレーション部１７０８の処理と同様の処理は同様のステップ番号を付し、説明を省略する。Ｓ２５０１において、割込みシミュレーション部１７０８は、ソフトウェア割込みハンドラ１７０２からのソフトウェア割込み通知受信後、実行待ち割込みの有無のチェックを行う。実行待ち割込みが有る場合にはＳ２５０２以降の割込みシミュレーション実行に処理を進める。一方、実行待ち割込みがない場合にはＳ２５０６に進み、ソフトウェア割込みハンドラ１７０２に終了を指示して、処理を終了する。ここで、実行待ち割込みは、実行待ち割込み情報２４０１に保持している情報であり、割込み処理選択部１７１０からの割込みシミュレーション実行指示に対して割込みシミュレーションが実行されるまでの間、指定された割込み番号が保持される。また、割込みシミュレーションの実行開始時点で”無し”（存在しない割込み番号等で実行待ち割込みがないことを示す値）に設定される。
【０１２８】
Ｓ２５０２において、割込みシミュレーション部１７０８は、割込み処理実行開始に際して実行待ち割込み情報２４０１を”無し”に設定する。続いて、Ｓ１８０１の判定後、割込み実行不可の場合にはＳ２２０１に進み、その後処理を終了する。また、Ｓ１８０１で割込み実行可の場合にはＳ２００４の処理の後、Ｓ２５０３において、割込みシミュレーション部１７０８は、ソフトウェア割込みハンドラからの実行結果通知を待つ。ここで、終了通知未受信の間、Ｓ２５０４で割込み処理選択部１７１０からの割込みシミュレーション実行指示の有無をチェックし、実行指示があればＳ２５０５で、指定された割込み番号を実行待ち割込み情報２４０１に保持する。
【０１２９】
ここで、割込み処理選択部１７１０からの割込みシミュレーション実行指示受信後は、割込みシミュレーション部１７０８での割込みシミュレーション開始まではＣＰＵ周辺回路シミュレータ１０５のシミュレーションは停止される。したがって、Ｓ２５０３でソフトウェア割込みハンドラからの実行結果通知を待つ間に２つ以上の割込み要求が発生することはない。そして、Ｓ２５０３でソフトウェア割込みハンドラからの実行終了通知を受けるとＳ２５０１に戻る。
【０１３０】
続いて、図２６を参照して、本実施形態における割込みシミュレーション部１７０９における割込みシミュレーション実行部２４０２及び割込み要求管理部２４０３の処理フローについて説明する。割込みシミュレーション部１７０９は、割込みシミュレーション実行部２４０２と割込み要求管理部２４０３で構成され、互いに連携して処理を実行する。
【０１３１】
まず、Ｓ２６０１において、割込み要求管理部２４０３は、割込み処理選択部１７１０からの割込みシミュレーション実行指示を受けると、指定された割込み番号を新規要求として割込み要求リストに追加する。続いて、Ｓ２６０２において、割込み要求管理部２４０３は、割込みシミュレーション実行部２４０２に新規割込み要求発生を通知する。その後、Ｓ２６０３において、割込み要求管理部２４０３は、割込み処理選択部１７１０に割込み受付を通知して、割込み要求受付処理を終了する。
【０１３２】
割込みシミュレーション実行部２４０２は、割込み要求管理部２４０３から新規割込み要求発生を受けると処理を開始する。Ｓ１８０５乃至Ｓ１８０７は図２２の割込みシミュレーション部１７０９の処理と同じである。その後、Ｓ２５０３において、割込みシミュレーション実行部２４０２は、割込み要求管理部２４０３に対して、割込み処理実行を通知する。その後、Ｓ２６０４において、割込み要求管理部２４０３は、割込みシミュレーション実行部２４０２からの割込み処理実行通知に応じて、割込み要求リストから通知された割込み番号を削除する。なお、割込み要求管理部２４０３から新規割込み要求発生は、１つの割込み要求に対する処理が残留している間に複数発生する可能性がある。割込みシミュレーション実行部２４０２は同時に発生している割込み要求の１つずつに処理が割り当てられる。
【０１３３】
＜動作シーケンス＞
次に、図２７乃至図３０を参照して、本実施形態におけるターゲット割込み動作のシーケンスについて説明する。図２７は、２種類の割込み種別の割込み要因が、何れの割込み要因についても割込み実行可能状態で同時に発生した場合のシーケンスを示す。図２８は、２種類の割込み種別の割込み要因が、何れの割込み要因についても割込み実行不可能状態で同時に発生した場合のシーケンスを示す。（ａ）が割込み要求の発生順に割込み許可状態に変化した場合を示し、（ｂ）が割込み要求の発生と逆順に割込み許可状態に変化した場合を示す。図２９は、割込み許可状態の割込み要因と割込み不許可状態の割込み要因が存在する状態での複数の割込み要因が発生した場合を示す。（ａ）は、割込み許可状態の割込要因に対する割込み処理実行中に割込み不許可状態の割込み要因が発生し、その後割込み許可状態に変化した場合を示す。（ｂ）は、割込み不許可状態の割込み要因が発生し、割込み処理保留中に、割込み許可状態の割込み要因が発生した場合を示す。図２７乃至図２９に示すように、各種パターンで同時に複数の割込み要因が発生した場合でも、正確なターゲット割込みの模擬が可能である。
【０１３４】
図３０は、割込み不許可状態の割込み要因が発生した後に割込み許可状態の割込み要因が発生し、割込みシミュレーション部１７０８のソフトウェア割込み要求発行と、先に発生した割込み要因が許可状態に変化する実行イベントが重なって発生した場合を示す。（ａ）は、実行イベントコールバック関数１７０３実行中に、割込みシミュレーション部１７０８によるソフトウェア割込み要求が発行された場合を示す。（ｂ）は、割込みシミュレーション部１７０８によるソフトウェア割込み要求発行後で、ターゲット命令実行部１０８からソフトウェア割込みハンドラ１７０２に処理が移行する前に、実行イベントコールバック関数１７０３の実行が開始された場合を示す。いずれの場合においても、実行イベントコールバック関数実行時にソフトウェア割込みを禁止状態に設定していることにより、各々のターゲット割込みハンドラ実行が順次行われることが分かる。なお、これらターゲット割込みハンドラ実行の模擬時間上のタイミング差は０である。従って、ターゲットコードから見た割込み発生タイミングにずれは生じない。
【０１３５】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2015133083.tif 000003
【図２】
2015133083.tif 000004
【図３】
2015133083.tif 000005
【図４】
2015133083.tif 000006
【図５】
2015133083.tif 000007
【図６】
2015133083.tif 000008
【図７】
2015133083.tif 000009
【図８】
2015133083.tif 000010
【図９】
2015133083.tif 000011
【図１０】
2015133083.tif 000012
【図１１】
2015133083.tif 000013
【図１２】
2015133083.tif 000014
【図１３】
2015133083.tif 000015
【図１４】
2015133083.tif 000016
【図１５】
2015133083.tif 000017
【図１６】
2015133083.tif 000018
【図１７】
2015133083.tif 000019
【図１８】
2015133083.tif 000020
【図１９】
2015133083.tif 000021
【図２０】
2015133083.tif 000022
【図２１】
2015133083.tif 000023
【図２２】
2015133083.tif 000024
【図２３】
2015133083.tif 000025
【図２４】
2015133083.tif 000026
【図２５】
2015133083.tif 000027
【図２６】
2015133083.tif 000028
【図２７】
2015133083.tif 000029
【図２８】
2015133083.tif 000030
【図２９】
2015133083.tif 000031
【図３０】
2015133083.tif 000032