(57)【要約】  動作速度を妥当に維持しつつ、シミュレーション動作の再現性を実現することを可能ならしめる、Ｖ−ＰＩＬＳを提供する。  ペリフェラル・スケジューラは、全てのペリフェラル・エミュレータの並列動作を開始し、設定された個々のペリフェラル・エミュレータの処理の区切りタイミングに基づき、最も早く処理の区切りを迎える予定のペリフェラル・エミュレータ（ペリフェラルＰ）を見出し、当該区切りの時間に達する時点まで、各プロセッサ・エミュレータと、各プラント・シミュレータの実行を進め、ペリフェラルＰと、プロセッサ・エミュレータ及びプラント・シミュレータの間でデータを同期させる。
2011046089.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理により、シミュレーションを行なうシミュレーション・システムにおいて、
前記コンピュータ上で実行される複数のプロセッサ・エミュレータと、
前記コンピュータ上で実行される複数のプラント・シミュレータと、
前記コンピュータ上で実行され、各々が固有の処理の区切りタイミングをもち、前記プロセッサ・エミュレータと前記プラント・シミュレータ間のデータの通信を行う、複数のペリフェラル・エミュレータと、
前記ペリフェラル・エミュレータのうち、処理の区切りのタイミングが一番早く到来するペリフェラル・エミュレータとその処理の区切りのタイミングを見出す手段と、
前記見出されたタイミングで、前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータを同期させる手段を有する、
シミュレーション・システム。
【請求項２】
前記コンピュータが、マルチタスク・システムであり、前記複数のプロセッサ・エミュレータと、前記ペリフェラル・エミュレータと、前記複数のプラント・シミュレータは、前記マルチプロセッサ・シ個別のスレッドまたはプロセスとして実行される、請求項１に記載のシミュレーション・システム。
【請求項３】
前記コンピュータが、マルチプロセッサ・システムであり、前記複数のプロセッサ・エミュレータと、前記ペリフェラル・エミュレータと、前記複数のプラント・シミュレータは、前記マルチプロセッサ・システムの異なるプロセッサまたはコアに割り当てられて個別のスレッドまたはプロセスとして実行される、請求項２に記載のシミュレーション・システム。
【請求項４】
前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータを同期させる手段は、前記コンピュータのメモリに確保され、前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータの各々に対応して設けられた完了フラグをセットすることによって同期を達成する、請求項２に記載のシミュレーション・システム。
【請求項５】
前記完了フラグは、カウンタ・セマフォにより実現される、請求項４に記載のシミュレーション・システム。
【請求項６】
コンピュータの処理により、シミュレーションを行なうシミュレーション方法において、
前記コンピュータ上で複数のプロセッサ・エミュレータを実行するステップと、
前記コンピュータ上で複数のプラント・シミュレータを実行するステップと、
前記コンピュータ上で、各々が固有の処理の区切りタイミングをもち、前記プロセッサ・エミュレータと前記プラント・シミュレータ間のデータの通信を行う、複数のペリフェラル・エミュレータを実行するステップと、
前記ペリフェラル・エミュレータのうち、処理の区切りのタイミングが一番早く到来するペリフェラル・エミュレータとその処理の区切りのタイミングを見出すステップと、
前記見出されたタイミングで、前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータを同期させるステップを有する、
シミュレーション方法。
【請求項７】
前記コンピュータが、マルチタスク・システムであり、前記複数のプロセッサ・エミュレータと、前記ペリフェラル・エミュレータと、前記複数のプラント・シミュレータは、前記マルチプロセッサ・シ個別のスレッドまたはプロセスとして実行される、請求項６に記載のシミュレーション方法。
【請求項８】
前記コンピュータが、マルチプロセッサ・システムであり、前記複数のプロセッサ・エミュレータと、前記ペリフェラル・エミュレータと、前記複数のプラント・シミュレータは、前記マルチプロセッサ・システムの異なるプロセッサまたはコアに割り当てられて個別のスレッドまたはプロセスとして実行される、請求項７に記載のシミュレーション方法。
【請求項９】
前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータを同期させる手段は、前記コンピュータのメモリに確保され、前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータの各々に対応して設けられた完了フラグをセットすることによって同期を達成する、請求項７に記載のシミュレーション方法。
【請求項１０】
前記完了フラグは、カウンタ・セマフォにより実現される、請求項９に記載のシミュレーション方法。
【請求項１１】
コンピュータの処理により、シミュレーションを行なうシミュレーション・プログラムであって、前記コンピュータをして、
複数のプロセッサ・エミュレータを実行するステップと、
複数のプラント・シミュレータを実行するステップと、
各々が固有の処理の区切りタイミングをもち、前記プロセッサ・エミュレータと前記プラント・シミュレータ間のデータの通信を行う、複数のペリフェラル・エミュレータを実行するステップと、
前記ペリフェラル・エミュレータのうち、処理の区切りのタイミングが一番早く到来するペリフェラル・エミュレータとその処理の区切りのタイミングを見出すステップと、
前記見出されたタイミングで、前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータを同期させるステップを実行させる、
シミュレーション・プログラム。
【請求項１２】
前記コンピュータが、マルチタスク・システムであり、前記複数のプロセッサ・エミュレータと、前記ペリフェラル・エミュレータと、前記複数のプラント・シミュレータは、前記マルチプロセッサ・シ個別のスレッドまたはプロセスとして実行される、請求項１１に記載のシミュレーション・プログラム。
【請求項１３】
前記コンピュータが、マルチプロセッサ・システムであり、前記複数のプロセッサ・エミュレータと、前記ペリフェラル・エミュレータと、前記複数のプラント・シミュレータは、前記マルチプロセッサ・システムの異なるプロセッサまたはコアに割り当てられて個別のスレッドまたはプロセスとして実行される、請求項１２に記載のシミュレーション・プログラム。
【請求項１４】
前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータを同期させる手段は、前記コンピュータのメモリに確保され、前記複数のプロセッサ・エミュレータと前記複数のプラント・シミュレータの各々に対応して設けられた完了フラグをセットすることによって同期を達成する、請求項１２に記載のシミュレーション・プログラム。
【請求項１５】
前記完了フラグは、カウンタ・セマフォにより実現される、請求項１４に記載のシミュレーション・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車などの物理システムのシミュレーションに関し、より詳しくは、ソフトウェア・ベースでのシミュレーション・システムに関するものである。
【背景技術】
【０００２】
自動車は、その初期の時代の２０世紀初頭は、動力としてのエンジンと、ブレーキ、アクセル、ハンドル、トランスミッション、サスペンジョンを含む、機構部品からなっていたが、エンジンのプラグの点火、ヘッドライト以外は、電気的な仕組みはほとんど利用していなかった。【０００３】
ところが、１９７０年代頃から、大気汚染、石油危機などに備えて、エンジンを効率的に制御する必要性が生じ、このためエンジンの制御に、ＥＣＵが使用されるようになってきた。ＥＣＵは、一般的に、センサからの入力信号を、例えばＡ／Ｄ変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部（マイクロコンピュータ）と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成される。【０００４】
いまや、エンジンやトランスミッションなどの制御システム、Anti-lock Breaking System （ＡＢＳ）、Electronic Stability Control （ＥＳＣ）、パワーステアリングだけでなく、ワイパー制御やセキュリティ・モニタリング・システムなどに至るまで、最近の自動車では、機構部品だけでなく、エレクトロニクス部品やソフトウエアが重要な比率を占める。後者に関する開発費は全体の２５％とも４０％とも言われ、ハイブリッド型の自動車では７０％を占める。【０００５】
ところで、自動車は、エンジンなどの動力装置や動力伝達装置、ステアリングなどの走行装置、ブレーキ装置、その他ボディ系などの機械部品（プラント）で構成され、また、これらのプラントの動作は、３０〜７０以上の電子制御ユニット（ＥＣＵ）のプログラムがセンサ入力（速度など）や人間からの入力（アクセルなど）に応じて、動的に決定する。【０００６】
ＥＣＵは、基本的に各々が一つのプラントの動作を制御する。たとえば、エンジンへの燃料噴射（Fuel Injection）や点火（Ignition）は、エンジン・コントロール・ユニットがその量やタイミングをソフトウエアにより決定する。ソフトウエアなので、「スポーツ」モードを用意するような高級車では、モードに応じて燃料噴射量を増量・減量することもできる。また、シフトダウンのタイミングにあわせて、自動的にブリッピング（空ぶかし）してエンジンの回転数を合わせることもできる。この場合には、エンジンのＥＣＵとトランスミッションのＥＣＵが連携して動作する必要がある。自動車の横滑りなどを防止するための統合車両姿勢安定制御（ESC: Electronic Stability Control）システムでは、さらにブレーキなどの制動装置との連動も必要となり、ＥＣＵソフトウエアは複雑になる。なお、このような「介入」機能は、ソフトウエアであるがゆえに、容易にカットすることができる。【０００７】
さて、プラントの性能を十分に引き出し、かつ、安全に動作させるためには、ＥＣＵソフトウエアの設計開発の過程において、動作パラメータのチューニングとテストを十分に行うことが重要である。一般に、実車をプロトタイプしてから、チューニングとテストを繰り返すのではコストと時間がかかりすぎるので、プロトタイプする前にコントローラとプラントを計算機の中で仮想的に実現して、高速にかつ正確に動かして、その動作を確認する方法が強く望まれる。このようなＥＣＵシミュレーションは、（１）ステートマシンなどの表現形式を用いてコントローラの動作を論理的に表現する Model-in-the-Loop Simulation (ＭＩＬＳ)、（２）その論理動作に、データ精度などハードウエアの制約を一部導入した Software-in-the-Loop Simulation (ＳＩＬＳ)、（３）ソフトウエアを完全に実装してＥＣＵプロセッサをエミュレートする Virtual Processor-in-the-Loop Simulation (Ｖ−ＰＩＬＳ)、そして、（４）ＥＣＵボードを完全に実装して、リアルタイム・プラント・シミュレーションと接続する Hardware-in-the-Loop Simulation (ＨＩＬＳ) の４種類の方式があり、 この順序で、よりプロトタイプに近くなる。【０００８】
ＭＩＬＳ／ＳＩＬＳは主に、プラントの基本的な性能を引き出すための試行錯誤フェーズに用いられている。しかし、実際にＥＣＵに搭載されるソフトウエアとは異なる動作をするので、製品の検証用途には利用することができない。一方、Ｖ−ＰＩＬＳは完成したＥＣＵソフトウエアを利用するので、ソフトウエアの期待しない動作（バグ）を発見して解決するための方式として非常に有望視されているが、再現性のある動作を達成するものとしては、まだ実現した例はない。ＨＩＬＳは、完成したＥＣＵボードの最終的な動作確認のために必ず実施されるが、障害が見つかっても再現性が保障されないのでデバッグ目的には利用できない。【０００９】
ＨＩＬＳにおいて動作が再現できない理由は、ＨＩＬＳの構成が不完全だからではなく、ＣＡＮなどのネットワークにより各ＥＣＵが相互に接続しているためである。一般に、ネットワークはモジュール間の疎な結合を実現しているため、モジュール動作の微妙なタイミングの違いでデータの到着順序が入れ替わり、結果として、システム全体の挙動が異なることがある。したがって、たとえ実車をプロトタイプしたとしても、動作の再現性は期待できない。並列分散システムのデバッグが非常に困難であることと同じ理由である。【００１０】
このように、ＨＩＬＳの構成のまま、すなわち、ＥＣＵボードとプラント・シミュレータとの疎結合という構成のままでは、それぞれのコンポーネントを高速化しても動作の一貫性は実現できない。コミュニケーションの順序の一貫性を実現することが、動作の再現性を実現するために必要である。Ｖ−ＰＩＬＳは特に、この問題を解消することが期待される。【００１１】
従来の概念に従う、典型的なＶ−ＰＩＬＳの構成を図１に示す。この構成は、複数のＥＣＵエミュレータと、複数のプラント・シミュレータと、全体の動作をスケジュールするグローバル・スケジューラ１１０からなる。図１では便宜上、２つのＥＣＵエミュレータ１０２及び１０４と、２つのプラント・シミュレータ１０６及び１０８が図示されているが、実際は図示されているよりも多いＥＣＵエミュレータとプラント・シミュレータからなることを理解されたい。【００１２】
ＥＣＵエミュレータ１０２は、プロセッサ・エミュレータ１０２ａと、ペリフェラル・エミュレータ１０２ｂからなる。ＥＣＵエミュレータ１０４も同様であるので、ＥＣＵエミュレータ１０４については、詳しい説明を省略する。【００１３】
一方、プラント・シミュレータ１０６には、クロック・コンバータ１０６ａが接続されている。プラント・シミュレータ１０８も同様であるので、プラント・シミュレータ１０８については、詳しい説明を省略する。プラント・シミュレータ１０６は例えは、ブレーキ・シミュレータであり、プラント・シミュレータ１０８は、エンジン・シミュレータである。【００１４】
さて、図示されている周波数は、例示的な典型的な動作クロック数である。すなわち、プロセッサ・エミュレータ１０２ａは、80MHzという相対的に高速のクロックで動作する。一方、プラント・シミュレータ１０６は、物理機構のシミュレータであるため、10KHzという相対的に低速で動作する。【００１５】
次に、図２のタイミング図を参照して、図１の構成の動作について説明する。固定ステップのクロックででシミュレートされるプラント・シミュレータでは、例えば10KHz、すなわち、100μsの時間ステップで入出力を繰り返す。入力は主にコントローラからの指示信号であり、出力はセンサーに送られる。【００１６】
ペリフェラル・エミュレータは、ＥＣＵエミュレータのI/O のインターフェイス部にあたり、プラント・シミュレータとプロセッサ・エミュレータを相互に接続する。典型的には（平均的には）10MHz 程度の解像度で動作すると捉えることができる。これは、プラント・シミュレータより高速だが、プロセッサ・エミュレータよりは低速となる。ペリフェラル・エミュレータは、プラント・シミュレータに対しては、パルス状の信号を送る。【００１７】
クロック・コンバータは、ペリフェラル・エミュレータとプラント・シミュレータの間に介在配置されて、ペリフェラル・エミュレータからのクロック信号の周波数を、プラント・シミュレータに適合するように低減し、且つ、プラント・シミュレータからの信号を、ペリフェラル・エミュレータに適合するように周基数を逓増させる機能をもつ。【００１８】
ペリフェラル・エミュレータは、プロセッサ・エミュレータに対しては、読み書き(R/W)の要求を受けてデータを送受信することと、割り込み(INT)を送ることを行う。特に、プロセッサ間を相互に接続するＣＡＮ(controller area network)などネットワークの機能は、ペリフェラル間の通信を必要とする。【００１９】
組み込み用のプロセッサは、80-100MHz 程度で動作するものが多く、従って、ペリフェラルの時間解像度と比べると１０倍程度高速である。プロセッサは、ペリフェラルに対しては、読み書き(R/W)操作を行う。また、ペリフェラルから割り込み信号(INT)を受け取る。【００２０】
一側面からみると、ペリフェラルは、プラントとプロセッサ、及びプロセッサ間を相互に接続する、システムの中心である。プロセッサは、ペリフェラルよりも細かい時間解像度で R/W 操作を行うが、そのための信号がプラントや他のプロセッサに伝達されるときは、ペリフェラルの時間解像度に支配される。従って、シミュレーション・システム全体では、ペリフェラルの時間解像度でセンサーデータなどの同期処理を行えば、I/O データや割り込みの処理順序は正しく再現される（細粒同期=minimum synchronization）。【００２１】
一般に、同期の時間間隔を短くすれば、より正しい動作を実現できるが、逆に処理時間のオーバヘッドを大きくするので全体処理にかかる時間が増加する。細粒同期は、これ以上細かくする必要がないという、時間解像度の上限を与えるものである。【００２２】
１つの解決策は、グローバル・スケジューラ１１０に従って、図３に示すように、同期の時間間隔を最大公約数まで引き下げることである。これによって、正確性は達成できるが、不要なタイミングでの同期処理が増えるので、同期処理のオーバヘッドが非常に大きくなる。これによって、シミュレーション・システムの処理速度が著しく低下してしまう。【００２３】
もし、ペリフェラルの処理区切りを明示的に利用することができなければ、最大公約数さえも知ることは難しいので、時間解像度を引き上げる対応により、さらにオーバヘッドは大きくなる。【００２４】
一方、時間解像度を粗くすると、多くのI/Oデータや割り込みが同一の時間ステップに押し込められることになり、その時間的前後関係の情報が失われる。これは、シミュレーションを正しく実行できていない、つまり、正確性が達成されていない状況である。特に、割り込み処理の実行順序は、ソフトウエアを意図どおりに動作させるためにも非常に重要である。数少ない現存の Ｖ−ＰＩＬＳシステムは、この不正確なシミュレーション状況にあり、その順序情報喪失のために、ＥＣＵソフトウエアのデバッグも十分に行えていないという重大な問題がある。【００２５】
特開２００７−１１７２０号公報は、複雑な構成のシステムに対応しつつ、システムシミュレータの構成を柔軟に変更可能とすることを解決すべき課題とするもので、システムシミュレータを、ＣＰＵの動作をシミュレートするインストラクションセットシミュレータ、バスの動作をシミュレートするバスシミュレータ、ペリフェラルの動作をシミュレートするペリフェラルシミュレータの３種類で構成し、各シミュレータ間で互いの状態を参照・変更可能な各インターフェースをそれぞれ設けることを開示する。しかし、この従来技術は、ペリフェラルとＣＰＵ間の同期を最適化する技法について示唆するものではない。
【先行技術文献】
【特許文献】
【００２６】
【特許文献１】特開２００７−１１７２０号公報
【発明の概要】
【発明が解決しようとする課題】
【００２７】
この発明の目的は、動作速度を妥当に維持しつつ、シミュレーション動作の再現性を実現することを可能ならしめる、Ｖ−ＰＩＬＳを提供することにある。
【課題を解決するための手段】
【００２８】
この発明は、上記課題を解決するためになされたものであり、この発明によれば、ペリフェラル・エミュレータ、プロセッサ・エミュレータ、及びプラント・シミュレータ全体の動作タイミングを制御するペリフェラル・スケジューラが用意される。【００２９】
この発明によれば、ペリフェラル・スケジューラによる制御を可能ならしめるために、ペリフェラル・エミュレータ、プロセッサ・エミュレータ、及びプラント・シミュレータの各々に個別に対応する完了フラグが用意される。【００３０】
個々のペリフェラル・エミュレータはそれぞれ、固有の処理の区切りをもつ。典型的にはペリフェラル・エミュレータはSystemCで記述されるので、そのソースコードを、プログラムを用いてスキャンすることによって、固有の処理の区切りを確認することができる。典型的には、wait()と記述された行が区切りとなる。【００３１】
そのようにして確認された個々のペリフェラル・エミュレータの処理の区切りの情報は、ペリフェラル・スケジューラに関連づけられる。【００３２】
このような準備の下で、ペリフェラル・スケジューラは、全てのペリフェラル・エミュレータの完了フラグを解除(OFF)することによって、並列動作を開始する。そうして、ペリフェラル・スケジューラは、個々のペリフェラル・エミュレータの処理の区切りの情報に基づき、最も早く処理の区切りを迎える予定のペリフェラル・エミュレータを見出す。それをペリフェラルPと呼ぶことにする。その処理の区切りの時間をTとすると、ペリフェラル・スケジューラは、時間Tに達する時点まで、各プロセッサ・エミュレータと、各プラント・シミュレータの実行を進める。【００３３】
そうして、ペリフェラル・スケジューラは、ペリフェラルPの完了フラグが設定されるのを待つ。ペリフェラルPは、自身が処理の区切りに達すると、完了フラグを設定する。ペリフェラルPの完了フラグが設定されたことに応答して、ペリフェラル・スケジューラは、ペリフェラルPと、プロセッサ・エミュレータ及びプラント・シミュレータの間でデータを同期させる。【００３４】
次にペリフェラル・スケジューラは、ペリフェラルPの完了フラグを解除(OFF)して、その動作を再開する。これにより再び、全てのペリフェラル・エミュレータが並列に動作する。【００３５】
その後、ペリフェラル・スケジューラは、設定された個々のペリフェラル・エミュレータの区切りの情報に基づき、次に最も早く処理の区切りを迎える予定のペリフェラル・エミュレータを見出す。ペリフェラル・スケジューラは、このような、ペリフェラル・エミュレータの処理の区切りのタイミングを基準とした動作スケジューリングで、シミュレーション・システム全体を動作させる。
【発明の効果】
【００３６】
以上のように、この発明によれば、ペリフェラルを介して個々のモジュールが通信するシミュレーション・システムにおいて、ペリフェラル・エミュレータの処理の区切りのタイミングを基準とした動作スケジューリングによって、処理の再現性が保証される、という効果が得られる。また、ペリフェラル・エミュレータの処理の区切りの情報という、細粒同期よりも粗く且つ処理の再現性が保証される最適な粒度で処理の同期が行われるので、シミュレーションの最適化が達成される。
【図面の簡単な説明】
【００３７】
【図１】従来のＶ−ＰＩＬＳシステムの構成を示すブロック図である。
【図２】従来のＶ−ＰＩＬＳシステムの動作を示すタイミング図である。
【図３】最大の粒度で同期させる、従来のＶ−ＰＩＬＳシステムの動作のタイミング図である。
【図４】コンピュータのハードウェア構成のブロック図である。
【図５】ペリフェラル・スケジューラ、ペリフェラル・エミュレータ、プロセッサ・エミュレータ及びプラント・シミュレータの論理的な接続関係を示すブロック図である。
【図６】本発明のシミュレーション・システムの構成の動作を示すタイミング図である。
【図７】ペリフェラル・エミュレータに対する完了フラグの機能を示す図である。
【図８】ペリフェラル・スケジューラの動作のフローチャートを示す図である。
【図９】ペリフェラル・エミュレータの動作のフローチャートを示す図である。
【図１０】プロセッサ・エミュレータに対する完了フラグの機能を示す図である。
【図１１】プラント・シミュレータに対する完了フラグの機能を示す図である。
【図１２】プラント・シミュレータの動作のフローチャートを示す図である。
【発明を実施するための形態】
【００３８】
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
【００３９】
先ず、図４を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図４において、ホスト・バス４０２には、複数のＣＰＵ１  ４０４ａ、ＣＰＵ２  ４０４ｂ、ＣＰＵ３  ４０４ｃ、・・・ＣＰＵｎ  ４０４ｎが接続されている。ホスト・バス４０２にはさらに、ＣＰＵ１  ４０４ａ、ＣＰＵ２  ４０４ｂ、ＣＰＵ３  ４０４ｃ、・・・ＣＰＵｎ  ４０４ｎの演算処理のためのメイン・メモリ４０６が接続されている。
【００４０】
一方、Ｉ／Ｏバス４０８には、キーボード４１０、マウス４１２、ディスプレイ４１４及びハードティスク・ドライブ４１６が接続されている。Ｉ／Ｏバス４０８は、Ｉ／Ｏブリッジ４１８を介して、ホスト・バス４０２に接続されている。キーボード４１０及びマウス４１２は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ４１４は、必要に応じて、処理をＧＵＩで操作するためのメニューを表示するために使用される。
【００４１】
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘがある。その際、ＣＰＵ１  ４０４ａ、ＣＰＵ２  ４０４ｂ、ＣＰＵ３  ４０４ｃ、・・・ＣＰＵｎ  ４０４ｎは、例えば、インテル（Ｒ）Ｘｅｏｎ（Ｒ）であり、オペレーティング・システムは、Ｗｉｎｄｏｗｓ（商標）Ｓｅｒｖｅｒ  ２００３である。オペレーティング・システムは、好適には、マルチタスクの機能を有するものである。オペレーティング・システムは、ハードティスク・ドライブ４１６に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ４１６からメイン・メモリ４０６に読み込まれる。
【００４２】
本発明を実施するためには、マルチプロセッサ・システムを用いることが望ましい。ここでマルチプロセッサ・システムとは、一般に、独立に演算処理し得るプロセッサ機能のコアを複数もつプロセッサを用いるシステムを意図しており、従って、マルチコア・シングルプロセッサ・システム、シングルコア・マルチプロセッサ・システム、及びマルチコア・マルチプロセッサ・システムのどれかでよいことを理解されたい。
【００４３】
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Ｗｉｎｄｏｗｓ（Ｒ）に限定されず、Ｌｉｎｕｘ（Ｒ）、Ｍａｃ  ＯＳ（Ｒ）など、任意のオペレーティング・システムを使用することができる。さらに、シミュレーション・プログラムを高速で動作させるために、ＰＯＷＥＲ（商標）６ベースで、オペレーティング・システムがＡＩＸ（商標）のＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｐなどのコンピュータ・システムを使用してもよい。
【００４４】
ハードティスク・ドライブ４１６にはさらに、後述するプロセッサ・エミュレータ、ペリフェラル・スケジューラ、ペリフェラル・エミュレータ、クロック・コンバータ及びプラント・シミュレータなどのプログラムが格納されており、その各々は、コンピュータ・システムの起動時にメイン・メモリにロードされて、個別のスレッドまたはプロセスとして個々のＣＰＵ１〜ＣＰＵｎに割当てられて、実行される。このため、図４に示すコンピュータ・システムは、好適には、プロセッサ・エミュレータ、ペリフェラル・スケジューラ、ペリフェラル・エミュレータ、クロック・コンバータ及びプラント・シミュレータの個々のスレッドに割り当てるに十分な個数のＣＰＵをもつ。
【００４５】
図５は、そのように個々のＣＰＵ１〜ＣＰＵｎに割当てられて個別のスレッドまたはプロセスとして動作するプロセッサ・エミュレータ、ペリフェラル・スケジューラ、ペリフェラル・エミュレータ、クロック・コンバータ及びプラント・シミュレータの間の協働関係を示す機能ブロック図である。
【００４６】
図５に示すように、本発明の特徴は、それ自身が１つのスレッドまたはプロセスであるペリフェラル・スケジューラ５０２が、それとは独立のスレッドまたはプロセスであるペリフェラル・エミュレータ５０４ａ、５０４ｂ、５０４ｃ、・・・５０４ｚを緊密に制御することである。この特徴は、ペリフェラル・エミュレータが個々のＥＣＵエミュレータ内にあって互いに独立に動作する図１の典型的な従来の構成と対比することで一層より理解されるであろう。
【００４７】
図５において、それぞれが独立のスレッドまたはプロセスであるプロセッサ・エミュレータ５０６ａ、５０６ｂ、５０６ｃ、・・・５０６ｍは、基本的には、関連するペリフェラル・エミュレータ５０４ａ、５０４ｂ、５０４ｃ、・・・５０４ｚから割り込みを受けて、通信しつつ動作するが、直接ペリフェラル・スケジューラ５０２からの制御も受ける。その制御の仕組みは、後述する。
【００４８】
一方、それぞれが独立のスレッドまたはプロセスであるプラント・シミュレータ５０８ａ、５０８ｂ、・・・５０８ｎは、ペリフェラル・エミュレータ５０４ａ、５０４ｂ、５０４ｃ、・・・５０４ｚと通信する。なお、図示しないが、プラント・シミュレータ５０８ａ、５０８ｂ、・・・５０８ｎは、図１に示すクロック・コンバータの機能を果たすモジュールを内蔵している。一般的に、プラント・シミュレータの動作クロックよりも、ペリフェラル・エミュレータの動作クロックの方が１０００倍程度細かいので、そのようなクロック・コンバータの機能を設けて、ペリフェラル・エミュレータからプラント・シミュレータに到来するパルスを間引き、一方、プラント・シミュレータからペリフェラル・エミュレータに送出されるパルスを増加させることによって、インターフェースを合わせる必要がある。
【００４９】
図６は、ペリフェラル・スケジューラの制御の下での、ペリフェラル・エミュレータ、プロセッサ・エミュレータ及びプラント・シミュレータの動作の概要を示すタイミング図である。
【００５０】
ペリフェラル・エミュレータの各々は、固有の処理の区切り位置に対応する時間の情報をもち、その値は例えば、ペリフェラル・エミュレータを記述するためのSystemCのソースコードを、コンピュータ・プログラムによって解析することにより、取得することができる。ペリフェラル・エミュレータの区切り位置は例えば、SystemCで記述した場合における、wait()と記述された行に対応する。
【００５１】
このようにして取得された各ペリフェラル・エミュレータの処理の区切り位置に対応する時間の情報は、ペリフェラル・スケジューラ５０２に予め関連づけられ、ペリフェラル・スケジューラ５０２は、これらの処理の区切り位置の時間を値を用いて、任意の時点で最も近いペリフェラル・エミュレータの処理の区切りのタイミングを確定して、そのタイミングに向けて、全てのプロセッサ・エミュレータと、全てのプラント・シミュレータを実行させ、同期の足並みを揃えさせる。
【００５２】
このとき、もし各ペリフェラル・エミュレータの処理の区切り位置が周期的であるなら、ペリフェラル・エミュレータ毎にそのような周期の値を予め記憶しておけば、それらを整数倍することで、ペリフェラル・スケジューラ５０２は、次の処理の区切りのタイミングを計算することができる。しかし、非常に限られた場合を除き、ペリフェラル・エミュレータの処理の区切り位置は、一般的には周期的にはならない。
【００５３】
そこで、ペリフェラル・スケジューラ５０２が、タイミングを合わせるべきペリフェラル・エミュレータを選ぶ処理は、次のようなものである。すなわち、例えば、所定のプログラムによって予めペリフェラル・エミュレータのSystemCのソースコードをスキャンすることで、ペリフェラル・エミュレータ毎に、その処理の区切り間の時間を含むテーブルを、共有メモリなどに保存しておき、ペリフェラル・スケジューラ５０２がこのテーブルを参照可能にする。これにより、ペリフェラル・スケジューラ５０２は、テーブルのエントリに基づき、加算的に次回の処理の区切りを計算することができ、現在のシミュレーション時間から最も近い処理の区切りを、次の目標の時間として選択することが可能となる。
【００５４】
図６に示す例では、ペリフェラル２に関連するタイミングT1が、シミュレーション・システム開始後の最初のペリフェラル・エミュレータの処理の区切りのタイミングであるとペリフェラル・スケジューラ５０２が認識するタイミングであり、タイミングT1に向けて、ペリフェラル・スケジューラ５０２は、全てのプロセッサ・エミュレータと、全てのプラント・シミュレータを実行させる。
【００５５】
次にペリフェラル・スケジューラ５０２は、ペリフェラルｎに関連するタイミングT2が、シミュレーション・システム開始後の次のペリフェラル・エミュレータの処理の区切りのタイミングであると認識して、タイミングT2に向けて、ペリフェラル・スケジューラ５０２は、全てのプロセッサ・エミュレータと、全てのプラント・シミュレータを実行させる。
【００５６】
ペリフェラル・スケジューラ５０２による、このような順次のペリフェラル・エミュレータの処理の区切りのタイミングの確定は、ペリフェラル・スケジューラ５０２が予め記憶している全てのペリフェラル・エミュレータの処理の区切り位置の時間の情報に基づき、シミュレーション・システムの開始時点から順次、どれかのペリフェラル・エミュレータの最も近いタイミングを見つけることによって行われる。
【００５７】
図７は、ペリフェラル・スケジューラ５０２による同期制御する仕組みを模式的に示す図である。すなわち、本発明のこの実施例によれば、メイン・メモリ４０６の所定の領域に、各ペリフェラル・エミュレータ５０２ａ、５０２ｂ、５０２ｃ・・・に対応する完了フラグ７０２ａ、７０２ｂ、７０２ｃ・・・が設けられ、このような完了フラグ７０２ａ、７０２ｂ、７０２ｃ・・・を使って、ペリフェラル・スケジューラ５０２は、各ペリフェラル・エミュレータ５０２ａ、５０２ｂ、５０２ｃに対する同期制御を実行する。
【００５８】
次に、図８のフローチャートを参照して、ペリフェラル・スケジューラ５０２の処理について説明する。図８において、ステップ８０２では、ペリフェラル・スケジューラ５０２は、初期化して、全ての全てのペリフェラル・エミュレータの処理を開始させる。この初期化には、各ペリフェラル・エミュレータ５０２ａ、５０２ｂ、５０２ｃ・・・に対応する完了フラグ７０２ａ、７０２ｂ、７０２ｃ・・・を全てＯＦＦにリセットする処理も含まれる。
【００５９】
ステップ８０４では、ペリフェラル・スケジューラ５０２が、前述のように、ペリフェラル・エミュレータ毎の、処理の区切り間の時間を含むテーブルを参照することにより、最も近い時点で処理の区切りが来ると見込まれるペリフェラル・エミュレータを見出す。
【００６０】
ステップ８０６では、ペリフェラル・スケジューラ５０２が、全てのプロセッサ・エミュレータと、全てのプラント・シミュレータを、ステップ８０４で見出された最も近いタイミングで示される時点に向けて、同時並列的に実行させる。そして、その完了を待つ。
【００６１】
ステップ８０８では、ペリフェラル・スケジューラ５０２が。ステップ８０４で見出されたタイミングに関連するペリフェラル・エミュレータが処理の区切りが到来するのを待つ。
【００６２】
ステップ８０４で見出されたタイミングを処理の区切りとしてもつペリフェラル・エミュレータが処理の区切りが来ると、そのペリフェラル・エミュレータは、完了フラグをＯＮにして処理を一旦停止する。この処理は、図９のフローチャートを参照してより詳細に説明する。スレッド間通信によりそのことはペリフェラル・スケジューラ５０２に伝えられ、ペリフェラル・スケジューラ５０２はステップ８１０で、ペリフェラル・エミュレータとプロセッサ・エミュレータの間、及びペリフェラル・エミュレータとＩ／Ｏデータとプラント・シミュレータの間で、Ｉ／Ｏデータの同期と、割込みを同期させる。それが完了すると、ペリフェラル・スケジューラ５０２は、ステップ８０４で見出されたタイミングに関連するペリフェラル・エミュレータの完了フラグをＯＦＦにして、ステップ８０４に戻る。
【００６３】
ステップ８０４では、ペリフェラル・スケジューラ５０２は、次に最も近い時点で処理の区切りが来ると見込まれるペリフェラル・エミュレータを見出す。ここでいう次に最も近い時点で処理が完了すると見込まれるペリフェラル・エミュレータとは、図６の例では、ペリフェラルｎであり、それに関連して、タイミングT2が選ばれる。
【００６４】
次に、図９のフローチャートを参照して、ペリフェラル・エミュレータの動作を説明する。この動作では最初に、その完了フラグはＯＮになっていると仮定する。そこでステップ９０２では、ペリフェラル・エミュレータは、完了フラグがクリア（ＯＦＦ）されるのを待つ。
【００６５】
完了フラグがペリフェラル・スケジューラ５０２によってクリアされると、処理はステップ９０４に進み、そこで、ペリフェラル・エミュレータは固有の処理を行う。その処理が完了すると、ペリフェラル・エミュレータはステップ９０６で完了フラグをセット（ＯＮ）して、ステップ９０２に戻り、完了フラグがクリア（ＯＦＦ）されるのを待つ。
【００６６】
次に、ペリフェラル・スケジューラ５０２による、プロセッサ・エミュレータの制御について、説明する。この実施例におけるシミュレーション・システムでは、ホストのプロセッサ、すなわち、図４に示すＣＰＵ１、ＣＰＵ２、・・・ＣＰＵｎにおいて、ゲスト用プロセッサ、すなわち、自動車の組込みシステムなどの実機用に開発されたプログラムが実行される。その際、ソースコードがある場合でも、ゲスト用のバイナリしかない場合でも、コードは、ホスト・プロセッサ上のバイナリ・コードに変換されてから実行されることになる。
【００６７】
但し、本発明によれば、そのコード変換の際に、ペリフェラル・スケジューラ５０２と同期をとるために、特殊なコードが、要所に挿入される。
【００６８】
先ず、コードの基本ブロックの先頭やループの最後には、プロセッサ時刻をあらわすデータ(T_CPU)を更新して増やすためのコードが挿入される。すなわち、下記のようにある定数ConstがT_CPUに加算されるのであるが、この定数は、ゲスト・コードの時間解析に基づいて、予め決定される。
T_CPU += Const
【００６９】
また、例えば８０サイクルに１つ程度の割合で、停止すべきシミュレーション時刻(T_Peripheral)と、自身の進行時刻を比較して、待機すべきかどうかを判断するための次のようなコードを、ホスト・プロセッサ上で実行されるコードに挿入する。
if ( T_CPU > T_Peripheral )  {
POST Completion_flag;
do { SLEEP_TEMPORARY; } while (T_CPU > T_Peripheral);
}
ここで、POST Completion_flagは、完了フラグ(Completion_flag)を設定(ON)する処理である。完了フラグの領域は好適には、共有メモリ上に確保される。while (T_CPU > T_Peripheral)のループは、共有メモリ上に確保されているT_Peripheralの値が、ペリフェラル・スケジューラ５０２等によって上書きされ、T_CPU > T_Peripheralの判断がfalseになるまで、SLEEP_TEMPORARYという待機の動作を行う。
【００７０】
図１０は、上記の処理を機能ブロック的に説明する図である。すなわち、ペリフェラル・スケジューラ５０２が、最も早く処理の区切りが来るペリフェラル・エミュレータのタイミングに基づき、T_Peripheral１００２という時間を設定し、各プロセッサ・エミュレータ５０６ａ、５０６ｂ、５０６ｃ・・・は、上述したT_CPUと同等のものである固有の時間T_CPU1、T_CPU2、T_CPU3・・・をそれぞれもつ。
【００７１】
初期化段階では、ペリフェラル・スケジューラ５０２は、各プロセッサ・エミュレータ５０６ａ、５０６ｂ、５０６ｃ・・・の完了フラグ１００４ａ、１００４ｂ、１００４ｃ・・・をクリア(OFF)し、各プロセッサ・エミュレータは、T_CPU > T_Peripheralとなった時点で、上述のコードによって待機状態に入る。
【００７２】
各プロセッサ・エミュレータの動作を再開させるためには、ペリフェラル・スケジューラ５０２は、T_CPU < T_Peripheralとなる新たなT_Peripheral１００２を提供し、且つ、各プロセッサ・エミュレータ５０６ａ、５０６ｂ、５０６ｃ・・・の完了フラグ１００４ａ、１００４ｂ、１００４ｃ・・・をクリア(OFF)する。
【００７３】
次に、図１１を参照して、ペリフェラル・スケジューラ５０２と、プラント・シミュレータ５０８ａ、５０８ｂ、・・・５０８ｎの間の同期処理を、機能ブロック的に説明する。プラント・シミュレータはもともと、時間を短いステップに刻んで、近似的に微分方程式などの内部状態を計算して更新する。従って、与えられた時刻まで処理を進めることは、適合性が高いと言える。
【００７４】
図１１において、ペリフェラル・スケジューラ５０２が、最も早く処理の区切りが来るペリフェラル・エミュレータのタイミングに基づき、T_Peripheral１００２という時間を設定し、各プラント・シミュレータ５０８ａ、５０８ｂ、５０８ｃ・・・はそれぞれ固有の完了時間１１０４ａ、１１０４ｂ、１１０４ｃ・・・をもつ。初期化段階では、ペリフェラル・スケジューラ５０２は、各プラント・シミュレータ５０８ａ、５０８ｂ、５０８ｃ・・・の完了フラグ１１０２ａ、１１０２ｂ、１１０２ｃ・・・をクリア(OFF)する。なお、完了フラグ１１０２ａ、１１０２ｂ、１１０２ｃ・・・は、好適には、共有メモリ上にに確保される。
【００７５】
次に、図１２のフローチャートを参照して、ペリフェラル・スケジューラ５０２によるプラント・シミュレータの同期処理をより詳細に説明する。図１２において、ステップ１２０２では、プラント・シミュレータは、ペリフェラル・スケジューラが新しい時間Tをセットするまで待つ。この時間とは、図１１に示した、T_Peripheral１００２である。
【００７６】
ステップ１２０４では、プラント・シミュレータは、my_time > Tであるかどうかの判断を行う。ここで、my_timeとは、図１１に示した、プラント・シミュレータに対応する完了時間１１０４ａ、１１０４ｂなどである。
【００７７】
もし、my_time > Tでないなら、プラント・シミュレータは、ステップ１２０６に行って、所定の処理ステップを進める。そして、ステップ１２０８でmy_timeを進めて、ステップ１２０４に戻る。
【００７８】
ステップ１２０４で、プラント・シミュレータが、my_time <= Tであると判断したなら、プラント・シミュレータは、対応する完了フラグをセット(ON)して、ステップ１２０２に戻る。
【００７９】
ところで、プラント・シミュレータ及びプロセッサ・エミュレータの完了フラグは、一実施例として、カウンタ・セマフォという仕組みで実施することができる。
【００８０】
そのために、ペリフェラル・スケジューラ側では、次のようなコードが書かれる。
extern sem_t sem_start[]; /* binary semaphores */
extern sem_t sem_finish;  /* counter semaphore */
extern int n_plants;      /* number of plant tasks */
extern int n_all;         /* number of all tasks */
{
・・・
/* タスクを実行する準備をする */
/* 例えば、T_Peripheral の更新など */
・・・
/* プラント・タスクを並列実行する */
for (int k=0; k<n_plants; k++)
sem_post(&sem_start[k]);
・・・
/* すべてのタスクが終了するまで待つ */
for (int k=0; k<n_all; k++)
sem_wait(&sem_finish);
・・・
}
【００８１】
一方、プラント・シミュレータ側では、次のようなコードが書かれる。
extern sem_t sem_start[]; /* binary semaphores */
extern sem_t sem_finish;  /* counter semaphore */
{
・・・
/* 処理開始の指示を待つ */
sem_wait(&sem_start[k]);
・・・
/* 独自の処理を進める */
・・・
/* 処理の終了を告げる */
sem_post(&sem_finish);
・・・
}
【００８２】
ここで、n_plants は、シミュレーション・システムで実行されるプラント・シミュレータの数である。
ペリフェラル・スケジューラにおける
for (int k=0; k<n_plants; k++)
sem_post(&sem_start[k]);
というコードは、n_plants 個のタスクまたはスレッドの各々に処理開始を指示すことであり、これを受けて、プラント・シミュレータ側では、
sem_wait(&sem_start[k]);
により、開始の指示を受け取ることになる。
【００８３】
一方、プロセッサ・エミュレータ及びプラント・シミュレータ側のsem_post(&sem_finish)は、ペリフェラル・スケジューラにおける
for (int k=0; k<n; k++)
sem_wait(&sem_finish);
によって待機されており、すなわち、ペリフェラル・スケジューラは、全てのプロセッサ・エミュレータ及びプラント・シミュレータの処理の終了が告げられるのを待つことになる。なお、プロセッサ・エミュレータのコードに挿入されるコードにおいて、POST Completion_flag と記述した部分が、プロセッサ・エミュレータにおけるsem_post(&sem_finish) に当たる。図１０や図１１では、完了フラグを分けて示したが、上記のようにカウンタ型のセマフォを利用するなら、１つでよい。
【００８４】
以上、自動車用の複数のシミュレーション・システムに関連して、本発明の特定の実施例を説明してきたが、本発明はこのような特定の実施例に限定されず、飛行機用のシミュレーション・システムなど、一般的な電子機械制御系システムのシミュレーション・システムに適用可能であることを、この分野の当業者であるなら、理解するであろう。
【００８５】
また、本発明は、特定のコンピュータのアーキテクチャやプラットフォームに限定されることなく、マルチタスクを実現可能な任意のプラットフォームで実装可能である。
【符号の説明】
【００８６】
４０４・・・プロセッサ
５０２・・・ペリフェラル・スケジューラ
５０４・・・ペリフェラル・エミュレータ
５０６・・・プロセッサ・エミュレータ
５０８・・・プラント・シミュレータ
７０２、１００４、１１０２・・・完了フラグ
【図１】
2011046089.tif 000003
【図２】
2011046089.tif 000004
【図３】
2011046089.tif 000005
【図４】
2011046089.tif 000006
【図５】
2011046089.tif 000007
【図６】
2011046089.tif 000008
【図７】
2011046089.tif 000009
【図８】
2011046089.tif 000010
【図９】
2011046089.tif 000011
【図１０】
2011046089.tif 000012
【図１１】
2011046089.tif 000013
【図１２】
2011046089.tif 000014
【国際調査報告】
2011046089.tif 000015
2011046089.tif 000016