(57)【要約】  シミュレーション・システムにおいて、連続系システムと離散系システムの間の通信コストを低減することによって、シミュレーション・システムの動作速度を向上させること。  本発明によれば、離散系システムである、ＥＣＵエミュレータのペリフェラルの少なくとも一部を分離して、連続系システムのスレッドで動作するようになされる。また、連続系システムとペリフェラルとは、緩い同期をとるため、疎に通信される。このような構成をとると、連続系システムと離散系システムからなるシミュレーション・システムで、連続的クロックに応答しての連続系システムと離散系システムの間のスレッド間通信の頻度が著しく減り、通信コストが下がる。これによって、シミュレーション・システムの動作速度を向上させることが可能となる。
2010104135.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理により、シミュレーションを行なうシミュレーション・システムにおいて、
連続パルスによって動作する連続系シミュレータと、
離散イベント・メッセージにより動作する離散系シミュレータと、
前記連続系シミュレータからの連続パルス信号を、イベント・メッセージに変換して前記離散系シミュレータに送出するするためのペリフェラル手段とを有し、
前記連続系シミュレータと前記ペリフェラル手段の少なくとも一部は、同一プロセスまたは同一スレッド内で動作するように制御される、
シミュレーション・システム。
【請求項２】
前記ペリフェラル手段は、離散系シミュレータからのイベント・メッセージ信号を連続クロックの信号に変換して前記連続系シミュレータに送出する機能をさらに有する、請求項１のシミュレーション・システム。
【請求項３】
前記離散系シミュレータのイベントが、割込みである、請求項１のシミュレーション・システム。
【請求項４】
前記ペリフェラル手段と、離散系シミュレータは、非同期で通信する、請求項１のシミュレーション・システム。
【請求項５】
前記ペリフェラル手段が、データを読み書き可能なメモリを有し、前記ペリフェラル手段と、離散系シミュレータは、該メモリへの読み書きによりデータを交換する、請求項４のシミュレーション・システム。
【請求項６】
前記ペリフェラル手段が、前記連続クロック信号の周期よりも長い指定サイクル毎の同期で通信する、請求項１のシミュレーション・システム。
【請求項７】
前記シミュレーション・システムが自動車のシミュレーション・システムであり、前記連続系シミュレータがエンジン・シミュレータを含み、前記離散系シミュレータが、該エンジン・シミュレータを制御するためのＥＣＵエミュレータを含む、請求項１のシミュレーション・システム。
【請求項８】
コンピュータの処理により、シミュレーションを行なうシミュレーション方法において、
連続パルスによって動作する連続系シミュレータを動作させるステップと、
離散イベント・メッセージにより動作する離散系シミュレータを動作させるステップと、
前記連続系シミュレータからの連続パルス信号を、イベント・メッセージに変換して前記離散系シミュレータに送出するするためのペリフェラル手段を動作させるステップを有し、
前記連続系シミュレータと前記ペリフェラル手段は、同一プロセスまたは同一スレッド内で動作するように制御される、
シミュレーション方法。
【請求項９】
前記ペリフェラル手段は、離散系シミュレータからのイベント・メッセージ信号を連続クロックの信号に変換して前記連続系シミュレータに送出する機能をさらに有する、請求項８のシミュレーション方法。
【請求項１０】
前記離散系シミュレータのイベントが、割込みである、請求項８のシミュレーション方法。
【請求項１１】
前記ペリフェラル手段と、離散系シミュレータは、非同期で通信する、請求項８のシミュレーション方法。
【請求項１２】
前記ペリフェラル手段が、前記連続クロック信号の周期よりも長い指定サイクル毎の同期で通信する、請求項８のシミュレーション方法。
【請求項１３】
前記シミュレーション方法が自動車のシミュレーション方法であり、前記連続系シミュレータがエンジン・シミュレータを含み、前記離散系シミュレータが、該エンジン・シミュレータを制御するためのＥＣＵエミュレータを含む、請求項８のシミュレーション方法。
【請求項１４】
コンピュータの処理により、シミュレーションを行なうシミュレーション・プログラムであって、
前記コンピュータをして、
連続パルスによって動作する連続系シミュレータを動作させるステップと、
離散イベント・メッセージにより動作する離散系シミュレータを動作させるステップと、
前記連続系シミュレータからの連続パルス信号を、イベント・メッセージに変換して前記離散系シミュレータに送出するするためのペリフェラル手段を動作させるステップを実行させる、
前記連続系シミュレータと前記ペリフェラル手段は、同一プロセスまたは同一スレッド内で動作するように制御される、
シミュレーション・プログラム。
【請求項１５】
前記ペリフェラル手段は、離散系シミュレータからのイベント・メッセージ信号を連続クロックの信号に変換して前記連続系シミュレータに送出する機能をさらに有する、請求項１４のシミュレーション・プログラム。
【請求項１６】
前記ペリフェラル手段と、離散系シミュレータは、非同期で通信する、請求項１４のシミュレーション・プログラム。
【請求項１７】
前記離散系シミュレータのイベントが、割込みである、請求項１４のシミュレーション・プログラム。
【請求項１８】
前記ペリフェラル手段が、前記連続クロック信号の周期よりも長い指定サイクル毎の同期で通信する、請求項１４のシミュレーション・プログラム。
【請求項１９】
前記シミュレーション・プログラムが自動車のシミュレーション・プログラムであり、前記連続系シミュレータがエンジン・シミュレータを含み、前記離散系シミュレータが、該エンジン・シミュレータを制御するためのＥＣＵエミュレータを含む、請求項１４のシミュレーション・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車などの物理システムのシミュレーションに関し、より詳しくは、ソフトウェア・ベースでのシミュレーション・システムに関するものである。
【背景技術】
【０００２】
自動車は、その初期の時代の２０世紀初頭は、動力としてのエンジンと、ブレーキ、アクセル、ハンドル、トランスミッション、サスペンジョンを含む、機構部品からなっていたが、エンジンのプラグの点火、ヘッドライト以外は、電気的な仕組みはほとんど利用していなかった。【０００３】
ところが、１９７０年代頃から、大気汚染、石油危機などに備えて、エンジンを効率的に制御する必要性が生じ、このためエンジンの制御に、ＥＣＵが使用されるようになってきた。ＥＣＵは、一般的に、センサからの入力信号を、例えばＡ／Ｄ変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部（マイクロコンピュータ）と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成される。【０００４】
いまや、エンジンやトランスミッションなどの制御システム、Anti-lock Breaking System （ＡＢＳ）、Electronic Stability Control （ＥＳＣ）、パワーステアリングだけでなく、ワイパー制御やセキュリティ・モニタリング・システムなどに至るまで、最近の自動車では、機構部品だけでなく、エレクトロニクス部品やソフトウエアが重要な比率を占める。後者に関する開発費は全体の２５％とも４０％とも言われ、ハイブリッド型の自動車では７０％を占める。【０００５】
電子制御は、ＥＣＵを複数、配置して行われる。ＥＣＵ間は車載ネットワーク、例えば、Controller Area Network （ＣＡＮ） で相互に接続される。また、制御の対象である、エンジンやトランスミッションなどには、それぞれのＥＣＵから直接ワイヤ接続する。【０００６】
ＥＣＵは、小さなコンピュータであり、センサ入力などからの割り込みに応じて動作する。一方、エンジンなどは連続的に機械的動作を行っている。すなわち、コンピュータ系のディジタル・システムと、機械系の物理システムが、自動車という単一システムにおいて、並列に協調動作を行っている。当然、これを支えるソフトウエアは複雑さがますます増大しており、ＥＣＵ単体で動作を検証するだけでなく、複数を同時に検証する仕組みの実現が要望されている。【０００７】
一方、ＥＣＵの出力信号によって駆動されるアクチュエータには、電磁ソレノイド及びモータ等がある。ソレノイドは例えば、エンジンのインジェクタ、トランスミッションのシフト・コントロール、ブレーキのバルブ制御、ドアロックなどに使用される。【０００８】
このようなテストにために従来行われている技法として、ＨＩＬＳ(Hardware In the Loop Simulation)がある。特に、自動車全体のＥＣＵをテストする環境は、ホールビークルＨＩＬＳ(Whole Vehicle Hardware In the Loop Simulation)と呼ばれる。ホールビークルＨＩＬＳにおいては、実験室内で、本物のＥＣＵが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ＥＣＵからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。【０００９】
しかし、ＨＩＬＳは、専用のハードウェア装置を使い、それと本物のＥＣＵの間を物理的に配線しなくてはならないので、準備が大変である。また、別のＥＣＵに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のＥＣＵを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、ＨＩＬＳのエミュレーション用のハードウェア装置は、一般に、非常に高価である。【００１０】
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、ソフトウェアで構成する手法が存在する。この手法は、ＳＩＬＳ(Software In the Loop Simulation)と呼ばれ、ＥＣＵに搭載されるマイクロコンピュータ、入出力回路、制御のシナリオなどを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、ＥＣＵのハードウェアが存在しなくても、テストを実行可能である。【００１１】
ところで、自動車用シミュレーション・システムは、連続系シミュレータと、離散系シミュレータを有する。連続系シミュレータの例として、エンジンの機械系部分をシミュレートするシミュレータがある。離散イベント系シミュレータの例として、エンジン回転のパルスのタイミングで動作し、燃料噴射や点火のタイミングを制御するＥＣＵのシミュレータがある。【００１２】
４ＷＤのシミュレーションをする場合においては、連続系シミュレータの例として、各タイヤへのトルク配分から車の動作を繰り返し計算するシミュレータがあり、離散イベント系シミュレータの例として、10ミリ秒ごとの定期パルス信号で動作し、車のヨーレートなどのセンサ入力から各タイヤへのトルク配分を決定するＥＣＵをシミュレートするシミュレータがある。【００１３】
さらに、離散系シミュレータは、連続系シミュレータのタイムスライスとは非同期に、パルス信号入力以外に、Ｉ／Ｏポートを通じてデータの読み書きを行う。典型的には、センサからのデータを読み込み、更新する。【００１４】
図１に、従来の典型的な、離散系／連続系シミュレーション・システムな構成のブロック図を示す。このシステムの離散系シミュレータは、ＥＣＵエミュレータ１０２、１０４及び１０６からなる。実際は、より多数のＥＣＵエミュレータを有するが、ここでは例示的に３個だけ示す。【００１５】
ＥＣＵエミュレータ１０２、１０４及び１０６は、機能的には、ほぼ同一なので、代表的に、ＥＣＵエミュレータ１０２だけについて説明すると、ＥＣＵエミュレータ１０２は、ＣＰＵエミュレータ１０２ａと、ペリフェラル・エミュレータ１０２ｂとからなる。ＣＰＵエミュレータ１０２ａは、元のＥＣＵの論理機能をエミュレーションするモジュールである。【００１６】
ペリフェラル・エミュレータ１０２ｂは、エンジン・シミュレータなどの連続系シミュレータであるプラント・シミュレータ１０８からの連続パルス信号を受け取り、割込みイベント信号に変換して、離散系のＣＰＵエミュレータ１０２ａに渡し、あるいは、ＣＰＵエミュレータ１０２ａから受け取った割込みイベント信号を、連続パルス信号に変換する。【００１７】
尚、図１で点線矩形ブロックで囲ったのが、シミュレーション・プログラムの個別のスレッドである。マルチ・コアまたはマルチ・プロセッサ環境において、好適には、個々のスレッドは、個別のコアまたはプロセッサに割り当てられる。【００１８】
図２に、ＥＣＵエミュレータ１０２、１０４及び１０６と、プラント・シミュレータ１０８の間の通信のタイミング・チャートを示す。この図から見て取れるように、図１の構成では、離散系システムとしてのＥＣＵエミュレータと、連続系システムとしてのプラント・シミュレータが、個々のクロック毎に同期している。【００１９】
ところが、図１の点線ブロックで見て取れるように、プラント・シミュレータ１０８と、ＥＣＵエミュレータ１０２、１０４及び１０６とは別スレッドで実行されているので、個々のクロック毎に、スレッド間通信が生じてしまう。並列実行のために各スレッドが個別のコアまたはプロセッサにアサインされている場合には、プロセッサ間通信となって、いずれにしても、このようなスレッド間通信またはプロセッサ間通信が個々のクロック毎に発生することは非常に大きいコストであって、このことは、シミュレーション・システムの動作速度の向上を妨げる。【００２０】
特開２００１−２９０８６０号公報は、シミュレータ間の不要な同期処理をシミュレータで求め、その同期処理を削減することにより、シミュレーション速度の向上を図ったハードウエア／ソフトウエア協調シミュレータを提供することを目的とするものであって、ＣＰＵシミュレーション手段と周辺回路シミュレーション手段を同期させるシミュレーション協調手段と、シミュレーション協調手段での同期を抑制するかどうかを決定する判断手段を備え、判断手段に基づいて前記シミュレーション協調手段での同期を抑制することを開示する。【００２１】
特開平８−２２７３６７号公報は、設計エラーが予期されるシステム動作を除く全てのシステム動作を無視する高速シミュレータを使用してデバッグ速度を増加させるデバッガを得ることを目的とするものであって、各シミュレータを相互接続するための、バスサイクルに対応する信号を提供するバスのバスシミュレータとシミュレーションに不必要なバスサイクルを省略する手段を備え、シミュレーションに無関係なＣＰＵバスサイクルを省略し、または、周期的クロック信号を明示的にシミュレートしないでクロック信号のスケジュールのみを発生するようにすることを開示する。【００２２】
特開２００４−３０２２８号公報は、ＣＰＵシミュレータと、１以上の周辺マクロシミュレータと、これらの同期実行を制御する同期実行制御処理部とを備え、周辺マクロシミュレータが、ＣＰＵシミュレータでのシミュレーションに基づいて端子に入力される信号が変化したときに当該端子信号に基づくシミュレーションを実行すし、さらに周辺マクロシミュレータは、入力された端子信号の変化を検出し、変化した端子信号を端子信号リスト２２に登録し、登録された端子信号についてのみシミュレーションを実行するようにすることを開示する。【００２３】
特開２００６−６５７５８号公報は、回路シミュレーション手法において、回路データから作成された第１離散時間モデルに応答関数を与えて第２離散時間モデルを生成し、クロックのエッジタイミングおよびこのタイミングでのクロック同期回路に入出力される信号の実効的信号値を、第２離散モデルを用いて計算し、これによってシミュレーションを実行することを開示する。
【先行技術文献】
【特許文献】
【００２４】
【特許文献１】特開２００１−２９０８６０号公報
【特許文献２】特開平８−２２７３６７号公報
【特許文献３】特開２００４−３０２２８号公報
【特許文献４】特開２００６−６５７５８号公報
【発明の概要】
【発明が解決しようとする課題】
【００２５】
上記従来技術は、条件的にシミュレータを同期させたり、クロックのエッジタイミングを拾うなどの技法で、シミュレータ間の通信コストを図るものであるが、シミュレーション・システムにおける、連続系システムと離散系システムとの間のスレッド間通信あるいはプロセッサ間通信のコストの問題を十分に解決するものではない。【００２６】
従って、この発明の目的は、シミュレーション・システムにおいて、連続系システムと離散系システムの間の通信コストを低減することにある。【００２７】
この発明の他の目的は、連続系システムと離散系システムが、粗い同期をとるだけで適切に動作するシミュレーション・システムを提供することにある。
【課題を解決するための手段】
【００２８】
上記課題を解決するために研究を重ね、本願発明者は、ＥＣＵエミュレータなどの離散系シミュレータのペリフェラル部分に着目した。すなわち、ＥＣＵエミュレータは、図１にも示すように、ＣＰＵエミュレータ部分と、ペリフェラル部分からなっている。ここに、通信コストのボトルネックがあるらしいと考えた。【００２９】
そして本願発明者は、研究の末、ＥＣＵエミュレータのペリフェラルの少なくとも一部分を敢えて、連続系システムのスレッドと同一のスレッド内で動作させる、という着想に想到した。このような構成をとると、連続系システムとペリフェラルの一部が同一スレッド内で動作するので、そこで通信コストは低い。【００３０】
それでも、ペリフェラルとＥＣＵエミュレータの間のスレッド間通信は、依然として必要であるが、そのような通信は、割込みイベント、あるいは長い期間毎の周期的なアクセスのようなまばらなタイミングで生じるだけなので、通信コスト的にあまり負荷にならない。【００３１】
本発明の別の特徴によれば、連続系システムと離散系システムは、粗い同期をとるだけで適切に動作する。すなわち、本発明の第１の実施例によれば、離散系システムは、連続系システムのクロックに関係なく、独立に動作する。離散系システムは、連続系システムのクロック・モジュールにアクセス可能であり、その時刻が必要であるときのみ、クロック・モジュールにアクセスするので、通信コスト的には、ほとんど負荷にならない。【００３２】
本発明の第２の実施例によれば、離散系システムは、連続系システムのクロックのうちの間引かれたあるクロック(例えば、１／１０００)で、同期をとるため、連続系システムのクロック・モジュールにアクセスにアクセス可能である。第２の実施例は、離散系システムにおいて、ソフトウエアによるタイマー（時間計算）が使用される場合に採用される。ここで、タイマーの最小粒度より小さな周期で同期を取ることにより、ソフトウエア・タイマーの動作が保証される。
【発明の効果】
【００３３】
この発明によれば、離散系システムのペリフェラルの少なくとも一部が、連続系システムと同一のスレッドで動作するように、連続系システム側に組み込むことによって、離散系システムと連続系システムの間のスレッド間通信の頻度が大幅に低減される。これにより、スレッド間通信のコストを大幅に削減することによって、シミュレーション・システムの動作速度を著しく向上させることが可能となる。
【図面の簡単な説明】
【００３４】
【図１】離散系と連続系を有する、従来の典型的なシミュレーション・システムの機能ブロック図を示す図である。
【図２】図１のシミュレーション・システムの、タイミング・チャートを示す図である。
【図３】ＥＣＵの典型的な制御である、フィードバック閉ループ系の例を示す図である。
【図４】フィードバック閉ループ系の、応答関数による記述の例である。
【図５】本発明を実施するために使用されるコンピュータのハードウェアのブロック図である。
【図６】本発明の実施例に係るシミュレーション・システムの機能ブロック図を示す図である。
【図７】図６のシミュレーション・システムの、タイミング・チャートを示す図である。
【図８】本発明の実施例に係るシミュレーション・システムの、より詳細な機能ブロック図を示す図である。
【図９】連続系とハイブリッド・ペリフェラルの動作の処理のフローチャートを示す図である。
【図１０】ハイブリッド・ペリフェラルの構成要素の順序リストを示す図である。
【図１１】割込みコントローラの動作の処理のフローチャートを示す図である。
【図１２】アドバンスド・タイマ・ユニットの動作の処理のフローチャートを示す図である。
【図１３】別の実施例における、連続系とハイブリッド・ペリフェラルの動作の処理のフローチャートを示す図である。
【符号の説明】
【００３５】
６０２、６０４、６０６・・・ＥＣＵエミュレータ
６０２ｂ、６０４ｂ、６０６ｂ・・・ハイブリッド・ペリフェラル
【発明を実施するための形態】
【００３６】
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
【００３７】
本発明を実現するための構成を説明する前に、その前提として、ＥＣＵについて説明する。ＥＣＵは、一般的に、センサからの入力信号を、例えばＡ／Ｄ変換する入力インターフェースと、決められた論理に従ってディジタル入力信号を処理する論理演算部（マイクロコンピュータ）と、その処理結果を、アクチュエータ作動信号に変換する出力インターフェースとから構成されるものである。
【００３８】
この発明は、説明の便宜上、以下では、自動車のＥＣＵに関連して説明するが、それには限定されず、航空機、ロボットなどその他のＥＣＵをもつメカトロニクス機構全般に適用可能であることを理解されたい。
【００３９】
ＥＣＵは、周辺や環境状態、エンジンなどの駆動機構の状態、及び人間による指示操作の内容をセンサで検出して、信号として入力する。具体的には、水温センサ、吸気温センサ、過給圧センサ、ポンプ角センサ、クランク角センサ、車速センサ、アクセル位置センサ、Ａ／Ｔシフト・ポジション、スタータ・スイッチ、エアコンＥＣＵなどからの信号がある。
【００４０】
ＥＣＵは、これらの信号を入力して、電磁スピル弁、フュエル・カット・ソレノイド、タイミング・コントロール・バルブ、吸気絞りＶＳＶ、グロー・プラグ・リレー、タコメータ及びエアコン・リレーなどを駆動する信号を出力しする。
【００４１】
１つのＥＣＵが複数の異なる機構を制御するための駆動信号を出力するようにすることは不可能ではないが、例えば、エンジンとエアコンのように、応答性やその制御の厳密性が異なるものを単一のＥＣＵで制御することは合理的でなく、従って、一般的に自動車にＥＣＵは複数個設けられる。
【００４２】
図３は、ＥＣＵの典型的な制御である、フィードバック閉ループ系の例を示す図である。すなわち、図３において、ある目標の信号が、ＥＣＵであるコントローラ３０２に入力され、ＥＣＵは、目標の信号を内部処理することによって、駆動信号を出力し、制御対象モデルである、エンジンなどのプラント３０４を駆動し、プラント３０４の出力は、センサ３０６を介して、コントローラ１０２の入力にフィードバックされる。
【００４３】
ここで目標信号として与えられるのは、例えば、スロットル開度、アイドル・コントロール、ブレーキ力、シフト、スタータＯＮ・ＯＦＦ、バッテリ電圧、インジェクション通電時間、インジェクション通電回数、デポジット、ドウェル角、進角値、吸気完了フラグ、点火完了フラグ、大気圧、車両重量、転がり抵抗係数、道路勾配、粘着係数、吸気温、などのパラメータである。
【００４４】
また、センサ信号としてフィードバックされるのは、スロットル開度、吸気圧力、吸入空気量、シフト、エンジン回転数、車速、排気温、Ｏ２、冷却水温、空燃比、ノック、点火異常、などである。
【００４５】
ＥＣＵが制御する対象は、ニュートンの力学方程式で解かれる、機構系システムであったり、電気回路の応答方程式で解かれる、電気駆動回路であったり、それらの組み合わせであったりする。これらは、基本的に微分方程式であり、制御工学によれば、ラプラス変換によって応答関数に変換されて、記述することができる。
【００４６】
図４は、そのような応答関数による記述の例である。図４で破線４０２で囲った箇所が、図３のコントローラ３０２に対応し、破線４０４で囲った箇所が、図３の制御対象モデル３０４に対応し、センサ３０６が、ブロック４０６に対応する。なお、図４は、応答関数による表現の一例であって、特に本発明を限定する意図はないことを理解されたい。
【００４７】
次に、図５を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図５において、ホスト・バス５０２には、複数のＣＰＵ０  ５０４ａ、ＣＰＵ１  ５０４ｂ、ＣＰＵ２  ５０４ｃ、ＣＰＵ３  ５０４ｄが接続されている。ホスト・バス５０２にはさらに、ＣＰＵ０  ５０４ａ、ＣＰＵ１  ５０４ｂ、ＣＰＵ２  ５０４ｃ、ＣＰＵ３  ５０４ｄの演算処理のためのメイン・メモリ５０６が接続されている。
【００４８】
一方、Ｉ／Ｏバス５０８には、キーボード５１０、マウス５１２、ディスプレイ５１４及びハードティスク・ドライブ５１６が接続されている。Ｉ／Ｏバス５０８は、Ｉ／Ｏブリッジ５１８を介して、ホスト・バス５０２に接続されている。キーボード５１０及びマウス５１２は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ５１４は、必要に応じて、後述する本発明に係るプログラムをＧＵＩで操作するためのメニューを表示するために使用される。
【００４９】
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘがある。その際、ＣＰＵ０  ５０４ａ、ＣＰＵ１  ５０４ｂ、ＣＰＵ２  ５０４ｃ、ＣＰＵ３  ５０４ｄは、例えば、インテル（Ｒ）Ｃｏｒｅ  ２  ＤＵＯであり、オペレーティング・システムは、Ｗｉｎｄｏｗｓ（商標）Ｓｅｒｖｅｒ  ２００３である。オペレーティング・システムは、ハードティスク・ドライブ５１６に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ５１６からメイン・メモリ５０６に読み込まれる。
【００５０】
ここで図示されているＣＰＵの個数は４個であるが、これに限定されず、シングル・プロセッサのシステムであってもよく、あるいは、任意の個数のマルチコア、またはマルチプロセッサのシステムであってもよい。
【００５１】
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Ｗｉｎｄｏｗｓ（Ｒ）に限定されず、Ｌｉｎｕｘ（Ｒ）、Ｍａｃ  ＯＳ（Ｒ）など、任意のオペレーティング・システムを使用することができる。さらに、ＥＣＵエミュレータ・プログラム、プラント・シミュレータなどの論理プロセスを高速で動作させるために、ＰＯＷＥＲ（商標）６ベースで、オペレーティング・システムがＡＩＸ（商標）のＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｐなどのコンピュータ・システムを使用してもよい。
【００５２】
ハードディスク・ドライブ５１６にはさらに、ＥＣＵエミュレータ、プラント・シミュレータなどの複数の論理プロセス、及び、複数の論理プロセスを協働して動作させるためのプログラムが格納され、キーボード５１０及びマウス５１２によって起動操作可能である。
【００５３】
好適には、フルビークルＳＩＬＳを実現するために、１台の自動車で使われるすべてのＥＣＵのエミュレータ・プログラムが、ハードティスク・ドライブ５１６に保存されている。
【００５４】
ハードティスク・ドライブ５１６にはさらに、後述するＥＣＵエミュレータ・プログラムのためのスケジューラ、エンジン、トランスミッション、ステアリング、ワイパなどのプラント・シミュレータ・プログラム、全体のシステムの時刻を管理するためのグローバル・タイム・マネジャ及び、登り坂道、高速道路、つづら折道などの様々な、テストのためのシナリオを格納したシナリオ・ジェネレータのプログラムも格納されている。
【００５５】
なお、ここでの「エミュレータ」と、「シミュレータ」の用語の使い分けであるが、もともとの、別のプロセッサで動くことを想定して書かれていたＥＣＵのコードを、ＣＰＵ０〜ＣＰＵ３などをターゲットとして動くようにすることを、エミュレーションと呼び、それを行うプログラムを、エミュレータと呼ぶ。一方、エンジンなどの物理的システムの動作を仮想計算するシステムを、シミュレータと呼ぶ。
【００５６】
次に、図６を参照して、離散系システムと連続系システムからなる、本発明のシミュレーション・システムの機能論理ブロック図を説明する。このシステムの離散系シミュレータは、ＥＣＵエミュレータ６０２、６０４及び６０６からなる。実際は、より多数のＥＣＵエミュレータを有するが、ここでは例示的に３個だけ示す。
【００５７】
図６に示すシステムのプログラム・モジュールは、ハードディスク・ドライブ５１６に保存され、シミュレーション・システムの起動時に、オペレーティング・システムの働きにより、ハードディスク・ドライブ５１６からメイン・メモリ５０６にロードされて動作する。
【００５８】
ＥＣＵエミュレータ６０２、６０４及び６０６は、機能的には、ほぼ同一なので、代表的に、ＥＣＵエミュレータ６０２だけについて説明すると、ＥＣＵエミュレータ６０２は、ＣＰＵエミュレータ６０２ａと、ハイブリッド・ペリフェラル６０２ｂとからなる。
【００５９】
ブリッジ６０８、６１０及び６１２は、エンジン・シミュレータなどのプラント・シミュレータにおける、データの入出力部分の機能を実行する論理ブロックであり、それぞれ、ハイブリッド・ペリフェラル６０２ｂ、６０４ｂ及び６０６ｂと、連続系のプラント・シミュレータのクロックの間隔Δt毎に通信する。
【００６０】
図６において、点線の矩形ブロックは、シミュレーション・プログラムの個別のスレッドを示す。マルチ・コアまたはマルチ・プロセッサ環境において、好適には、個々のスレッドは、個別のコアまたはプロセッサに割り当てられる。
【００６１】
図６に示されるように、ハイブリッド・ペリフェラル６０２ｂ、６０４ｂ及び６０６ｂはそれぞれ、機能的にはＥＣＵエミュレータ６０２、６０４及び６０６のために、ＣＰＵエミュレータ６０２ａ、６０４ａ及び６０６ａと、ブリッジ６０８、６１０及び６１２と間をインターフェースする役割を果たすが、モジュール的には、ブリッジ６０８、６１０及び６１２が存在するプラント・シミュレータが動作するスレッドと、ＥＣＵエミュレータ６０２、６０４及び６０６が動作するスレッドに跨って動作するように制御される。ハイブリッド・ペリフェラルの「ハイブリッド」という名前は、このような混在的な存在であることに由来する。すなわち、ハイブリッド・ペリフェラルのある部分はＥＣＵエミュレータ６０２、６０４及び６０６と同一のスレッドにあり、ハイブリッド・ペリフェラルの別の部分はプラント・シミュレータと同一のスレッドにある。
【００６２】
更に図示するように、ハイブリッド・ペリフェラル６０２ｂ、６０４ｂ及び６０６ｂはそれぞれ、データを読み書きするための共有メモリ６０２ｃ、６０４ｃ及び６０６ｃを有する。これらのメモリ６０２ｃ、６０４ｃ及び６０６ｃは、好適には、メイン・メモリ５０６の一部である。メモリは、ハイブリッド・ペリフェラルの構成ブロック、及びＥＣＵエミュレータによって、データを読み書き可能である。
【００６３】
図７は、図６の機能ブロック図で示すシミュレーション・システムのタイミング・チャートの概要を示す図である。図示されているように、プラント・シミュレータなどの連続系シミュレータと、ハイブリッド・ペリフェラルの間は、クロックの間隔Δt毎に通信が行なわれるので、密な通信となる。しかし、本発明によれば、プラント・シミュレータとハイブリッド・ペリフェラルの一部は、同一スレッド内にあるので、その間でスレッド間通信を引き起こさず、過大な通信コストをもたらさない。
【００６４】
一方、ハイブリッド・ペリフェラルと、離散系シミュレータであるＥＣＵエミュレータの間の通信は、離散系シミュレータに割込みが発生するタイミング、あるいはスケジュールされた疎なタイミングでのみ生じる。なお、ハイブリッド・ペリフェラルからＥＣＵエミュレータに対する通信は、イベント信号を送ることによって、行なわれる。
【００６５】
図８は、機能ブロック図の、より詳細な機能ブロック図を示すものである。ここでは特に、ＥＣＵエミュレータ６０２及びブリッジ６０８について示すが、ＥＣＵエミュレータ６０４、６０６及びブリッジ６１０、６１２についても同様であることを理解されたい。
【００６６】
図８において、ＣＰＵエミュレータ６０２ａには、ＲＯＭ８０２と、ＲＡＭ８０４が接続されている。なお、ここで説明するシミュレーション・システムは、基本的にＳＩＬＳであるため、すべての機能ブロックがソフトウェア・モジュールで実現されている。よって、ＲＯＭ８０２は単に、定数の宣言の集まりであり、ＲＡＭ８０４は、メイン・メモリ５０６に割り当てられたメモリ区画である。
【００６７】
ＣＰＵエミュレータ６０２ａの動作は、元のエミュレータ・プログラムのバイナリを逆アセンブルしたコードを再アセンブルしたバイナリを実行するものでもよいし、エミュレータ・プログラムのバイナリ命令を、順次ステップ的に変換しながら実行するのでもよい。
【００６８】
図８に示すように、ハイブリッド・ペリフェラル６０２ｂは、割込みコントローラ（ＩＮＴ−Ｃ）８０６と、アドバンスト・タイマー・ユニット（ＡＴＵ）８０８と、ピン・ファンクション・コントローラ（ＰＦＣ）８１０と、ウォッチ・ドッグ・タイマ（ＷＤＴ）８１２からなる。
【００６９】
なお、ＩＮＴ−Ｃ８０６と、ＡＴＵ８０８と、ＰＦＣ８１０と、ＷＤＴ８１２からなる構成は、ハイブリッド・ペリフェラル６０２ｂの構成の一例であって、これには限定されないことを理解されたい。
【００７０】
ブリッジ６０８は、変数マッピングの機能によって、ブリッジ６０８への入力信号を、ＰＦＣ８１０のピンに提供される値に変換する。それは、Ｃ言語的な擬似コードであらわすと、例えば下記のとおりである。
switch (link_type) {
case NE_PULSE:
data.pi0 = link_value;
break;
case A_F:
data.pe23 = link_value;
break;
...
}
【００７１】
すなわち、link_typeに与えられる値によって、dataという構造体の異なる要素に、値が提供される。ここでNE_PULSEとは、エンジンの回転を表すパルスで、実車の一例では、クランクシャフトの１回転あたり２４回発生する。A_Fとは空燃費であり、シリンダに入る空気量と燃料の比である。これらは、一例としてのみ示すもので、実際は他にも多数の信号があることを理解されたい。
【００７２】
ＰＦＣ８１０は、変数マッピングの機能によってブリッジ６０８からピンに対応する変数として与えられたデータをマルチプレクスして、ＩＮＴ−Ｃ８０６あるいは、ＡＴＵ８０８に提供する機能を有する。
【００７３】
ＩＮＴ−Ｃ８０６は、ＰＦＣ８１０に与えられる値または状態のクロック毎の変化に応答して、ＣＰＵエミュレータ６０２ａに、イベントを送る。そのイベントには、ＰＦＣ８１０から提供されるパラメータ値が含まれる。
【００７４】
ＡＴＵ８０８は、ブリッジからの信号により、その時刻を更新される。一方、ＣＰＵエミュレータ６０２ａは、その計算結果に基づき、開始タイミングと継続時間を、ＡＴＵ８０８にセットする。そして、ＡＴＵ８０８は、受け取った開始タイミングと継続時間に基づき、パルスを生成して、タイムスライスに合わせて、連続系システムに送り出す。このように計算される例として、燃料噴射の開始タイミングと継続時間がある。
【００７５】
ＷＤＴ８１２は、常時カウント・アップし、ＣＰＵエミュレータ６０２ａからの信号に応答して、カウント値をクリアされるタイマであり、一定期間以上ＣＰＵエミュレータ６０２ａから信号が来ないことによってカウント値が閾値を超えたことで、ＣＰＵエミュレータ６０２ａの動作が正常でないことを示す信号を出力する。
【００７６】
図９は、ハイブリッド・ペリフェラル６０２ｂと、ＣＰＵエミュレータ６０２ａの動作を示す処理のフローチャートである。なお、ハイブリッド・ペリフェラル６０４ｂと、ＣＰＵエミュレータ６０４ａの動作等も実質的に同じであると理解されたい。ここでは代表的に、ハイブリッド・ペリフェラル６０２ｂと、ＣＰＵエミュレータ６０２ａについて説明する。
【００７７】
この処理は、タイムスライスΔt毎に呼び出される。この処理は、連続系シミュレータのパルスに、離散系シミュレータが同期する訳ではない、という意味で、非同期プロセスであると言える。
【００７８】
図９において、ステップ９０２及びステップ９０８では、順序付けられたペリフェラルの構成ブロックの順に、構成ブロックの固有の処理が行なわれる。ここでいう構成ブロックとは、図８の例では、ＩＮＴ−Ｃ８０６、ＡＴＵ８０８、ＰＦＣ８１０及びＷＤＴ８１２であり、この所定の順序は、図１０に示すような順序リスト１００２に従い決められる。このリストは、好適には、メイン・メモリ５０６の所定箇所に配置される。このリストは、ＰＦＣ→ＡＴＵ→ＷＤＴ→ＩＮＴ−Ｃの順序であることを示す。図１０はまた、連続系の入力から出力にかけて、このリストの順に処理が行なわれるべきことを示す。
【００７９】
特にステップ９０２では、ステップ９０４の、ハイブリッド・ペリフェラル６０２ｂの共有メモリ６０２ｃから、ＣＰＵエミュレータ６０２ａの出力としてデータを読み出す処理と、ステップ９０６の、ハイブリッド・ペリフェラル６０２ｂの共有メモリ６０２ｃへ、ＣＰＵエミュレータ６０２ａの入力としてデータを上書きで書き込む処理とが行われる。
【００８０】
こうして、全ての構成ブロックの処理が完了すると、ハイブリッド・ペリフェラル６０２ｂの処理（特に、連続系の部分）は、終了する。
【００８１】
一方、ＣＰＵエミュレータ６０２ａの側では、ＣＰＵエミュレータ６０２ａがステップ９１０で、Ｉ／Ｏへのアクセスまで実行し、ステップ９１２で、ハイブリッド・ペリフェラル６０２ｂの共有メモリ６０２ｃへのＩ／Ｏアクセスを行う。このとき、共有メモリ６０２ｃへのアクセスの間は、他の処理ブロックが共有メモリ６０２ｃの値を書き換えないように、排他制御が行われる。
【００８２】
図１１は、ハイブリッド・ペリフェラル６０２ｂのＩＮＴ−Ｃ８０６の処理のフローチャートを示す図である。これは、図９のペリフェラル構成ブロック固有の処理ステップ９１０における、ＩＮＴ−Ｃ８０６の固有の処理である。図１１において、ステップ１１０２では、ＩＮＴ−Ｃが入力データをＰＦＣ８１０から取り込む。ステップ１１０４では、ＩＮＴ−Ｃが、入力データを割込みに変換するかどうか判断する。この判断は例えば、ある値の前回の値を保持しておいて、その値が前回から変わったかどうかで判断される。典型的には、パルスの立下りの検出である。
【００８３】
入力データを割込みに変換すると判断すると、ＩＮＴ−Ｃは、ステップ１１０６で、ＣＰＵエミュレータに割込みイベント・メッセージを送り、処理は終わる。
【００８４】
図１２は、ハイブリッド・ペリフェラル６０２ｂのＡＴＵ８０８フローチャートを示す図である。これは、図９のペリフェラル構成ブロック固有の処理ステップ９１０における、ＡＴＵ８０８の固有の処理である。図１２において、ステップ１２０２では、ＡＴＵが入力データをＰＦＣから取り込む。
【００８５】
ステップ１２０４では、ＡＴＵが、タイマがヒット、すなわちタイマの値が設定した所定の値に達したかどうかを判断する。もしそうなら、ステップ１２０６で、ＡＴＵは、出力のステータスを変更する。そうでなければ、直ちにステップ１２０８に進む。
【００８６】
次にステップ１２０８では、ＡＴＵが、出力データをＰＦＣに書き込み、処理は終わる。
【００８７】
より具体的に述べると、ＡＴＵ８０８には、ＣＰＵエミュレータ６０２ａから、開始時刻と期間を設定可能であり、すると、ステップ１２０４でのタイマヒットとは、その開始時刻から期間内であることを意味する。すると、ＡＴＵ８０８の働きは例えば、開始時刻から期間内は、ＰＦＣを通じて、論理１を出力し、それ以外は、論理０を出力することになる。
【００８８】
図１３は、ペリフェラルとＥＣＵエミュレータの間の処理動作に関する別の実施例の処理のフローチャートを示す図である。図９の処理とは異なり、この実施例では、指定されたサイクル毎に同期処理が行われる。図１３のフローチャートの処理も、タイムスライスΔt毎に呼び出される。この実施例は、離散系システムにおいて、ソフトウエアによるタイマー（時間計算）が使用される場合に採用される。ここで、タイマーの最小粒度より小さな周期で同期を取ることにより、ソフトウエア・タイマーの動作が保証される。
【００８９】
図１３において、ステップ１３０２及びステップ１３０８では、順序付けられたペリフェラルの構成ブロックの順に、構成ブロックの固有の処理が行なわれる。ここでいう構成ブロックとは、図８の例における、ＩＮＴ−Ｃ８０６、ＡＴＵ８０８、ＰＦＣ８１０及びＷＤＴ８１２であり、この所定の順序は、図１０に示すような順序リスト１００２に従い決められる。このリストは、好適には、メイン・メモリ５０６の所定箇所に配置される。このリストは、ＰＦＣ→ＡＴＵ→ＷＤＴ→ＩＮＴ−Ｃの順序であることを示す。図１０はまた、連続系の入力から出力にかけて、このリストの順に処理が行なわれるべきことを示す。
【００９０】
ＩＮＴ−Ｃ８０６及びＡＴＵ８０８の固有の処理は、図１１及び図１２に関連して、それぞれ既に説明したとおりである。
【００９１】
特にステップ１３０２では、ステップ１３０４の、ハイブリッド・ペリフェラル６０２ｂの共有メモリ６０２ｃから、ＣＰＵエミュレータ６０２ａの出力としてデータを読み出す処理と、ステップ１３０６の、ハイブリッド・ペリフェラル６０２ｂの共有メモリ６０２ｃへ、ＣＰＵエミュレータ６０２ａの入力としてデータを上書きで書き込む処理とが行われる。
【００９２】
こうして、全ての構成ブロックの処理が完了すると、ハイブリッド・ペリフェラル６０２ｂの処理は、ステップ１３１０に進み、そこで、t <= T < t + Δtかどうかが判断される。そうでなければ、処理は直ちに終わる。ここで、tは、連続系シミュレータにおける現在の時刻、Δtはタイムスライスの大きさ、TはＣＰＵエミュレータの同期時刻をあらわす。
【００９３】
ステップ１３１０で、t <= T < t + Δtと判断されると、ステップ１３１２で、ハイブリッド・ペリフェラル６０２ｂは、ＣＰＵエミュレータ６０２ａからの通知を待ち、通知があると、ステップ１３１４でTを更新して、ＣＰＵエミュレータ６０２ａに通知する。
【００９４】
一方、ＣＰＵエミュレータ６０２ａの側では、ＣＰＵエミュレータ６０２ａがステップ１３１６で、Ｉ／Ｏへのアクセスまで実行し、ステップ１３１８で、ハイブリッド・ペリフェラル６０２ｂの共有メモリ６０２ｃへのＩ／Ｏアクセスを行う。このとき、共有メモリ６０２ｃへのアクセスの間は、他の処理ブロックが共有メモリ６０２ｃの値を書き換えないように、排他制御が行われる。
【００９５】
ステップ１３２０では、指定されたサイクルを終えたかどうかが判断され、もしそうでないなら、処理は、ステップ１３１６に戻る。
【００９６】
ステップ１３２０で、指定されたサイクルを終えたと判断されると、ステップ１３２２で、ＣＰＵエミュレータ６０２ａは、終了したことを、ハイブリッド・ペリフェラル６０２ｂ側に通知する。この通知は、上記ステップ１３１２におけるＣＰＵエミュレータ６０２ａからの通知である。
【００９７】
ステップ１３２４では、ＣＰＵエミュレータ６０２ａが、次のサイクルの指定を待つ。ここで待つのは、上記ステップ１３１４からの通知である。次に処理は、ステップ１３１６に戻る。
【００９８】
以上、自動車用の複数のシミュレーション・システムに関連して、本発明の特定の実施例を説明してきたが、本発明はこのような特定の実施例に限定されず、飛行機用のシミュレーション・システムなど、一般的な電子機械制御系システムのシミュレーション・システムに適用可能であることを、この分野の当業者であるなら、理解するであろう。
【００９９】
上記実施例では、ＥＣＵエミュレータのペリフェラル部分と、連続系システムが同一スレッド内にある、と説明してきたが、スレッドに限らず、単一プロセッサまたはコアに割り当てることができるような単位であるなら、より広く、プロセスという単位でもよい。
【図１】
2010104135.tif 000003
【図２】
2010104135.tif 000004
【図３】
2010104135.tif 000005
【図４】
2010104135.tif 000006
【図５】
2010104135.tif 000007
【図６】
2010104135.tif 000008
【図７】
2010104135.tif 000009
【図８】
2010104135.tif 000010
【図９】
2010104135.tif 000011
【図１０】
2010104135.tif 000012
【図１１】
2010104135.tif 000013
【図１２】
2010104135.tif 000014
【図１３】
2010104135.tif 000015
【国際調査報告】
2010104135.tif 000016
2010104135.tif 000017
2010104135.tif 000018
2010104135.tif 000019