(57)【要約】【課題】アンタイムドのソフトウェアモデルと、ハードウェアモデルとの協調検証時に、ソフトウェアモデルに処理遅延時間ゼロの無限ループが発生してもシミュレーションが進まなくなる事態を防ぎ、シミュレーションの継続を遂行できること。【解決手段】ハードウェアモデルＨＷの実行スケジューリングを行うスケジューラ２０と、ソフトウェアモデルＳＷの処理時間を検証用プラットフォーム１０における検証時刻から算出するタイマ２１と、タイマ２１の値に基づき、予め設定されたタイマ間隔でシミュレーション時刻を監視し、シミュレーション時刻に変化がないことにより処理遅延時間を持たないソフトウェアモデルＳＷの無限ループを検出する監視手段２２と、を備え、スケジューラ２０は、監視手段２２による無限ループの検出により、ソフトウェアモデルＳＷの実行を停止させる。【選択図】図１
2010009113.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットプロセッサ上で動作するソフトウェアモデルと、ハードウェアモデルとの協調動作を検証するシミュレーション装置において、
前記ハードウェアモデルの実行スケジューリングを行うスケジューラと、
前記ソフトウェアモデルの処理時間を検証用プラットフォームにおける検証時刻から算出するタイマと、
前記タイマの値に基づき、予め設定されたタイマ間隔でシミュレーション時刻を監視し、当該シミュレーション時刻に変化がないことにより処理遅延時間を持たないソフトウェアモデルの無限ループを検出する監視手段と、
を備え、
前記スケジューラは、前記監視手段による前記無限ループの検出により、前記ソフトウェアモデルの実行を停止させることを特徴とするシミュレーション装置。
【請求項２】
前記スケジューラは、前記監視手段による前記無限ループの検出により、シミュレーション時刻を処理遅延時間を持つハードウェアモデルの次のタイム・イベントまで進め、当該ハードウェアモデルのシミュレーションを実行することを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記スケジューラは、ログ出力制御手段を備え、
当該ログ出力制御手段は、前記監視手段による前記無限ループの検出時に、予め設定された前記検証用プラットフォームにおける検証時刻の間、前記処理遅延時間を持たないソフトウェアモデルの状態トレース情報をログ出力することを特徴とする請求項１または２に記載のシミュレーション装置。
【請求項４】
前記ログ出力制御手段によるログ出力後に、シミュレーション時刻を前記処理遅延時間を持つハードウェアモデルの次のタイム・イベントまで進め、当該ハードウェアモデルのシミュレーションを実行することを特徴とする請求項３に記載のシミュレーション装置。
【請求項５】
前記スケジューラは、前記ハードウェアモデルの評価タイミングをイベント・ドリブンでスケジューリングすることを特徴とする請求項１〜４のいずれか一つに記載のシミュレーション装置。
【請求項６】
ターゲットプロセッサ上で動作するソフトウェアモデルと、ハードウェアモデルとの協調動作を検証する処理をコンピュータに実行させるプログラムにおいて、
コンピュータを、
前記ハードウェアモデルの実行スケジューリングを行うスケジューラと、
前記ソフトウェアモデルの処理時間を検証用プラットフォームにおける検証時刻から算出するタイマと、
前記タイマの値に基づき、予め設定されたタイマ間隔でシミュレーション時刻を監視し、当該シミュレーション時刻に変化がないことにより処理遅延時間を持たないソフトウェアモデルの無限ループを検出する監視手段、として機能させ、
前記スケジューラは、前記監視手段による前記無限ループの検出により、前記ソフトウェアモデルの実行を停止させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアモデル及びソフトウェアモデルを協調検証するシミュレーション装置において、ゼロ遅延の無限ループを検出でき、この無限ループの検出時には、シミュレーションを先に進めることができるシミュレーション装置およびプログラムに関する。
【背景技術】
【０００２】
プロセッサを含むハードウェアモデルと、その上で動作するソフトウェアモデルで構成されるシステムの開発及び検証がシミュレーション装置を用いて行われている。このシミュレーション装置としては、検証対象システム上のハードウェアモデルをＣベース言語のシステムレベル設計言語で記述したハードウェアモデルと、ターゲットプロセッサ上で動作するソフトウェアモデルとを並列動作（協調動作）させて検証（協調検証）するシミュレーション装置があった。
【０００３】
このようなシミュレーション装置において、ソフトウェアモデルの無限ループの発生を検出する方法としては、発振するループ回路を検出する方法（たとえば、下記特許文献１参照。）、ポーリング時に値の参照とシミュレーション実行権の開放を組合せることによりソフトウェアモデルのポーリング動作を模擬する方法（たとえば、下記特許文献２参照。）、状態遷移の閉ループを検出して、経路網羅率を測定するシミュレータ（たとえば、下記特許文献３参照。）、無条件分岐と、分岐先アドレスを判定し、無限セルフループの発生を判定するシステム監視装置（たとえば、下記特許文献４参照。）、複数の処理毎に所定の期間内に処理が実行されたかどうかを監視し、複数の処理のうちいずれかの処理が所定の時間から外れて実行された時に、ソフトウェアモデルの異常を検出するソフトウェアモデル監視回路（たとえば、下記特許文献５参照。）、同一アドレスを同一時間間隔で所定回数繰り返し実行したことを検出して、暴走検出を行う方法（たとえば、下記特許文献６参照。）などがある。
【０００４】
このほか、あるタスク内の処理が論理的異常またはハードウェアモデル異常により無限ループに陥った場合に、１．動作中のタスクを判別し、２．判別されたタスクの動作アドレスを検出し、３．検出されたアドレスが規定範囲内の変化しかない（タスクが動いていない）ことを判定し、４．この判定により異常状態を認識し、５．該異常状態を認識した場合、そのタスクの動作アドレスをタスクの先頭に変更するリスタート機能と、を有する異常検出方法（たとえば、下記特許文献７参照。）がある。
【０００５】
【特許文献１】特開２００２−１６９８５２号公報
【特許文献２】特開２００５−０１８６２３号公報
【特許文献３】特開平０６−００４６１６号公報
【特許文献４】特開２０００−２５０７８５号公報
【特許文献５】特開２０００−０１０８２４号公報
【特許文献６】特開平１０−１６１９０８号公報
【特許文献７】特開平０５−２４１８７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記各特許文献に記載された技術では、下記のような問題があった。
１．協調動作を検証すべく、ソフトウェアモデルをアンタイムド（Ｕｎｔｉｍｅｄ）で高速に動作させた場合を考える。ここで、以下に説明するソフトウェアモデルとは、たとえば、Ｃベース言語で記述されたソフトウェアモデル（アンタイムド）であり、ハードウェアモデルとは、Ｃベースのシステムレベル設計言語記述のモデル（タイムド：Ｔｉｍｅｄ）である。以下の説明では、ソフトウェアモデルとハードウェアモデルを、それぞれソフトウェア、ハードウェアとも呼称する。
【０００７】
この場合、システム上では処理時間の経過とともにシステム上のハードウェアモデルの状態が変化するが、シミュレーション時のソフトウェアモデルがアンタイムドであるために処理時間がゼロとなり、無限ループが生じる場合がある。上記のアンタイムドは、シミュレーション時に処理遅延時間を持たないモデルである。
【０００８】
２．シミュレーション装置により、ソフトウェアモデルをアンタイムドで高速に動作させる場合、上述のように、そもそもシミュレーション時のソフトウェアモデルの処理時間がゼロであるため、ソフトウェアモデルの処理時間を監視しても、無限ループを検出することができない。
３．ハードウェアモデルのシミュレーション時においても、ハードウェアモデルのバグにより無限ループが起こり得る。
【０００９】
４．同一アドレスを同一時間間隔で所定回数繰り返し実行したことを検出する方法（たとえば、上記特許文献６参照。）を適用したとしても、そもそもシミュレーション時のソフトウェアモデルの処理時間がゼロであるため無限ループを検出することができない。
５．複数のタスクを含むような大きな無限ループの場合、ゼロ遅延の無限ループが検出されたとしても無限ループの原因解析を容易には行えない。
６．無限ループ検出のために分岐アドレス等の実行状態をモニタすると、問題の無い部分のシミュレーション速度が低下する。
７．無限ループ解析のために実行状態を、たとえばファイル等に出力する処理を行うと、シミュレーション速度が著しく低下する。
【００１０】
開示のシミュレーション装置およびプログラムは、上記の問題点を解決するものであり、処理遅延時間を持たないアンタイムドのソフトウェアモデルと、ハードウェアモデルとの協調検証時に、ソフトウェアモデルに処理遅延時間ゼロの無限ループが発生してもシミュレーションが進まなくなる事態を防ぎ、シミュレーションの継続を遂行できることを目的とする。
【課題を解決するための手段】
【００１１】
開示のシミュレーション装置およびプログラムは、ターゲットプロセッサ上で動作するソフトウェアモデルと、ハードウェアモデルとの協調動作を検証するシミュレーション装置において、前記ハードウェアモデルの実行スケジューリングを行うスケジューラと、前記ソフトウェアモデルの処理時間を検証用プラットフォームにおける検証時刻から算出するタイマと、前記タイマの値に基づき、予め設定されたタイマ間隔でシミュレーション時刻を監視し、当該シミュレーション時刻に変化がないことにより処理遅延時間を持たないソフトウェアモデルの無限ループを検出する監視手段と、を備え、前記スケジューラは、前記監視手段による前記無限ループの検出により、前記ソフトウェアモデルの実行を停止させることを要件とする。
【００１２】
上記構成によれば、スケジューラは、検証用プラットフォーム上のＣＰＵ時間を計測するタイマに基づくシミュレーション時間の監視装置を備える。シミュレーションの実行を制御するスケジューラは、設定されたタイマ間隔でシミュレーション時刻を監視する。このタイマ間隔の間、シミュレーション時刻が以前の値から変化しない場合、スケジューラは、無限ループとして検出し、ソフトウェアモデルの実行を停止させる。また、タイムドのモデルの次のタイム・イベントまでターゲット時刻を進めることができる。
【発明の効果】
【００１３】
開示のシミュレーション装置およびプログラムによれば、ソフトウェアモデルのアンタイムドのシミュレーションで発生するゼロ遅延の無限ループを検出できるようになるという効果を奏する。また、ゼロ遅延の無限ループがあったソフトウェアモデルの実行を停止させ、次のモデルの実行が行えるようになり、シミュレーションの実行を遂行できるようになるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に添付図面を参照して、この発明にかかるシミュレーション装置およびプログラムの好適な実施の形態を詳細に説明する。
【００１５】
（実施の形態１）
（シミュレーション装置の概要構成）
図１は、この発明のシミュレーション装置の構成を示す図である。実施の形態１のシミュレーション装置１は、検証用プラットフォーム１０と、検証用プラットフォーム１０上で動作するアプリケーションであり、シミュレーションの実行を制御するスケジューラ２０とにより構成される。
【００１６】
このシミュレーション装置１は、ターゲットプロセッサ上（不図示）で動作するモデルであるソフトウェアモデルＳＷと、ハードウェアモデルＨＷとの協調動作を検証する。ソフトウェアモデルＳＷは、ＳｙｓｔｅｍＣなどのＣベース言語で記述されたアンタイムドのソフトウェア部品である。ハードウェアモデルＨＷは、ターゲットシステム（不図示）のハードウェアモデルをＳｙｓｔｅｍＣなどのシステムレベル設計言語（タイムド）で記述したものである。
【００１７】
スケジューラ２０は、ソフトウェアモデルＳＷと、ハードウェアモデルＨＷの実行スケジューリングを行う。具体的には、ソフトウェアモデルＳＷと、ハードウェアモデルＨＷの評価タイミングを、イベント・ドリブン（またはタイミング・ドリブンともいう）でスケジューリングする。
【００１８】
このスケジューラ２０は、スケジュールの進行を監視する監視手段２２を備えている。監視手段２２は、検証用プラットフォーム１０上の検証時刻（ＣＰＵ時間）１１を計測するタイマ２１と、ターゲット時刻監視部２３とを有している。タイマ２１により仮想的なソフトウェアモデルの処理時間を得るもので無限ループ監視用タイマとして用いられる。ターゲット時刻監視部２３は、タイマ２１に基づいて予め設定した時間間隔で、ターゲット時刻（シミュレーション時刻）ｔを監視する。
【００１９】
そして、ターゲット時刻監視部２３は、ターゲット時刻（シミュレーション時刻）ｔが以前の値から変化しない場合、ゼロ遅延の無限ループが発生したことを検出する。ターゲット時刻監視部２３によるゼロ遅延の無限ループを検出すると、スケジューラ２０は、ターゲット時刻（シミュレーション時刻）ｔを次のタイム・イベントまで進める。また、スケジューラ２０は、ログ出力制御手段を備え、無限ループが検出された場合にログ出力制御を有効にすることができる。ログ出力を行う場合には、ログ出力に必要な時間相当で設定されたタイマ間隔の間、アンタイムドモデルの状態トレース情報を出力することができる。
【００２０】
なお、イベントとは、例えば、ソフトウェアモデルもしくはハードウェアモデルにおける所定処理の終了通知等の通知処理の意味を含む。さらに、タイム・イベントとは、例えば、ソフトウェアモデルからソフトウェアモデルに対する、ソフトウェアモデルからハードウェアモデルに対する、ハードウェアモデルからハードウェアモデルに対する、もしくはハードウェアモデルからソフトウェアモデルに対するイベントの時刻の意味を含む。さらに、イベントタイムキューとは、例えば、タイム・イベントまでイベントを待たせることの意味を含む。
【００２１】
タイマ２１は、一定時間ごとに検証時刻１１を計測するカウンタをカウントアップし、カウンタの値が基準値以上になった場合、スケジューラ２０に対して、割り込み要求を出力する。また、検証時刻カウンタをリセットする（０にする）機能を持つ。
【００２２】
上記のスケジューラ２０は、１．モデル（ＳＷまたはＨＷ）実行中に、割り込みが入った場合は、モデル実行を一時停止し、ターゲット時間を進める機能を有する。２．ターゲット時間を進めるときに、タイマ２１のカウント値をリセットする。
【００２３】
（シミュレーション装置のハードウェア構成）
つぎに、シミュレーション装置のハードウェア構成について説明する。図２は、シミュレーション装置のハードウェア構成を示す説明図である。図１に示したシミュレーション装置１は、たとえばパーソナルコンピュータ（ＰＣ）と、その周辺装置によって構成できる。
【００２４】
図２において、シミュレーション装置１は、コンピュータ本体２１０と、入力装置２２０と、出力装置２３０と、から構成されており、不図示のルータやモデムを介してＬＡＮ，ＷＡＮやインターネットなどのネットワーク２４０に接続可能である。
【００２５】
コンピュータ本体２１０は、ＣＰＵ，メモリ，インターフェースを有する。ＣＰＵは、シミュレーション装置１の全体の制御を司る。メモリは、ＲＯＭ，ＲＡＭ，ＨＤ，光ディスク２１１，フラッシュメモリから構成される。メモリは、ＣＰＵのワークエリアとして使用される。
【００２６】
また、メモリには、各種プログラムが格納されており、ＣＰＵからの命令に応じてロードされる。ＨＤおよび光ディスク２１１は、ディスクドライブによりデータのリード／ライトが制御される。また、光ディスク２１１およびフラッシュメモリは、コンピュータ本体２１０に対して着脱自在である。インターフェースは、入力装置２２０からの入力、出力装置２３０からの出力、ネットワーク２４０に対する送受信の制御をおこなう。
【００２７】
また、入力装置２２０としては、キーボード２２１、マウス２２２、スキャナ２２３などがある。キーボード２２１は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス２２２は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ２２３は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体２１０内のメモリに格納される。なお、スキャナ２２３にＯＣＲ機能を持たせてもよい。
【００２８】
また、出力装置２３０としては、ディスプレイ２３１、プリンタ２３２、スピーカ２３３などがある。ディスプレイ２３１は、カーソル、アイコン、あるいはツールボックスなどをはじめ、文書、画像、機能情報などのデータを表示する。また、プリンタ２３２は、画像データや文書データを印刷する。また、スピーカ２３３は、効果音や読み上げ音などの音声を出力する。
【００２９】
図３は、スケジューラの各機能の状態遷移を示す図である。
１．初期化
図１に示すスケジューラ２０は、シミュレーションを開始すると、ソフトウェアモデルＳＷ、あるいはハードウェアモデルＨＷのシミュレーション・プロセスを１回ずつ実行することにより、これらモデルの初期化を行う（Ｓ１）。
【００３０】
２．評価
ある検証時刻（シミュレーション時刻）に実行可能状態にあるシミュレーション・プロセスは、実行キューに入れられる。スケジューラ２０は、状態“評価”でシミュレーション時刻に実行キューに入っているシミュレーション・プロセスを評価する（Ｓ２）。評価の結果、イベントが発生する場合、イベントの発生条件によってスケジューラ２０は、実行キュー、あるいはタイムイベントキューに、実行すべきシミュレーション・プロセスを格納する。即時イベントの場合、イベントは実行キューに格納され、更新された実行キューに対して、スケジューラ２０は再度“評価”を行う。
【００３１】
スケジューラ２０は、実行キューの内容が空になると、状態“時刻進行”に移行する（Ｓ３）。また、スケジューラ２０は、監視手段２２からゼロ遅延の無限ループの検出が通知され、ログ出力制御が有効でない場合、あるいはログ出力制御が有効で監視手段からログ出力終了が通知された場合においても、時刻進行に移行する。また、スケジューラ２０は、監視手段２２からゼロ遅延の無限ループの検出が通知されてもログ出力制御が有効な場合には、各モデルのトレースログ出力を有効にし、シミュレーションを継続する。
【００３２】
３．時刻進行
スケジューラ２０は、タイムイベントキューの中から、次に実行すべきイベントのターゲット時刻（シミュレーション時刻）を取得し、ターゲット時刻（シミュレーション時刻）をその時刻まで進める。ターゲット時刻（シミュレーション時刻）を進めた後、スケジューラは状態“評価”に移行する（Ｓ４）。
【００３３】
図４は、シミュレーション実行時のデータ管理状態を示す図である。図示のように、次に実行するモデル（ソフトウェアモデルＳＷあるいはハードウェアモデルＨＷ）Ａ〜Ｈが存在する時間を、タイムイベントキュー４０１が管理する。また、各時間で実行するモデル（ＳＷまたはＨＷ）Ａ〜Ｈを実行キュー４０２が管理する。図４に示すデータ構造は、時間を含むシミュレーションの一般的なデータ構造である。
【００３４】
（シミュレーション動作内容）
図５は、実施の形態１によるシミュレーション動作の内容を示すフローチャートである。図１に示したスケジューラ２０とタイマ２１の処理内容を示す。
【００３５】
スケジューラ２０は、まず、実行キュー４０２から現ターゲット時間に実行可能なモデル（Ａ〜Ｈ）を取り出す。また、タイムイベントキュー４０１より、現ターゲット時間に実行すべきモデルがあるかをタイムイベントキュー４０１を参照して確認し、タイムイベントキュー４０１に現ターゲット時間があれば、対応する実行キュー４０２から該当する一つのモデルを取り出す（ステップＳ５０１）。
【００３６】
次に、スケジューラ２０は、実行可能なモデルがあるかを確認する（ステップＳ５０２）。実行可能なモデルがあれば（ステップＳ５０２：Ｙｅｓ）、ステップＳ５０３へ移行し、実行可能なモデルがなければ（ステップＳ５０２：Ｎｏ）、ステップＳ５０６へ移行する。
【００３７】
ステップＳ５０３では、取り出した実行可能なモデルを実行する。ここで、モデル実行中にタイマ２１から割り込み要求があった場合は（ステップＳ５０４：Ｙｅｓ）、モデルの実行を一時停止し（ステップＳ５０５）、ステップＳ５０６に移る。モデル実行中にタイマ２１からの割り込み要求がない場合は（ステップＳ５０４：Ｎｏ）、実行が可能でなくなるまで実行を続け、実行が終了したらステップＳ５０１へ戻る。
【００３８】
ステップＳ５０６では、タイムイベントキュー４０１に次に実行可能なモデルがあるとき、ターゲット時間を次のタイムイベントキュー４０１の時刻に進める。この後、タイマ２１のカウンタをリセットし（ステップＳ５０７）、ステップＳ５０１へ戻る。
【００３９】
タイマ２１は、カウンタのカウント値をリセットした後（ステップＳ５１１）、予め設定した時間間隔（一定時間）ｔを待つ（ステップＳ５１２）。この後、検証時刻のタイマ２１のカウント値をカウントアップする（ステップＳ５１３）。この後、スケジューラ２０からカウンタリセットの要求があれば（ステップＳ５１４：Ｙｅｓ）、ステップＳ５１１に戻りカウント値をリセットする。一方、スケジューラ２０からカウンタリセットの要求がなければ（ステップＳ５１４：Ｎｏ）、カウンタの値が基準値を超えたかを判断する（ステップＳ５１５）。基準値を超えていなければ（ステップＳ５１５：Ｎｏ）、ステップＳ５１２に戻る。基準値を超えていれば（ステップＳ５１５：Ｙｅｓ）、スケジューラ２０に対し割り込み要求を出し（ステップＳ５１６）、ステップＳ５１１に戻る。
【００４０】
上記処理によれば、従来の問題を下記のように解決することができるようになる。
１．ステップＳ５０３で取り出した実行可能なモデルの実行が終了しない場合
この場合であっても、タイマ２１のカウンタがリセットされることがないため、検証時刻カウンタをカウントアップできる。そして、カウンタが基準値以上になったところで、ステップＳ５０６の処理が行え、次のモデルに実行を移すことができるようになる。
【００４１】
２．どんなにシミュレーションしても、現ターゲット時間で実行可能なモデルがなくならない場合
この場合であっても、ステップＳ５０６に制御が移ることがないため、タイマ２１のカウンタがリセットされることがなく、カウンタがカウントアップできる。そして、カウンタが基準値以上になったところで、ステップＳ５０６の処理が行え、次のモデルに実行を移すことができるようになる。すなわち、従来の無限ループの問題を解消できる。
【００４２】
（実施の形態１のシミュレーション実行例）
次に、実施の形態１のシミュレーションの実行例を具体的に説明する。図６は、実施の形態１における複数のモデルの実行例を示すタイミングチャートである。ここで、モデルＡ、Ｂは、ソフトウェアモデルＳＷであり、モデルＣは、ハードウェアモデルＨＷであるとする。
【００４３】
ターゲット時刻監視部２３が監視するターゲット時刻ｔの経過順に説明する。
ｔ１：ターゲット時刻（シミュレーション時刻）ｔ１では、実行キュー４０２にモデル（Ｃ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、モデル（Ｃ）のシミュレーション・プロセスを実行する。即ち、評価に移行する。
【００４４】
モデル（Ｃ）のシミュレーション・プロセスの実行後、実行キュー４０２は空であるため、スケジューラ２０は、状態“時刻進行”に移行し、タイムイベントキュー４０１に格納されている、次のタイム・イベントであるｔ２にターゲット時刻（シミュレーション時刻）を進める。この時、スケジューラ２０は、検証時刻のタイマ（無限ループ監視用タイマ）２１をクリア（キャンセル）する。
【００４５】
ｔ２：ターゲット時刻（シミュレーション時刻）ｔ２では、実行キュー４０２にモデル（Ｂ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、モデル（Ｂ）のシミュレーション・プロセスを実行する。即ち、評価に移行する。
【００４６】
モデル（Ｂ）のシミュレーション・プロセスの実行後、実行キュー４０２は空であるため、スケジューラ２０は、時刻進行に移行し、タイムイベントキュー４０１に格納されている、次のタイム・イベントであるｔ３にターゲット時刻（シミュレーション時刻）を進める。この時、スケジューラ２０は、検証時刻のタイマ２１をクリアする。
【００４７】
ｔ３：ターゲット時刻（シミュレーション時刻）ｔ３では、実行キュー４０２にモデル（Ｃ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、モデル（Ｃ）のシミュレーション・プロセスを実行する。即ち、評価に移行する。
【００４８】
モデル（Ｃ）のシミュレーション・プロセスの実行後、実行キュー４０２は空であるため、スケジューラ２０は、時刻進行に移行し、タイムイベントキュー４０１に格納されている、次のタイム・イベントであるｔ４にターゲット時刻（シミュレーション時刻）を進める。この時、スケジューラ２０は、検証時刻のタイマ２１をクリアする。
【００４９】
ｔ４：ターゲット時刻（シミュレーション時刻）ｔ４では、実行キュー４０２にモデル（Ａ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、モデル（Ａ）のシミュレーション・プロセスを実行する。即ち、評価に移行する。
【００５０】
ここで、図示のように、モデル（Ａ）のシミュレーション・プロセスの実行中に、モデル（Ｂ）を起動する即時イベントが発生すると、実行キュー４０２にモデル（Ｂ）を登録する。モデル（Ａ）のシミュレーション・プロセスの実行後、実行キュー４０２にはモデル（Ｂ）があるため、スケジューラ２０は、モデル（Ｂ）のシミュレーション・プロセスを実行する。これらモデル（Ａ，Ｂ）は、いずれもアンタイムドのソフトウェアモデルである。
【００５１】
また、図示のように、モデル（Ｂ）のシミュレーション・プロセスの実行中に、モデル（Ａ）を起動する即時イベントが発生すると、実行キュー４０２にモデル（Ａ）を登録する。モデル（Ｂ）のシミュレーション・プロセスの実行後、実行キュー４０２にはモデル（Ａ）があるため、スケジューラ２０は、モデル（Ａ）のシミュレーション・プロセスを実行する。
【００５２】
ここで、図示のように、モデル（Ａ）、モデル（Ｂ）が交互に実行され、ターゲット時刻が進まない状態（無限ループ）となる。検証時刻は、タイマ２１によりカウントアップされ、検証時刻がリセットされない。すなわち、タイムイベントキュー４０１にある、次に実行可能なモデルの時間にターゲット時間を遷移することができなくなり、シミュレーションが進まなくなる。
【００５３】
この際、検証時刻のタイマ（無限ループ監視用タイマ）２１は、検証用プラットフォーム１０のコンピュータ装置が有するＣＰＵ時間１１を用いてカウントをアップさせ、設定された時間間隔（この例では、検証時刻のタイマ２１のカウント値Ｔ＝１５）に達すると、無限ループとして検出され（ステップＳ６０１）、スケジューラ２０に対して、この無限ループの検出を割り込み要求により通知する。
【００５４】
割り込み要求を受けたスケジューラ２０は、実行中のモデル（ＡまたはＢ）のシミュレーション・プロセスを停止させる（ステップＳ６０２）。また、検証時刻のタイマ（無限ループ監視用タイマ）２１をクリア（キャンセル）する。
【００５５】
この後、スケジューラ２０は、無限ループから脱出するために、時刻進行に移行し、タイムイベントキュー４０１に格納されている、次のタイム・イベントであるｔ５にターゲット時刻（シミュレーション時刻）を進める。
【００５６】
ｔ５：ターゲット時刻（シミュレーション時刻）ｔ５では、実行キュー４０２にモデル（Ｃ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、モデル（Ｃ）のシミュレーション・プロセスを実行する。即ち、評価に移行する。
【００５７】
そして、図示のように、モデル（Ｃ）のシミュレーション・プロセスの実行中にモデル（Ｂ）を起動する即時イベントが発生すると、実行キュー４０２にモデル（Ｂ）を登録する。モデル（Ｂ）のシミュレーション・プロセスの実行後、実行キュー４０２は空であるため、スケジューラ２０は、時刻進行に移行し、タイムイベントキュー４０１に格納されている、次のタイム・イベントであるｔ６にターゲット時刻（シミュレーション時刻）を進める。この時、スケジューラ２０は、検証時刻のタイマ（無限ループ監視用タイマ）２１をクリア（キャンセル）する。
【００５８】
上記実施の形態１によれば、ソフトウェアモデルのアンタイムドのシミュレーションで発生するゼロ遅延の無限ループを検出できるようになる。また、ゼロ遅延の無限ループがあったソフトウェアモデルの実行を停止させ、ターゲット時間を次のタイムイベントキューの時刻に進めるため、次のモデルの実行が行え、シミュレーションを遂行できるようになる。このシミュレーションは、ソフトウェアモデルの無限ループに限らず、ハードウェアモデルのバグに起因する場合であっても進めることができる。さらに、タイマに設定する時間間隔でのみ、タイマの更新と監視の処理を行うため、ゼロ遅延の無限ループ検出のためのシミュレーション速度の低下を極めて小さく抑えられる。
【００５９】
（実施の形態２）
次に、実施の形態２によるシミュレーション装置について説明する。実施の形態２のスケジューラ２０は、無限ループ検出時にログ出力を行う機能が追加されている。
【００６０】
（シミュレーション動作内容）
図７は、実施の形態２によるシミュレーション動作の内容を示すフローチャートである。図１に示したスケジューラ２０とタイマ２１の処理内容を示す。タイマ２１は、ログ出力機能の追加に伴い、実行監視タイマ２１ａと、ログ出力を監視するログ出力監視タイマ２１ｂとからなる。うち、実行監視タイマ２１ａは、図１に示したタイマ２１同様に、無限ループ監視用タイマとして機能する。これら実行監視タイマ２１ａおよびログ出力監視タイマ２１ｂは、いずれも検証用プラットフォーム１０の検証時刻（ＣＰＵ時間）１１を用いてカウント動作する。
【００６１】
実行監視タイマ２１ａが行う無限ループの監視内容は、実施の形態１（図５）と同様であり、同一のステップ番号を付してある。ログ出力監視タイマ２１ｂは、スケジューラ２０からタイマスタートの指示を受けて動作する。
【００６２】
はじめに、予め設定した時間間隔（一定時間）を待つ（ステップＳ５２１）。この後、実行監視タイマ２１ａのカウント値をカウントアップする（ステップＳ５２２）。この後、スケジューラ２０からカウントアップの停止要求がくれば（ステップＳ５２３：Ｙｅｓ）、処理を終了する一方、停止要求がこなければ（ステップＳ５２３：Ｎｏ）、ステップＳ５２４に移行する。
【００６３】
ステップＳ５２４では、実行監視タイマ２１ａのカウント値がログ出力にかかる時間相当のカウンタ基準値を超えたか判断し、カウント値がカウンタ基準値を超えていない場合には（ステップＳ５２４：Ｎｏ）、ステップＳ５２１に戻る。一方、カウント値がカウンタ基準値を超えた場合には（ステップＳ５２４：Ｙｅｓ）、スケジューラ２０に対し、割り込み要求を出す（ステップＳ５２５）。
【００６４】
スケジューラ２０の処理内容は、基本的に実施の形態１（図５）と同様の処理には同一のステップ番号を付してある。ステップＳ５０４までは実施の形態１（図５）と同様の処理が実行される。
【００６５】
ステップＳ５０４において割り込み要求があった場合（ステップＳ５０４：Ｙｅｓ）、次に、割り込み種類が判別される（ステップＳ５０８）。割り込み種類がログ出力監視タイマ２１ｂから出されたものである場合には（ステップＳ５０８：ａ）、ステップＳ５０６に移行し、タイムイベントキュー４０１に、次に実行可能なモデルがある時間にターゲット時間を遷移する。この後、実行監視タイマ２１ａのカウンタをリセットし、また、ログ出力監視タイマ２１ｂを停止させ（ステップＳ５１０）、ステップＳ５０１へ戻る。
【００６６】
割り込み種類が実行監視タイマ２１ａから出されたものである場合には（ステップＳ５０８：ｂ）、モデルの実行を一時停止し（ステップＳ５０５）、ログ出力監視タイマ２１ｂをスタートさせ（ステップＳ５０９）、ステップＳ５０１に戻る。
【００６７】
（実施の形態２のシミュレーション実行例）
次に、実施の形態２のシミュレーションの実行例を具体的に説明する。図８は、実施の形態２における複数のモデルの実行例を示すタイミングチャートである。無限ループの検出（ステップＳ６０１）により、スケジューラ２０が実行中のモデル（ＡまたはＢ）のシミュレーション・プロセスを停止させる（ステップＳ６０２）処理までは、実施の形態１（図６）と同様の処理を行う。
【００６８】
この後、スケジューラ２０は、各モデルのログ出力機能を有効にして、実行監視タイマ（無限ループ監視用タイマ）２１ａをクリア（キャンセル）する。そして再度、ｔ４時刻の実行キュー４０２からシミュレーション・プロセスを実行する。
【００６９】
実行キュー４０２にモデル（Ａ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、まず、モデル（Ａ）のシミュレーション・プロセスを実行する。即ち、評価に移行する。以下再度、モデル（Ａ，Ｂ）の無限ループを実行し続けることになる。
【００７０】
ログ出力監視タイマ２１ｂは、検証用プラットフォーム１０のコンピュータ装置のＣＰＵ時間（検証時刻）１１を用いてカウンタをカウントアップし、モデル（Ａ，Ｂ）のログ出力を行う（ステップＳ６０３）。このログ出力は、ログ出力に必要な時間相当で設定されたタイマ間隔（この例では、ログ出力監視タイマ２１ｂのカウント値Ｔ＝４）の間行われ、タイマ間隔に達すると、ログ出力監視タイマ２１ｂは、スケジューラ２０に対して、ログ出力の停止を割り込み要求により通知する（ステップＳ６０４）。
【００７１】
この後、スケジューラ２０は、無限ループから脱出するために、時刻進行に移行し、タイムイベントキュー４０１に格納されている次のタイム・イベントであるｔ５にターゲット時刻（シミュレーション時刻）を進める。また、スケジューラ２０は、ログ出力監視タイマ２１ｂからの割り込み要求であるため、ログ出力監視タイマ２１ｂの停止、ターゲット時刻の更新、実行監視タイマ２１ａのリセットを行う。
【００７２】
ｔ５：ターゲット時刻（シミュレーション時刻）ｔ５では、実行キュー４０２にモデル（Ｃ）のシミュレーション・プロセスが格納されているため、スケジューラ２０は、モデル（Ｃ）のシミュレーション・プロセスを実行する。即ち、Ｅｖａｌｕａｔｅする。図示の例では、モデル（Ｃ）のシミュレーション・プロセスの実行中に、モデル（Ｂ）を起動する即時イベントが発生し、実行キュー４０２にモデル（Ｂ）を登録する。
【００７３】
モデル（Ｃ）のシミュレーション・プロセスの実行後、実行キュー４０２にはモデル（Ｂ）があるため、スケジューラはモデル（Ｂ）のシミュレーション・プロセスを実行する。モデル（Ｂ）のシミュレーション・プロセスの実行後、実行キュー４０２は空となるため、スケジューラ２０は、時刻進行に移行し、タイムイベントキュー４０１に格納されている次のタイム・イベントにターゲット時刻（シミュレーション時刻）を進める。この時、スケジューラ２０は、実行監視タイマ（無限ループ監視用タイマ）２１ａをリセットする。
【００７４】
上記実施の形態２によれば、実施の形態１の効果に加えて、無限ループ発生時にループ解析に必要な、アンタイムドのソフトウェアモデルの状態トレース情報を得ることができるようになる。これにより、発生した無限ループの解析を容易に行えるようになる。
【００７５】
なお、この実施の形態で説明したシミュレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【００７６】
以上の実施の形態に関し、更に以下の付記を開示する。
【００７７】
（付記１）ターゲットプロセッサ上で動作するソフトウェアモデルと、ハードウェアモデルとの協調動作を検証するシミュレーション装置において、
前記ハードウェアモデルの実行スケジューリングを行うスケジューラと、
前記ソフトウェアモデルの処理時間を検証用プラットフォームにおける検証時刻から算出するタイマと、
前記タイマの値に基づき、予め設定されたタイマ間隔でシミュレーション時刻を監視し、当該シミュレーション時刻に変化がないことにより処理遅延時間を持たないソフトウェアモデルの無限ループを検出する監視手段と、
を備え、
前記スケジューラは、前記監視手段による前記無限ループの検出により、前記ソフトウェアモデルの実行を停止させることを特徴とするシミュレーション装置。
【００７８】
（付記２）前記スケジューラは、前記監視手段による前記無限ループの検出により、シミュレーション時刻を処理遅延時間を持つハードウェアモデルの次のタイム・イベントまで進め、当該ハードウェアモデルのシミュレーションを実行することを特徴とする付記１に記載のシミュレーション装置。
【００７９】
（付記３）前記スケジューラは、ログ出力制御手段を備え、
当該ログ出力制御手段は、前記監視手段による前記無限ループの検出時に、予め設定された前記検証用プラットフォームにおける検証時刻の間、前記処理遅延時間を持たないソフトウェアモデルの状態トレース情報をログ出力することを特徴とする付記１または２に記載のシミュレーション装置。
【００８０】
（付記４）前記ログ出力制御手段によるログ出力後に、シミュレーション時刻を前記処理遅延時間を持つハードウェアモデルの次のタイム・イベントまで進め、当該ハードウェアモデルのシミュレーションを実行することを特徴とする付記３に記載のシミュレーション装置。
【００８１】
（付記５）前記スケジューラは、前記ハードウェアモデルの評価タイミングをイベント・ドリブンでスケジューリングすることを特徴とする付記１〜４のいずれか一つに記載のシミュレーション装置。
【００８２】
（付記６）前記ソフトウェアモデルは、Ｃベース言語で記述されていることを特徴とする付記１〜５のいずれか一つに記載のシミュレーション装置。
【００８３】
（付記７）前記ハードウェアモデルは、システムレベル設計言語で記述されていることを特徴とする付記１〜６のいずれか一つに記載のシミュレーション装置。
【００８４】
（付記８）ターゲットプロセッサ上で動作するソフトウェアモデルと、ハードウェアモデルとの協調動作を検証する処理をコンピュータに実行させるプログラムにおいて、
コンピュータを、
前記ハードウェアモデルの実行スケジューリングを行うスケジューラと、
前記ソフトウェアモデルの処理時間を検証用プラットフォームにおける検証時刻から算出するタイマと、
前記タイマの値に基づき、予め設定されたタイマ間隔でシミュレーション時刻を監視し、当該シミュレーション時刻に変化がないことにより処理遅延時間を持たないソフトウェアモデルの無限ループを検出する監視手段、として機能させ、
前記スケジューラは、前記監視手段による前記無限ループの検出により、前記ソフトウェアモデルの実行を停止させることを特徴とするプログラム。
【図面の簡単な説明】
【００８５】
【図１】この発明のシミュレーション装置の構成を示す図である。
【図２】シミュレーション装置のハードウェア構成を示す説明図である。
【図３】スケジューラの各機能の状態遷移を示す図である。
【図４】シミュレーション実行時のデータ管理状態を示す図である。
【図５】実施の形態１によるシミュレーション動作の内容を示すフローチャートである。
【図６】実施の形態１における複数のモデルの実行例を示すタイミングチャートである。
【図７】実施の形態２によるシミュレーション動作の内容を示すフローチャートである。
【図８】実施の形態２における複数のモデルの実行例を示すタイミングチャートである。
【符号の説明】
【００８６】
１  シミュレーション装置
１０  検証用プラットフォーム
２０  スケジューラ
２１  タイマ
２２  監視手段
２３  ターゲット時刻監視部
２１０  コンピュータ本体
２１１  光ディスク
２４０  ネットワーク
４０１  タイムイベントキュー
４０２  実行キュー
ＳＷ  ソフトウェアモデル
ＨＷ  ハードウェアモデル
【図１】
2010009113.tif 000003
【図２】
2010009113.tif 000004
【図３】
2010009113.tif 000005
【図４】
2010009113.tif 000006
【図５】
2010009113.tif 000007
【図６】
2010009113.tif 000008
【図７】
2010009113.tif 000009
【図８】
2010009113.tif 000010