(57)【要約】【課題】動作周波数が高いターゲットＣＰＵのシミュレーションにおいても、シミュレーション速度の低下を防ぐことができるソフトウェア検証装置を提供する。【解決手段】周波数管理部３４０により設定されるＣＰＵシミュレータ３１０の動作周波数とタイマ管理部３３７による割り込みタイミングの設定を変更することにより、ＣＰＵシミュレータの動作周波数を実際の装置で用いられるＣＰＵの動作周波数より低い周波数に切り替え可能とする。【選択図】図１
2019121068.tif 000002
【特許請求の範囲】
【請求項１】
検証対象のターゲットプログラムを実行するターゲットＣＰＵの動作をシミュレーションするＣＰＵシミュレータと、
前記ＣＰＵシミュレータの動作周波数を、複数の周波数に切り替え可能に設定する周波数設定手段と、
前記ターゲットＣＰＵの制御対象装置の動作をシミュレーションする少なくとも一つ以上の装置シミュレータと、
前記ＣＰＵシミュレータと、前記装置シミュレータを一定の同期間隔で同期させる同期手段と、
前記周波数設定手段の設定と前記ターゲットＣＰＵの設定に応じて、前記ターゲットＣＰＵに対するタイマ部の動作をシミュレーションするタイマシミュレータと、
前記動作周波数の切り替えによらず、前記ターゲットＣＰＵに対するタイマ動作が一定になるよう前記タイマシミュレータを制御する制御手段と、
を備えたことを特徴とするソフトウェア検証装置。
【請求項２】
前記ＣＰＵシミュレータの負荷を判定する負荷判定手段を有し、
前記負荷判定手段の判定結果に基づいて、前記制御手段は、前記ＣＰＵシミュレータの動作周波数を切り替えることを特徴とする請求項１に記載のソフトウェア検証装置。
【請求項３】
前記ターゲットプログラムは、複数のタスクを処理可能なリアルタイムＯＳと該リアルタイムＯＳ上で動作する複数のタスクを含み、
実行中の前記タスクの処理が一巡するシミュレータ空間内の仮想実行時間を測定する測定手段を有し、
前記負荷判定手段は、前記測定手段によって測定された前記仮想実行時間に基づいて、前記ＣＰＵシミュレータの負荷を判定することを特徴とする請求項２に記載のソフトウェア検証装置。
【請求項４】
前記仮想実行時間が第１の閾値より長い場合に、前記負荷判定手段は、前記ＣＰＵシミュレータの負荷が高いと判定し、
前記制御手段は、前記ＣＰＵシミュレータの動作周波数をより高い周波数に切り替えることを特徴とする請求項３に記載のソフトウェア検証装置。
【請求項５】
前記第１の閾値は、前記同期間隔の５０％であることを特徴とする請求項４に記載のソフトウェア検証装置。
【請求項６】
前記仮想実行時間が第２の閾値より短い場合に、前記負荷判定手段は、前記ＣＰＵシミュレータの負荷が低いと判定し、
前記制御手段は、前記ＣＰＵシミュレータの動作周波数をより低い周波数に切り替えることを特徴とする請求項３乃至５のいずれか１項に記載のソフトウェア検証装置。
【請求項７】
シミュレーションの実行情報を所定のタイミングで保存する保存手段と、
前記保存手段に保存された実行情報に基づいて、該実行情報が保存されたタイミングからシミュレーションを再開させる再開手段とを有し、
前記再開手段は、前記制御手段によって切り替えられた動作周波数によって、シミュレーションを再開することを特徴とする請求項２乃至６のいずれか１項に記載のソフトウェア検証装置。
【請求項８】
前記ＣＰＵシミュレータの負荷を判定する負荷判定手段と、
前記負荷判定手段によって、前記ＣＰＵシミュレータの負荷が高いと判定した場合に、
警告又はエラーを報知する報知手段とを有することを特徴とする請求項１に記載のソフトウェア検証装置。
【請求項９】
前記警告を報知してシミュレーションを継続するか、前記エラーを報知してシミュレーションを中断するかをユーザーが選択する処理選択手段を有することを特徴とする請求項８に記載のソフトウェア検証装置。
【請求項１０】
前記ＣＰＵシミュレータによるシミュレーションの実行中に、前記ＣＰＵシミュレータと前記装置シミュレータとの間の信号に変化があった場合に前記制御手段は、前記ＣＰＵシミュレータの動作周波数をより高い周波数に切り替えることを特徴とする請求項１に記載のソフトウェア検証装置。
【請求項１１】
前記周波数設定手段によって設定される周波数をユーザーが設定するユーザー設定手段を有することを特徴とする請求項１に記載のソフトウェア検証装置。
【請求項１２】
検証対象のターゲットプログラムを実行するターゲットＣＰＵの動作をシミュレーションするＣＰＵシミュレータと、
前記ＣＰＵシミュレータの動作周波数を、複数の周波数に切り替え可能に設定する周波数設定手段と、
前記ターゲットＣＰＵの制御対象装置の動作をシミュレーションする少なくとも一つ以上の装置シミュレータと、
前記周波数設定手段の設定と前記ターゲットＣＰＵの設定に応じて、前記ターゲットＣＰＵに対するタイマ部の動作をシミュレーションするタイマシミュレータと、
前記タイマシミュレータに応じて、前記ＣＰＵシミュレータと前記装置シミュレータを同期させる同期手段と、
前記動作周波数の切り替えに応じて、前記ターゲットＣＰＵに対するタイマ動作を変更するように前記タイマシミュレータを制御する制御手段と、
を備えたことを特徴とするソフトウェア検証装置。
【請求項１３】
請求項１乃至１２のいずれか１項に記載のソフトウェア検証装置としてコンピュータを機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御ソフトウェアを検証するソフトウェア検証装置に関するものである。特に、コンピュータ上で独立プロセスとして動作する複数のアプリケーションを連携動作させ、１つのシステムとして動作させる情報処理装置及びその制御方法に関するものである。
【背景技術】
【０００２】
ソフトウェアは、不正な動作を行っていないかテストをし、デバッグ作業を経てリリースされる。特許文献１には、複数のプロセスを連携させた機器制御シミュレーションの方法が提案されている。複数のプロセスとは、装置を制御する中央処理装置（ＣＰＵ）のＣＰＵシミュレータ（シミュレーションデバッガ）、機器モデルのシミュレータ、その他、各種装置構成のシミュレータやシミュレーションを支援するシステムを受け持つアプリケーション等を示す。以下では、これらのアプリケーションをシミュレータアプリケーションと称する。また、シミュレーションを行うコンピュータ（以降ではホストＰＣと称する）において、シミュレータアプリケーションはおのおの別のプロセスとして実行され、これらの複数プロセスの連携動作として、シミュレーションシステムが構築されている。
【０００３】
次に特許文献２ではこの様なシステムにおいての同期処理について記載されている。各シミュレータアプリケーションが制御対象装置やターゲットＣＰＵの所定時間分の模擬動作を行うのに実際に要した時間は、その所定時間とは異なることになる。以後、各シミュレータアプリケーションの模擬動作に要した時間を仮想時間と呼び、模擬対象の装置における時刻を仮想時刻と呼ぶ。また、ユーザーから見た模擬動作を行うのに実際に要した時間を現実時間と呼び、両者を区別する。
つまり、例えば、移動速度が時速１０キロメートルである物体の動作をシミュレーションするものとする。この場合、シミュレータアプリケーションは、物体の１０キロメートル分の移動をシミュレーションすると、そのシミュレーションに要した現実時間に拘わらず、仮想時間を１時間だけ進行させることになる。
ここで、ＣＰＵシミュレータと他のシミュレータアプリケーションの様に複数のシミュレータを有するシステムにおいては、シミュレータ毎に仮想時間の進行度合いが異なる。つまり、仮想時間でＡミリ秒分の模擬動作を行うために実際に必要な現実時間が、ＣＰＵシミュレータと他のシミュレータアプリケーションでは異なることが多い。よって、各シミュレータアプリケーション間の仮想時刻の進行を同期させる同期処理が必要となる。
このため特許文献２では、仮想時間軸での所定時間を同期単位時間として、各シミュレータに同期単位時間分の模擬動作を順次実行させることにより同期処理を行っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−３３９０２９号公報
【特許文献２】特開２００６−１７２１２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術においては、以下に記載する課題がある。このようなシミュレータシステムでは、あらかじめ決められた仮想時間上の１単位時間間隔で同期させている。この時シミュレーションシステムはもっとも遅いアプリケーションに合わせて同期させている。たとえば、仮想時間の１単位時間が１ｍｓとする。この時アプリケーションＡが仮想時間１ｍｓの処理を行うのに現実時間で３ｍｓかかり、アプリケーションＢが仮想時
間の１単位時間の処理を行うのに現実時間で５ｍｓかかった時、アプリケーションＢの方が（５−３）＝２ｍｓ多くの現実時間がかかっている。この場合、アプリケーションＡはアプリケーションＢが終了するまでの現実時間で２ｍｓウェイトしている。反対にアプリケーションＡが仮想時間１ｍｓの処理を行うのに現実時間で７ｍｓかかり、アプリケーションＢが仮想時間の１単位時間の処理を行うのに現実時間で４ｍｓかかった時、アプリケーションＡの方が（７−４）＝３ｍｓ多くの現実時間がかかっている。この場合、アプリケーションＢはアプリケーションＡが終了するまでの現実時間で３ｍｓウェイトしている。
通常、ＣＰＵシミュレータが装置制御ソフトウェアの命令単位で模擬するため、最も模擬する処理が多く現実処理時間が長くなることが多い。このため、シミュレーションシステムの速度はＣＰＵシミュレータの速度により決まることが多い。
昨今、機器に使用される模擬対象のＣＰＵも高速化され動作周波数も高くなってきており、これに伴いＣＰＵシミュレータが仮想時間上の１単位時間に模擬する処理も大幅に増加している。たとえば同一のＣＰＵが２０ＭＨｚで動作していた時と４０ＭＨｚで動作した時では仮想の同期単位時間当たりのＣＰＵ処理量は２倍となる。しかしながら、ホストＰＣの性能が向上していない場合、ホストＰＣが同じ現実時間で模擬できるＣＰＵシミュレータ処理量は模擬対象ＣＰＵの動作周波数にかかわらず変わらない。したがって、模擬対象のＣＰＵの動作周波数が２倍になると、同じ仮想時間をシミュレートするためにかかる現実時間は２倍必要になる。このように、ＣＰＵシミュレータが、模擬対象のＣＰＵの実際の動作周波数に従ってシミュレーションすると、模擬対象のＣＰＵの動作周波数が高くなるのに伴い、シミュレーションに要する現実の時間が長くなり、シミュレーション速度が遅くなっていた。
【０００６】
本発明の目的は、動作周波数が高いＣＰＵのシミュレーションにおいても、シミュレーション速度の低下を防ぐことができるソフトウェア検証装置を提供することである。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明に係るソフトウェア検証装置は、
検証対象のターゲットプログラムを実行するターゲットＣＰＵの動作をシミュレーションするＣＰＵシミュレータと、
前記ＣＰＵシミュレータの動作周波数を、複数の周波数に切り替え可能に設定する周波数設定手段と、
前記ターゲットＣＰＵの制御対象装置の動作をシミュレーションする少なくとも一つ以上の装置シミュレータと、
前記ＣＰＵシミュレータと、前記装置シミュレータを一定の同期間隔で同期させる同期手段と、
前記周波数設定手段の設定と前記ターゲットＣＰＵの設定に応じて、前記ターゲットＣＰＵに対するタイマ部の動作をシミュレーションするタイマシミュレータと、
前記動作周波数の切り替えによらず、前記ターゲットＣＰＵに対するタイマ動作が一定になるよう前記タイマシミュレータを制御する制御手段と、
を備えたことを特徴とする。
【０００８】
上記目的を達成するため、本発明に係るソフトウェア検証装置は、
検証対象のターゲットプログラムを実行するターゲットＣＰＵの動作をシミュレーションするＣＰＵシミュレータと、
前記ＣＰＵシミュレータの動作周波数を、複数の周波数に切り替え可能に設定する周波数設定手段と、
前記ターゲットＣＰＵの制御対象装置の動作をシミュレーションする少なくとも一つ以上の装置シミュレータと、
前記周波数設定手段の設定と前記ターゲットＣＰＵの設定に応じて、前記ターゲットＣ
ＰＵに対するタイマ部の動作をシミュレーションするタイマシミュレータと、
前記タイマシミュレータに応じて、前記ＣＰＵシミュレータと前記装置シミュレータを同期させる同期手段と、
前記動作周波数の切り替えに応じて、前記ターゲットＣＰＵに対するタイマ動作を変更するように前記タイマシミュレータを制御する制御手段と、
を備えたことを特徴とする。
【０００９】
また、本発明は、上記ソフトウェア検証装置としてコンピュータを機能させることを特徴とするプログラムである。
【発明の効果】
【００１０】
本発明によれば、動作周波数が高いＣＰＵのシミュレーションにおいて、より低い動作周波数でＣＰＵシミュレーションを行うことで、ＣＰＵシミュレーターの負荷を低減し、シミュレーション速度の低下を抑え高速なシミュレーションを実行できる。
【図面の簡単な説明】
【００１１】
【図１】実施例１，２の装置制御ソフトウェア検証装置の機能構成図
【図２】実施例の制御装置ソフトウェア検証装置の概略構成図
【図３】実施例１のＣＰＵ動作周波数の違いによる仮想時間軸の処理タイミングの図
【図４】実施例１のＣＰＵ動作周波数の違いによる仮想時間軸の必須処理量の図
【図５】実施例１のＣＰＵ動作周波数の違いによる現実時間軸の処理タイミングの図
【図６】実施例１の別プロセス動作のシミュレータ間の処理タイミングの図
【図７】実施例２のタスク一巡時間に関する図
【図８】実施例２のタスク実行状態と仮想同期間隔に関する図
【図９】実施例２のＣＰＵ動作周波数の違いと外部信号のタイミング図
【図１０】実施例２のＣＰＵ動作周波数制御のタイミング図
【図１１】実施例３の装置制御ソフトウェア検証装置の機能構成図
【図１２】実施例３のＣＰＵ動作周波数制御のタイミング図
【図１３】実施例４の別プロセス動作のシミュレータ間の処理タイミングの図
【発明を実施するための形態】
【００１２】
以下に図面を参照して、この発明を実施するための形態を、実施例に基づいて例示的に詳しく説明する。本発明の趣旨を逸脱しない範囲内で実施例の構成を適宜変形したり変更したりすることにより得られる構成も本発明に含まれる。以下の複数の実施例の構成を適宜組み合わせて得られる構成も、本発明に含まれる。また、各実施例における機能および処理はそれぞれ単一のコンピュータ装置で実現してもよいし、必要に応じた複数のコンピュータ装置による分散処理によって実現するようにしてもよい。複数のコンピュータ装置で構成される場合は、互いに通信可能なようにＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）などで接続されている。あるいは、機能および処理の一部をクラウドコンピューティングによって実現してもよい。
【実施例１】
【００１３】
本発明の実施例１は、以下のような連携シミュレーションシステムである。この連携シミュレーションシステムは、機器制御等のＣＰＵを模擬するＣＰＵシミュレータと個々が独立プロセスとして動作する少なくとも一つ以上の外部装置シミュレータ等のアプリケーションソフトを連携させて１つのシステムとして動作させるものである。かかるシステムにおいて、装置を制御するＣＰＵのソフトウェアの検証を目的としたシミュレーションシステムを実行する際、ＣＰＵシミュレータの設定周波数及びタイマ管理部の設定を切り替える。これにより、ユーザーは高精度で動作するが、シミュレーション速度が遅くなるシミュレーションモードと、非常に高速に動作するが、やや正確性に劣るシミュレーション
モードを用途に合わせて容易に切り替えて使用できる。
なお、実施例１に係るシミュレーションシステムである装置制御ソフトウェア検証装置（以下、単に「ソフトウェア検証装置」という。）は、コンピュータシステムで実行されるプログラムとして実現されるものである。
【００１４】
図２は、本実施例に係るシミュレーションを実現するコンピュータシステムの概略構成例を示す図である。なお、このコンピュータシステムにより本発明のプログラム連携シミュレーションシステムが実現される。本発明のプログラム連携シミュレーションシステムを実現するコンピュータシステムは図２に例示したものに限られず、複数のコンピュータから構成されるものであってもよい。
本体部２０２のハードディスク２０８には、ソフトウェア検証装置の各機能を実現するためのプログラムが格納される。中央処理装置（ＣＰＵ）２０６は、プログラム及び各種データを主記憶装置２０７にロードして実行することで、コンピュータシステム２０１はソフトウェア検証装置として動作する。なお、表示装置２０３は、本体部２０２からの指示により画面表示を行う。また、キーボード２０４は、このコンピュータシステム２０１にユーザの指示や文字情報を入力するためのものである。さらに、マウス２０５は、表示装置２０３上の任意の位置を指定することによりその位置に表示されていたアイコン等に応じた指示を入力するためのものである。
【００１５】
図１は、本実施例によるソフトウェア検証装置３６０の機能ブロック図である。ＣＰＵシミュレータ３１０は、ターゲットプログラムとしての制御ソフトウェアを実行してターゲットＣＰＵの動作を模擬するものである。また、外的要因シミュレータＡ３５０及び外的要因シミュレータＢ３５２は、ペリフェラル、つまり、ターゲットＣＰＵに制御される周辺機器や機能ブロックの機能の動作を模擬するものである。さらに、ソフトウェア検証装置３６０は、ＣＰＵシミュレータ３１０と外的要因シミュレータ３５０及び３５２との間で送受信される情報の伝達を仲介して、これらを連携動作させる連携処理部３３０を備えている。なお、ターゲットＣＰＵとは、コンピュータシステム２０１に搭載されているＣＰＵ２０６ではなく、制御ソフトウェアが実際に使用される装置のＣＰＵである。また、図１において、外的要因シミュレータ３５０及び３５２の数を２つとしているがこれは例示であり、接続できる外的要因シミュレータの数は、任意に選択できる。加えて、本実施例においては、外的要因シミュレータ３５０及び３５２をＣＰＵシミュレータ３１０とは別プロセスとしているが、これも例示であり、同一プロセスとしてもよい。なお、本実施例では、ＣＰＵシミュレータ３１０と連携処理部３３０を同一プロセスで動作させ、連携処理部３３０と外的要因シミュレータ３５０および３５２を別プロセスで動作させる。これは、ＣＰＵシミュレータ３１０のシミュレーション精度に比べ、外的要因シミュレータ３５０および３５２のシミュレーション精度が低いためである。ソフトウェア検証装置３６０は制御ソフトウェアの検証装置であるため、ＣＰＵシミュレータ３１０は、検証対象のプログラムコードを１語１語解釈するような高精度でソフトウェア動作を模擬する必要がある。一方、外的要因シミュレータ３５０及び３５２は、ＣＰＵシミュレータ３１０が参照するハードウェア動作を模擬するものであるものの、ハードウェアの動作結果については、高い精度が要求されない場合が多い。よって、ＣＰＵシミュレータ３１０と比べると、外的要因シミュレータ３５０及び３５２は圧倒的に低いシミュレーション精度で実行される。これが、ＣＰＵシミュレータ３１０と外的要因シミュレータ３５０及び３５２のシミュレーション精度が違う理由である。
【００１６】
ＣＰＵシミュレータ３１０の命令実行部３１１は、検証対象である制御ソフトウェアを実行して、ターゲットＣＰＵのメモリや装置制御用のレジスタに値の読み書きを行う。情報格納部３１６は、ターゲットＣＰＵのアドレス空間をＣＰＵシミュレータ上で模擬する仮想アドレス空間情報３１７を有している。前記仮想アドレス空間（以下、単に仮想アドレス空間と記す）には、ターゲットＣＰＵの主メモリだけではなく、制御対象のハードウ
ェアへの制御信号に対応する値を書き込み、ハードウェアの状態を示す値を保持するレジスタも含まれている。さらに、命令実行部３１１は、制御ソフトウェアのアクセス命令に従い、仮想アドレス空間の対応領域にアクセスする。
命令実行部３１１は、特定の命令の実行時、Ｉ／Ｆ部３１２経由で連携処理部３３０に、当該特定命令の実行をイベントとして通知する。ここで、特定の命令とは、例えば、仮想アドレス空間へのライトメモリアクセス、及びリードメモリアクセス処理等である。なお、命令実行部３１１は、イベント通知後、連携処理部３３０から再開指示を受け取るまで、模擬処理を停止する。
外的要因シミュレータ３５０および３５２は、自身のアプリケーションで扱う信号の値の参照、または更新の実行時に、連携処理部３３０へアクセス通知を行う。具体的には値参照時にはリードアクセス、値の更新時にはライトアクセスの通知である。なお、外的要因シミュレータ３５０および３５２は、自身のアプリケーションで扱う信号の信号識別子と値とを関連付けて記憶している。
【００１７】
連携処理部３３０は、仮想アドレス空間の値をＣＰＵシミュレータ３１０と、外的要因シミュレータ３５０及び３５２とで共有するための機能である。
周波数管理部３４０はＣＰＵシミュレータ３１０の動作周波数を設定するものである。ここで、周波数管理部３４０は周波数設定手段に対応する。ＣＰＵシミュレータ３１０の命令実行部３１１では実行した命令のクロック数を把握することができる。したがってＣＰＵシミュレータ３１０は指定された周波数設定と、命令実行部３１１で実行したクロック数を用いることで、命令実行に要した時間を正確に知ることができる。しかしながら、装置制御ソフトウェア３００から見ると、命令実行部３１１で処理に要した時間は一般的には把握していない。そのため、ＣＰＵシミュレータ３１０はＣＰＵシミュレータ３１０の外にタイマ部を要するのが一般的である。本実施例では連携処理部３３０にタイマ部を模擬したタイマ管理部３３７を設けている。これはタイマモジュールには高精度のシミュレーションを必要とし、先に述べたとおり同一プロセスで実行される連携処理部３３０に設けた方が好ましいためである。タイマ管理部３３７は命令実行部３３１より設定されたタイマ設定情報と周波数管理部３４０の周波数情報からタイマ動作を模擬し、ＣＰＵシミュレータ３１０に伝える。具体的にはタイマ管理部３３７は所定間隔でＣＰＵシミュレータ３１０に割り込みタイミングを伝える。装置制御ソフトウェア３００はこのタイマ割り込みによって、装置制御ソフトウェア上の経過時間を判断できる。ここでは、タイマ管理部はタイマシミュレータに対応する。
【００１８】
周波数設定用ユーザーインターフェース３７０はシミュレーションユーザーが動作させたいシミュレーション周波数を選択するものである。周波数設定用ユーザーインターフェース３７０は、本実施例では実際にシミュレーションが動作するＨＷ仕様の４０ＭＨｚとシミュレーションを高速に実行するための２０ＭＨｚをＣＰＵシミュレータの動作周波数として切り替えられるものとする。ここで、周波数設定用ユーザーインターフェースは、ユーザー設定手段に対応する。また、４０ＭＨｚは、より高い周波数、２０ＭＨｚは、より低い周波数に対応する。
【００１９】
次に周波数切り替え前後のシミュレーション動作を説明する。シミュレーションを開始する時、４０ＭＨｚの周波数で動作開始する。シミュレーションが開始されると、前述したように命令実行部３１１と同期管理部３３６は命令単位の高い精度で同期をとりながら装置制御ソフトウェア３００を実行していく。同期管理部は、装置制御ソフトウェア初期化処理をある程度進めた段階でタイマ管理部にタイマ割り込み開始を指示する。タイマ管理部３３７は、タイマ割り込みが許可されると同期管理部３３６の情報により、高い同期精度で命令実行部３３１がどのくらいの処理行ったか、言い換えるとどのくらいの時間が経過したかの情報を正確に把握できる。タイマ管理部３３７はＣＰＵシミュレータの設定した所定時間に到達した時に命令実行部３１１にタイマ割り込みを発行する。命令実行部
３１１はタイマ割り込みを受け取ると、現在の処理を一旦停止してタイマ割り込み処理を優先して行う。以上の動作を繰り返すことで一定間隔でタイマ割り込み処理が行われる。ここで、前述した一定間隔とはシミュレーション空間内での時間であり、シミュレーションシステム３６０の外側、すなわちユーザーから見た実際に経過した時間とは異なる。
機器制御用ソフトウェアでは制御単位時間ごとに機内状態を把握したり、駆動を起動する処理を実行しているものがある。本実施例では制御単位時間に前述のタイマ割り込み間隔を使用している例について説明する。これらの制御単位時間ごとの処理としては制御単位時間毎に必ず処理しなければならない必須処理と（図３の斜線部）、アイドル処理（図３空白部）に分けられる。この時の必須処理の繰り返し動作についてであるが、短い間隔で繰り返し行うことによって、センサーなどの検知やソレノイドの動作は素早く行える。しかしながら機器制御の必要としている時間精度は制御単位時間すなわちタイマ割り込み間隔であり、それ以上に精度を高めることは装置制御上は必ずしも必要ない動作である。すなわちアイドル処理時にほかの制御を行っても装置制御の基本的動作には時間精度の問題はない。
【００２０】
次に周波数切り替えについて説明する。前述したようにＣＰＵシミュレータ３１０では、命令実行部３１１はタイマ割り込み周期を制御単位時間として動作している。この時の制御単位時間と処理の関係を図３の４０ＭＨｚに示す。制御単位時間に対して必須処理は短く２５％程度であり充分余裕がある。
次に２０ＭＨｚ時の動作を説明する。ユーザーが周波数設定用ユーザーインターフェース３７０により、２０ＭＨｚモードを選択すると、周波数管理部３４０へ周波数変更指示が伝わる。周波数管理部３４０はタイマ管理部３３７へ周波数半減を伝える。タイマ管理部３３７は周波数半減を受け取るとタイマを管理し、以下のように動作する。
タイマ管理部３３７は周波数管理部３４０から入力される周波数が半減されるとともに分周比半減の指示を受ける。同じ周波数のクロックの分周比が半分になると、１／２の間隔すなわち２倍の周波数でタイマ割り込みを発行する。また、同じ分周比でクロックの周波数が半分になると、タイマ割り込みの間隔が２倍の時間ですなわち１／２の周波数でタイマ割り込みを発行する。ここで、同期管理部３３６はＣＰＵシミュレータの動作周波数の切り替えによらずタイマ動作が一定となるようにタイマ管理部を制御する制御手段に対応する。
このように動作周波数を半分にし、同時にタイマの分周比を半分にすれば（１／２）×２となり、４０ＭＨｚ時と同じ時間間隔でタイマ割り込みが発行出来る。すなわち４０ＭＨｚで仮想時間２ｍｓ周期で動いていたタイマ割り込みは２０ＭＨｚ動作時に仮想時間２ｍｓ周期で動作する。基本的には命令実行部３１１はタイマ割り込みを用いて時間管理をしている。したがってタイマ割り込みが一定で入ってくれば、正常な動作が行われる。
【００２１】
次に処理能力について説明する。図４に処理量と実行時間の関係を記載する。縦軸が命令実行部３１１の実行処理量、横軸が時間である。実線が４０ＭＨｚで動作させた場合のグラフであり、点線が２０ＭＨｚで動作させた場合のグラフである。グラフの傾きが急なほど単位時間の処理量が多いことになる。ここでは必須処理に注目するため非必須処理は処理量には含めない図としている。
また、ＣＰＵシミュレータ３１０の命令実行部３１１の処理量はその間のクロック数で決定される。したがって、同一処理を行った場合、２０ＭＨｚ動作時は４０ＭＨｚ動作時の倍の時間がかかることとなる。本実施例の周波数変更前の４０ＭＨｚで１０ｍｓかかっていた処理は２０ＭＨｚに変更した場合は１０×（４０／２０）＝２０ｍｓの時間がかかることになる。
【００２２】
変更前後の処理の様子を図４に記載し、両者を比較しながら説明する。
図４はシミュレーション空間内の仮想時間とＣＰＵシミュレータ３１０の命令処理量を示した図である。４０ＭＨｚと２０ＭＨｚでは単位時間当たりのクロック数と周波数が２
倍となっているので同一時間だと２倍の情報量を処理できる。そのため図４においては実線部（４０ＭＨｚ）の上昇の線の傾きが、点線部（２０ＭＨｚ）の２倍になっている。言い換えると点線部の処理は水平になるまで、すなわち必須処理の実行時間は実線部の２倍の時間がかかっている。しかしながら、両者とも必須処理は同期間隔内に充分終了し、同期間隔での必須処理の実行量は４０ＭＨｚと２０ＭＨｚは同じとなる。本実施例では説明のため、必須処理以外は何も実行しないとして説明した。実際にはアイドル処理のように同期間隔レベルの精度では必ずしも必要ではない処理が実行される。具体的には図４のグラフ線が水平なところは何も処理を行っていないのではなくアイドル処理が実行されている。アイドル処理の実行量には４０ＭＨｚ動作時と２０ＭＨｚ動作時には差がある。しかしながら、これまで説明したように周波数を下げても同期間隔での必須処理の処理量には差はなく、アイドル処理の処理量に差があるだけである。同期間隔レベルの精度では問題なくシミュレーションが可能である。
【００２３】
次に、シミュレーションシステムのユーザーから見た、動作周波数の違いによるシミュレーション時間について図５を用いて説明する。
先ほど図４を用いて示したように２０ＭＨｚ動作時と４０ＭＨｚ動作時でも必須処理の処理量はほぼ同じである。また、アイドル処理を含めると４０ＭＨｚ動作時は２０ＭＨｚの２倍の処理量となる。すなわち、２０ＭＨｚ動作時と４０ＭＨｚ動作時はアイドル処理の処理量に違いがあることになる。
ユーザー側から現実時間を基準に見た場合、シミュレーションシステム２０１内の中央処理装置２０６でシミュレーションできるＣＰＵシミュレータの現実単位時間当たりの処理量はＣＰＵシミュレータ３１０の動作周波数設定によらない。従って、シミュレーションシステム２０１内の中央処理装置２０６でシミュレーションできるＣＰＵシミュレータの現実単位時間当たりの処理量は同一スペックのシミュレーションシステム２０１であれば一定である。すなわち仮想単位時間あたりのＣＰＵシミュレータの処理量に比例して、現実処理時間も長くなる。したがって、先に述べたとおりタイマ割り込み間の４０ＭＨｚの処理量は２０ＭＨｚの２倍の処理量のため、現実処理時間も２倍かかることとなる。
図５中の仮想Ｔ６０１、Ｔ６０２、Ｔ６０３は仮想空間内では同一の時刻を示している。また、先に説明した通り、同一の仮想時間での必須処理量は周波数によらず一定であり、総処理量は４０ＭＨｚの方が大きい。つまり、２０ＭＨｚ動作時はアイドル処理を少なくして、現実実行時間を短くしている。
【００２４】
また、これまではＣＰＵシミュレータの処理時間について説明したが、外的要因シミュレータも含めたシミュレーションシステムとしての動作時間について説明する。
前述したとおり、コンピュータシステムでは、ＣＰＵシミュレータと外的要因シミュレータを別プロセスとして実行している。２つのシミュレータは連携処理部３３０によって、設定周期で同期して動作し、ソフトウェア検証装置として構成される。この時のＣＰＵシミュレータと外的要因シミュレータのコンピュータシステム上の中央処理装置（ＣＰＵ）の現実時間軸での実行タイミングは図６のようになる。
連携処理部３３０の同期管理部３３６は同期タイミングＤｐ４０１において、仮想同期間隔Ｔの処理指示をＣＰＵシミュレータと外的要因シミュレータに指示する。ＣＰＵシミュレータと外的要因シミュレータはコンピュータシステム３３０のＯＳ上で別プロセスの処理を同時に開始する。この時、仮想同期間隔Ｔの処理を終えたシミュレータは、もう一方のシミュレータが処理を終えるまで待っている。図６では外的要因シミュレータが先に処理を終え空白部の時間待っている。Ｄｐ４０２でＣＰＵシミュレータが処理Ａ（仮想同期間隔Ｔの処理）を終えると、同期管理部３３６によって、ＣＰＵシミュレータと外的要因シミュレータ間の信号をやり取りして、同期を取る。同期を取ったのち、同期管理部３３６は同期タイミングＤｐ４０２において、仮想同期間隔Ｔの処理指示を再度、ＣＰＵシミュレータと外的要因シミュレータに指示する。以上の動作を繰り返してシミュレーションシステムは動作し、すなわち遅い方のプロセスのシミュレータの実行速度でシミュレー
ションシステムとしての動作時間が決まる。ここで、同期管理部３３６は、同期手段に対応する。
【００２５】
図１から図６までで説明したＣＰＵシミュレータの動作速度はＣＰＵシミュレータの速度によって速度が決まるときの説明であり、外的要因シミュレータの速度が遅い場合には、ＣＰＵシミュレータの動作周波数による効果は表れない。通常、ＣＰＵシミュレータが最も大量のシミュレーションを行うため、最も処理時間がかかり本発明の効果があることが多い。
以上のように行うことで、シミュレーション対象の装置制御ソフトウェア３００の主要な処理を動作させて、シミュレーションを高速に行うシミュレーションシステムが構築できる。
【実施例２】
【００２６】
本実施例ではＣＰＵシミュレータ３１０と別プロセスで動作している外的要因シミュレータ３５０との間でＣＰＵシミュレータ３１０の動作周波数設定を変更した時のシミュレーションシステムの主に同期動作について説明する。なお、本実施例で用いられるシミュレーションシステムは実施例１で使用したシミュレーションシステムとほぼ同じであり、共通な部分の説明は省略する。
通常、装置制御ソフトウェア３００のような、正確な時間管理が求められ、多数の装置を同時に管理するソフトウェアでは、リアルタイムＯＳが使われる。装置制御ソフトウェア３００では、リアルタイムＯＳ上で複数のタスクを同時に制御することで処理可能とし、複数の処理を並行に制御できるようにしている。この時リアルタイムＯＳは複数のタスクを細かい時間ごとに順々に実行することで、高い時間精度の並行処理を実現している。本実施例では、すべての起動中のタスクを同一の優先度で一巡させ、再度初めのタスクから実行するラウンドロビン方式で管理されている。
また、各タスクの実行権の移譲はリアルタイムＯＳが規定時間ごとにタスクの実行権を切り替える場合と、タスク自身が処理の区切りのいいところで判断し、次のタスクへ実行権を移す方式がある。本実施例ではタスク自身が処理の区切りのいいところで判断し、次のタスクへ実行権を移す方式を用いて説明する。
タスク自身が実行権を移すタイミングを判断する方式では、タスクが１回の処理で行う処理量は各タスクの状態によって変化し、実行時間は変化し一定ではない。ここでは上記で述べた、すべてのタスクを一巡する時間をラウンドロビン時間と定義し、以下の説明で使用する。ここで、ラウンドロビン時間が、実行中のタスクの処理が一巡するシミュレータ空間内の仮想実行時間に対応する。
【００２７】
図７は上記のタスクの実行時間変化とそれに伴うラウンドロビン時間の変化を示した図である。図中の四角はタスクを示しており、四角の中の数字はタスクのＩＤ番号である。図７ではタスク１〜５をリアルタイムＯＳで実行している。この時、タスクの処理を一巡するとはタスク１の開始から、タスク５の終了までになり、図ではＴｒ１、Ｔｒ２、Ｔｒ３と三巡している。図中のタスク１〜５を繰り返し処理するたびに処理時間が一定していないため、ラウンドロビン時間Ｔｒ１、Ｔｒ２、Ｔｒ３も繰り返すたびに変化している。
【００２８】
次にアプリケーション間の同期動作について説明する。
連携処理部３３０の同期管理部３３６はシミュレーション空間内の仮想時間を管理している。シミュレーションが開始されると同期管理部３３６は外的要因シミュレータＡ３５０に仮想動作時間Ｔのシミュレーション実行を指示する。なお、ここでは別プロセスで動作している外的要因シミュレータＡ３５０を例に説明するが、同期管理部３３６と同一プロセスで実行されているＣＰＵシミュレータ３１０でも同様に同期管理が行われる。
外的要因シミュレータＡ３５０は実行指示を受け取ると、同時に送られた仮想動作時間Ｔの分シミュレーションを実行し、動作を中断する。また、ＣＰＵシミュレータ３１０も
同様に仮想動作時間Ｔだけ動作し実行を中断する。同期管理部３３６は同期しているすべてのアプリケーションが仮想動作時間Ｔ分の実行を終えて、中断状態になるとアプリケーション間で接続している信号を他のシミュレーターに伝える。すべてのシミュレーター間の信号の伝達が完了すると、同期管理部３３６は再度動作時間と実行指示を同期しているすべてのアプリケーションに送る。ここで仮想動作時間Ｔを固定し、繰り返し動作を継続すると仮想動作時間Ｔの間隔で同期してシミュレーションが実行される。以後この仮想動作時間Ｔの間隔を仮想同期間隔と呼ぶこととする。
【００２９】
図８は仮想同期間隔とタスクの実行状態を示した図である。Ｔｄ１〜Ｔｄ３は仮想同期間隔で説明するために名称を分けているが、すべて同じ値Ｔｄであり、一定周期ＴｄでＣＰＵシミュレーションが繰り返される。図中の四角はタスクを示しており、四角の中の数字はタスクのＩＤ番号である。同期管理部３３６から実行指示及び動作時間Ｔｄを受け取るとシミュレーションを実行する。Ｔｄ１経過時に同期間隔に達し、タスク５の途中で動作を中断する。同期管理部３３６から実行指示を再度受け取るとタスク５の中断ポイントからシミュレーションを再開し、Ｔｄ２の時間実行した２回目のタスク５の途中で動作を中断する。同様にＴｄ３のシミュレーションを実行後、４回目のタスク１の実行中に処理を中断する。この時Ｔｄ１区間の実行時のようにタスク１−５までの実行時間すなわちラウンドロビン時間が仮想同期間隔よりも長くなる場合もあれば、Ｔｄ３区間の実行時のようにラウンドロビン時間が仮想同期間隔より短くなる場合もある。すなわち、ラウンドロビン時間と仮想同期間隔の関係はその都度変化する。また、ラウンドロビン時間はＣＰＵシミュレータ３１０への動作周波数設定によっても変化する。これはすべてのタスクを実行するため処理量はＣＰＵシミュレータ３１０への動作周波数設定による変化はないが、ＣＰＵシミュレータ３１０の処理量は動作周波数設定に比例するためである。
例えば図９の一番下と下から２番目の段は図８と同じようにタスクの実行状態をＣＰＵの動作周波数別に分けて示した図である。一番下が動作周波数４０ＭＨｚでＣＰＵを駆動した場合のタスクの実行状態、下から２番目が２０ＭＨｚでＣＰＵを駆動した場合のタスクの実行状態となっている。両者を比較した時、４０ＭＨｚ駆動時と２０ＭＨｚ駆動時では４０ＭＨｚの方がラウンドロビン時間は半分になり、時間がかからない分タスクのループ回数が増加している。
【００３０】
ラウンドロビンの時間が仮想同期間隔に対して一定以上大きくなると、外的要因シミュレータＡ３５０との接続信号について仮想同期間隔レベルの精度が確保できない場合がある。
その一例を引き続き図９を用いて説明する。この例では装置制御ソフトウェア３００では外的要因シミュレータ３５０によるタイミングＳｐ１の信号変化をタスク１で監視して、信号変化を検出するとタスク２で出力信号を変化させる動作がプログラムされている。４０ＭＨｚ駆動時は外的要因シミュレータ３５０によりタイミングＳｐ１で外的要因シミュレータ出力信号を変化させる。同期管理部はその次の同期タイミングＤｐ１でＳｐ１での信号変化を受信し、ＣＰＵシミュレータ３１０に送信する。ＣＰＵシミュレータ３１０はＤｐ１直後のタスク１で装置制御ソフトウェアが受信信号を認識し、次のタスク２で受信信号に基づいて演算し、ＣＰＵシミュレータ３１０への出力信号を変化させる（Ｓｐ２）。この信号変化は次の同期タイミングＤｐ２で外的要因シミュレータに伝えられる。
２０ＭＨｚ動作の場合、外的要因シミュレータ３５０からの信号は同様にＳｐ１のタイミングで変化する。ＣＰＵシミュレータ３１０では外的要因シミュレータ３５０からの出力信号を同期管理部３３６を介して同期タイミングＤｐ１で受信する。装置制御ソフトウェアは次のタスク１で信号変化を受信し、その次のタスク２で出力信号を変化させる。このとき、Ｔｄ２の区間で各タスクの負荷が重く、Ｔｄ２内にタスク１の実行が完了していない。言い換えると、Ｓｐ１での外的要因シミュレータ出力信号の変化をＣＰＵシミュレータ３１０に伝わっているが、高負荷のため装置制御ソフトウェア３００は認識していない。
Ｔｄ２の区間で装置制御ソフトウェアは外的要因シミュレータ出力信号のＳｐ１のタイミングの変化を認識できないため、Ｄｐ２の同期タイミングの後のタスク１でタイミングＳｐ１の信号変化を認識する。その直後のタスク２で出力信号を変化させる（Ｓｐ３）。同期管理部３３６はこの信号変化をＤｐ３で認識し、外的要因シミュレータに伝える。
以上のように、疑似的な低クロック（２０ＭＨｚ）駆動時は、ラウンドロビン時間が長く、即ちＣＰＵのタスク処理が高負荷になったとき、外的アプリケーションに対してのＤｐ２とＤｐ３のように信号変化の同期タイミングのずれがわずかに生じる場合がある。当然のことながら、実物と同じ４０ＭＨｚの周波数で実行した方が、より正確に実物に近いシミュレーションが行える。
【００３１】
また、例示したずれは直接エラーとなる可能性は低いものの、シミュレーション精度のわずかな低下を示しており、ユーザーから把握できることが望ましい。
そのため、本実施例ではシミュレーションシステム２０１内の表示装置２０３に高負荷によるタイミングのずれが検出されたかを表示させることとする。なお、高負荷状態を警告とし、表示だけでそのまま継続するか、エラーとしてシミュレーションを中断するかは周波数設定用ユーザーインターフェース３７０を通してユーザーの設定に従う。ここで、周波数設定用ユーザーインターフェースは、処理選択手段に対応する。また、警告やエラーは、例えば表示装置２０３に表示することができ、この表示装置２０３が警告やエラーを報知する報知手段に対応する。
【００３２】
また、上記で警告を選び、動作を継続させた場合は警告後の動作をできるだけ適切な動作周波数でシミュレーションを行うことが望ましい。具体的には警告後も高負荷状態が継続または断続的に続くならば、シミュレーション速度は落ちるが高負荷時に適した実物と同じ動作周波数４０ＭＨｚでシミュレーション行う。一方、警告後に低負荷状態が続き同期間隔レベルの信号精度を確保できるならばシミュレーション速度が速い動作周波数２０ＭＨｚでシミュレーション行う。以下に詳細を図１０を用いて説明する。
図１０はタスクのラウンドロビン時間と同期間隔及び動作周波数の切り替えについて示したものである。矢印の入った四角形のひとつひとつがタスクが一巡する動作を示しており、先ほどの図９のタスク構成と同じ場合ではタスク１〜５までを実行することを示している。
四角形が横に長いほどラウンドロビン時間が長いことを示しており、本実施例ではラウンドロビン時間をタスクの負荷判定として用いる。Ｄｐ１０１〜Ｄｐ１０７は同期管理部３３６がＣＰＵシミュレータ３１０と外的要因シミュレータ３５０との同期をとるタイミングであり、同期間隔Ｔｄで繰り返されている。図の最上段には２０ＭＨｚ固定で動作させたときのラウンドロビンを示した図、２段目は４０ＭＨｚ固定で動作させたときのラウンドロビンを示した図を記載している。
シミュレーションを動作周波数２０ＭＨｚで開始し、シミュレーションがある程度進んだ時、同期タイミングＤｐ１０１まで実行されたところから説明する。Ｄｐ１０１からＤｐ１０２を実行中に開始されたラウンドロビンの時間測定を開始する。Ｄｐ１０３を過ぎた時点でラウンドロビン計測結果が長くなったと判明し、ラウンドロビン時間がＴｒｌとなる。この時間Ｔｒｌがあらかじめ定められた閾値時間より大きければ判定結果として高負荷と判定する。ここで、同期管理部３３６は、ラウンドロビン時間を測定するＣＰＵシミュレータ３１０の負荷を測定する負荷測定手段に対応する。また、同期管理部３３６は、ラウンドロビン時間を閾値時間と比較して負荷を判定する負荷判定手段に対応する。
この時閾値時間Ｔｓ１はシミュレーション精度等でシミュレーション状況によって変化するが、本実施例では同期間隔Ｔｄの５０％以上を用いる。これは同期間隔内に確実に１ラウンドロビンが丸ごと入る時間として設定している。ここで、閾値時間Ｔｓ１は、第１の閾値に対応する。
高負荷と判定されると、同期管理部３３６では周波数管理部３４０とタイマ管理部３３７にＣＰＵ動作周波数を上げる準備をする。同期管理部３３６では次の同期タイミングＤ
ｐ１０４でＣＰＵ動作周波数を上げてシミュレーションを継続する。この時、同期タイミングまで待ってＣＰＵ動作周波数を上げるのは、外的要因シミュレータＡ３５０と同期を取ってＣＰＵ動作周波数を上げることが望ましいからである。
【００３３】
図１０の３段目は動作周波数をＤｐ１０４で切り替えた時のラウンドロビン時間を示したものである。Ｄｐ１０４まではＣＰＵ駆動クロックは２０ＭＨｚで動作し、ラウンドロビン時間は長くなっている。Ｄｐ１０４以降ではＣＰＵ駆動クロックは４０ＭＨｚで動作し、ラウンドロビン時間は短くなっている。
反対に高負荷時のＣＰＵ駆動クロック４０ＭＨｚから低負荷時のＣＰＵ駆動クロック２０ＭＨｚへ変化について説明する。まず低負荷と判定する条件から説明する。高負荷から低負荷への変化を判定する閾値Ｔｓ２は、Ｔｓ１の半分、すなわちＴｓ１÷２を閾値Ｔｓ２として用いる。ここで、「÷２」は高負荷時の駆動クロック周波数と低負荷時の駆動クロック周波数比で決定される値である。閾値Ｔｓ２は、第２の閾値に対応する。たとえば高負荷時のＣＰＵ駆動クロックが３０ＭＨｚであれば、Ｔｓ２は以下のようになる。
Ｔｓ２＝Ｔｓ１÷（３０÷２０）
図１０において、Ｄｐ１０６の２ラウンドロビン手前で、ラウンドロビン時間がＴｓ２を下回る。以降５回連続でラウンドロビン時間がＴｓ２を下回った場合には判定結果として低負荷と判定し、次の同期タイミングＤｐ１０７で低負荷時の駆動クロック周波数に切り替える。
以上のように、ラウンドロビンの時間によって、ＣＰＵの負荷状況を判定し、ＣＰＵが高負荷状態の時はＣＰＵ駆動クロックを高速の基準クロック周波数に、ＣＰＵが高負荷でない場合はＣＰＵ駆動クロックを基準クロックより低いクロック周波数に変更する。このようにすることで、シミュレーション精度をより高め、さらに適切な周波数に自動で切り替えるシミュレーションシステムを構築できる。
【実施例３】
【００３４】
実施例では実施例２で使用したシミュレーションシステムをより精度を上げたＣＰＵ動作周波数の切り替え動作について説明する。本実施例で用いられるシミュレーションシステムの機能ブロック図を図１１に示す。実施例２で使用したシミュレーションシステムと共通な部分の説明は省略する。
前述した実施例２では高負荷を検知したラウンドロビンの次の同期タイミングからＣＰＵ動作周波数を４０ＭＨｚに上げて高精度なシミュレーションを実行するものであり、基本的には十分な効果が見込まれる。しかしながら、厳密に言えば高負荷を検知した最初のラウンドロビンすなわち図１０におけるＴｒｌ時間のラウンドロビン自身は低精度のＣＰＵ動作周波数２０ＭＨｚで実行されている。本実施例はその点を考慮して発案されたものである。本実施例の構成は実施例２のシミュレーションシステムに対してシミュレーションの実行状況を保存・退避できる機能と保存されたデータをもとにシミュレーションを保存地点から再実行できる機能を追加している。
【００３５】
本実施例の動作を図１２を用いて説明する。シミュレーションをＣＰＵ動作周波数２０ＭＨｚで開始する。シミュレーションが実行されると、シミュレーションシステム３６０はあらかじめ定めた記録間隔で実行状況を表す実行情報を実行情報保存部３１８、３５０１、３５２１に保存していく。保存するデータはＣＰＵの全メモリ、レジスタ程度のサイズであり、中小規模な装置制御ソフトウェアでは数十キロバイト、また外的要因シミュレータでも同じく全メモリ情報を保存するが、こちらも同程度のメモリ容量であり合わせても百キロバイト程度である。データ量が少ないため、記録間隔を短くしてもシステムのシミュレーション速度への影響は限定的であるが、高負荷状態が頻繁に発生しなければ頻繁に行う必要もないため、仮想時間で数秒に１回程度で十分である。ただし、説明をわかりやすくするため本実施例では図１２での説明において毎同期ごとにシミュレーションの実行状況の保存を行うものとして説明とする。
実行状況を毎同期ごとに記録しながら、シミュレーションを継続しＤｐ２０２のタイミングまで実行を進める。Ｄｐ２０３直前で実行開始し、Ｄｐ２０４を過ぎたところまで続く長いラウンドロビン時間Ｔｒｌを検出し、Ｔｒｌが閾値よりも長いため、実施例２と同様に高負荷状態と判定する。高負荷状態と判定されると、シミュレーションは一時停止し、過去に保存した実行状況で最も新しいものをロードし、そこからＣＰＵ駆動クロック４０ＭＨｚに変更し、シミュレーションを再開行する。再現される状況はラウンドロビン時間が長く高負荷と判定されたラウンドロビンの開始時刻より前の同期タイミングである。本実施例では図１２においてＤｐ２０２になる。なお、再現される状況はＤｐ２０２より過去の状況でも構わない。ここでは、同期管理部３３６が、保存された実行情報に基づいてシミュレーションを再開させる再開手段に対応する。
高負荷時のＣＰＵ駆動クロック４０ＭＨｚから低負荷時のＣＰＵ駆動クロック２０ＭＨｚへ変化については、実施例２と同様のため、説明を省略する。
【００３６】
以上のように、定期的にシミュレーションシステム３６０の状態を保存し、実施例２と同様にＣＰＵ負荷が高いと判定した時、シミュレーションシステム３６０を最後に保存した状態に戻し、高精度のＣＰＵ動作周波数で実行しなおす。これにより、実施例２よりさらに精度を高めたシミュレーションシステムを構築できる。
【実施例４】
【００３７】
本実施例ではＣＰＵシミュレータ３１０と外的要因シミュレータ３５０との信号状態により、ＣＰＵ動作周波数を変化させるシミュレーションシステムについて説明する。
装置制御ソフトウェア３００がタイミングに関連したイベントの開始、停止、分岐等の動作を行う場合、基本的に外的要因シミュレータ３５０からのトリガイベントが発生する。タイミングに関連したイベントに限定したのは、実施例１で説明したＣＰＵシミュレータの動作周波数をより低周波数に変更するシミュレーションにより生じる動作の違いは、わずかな同期タイミングのずれのみ、即ちタイミングに関係したものだからである。外部からのトリガイベントとしてはタイマによるもの、外的要因シミュレータ３５０によるものがある。タイマ管理部３３７はＣＰＵシミュレータと同一プロセスにあり、同期を取ることは容易であるため説明を省略する。本実施例では外的要因シミュレータ３５０からのトリガイベントの発生時のみ、ＣＰＵシミュレータ３１０の動作周波数を実物と同じ基準周波数で行い、それ以外のタイミングでは基準周波数より低い周波数で動作することで高速にシミュレーションを行う。以下に詳細を説明する。
なお、本実施例で用いられるシミュレーションシステムは実施例１で使用したシミュレーションシステム３６０とほぼ同じであり、共通な部分の説明は省略する。
本実施例の特徴をわかりやすくするため、初めに従来から使用している実施例１に記載した外的要因シミュレータ３５０とＣＰＵシミュレータ３１０の同期処理について説明する。次に本実施例での外的要因シミュレータ３５０とＣＰＵシミュレータ３１０の同期処理について違いを説明する。
【００３８】
実施例１で使用したシミュレーションシステム３６０では、連携処理部３３０の同期管理部３３６は同期タイミングＤｐ４０１において、仮想同期間隔Ｔの処理指示をＣＰＵシミュレータ３１０と外的要因シミュレータ３５０に指示する。ＣＰＵシミュレータと外的要因シミュレータはコンピュータシステム２０１のＯＳ上で別プロセスとして処理を同時に開始する。この時、仮想同期間隔Ｔの処理を終えたシミュレータは、もう一方のプロセスのシミュレータが処理を終えるまで待っている。図６では外的要因シミュレータ３５０が先に斜線部の処理を終え空白部の時間待っている。Ｄｐ４０２でＣＰＵシミュレータ３１０が処理を終えると、同期管理部３３６によって、ＣＰＵシミュレータ３１０と外的要因シミュレータ３５０間の信号をやり取りして、同期を取る。同期を取ったのち、同期管理部３３６は同期タイミングＤｐ４０２において、仮想同期間隔Ｔの処理指示を再度、ＣＰＵシミュレータ３１０と外的要因シミュレータ３５０に同時に指示する。以上の動作を
繰り返してシミュレーションシステム３６０は動作する。
【００３９】
次に図１３は本実施例のＣＰＵシミュレータと外的要因シミュレータのコンピュータシステム上の中央処理部（ＣＰＵ）の現実時間軸での実行タイミングを示している。
連携処理部３３０は同期タイミングＤｐ５０１において、仮想同期間隔Ｔの処理指示を外的要因シミュレータにのみ指示する。Ｄｐ５０６において外的要因シミュレータは仮想同期間隔Ｔの分の処理を終えると連携処理部３３０に動作終了を通知する。連携処理部３３０は、この時、外的要因シミュレータ３５０の信号に変化がなければ、即ＣＰＵシミュレータ３１０に仮想同期間隔Ｔの処理を指示する。ＣＰＵシミュレータ３１０はＤｐ５０２で仮想同期間隔Ｔの処理を終えると、連携処理部３３０に動作終了を通知する。この時、仮想時間軸で見るとＣＰＵシミュレータにおけるＤｐ５０６と外的要因シミュレータにおけるＤｐ５０２は同じ仮想時刻である。
また、外的要因シミュレータの信号に変化がある場合をＤｐ５０２から説明する。連携処理部３３０はＤｐ５０２でＣＰＵシミュレータ３１０から動作終了を受け取ると、仮想同期間隔Ｔの処理指示を外的要因シミュレータ３５０に指示する。外的要因シミュレータでは仮想同期間隔ＴすなわちＤｐ５０７までの処理中に信号変化をおこなったことを判断する。Ｄｐ５０７で動作終了とともに連携処理部３３０に信号変化を通知する。連携処理部３３０は外的要因シミュレータ３５０から信号変化を受け取ると周波数管理部３４０によりＣＰＵシミュレータの動作周波数を高精度側すなわち４０ＭＨｚに変更する。同時にＣＰＵシミュレータに仮想同期間隔Ｔの処理を指示する。Ｄｐ５０７からＣＰＵシミュレータは高精度側の４０ＭＨｚで動作しているため、シミュレーション時間はほぼ２倍必要となる。具体的にはＤｐ５０７からＤｐ５０３の現実時間はＤｐ５０６からＤｐ５０２の時間のほぼ２倍となっている。
以上のように、外的要因シミュレータ３５０の実行を先に行うことで、外的要因シミュレータ３５０からの信号に変化があったときのみ、ＣＰＵ動作周波数を切り替えが可能とな、る。これにより、ＣＰＵ動作周波数が高くシミュレーションが遅くなる区間を抑えることができる。
【００４０】
次に外的要因シミュレータの信号に変化がある状態から変化がない状態へ遷移した時の動作を説明する。Ｄｐ５０４においてＣＰＵシミュレータは高精度側の４０ＭＨｚで動作している。連携処理部３３０はＤｐ５０４でＣＰＵシミュレータから動作終了を受け取ると仮想同期間隔Ｔの処理指示を外的要因シミュレータに指示する。外的要因シミュレータではＤｐ５０９までの処理中に信号変化はなく、Ｄｐ５０９で動作終了のみ連携処理部３３０に通知する。連携処理部３３０は外的要因シミュレータ３５０から信号変化がないことを認識すると周波数管理部３４０によりＣＰＵシミュレータ３１０の動作周波数を高速側すなわち２０ＭＨｚに変更する。同時にＣＰＵシミュレータに仮想同期間隔Ｔの処理を指示する。Ｄｐ５０９からＣＰＵシミュレータは高速側の２０ＭＨｚで動作しているため、シミュレーション時間はほぼ半分になる。具体的にはＤｐ５０９からＤｐ５０５の現実時間はＤｐ５０８からＤｐ５０４の時間のほぼ半分となっており高速なシミュレーションが行える。
【符号の説明】
【００４１】
３００…装置制御ソフトウェア、３１０…ＣＰＵシミュレータ、３３６…同期管理部、３３７…タイマ管理部、３４０…周波数管理部、３５０…外的要因シミュレータ、３６０…装置制御ソフトウェア検証装置
【図１】
2019121068.tif 000003
【図２】
2019121068.tif 000004
【図３】
2019121068.tif 000005
【図４】
2019121068.tif 000006
【図５】
2019121068.tif 000007
【図６】
2019121068.tif 000008
【図７】
2019121068.tif 000009
【図８】
2019121068.tif 000010
【図９】
2019121068.tif 000011
【図１０】
2019121068.tif 000012
【図１１】
2019121068.tif 000013
【図１２】
2019121068.tif 000014
【図１３】
2019121068.tif 000015