説明

マイクロプロセッサ、電子制御ユニット、アドレス変換方法

【課題】マルチスレッドが可能なプロセッサにおいて、プログラムを修正することなく又は修正箇所を抑制して、スレッド間のアドレス空間が重複することを防止するマイクロプロセッサ等を提供すること。
【解決手段】プログラムの命令をデコードする命令デコード手段12と、ハードウェアスレッドのスレッド判定手段17と、命令デコード手段による命令のデコード結果に基づきアクセス先のアドレスを決定し、メモリにアクセスするメモリアクセス手段15と、命令デコード手段がデコードした命令が、アドレスを相対アドレス指定により決定する命令である場合、前記プログラム毎に異なるオフセット値をメモリアクセス手段に通知するオフセットアドレス制御手段18と、を有し、メモリアクセス手段は、オフセット値だけオフセットしたアドレスをアクセス先に決定する、ことを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のハードウェアスレッドを備えたマイクロプロセッサ等に関し、特に、スレッド毎にアクセス先のメモリのアドレスを変換可能なマイクロプロセッサ、電子制御ユニット及びアドレス変換方法に関する。
【背景技術】
【0002】
マイクロプロセッサがアクセスするデータのアドレスのアドレス指定方式として、ベースアドレス指定やインデックスアドレス指定(以下、相対アドレス指定という)がある。これらの方式は、レジスタと変位量をオペランドに指定し、レジスタに記憶した値に変位量を加えた値をアクセス先のアドレスとする方式である。一例としては次のような命令コード例が挙げられる。
【0003】
ld.b 0xfffc[r17], r18 …(1)
この命令コードは、r17のレジスタに記憶された値に変位量として0xfffcを加えたアドレス(実効アドレス)に記憶された値をロードし、r18のレジスタに格納するという意味を持つ。
【0004】
相対アドレス指定を利用するのでなく、アクセス先のアドレスを生成するよう命令コードを記述することもできる。
movhi hi(_x), r0, r17 /* アドレスの上位16bitを生成
movea lo(_x), r17, r17 /* アドレスの下位16bitを生成
ld.b 0[r17], r18 /* r17が示すアドレスの値をr17にロード …(2)
しかしながら、1つの命令コードを32bitとすれば、(1)の相対アドレス指定の命令コード例に比べて64ビット分、命令コード量が増大してしまう。このため、メモリ容量に制約のある組み込み式のマイクロプロセッサでは、相対アドレス指定が命令コードの記述に利用されることが多い。
【0005】
ところで、1つのマイクロプロセッサが複数のスレッドを同時並行的に実行するようなマルチスレッドが実現されるようになった。このようなマイクロプロセッサでは、複数のスレッドが1つの記憶媒体を共有することがある。例えば、異なるスレッドがそれぞれ(1)の相対アドレス指定で記述された命令コードを含む場合、それぞれのスレッドがレジスタr17に記憶された値から相対的に0xfffc離れたアドレスにアクセスするので、異なるスレッドのアドレス空間が重なってしまうという問題がある。
【0006】
このような不都合を回避するため、マルチスレッドが可能なマイクロプロセッサでは、各スレッドがアクセスするアドレスの衝突を回避する技術が考えられている(例えば、特許文献1、2参照)。特許文献1には、スレッドをメモリにロードする際に各スレッド毎に初期データのテンプレートを作成しておき、スレッドの実行時にテンプレートに基づいて初期データを準備する技術が開示されている。
【0007】
特許文献2には、複数の異なるデータセットに関して同じ命令が実行されるSIMD(Single Instruction Multiple Data)方式又はマルチスカラのプロセッサにおいて、共有メモリにおけるロケーションをオフセットしてデータを配置する技術が開示されている。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開平03−142557号公報
【特許文献2】特開2005−310167号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかしながら、特許文献1に開示された技術では、初期データのテンプレートを作成する処理や初期データを準備する必要があり、プログラムの修正が必要となるという問題がある。このことは、これまでに開発されたプログラムをスレッドの1つにそのまま実行させることが困難なことを意味している。
【0010】
また、特許文献2に開示された技術のように、スレッド毎に命令の共有メモリにおけるロケーションをオフセットするには、スレッドの数だけメモリバンクを搭載する必要があるため、コスト増となる。また、メモリバンク内にメモリを配置すればプログラムの修正が必要となることも懸念される。
【0011】
ここで、仮想記憶装置(MMU)を搭載して、スレッド(プログラム)が意識することなくMMUがアクセスするアドレスを置き換えることも考えられるが、MMUは高コストなので、マイクロプロセッサに搭載することは困難な場合も少なくない。
【0012】
本発明は、上記課題に鑑み、マルチスレッドが可能なプロセッサにおいて、プログラムを修正することなく又は修正箇所を抑制して、スレッド間のアドレス空間が重複することを防止するマイクロプロセッサ、電子制御ユニット及びアドレス変換方法を提供することを目的とする。
【課題を解決するための手段】
【0013】
上記課題に鑑み、各プログラムをハードウェアスレッド毎に実行するマイクロプロセッサであって、前記プログラムの命令をデコードする命令デコード手段と、前記命令が含まれる前記プログラムを実行するハードウェアスレッドのスレッド判定手段と、前記命令のデコード結果に基づきアクセス先のアドレスを決定し、メモリにアクセスするメモリアクセス手段と、前記命令が、前記アドレスを相対アドレス指定により決定する命令である場合、前記プログラム毎に異なるオフセット値を前記メモリアクセス手段に通知するオフセットアドレス制御手段と、を有し、前記メモリアクセス手段は、前記オフセット値だけオフセットした前記アドレスをアクセス先に決定する、ことを特徴とする。
【発明の効果】
【0014】
マルチスレッドが可能なプロセッサにおいて、プログラムを修正することなく又は修正箇所を抑制して、スレッド間のアドレス空間が重複することを防止するマイクロプロセッサ、電子制御ユニット及びアドレス変換方法を提供することができる。
【図面の簡単な説明】
【0015】
【図1】マイクロプロセッサの作用を模式的に説明する図の一例である。
【図2】ECUの機能統合を模式的に説明する図の一例である。
【図3】マイクロプロセッサの概略構成図の一例である。
【図4】HMTプロセッサであるマイクロプロセッサのハードウェアスレッドを模式的に説明する図の一例である。
【図5】オフセットアドレス制御装置の概略構成図の一例である。
【図6】オフセットアドレスを説明する図の一例である。
【図7】オフセットアドレス制御装置がオフセットアドレス信号をLSUに出力する手順を示すフローチャート図の一例である。
【図8】任意のオフセット値を指定することの作用を説明する図の一例である。
【図9】マイクロプロセッサの概略構成図の一例である(実施例2)。
【図10】オフセットアドレス変換テーブルの一例を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明を実施するための形態について図面を参照しながら説明する。
本実施形態のマイクロプロセッサの概略的な特徴は以下のようになる。
(1)ハードウェアスレッド毎にオフセットアドレスを記憶している。
(2)相対アドレス指定によりメモリにアクセスする命令を検出する。
(3)相対アドレス指定によりメモリにアクセスする命令が検出されると、オフセットアドレスを示すオフセットアドレス信号をLSU(ロードストアユニット)に出力する。
【0017】
相対アドレス指定によりメモリ(後述するデータ記憶部24)にアクセスする命令が検出された場合、ハードウェアスレッド(以下、「HT」という)に固有のオフセットアドレス信号をLSUに出力することで、LSUがアクセスするメモリのアドレスがオフセットされる。このため、複数のECU(Electrical Control Unit)に搭載されていたプログラムを、1つのハードウェアマルチスレッド(以下、HMTという)プロセッサに搭載する際、各ECUのプログラムを修正することなく、複数のプログラムが相対アドレス指定によりメモリにアクセスしても、アクセス先のアドレス空間が重複することを回避できる。
【0018】
図1は、(1)〜(3)の作用を模式的に説明する図の一例である。上記(1)のオフセットアドレスが登録されたオフセットアドレス変換テーブル32に、スレッド判定手段(17)が接続されている。オフセットアドレス変換テーブル32と相対アドレス指定命令判定手段(12)は、セレクタ装置33に接続されている。スレッド判定手段(17)は、マイクロプロセッサ100が実行権を与えるHT(命令を実行するHTを決定する)を識別するスレッド信号をオフセットアドレス変換テーブル32に出力する。オフセットアドレス変換テーブル32は、スレッド信号に対応したオフセットアドレス信号をセレクタ装置33に出力する。相対アドレス指定命令判定手段(12)は、マイクロプロセッサ100が実行する命令が相対アドレス指定によりメモリにアクセスする命令であると判定した場合、オン信号をセレクタ装置33に出力する。セレクタ装置33は、オン信号が入力された場合にオフセットアドレス信号をLSUに出力する。
【0019】
なお、スレッド判定手段(17)は後述するパイプライン制御装置17に対応し、相対アドレス指定命令判定手段(12)は命令デコーダ12が対応する。
【0020】
マイクロプロセッサ100の説明に使用する言葉を定義する。本実施形態では、複数のECUを1つのECU(以下、機能統合ECU200という)に統合したこと(すること)を前提にする。そして、統合前のECUが実行していたプログラムを実行する一連のハードウェアをHTという。外部からは、マイクロプロセッサ100が各プログラムを同時並行的に実行しているように見える。
【0021】
統合前のECUがOS上でプログラムを実行する場合があるが、この場合は、OSとプログラムで1つのプログラムとなる。マイクロプロセッサ100は、実行しているプログラムがアプリケーションとしてのプログラムかOSなのかを区別せずに実行する。こうすることで、統合前のECUが実行するプログラムとOSの振る舞いをそのままマイクロプロセッサ100に持ち込むことができる。したがって、プログラムはOSを含んでいてもよいし、OSを含んでいなくてもよい。本実施形態では、プログラムという場合、OSを含むか否かを問わない。
【0022】
また、本実施形態の相対アドレス指定とは、主にレジスタと変位量をオペランドに指定するアドレスの指定方式である。
オペコード(ニーモニック) 変位量[r0], rn
この命令コードでは、「変位量[r0]」が相対アドレス指定の部分である。レジスタrnはデータの格納先又は格納元のレジスタを示す。レジスタr0には少なくともある期間において固定の値(例えば、常に「0」の値)が格納されている。レジスタr0は、汎用レジスタ、インデックスレジスタ、又は、特殊レジスタ等であり、その呼称は問わない。また、これらのいずれかに明確に区別されないレジスタでもよい。また、マイクロプロセッサ100の仕様では、レジスタr0の代わりに、ポインタ名(Gp(グローバルポインタ)、Ep(エレメントポインタ))を指定することもできることが多い。したがって、変位量の起点とするアドレスがレジスタ名で指定されている必要もない。
【0023】
また、プログラムAが「変位量[r0]」を、プログラムBが「変位量[r1]」をオペランドにした場合、いずれも相対アドレス指定である。すなわち、複数のプログラムが共通の特定のレジスタをオペランドで指定する必要はなく、レジスタ等が示す値に対し相対的にアドレスを決定するオペランドは相対アドレス指定である。したがって、実際に、複数のプログラムが同じアドレス空間にアクセスするか否かは考慮しない。
【0024】
また、本実施形態では複数のプログラムが重複したアドレス空間にアクセスすることを回避するため、オペコードの部分はメモリアクセスの命令が記述される。例えば、ロード命令とストア命令である。マイクロプロセッサ100には種々のロード命令とストア命令が用意されていること多いが、メモリにアクセスする全てのロード命令とストア命令が、相対アドレス指定の命令として検出の対象となる。
【実施例1】
【0025】
〔ECUの機能統合〕
図2は、ECUの機能統合を模式的に説明する図の一例である。図2の左側に示すように、機能統合前はECU_A上でプログラムAが動作しており、ECU_B上でプログラムAが動作していた。それぞれのプログラムA、Bには車両制御に必要な演算や入出力制御を行うメインスレッドA,Bと、メインスレッドA,Bが処理を完了し次回、メインスレッドA,Bが立ち上がるまで動作するアイドルスレッドA,Bが存在する。
【0026】
機能統合後は、図2の右側に示すように、1つの機能統合ECU200内でプログラムAとBが独立に実行される。プログラムAを実行する一連のハードウェアがHT0、プログラムBを実行する一連のハードウェアがHT1、である。それぞれHT0,1は、プログラムAとプログラムBを擬似的に並行処理する。このため、外部からは、機能統合によるタイムラグが意識されることなく、1つのマイクロプロセッサ100がECU_AとECU_Bの機能を不足なく提供できる。
【0027】
ECUの機能統合は、大幅なECU開発費の削減を可能とする可能性が高く、車両の価格競争力という点からも重要な技術となる。例えば、機能統合において、開発済みのプログラムをそのまま(機能統合後の機能統合ECU200のためにプログラムを修正することなく又は修正部を最小限にして)機能統合ECU200に搭載できれば、機能統合ECU200の開発費を削減できることが期待される。
【0028】
HMTという技術は、従来、ソフトウェアにより実現していた複数プログラムの同時実行をハードウェアにより実現する。ハードウェアで実現することで、プログラムの切り替え時のオーバヘッドをほぼゼロにでき、結果的にリアルタイム性が厳しく要求される車両の機能統合ECU200にも実装できるようになり、複数のECUの機能統合が実現される。
【0029】
なお、統合前のECUは、例えば、燃料噴射量、エンジン回転数、吸気バルブの開放時間、空燃比の決定等を決定するエンジンECU、各輪のホイルシリンダ圧を決定するブレーキECU、エンジンとモータそれぞれの出力トルク、運転モード(モータ運転モード、エンジン+モータ運転モード)等を決定するハイブリッドECU等である。なお、このようなリアルタイム性が強い制御系のECUだけでなく、ボディECUやナビゲーション用のECUを統合してもよい。
【0030】
〔マイクロプロセッサの構成〕
図3、4を用いて、マイクロプロセッサ100について説明する。図3は、マイクロプロセッサ100の概略構成図の一例を、図4はHMTプロセッサであるマイクロプロセッサ100のHTを模式的に説明する図の一例である。図3のマイクロプロセッサ100は、統合前の2つのECUを統合した例を示すが、3以上のECUを統合することもできる。また、統合することなく1つのプログラムのみを実行してもよい。
【0031】
マイクロプロセッサ100は、命令フェッチバス25を介して命令記憶部23と、データアクセスバス26を介してデータ記憶部24と、それぞれ接続されている。図3のマイクロプロセッサ100は、HMT型のプロセッサである。図3のHMTを簡単に説明すれば、命令バッファ11(区別する場合、命令バッファ0,1という)と命令デコーダ12(区別する場合、命令デコーダ0,1という)を接続するマルチプレクサ19、及び、命令デコーダ12とレジスタ群13(区別する場合、レジスタ群0,1という)を接続するマルチプレクサ21を、スケジュール制御装置16が切替制御することで、ハードウェア的にプログラム(=HT)を選択しそのプログラムを実行するというものである。
【0032】
図3,4に示すように、マイクロプロセッサ100は、2つの命令バッファ0,1、2つの命令デコーダ0,1、及び、2つのレジスタ群0,1を有するので、2つのHT0、1を有する。なお、命令デコーダ0,1は各HT0,1に共通に実装してもよい。命令デコーダ12の数は、例えば、実装密度やコストを考慮して決定でき、また、統合前のECUが有するプロセッサに適切な命令デコーダ0,1を搭載することもできる。
【0033】
命令デコーダ0,1はマルチプレクサ21を介してレジスタ群0,1と接続されている。図4に示したように、命令バッファ0は命令デコーダ0と、命令デコーダ0はレジスタ群0と接続され、命令バッファ1は命令デコーダ1と、命令デコーダ1はレジスタ群1と接続される。
【0034】
また、レジスタ群0,1はバス22を介して演算器14及びLSU15と接続される。スケジュール制御装置16はマルチプレクサ19と21に接続され、パイプライン制御装置17は命令デコーダ0,1、レジスタ群0,1、並びに、演算器14及びLSU15と接続されている。また、オフセットアドレス制御装置18には、命令デコーダ0,1、パイプライン制御装置17、並びに、演算器14及びLSU15と接続されている。
【0035】
スケジュール制御装置16は、マルチプレクサ19と21を1クロックで切替制御できるので、プログラムの切り替え時のオーバヘッドはほぼ無視できる。
【0036】
命令フェッチバス25は、アドレスバスとデータバスを有し、命令記憶部23に記憶された命令のアドレスをアドレスバスで指定して、読み出された命令コード(例えば、全長32bitの長さのオペコードとオペランド)を、データバスを介して命令バッファ0,1に供給する。命令記憶部23は、機能統合ECU200ではフラッシュメモリなどの不揮発メモリであることが多い。なお、図3では命令記憶部23とデータ記憶部24が別体であるが、両者の一部又は全体が一体の揮発メモリに配置されることもある。
【0037】
データアクセスバス26には、データ記憶部24が接続されている。データアクセスバス26にはバスブリッジが設けられており、バスブリッジを介して、データ記憶部24としてのRAM(SRAM、DRAM等の揮発メモリ)や周辺機器(A/D変換器、シリアルポート等)が接続されている。RAMには制御信号となる電圧値が一次保存されたり、周辺機器にはセンサ類の出力が接続されている。なお、上記のように、データ記憶部24が命令記憶部23と一体の揮発メモリとなっていることがある。
【0038】
命令バッファ0,1にはそれぞれPC(プログラムカウンタ)が設けられている。命令バッファ0は、PCが指定するアドレスの1以上の命令コードをFIFOにて記憶するバッファであり、命令バッファ1は、プログラムBの1以上の命令コードをFIFOにて記憶するバッファである。
【0039】
命令デコーダ12は命令バッファ11の命令コードのオペコードから命令を解読して演算の種類を特定し、オペランドから1つ以上のソースオペランド、演算結果の格納先等を解読する。オペコードの位置は先頭bitを基準にnbitからmbitのように仕様として定められている。解読結果は、命令デコーダ12が属するHTのレジスタ群13に格納される。
【0040】
なお、命令デコーダ0,1は、命令コードが相対アドレス命令であるか否かを判定し、相対アドレス命令の場合、オン信号を出力する。命令デコーダ0,1と別に、命令コードが相対アドレス命令であるか否かを判定する回路を設けてもよい。
【0041】
レジスタ群13は、命令デコーダ12の解読結果(命令の種別、1以上のソースオペランド、結果の格納場所等)、演算器の演算結果、LSU15がデータアクセスバス26を介してデータ記憶部24から読み出したデータ、及び、LSU15がデータ記憶部24に格納するデータ、を一時的に記憶する複数のレジスタ(汎用レジスタやフラグレジスタ)を集積したものである。
【0042】
演算器14及びLSU15はHT0,1に対し共通に設けられている。演算器14はオペコードの解読結果に応じて四則演算を行ったりレジスタ群13のレジスタ操作を行う。また、演算器14は演算結果をレジスタ群13にライトバックする。LSU15はオペコードの解読結果がロード命令の場合、レジスタ群13のソースオペランドが指示する変位量とレジスタ内容からアドレスを決定し、データアクセスバス26を介してデータ記憶部24からデータを読み出す。読み出したデータは、ソースオペランドが指示するレジスタに格納する。同様に、LSU15はオペコードの解読結果がストア命令の場合、レジスタ群13のソースオペランドが指示する変位量とレジスタ内容からアドレスを決定し、ソースオペランドが指示するレジスタに格納されたデータを、決定したアドレスのデータ記憶部24に記憶させる。
【0043】
<スケジュール制御>
スケジュール制御装置16は、各プログラムの実行比率が目標実行比率になるように命令の発行比率を制御する。具体的には、スケジュール制御装置16はマルチプレクサ19において命令バッファ0(1)と命令デコーダ0(1)を接続するか否か、マルチプレクサ21において命令デコーダ0(1)とレジスタ群0(1)とを接続するか否か、を制御する。
【0044】
実行比率は、HT0において例えば「実行される命令の数/単位時間」(=IPC:クロック単位の命令実行数)と、HT1におけるIPCの比である。両者の命令の実行速度を比較する指標であればIPC以外の比から求めてもよい。
【0045】
目標実行比率は、各プログラムに提供すべきQoS(Quality of Service)により予め定まっている。車両では、安全性を最重要視してプログラムの優先度が決まっており、この優先度はECUを機能統合しても変わらない。例えば、プログラムAが単位時間にA個の命令の実行が保証されるべきであり、プログラムBが単位時間にB個の命令の実行が保証されるべきであるなら、機能統合後もプログラムAとプログラムBの実行比率が保たれるべきだからである。統合前のプログラムA、Bの実行比率は開発者が決定するパラメータである。
【0046】
ところで、パイプライン制御装置17は、各命令のステージを制御しているので、どのスレッドの命令が完了したかを検出できIPCを監視できる。これをスケジュール制御装置16に通知すれば、スケジュール制御装置16は予め既知の実行比率と比較して、各プログラムの命令の発行比率を制御できる。
【0047】
しかしながら、車載される機能統合ECU200、特に制御用の機能統合ECU200は後からプログラムが追加されることはほとんどないので、IPCを監視するまでもなく、フィードバック的な制御は不要であり、スケジュール制御装置16は、車両の設計時に、統合前のプログラムA、Bの実行比率が保証されるように、目標実行比率になる命令の発行比率(目標発行比率)を定めておくことができる。なお、命令の種類によって実行完了するまでのクロック数が異なるので、発行比率と実行比率は一致しないが、この関係も調整して目標発行比率が定められる。
【0048】
また、目標発行比率は、例えば、単位時間のプログラムAの命令の発行数と、プログラムBの命令の発行数の比をいい、「30:70」「50:50」のように表すことができる。前者の場合、スケジュール制御装置16は、10回のクロックのうち3回、プログラムAの命令を命令デコーダ0に読み出し、10回のクロックのうち7回、プログラムBの命令を命令デコーダ1に読み出す。なお、マイクロプロセッサ100の性能が向上し、機能統合ECU200の実行速度が大きくなりすぎた場合、スケジュール制御装置16は「20:60:20(アイドル)」のように、マイクロプロセッサ100が命令を実行しないアイドル状態のタームを設けることもできる。
【0049】
目標発行比率に従い、スケジュール制御装置16は、資源を割り当てるHTをクロック単位で制御しており、パイプライン制御装置17に該HTを通知している。こうすることで、パイプライン制御装置17は、資源を割り当てられたHTのステージを制御しながら命令を実行できる。
【0050】
<パイプライン制御>
パイプライン制御装置17は、スケジュール制御装置1から通知されたHT毎に、命令バッファ11から命令デコーダ12への命令コードの読み出し(命令フェッチ)、命令をデコードしてレジスタ群13への書き込み(命令デコード)、命令の実行、メモリアクセス(四則演算ではなにもしないステージ)、レジスタ群13へのライトバック、の各ステージの進行を制御する。すなわち、パイプライン制御装置17は、あるクロックにおいて、命令nのライトバック,命令n+1のメモリ・アクセス、命令n+2の実行,命令n+3の命令デコード、命令n+4の命令フェッチを、同時に行う。したがって、1クロック毎に平均的に1つの命令の実行結果が得られる。
【0051】
「HT毎に」とは、図4に示したように、命令バッファ0(1)と命令デコーダ0(1)がマルチプレクサ19を介して接続された状態では、必ず、命令デコーダ0(1)とレジスタ群0(1)がマルチプレクサ21を介して接続されることを意味する。
【0052】
パイプラインのステージはHT毎に制御する必要があるため、パイプライン制御装置17は各HTを識別しながら(HTを識別する信号と共に)のパイプラインを制御している。すなわち、パイプライン制御装置17は、制御対象のHTを常に特定している。これを利用して、パイプライン制御装置17はHTを識別する信号であるスレッド信号をオフセットアドレス制御装置とスケジュール制御装置16に出力する。パイプライン制御装置17以外に、HTを特定する回路を設けてもよい。
【0053】
なお、パイプライン制御装置17は、演算の種類やソースオペランド等を参照して、前の命令の実行結果を次の命令が必要とする場合には、次の命令のステージにアイドルステージを挿入するなどして、各ステージ間の整合性を確保する。また、例えば、あるプログラム(例えばプログラムA)にI/O待ちのようなハザードが生じた場合、パイプライン制御装置17はスレッドスケジュール装置にそのプログラムAを停止させ、別のプログラムBを実行するよう要求する。
【0054】
<オフセットアドレス制御装置>
オフセットアドレス制御装置18は、図1に示した、LSU15にオフセットアドレス信号を出力する装置である。
図5を用いて、オフセットアドレス制御装置18について説明する。図5はオフセットアドレス制御装置18の概略構成図の一例である。オフセットアドレス制御装置18には、オン信号(HT0のオン信号をオン信号0,HT1のオン信号をオン信号1という)及びスレッド信号が入力される。オン信号は、デコードした命令が相対アドレス指定命令か否かを示す信号なので「1(H)」である(0(L)でもよい)。スレッド信号は、HTを識別する信号なので、HTが2個までなら1本の信号線を用いた「1(H)」又は「0(L)」を表す信号である。HTが3〜4個までなら2本の信号線を用いた「00」、「01」、「10」、又は「10」を表す信号である。
【0055】
スレッド信号は番号デコーダ31に供給される。番号デコーダ31は、スレッド信号をデコードしてHTを特定する。
【0056】
オフセットアドレス制御装置18は、図1で説明したオフセットアドレス変換テーブル32を有する。オフセットアドレス変換テーブル32には、各HTに対応づけて、オフセットアドレス(図5では、HT0に0x1000、HT1に0x2000)が登録されている。
【0057】
図6は、オフセットアドレスを説明する図の一例である。データ記憶部24に統合前のプログラムAとプログラムBがそのまま記録されている。データ記憶部24におけるプログラムAの先頭アドレスは「0x1000」、プログラムBの先頭アドレスは「0x2000」、である。図6では命令記憶部23に続けてデータ記憶部24を配置する記憶の態様を示した。このため、LSU15がプログラムA(HT0)のロード/ストア命令を実行する場合は、「0x1000」に対し相対的にアドレスを決定し、プログラムBのロード/ストア命令を実行する場合は、「0x2000」に対し相対的にアドレスを決定すればよい。
【0058】
また、機能統合ECU200においてもデータ記憶部24におけるプログラムA,Bの配置は固定である。したがって、機能統合ECU200の設計時に、HT0のオフセットアドレスを「0x1000」に、HT1のオフセットアドレスを「0x2000」にそれぞれ決定し、オフセットアドレス変換テーブル32に登録しておけばよい。
【0059】
図5に戻り、オフセットアドレス変換テーブル32は、選択的に例えばオフセットアドレスを示す16〜32bitの信号を出力する回路を実体とする。信号線の本数(16〜32)はデータ記憶部24のアドレス空間の広さによって変わりうる。
【0060】
番号デコーダ31がHTの特定結果に応じて、オフセットアドレスを選択する信号を出力すると、オフセットアドレス変換テーブル32は該信号に対応するプログラムA又はプログラムBのオフセットアドレス信号をセレクタ装置33に出力する。
【0061】
したがって、命令デコーダ12がオン信号をセレクタ装置33に出力すると、セレクタ装置33はオフセットアドレス信号をLSU15に出力できるようになる。よって、プログラムA又はBから相対アドレス指定命令が検出された場合だけ、LSU15がオフセットアドレスを利用することができるようになる。
【0062】
なお、セレクタ装置33は一例であり、論理回路を組み合わせて同様の機能を実現してもよい。例えば、セレクタ装置33にはオフセットアドレス変換テーブル32の各オフセットアドレスを接続し、番号デコーダ31の出力をセレクタ装置33に接続することで、セレクタ装置33へのオン信号の入力により、セレクタ装置33は選択的にオフセットアドレスを出力できる。また、セレクタ装置33をTSB(スリーステータスバッファ)にしてもよい。
【0063】
LSU15は、オフセットアドレス制御装置18からオフセットアドレス信号を通知されると、「変位量[r0]」に対し、レジスタr0に記憶された値の代わりにオフセットアドレス信号に対し相対的に変位量を加算して、データ記憶部24のアドレスを決定する。「レジスタr0に記憶された値の代わりに」としたのは、レジスタr0には常に「0」が記憶されている場合であり、レジスタr0に「0」が記憶されているとは限らない場合は、「[r0]+ オフセットアドレス信号」に、相対的に変位量を加算して、データ記憶部24のアドレスを決定する。
【0064】
こうすることで、ソフトウェア開発者は、相対アドレス指定命令を意識することなく(プログラムA、Bを修正することなく)、プログラムA又はBの相対アドレス指定命令が、データ記憶部24で重複した領域にアクセスすることを回避できる。
【0065】
〔オフセットアドレス信号をLSUに出力する手順〕
図7は、オフセットアドレス制御装置18がオフセットアドレス信号をLSU15に出力する手順を示すフローチャート図の一例である。図7の手順は、機能統合ECU200の電源がオンになると繰り返し実行される。
【0066】
オフセットアドレス制御装置18は、パイプライン制御装置17からクロック毎又はスケジュール制御装置16がHTを切り替える毎に、スレッド信号を通知される(S10)。
【0067】
ついで、番号デコーダ31は、スレッド信号をデコードして、HTを特定する(S20)。番号デコーダ31は、例えば、スレッド信号が変化したことをトリガーにスレッド信号をデコードすることで、消費電力を抑制できる。
【0068】
オフセットアドレス変換テーブル32は、番号デコーダ31によるHTの特定結果に応じて、プログラムA又はプログラムBのオフセットアドレス信号をセレクタ装置33まで出力する(S30)。
【0069】
セレクタ装置33は、命令デコーダ0,1がオン信号を出力しない場合(S40のNo)、ハイインピーダンス状態なので、オフセットアドレス信号をLSU15に出力しない。この場合、処理手順はステップS10に戻る。
【0070】
命令デコーダ0,1がオン信号を出力した場合(S40のYes)、セレクタ装置33はオフセットアドレス信号をLSU15に出力する(S50)。よって、LSU15は、オフセットアドレス信号により変位量をオフセットしてデータ記憶部24にアクセスすることができる。
【0071】
なお、LSU15がアクセス先のアドレスを決定して命令を実行するクロックサイクルは、命令デコードの次のクロックサイクルである。よって、オフセットアドレス制御装置18が、オフセットアドレス信号を出力するタイミングは、LSU15が命令を実行する前又は同じクロックサイクルであることが好ましい。したがって、命令デコードとオフセットアドレス信号を出力するタイミングの関係は次のようになる。
・命令デコーダ0,1が命令デコードと同じクロックサイクルでオン信号を出力する場合、オフセットアドレス制御装置18は1クロックウェイトしてオフセットアドレス信号をLSU15に出力する。
・命令デコーダ0,1が命令デコードの次のクロックサイクルでオン信号を出力する場合、オフセットアドレス制御装置18はオン信号と同じクロックサイクルでオフセットアドレス信号をLSU15に出力する。
【0072】
いずれの場合でも、本実施例ではオフセットアドレス制御装置18の追加により、LSU15に待機状態が発生することはない。
【0073】
また、ステップS50の後、オフセットアドレス制御装置18は、1クロック待ってオフセットアドレス信号を停止する。LSU15は、アクセス先にもよるが最短1クロックでデータ記憶部24にアクセスできるので、オフセットアドレス信号は1クロックサイクルの間だけ受け取れば十分だからである。こうすることで、相対アドレス指定でない命令にオフセットアドレス信号が提供されることを防止できる。
【0074】
以上説明したように、本実施例のマイクロプロセッサ100は、プログラムに相対アドレス指定命令が含まれていても、アクセス先のアドレスをオフセットすることで、複数のECUを機能統合した際、プログラムを修正する必要がない。よって、ECUの数が減ることによるコスト削減だけでなく、機能統合ECU200の開発コストも低減できる。
【実施例2】
【0075】
本実施例では、オフセットアドレス変換テーブル32に任意のオフセットアドレスを登録できるマイクロプロセッサ100について説明する。任意のオフセットアドレスを指定することができれば、データ記憶部24の容量(命令コード量)を削減することができる。
【0076】
〔空き容量について〕
図8は、任意のオフセットアドレスを指定することの作用を説明する図の一例である。これまで説明したように、プログラムAとプログラムBをそのまま統合した場合、図8(a)に示すように、プログラムAの容量とプログラムBの容量を足しただけの容量がデータ記憶部24に必要となる。
【0077】
図8(a)のプログラムA、Bは命令記憶部23とデータ記憶部24が一体に不揮発メモリに記憶されている状態を示す。統合前のプログラムAは、図示するプログラムAの全体を、相対アドレス指定によりアクセスする領域として確保していた。プログラムBについても同様である。例えば、C言語の場合、上位アドレスには命令を含む命令コードが下位アドレスにはデータが配置されるようにコンパイルされる。また、C言語の場合、下位アドレスには関数の呼び出しなどに必要なスタック領域が確保されている。また、使用する関数によってヒープ領域が確保されることもある。
【0078】
しかしながら、プログラムA、Bは実際には確保した領域の全てにアクセスすることはなく、点線で示した“実際に使う領域”にしかアクセスしない。すなわち、プログラムA、Bの命令コード量の全体には“空き”があり、この空き領域は使用されないので無駄になっている。
【0079】
このため、プログラムA,Bを修正することなく複数のECUを機能統合すると、各プログラムの空き領域が積み重なってしまうことになる。
【0080】
そこで、本実施例では、ソフトウェア開発者がプログラムAの空き領域を把握しておき、プログラムAの空き領域を詰める態様で、プログラムAとプログラムBを統合して1つの機能統合ECU200に機能統合するマイクロプロセッサ100について説明する。
【0081】
図8(b)は、プログラムAの空き領域を削減して機能統合した、命令記憶部23とデータ記憶部24を模式的に示す図の一例である。空き領域を削減することで、機能統合による空き領域の増大を抑制できる。なお、プログラムBの空き領域を削減することもできる。
【0082】
〔本実施例のマイクロプロセッサ100の構成〕
図9は、本実施例のマイクロプロセッサ100の概略構成図の一例を示す。図9において、図3と同一部には同一の符号を付しその説明は省略する。図9では、演算器14にオフセットアドレス変換テーブル指定レジスタ41が接続されている。オフセットアドレス変換テーブル指定レジスタ41は、例えばシステムレジスタである。システムレジスタは、マイクロプロセッサ100が実行環境を制御するために使用したり、割り込み又は例外発生時にマイクロプロセッサ100の状態を保持するレジスタである。汎用レジスタを使用してもよいが、システムレジスタを使用することでオフセットアドレスの書き換え経路を限定でき、プログラムA、Bの実行中にオフセットアドレス変換テーブル32が書き換わることを防止できる。
【0083】
<レジスタの書き換え>
システムレジスタの書き換えには、マイクロプロセッサ100が用意するISA(Instruction set architecture)によるがシステムレジスタ書き込み専用命令を利用する。命令コードは例えば次のようになる。
LDSR r2, regID …(a)
(a)の命令コードは、「r2」に記憶された値を「regID」が指定するシステムレジスタ(オフセットアドレス変換テーブル指定レジスタ41)に格納する命令コードである。
【0084】
空き容量を削減してもプログラムAとBのオフセットアドレスが固定であることには変わりはない。
【0085】
そこで、2つのオフセットアドレス(A=0x1000、B=0x2000)をパラメータとして保持しておき、ソフト的にオフセットアドレス変換テーブル32に登録することができる。このソフトウェアは、例えば、OSやBIOS等、電源のオン時に自動実行されるプログラム(以下、管理プログラム42という)である。また、2つのオフセットアドレスA、Bは、データ記憶部24に記憶されているか、又は、管理プログラム42に記述されている。
電源オン時、管理プログラム42はオフセットアドレスAを読み出し、「r2」に設定し、次に、上記(a)を実行する。これにより、管理プログラム42は、オフセットアドレス変換テーブル指定レジスタ41に、HT番号、オフセットアドレスAを設定し、バリッドビットを有効(オン)にする。
【0086】
<オフセットアドレス変換テーブル32への設定>
バリッドビットが有効になると、マイクロプロセッサ100(例えばパイプライン制御装置17)がHT番号とオフセットアドレスA,Bをオフセットアドレス変換テーブル32に出力する。こうすることで、管理プログラム42は、オフセットアドレス変換テーブル32に任意のオフセットアドレスA,Bを登録することができる。
【0087】
オフセットアドレスBについても同様に設定できる。管理プログラム42は、HTの数だけ、オフセットアドレスの読み出し、「r2」への設定、及び、上記(a)の実行、を行う。これにより、管理プログラム42は、オフセットアドレス変換テーブル32に、HT毎のオフセットアドレスを登録することができる。
【0088】
図10は、オフセットアドレス変換テーブル32の一例を示す図である。図10のオフセットアドレス変換テーブル32はバリッドビットを有する。これは、管理プログラム42がオフセットアドレスを登録しないHTがあってもよいように、各オフセットアドレスが有効か無効かを示すためである。
【0089】
よって、本実施例のオフセットアドレス変換テーブル32は、スレッド信号を通知されても、バリッドビットが有効でないオフセットアドレスをセレクタ装置33に出力することはない。こうすることで、オフセットアドレス変換テーブル32に幾つのオフセットアドレスを登録するかを決定できる
本実施例のマイクロプロセッサ100は、実施例1の効果に加え、管理プログラム42がオフセットアドレスをオフセットアドレス変換テーブル32に登録するので、任意のオフセットアドレスを登録できる。また、プログラムAとプログラムBを統合する際のデータ記憶部24の容量を削減できる。
【符号の説明】
【0090】
11 命令バッファ
12 命令デコーダ
13 レジスタ群
14 演算器
15 LSU
16 スケジュール制御装置
17 パイプライン制御装置
18 オフセットアドレス制御装置
19、21 マルチプレクサ
23 命令記憶部
24 データ記憶部
25 命令フェッチバス
26 データアクセスバス
32 オフセットアドレス変換テーブル
33 セレクタ装置
41 オフセットアドレス変換テーブル指定レジスタ
42 管理プログラム

【特許請求の範囲】
【請求項1】
各プログラムをハードウェアスレッド毎に実行するマイクロプロセッサであって、
前記プログラムの命令をデコードする命令デコード手段と、
前記命令を実行する前記ハードウェアスレッドを判定するスレッド判定手段と、
前記命令のデコード結果に基づきアクセス先のアドレスを決定し、メモリにアクセスするメモリアクセス手段と、
前記命令が、前記アドレスを相対アドレス指定により決定する命令である場合、前記プログラム毎に異なるオフセット値を前記メモリアクセス手段に通知するオフセットアドレス制御手段と、を有し、
前記メモリアクセス手段は、前記オフセット値だけオフセットした前記アドレスをアクセス先に決定する、
ことを特徴とするマイクロプロセッサ。
【請求項2】
前記オフセットアドレス制御手段は、前記プログラムの識別情報に対応づけて前記オフセット値が登録されたオフセットアドレス変換テーブルを有し、
前記スレッド判定手段による前記ハードウェアスレッドの識別結果に応じて、前記オフセットアドレス変換テーブルから選択した前記オフセット値を前記メモリアクセス手段に通知する、
ことを特徴とする請求項1記載のマイクロプロセッサ。
【請求項3】
前記オフセットアドレス変換テーブルに接続されたレジスタと、
前記レジスタにオフセット値及び前記ハードウェアスレッドの識別情報を設定するアドレス設定手段と、
前記レジスタに設定された前記オフセット値及び前記ハードウェアスレッドの識別情報を、前記オフセットアドレス変換テーブルに登録するテーブル登録手段と、
を有することを特徴とする請求項2記載のマイクロプロセッサ。
【請求項4】
前記スレッド判定手段は、前記ハードウェアスレッドを識別して識別結果信号を前記オフセットアドレス制御手段に通知し、
前記オフセットアドレス制御手段は、前記識別結果信号をデコードした結果に基づき、前記オフセットアドレス変換テーブルから前記オフセット値を選択する、
ことを特徴とする請求項2又は3記載のマイクロプロセッサ。
【請求項5】
前記オフセットアドレス変換テーブルは、前記ハードウェアスレッドの識別情報に対応づけて前記オフセット値が有効か否かを示す有効ビットを有し、
前記オフセットアドレス制御手段は、有効な前記有効ビットが対応づけられた前記オフセット値だけを前記メモリアクセス手段に通知する、
ことを特徴とする請求項3記載のマイクロプロセッサ。
【請求項6】
前記テーブル登録手段は、電源オン時に、前記ハードウェアスレッド毎に予め記憶された前記オフセット値を読み出し、前記オフセット値及び前記ハードウェアスレッドの識別情報を、前記オフセットアドレス変換テーブルに登録する、
を有することを特徴とする請求項3記載のマイクロプロセッサ。
【請求項7】
前記命令デコード手段は、デコードした前記命令が、前記アドレスを相対アドレス指定により決定する命令であることを通知する通知信号を前記オフセットアドレス制御手段に通知し、
前記オフセットアドレス制御手段は、前記通知信号を取得した場合にのみ、前記オフセット値を前記メモリアクセス手段に通知する、
ことを特徴とする請求項1〜6いずれか1項記載のマイクロプロセッサ。
【請求項8】
前記スレッド判定手段は、命令実行手順の各ステージをクロックサイクル毎にパイプライン制御するパイプライン制御装置である、
ことを特徴とする請求項1〜7いずれか1項記載のマイクロプロセッサ。
【請求項9】
前記オフセットアドレス制御手段は、
前記命令デコード手段が命令をデコードしたクロックサイクルの次のクロックサイクルで、オフセット値を前記メモリアクセス手段に通知する、
ことを特徴とする請求項8記載のマイクロプロセッサ。
【請求項10】
請求項1〜9のいずれか1項に記載されたマイクロプロセッサを搭載した、車両の電子制御ユニット。
【請求項11】
前記プログラムは、単一スレッド型の電子制御ユニットが実行していたプログラムである、ことを特徴とする請求項10記載の電子制御ユニット。
【請求項12】
各プログラムをハードウェアスレッド毎に実行するマイクロプロセッサのアドレス変換方法であって、
命令デコード手段が、前記プログラムの命令をデコードするステップと、
スレッド判定手段が、前記命令を実行するハードウェアスレッドを判定するステップと、
前記命令が、前記アドレスを相対アドレス指定により決定する命令である場合、オフセットアドレス制御手段が、前記プログラム毎に異なるオフセット値を前記メモリアクセス手段に通知するステップと、
メモリアクセス手段が、前記命令のデコード結果のアクセス先に前記オフセット値だけオフセットして、メモリにアクセスするステップと
を有することを特徴とするアドレス変換方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2011−198048(P2011−198048A)
【公開日】平成23年10月6日(2011.10.6)
【国際特許分類】
【出願番号】特願2010−64216(P2010−64216)
【出願日】平成22年3月19日(2010.3.19)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】