(57)【特許請求の範囲】
【請求項１】
複数の中央処理装置を搭載したマルチコアシステムにおいて、
複数の中央処理装置が共用するオブジェクトコードを記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリと、
読み出した命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じて前記データのアドレスを、当該中央処理装置の前記専用部のアドレスに変換するアドレス分配器と、を有し、
前記アドレス分配器は、
中央処理装置が読み出した命令が分岐命令であってその分岐先が、当該中央処理装置の前記専用部又は前記共用部である場合は分岐を許可し、
前記分岐先が当該中央処理装置の前記専用部でなく、かつ、前記共用部でもない場合、分岐を禁止して次の命令を中央処理装置に読み出させる、
ことを特徴とするマルチコアシステム。
【請求項２】
前記オブジェクトコードは、前記専用データ命令が指定するアドレスに第１変換値を加えたアドレスに、第１の中央処理装置が使用する第１データを記憶し、
前記専用データ命令が指定するアドレスに第２変換値を加えたアドレスに、第２の中央処理装置が使用する第２データを記憶する、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項３】
前記専用データ命令はソースコードの所定の宣言に基づきコンパイラが生成する、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項４】
請求項１〜３いずれか記載のマルチコアシステムを搭載した電子制御ユニット。
【請求項５】
請求項１〜３いずれか記載のマルチコアシステムを搭載し、複数のモータを制御することを特徴とするモータＥＣＵ。
【請求項６】
請求項１〜３いずれか記載のマルチコアシステムを搭載した電子制御ユニットと、
前記電子制御ユニットにより回転駆動される複数のモータと、
を有することを特徴とする制御システム。
【請求項７】
複数の中央処理装置を搭載したマルチコアシステムの命令実行方法において、
複数の中央処理装置が共用するオブジェクトコードを記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリ、から命令を読み出すステップと、
読み出した命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出されるか否かを判定するステップと、
アドレス分配器が、前記専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じて前記データのアドレスを、当該中央処理装置の前記専用部のアドレスに変換するステップと、
前記アドレス分配器が、中央処理装置が読み出した命令が分岐命令であってその分岐先が、当該中央処理装置の前記専用部又は前記共用部である場合は分岐を許可し、
前記分岐先が当該中央処理装置の前記専用部でなく、かつ、前記共用部でもない場合、分岐を禁止して次の命令を中央処理装置に読み出させるステップと、
を有することを特徴とするマルチコアシステムの命令実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の中央処理装置を搭載したマルチコアシステム等に関し、特に、複数の中央処理装置が共通のオブジェクトコードを実行するマルチコアシステム、電子制御ユニット、モータＥＣＵ、制御システム及び命令実行方法に関する。
【背景技術】
【０００２】
１つの機能単位を実行するプログラムであっても、それをＣＰＵで実行する段階ではいくつかのスレッドに分解して実行することが多い。また、マルチコアシステム又はマルチＣＰＵシステム（以下、単にマルチコアシステムという）と呼ばれる技術が知られており、各スレッドを複数のＣＰＵコアのそれぞれで実行することで処理効率を上げる工夫が成されている。このマルチコアシステムでは、各スレッドの処理やスループットの要請から複数のＣＰＵコアがメモリを共有する場合が多い。
【０００３】
しかしながら、複数のＣＰＵコアが各スレッドを並列に実行すると、同じスレッドが時間的に重複して実行されることがあり、スレッドに指定されるアドレスのメモリ領域やレジスタの内容を破壊するおそれがあることが知られている。
【０００４】
このような問題を回避するため、リエントラントなプログラミング手法が提案されている（例えば、特許文献１参照。）。特許文献１には、プログラムのうち一部をリエントラントに構成し、複数のマルチコアの負荷状態に応じて、プログラムのうちリエントラントな部分の配分を制御するマルチプロセッサ処理方法が記載されている。
【０００５】
また、各ＣＰＵコア毎にアクセス可能なメモリ領域のアドレスを生成する技術が提案されている（例えば、特許文献２参照。）。特許文献２には、ＣＰＵコア毎にアクセス可能なアドレス領域を予め定めておき、メモリへのアクセスを要求したＣＰＵコアの識別情報に応じてアドレスを変換して、ＣＰＵコア毎に定められたメモリ領域にアクセスさせるマルチプロセッサシステムが記載されている。
【特許文献１】特開平０５−２８１２０号公報
【特許文献２】特開２００２−３２３５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、プログラムによってはリエントラント可能でない処理が少なくない場合もあり、特許文献１記載のマルチプロセッサ処理方法のようにリエントラント可能なプログラムのみを配分したのでは、処理効率を十分に向上させることは困難である。
【０００７】
また、特許文献２記載のマルチプロセッサシステムのようにＣＰＵコア毎にメモリ領域を確保することは、ＣＰＵコアの数だけメモリ領域が必要となることを意味し、コストやメモリの搭載スペースの要請から実現が困難な場合が多い。また、各ＣＰＵコアがどのくらいメモリを消費するかはスレッドの処理内容等に依存するため、負荷の軽いスレッドを実行する間はその区分されたメモリ領域の使用効率が低下してしまう。
【０００８】
本発明は、上記課題に鑑み、メモリ容量の増大を抑制して、また、リエントラントな処理か否かに関わらず、各コアが並行に命令を実行可能なマルチコアシステム、電子制御ユニット、モータＥＣＵ、制御システム及び命令実行方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題に鑑み、本発明は、複数の中央処理装置を搭載したマルチコアシステムにおいて、複数の中央処理装置が共用するオブジェクトコードを記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリと、読み出した命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じて前記データのアドレスを、当該中央処理装置の前記専用部のアドレスに変換するアドレス分配器と、を有し、前記アドレス分配器は、
中央処理装置が読み出した命令が分岐命令であってその分岐先が、当該中央処理装置の前記専用部又は前記共用部である場合は分岐を許可し、前記分岐先が当該中央処理装置の前記専用部でなく、かつ、前記共用部でもない場合、分岐を禁止して次の命令を中央処理装置に読み出させる、ことを特徴とする。
【００１０】
本発明によれば、複数のＣＰＵコアの処理対象として異なるデータはそれぞれのデータを専用部に格納し、それ以外のデータは共用エリアに格納するのでメモリの容量を低減することができる。
また、本発明によれば、ＣＰＵコア１００Ａと１００Ｂで別々のロジックを実行する場合はそれぞれの専用部のロジックを実行し、それ以外は共用部のロジックを実行するのでメモリの容量を低減することができる。
【発明の効果】
【００１３】
メモリ容量の増大を抑制して、また、リエントラントな処理か否かに関わらず、各コアが並行に命令を実行可能なマルチコアシステム、電子制御ユニット、モータＥＣＵ、制御システム及び命令実行方法を提供することができる。
【発明を実施するための最良の形態】
【００１４】
本実施形態の概略を説明する。例えば、電気モータで走行する車両（ハイブリッドカー、電気自動車）は複数のモータを有する場合があるが、その複数のモータの制御アルゴリズムは同じといってよい。各モータは特性値及び適合値が異なるが、これにそれぞれのモータで異なるプラスαの処理を加えても、大部分の制御アルゴリズムは共通である。
【００１５】
例えば、モータが２つの場合に、マルチコアシステムで当該制御アルゴリズムのプログラムを実行して２つのモータを制御する場合を考えると、制御アルゴリズムの大部分が共通でもリエントラントな設計でない限り、各ＣＰＵコアがモータ毎に、大部分が共通するプログラムをそれぞれ実行することになる。
【００１６】
図１（ａ）は２つのＣＰＵコア１００Ａ，１００Ｂが、それぞれ大部分が共通するプログラムを実行するマルチコアシステムの概念図を示す（従来図）。図１（ａ）では、ＣＰＵコア１００Ａはメモリ２００Ａを作業領域に、ＣＰＵコア１００Ｂはメモリ２００Ｂを作業領域にする。
【００１７】
オブジェクトコード（プログラム）がロジック部とデータ部から構成されているとすると、ＣＰＵコア１００Ａのためにメモリ２００Ａに共通ロジック、モータＡ用ロジック、共通データ及びモータＡ用データが配置され、ＣＰＵコア１００Ｂのために、メモリ２００Ｂに共通ロジック、モータＢ用ロジック、共通データ及びモータＢ用データが配置される。なお、データ部とは、変数、定数、マップ等などを格納する領域をいう。
【００１８】
図１（ａ）に示すように、ＣＰＵコア１００Ａと１００Ｂが実行するプログラムは、共通ロジック及び共通データで共通に有する。したがって、共通ロジックと共通データをＣＰＵコア１００Ａと１００Ｂが共有して実行できれば、メモリ２００の容量を低減できることになる。
【００１９】
図１（ｂ）は、共通ロジックと共通データをＣＰＵコア１００Ａと１００Ｂが共用して実行するマルチコアシステム５０の概念図を示す。本実施形態のマルチコアシステム５０は、図１（ｂ）のように共通ロジックと共通データを共用すると共に、ロジック又はデータの異なる部分はコンパイル時に自動的に検出して、専用のメモリ領域に配置することで、メモリ領域２００の低減を可能にする。そして、ＣＰＵコア１００Ａ又は１００Ｂのどちらが命令を実行しているかにより、アドレス変換等の所定の制御を実行する。
【００２０】
図２はマルチコアシステム５０の構成図を、図３はマルチコアボード１１のブロック図をそれぞれ示す。マルチコアシステム５０は、バスを介して接続されたマルチコアボード１１及び記憶装置１２を有する。記憶装置１２は、例えば、ＲＯＭ、ＨＤＤ（ハードディスクドライブ）等の不揮発性のメモリであり、マルチコアボード１１のＣＰＵコア１００Ａ及び１００Ｂが実行するオブジェクトコード１３が記憶されている。このオブジェクトコード１３は後述するようにコンパイラ１４がソースコードをコンパイルし、必要に応じリンケージされることで生成される。
【００２１】
なお、図２ではマルチコアボード１１と記憶装置１２を別体に示したが、記憶装置１２をマルチコアボード１１に組み込んでもよい。
【００２２】
マルチコアボード１１は、時間的に少なくとも一部が重複して制御されるデバイスＡ、Ｂに接続されており、マルチコアボード１１が有するＣＰＵコア１００Ａがオブジェクトコード１３を実行してデバイスＡを制御し、ＣＰＵコア１００Ｂのオブジェクトコード１３を実行してデバイスＢを制御する。したがって、ＣＰＵコア１００Ａ、１００Ｂの数とデバイスＡ，Ｂの数は等しいことが好ましいが、ＣＰＵコア１００Ａ、１００Ｂの数は３以上であってもよく、数が多いほどメモリ２００の容量の低減効果を奏しやすくできる。
【００２３】
マルチコアボード１１は、ＣＰＵコア１００Ａ、１００Ｂと共に、メモリ２００、アドレス分配器２０、ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）部２１Ａ、２１Ｂを有する。オブジェクトコード１３を実行する際は、このメモリ２００にオブジェクトコード１３が配置される。ＣＰＵコア１００ＡとＣＰＵコア１００Ｂは、共通のオブジェクトコード１３から命令をフェッチし、ＣＰＵコア１００Ａはモータ２２Ａ（図２のデバイスＡ）を制御し、ＣＰＵコア１００Ｂはモータ２２Ｂ（図２のデバイスＢ）を制御する。
【００２４】
なお、メモリ２００は例えばＤＲＡＭ（Dynamic  RAM）、ＳＲＡＭ（Static  RAM）、ＦｅＲＡＭ（Ferroelectric  RAM）、など高速な記憶素子である。また、ＩＯ部２１Ａ、２１ＢはＣＰＵコア１００Ａ、１００Ｂの演算結果に基づきモータ２２Ａ、２２Ｂを駆動する駆動回路である。
【００２５】
図１で説明したように、オブジェクトコード１３はモータＡ用ロジック、モータＡ用データ、モータＢ用ロジック、モータＢ用データを有するが、オブジェクトコード１３を共用する場合、選択的に、ＣＰＵコア１００ＡにはモータＡ用ロジック及びモータＡ用データへのアクセスを可能とし、ＣＰＵコア１００ＢにはモータＢ用ロジック及びモータＢ用データへのアクセスを可能とする必要がある。
【００２６】
そこで、本実施形態では、メモリ２００を、共用エリア、ＣＰＵコア１００Ａ用エリア、ＣＰＵコア１００Ｂ用エリア、に区分し、共用エリアには共通のロジック及びデータを、ＣＰＵコア１００Ａ用エリアにはＣＰＵコア１００Ａ用ロジック及びＣＰＵコア１００Ａ用データを、ＣＰＵコア１００Ｂ用エリアにはＣＰＵコア１００Ｂ用ロジック及びＣＰＵコア１００Ｂデータを、それぞれ格納する。
【００２７】
実行時、ＣＰＵコア１００ＡのＰＣ（プログラムカウンタ）には共用エリア又はＣＰＵコア１００Ａ用エリアのアドレスを格納し、ＣＰＵコア１００ＢのＰＣに共用エリア又はＣＰＵコア１００Ｂ用エリアのアドレスを格納する。なお、本実施形態の「データアドレス」はデータ部のアドレスを格納するが、ここには共用エリア（共通データ）のアドレスが格納され、そのアドレスはアドレス分配器２０でＣＰＵコア１００Ａ用エリアのアドレス又はＣＰＵコア１００Ｂ用エリアのアドレスに変換される。
【００２８】
図３では、メモリ２００のアドレス０ｘ０００００〜０ｘ０ＦＦＦＦまでが共用エリア、アドレス０ｘ１００００〜０ｘ１ＦＦＦＦまでがＣＰＵコア１００Ａ用エリア、アドレス０ｘ２００００〜０ｘ２ＦＦＦＦまでがＣＰＵコア１００Ｂ用エリアである。なお、これらのアドレスは固定値である必要はなく、オブジェクトコード１３をメモリ２００に配置するときに動的に決定してもよい。いずれにしても、アドレス分配器２０にとって、共用エリア、ＣＰＵコア１００Ａ用エリア、ＣＰＵコア１００Ｂ用エリアのアドレスは既知であって、メモリ領域テーブル３０に登録されている。
【００２９】
そして、ＣＰＵコア１００Ａ又は１００Ｂが、メモリ２００にアクセスする際は必ずアドレス分配器２０を介してメモリ２００にアクセスする。アドレス分配器２０は、その命令がＣＰＵコア１００Ａ又は１００Ｂに専用のデータを使用する命令である場合は、ＣＰＵコア１００Ａ又は１００Ｂのいずれがその命令を実行しているかによりデータのアドレスを変換する。また、その命令が専用のロジックを実行するための分岐命令である場合、分岐先のアドレスとＣＰＵコア１００Ａ又は１００Ｂのいずれがその命令を実行しているかにより分岐を許可し、また、禁止する。
【００３０】
図３のように区分されたメモリ２００に、共通ロジック及び共通データ、モータＡ用ロジック及びモータＡ用データ、モータＢ用ロジック及びモータＢ用データ、をそれぞれ格納するには、オブジェクトコード１３のどのロジック又はデータが、共通ロジック及び共通データ、モータＡ用ロジック及びモータＡ用データ、モータＢ用ロジック及びモータＢ用データ、に相当するかわかっていなければならない。
【００３１】
そこで、本実施形態のマルチコアシステム５０では、ソースコードにＣＰＵコア１００Ａ又は１００Ｂで別々（それぞれで専用）のロジック又はデータであることをその処理部分に宣言しておく（以下、データについてＣＰＵコア１００Ａ又は１００Ｂで別々であることを明記した宣言を専用データ宣言、ロジックについてＣＰＵコア１００Ａ又は１００Ｂで別々であることを明記した宣言を専用ロジック宣言、という。）。そして、コンパイラ１４が専用データ宣言、専用ロジック宣言に応じて、データやロジックがＣＰＵコア１００Ａ用エリア又はＣＰＵコア１００Ｂ用エリアに配置されるように、ソースコードからオブジェクトコード１３を生成する。
専用データ宣言と専用ロジック宣言について分けて説明する。
【００３２】
＜専用データ宣言＞
ソースコードに専用データ宣言がある場合、コンパイラ１４は当該宣言が指定するデータ（変数、定数、マップ等）については、アドレス変換を要することを表すオペコード（以下、専用データオペコードという）を生成すると共に、専用データオペコードのオペランド  (以下、変換前アドレスという)に、ＣＰＵコア１００ＡがアクセスするアドレスＡとＣＰＵコア１００ＢがアクセスするアドレスＢを対応づける（以下、アドレスＡ又はアドレスＢを変換後アドレスという）。
【００３３】
変換後アドレスは、必ず、ＣＰＵコア１００Ａ用エリア及びＣＰＵコア１００Ｂ用エリアにあるため、変換前アドレスの上位だけを変える（例えば、０ｘ１００００、０ｘ２００００）ように変換後アドレスを決定すれば、簡単な演算で変換前アドレスから２つの変換後アドレスにそれぞれ変換できる。例えば、２つの変換後アドレスを０ｘ１０５０２、０ｘ２０５０２とすれば、変換前アドレスは０ｘ００５０２とすればよい。
【００３４】
アドレス分配器２０は、専用データオペコードを検出すると、ＣＰＵコア１００Ａ又はＣＰＵコア１００Ｂのいずれのアクセスかに応じて、変換前アドレスを変換後アドレスに変換する。
【００３５】
図４は、専用データ宣言とオブジェクトコード１３の対応を説明する図である。図４（ａ）はソースコード（Ｃ言語）を、図４（ｂ）はオブジェクトコード（アセンブラ）１３のうちロジック部の一例を、図４（ｃ）はオブジェクトコード（アセンブラ）１３のうちデータ部を示す。
【００３６】
例えば、ソースコードでは「ＤＢＬ  変数名」を専用データ宣言と定める。図４（ａ）では、ＤＢＬの変数名にdata_bとmap1[12]が指定されているので、data_bとmap1[12]は、ＣＰＵコア１００ＡとＣＰＵコア１００Ｂで別々であることになる。一方、専用データ宣言のないdata_Aは、ＣＰＵコア１００ＡとＣＰＵコア１００Ｂに共通の変数である。
【００３７】
コンパイラ１４は、専用データ宣言を検出すると、共用エリアのアドレスに対応づけて専用データオペコードを生成する。図４（ｂ）では、アドレス０ｘ００１０４に「load＿DBL」の専用データオペコードが生成されている。また、専用データオペコードには変換前アドレス「０ｘ００５０２」が与えられる。変換前アドレスは、data_bの２つの変換後アドレスからそれぞれ所定数（例えば、０ｘ１００００、０ｘ２００００）を減じた値である。
【００３８】
したがって、図４（ｃ）に示すように、ＣＰＵコア１００Ａが実行した場合の変換後アドレスは、変換前アドレス「０ｘ００５０２」に「０ｘ１００００」を足した「０ｘ１０５０２」になり、ＣＰＵコア１００Ｂが実行した場合の変換後アドレスは変換前アドレス「０ｘ００５０２」に「０ｘ２００００」を足した「０ｘ２０５０２」になる。
【００３９】
同様に、図４（ｂ）のアドレス０ｘ００１０Ａにはmap1に対応した「load＿DBL」の専用データオペコードが生成され、変換前アドレスとして「０ｘ００５０４」が与えられている。したがって、図４（ｃ）に示すように、ＣＰＵコア１００Ａが実行した場合の変換後アドレスは「０ｘ１０５０４」になり、ＣＰＵコア１００Ｂが実行した場合の変換後アドレスは「０ｘ２０５０４」になる。
【００４０】
一方、専用データ宣言に指定されていないdata_Aに対応したオペランドは専用データオペコードでない「load」であり、分岐前オペランドは共用エリアのアドレス「０ｘ００５００」を指定するだけとなる。
【００４１】
図４（ｂ）及び（ｃ）のオブジェクトコード１３を実行する際、アドレス分配器２０は専用データオペコード「load＿DBL」を検出すると、その実行要求がＣＰＵコア１００Ａからであれば変換前アドレスに「０ｘ１００００」を加えてアドレスを変換しＣＰＵコア１００Ａ用エリアからデータを読み出し、その実行要求がＣＰＵコア１００Ｂからであれば変換前アドレスに「０ｘ２００００」を加えてアドレスを変換しＣＰＵコア１００Ｂ用エリアからデータを読み出す。なお、ＣＰＵコア１００ＡとＣＰＵコア１００Ｂのどちらか実行要求があるかはアドレス分配器２０への信号線にＨｉ（１）又はＬｏｗ（０）のいずれが入力されるかで判定される。
【００４２】
また、アドレス分配器２０は専用データオペコード「load＿DBL」を検出しない限り、アドレスを変換せず、共用エリアから共通のデータを読み出す。
【００４３】
以上のように、ＣＰＵコア１００Ａと１００Ｂで別々のデータを使用する処理に関してはそれぞれのデータを専用エリアに格納し、それ以外のデータは共用エリアに格納するのでメモリ２００の容量を低減することができる。
【００４４】
＜専用ロジック宣言＞
続いて、専用ロジック宣言について説明する。ソースコードに専用ロジック宣言がある場合、コンパイラ１４は当該宣言が指定する処理を、ＣＰＵコア１００Ａ又は１００Ｂのいずれを指定した専用ロジック宣言かに応じて、ＣＰＵコア１００Ａ用エリア又はＣＰＵコア１００Ｂ用エリアのいずれかのアドレスを付与してオペランドを生成する。専用ロジック宣言の場合、オペランドのアドレス（分岐先のアドレス）によりＣＰＵコア１００Ａ又は１００Ｂどちらの専用のロジックわかるので、変換前アドレスに相当するオペランドはない。
【００４５】
オブジェクトコード１３の実行時は、アドレス順に命令を実行すればよく、例えば、共通のロジックからＣＰＵコア１００Ａ又はＣＰＵコア１００Ｂの専用のロジックに移行する場合は、オブジェクトコード１３に分岐命令が生成される。分岐先はＣＰＵコア１００Ａ用エリア又はＣＰＵコア１００Ｂ用エリアとなる。
【００４６】
しかしながら、オブジェクトコード１３はＣＰＵコア１００Ａと１００Ｂに共通なので、ＣＰＵコア１００Ａがオブジェクトコード１３を実行中もＣＰＵコア１００Ｂ用エリアに分岐する分岐命令、又は、ＣＰＵコア１００Ｂがオブジェクトコード１３を実行中もＣＰＵコア１００Ａ用エリアに分岐する分岐命令、が読み出されることになる。
【００４７】
ＣＰＵコア１００ＡがＣＰＵコア１００Ｂのロジックを実行することは好ましくなく、ＣＰＵコア１００ＢがＣＰＵコア１００Ａのロジックを実行することは好ましくない。そこで、本実施形態のマルチコアシステム５０では、ＣＰＵコア１００Ａが実行中の命令であって共用エリア又はＣＰＵコア１００Ａ用エリアに分岐する命令はそのまま実行し、ＣＰＵコア１００Ｂが実行中の命令であって共用エリア又はＣＰＵコア１００Ｂ用エリアに分岐する命令はそのまま実行する。
【００４８】
これに対し、ＣＰＵコア１００Ａが実行中の命令であってＣＰＵコア１００Ｂ用エリアに分岐する命令は無視し、ＣＰＵコア１００Ｂが実行中の命令であってＣＰＵコア１００Ａ用エリアに分岐する命令は無視する。本実施形態のマルチコアシステム５０は、全ての命令をアドレス分配器２０を介して実行するので、ここでいう無視とはアドレス分配器２０から何らアドレスを出力しないかダミーのアドレスを出力して、次の命令の実行をすることをいう。
【００４９】
ＣＰＵコア１００Ａ用エリアのアドレスとＣＰＵコア１００Ｂ用エリアのアドレスは、アドレス分配器２０のメモリ領域テーブル３０に予め登録されているので、アドレス分配器２０は分岐先のアドレスに基づき分岐を許可するか禁止するかを判定できる。
【００５０】
図５は、専用ロジック宣言とオブジェクトコード１３の対応を説明する図である。図５（ａ）はソースコード（Ｃ言語）を、図５（ｂ）はオブジェクトコード（アセンブラ）１３のうちロジック部を示す。
【００５１】
例えば、ソースコードでは「＃ｐｒａｇｍａ  ＣＰＵｘｓ」及び「＃ｐｒａｇｍａ  ＣＰＵｘｅ」を専用ロジック宣言と定める。なお、ＣＰＵｘｓとＣＰＵｘｅの「ｘ」にＣＰＵコア１００Ａ又は１００Ｂのいずれかを指定し、「ｓ」はスタートを「ｅ」がエンドを意味する。したがって、「＃ｐｒａｇｍａ  ＣＰＵＡｓ」及び「＃ｐｒａｇｍａ  ＣＰＵＡｅ」と記述すれば、この範囲のソースコードはＣＰＵコア１００Ａ専用のロジックとなる。図５（ａ）では、「ａ  ＝  ａ  ＊  ｄ  」が  ＣＰＵコア１００Ａ専用のロジックである。
【００５２】
コンパイラ１４は、専用ロジック宣言を検出すると、それがＣＰＵコア１００Ａを指定する専用ロジック宣言の場合は、ＣＰＵコア１００Ａ用エリアのアドレスをオペランドにしてオペコードを生成する。
【００５３】
ＣＰＵコア１００Ａ用エリアは「０ｘ１００００」以降なので、図５（ｂ）では、アドレス０ｘ１０１００以降に「ａ  ＝  ａ  ＊  ｄ  」に対応するオペコードが生成されている。また、共用エリアからＣＰＵコア１００Ａ用エリアに分岐するため、専用ロジック宣言の直前の共用エリアのロジックに続くアドレス「０ｘ００１０６」に、分岐命令「ｊｍｐ  ０ｘ１０１００」が記述されている。
【００５４】
なお、ＣＰＵコア１００Ａ用エリアの分岐後の最後のアドレスに、共用エリアに戻るための分岐命令「ｊｍｐ  ０ｘ００１０８」が記述される。
【００５５】
ＣＰＵコア１００Ａが図５（ｂ）のオブジェクトコード１３を実行する際、アドレス分配器２０が「０ｘ００１０６」の分岐命令を検出すると、分岐先がＣＰＵコア１００Ａ用エリアなので、そのまま「０ｘ１０１００」に分岐し処理が実行される。これに対し、ＣＰＵコア１００Ｂが図５（ｂ）のオブジェクトコード１３を実行する際、アドレス分配器２０が「０ｘ００１０６」の分岐命令を検出すると、分岐先がＣＰＵコア１００Ａ用エリアなので、分岐命令は無視され、次のアドレス「０ｘ００１０８」の共用エリアの処理が実行される。
【００５６】
以上のように、ＣＰＵコア１００Ａと１００Ｂで別々のロジックを実行する場合はそれぞれの専用エリアのロジックを実行し、それ以外は共用エリアのロジックを実行するのでメモリ２００の容量を低減することができる。
【００５７】
なお、本実施形態ではＣ言語を例にしたが、いわゆるコンパイラ型のプログラム言語であれば本実施形態のオブジェクトコード１３を生成でき、また、Ｊａｖａ（登録商標）のような中間コードを生成するコンパイル型言語であっても好適に適用できる。
【００５８】
＜処理手順＞
以上のようにして生成されたオブジェクトコード１３をマルチコアシステム５０が実行する手順を図６のフローチャート図に基づき説明する。図６のフローチャート図は例えばモータ２２Ａ、２２Ｂの電源がオンになるとスタートする。この手順はＣＰＵコア１００Ａ及びＣＰＵコア１００Ｂに共通であるが、ここではＣＰＵコア１００Ａがオブジェクトコード１３を実行するものとして説明する。
【００５９】
まず、ＣＰＵコア１００Ａは命令を命令レジスタに格納（フェッチ）する（Ｓ１０）。なお、この時、ＰＣの値がインクリメントされる。起動直後に格納する命令は共用のロジックである。
【００６０】
ＣＰＵコア１００Ａはデコーダで命令を解読し、その命令がｊｍｐ命令又はメモリアクセス命令（Ｒｅａｄ  ｏｒ  Ｗｒｉｔｅ）以外か否かを判定する（Ｓ２０）。ｊｍｐ命令又はメモリアクセス以外の場合（Ｓ２０のＹｅｓ）、本実施形態のマルチコアシステム５０ではアドレス分配器２０が特定の処理をしないので（Ｓ７０）、当該命令を実行して（Ｓ８０）ステップＳ１０に戻る。
【００６１】
ＣＰＵコア１００Ａは、フェッチした命令がｊｍｐ命令又はメモリアクセス命令と一致する場合、割り込みを発生させる。
【００６２】
まず、ｊｍｐ命令又はメモリアクセス命令以外でない場合（Ｓ２０のＮｏ）、そのどちらかを調べるため、ＣＰＵコア１００Ａはその命令がｊｍｐ命令か否かを判定する（Ｓ３０）。
【００６３】
ｊｍｐ命令の場合（Ｓ３０のＹｅｓ）、ＣＰＵコア１００Ａはアドレス分配器２０に命令を送出し、アドレス分配器２０はｊｍｐ命令の分岐先が他のＣＰＵコアのエリアか否かを判定する（Ｓ４０）。他のＣＰＵコアのエリアはここではＣＰＵコア１００Ｂ用エリアである。
【００６４】
ＣＰＵコア１００Ｂ用エリアへの分岐命令である場合（Ｓ４０のＹｅｓ）、アドレス分配器２０はそのｊｍｐ命令の実行を禁止する。（Ｓ５０）。ｊｍｐ命令はどのように禁止してもよいが、例えば、ＰＣにｊｍｐ命令の指定する分岐先のアドレスでなく次の命令のアドレスを格納する。これにより、ＣＰＵコア１００ＡはステップＳ１０に戻り次の命令を命令レジスタに格納できる。
【００６５】
ステップＳ４０の判定にて、ＣＰＵコア１００Ｂ用エリアへの分岐命令でない場合（Ｓ４０のＮｏ）、アドレス分配器２０はなにもせず（Ｓ７０）、ｊｍｐ命令を実行する（Ｓ６０）。すなわち、ｊｍｐ命令の分岐先のアドレスをＰＣに格納する。このアドレスは共用エリア又はＣＰＵコア１００Ａ用エリアであるので、ＣＰＵコア１００Ａは分岐先の処理を実行できる。特に、ＣＰＵコア１００Ａ用エリアに分岐する場合は、ＣＰＵコア１００Ａに専用のロジックを実行できる。
【００６６】
ステップＳ３０に戻り、ｊｍｐ命令でない場合（Ｓ３０のＮｏ）、メモリアクセス命令であることになるので、ＣＰＵコア１００Ａは命令をアドレス分配器２０に送出し、アドレス分配器２０はその命令が専用データオペコードか否かを判定する（Ｓ８０）。
【００６７】
専用データオペコードでない場合（Ｓ８０のＮｏ）、アドレス分配器２０はオペランドのアドレスを変換することなく（Ｓ７０）、メモリアクセス命令を実行する（Ｓ６０）。
【００６８】
専用データオペコードの場合（Ｓ８０のＹｅｓ）、アドレス分配器２０はオペランドのアドレス（変換前アドレス)を変換する（Ｓ９０）。上述のとおり、変換前アドレスと変換後アドレスには所定の関係があるので、所定のビットを１（ＣＰＵコア１００Ａの場合）又は２（ＣＰＵコア１００Ｂの場合）にすればよい。そして、ＣＰＵコア１００Ａは命令を実行する（Ｓ６０）。ここでの命令の実行は、変換後アドレスのデータを読み出すことになる。マルチコアシステム５０は以上の処理を繰り返す。
【００６９】
本実施形態のマルチコアシステム５０は、ＣＰＵコア１００Ａと１００Ｂに共通のロジック及びデータを共用できるので、メモリ２００の容量を低減できる。リエントラントな設計が困難なロジックも実装しやすいので、リエントラントな設計が困難なロジックも共用してメモリ２００の容量を低減できる。
【００７０】
＜車載装置への適用＞
上述したように、本実施形態のマルチコアシステム５０は同様なロジックで制御できるが一部に異なるロジックやデータを用いる複数のデバイスの制御に好適となる。例えば、車両には対称に搭載される車載装置（例えば、車輪、ブレーキ、ドアミラー、ドア、ドアウィンド、パワーシート等）が数多く搭載されているので、このような車載装置を制御する上でメモリ２００の容量低減による低コスト化や小型化が可能になる。
【００７１】
図７は、マルチコアシステム５０が搭載されたＥＣＵ（electronic  control  unit：電子制御ユニット）により車載装置を制御する制御システム３００の一例を示す。図７では、ハイブリッドシステムにおけるモータＥＣＵ４０にマルチコアシステム５０を搭載した。
【００７２】
モータ２２Ａ、２２Ｂ（モータジェネレータを含む）は、モータＥＣＵ４０によりインバータのスイッチング素子をオンオフ制御することにより駆動制御されている。モータＥＣＵ４０には、スイッチング素子を駆動制御するために必要な信号、例えばモータ２２Ａ、２２Ｂの回転子の回転位置やモータ２２Ａ、２２Ｂに印加される相電流の値などが入力されている。
【００７３】
モータＥＣＵ４０は、ハイブリッドＥＣＵ６０と通信しており、ハイブリッドＥＣＵ６０からの制御信号によってモータ２２Ａ、２２Ｂを駆動制御すると共に、必要に応じてモータ２２Ａ、２２Ｂの回転数などの運転状態に関するデータをハイブリッドＥＣＵ６０に出力する。
【００７４】
ハイブリッドＥＣＵ６０には、シフトポジション、アクセル開度，ブレーキペダル操作量、車速、バッテリ残量等が入力されている。ハイブリッドＥＣＵ６０は、これらの入力値に基づいて要求トルクを計算すると共に、この要求トルクに対応するトルクが出力されるようにエンジンの目標回転数やモータ２２Ａ、２２Ｂの目標トルクを設定し、エンジンＥＣＵ７０及びモータＥＣＵ４０に送信する。
【００７５】
目標回転数を受信したエンジンＥＣＵ７０は、エンジンが目標回転数で回転するようスロットル開度制御や燃料噴射制御，点火制御などを行なう。また、目標トルクを受信したモータＥＣＵ４０は、モータ２２Ａ、２２Ｂに相当するトルクが出力されるようインバータのスイッチング素子をスイッチング制御する。
【００７６】
本実施形態のマルチコアシステム５０は、インバータのスイッチング素子をオンオフするタイミングやデューティ比等を演算しモータ２２Ａ、２２Ｂを制御する。モータ２２Ａ、２２Ｂは前輪又は後輪の左右輪を駆動するものなので、マルチコアシステム５０はこのように制御アルゴリズムが共通で処理や特性が一部のみ異なる複数のデバイスを制御するプログラムを実行する上でメモリ容量を削減できる。
【図面の簡単な説明】
【００７７】
【図１】共通したロジック部とデータ部を２つのＣＰＵコアが共用して実行するマルチコアシステムの概念図である。
【図２】マルチコアシステムの構成図の一例である。
【図３】マルチコアボードのブロック図の一例である。
【図４】専用データ宣言とオブジェクトコードの対応を説明する図である。
【図５】専用ロジック宣言とオブジェクトコードの対応を説明する図である。
【図６】オブジェクトコードをマルチコアシステムが実行する手順を示すフローチャート図である。
【図７】マルチコアシステムが搭載されたＥＣＵにより車載装置を制御する制御システムの一例である。
【符号の説明】
【００７８】
１１    マルチコアボード
１２    記憶装置
１３    オブジェクトコード
１４    コンパイラ
２０    アドレス分配器
２１Ａ、２１Ｂ  ＩＯ部
２２Ａ、２２Ｂ  モータ
３０    メモリ領域テーブル
４０    モータＥＣＵ
５０    マルチコアシステム
６０    ハイブリッドＥＣＵ
７０    エンジンＥＣＵ
１００Ａ、１００Ｂ  ＣＰＵコア
２００  メモリ
３００  制御システム
【図１】
0005045307.tif 000002
【図２】
0005045307.tif 000003
【図３】
0005045307.tif 000004
【図４】
0005045307.tif 000005
【図５】
0005045307.tif 000006
【図６】
0005045307.tif 000007
【図７】
0005045307.tif 000008