説明

マルチコアシステム、電子制御ユニット、モータECU、制御システム、命令実行方法

【課題】メモリ容量の増大を抑制して、また、リエントラントな処理か否かに関わらず、各コアが並行に命令を実行可能なマルチコアシステム、電子制御ユニット、モータECU、制御システム及び命令実行方法を提供すること。
【解決手段】複数の中央処理装置100A、100Bを搭載したマルチコアシステム50において、複数の中央処理装置が共用するオブジェクトコード13を記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリ200と、フェッチした命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じてデータのアドレスを、当該中央処理装置の専用部のアドレスに変換するアドレス分配器20と、を有することを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の中央処理装置を搭載したマルチコアシステム等に関し、特に、複数の中央処理装置が共通のオブジェクトコードを実行するマルチコアシステム、電子制御ユニット、モータECU、制御システム及び命令実行方法に関する。
【背景技術】
【0002】
1つの機能単位を実行するプログラムであっても、それをCPUで実行する段階ではいくつかのスレッドに分解して実行することが多い。また、マルチコアシステム又はマルチCPUシステム(以下、単にマルチコアシステムという)と呼ばれる技術が知られており、各スレッドを複数のCPUコアのそれぞれで実行することで処理効率を上げる工夫が成されている。このマルチコアシステムでは、各スレッドの処理やスループットの要請から複数のCPUコアがメモリを共有する場合が多い。
【0003】
しかしながら、複数のCPUコアが各スレッドを並列に実行すると、同じスレッドが時間的に重複して実行されることがあり、スレッドに指定されるアドレスのメモリ領域やレジスタの内容を破壊するおそれがあることが知られている。
【0004】
このような問題を回避するため、リエントラントなプログラミング手法が提案されている(例えば、特許文献1参照。)。特許文献1には、プログラムのうち一部をリエントラントに構成し、複数のマルチコアの負荷状態に応じて、プログラムのうちリエントラントな部分の配分を制御するマルチプロセッサ処理方法が記載されている。
【0005】
また、各CPUコア毎にアクセス可能なメモリ領域のアドレスを生成する技術が提案されている(例えば、特許文献2参照。)。特許文献2には、CPUコア毎にアクセス可能なアドレス領域を予め定めておき、メモリへのアクセスを要求したCPUコアの識別情報に応じてアドレスを変換して、CPUコア毎に定められたメモリ領域にアクセスさせるマルチプロセッサシステムが記載されている。
【特許文献1】特開平05−28120号公報
【特許文献2】特開2002−32352号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、プログラムによってはリエントラント可能でない処理が少なくない場合もあり、特許文献1記載のマルチプロセッサ処理方法のようにリエントラント可能なプログラムのみを配分したのでは、処理効率を十分に向上させることは困難である。
【0007】
また、特許文献2記載のマルチプロセッサシステムのようにCPUコア毎にメモリ領域を確保することは、CPUコアの数だけメモリ領域が必要となることを意味し、コストやメモリの搭載スペースの要請から実現が困難な場合が多い。また、各CPUコアがどのくらいメモリを消費するかはスレッドの処理内容等に依存するため、負荷の軽いスレッドを実行する間はその区分されたメモリ領域の使用効率が低下してしまう。
【0008】
本発明は、上記課題に鑑み、メモリ容量の増大を抑制して、また、リエントラントな処理か否かに関わらず、各コアが並行に命令を実行可能なマルチコアシステム、電子制御ユニット、モータECU、制御システム及び命令実行方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記課題に鑑み、本発明は、複数の中央処理装置を搭載したマルチコアシステムにおいて、複数の中央処理装置が共用するオブジェクトコードを記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリと、フェッチした命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じて前記データのアドレスを、当該中央処理装置の前記専用部のアドレスに変換するアドレス分配器と、を有することを特徴とする。
【0010】
本発明によれば、複数のCPUコアの処理対象として異なるデータはそれぞれのデータを専用部に格納し、それ以外のデータは共用エリアに格納するのでメモリの容量を低減することができる。
【0011】
また、本発明の一形態において、前記アドレス分配器は、中央処理装置がフェッチした命令が、当該中央処理装置の前記専用部又は前記共用部への分岐命令である場合は分岐を許可し、当該中央処理装置の前記専用部でないか又は前記共用部でない場合、分岐を禁止して次の命令を中央処理装置にフェッチさせる、ことを特徴とする。
【0012】
本発明によれば、CPUコア100Aと100Bで別々のロジックを実行する場合はそれぞれの専用部のロジックを実行し、それ以外は共用部のロジックを実行するのでメモリの容量を低減することができる。
【発明の効果】
【0013】
メモリ容量の増大を抑制して、また、リエントラントな処理か否かに関わらず、各コアが並行に命令を実行可能なマルチコアシステム、電子制御ユニット、モータECU、制御システム及び命令実行方法を提供することができる。
【発明を実施するための最良の形態】
【0014】
本実施形態の概略を説明する。例えば、電気モータで走行する車両(ハイブリッドカー、電気自動車)は複数のモータを有する場合があるが、その複数のモータの制御アルゴリズムは同じといってよい。各モータは特性値及び適合値が異なるが、これにそれぞれのモータで異なるプラスαの処理を加えても、大部分の制御アルゴリズムは共通である。
【0015】
例えば、モータが2つの場合に、マルチコアシステムで当該制御アルゴリズムのプログラムを実行して2つのモータを制御する場合を考えると、制御アルゴリズムの大部分が共通でもリエントラントな設計でない限り、各CPUコアがモータ毎に、大部分が共通するプログラムをそれぞれ実行することになる。
【0016】
図1(a)は2つのCPUコア100A,100Bが、それぞれ大部分が共通するプログラムを実行するマルチコアシステムの概念図を示す(従来図)。図1(a)では、CPUコア100Aはメモリ200Aを作業領域に、CPUコア100Bはメモリ200Bを作業領域にする。
【0017】
オブジェクトコード(プログラム)がロジック部とデータ部から構成されているとすると、CPUコア100Aのためにメモリ200Aに共通ロジック、モータA用ロジック、共通データ及びモータA用データが配置され、CPUコア100Bのために、メモリ200Bに共通ロジック、モータB用ロジック、共通データ及びモータB用データが配置される。なお、データ部とは、変数、定数、マップ等などを格納する領域をいう。
【0018】
図1(a)に示すように、CPUコア100Aと100Bが実行するプログラムは、共通ロジック及び共通データで共通に有する。したがって、共通ロジックと共通データをCPUコア100Aと100Bが共有して実行できれば、メモリ200の容量を低減できることになる。
【0019】
図1(b)は、共通ロジックと共通データをCPUコア100Aと100Bが共用して実行するマルチコアシステム50の概念図を示す。本実施形態のマルチコアシステム50は、図1(b)のように共通ロジックと共通データを共用すると共に、ロジック又はデータの異なる部分はコンパイル時に自動的に検出して、専用のメモリ領域に配置することで、メモリ領域200の低減を可能にする。そして、CPUコア100A又は100Bのどちらが命令を実行しているかにより、アドレス変換等の所定の制御を実行する。
【0020】
図2はマルチコアシステム50の構成図を、図3はマルチコアボード11のブロック図をそれぞれ示す。マルチコアシステム50は、バスを介して接続されたマルチコアボード11及び記憶装置12を有する。記憶装置12は、例えば、ROM、HDD(ハードディスクドライブ)等の不揮発性のメモリであり、マルチコアボード11のCPUコア100A及び100Bが実行するオブジェクトコード13が記憶されている。このオブジェクトコード13は後述するようにコンパイラ14がソースコードをコンパイルし、必要に応じリンケージされることで生成される。
【0021】
なお、図2ではマルチコアボード11と記憶装置12を別体に示したが、記憶装置12をマルチコアボード11に組み込んでもよい。
【0022】
マルチコアボード11は、時間的に少なくとも一部が重複して制御されるデバイスA、Bに接続されており、マルチコアボード11が有するCPUコア100Aがオブジェクトコード13を実行してデバイスAを制御し、CPUコア100Bのオブジェクトコード13を実行してデバイスBを制御する。したがって、CPUコア100A、100Bの数とデバイスA,Bの数は等しいことが好ましいが、CPUコア100A、100Bの数は3以上であってもよく、数が多いほどメモリ200の容量の低減効果を奏しやすくできる。
【0023】
マルチコアボード11は、CPUコア100A、100Bと共に、メモリ200、アドレス分配器20、IO(Input Output)部21A、21Bを有する。オブジェクトコード13を実行する際は、このメモリ200にオブジェクトコード13が配置される。CPUコア100AとCPUコア100Bは、共通のオブジェクトコード13から命令をフェッチし、CPUコア100Aはモータ22A(図2のデバイスA)を制御し、CPUコア100Bはモータ22B(図2のデバイスB)を制御する。
【0024】
なお、メモリ200は例えばDRAM(Dynamic RAM)、SRAM(Static RAM)、FeRAM(Ferroelectric RAM)、など高速な記憶素子である。また、IO部21A、21BはCPUコア100A、100Bの演算結果に基づきモータ22A、22Bを駆動する駆動回路である。
【0025】
図1で説明したように、オブジェクトコード13はモータA用ロジック、モータA用データ、モータB用ロジック、モータB用データを有するが、オブジェクトコード13を共用する場合、選択的に、CPUコア100AにはモータA用ロジック及びモータA用データへのアクセスを可能とし、CPUコア100BにはモータB用ロジック及びモータB用データへのアクセスを可能とする必要がある。
【0026】
そこで、本実施形態では、メモリ200を、共用エリア、CPUコア100A用エリア、CPUコア100B用エリア、に区分し、共用エリアには共通のロジック及びデータを、CPUコア100A用エリアにはCPUコア100A用ロジック及びCPUコア100A用データを、CPUコア100B用エリアにはCPUコア100B用ロジック及びCPUコア100Bデータを、それぞれ格納する。
【0027】
実行時、CPUコア100AのPC(プログラムカウンタ)には共用エリア又はCPUコア100A用エリアのアドレスを格納し、CPUコア100BのPCに共用エリア又はCPUコア100B用エリアのアドレスを格納する。なお、本実施形態の「データアドレス」はデータ部のアドレスを格納するが、ここには共用エリア(共通データ)のアドレスが格納され、そのアドレスはアドレス分配器20でCPUコア100A用エリアのアドレス又はCPUコア100B用エリアのアドレスに変換される。
【0028】
図3では、メモリ200のアドレス0x00000〜0x0FFFFまでが共用エリア、アドレス0x10000〜0x1FFFFまでがCPUコア100A用エリア、アドレス0x20000〜0x2FFFFまでがCPUコア100B用エリアである。なお、これらのアドレスは固定値である必要はなく、オブジェクトコード13をメモリ200に配置するときに動的に決定してもよい。いずれにしても、アドレス分配器20にとって、共用エリア、CPUコア100A用エリア、CPUコア100B用エリアのアドレスは既知であって、メモリ領域テーブル30に登録されている。
【0029】
そして、CPUコア100A又は100Bが、メモリ200にアクセスする際は必ずアドレス分配器20を介してメモリ200にアクセスする。アドレス分配器20は、その命令がCPUコア100A又は100Bに専用のデータを使用する命令である場合は、CPUコア100A又は100Bのいずれがその命令を実行しているかによりデータのアドレスを変換する。また、その命令が専用のロジックを実行するための分岐命令である場合、分岐先のアドレスとCPUコア100A又は100Bのいずれがその命令を実行しているかにより分岐を許可し、また、禁止する。
【0030】
図3のように区分されたメモリ200に、共通ロジック及び共通データ、モータA用ロジック及びモータA用データ、モータB用ロジック及びモータB用データ、をそれぞれ格納するには、オブジェクトコード13のどのロジック又はデータが、共通ロジック及び共通データ、モータA用ロジック及びモータA用データ、モータB用ロジック及びモータB用データ、に相当するかわかっていなければならない。
【0031】
そこで、本実施形態のマルチコアシステム50では、ソースコードにCPUコア100A又は100Bで別々(それぞれで専用)のロジック又はデータであることをその処理部分に宣言しておく(以下、データについてCPUコア100A又は100Bで別々であることを明記した宣言を専用データ宣言、ロジックについてCPUコア100A又は100Bで別々であることを明記した宣言を専用ロジック宣言、という。)。そして、コンパイラ14が専用データ宣言、専用ロジック宣言に応じて、データやロジックがCPUコア100A用エリア又はCPUコア100B用エリアに配置されるように、ソースコードからオブジェクトコード13を生成する。
専用データ宣言と専用ロジック宣言について分けて説明する。
【0032】
<専用データ宣言>
ソースコードに専用データ宣言がある場合、コンパイラ14は当該宣言が指定するデータ(変数、定数、マップ等)については、アドレス変換を要することを表すオペコード(以下、専用データオペコードという)を生成すると共に、専用データオペコードのオペランド (以下、変換前アドレスという)に、CPUコア100AがアクセスするアドレスAとCPUコア100BがアクセスするアドレスBを対応づける(以下、アドレスA又はアドレスBを変換後アドレスという)。
【0033】
変換後アドレスは、必ず、CPUコア100A用エリア及びCPUコア100B用エリアにあるため、変換前アドレスの上位だけを変える(例えば、0x10000、0x20000)ように変換後アドレスを決定すれば、簡単な演算で変換前アドレスから2つの変換後アドレスにそれぞれ変換できる。例えば、2つの変換後アドレスを0x10502、0x20502とすれば、変換前アドレスは0x00502とすればよい。
【0034】
アドレス分配器20は、専用データオペコードを検出すると、CPUコア100A又はCPUコア100Bのいずれのアクセスかに応じて、変換前アドレスを変換後アドレスに変換する。
【0035】
図4は、専用データ宣言とオブジェクトコード13の対応を説明する図である。図4(a)はソースコード(C言語)を、図4(b)はオブジェクトコード(アセンブラ)13のうちロジック部の一例を、図4(c)はオブジェクトコード(アセンブラ)13のうちデータ部を示す。
【0036】
例えば、ソースコードでは「DBL 変数名」を専用データ宣言と定める。図4(a)では、DBLの変数名にdata_bとmap1[12]が指定されているので、data_bとmap1[12]は、CPUコア100AとCPUコア100Bで別々であることになる。一方、専用データ宣言のないdata_Aは、CPUコア100AとCPUコア100Bに共通の変数である。
【0037】
コンパイラ14は、専用データ宣言を検出すると、共用エリアのアドレスに対応づけて専用データオペコードを生成する。図4(b)では、アドレス0x00104に「load_DBL」の専用データオペコードが生成されている。また、専用データオペコードには変換前アドレス「0x00502」が与えられる。変換前アドレスは、data_bの2つの変換後アドレスからそれぞれ所定数(例えば、0x10000、0x20000)を減じた値である。
【0038】
したがって、図4(c)に示すように、CPUコア100Aが実行した場合の変換後アドレスは、変換前アドレス「0x00502」に「0x10000」を足した「0x10502」になり、CPUコア100Bが実行した場合の変換後アドレスは変換前アドレス「0x00502」に「0x20000」を足した「0x20502」になる。
【0039】
同様に、図4(b)のアドレス0x0010Aにはmap1に対応した「load_DBL」の専用データオペコードが生成され、変換前アドレスとして「0x00504」が与えられている。したがって、図4(c)に示すように、CPUコア100Aが実行した場合の変換後アドレスは「0x10504」になり、CPUコア100Bが実行した場合の変換後アドレスは「0x20504」になる。
【0040】
一方、専用データ宣言に指定されていないdata_Aに対応したオペランドは専用データオペコードでない「load」であり、分岐前オペランドは共用エリアのアドレス「0x00500」を指定するだけとなる。
【0041】
図4(b)及び(c)のオブジェクトコード13を実行する際、アドレス分配器20は専用データオペコード「load_DBL」を検出すると、その実行要求がCPUコア100Aからであれば変換前アドレスに「0x10000」を加えてアドレスを変換しCPUコア100A用エリアからデータを読み出し、その実行要求がCPUコア100Bからであれば変換前アドレスに「0x20000」を加えてアドレスを変換しCPUコア100B用エリアからデータを読み出す。なお、CPUコア100AとCPUコア100Bのどちらか実行要求があるかはアドレス分配器20への信号線にHi(1)又はLow(0)のいずれが入力されるかで判定される。
【0042】
また、アドレス分配器20は専用データオペコード「load_DBL」を検出しない限り、アドレスを変換せず、共用エリアから共通のデータを読み出す。
【0043】
以上のように、CPUコア100Aと100Bで別々のデータを使用する処理に関してはそれぞれのデータを専用エリアに格納し、それ以外のデータは共用エリアに格納するのでメモリ200の容量を低減することができる。
【0044】
<専用ロジック宣言>
続いて、専用ロジック宣言について説明する。ソースコードに専用ロジック宣言がある場合、コンパイラ14は当該宣言が指定する処理を、CPUコア100A又は100Bのいずれを指定した専用ロジック宣言かに応じて、CPUコア100A用エリア又はCPUコア100B用エリアのいずれかのアドレスを付与してオペランドを生成する。専用ロジック宣言の場合、オペランドのアドレス(分岐先のアドレス)によりCPUコア100A又は100Bどちらの専用のロジックわかるので、変換前アドレスに相当するオペランドはない。
【0045】
オブジェクトコード13の実行時は、アドレス順に命令を実行すればよく、例えば、共通のロジックからCPUコア100A又はCPUコア100Bの専用のロジックに移行する場合は、オブジェクトコード13に分岐命令が生成される。分岐先はCPUコア100A用エリア又はCPUコア100B用エリアとなる。
【0046】
しかしながら、オブジェクトコード13はCPUコア100Aと100Bに共通なので、CPUコア100Aがオブジェクトコード13を実行中もCPUコア100B用エリアに分岐する分岐命令、又は、CPUコア100Bがオブジェクトコード13を実行中もCPUコア100A用エリアに分岐する分岐命令、が読み出されることになる。
【0047】
CPUコア100AがCPUコア100Bのロジックを実行することは好ましくなく、CPUコア100BがCPUコア100Aのロジックを実行することは好ましくない。そこで、本実施形態のマルチコアシステム50では、CPUコア100Aが実行中の命令であって共用エリア又はCPUコア100A用エリアに分岐する命令はそのまま実行し、CPUコア100Bが実行中の命令であって共用エリア又はCPUコア100B用エリアに分岐する命令はそのまま実行する。
【0048】
これに対し、CPUコア100Aが実行中の命令であってCPUコア100B用エリアに分岐する命令は無視し、CPUコア100Bが実行中の命令であってCPUコア100A用エリアに分岐する命令は無視する。本実施形態のマルチコアシステム50は、全ての命令をアドレス分配器20を介して実行するので、ここでいう無視とはアドレス分配器20から何らアドレスを出力しないかダミーのアドレスを出力して、次の命令の実行をすることをいう。
【0049】
CPUコア100A用エリアのアドレスとCPUコア100B用エリアのアドレスは、アドレス分配器20のメモリ領域テーブル30に予め登録されているので、アドレス分配器20は分岐先のアドレスに基づき分岐を許可するか禁止するかを判定できる。
【0050】
図5は、専用ロジック宣言とオブジェクトコード13の対応を説明する図である。図5(a)はソースコード(C言語)を、図5(b)はオブジェクトコード(アセンブラ)13のうちロジック部を示す。
【0051】
例えば、ソースコードでは「#pragma CPUxs」及び「#pragma CPUxe」を専用ロジック宣言と定める。なお、CPUxsとCPUxeの「x」にCPUコア100A又は100Bのいずれかを指定し、「s」はスタートを「e」がエンドを意味する。したがって、「#pragma CPUAs」及び「#pragma CPUAe」と記述すれば、この範囲のソースコードはCPUコア100A専用のロジックとなる。図5(a)では、「a = a * d 」が CPUコア100A専用のロジックである。
【0052】
コンパイラ14は、専用ロジック宣言を検出すると、それがCPUコア100Aを指定する専用ロジック宣言の場合は、CPUコア100A用エリアのアドレスをオペランドにしてオペコードを生成する。
【0053】
CPUコア100A用エリアは「0x10000」以降なので、図5(b)では、アドレス0x10100以降に「a = a * d 」に対応するオペコードが生成されている。また、共用エリアからCPUコア100A用エリアに分岐するため、専用ロジック宣言の直前の共用エリアのロジックに続くアドレス「0x00106」に、分岐命令「jmp 0x10100」が記述されている。
【0054】
なお、CPUコア100A用エリアの分岐後の最後のアドレスに、共用エリアに戻るための分岐命令「jmp 0x00108」が記述される。
【0055】
CPUコア100Aが図5(b)のオブジェクトコード13を実行する際、アドレス分配器20が「0x00106」の分岐命令を検出すると、分岐先がCPUコア100A用エリアなので、そのまま「0x10100」に分岐し処理が実行される。これに対し、CPUコア100Bが図5(b)のオブジェクトコード13を実行する際、アドレス分配器20が「0x00106」の分岐命令を検出すると、分岐先がCPUコア100A用エリアなので、分岐命令は無視され、次のアドレス「0x00108」の共用エリアの処理が実行される。
【0056】
以上のように、CPUコア100Aと100Bで別々のロジックを実行する場合はそれぞれの専用エリアのロジックを実行し、それ以外は共用エリアのロジックを実行するのでメモリ200の容量を低減することができる。
【0057】
なお、本実施形態ではC言語を例にしたが、いわゆるコンパイラ型のプログラム言語であれば本実施形態のオブジェクトコード13を生成でき、また、Java(登録商標)のような中間コードを生成するコンパイル型言語であっても好適に適用できる。
【0058】
<処理手順>
以上のようにして生成されたオブジェクトコード13をマルチコアシステム50が実行する手順を図6のフローチャート図に基づき説明する。図6のフローチャート図は例えばモータ22A、22Bの電源がオンになるとスタートする。この手順はCPUコア100A及びCPUコア100Bに共通であるが、ここではCPUコア100Aがオブジェクトコード13を実行するものとして説明する。
【0059】
まず、CPUコア100Aは命令を命令レジスタに格納(フェッチ)する(S10)。なお、この時、PCの値がインクリメントされる。起動直後に格納する命令は共用のロジックである。
【0060】
CPUコア100Aはデコーダで命令を解読し、その命令がjmp命令又はメモリアクセス命令(Read or Write)以外か否かを判定する(S20)。jmp命令又はメモリアクセス以外の場合(S20のYes)、本実施形態のマルチコアシステム50ではアドレス分配器20が特定の処理をしないので(S70)、当該命令を実行して(S80)ステップS10に戻る。
【0061】
CPUコア100Aは、フェッチした命令がjmp命令又はメモリアクセス命令と一致する場合、割り込みを発生させる。
【0062】
まず、jmp命令又はメモリアクセス命令以外でない場合(S20のNo)、そのどちらかを調べるため、CPUコア100Aはその命令がjmp命令か否かを判定する(S30)。
【0063】
jmp命令の場合(S30のYes)、CPUコア100Aはアドレス分配器20に命令を送出し、アドレス分配器20はjmp命令の分岐先が他のCPUコアのエリアか否かを判定する(S40)。他のCPUコアのエリアはここではCPUコア100B用エリアである。
【0064】
CPUコア100B用エリアへの分岐命令である場合(S40のYes)、アドレス分配器20はそのjmp命令の実行を禁止する。(S50)。jmp命令はどのように禁止してもよいが、例えば、PCにjmp命令の指定する分岐先のアドレスでなく次の命令のアドレスを格納する。これにより、CPUコア100AはステップS10に戻り次の命令を命令レジスタに格納できる。
【0065】
ステップS40の判定にて、CPUコア100B用エリアへの分岐命令でない場合(S40のNo)、アドレス分配器20はなにもせず(S70)、jmp命令を実行する(S60)。すなわち、jmp命令の分岐先のアドレスをPCに格納する。このアドレスは共用エリア又はCPUコア100A用エリアであるので、CPUコア100Aは分岐先の処理を実行できる。特に、CPUコア100A用エリアに分岐する場合は、CPUコア100Aに専用のロジックを実行できる。
【0066】
ステップS30に戻り、jmp命令でない場合(S30のNo)、メモリアクセス命令であることになるので、CPUコア100Aは命令をアドレス分配器20に送出し、アドレス分配器20はその命令が専用データオペコードか否かを判定する(S80)。
【0067】
専用データオペコードでない場合(S80のNo)、アドレス分配器20はオペランドのアドレスを変換することなく(S70)、メモリアクセス命令を実行する(S60)。
【0068】
専用データオペコードの場合(S80のYes)、アドレス分配器20はオペランドのアドレス(変換前アドレス)を変換する(S90)。上述のとおり、変換前アドレスと変換後アドレスには所定の関係があるので、所定のビットを1(CPUコア100Aの場合)又は2(CPUコア100Bの場合)にすればよい。そして、CPUコア100Aは命令を実行する(S60)。ここでの命令の実行は、変換後アドレスのデータを読み出すことになる。マルチコアシステム50は以上の処理を繰り返す。
【0069】
本実施形態のマルチコアシステム50は、CPUコア100Aと100Bに共通のロジック及びデータを共用できるので、メモリ200の容量を低減できる。リエントラントな設計が困難なロジックも実装しやすいので、リエントラントな設計が困難なロジックも共用してメモリ200の容量を低減できる。
【0070】
<車載装置への適用>
上述したように、本実施形態のマルチコアシステム50は同様なロジックで制御できるが一部に異なるロジックやデータを用いる複数のデバイスの制御に好適となる。例えば、車両には対称に搭載される車載装置(例えば、車輪、ブレーキ、ドアミラー、ドア、ドアウィンド、パワーシート等)が数多く搭載されているので、このような車載装置を制御する上でメモリ200の容量低減による低コスト化や小型化が可能になる。
【0071】
図7は、マルチコアシステム50が搭載されたECU(electronic control unit:電子制御ユニット)により車載装置を制御する制御システム300の一例を示す。図7では、ハイブリッドシステムにおけるモータECU40にマルチコアシステム50を搭載した。
【0072】
モータ22A、22B(モータジェネレータを含む)は、モータECU40によりインバータのスイッチング素子をオンオフ制御することにより駆動制御されている。モータECU40には、スイッチング素子を駆動制御するために必要な信号、例えばモータ22A、22Bの回転子の回転位置やモータ22A、22Bに印加される相電流の値などが入力されている。
【0073】
モータECU40は、ハイブリッドECU60と通信しており、ハイブリッドECU60からの制御信号によってモータ22A、22Bを駆動制御すると共に、必要に応じてモータ22A、22Bの回転数などの運転状態に関するデータをハイブリッドECU60に出力する。
【0074】
ハイブリッドECU60には、シフトポジション、アクセル開度,ブレーキペダル操作量、車速、バッテリ残量等が入力されている。ハイブリッドECU60は、これらの入力値に基づいて要求トルクを計算すると共に、この要求トルクに対応するトルクが出力されるようにエンジンの目標回転数やモータ22A、22Bの目標トルクを設定し、エンジンECU70及びモータECU40に送信する。
【0075】
目標回転数を受信したエンジンECU70は、エンジンが目標回転数で回転するようスロットル開度制御や燃料噴射制御,点火制御などを行なう。また、目標トルクを受信したモータECU40は、モータ22A、22Bに相当するトルクが出力されるようインバータのスイッチング素子をスイッチング制御する。
【0076】
本実施形態のマルチコアシステム50は、インバータのスイッチング素子をオンオフするタイミングやデューティ比等を演算しモータ22A、22Bを制御する。モータ22A、22Bは前輪又は後輪の左右輪を駆動するものなので、マルチコアシステム50はこのように制御アルゴリズムが共通で処理や特性が一部のみ異なる複数のデバイスを制御するプログラムを実行する上でメモリ容量を削減できる。
【図面の簡単な説明】
【0077】
【図1】共通したロジック部とデータ部を2つのCPUコアが共用して実行するマルチコアシステムの概念図である。
【図2】マルチコアシステムの構成図の一例である。
【図3】マルチコアボードのブロック図の一例である。
【図4】専用データ宣言とオブジェクトコードの対応を説明する図である。
【図5】専用ロジック宣言とオブジェクトコードの対応を説明する図である。
【図6】オブジェクトコードをマルチコアシステムが実行する手順を示すフローチャート図である。
【図7】マルチコアシステムが搭載されたECUにより車載装置を制御する制御システムの一例である。
【符号の説明】
【0078】
11 マルチコアボード
12 記憶装置
13 オブジェクトコード
14 コンパイラ
20 アドレス分配器
21A、21B IO部
22A、22B モータ
30 メモリ領域テーブル
40 モータECU
50 マルチコアシステム
60 ハイブリッドECU
70 エンジンECU
100A、100B CPUコア
200 メモリ
300 制御システム



