(57)【特許請求の範囲】
【請求項１】
コンピュータ上で動作するプラント・シミュレータと、命令セット・シミュレータと、ペリフェラル・シミュレータと、スケジューラをもち、前記命令セット・シミュレータに割り込み信号を入力し、前記命令セット・シミュレータは前記ペリフェラル・シミュレータにＩ／Ｏ命令を入力し、前記ペリフェラル・シミュレータは、前記プラント・シミュレータにパルス信号を入力し、前記スケジューラは、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの動作を進める命令を出すシミュレーション・システムの制御方法であって、
前記コンピュータの記憶手段に、前記命令セット・シミュレータのプログラム・カウンタ毎にＩ／Ｏ命令到着予測時間の値と、Ｉ／Ｏ命令の種類をエントリとしてもつ第１段階テーブルを保持するステップと、
前記コンピュータの記憶手段に、前記Ｉ／Ｏ命令の種類毎に、前記ペリフェラル・シミュレータからの最速出力イベント時間の値をエントリとしてもつ第２段階テーブルを保持するステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータに、次のイベント時間を問い合わせるステップと、
前記プラント・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記ペリフェラル・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記命令セット・シミュレータが、前記スケジューラからの問い合わせに応答して、そのプログラム・カウンタの値に基づき、前記第１段階テーブルを表引きして、Ｉ／Ｏ命令の種類とＩ／Ｏ命令到達予測時間の値を得るとともに、得られたＩ／Ｏ命令の種類に基づき、前記第２段階テーブルを表引きして、ペリフェラル・シミュレータからの最速出力イベント時間の値を得て、該Ｉ／Ｏ命令到達予測時間の値と、該ペリフェラル・シミュレータからの最速出力イベント時間の値の合計を、次のイベント時間として返すステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの各々から返された次のイベント時間のうち一番早いイベント時間まで、シミュレーションを進めるステップを有する、
シミュレーション・システムの制御方法。
【請求項２】
前記第１段階テーブルは、前記命令セット・シミュレータが実行するバイナリ・コードの静的解析により作成される、請求項１に記載の方法。
【請求項３】
前記第１段階テーブルは、前記命令セット・シミュレータが停止する可能性がある命令のアドレスでエントリが作成される、請求項２に記載の方法。
【請求項４】
コンピュータ上で動作するプラント・シミュレータと、命令セット・シミュレータと、ペリフェラル・シミュレータと、スケジューラをもち、前記命令セット・シミュレータに割り込み信号を入力し、前記命令セット・シミュレータは前記ペリフェラル・シミュレータにＩ／Ｏ命令を入力し、前記ペリフェラル・シミュレータは、前記プラント・シミュレータにパルス信号を入力し、前記スケジューラは、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの動作を進める命令を出すシミュレーション・システムの制御プログラムであって、
前記コンピュータに、
前記コンピュータの記憶手段に、前記命令セット・シミュレータのプログラム・カウンタ毎にＩ／Ｏ命令到着予測時間の値と、Ｉ／Ｏ命令の種類をエントリとしてもつ第１段階テーブルを保持するステップと、
前記コンピュータの記憶手段に、前記Ｉ／Ｏ命令の種類毎に、前記ペリフェラル・シミュレータからの最速出力イベント時間の値をエントリとしてもつ第２段階テーブルを保持するステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータに、次のイベント時間を問い合わせるステップと、
前記プラント・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記ペリフェラル・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記セット・シミュレータが、前記スケジューラからの問い合わせに応答して、そのプログラム・カウンタの値に基づき、前記第１段階テーブルを表引きして、Ｉ／Ｏ命令の種類とＩ／Ｏ命令到達予測時間の値を得るとともに、得られたＩ／Ｏ命令の種類に基づき、前記第２段階テーブルを表引きして、ペリフェラル・シミュレータからの最速出力イベント時間の値を得て、該Ｉ／Ｏ命令到達予測時間の値と、該ペリフェラル・シミュレータからの最速出力イベント時間の値の合計を、次のイベント時間として返すステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの各々から返された次のイベント時間のうち一番早いイベント時間まで、シミュレーションを進めるステップを実行させる、
シミュレーション・システムの制御プログラム。
【請求項５】
前記第１段階テーブルは、前記命令セット・シミュレータのバイナリ・コードの静的解析により作成される、請求項４に記載のプログラム。
【請求項６】
前記第１段階テーブルは、前記命令セット・シミュレータが停止する可能性がある命令のアドレスでエントリが作成される、請求項５に記載のプログラム。
【請求項７】
コンピュータ上で動作するプラント・シミュレータと、命令セット・シミュレータと、ペリフェラル・シミュレータと、スケジューラをもち、前記命令セット・シミュレータに割り込み信号を入力し、前記命令セット・シミュレータは前記ペリフェラル・シミュレータにＩ／Ｏ命令を入力し、前記ペリフェラル・シミュレータは、前記プラント・シミュレータにパルス信号を入力し、前記スケジューラは、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの動作を進める命令を出すシミュレーション・システムであって、
記憶手段と、
前記記憶手段に保持され、前記命令セット・シミュレータのプログラム・カウンタ毎にＩ／Ｏ命令到着予測時間の値と、Ｉ／Ｏ命令の種類をエントリとしてもつ第１段階テーブルと、
前記コンピュータの記憶手段に保持され、前記Ｉ／Ｏ命令の種類毎に、前記ペリフェラル・シミュレータからの最速出力イベント時間の値をエントリとしてもつ第２段階テーブルと、
前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータに、次のイベント時間を問い合わせる機能をもつ前記スケジューラと、
前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返す機能をもつ前記プラント・シミュレータと、
前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返す機能をもつ前記ペリフェラル・シミュレータと、
前記スケジューラからの問い合わせに応答して、そのプログラム・カウンタの値に基づき、前記第１段階テーブルを表引きして、Ｉ／Ｏ命令の種類とＩ／Ｏ命令到達予測時間の値を得るとともに、得られたＩ／Ｏ命令の種類に基づき、前記第２段階テーブルを表引きして、ペリフェラル・シミュレータからの最速出力イベント時間の値を得て、該Ｉ／Ｏ命令到達予測時間の値と、該ペリフェラル・シミュレータからの最速出力イベント時間の値の合計を、次のイベント時間として返す機能をもつ前記命令セット・シミュレータとを有し、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの各々から返された次のイベント時間のうち一番早いイベント時間まで、シミュレーションを進める機能をさらに有する、
シミュレーション・システム。
【請求項８】
前記第１段階テーブルは、前記命令セット・シミュレータのバイナリ・コードの静的解析により作成される、請求項７に記載のシステム。
【請求項９】
前記第１段階テーブルは、前記命令セット・シミュレータが停止する可能性がある命令のアドレスでエントリが作成される、請求項８に記載のシステム。
【請求項１０】
コンピュータ上で動作するプラント・シミュレータと、命令セット・シミュレータと、ペリフェラル・シミュレータと、スケジューラをもち、前記命令セット・シミュレータに割り込み信号を入力し、前記命令セット・シミュレータは前記ペリフェラル・シミュレータにＩ／Ｏ命令を入力し、前記ペリフェラル・シミュレータは、前記プラント・シミュレータにパルス信号を入力し、前記スケジューラは、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの動作を進める命令を出すシミュレーション・システムの制御方法であって、
前記コンピュータの記憶手段に、前記命令セット・シミュレータのプログラム・カウンタ毎にＩ／Ｏ命令到着予測時間の値をエントリとしてもつイベント予測テーブルを保持するステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータに、次のイベント時間を問い合わせるステップと、
前記プラント・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記ペリフェラル・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記命令セット・シミュレータが、前記スケジューラからの問い合わせに応答して、そのプログラム・カウンタの値に基づき、前記イベント予測テーブルを表引きして、Ｉ／Ｏ命令到達予測時間の値を得て、次のイベント時間として返すステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの各々から返された次のイベント時間のうち一番早いイベント時間まで、シミュレーションを進めるステップを有する、
シミュレーション・システムの制御方法。
【請求項１１】
前記イベント予測テーブルは、前記命令セット・シミュレータが実行するバイナリ・コードの静的解析により作成される、請求項１０に記載の方法。
【請求項１２】
前記イベント予測テーブルは、前記命令セット・シミュレータが停止する可能性がある命令のアドレスでエントリが作成される、請求項１１に記載の方法。
【請求項１３】
コンピュータ上で動作するプラント・シミュレータと、命令セット・シミュレータと、ペリフェラル・シミュレータと、スケジューラをもち、前記命令セット・シミュレータに割り込み信号を入力し、前記命令セット・シミュレータは前記ペリフェラル・シミュレータにＩ／Ｏ命令を入力し、前記ペリフェラル・シミュレータは、前記プラント・シミュレータにパルス信号を入力し、前記スケジューラは、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの動作を進める命令を出すシミュレーション・システムの制御プログラムであって、
前記コンピュータに、
前記コンピュータの記憶手段に、前記命令セット・シミュレータのプログラム・カウンタ毎にＩ／Ｏ命令到着予測時間の値をエントリとしてもつイベント予測テーブルを保持するステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータに、次のイベント時間を問い合わせるステップと、
前記プラント・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記ペリフェラル・シミュレータが、前記スケジューラからの問い合わせに応答して、予め計算した次のイベント時間を返すステップと、
前記命令セット・シミュレータが、前記スケジューラからの問い合わせに応答して、そのプログラム・カウンタの値に基づき、前記イベント予測テーブルを表引きして、Ｉ／Ｏ命令到達予測時間の値を得て、次のイベント時間として返すステップと、
前記スケジューラが、前記プラント・シミュレータと、前記命令セット・シミュレータと、前記ペリフェラル・シミュレータの各々から返された次のイベント時間のうち一番早いイベント時間まで、シミュレーションを進めるステップを実行させる、
シミュレーション・システムの制御プログラム。
【請求項１４】
前記イベント予測テーブルは、前記命令セット・シミュレータが実行するバイナリ・コードの静的解析により作成される、請求項１３に記載のプログラム。
【請求項１５】
前記イベント予測テーブルは、前記命令セット・シミュレータが停止する可能性がある命令のアドレスでエントリが作成される、請求項１４に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車などの物理システムのシミュレーションに関し、より詳しくは、ソフトウェア・ベースでのシミュレーション・システムに関するものである。
【背景技術】
【０００２】
自動車は、その初期の時代の２０世紀初頭は、動力としてのエンジンと、ブレーキ、アクセル、ハンドル、トランスミッション、サスペンジョンを含む、機構部品からなっていたが、エンジンのプラグの点火、ヘッドライト以外は、電気的な仕組みはほとんど利用していなかった。
【０００３】
ところが、１９７０年代頃から、大気汚染、石油危機などに備えて、エンジンを効率的に制御する必要性が生じ、このためエンジンの制御に、ＥＣＵが使用されるようになってきた。ＥＣＵは、一般的に、センサからの入力信号を、例えばＡ／Ｄ変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部（マイクロコンピュータ）と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成される。
【０００４】
いまや、エンジンやトランスミッションなどの制御システム、Anti-lock Breaking System （ＡＢＳ）、Electronic Stability Control （ＥＳＣ）、パワーステアリングだけでなく、ワイパー制御やセキュリティ・モニタリング・システムなどに至るまで、最近の自動車では、機構部品だけでなく、エレクトロニクス部品やソフトウエアが重要な比率を占める。後者に関する開発費は全体の２５％とも４０％とも言われ、ハイブリッド型の自動車では７０％を占める。
【０００５】
ところで、自動車は、エンジンなどの動力装置や動力伝達装置、ステアリングなどの走行装置、ブレーキ装置、その他ボディ系などの機械部品（プラント）で構成され、また、これらのプラントの動作は、３０〜７０以上の電子制御ユニット（ＥＣＵ）のプログラムがセンサ入力（速度など）や人間からの入力（アクセルなど）に応じて、動的に決定する。
【０００６】
ＥＣＵは、基本的に各々が一つのプラントの動作を制御する。たとえば、エンジンへの燃料噴射（Fuel Injection）や点火（Ignition）は、エンジン・コントロール・ユニットがその量やタイミングをソフトウエアにより決定する。ソフトウエアなので、「スポーツ」モードを用意するような高級車では、モードに応じて燃料噴射量を増量・減量することもできる。また、シフトダウンのタイミングにあわせて、自動的にブリッピング（空ぶかし）してエンジンの回転数を合わせることもできる。この場合には、エンジンのＥＣＵとトランスミッションのＥＣＵが連携して動作する必要がある。自動車の横滑りなどを防止するための統合車両姿勢安定制御（ESC: Electronic Stability Control）システムでは、さらにブレーキなどの制動装置との連動も必要となり、ＥＣＵソフトウエアは複雑になる。なお、このような「介入」機能は、ソフトウエアであるがゆえに、容易にカットすることができる。
【０００７】
さて、プラントの性能を十分に引き出し、かつ、安全に動作させるためには、ＥＣＵソフトウエアの設計開発の過程において、動作パラメータのチューニングとテストを十分に行うことが重要である。一般に、実車をプロトタイプしてから、チューニングとテストを繰り返すのではコストと時間がかかりすぎるので、プロトタイプする前にコントローラとプラントを計算機の中で仮想的に実現して、高速にかつ正確に動かして、その動作を確認する方法が強く望まれる。このようなＥＣＵシミュレーションは、（１）ステートマシンなどの表現形式を用いてコントローラの動作を論理的に表現する Model-in-the-Loop Simulation (ＭＩＬＳ)、（２）その論理動作に、データ精度などハードウエアの制約を一部導入した Software-in-the-Loop Simulation (ＳＩＬＳ)、（３）ソフトウエアを完全に実装してＥＣＵプロセッサをエミュレートするProcessor-in-the-Loop Simulation (ＰＩＬＳ)あるいは Virtual Hardware-in-the-Loop Simulation (Ｖ−HＩＬＳ)、そして、（４）ＥＣＵボードを完全に実装して、リアルタイム・プラント・シミュレーションと接続する Hardware-in-the-Loop Simulation (ＨＩＬＳ) の４種類の方式があり、 この順序で、よりプロトタイプに近くなる。
【０００８】
ＭＩＬＳ／ＳＩＬＳは主に、プラントの基本的な性能を引き出すための試行錯誤フェーズに用いられている。しかし、実際にＥＣＵに搭載されるソフトウエアとは異なる動作をするので、製品の検証用途には利用することができない。一方、Ｖ−ＨＩＬＳは完成したＥＣＵソフトウエアを利用するので、ソフトウエアの期待しない動作（バグ）を発見して解決するための方式として非常に有望視されているが、再現性のある動作を達成するものとしては、まだ実現した例はない。ＨＩＬＳは、完成したＥＣＵボードの最終的な動作確認のために必ず実施されるが、障害が見つかっても再現性が保証されないのでデバッグ目的には利用できない。
【０００９】
このように、ＨＩＬＳの構成のまま、すなわち、ＥＣＵボードとプラント・シミュレータとの疎結合という構成のままでは、それぞれのコンポーネントを高速化しても動作の一貫性は実現できない。コミュニケーションの順序の一貫性を実現することが、動作の再現性を実現するために必要である。Ｖ−ＨＩＬＳは特に、この問題を解消することが期待される。
【００１０】
従来の概念に従う、典型的なＶ−ＨＩＬＳの構成は、複数のＥＣＵエミュレータと、複数のプラント・シミュレータと、全体の動作をスケジュールするグローバル・スケジューラからなる。
【００１１】
ＥＣＵエミュレータは、プロセッサ・エミュレータと、ペリフェラル・エミュレータからなる。一方、プラント・シミュレータには、ブレーキ・シミュレータ、エンジン・シミュレータなどが含まれる。
【００１２】
このとき、プロセッサ・エミュレータは例えば、80MHzという相対的に高解像度のクロックで動作する。一方、プラント・シミュレータは、物理機構のシミュレータであるため、例えば、10KHzという相対的に低解像度で動作する。一般に、低解像度のほうが高速にシミュレーションできるので、プラント・シミュレータのほうが高速である場合が多い。
【００１３】
プラント・シミュレータは必ずしも、固定長の処理ステップ時間で繰り返して数値計算を行うわけではなく、計算誤差の影響を抑えたり、不連続な変化点のタイミングなどに応じて可変ステップが必要となるケースが多い。いずれにしても、各ステップにおいてコントローラから指示信号を受け取り、また、センサーに向けて内部状態を出力する。なお、指示信号は、スイッチのオンとオフを表現するためにパルス状であることが多い。
【００１４】
ペリフェラル・エミュレータは、ＥＣＵエミュレータのＩ／Ｏのインターフェイス部にあたり、プラント・シミュレータとプロセッサ・エミュレータを相互に接続する。典型的には（平均的には）10MHz 程度の解像度で動作すると捉えることができる。これは、プラント・シミュレータより高速だが、プロセッサ・エミュレータよりは低速となる。ペリフェラル・エミュレータは、プラント・シミュレータに対しては、パルス状の信号を送る。また、プラント・シミュレータから内部状態を量的なデータとして読み取る。
【００１５】
一側面からみると、ペリフェラルは、プラントとプロセッサ、及びプロセッサ間を相互に接続する、システムの中心である。ペリフェラルを通過する信号の順序を互いに区別できるだけの時間解像度があれば、プラントとプロセッサ間の相互作用に関しては、その順序は正しく再現できる。しかし、次の信号までにかかる時間がデータの精度を決定する（速度の算出など）なら、時間解像度は細かければ細かいほど良い。つまり、時間解像度に応じてデータ誤差の大きさが決まる。
【００１６】
データ誤差の問題以外にもオーバヘッドの問題がある。すなわち、固定の同期間隔を設ける方法では、同期の間隔を短くすれば、より正しい動作を実現できるが、逆に、同期処理にかかるオーバヘッドを大きくするので全体処理にかかる時間が増加する。
【００１７】
したがって、同期の間隔を固定にして最大限まで小さくする、というアプローチは、データ誤差とオーバヘッドの両面から現実的な解法とはなりえない。
【００１８】
上述したことから理解されるように、シミュレーションの高速化には同期頻度の軽減が必要であるが、そのためには、各シミュレータまたはエミュレータ間の出力イベントのタイミングを予測する必要がある。
【００１９】
トランザクション・レベルのシミュレーションでは、出力イベントは入力時点で登録されるため、出力のタイミングは予測可能である。しかし、ＥＣＵエミュレータあるいはプロセッサ・エミュレータである命令セット・シミュレータ（ＩＳＳ:Instruction Set Simulator)は、実行するまで出力のタイミングが分からないため、ＩＳＳだけがイベント同期できないという問題がある。そしてこのことが、Ｉ／Ｏクロック精度でシミュレーションを高速化する上での阻害要因になっている。
【００２０】
Ｖ−ＨＩＬＳの従来技術として、特開２００７−１１７２０号公報は、複雑な構成のシステムに対応しつつ、システムシミュレータの構成を柔軟に変更可能とすることを解決すべき課題とするもので、システムシミュレータを、ＣＰＵの動作をシミュレートするインストラクションセットシミュレータ、バスの動作をシミュレートするバスシミュレータ、ペリフェラルの動作をシミュレートするペリフェラルシミュレータの３種類で構成し、各シミュレータ間で互いの状態を参照・変更可能な各インターフェースをそれぞれ設けることを開示する。しかし、この従来技術は、ペリフェラルとＣＰＵあるいはＥＣＵの間の同期を最適化する技法について示唆するものではない。
【００２１】
特開２０１０−１３４８３９号公報は、コンピュータによって実装される、シミュレーション・システムにおいて、連続系シミュレータと、離散系シミュレータと、前記連続系シミュレータから前記離散系シミュレータに送られるパルスのエッジ信号の情報を時間付きで保存するエッジ保存手段と、前記離散系シミュレータのイベントの発生時間を、ロールバック可能時間として保存する手段と、前記連続系シミュレータのロールバック動作に応答して、該ロールバックの発生時間より前の前記離散系シミュレータの前記ロールバック可能時間を検索する検索手段と、前記検索手段によって見出された前記ロールバック可能時間に対応する前記エッジ信号を、前記エッジ保存手段から読み出して、前記離散系シミュレータに送る手段を設けることを開示する。特に、エッジ保存手段などは、テーブルとして記録される。しかし、この従来技術も、ペリフェラルとＥＣＵの間の同期軽減の問題に対する解決策を示唆するものではない。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開２００７−１１７２０号公報
【特許文献２】特開２０１０−１３４８３９号公報
【発明の概要】
【発明が解決しようとする課題】
【００２３】
従って、この発明の目的は、シミュレーションで使用されるＩＳＳの出力タイミングを高い精度で予測可能とする技法を提供することにある。
【００２４】
この発明の他の目的は、ＩＳＳの出力タイミングを予測することにより、シミュレーションの速度を向上させることにある。
【課題を解決するための手段】
【００２５】
この発明が適用されるシミュレーション・システムは、典型的には、プラント・シミュレータと、プロセッサ・エミュレータであるＩＳＳと、プラント・シミュレータとＩＳＳの間をインターフェースするペリフェラル・シミュレータと、全体のタイミングを取り仕切るためのスケジューラを有する。
【００２６】
ペリフェラル・シミュレータは、プラント・シミュレータからの連続パルス信号を受け取り、割込みイベント信号に変換して、プロセッサ・エミュレータに入力する。プロセッサ・エミュレータは、割込みイベント信号に応答してペリフェラル・シミュレータに、Ｉ／Ｏ命令を返す。ペリフェラル・シミュレータはさらに、プロセッサ・エミュレータから入力されたＩ／Ｏ命令を、パルスに変換して、プラント・シミュレータに入力する。
【００２７】
そのとき、プラント・シミュレータからの連続パルス信号のタイミングも、ペリフェラル・シミュレータの割込みイベント信号も、所定のスケジュールに従い予測可能であるが、プロセッサ・エミュレータ（ＩＳＳ）からのＩ／Ｏ命令のタイミングは従来予測不可能であった。
【００２８】
そこで、本発明によれば、ＩＳＳにより実行されるプログラム・コードを予め解析して、ＩＳＳの実行のプログラム・カウンタ毎に、命令のサイクル数に基づき、Ｉ／Ｏ命令到達予測時間が推定され、そのとき出されるＩ／Ｏ命令の種類とともに、第１段階テーブルとして、システムのハードディスク・ドライブなどに記録される。この処理は、好適には、所定のプログラム・ツールにより、ＩＳＳにより実行されるプログラム・コードを静的に解析することによって実行される。
【００２９】
このようにして第１段階テーブルが作成されると、スケジューラは、命令セット・シミュレータを介して、その実行プログラム・カウンタの値で、第１段階テーブルを引くことによって、Ｉ／Ｏ命令到達予測時間と、そのとき出力されるＩ／Ｏ命令の情報を得る。
【００３０】
この発明の別の側面によれば、Ｉ／Ｏ命令に対するペリフェラル・シミュレータからの最速出力イベント時間の表（第２段階テーブル）が用意され、やはりシステムのハードディスク・ドライブなどに記録される。第２段階テーブルは、第１段階テーブルから得られたＩ／Ｏ命令で以って表引きされ、同期の削減に伴う、より高速なシミュレーションの実行を可能ならしめる。
【００３１】
この情報を用いると、スケジューラは、プラント・シミュレータ、ペリフェラル・シミュレータ及びＩＳＳのうち、最も近い将来に起こるイベントの時間を知ることができるので、シミュレーションの細粒クロックに拘ることなく、そのイベントの時間まで、プラント・シミュレータ、ペリフェラル・シミュレータ及びＩＳＳを一気に進めることによって、シミュレーションを高速に実行することができる。
【発明の効果】
【００３２】
この発明によれば、ＩＳＳの処理番地に基づき表引きされてＩ／Ｏ命令到達予測時間を返す第１段階テーブルを用意したことによって、ＩＳＳがＩ／Ｏ命令を出力するタイミングを正確に予測することが可能となり、そのタイミング情報を用いることにより、スケジューラが、プラント・シミュレータ、ペリフェラル・シミュレータ及びＩＳＳのうち、最も近い将来に起こるイベントの時間を知ることができるので、そのイベントの時間まで、プラント・シミュレータ、ペリフェラル・シミュレータ及びＩＳＳを一気に進めることによって、シミュレーションを高速に実行することができる。
また、Ｉ／Ｏ命令からペリフェラル・シミュレータの最速イベント出力時間を与える第２段階テーブルを用いることによって、最も近い将来に起こるイベントの時間をより先まで予測して、シミュレーションをさらに高速に実行することができる。
【図面の簡単な説明】
【００３３】
【図１】本発明を実施するためのハードウェアの一例の構成を示すブロック図である。
【図２】本発明を実施するための機能構成の一例の構成を示すブロック図である。
【図３】第１段階テーブルを作成する処理のフローチャートを示す図である。
【図４】第１段階テーブルを作成する処理のフローチャートを示す図である。
【図５】第２段階テーブルを作成する処理のフローチャートを示す図である。
【図６】第１段階テーブルと第２段階テーブルの関係を示す図である。
【図７】シミュレーション動作のフローチャートを示す図である。
【図８】本発明によるシミュレーション動作におけるタイミングを示す図である。
【図９】従来の典型的なシミュレーション動作におけるタイミングを示す図である。
【発明を実施するための形態】
【００３４】
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
【００３５】
図１を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図１において、システム・バス１０２には、ＣＰＵ１０４と、主記憶（ＲＡＭ）１０６と、ハードディスク・ドライブ（ＨＤＤ）１０８と、キーボード１１０と、マウス１１２と、ディスプレイ１１４が接続されている。ＣＰＵ１０４は、好適には、３２ビットまたは６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＰｅｎｔｉｕｍ（商標）４、インテル社のＣｏｒｅ（商標）  ２  ＤＵＯ、Ｃｏｒｅ（商標）  ２  ｑｕａｄ、Ｘｅｏｎ（商標）、ＡＭＤ社のＡｔｈｌｏｎ（商標）などを使用することができる。主記憶１０６は、好適には、２ＧＢ以上の容量、より好ましくは、４ＧＢ以上の容量をもつものである。
【００３６】
ハードディスク・ドライブ１０８には、オペレーティング・システムが、格納されている。オペレーティング・システムは、Ｌｉｎｕｘ（商標）、マイクロソフト社のＷｉｎｄｏｗｓ  ７、Ｗｉｎｄｏｗｓ  ＸＰ（商標）、Ｗｉｎｄｏｗｓ（商標）２０００、アップルコンピュータのＭａｃ  ＯＳ（商標）などの、ＣＰＵ１０４に適合する任意のものでよい。
【００３７】
ハードティスク・ドライブ１０８にはさらに、図２に関連して後述する命令セット・シミュレータ２１６で実行されるプログラム・コード２０２、第１段階テーブル作成モジュール２０４、作成された第１段階テーブル２０６、ペリフェラル・シミュレータの仕様情報のファイル２０８、第２段階テーブル作成モジュール２１０、作成された第２段階テーブル２１２、プラント・シミュレータ２１４、命令セット・シミュレータ２１６、ペリフェラル・シミュレータ２１８及びスケジューラ２２０が保存されている。
【００３８】
第１段階テーブル作成モジュール２０４及び第２段階テーブル作成モジュール２１０は、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ(R)などの任意のプログラム言語で書くことができる。
【００３９】
第１段階テーブル２０６及び第２段階テーブル２１２は、ＣＳＶ、ＸＭＬなどの、表を表現可能な任意の形式で、ハードティスク・ドライブ１０８に保存され、シミュレーションの実行時には、好適には、命令セット・シミュレータ２１６によってアクセスしやすいように、予め主記憶１０６にロードされる。
【００４０】
プラント・シミュレータ２１４は、好適には、MATLAB(R)/Simulink(R)のような連続的数値シミュレーション・モデリング・システムで作成される。ペリフェラル・シミュレータ２１８は、トランザクション型のエミュレータであり、好適には、SystemC/TLMで作成される。命令セット・シミュレータ（ＩＳＳ）２１６は、プロセッサ・エミュレータとも呼ばれ、自動車のシステムでは、エンジン、ブレーキなどのプラントを制御するためのＥＣＵの役割を果たす。
【００４１】
キーボード１１０及びマウス１１２は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、シミュレーションを開始したり、所定のパラメータを入力したりするために使用される。
【００４２】
次に、図２のブロック図を参照して、本発明を実施するための機能構成について説明する。図２において、ＩＳＳで実行されるゲスト・コード２０２は、命令セット・シミュレータ（ＩＳＳ）２１６が実行するコードであり、好適には、実行可能なバイナリ・コードである。第１段階テーブル作成モジュール２０４は、ＩＳＳで実行されるゲスト・コード２０２を、命令番地に沿って静的に解析し、第１段階テーブル２０６を作成して、ハードティスク・ドライブ１０８に書き込み、保存する。第１段階テーブル２０６の作成処理は、図３及び図４のフローチャートを参照して、後で説明する。
【００４３】
仕様入力２０８と示されているブロックは、好適には、ペリフェラル・シミュレータ２１８の仕様を記述した所定のフォーマットのファイルによる入力であるが、キーボード１１０を用いた手入力でもよい。
【００４４】
第２段階テーブル作成モジュール２１０は、仕様入力２０８の情報に基づき、第２段階テーブル２１２をを作成して、ハードティスク・ドライブ１０８に書き込み、保存する。第２段階テーブル２１２の作成処理は、図５のフローチャートを参照して後で説明する。
【００４５】
プラント・シミュレータ２１４は、エンジンなどの動力装置、トランスミッションなどの動力伝達装置、ステアリングなどの走行装置、及びブレーキ装置などの自動車の機構装置をシミュレートする。
【００４６】
ペリフェラル・シミュレータ２１８は、プラント・シミュレータ２１４からの連続パルス信号を受け取り、割込みイベント信号に変換して、プロセッサ・エミュレータあるいはＥＣＵエミュレータである命令セット・シミュレータ２１６に入力する。命令セット・シミュレータ２１６は割込みイベント信号に応答してペリフェラル・シミュレータ２１８に、Ｉ／Ｏ命令を返す。ペリフェラル・シミュレータ２１８はさらに、ペリフェラル・シミュレータ２１８から入力されたＩ／Ｏ命令を、パルスに変換して、プラント・シミュレータ２１４に入力する。
【００４７】
スケジューラ２２０は、プラント・シミュレータ２１４、命令セット・シミュレータ２１６及びペリフェラル・シミュレータ２１８の個々に対して、時間tを与えてその時間まで進めることと、完了後にプラント・シミュレータ２１４、命令セット・シミュレータ２１６及びペリフェラル・シミュレータ２１８の個々から完了通知を受け取る機能をもつ。
【００４８】
従来技術の問題点は、命令セット・シミュレータ２１６からＩ／Ｏ命令が出されるタイミングが予測不可能であったことである。これを解消するため、本発明によれば、命令セット・シミュレータ２１６は、スケジューラ２２０からの問い合わせに応答して、そのプログラム・カウンタの値に基づき、予め用意された第１段階テーブル２０６を表引き(table look-up)して、Ｉ／Ｏ命令を出力するタイミングの予測値を提供する。
【００４９】
命令セット・シミュレータ２１６はさらに、第１段階テーブル２０６の表引きによって得られたＩ／Ｏ命令の種類に基づき、第２段階テーブル２１２を表引きして、ペリフェラル・シミュレータからの最速出力イベント時間の値を得る。図８に示すように、第１段階テーブル２０６の表引きによって得られたＩ／Ｏ命令到達予測時間の値と、第２段階テーブル２１２の表引きによって得られたペリフェラル・シミュレータからの最速出力イベント時間の値の合計が、次のイベントまでの予測時間となる。
【００５０】
第１段階テーブル２０６及び第２段階テーブル２１２を表引きしつつシミュレーションを行う処理については、図７のフローチャートを参照して、後で説明する。
【００５１】
次に、図３及び図４のフローチャートを参照して、第１段階テーブル作成モジュール２０４が第１段階テーブルを作成する処理を説明する。
【００５２】
第１段階テーブル作成モジュール２０４は、命令セット・シミュレータ（ＩＳＳ）２１６が停止する可能性のある全てのアドレスについて１つずつ、ステップ３０２からステップ３０８までを繰り返す。ここで、命令セット・シミュレータ２１６が停止しなければならないケースとは、ペリフェラル・シミュレータ２１８から割り込みを受ける場合と、ペリフェラル・シミュレータ２１８に、Read/Writeコマンドを出力する場合の２つである。ペリフェラル・シミュレータ２１８は、Ｉ／Ｏクロックで動作しているため、命令セット・シミュレータ２１６は、ペリフェラル・シミュレータ２１８からの割り込みを、Ｉ／Ｏクロックの境界で受け取ることになる。従って、命令セット・シミュレータ２１６が停止する可能性があるのは、「Ｉ／Ｏクロックの境界」及び「Read/Writeコマンドを実行するタイミング」の２つで、これらは、命令セット・シミュレータ２１６のバイナリ・コードを静的に解析することによって検出することができる。
【００５３】
第１段階テーブル作成モジュール２０４は、ステップ３０４で、探索ルーチンを呼び出す。この探索ルーチンについては、図４のフローチャートを参照して、後で説明する。
【００５４】
ステップ３０６では、第１段階テーブル作成モジュール２０４は、ステップ３０４での探索中にチャージしたサイクル数から、Ｉ／Ｏ命令到着予測時間を求め、次のＩ／Ｏ命令の種別とともに、表、すなわち、第１段階テーブル２０６に登録する。図７には、第１段階テーブル２０６が、「プログラムカウンタ」、「Ｉ／Ｏ命令到達予測時間」、及び「次のＩ／Ｏ命令」という３つのフィールドをもつことと、その具体的なエントリの例が示されている。１クロックの時間幅は既知なので、それに得られたサイクル数を掛けることで、Ｉ／Ｏ命令到着予測時間が得られる。
【００５５】
ステップ３０８は、ループの終端であり、処理は、命令セット・シミュレータ（ＩＳＳ）２１６が停止する可能性のある全てのアドレスを走査するまで、ステップ３０２に戻る。
【００５６】
次に、図４のフローチャートを参照して、ステップ３０４での探索ルーチンについて説明する。
【００５７】
第１段階テーブル作成モジュール２０４は、ステップ４０２で、命令を読み込み、ステップ４０４で、読み込んだ命令のサイクル数をチャージ、すなわちある所定の変数に加算する。ここで、命令のサイクル数とは、その命令が占めるサイクルの数である。
【００５８】
ステップ４０６で、第１段階テーブル作成モジュール２０４は、読み込んだ命令がLoadまたはStoreかどうかを判断し、もしそうなら、ステップ４０８に進みそこで、Load/Storeの対象アドレス範囲をチェックする。これは、例えば、次のような処理により行われる。これは、Load/Storeアクセスが、メインメモリに対するものか、ペリフェラルに対するものかを判別するため、Load/Storeで指定されたアドレスの範囲をチェックすることを意図している。その処理をプログラムのコードで示すと以下のとおりである。
【００５９】
あるCPUのメインメモリが「0x00000000 - 0x10000000」のアドレス・レンジにマップされているとすると、このチェックを行うコードは、
if ((address >= 0x00000000) && (address <= 0x10000000)) {
Load/Storeの対象がメインメモリの場合の処理
}
else  { /* メインメモリ以外へのアクセスは全てペリフェラルへのアクセスであると判断する */
Load/Storeの対象がペリフェラルの場合の処理
}
【００６０】
その処理の結果、ステップ４１０で、第１段階テーブル作成モジュール２０４が、ペリフェラル・シミュレータ２１８に対するLoad/Storeであると判断すると、ステップ４１２で、これまでにチャージしたサイクル数を次のＩ／Ｏ命令までの予測サイクル数として処理を終了する。
【００６１】
ステップ４１０で、Unknown、すなわちアドレスから判別できない場合は、全てペリフェラル・シミュレータ２１８に対するLoad/Storeであると保守的に判断して、ステップ４１２の処理を行う。
【００６２】
ステップ４１０で、第１段階テーブル作成モジュール２０４が、ペリフェラル・シミュレータ２１８に対するLoad/Storeでないと判断すると、ステップ４１４で、ＣＰＵ待ち状態かどうかの判断を行う。ＣＰＵ待ち状態とは、busy loop, yieldなどである。もしそうなら、ステップ４１６に進み、第１段階テーブル作成モジュール２０４は、次のＩ／Ｏ命令までのサイクル数を∞、すなわち現実的にはありえない大きい数字としてセットし、処理を終了する。
【００６３】
ステップ４１４で、第１段階テーブル作成モジュール２０４がＣＰＵ待ち状態でないと判断すると、ステップ４１８で、読み込んだ命令が分岐命令かどうかの判断を行う。もしそうなら、ステップ４２０で、第１段階テーブル作成モジュール２０４は、分岐幅を幅優先に探索し、次のＩ／Ｏ命令までのサイクル数が最も少ない経路が確定した時点で、予測サイクル数を確定し、分岐先の探索を終了する。こうして、処理を終了する。
【００６４】
ステップ４１８で、読み込んだ命令が分岐命令でないなら、第１段階テーブル作成モジュール２０４は、ステップ４２２で、解析対象アドレスを次の命令に進め、ステップ４０２に戻る。
【００６５】
次に、図５のフローチャートを参照して、第２段階テーブル作成モジュール２１０が第２段階テーブル２１２を作成する処理を説明する。
【００６６】
図５において、ステップ５０２からステップ５１８までのループにおいて、第２段階テーブル作成モジュール２１０は、Ｉ／Ｏ命令のリストから、表、すなわち第２段階テーブル２１２に、未登録の命令を一つずつ処理していく。ここでの命令の入力は、図２で仕様入力２０８のブロックで示したように、仕様を記述したファイルから命令の仕様を１つずつ読み込んでもいいし、担当者が仕様を見ながら、手入力で打ち込んでもいい。あるいは、第２段階テーブル作成モジュール２１０が、データを入力するためのパネルを表示してもよい。すなわち、そのパネルには、図５のフローチャートの判断ブロックに示すような選択肢があり、適宜ラジオ・ボタンをクリックしながら、エントリを埋めていくようにしてもよい。
【００６７】
ステップ５０４では、第２段階テーブル作成モジュール２１０は、当該のＩ／Ｏ命令の種類がReadかどうか判断する。もしそうなら、第２段階テーブル作成モジュール２１０は、ステップ５０６で、0を第２段階テーブル２１２に登録して、ステップ５０２に戻る。
【００６８】
当該のＩ／Ｏ命令の種類がReadでないなら、第２段階テーブル作成モジュール２１０は、ステップ５０８で、当該のＩ／Ｏ命令の種類が割り込みを引き起こすWriteかどうか判断し、もしそうでないなら、特に出力イベントはないので、ステップ５１０で∞を第２段階テーブル２１２に登録して、ステップ５０２に戻る。
【００６９】
当該のＩ／Ｏ命令の種類が割り込みを引き起こすWriteであるなら、第２段階テーブル作成モジュール２１０は、ステップ５１２で、割り込み発生までの時間がペリフェラル・シミュレータ２１８の状態に拘わらず一定かどうか判断し、そうでないなら、ステップ５１４で0を第２段階テーブル２１２に登録して、ステップ５０２に戻る。
【００７０】
割り込み発生までの時間がペリフェラル・シミュレータ２１８の状態に拘わらず一定であるなら、第２段階テーブル作成モジュール２１０は、ステップ５１６で、バス・トランザクションの終了から割り込み発生までの時間を、仕様に基づき第２段階テーブル２１２に登録して、ステップ５０２に戻る。
【００７１】
こうして、想定される全てのＩ／Ｏ命令を網羅したと確認する担当者の操作に応答して、第２段階テーブル作成モジュール２１０は、ステップ５１８で抜けて、処理を終了する。このような処理の結果として作成された第２段階テーブル２１２のエントリの例を、図６に示す。
【００７２】
次に、図７のフローチャートを参照して、第１段階テーブル２０６及び第２段階テーブル２１２を用いたシミュレーション動作について説明する。
【００７３】
図７のステップ７０２では、スケジューラ２２０が、各シミュレータ、すなわち、プラント・シミュレータ２１４、ペリフェラル・シミュレータ２１８及び命令セット・シミュレータ２１６に、次の出力イベントまでの時間を問い合わせる。
【００７４】
ステップ７０４で、プラント・シミュレータ２１４とペリフェラル・シミュレータ２１８は、入力があった時点で、予め出力イベントの時間を計算しているので、その時間をスケジューラ２２０に通知する。一方、命令セット・シミュレータ２１６は、本来は、予め出力イベントの時間を計算することはできないが、スケジューラ２２０から問い合わせを受けた時点での自身のプログラム・カウンタの値を基に、第１段階テーブル２０６を表引きし、その表引きの結果の「次のＩ／Ｏ命令」のエントリで以って、第２段階テーブル２０６を表引きする。そして、第１段階テーブル２０６を表引きして得られた「Ｉ／Ｏ命令到達予測時間」の値と、第２段階テーブル２１２の表引きによって得られた「ペリフェラル・シミュレータからの最速出力イベント時間」の値の合計を、次の出力イベントまでの時間として、スケジューラ２２０に返す。この様子は、図８のタイミング図に示されている。
【００７５】
次に、ステップ７０６では、スケジューラ２２０は、最も近い将来における出力イベントまでの時間を次のタイムクォンタムとする。
【００７６】
ステップ７０８では、スケジューラ２２０は、ステップ７０６で決定したタイムクォンタムで、プラント・シミュレータ２１４、命令セット・シミュレータ２１６及びペリフェラル・シミュレータ２１８を実行する。
【００７７】
ステップ７１０では、シミュレーション終了かどうか判断され、もしそうならシミュレーションが終了し、そうでないならステップ７０２に戻って、シミュレーションが継続される。
【００７８】
図９は、比較のため、従来のシミュレーション・システムのタイミング図を示す。すなわち、従来の手法では、命令セット・シミュレータ２１６がＩ／Ｏ命令を出力するタイミングが予測できないので、システムのクロック毎にプラント・シミュレータ２１４、命令セット・シミュレータ２１６及びペリフェラル・シミュレータ２１８を同期させる必要があり、このことは明らかにシミュレーション速度の低下をもたらす。
【００７９】
なお、この実施例では、図６に示すように、第１段階テーブル２０６と第２段階テーブル２１２の両方が使用されているが、第１段階テーブル２０６だけ使用し、第２段階テーブル２１２は使用しないでも、所定の目的は達成できる。その場合、スケジューラ２２０からの問い合わせに応答して、命令セット・シミュレータ２１６は、第１段階テーブル２０６を表引きし、「Ｉ／Ｏ命令到達予測時間」の値を得て、その時間を次のイベントまでの時間としてスケジューラ２２０に返すことになる。第１段階テーブル２０６だけを使用する実施例では、「次のＩ／Ｏ命令」のフィールドが不要である。第２段階テーブル２１２をもたない実施例では、第１段階テーブルを、イベント予測テーブルと呼んでもよい。
【００８０】
また、一般的に、自動車システムは複数のＥＣＵをもつので、そのシミュレーション・システムは対応して複数の命令セット・シミュレータをもつことになるが、その場合、個々の命令セット・シミュレータ毎に、第１段階テーブル及び第２段階テーブルが用意されることになる。
【００８１】
以上、特定の実施例に関して本発明の実施例を説明してきたが、本発明は、特定のコンピュータのアーキテクチャやプラットフォームに限定されることなく、マルチタスクを実現可能な任意のプラットフォームで実装可能である。
【符号の説明】
【００８２】
１０４  ＣＰＵ
１０６  主記憶
１０８  ハードディスク・ドライブ
２０２  命令セット・シミュレータで実行されるゲスト・コード
２０４  第１段階テーブル作成モジュール
２０６  第１段階テーブル
２０８  仕様入力
２１０  第２段階テーブル作成モジュール
２１２  第２段階テーブル
２１４  プラント・シミュレータ
２１６  命令セット・シミュレータ
２１８  ペリフェラル・シミュレータ
２２０  スケジューラ
【図１】
0005528294.tif 000002
【図２】
0005528294.tif 000003
【図３】
0005528294.tif 000004
【図４】
0005528294.tif 000005
【図５】
0005528294.tif 000006
【図６】
0005528294.tif 000007
【図７】
0005528294.tif 000008
【図８】
0005528294.tif 000009
【図９】
0005528294.tif 000010