【特許請求の範囲】
【請求項1】
複数の中央処理装置を搭載したマルチコアシステムにおいて、
複数の中央処理装置が共用するオブジェクトコードを記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリと、
フェッチした命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じて前記データのアドレスを、当該中央処理装置の前記専用部のアドレスに変換するアドレス分配器と、
を有することを特徴とするマルチコアシステム。
【請求項2】
前記アドレス分配器は、
中央処理装置がフェッチした命令が分岐命令であってその分岐先が、当該中央処理装置の前記専用部又は前記共用部である場合は分岐を許可し、
前記分岐先が当該中央処理装置の前記専用部でないか又は前記共用部でない場合、分岐を禁止して次の命令を中央処理装置にフェッチさせる、
ことを特徴とする請求項1記載のマルチコアシステム。
【請求項3】
前記オブジェクトコードは、前記専用データ命令が指定するアドレスに第1変換値を加えたアドレスに、第1の中央処理装置が使用する第1データを記憶し、
前記専用データ命令が指定するアドレスに第2変換値を加えたアドレスに、第2の中央処理装置が使用する第2データを記憶する、
ことを特徴とする請求項1又は2記載のマルチコアシステム。
【請求項4】
前記専用データ命令はソースコードの所定の宣言に基づきコンパイラが生成する、
ことを特徴とする請求項1又は2記載のマルチコアシステム。
【請求項5】
請求項1〜4いずれか記載のマルチコアシステムを搭載した電子制御ユニット。
【請求項6】
請求項1〜4いずれか記載のマルチコアシステムを搭載し、複数のモータを制御することを特徴とするモータECU。
【請求項7】
請求項1〜4いずれか記載のマルチコアシステムを搭載した電子制御ユニットと、
前記電子制御ユニットにより回転駆動される複数のモータと、
を有することを特徴とする制御システム。
【請求項8】
複数の中央処理装置を搭載したマルチコアシステムの命令実行方法において、
複数の中央処理装置が共用するオブジェクトコードを記憶する共用部と、中央処理装置毎に異なるオブジェクトコードを記憶する複数の専用部と、を有するメモリ、から命令をフェッチするステップと、
フェッチした命令に中央処理装置毎に異なるデータを使用する専用データ命令が検出されるか否かを判定するステップと、
アドレス分配器が、前記専用データ命令が検出された場合、当該命令を実行する中央処理装置に応じて前記データのアドレスを、当該中央処理装置の前記専用部のアドレスに変換するステップと、
を有することを特徴とするマルチコアシステムの命令実行方法。



【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2009−53918(P2009−53918A)
【公開日】平成21年3月12日(2009.3.12)
【国際特許分類】
【出願番号】特願2007−219876(P2007−219876)
【出願日】平成19年8月27日(2007.8.27)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】