(57)【要約】【課題】マルチスレッドが可能なプロセッサにおいて、プログラムを修正することなく又は修正箇所を抑制して、スレッド間のアドレス空間が重複することを防止するマイクロプロセッサ等を提供すること。【解決手段】プログラムの命令をデコードする命令デコード手段１２と、ハードウェアスレッドのスレッド判定手段１７と、命令デコード手段による命令のデコード結果に基づきアクセス先のアドレスを決定し、メモリにアクセスするメモリアクセス手段１５と、命令デコード手段がデコードした命令が、アドレスを相対アドレス指定により決定する命令である場合、前記プログラム毎に異なるオフセット値をメモリアクセス手段に通知するオフセットアドレス制御手段１８と、を有し、メモリアクセス手段は、オフセット値だけオフセットしたアドレスをアクセス先に決定する、ことを特徴とする。【選択図】図１
2011198048.tif 000002
【特許請求の範囲】
【請求項１】
各プログラムをハードウェアスレッド毎に実行するマイクロプロセッサであって、
前記プログラムの命令をデコードする命令デコード手段と、
前記命令を実行する前記ハードウェアスレッドを判定するスレッド判定手段と、
前記命令のデコード結果に基づきアクセス先のアドレスを決定し、メモリにアクセスするメモリアクセス手段と、
前記命令が、前記アドレスを相対アドレス指定により決定する命令である場合、前記プログラム毎に異なるオフセット値を前記メモリアクセス手段に通知するオフセットアドレス制御手段と、を有し、
前記メモリアクセス手段は、前記オフセット値だけオフセットした前記アドレスをアクセス先に決定する、
ことを特徴とするマイクロプロセッサ。
【請求項２】
前記オフセットアドレス制御手段は、前記プログラムの識別情報に対応づけて前記オフセット値が登録されたオフセットアドレス変換テーブルを有し、
前記スレッド判定手段による前記ハードウェアスレッドの識別結果に応じて、前記オフセットアドレス変換テーブルから選択した前記オフセット値を前記メモリアクセス手段に通知する、
ことを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
前記オフセットアドレス変換テーブルに接続されたレジスタと、
前記レジスタにオフセット値及び前記ハードウェアスレッドの識別情報を設定するアドレス設定手段と、
前記レジスタに設定された前記オフセット値及び前記ハードウェアスレッドの識別情報を、前記オフセットアドレス変換テーブルに登録するテーブル登録手段と、
を有することを特徴とする請求項２記載のマイクロプロセッサ。
【請求項４】
前記スレッド判定手段は、前記ハードウェアスレッドを識別して識別結果信号を前記オフセットアドレス制御手段に通知し、
前記オフセットアドレス制御手段は、前記識別結果信号をデコードした結果に基づき、前記オフセットアドレス変換テーブルから前記オフセット値を選択する、
ことを特徴とする請求項２又は３記載のマイクロプロセッサ。
【請求項５】
前記オフセットアドレス変換テーブルは、前記ハードウェアスレッドの識別情報に対応づけて前記オフセット値が有効か否かを示す有効ビットを有し、
前記オフセットアドレス制御手段は、有効な前記有効ビットが対応づけられた前記オフセット値だけを前記メモリアクセス手段に通知する、
ことを特徴とする請求項３記載のマイクロプロセッサ。
【請求項６】
前記テーブル登録手段は、電源オン時に、前記ハードウェアスレッド毎に予め記憶された前記オフセット値を読み出し、前記オフセット値及び前記ハードウェアスレッドの識別情報を、前記オフセットアドレス変換テーブルに登録する、
を有することを特徴とする請求項３記載のマイクロプロセッサ。
【請求項７】
前記命令デコード手段は、デコードした前記命令が、前記アドレスを相対アドレス指定により決定する命令であることを通知する通知信号を前記オフセットアドレス制御手段に通知し、
前記オフセットアドレス制御手段は、前記通知信号を取得した場合にのみ、前記オフセット値を前記メモリアクセス手段に通知する、
ことを特徴とする請求項１〜６いずれか1項記載のマイクロプロセッサ。
【請求項８】
前記スレッド判定手段は、命令実行手順の各ステージをクロックサイクル毎にパイプライン制御するパイプライン制御装置である、
ことを特徴とする請求項1〜７いずれか1項記載のマイクロプロセッサ。
【請求項９】
前記オフセットアドレス制御手段は、
前記命令デコード手段が命令をデコードしたクロックサイクルの次のクロックサイクルで、オフセット値を前記メモリアクセス手段に通知する、
ことを特徴とする請求項８記載のマイクロプロセッサ。
【請求項１０】
請求項1〜９のいずれか1項に記載されたマイクロプロセッサを搭載した、車両の電子制御ユニット。
【請求項１１】
前記プログラムは、単一スレッド型の電子制御ユニットが実行していたプログラムである、ことを特徴とする請求項１０記載の電子制御ユニット。
【請求項１２】
各プログラムをハードウェアスレッド毎に実行するマイクロプロセッサのアドレス変換方法であって、
命令デコード手段が、前記プログラムの命令をデコードするステップと、
スレッド判定手段が、前記命令を実行するハードウェアスレッドを判定するステップと、
前記命令が、前記アドレスを相対アドレス指定により決定する命令である場合、オフセットアドレス制御手段が、前記プログラム毎に異なるオフセット値を前記メモリアクセス手段に通知するステップと、
メモリアクセス手段が、前記命令のデコード結果のアクセス先に前記オフセット値だけオフセットして、メモリにアクセスするステップと
を有することを特徴とするアドレス変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のハードウェアスレッドを備えたマイクロプロセッサ等に関し、特に、スレッド毎にアクセス先のメモリのアドレスを変換可能なマイクロプロセッサ、電子制御ユニット及びアドレス変換方法に関する。
【背景技術】
【０００２】
マイクロプロセッサがアクセスするデータのアドレスのアドレス指定方式として、ベースアドレス指定やインデックスアドレス指定（以下、相対アドレス指定という）がある。これらの方式は、レジスタと変位量をオペランドに指定し、レジスタに記憶した値に変位量を加えた値をアクセス先のアドレスとする方式である。一例としては次のような命令コード例が挙げられる。
【０００３】
ld.b    0xfffc[r17],  r18  …（１）
この命令コードは、r17のレジスタに記憶された値に変位量として0xfffcを加えたアドレス（実効アドレス）に記憶された値をロードし、r18のレジスタに格納するという意味を持つ。
【０００４】
相対アドレス指定を利用するのでなく、アクセス先のアドレスを生成するよう命令コードを記述することもできる。
movhi  hi(_x),  r0,  r17    /*  アドレスの上位１６bitを生成
movea  lo(_x),  r17,  r17  /*  アドレスの下位１６bitを生成
ld.b    0[r17],  r18            /*  r17が示すアドレスの値をr17にロード  …（２）
しかしながら、１つの命令コードを３２bitとすれば、（１）の相対アドレス指定の命令コード例に比べて６４ビット分、命令コード量が増大してしまう。このため、メモリ容量に制約のある組み込み式のマイクロプロセッサでは、相対アドレス指定が命令コードの記述に利用されることが多い。
【０００５】
ところで、１つのマイクロプロセッサが複数のスレッドを同時並行的に実行するようなマルチスレッドが実現されるようになった。このようなマイクロプロセッサでは、複数のスレッドが１つの記憶媒体を共有することがある。例えば、異なるスレッドがそれぞれ（１）の相対アドレス指定で記述された命令コードを含む場合、それぞれのスレッドがレジスタr17に記憶された値から相対的に0xfffc離れたアドレスにアクセスするので、異なるスレッドのアドレス空間が重なってしまうという問題がある。
【０００６】
このような不都合を回避するため、マルチスレッドが可能なマイクロプロセッサでは、各スレッドがアクセスするアドレスの衝突を回避する技術が考えられている（例えば、特許文献１、２参照）。特許文献１には、スレッドをメモリにロードする際に各スレッド毎に初期データのテンプレートを作成しておき、スレッドの実行時にテンプレートに基づいて初期データを準備する技術が開示されている。
【０００７】
特許文献２には、複数の異なるデータセットに関して同じ命令が実行されるＳＩＭＤ（Single  Instruction  Multiple  Data）方式又はマルチスカラのプロセッサにおいて、共有メモリにおけるロケーションをオフセットしてデータを配置する技術が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０３−１４２５５７号公報
【特許文献２】特開２００５−３１０１６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に開示された技術では、初期データのテンプレートを作成する処理や初期データを準備する必要があり、プログラムの修正が必要となるという問題がある。このことは、これまでに開発されたプログラムをスレッドの１つにそのまま実行させることが困難なことを意味している。
【００１０】
また、特許文献２に開示された技術のように、スレッド毎に命令の共有メモリにおけるロケーションをオフセットするには、スレッドの数だけメモリバンクを搭載する必要があるため、コスト増となる。また、メモリバンク内にメモリを配置すればプログラムの修正が必要となることも懸念される。
【００１１】
ここで、仮想記憶装置（ＭＭＵ）を搭載して、スレッド（プログラム）が意識することなくＭＭＵがアクセスするアドレスを置き換えることも考えられるが、ＭＭＵは高コストなので、マイクロプロセッサに搭載することは困難な場合も少なくない。
【００１２】
本発明は、上記課題に鑑み、マルチスレッドが可能なプロセッサにおいて、プログラムを修正することなく又は修正箇所を抑制して、スレッド間のアドレス空間が重複することを防止するマイクロプロセッサ、電子制御ユニット及びアドレス変換方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題に鑑み、各プログラムをハードウェアスレッド毎に実行するマイクロプロセッサであって、前記プログラムの命令をデコードする命令デコード手段と、前記命令が含まれる前記プログラムを実行するハードウェアスレッドのスレッド判定手段と、前記命令のデコード結果に基づきアクセス先のアドレスを決定し、メモリにアクセスするメモリアクセス手段と、前記命令が、前記アドレスを相対アドレス指定により決定する命令である場合、前記プログラム毎に異なるオフセット値を前記メモリアクセス手段に通知するオフセットアドレス制御手段と、を有し、前記メモリアクセス手段は、前記オフセット値だけオフセットした前記アドレスをアクセス先に決定する、ことを特徴とする。
【発明の効果】
【００１４】
マルチスレッドが可能なプロセッサにおいて、プログラムを修正することなく又は修正箇所を抑制して、スレッド間のアドレス空間が重複することを防止するマイクロプロセッサ、電子制御ユニット及びアドレス変換方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】マイクロプロセッサの作用を模式的に説明する図の一例である。
【図２】ＥＣＵの機能統合を模式的に説明する図の一例である。
【図３】マイクロプロセッサの概略構成図の一例である。
【図４】ＨＭＴプロセッサであるマイクロプロセッサのハードウェアスレッドを模式的に説明する図の一例である。
【図５】オフセットアドレス制御装置の概略構成図の一例である。
【図６】オフセットアドレスを説明する図の一例である。
【図７】オフセットアドレス制御装置がオフセットアドレス信号をＬＳＵに出力する手順を示すフローチャート図の一例である。
【図８】任意のオフセット値を指定することの作用を説明する図の一例である。
【図９】マイクロプロセッサの概略構成図の一例である（実施例２）。
【図１０】オフセットアドレス変換テーブルの一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための形態について図面を参照しながら説明する。
本実施形態のマイクロプロセッサの概略的な特徴は以下のようになる。
（１）ハードウェアスレッド毎にオフセットアドレスを記憶している。
（２）相対アドレス指定によりメモリにアクセスする命令を検出する。
（３）相対アドレス指定によりメモリにアクセスする命令が検出されると、オフセットアドレスを示すオフセットアドレス信号をＬＳＵ（ロードストアユニット）に出力する。
【００１７】
相対アドレス指定によりメモリ（後述するデータ記憶部２４）にアクセスする命令が検出された場合、ハードウェアスレッド（以下、「ＨＴ」という）に固有のオフセットアドレス信号をＬＳＵに出力することで、ＬＳＵがアクセスするメモリのアドレスがオフセットされる。このため、複数のＥＣＵ（Electrical  Control  Unit）に搭載されていたプログラムを、１つのハードウェアマルチスレッド（以下、ＨＭＴという）プロセッサに搭載する際、各ＥＣＵのプログラムを修正することなく、複数のプログラムが相対アドレス指定によりメモリにアクセスしても、アクセス先のアドレス空間が重複することを回避できる。
【００１８】
図１は、（１）〜（３）の作用を模式的に説明する図の一例である。上記（１）のオフセットアドレスが登録されたオフセットアドレス変換テーブル３２に、スレッド判定手段（１７）が接続されている。オフセットアドレス変換テーブル３２と相対アドレス指定命令判定手段（１２）は、セレクタ装置３３に接続されている。スレッド判定手段（１７）は、マイクロプロセッサ１００が実行権を与えるＨＴ（命令を実行するＨＴを決定する）を識別するスレッド信号をオフセットアドレス変換テーブル３２に出力する。オフセットアドレス変換テーブル３２は、スレッド信号に対応したオフセットアドレス信号をセレクタ装置３３に出力する。相対アドレス指定命令判定手段（１２）は、マイクロプロセッサ１００が実行する命令が相対アドレス指定によりメモリにアクセスする命令であると判定した場合、オン信号をセレクタ装置３３に出力する。セレクタ装置３３は、オン信号が入力された場合にオフセットアドレス信号をＬＳＵに出力する。
【００１９】
なお、スレッド判定手段（１７）は後述するパイプライン制御装置１７に対応し、相対アドレス指定命令判定手段（１２）は命令デコーダ１２が対応する。
【００２０】
マイクロプロセッサ１００の説明に使用する言葉を定義する。本実施形態では、複数のＥＣＵを１つのＥＣＵ（以下、機能統合ＥＣＵ２００という）に統合したこと（すること）を前提にする。そして、統合前のＥＣＵが実行していたプログラムを実行する一連のハードウェアをＨＴという。外部からは、マイクロプロセッサ１００が各プログラムを同時並行的に実行しているように見える。
【００２１】
統合前のＥＣＵがＯＳ上でプログラムを実行する場合があるが、この場合は、ＯＳとプログラムで１つのプログラムとなる。マイクロプロセッサ１００は、実行しているプログラムがアプリケーションとしてのプログラムかＯＳなのかを区別せずに実行する。こうすることで、統合前のＥＣＵが実行するプログラムとＯＳの振る舞いをそのままマイクロプロセッサ１００に持ち込むことができる。したがって、プログラムはＯＳを含んでいてもよいし、ＯＳを含んでいなくてもよい。本実施形態では、プログラムという場合、ＯＳを含むか否かを問わない。
【００２２】
また、本実施形態の相対アドレス指定とは、主にレジスタと変位量をオペランドに指定するアドレスの指定方式である。
オペコード（ニーモニック）  変位量[r0], rn 
この命令コードでは、「変位量[r0]」が相対アドレス指定の部分である。レジスタrnはデータの格納先又は格納元のレジスタを示す。レジスタr0には少なくともある期間において固定の値（例えば、常に「０」の値）が格納されている。レジスタr0は、汎用レジスタ、インデックスレジスタ、又は、特殊レジスタ等であり、その呼称は問わない。また、これらのいずれかに明確に区別されないレジスタでもよい。また、マイクロプロセッサ１００の仕様では、レジスタr0の代わりに、ポインタ名（Gp（グローバルポインタ）、Ep（エレメントポインタ））を指定することもできることが多い。したがって、変位量の起点とするアドレスがレジスタ名で指定されている必要もない。
【００２３】
また、プログラムＡが「変位量[r0]」を、プログラムＢが「変位量[r1]」をオペランドにした場合、いずれも相対アドレス指定である。すなわち、複数のプログラムが共通の特定のレジスタをオペランドで指定する必要はなく、レジスタ等が示す値に対し相対的にアドレスを決定するオペランドは相対アドレス指定である。したがって、実際に、複数のプログラムが同じアドレス空間にアクセスするか否かは考慮しない。
【００２４】
また、本実施形態では複数のプログラムが重複したアドレス空間にアクセスすることを回避するため、オペコードの部分はメモリアクセスの命令が記述される。例えば、ロード命令とストア命令である。マイクロプロセッサ１００には種々のロード命令とストア命令が用意されていること多いが、メモリにアクセスする全てのロード命令とストア命令が、相対アドレス指定の命令として検出の対象となる。
【実施例１】
【００２５】
〔ＥＣＵの機能統合〕
図２は、ＥＣＵの機能統合を模式的に説明する図の一例である。図２の左側に示すように、機能統合前はＥＣＵ_Ａ上でプログラムＡが動作しており、ＥＣＵ_Ｂ上でプログラムＡが動作していた。それぞれのプログラムＡ、Ｂには車両制御に必要な演算や入出力制御を行うメインスレッドＡ，Ｂと、メインスレッドＡ，Ｂが処理を完了し次回、メインスレッドＡ，Ｂが立ち上がるまで動作するアイドルスレッドＡ，Ｂが存在する。
【００２６】
機能統合後は、図２の右側に示すように、１つの機能統合ＥＣＵ２００内でプログラムＡとＢが独立に実行される。プログラムＡを実行する一連のハードウェアがＨＴ０、プログラムＢを実行する一連のハードウェアがＨＴ１、である。それぞれＨＴ０，１は、プログラムＡとプログラムＢを擬似的に並行処理する。このため、外部からは、機能統合によるタイムラグが意識されることなく、１つのマイクロプロセッサ１００がＥＣＵ_ＡとＥＣＵ_Ｂの機能を不足なく提供できる。
【００２７】
ＥＣＵの機能統合は、大幅なＥＣＵ開発費の削減を可能とする可能性が高く、車両の価格競争力という点からも重要な技術となる。例えば、機能統合において、開発済みのプログラムをそのまま（機能統合後の機能統合ＥＣＵ２００のためにプログラムを修正することなく又は修正部を最小限にして）機能統合ＥＣＵ２００に搭載できれば、機能統合ＥＣＵ２００の開発費を削減できることが期待される。
【００２８】
ＨＭＴという技術は、従来、ソフトウェアにより実現していた複数プログラムの同時実行をハードウェアにより実現する。ハードウェアで実現することで、プログラムの切り替え時のオーバヘッドをほぼゼロにでき、結果的にリアルタイム性が厳しく要求される車両の機能統合ＥＣＵ２００にも実装できるようになり、複数のＥＣＵの機能統合が実現される。
【００２９】
なお、統合前のＥＣＵは、例えば、燃料噴射量、エンジン回転数、吸気バルブの開放時間、空燃比の決定等を決定するエンジンＥＣＵ、各輪のホイルシリンダ圧を決定するブレーキＥＣＵ、エンジンとモータそれぞれの出力トルク、運転モード（モータ運転モード、エンジン＋モータ運転モード）等を決定するハイブリッドＥＣＵ等である。なお、このようなリアルタイム性が強い制御系のＥＣＵだけでなく、ボディＥＣＵやナビゲーション用のＥＣＵを統合してもよい。
【００３０】
〔マイクロプロセッサの構成〕
図３、４を用いて、マイクロプロセッサ１００について説明する。図３は、マイクロプロセッサ１００の概略構成図の一例を、図４はＨＭＴプロセッサであるマイクロプロセッサ１００のＨＴを模式的に説明する図の一例である。図３のマイクロプロセッサ１００は、統合前の２つのＥＣＵを統合した例を示すが、３以上のＥＣＵを統合することもできる。また、統合することなく１つのプログラムのみを実行してもよい。
【００３１】
マイクロプロセッサ１００は、命令フェッチバス２５を介して命令記憶部２３と、データアクセスバス２６を介してデータ記憶部２４と、それぞれ接続されている。図３のマイクロプロセッサ１００は、ＨＭＴ型のプロセッサである。図３のＨＭＴを簡単に説明すれば、命令バッファ１１（区別する場合、命令バッファ０，１という）と命令デコーダ１２（区別する場合、命令デコーダ０，１という）を接続するマルチプレクサ１９、及び、命令デコーダ１２とレジスタ群１３（区別する場合、レジスタ群０，１という）を接続するマルチプレクサ２１を、スケジュール制御装置１６が切替制御することで、ハードウェア的にプログラム（＝ＨＴ）を選択しそのプログラムを実行するというものである。
【００３２】
図３，４に示すように、マイクロプロセッサ１００は、２つの命令バッファ０，１、２つの命令デコーダ０，１、及び、２つのレジスタ群０，１を有するので、２つのＨＴ０、１を有する。なお、命令デコーダ０，１は各ＨＴ０，１に共通に実装してもよい。命令デコーダ１２の数は、例えば、実装密度やコストを考慮して決定でき、また、統合前のＥＣＵが有するプロセッサに適切な命令デコーダ０，１を搭載することもできる。
【００３３】
命令デコーダ０，１はマルチプレクサ２１を介してレジスタ群０，１と接続されている。図４に示したように、命令バッファ０は命令デコーダ０と、命令デコーダ０はレジスタ群０と接続され、命令バッファ１は命令デコーダ１と、命令デコーダ１はレジスタ群１と接続される。
【００３４】
また、レジスタ群０，１はバス２２を介して演算器１４及びＬＳＵ１５と接続される。スケジュール制御装置１６はマルチプレクサ１９と２１に接続され、パイプライン制御装置１７は命令デコーダ０，１、レジスタ群０，１、並びに、演算器１４及びＬＳＵ１５と接続されている。また、オフセットアドレス制御装置１８には、命令デコーダ０，１、パイプライン制御装置１７、並びに、演算器１４及びＬＳＵ１５と接続されている。
【００３５】
スケジュール制御装置１６は、マルチプレクサ１９と２１を１クロックで切替制御できるので、プログラムの切り替え時のオーバヘッドはほぼ無視できる。
【００３６】
命令フェッチバス２５は、アドレスバスとデータバスを有し、命令記憶部２３に記憶された命令のアドレスをアドレスバスで指定して、読み出された命令コード（例えば、全長３２bitの長さのオペコードとオペランド）を、データバスを介して命令バッファ０，１に供給する。命令記憶部２３は、機能統合ＥＣＵ２００ではフラッシュメモリなどの不揮発メモリであることが多い。なお、図３では命令記憶部２３とデータ記憶部２４が別体であるが、両者の一部又は全体が一体の揮発メモリに配置されることもある。
【００３７】
データアクセスバス２６には、データ記憶部２４が接続されている。データアクセスバス２６にはバスブリッジが設けられており、バスブリッジを介して、データ記憶部２４としてのＲＡＭ（ＳＲＡＭ、ＤＲＡＭ等の揮発メモリ）や周辺機器（Ａ／Ｄ変換器、シリアルポート等）が接続されている。ＲＡＭには制御信号となる電圧値が一次保存されたり、周辺機器にはセンサ類の出力が接続されている。なお、上記のように、データ記憶部２４が命令記憶部２３と一体の揮発メモリとなっていることがある。
【００３８】
命令バッファ０，１にはそれぞれＰＣ（プログラムカウンタ）が設けられている。命令バッファ０は、ＰＣが指定するアドレスの１以上の命令コードをＦＩＦＯにて記憶するバッファであり、命令バッファ１は、プログラムＢの１以上の命令コードをＦＩＦＯにて記憶するバッファである。
【００３９】
命令デコーダ１２は命令バッファ１１の命令コードのオペコードから命令を解読して演算の種類を特定し、オペランドから１つ以上のソースオペランド、演算結果の格納先等を解読する。オペコードの位置は先頭bitを基準にｎbitからｍbitのように仕様として定められている。解読結果は、命令デコーダ１２が属するＨＴのレジスタ群１３に格納される。
【００４０】
なお、命令デコーダ０，１は、命令コードが相対アドレス命令であるか否かを判定し、相対アドレス命令の場合、オン信号を出力する。命令デコーダ０，１と別に、命令コードが相対アドレス命令であるか否かを判定する回路を設けてもよい。
【００４１】
レジスタ群１３は、命令デコーダ１２の解読結果（命令の種別、１以上のソースオペランド、結果の格納場所等）、演算器の演算結果、ＬＳＵ１５がデータアクセスバス２６を介してデータ記憶部２４から読み出したデータ、及び、ＬＳＵ１５がデータ記憶部２４に格納するデータ、を一時的に記憶する複数のレジスタ（汎用レジスタやフラグレジスタ）を集積したものである。
【００４２】
演算器１４及びＬＳＵ１５はＨＴ０，１に対し共通に設けられている。演算器１４はオペコードの解読結果に応じて四則演算を行ったりレジスタ群１３のレジスタ操作を行う。また、演算器１４は演算結果をレジスタ群１３にライトバックする。ＬＳＵ１５はオペコードの解読結果がロード命令の場合、レジスタ群１３のソースオペランドが指示する変位量とレジスタ内容からアドレスを決定し、データアクセスバス２６を介してデータ記憶部２４からデータを読み出す。読み出したデータは、ソースオペランドが指示するレジスタに格納する。同様に、ＬＳＵ１５はオペコードの解読結果がストア命令の場合、レジスタ群１３のソースオペランドが指示する変位量とレジスタ内容からアドレスを決定し、ソースオペランドが指示するレジスタに格納されたデータを、決定したアドレスのデータ記憶部２４に記憶させる。
【００４３】
＜スケジュール制御＞
スケジュール制御装置１６は、各プログラムの実行比率が目標実行比率になるように命令の発行比率を制御する。具体的には、スケジュール制御装置１６はマルチプレクサ１９において命令バッファ０（１）と命令デコーダ０（１）を接続するか否か、マルチプレクサ２１において命令デコーダ０（１）とレジスタ群０（１）とを接続するか否か、を制御する。
【００４４】
実行比率は、ＨＴ０において例えば「実行される命令の数／単位時間」（＝ＩＰＣ：クロック単位の命令実行数）と、ＨＴ１におけるＩＰＣの比である。両者の命令の実行速度を比較する指標であればＩＰＣ以外の比から求めてもよい。
【００４５】
目標実行比率は、各プログラムに提供すべきＱｏＳ（Quality  of  Service）により予め定まっている。車両では、安全性を最重要視してプログラムの優先度が決まっており、この優先度はＥＣＵを機能統合しても変わらない。例えば、プログラムＡが単位時間にＡ個の命令の実行が保証されるべきであり、プログラムＢが単位時間にＢ個の命令の実行が保証されるべきであるなら、機能統合後もプログラムＡとプログラムＢの実行比率が保たれるべきだからである。統合前のプログラムＡ、Ｂの実行比率は開発者が決定するパラメータである。
【００４６】
ところで、パイプライン制御装置１７は、各命令のステージを制御しているので、どのスレッドの命令が完了したかを検出できＩＰＣを監視できる。これをスケジュール制御装置１６に通知すれば、スケジュール制御装置１６は予め既知の実行比率と比較して、各プログラムの命令の発行比率を制御できる。
【００４７】
しかしながら、車載される機能統合ＥＣＵ２００、特に制御用の機能統合ＥＣＵ２００は後からプログラムが追加されることはほとんどないので、ＩＰＣを監視するまでもなく、フィードバック的な制御は不要であり、スケジュール制御装置１６は、車両の設計時に、統合前のプログラムＡ、Ｂの実行比率が保証されるように、目標実行比率になる命令の発行比率（目標発行比率）を定めておくことができる。なお、命令の種類によって実行完了するまでのクロック数が異なるので、発行比率と実行比率は一致しないが、この関係も調整して目標発行比率が定められる。
【００４８】
また、目標発行比率は、例えば、単位時間のプログラムＡの命令の発行数と、プログラムＢの命令の発行数の比をいい、「３０：７０」「５０：５０」のように表すことができる。前者の場合、スケジュール制御装置１６は、１０回のクロックのうち３回、プログラムＡの命令を命令デコーダ０に読み出し、１０回のクロックのうち７回、プログラムＢの命令を命令デコーダ１に読み出す。なお、マイクロプロセッサ１００の性能が向上し、機能統合ＥＣＵ２００の実行速度が大きくなりすぎた場合、スケジュール制御装置１６は「２０：６０：２０（アイドル）」のように、マイクロプロセッサ１００が命令を実行しないアイドル状態のタームを設けることもできる。
【００４９】
目標発行比率に従い、スケジュール制御装置１６は、資源を割り当てるＨＴをクロック単位で制御しており、パイプライン制御装置１７に該ＨＴを通知している。こうすることで、パイプライン制御装置１７は、資源を割り当てられたＨＴのステージを制御しながら命令を実行できる。
【００５０】
＜パイプライン制御＞
パイプライン制御装置１７は、スケジュール制御装置１から通知されたＨＴ毎に、命令バッファ１１から命令デコーダ１２への命令コードの読み出し（命令フェッチ）、命令をデコードしてレジスタ群１３への書き込み（命令デコード）、命令の実行、メモリアクセス（四則演算ではなにもしないステージ）、レジスタ群１３へのライトバック、の各ステージの進行を制御する。すなわち、パイプライン制御装置１７は、あるクロックにおいて、命令nのライトバック，命令n＋１のメモリ・アクセス、命令n＋２の実行，命令n＋３の命令デコード、命令n＋４の命令フェッチを、同時に行う。したがって、１クロック毎に平均的に１つの命令の実行結果が得られる。
【００５１】
「ＨＴ毎に」とは、図４に示したように、命令バッファ０（１）と命令デコーダ０（１）がマルチプレクサ１９を介して接続された状態では、必ず、命令デコーダ０（１）とレジスタ群０（１）がマルチプレクサ２１を介して接続されることを意味する。
【００５２】
パイプラインのステージはＨＴ毎に制御する必要があるため、パイプライン制御装置１７は各ＨＴを識別しながら（ＨＴを識別する信号と共に）のパイプラインを制御している。すなわち、パイプライン制御装置１７は、制御対象のＨＴを常に特定している。これを利用して、パイプライン制御装置１７はＨＴを識別する信号であるスレッド信号をオフセットアドレス制御装置とスケジュール制御装置１６に出力する。パイプライン制御装置１７以外に、ＨＴを特定する回路を設けてもよい。
【００５３】
なお、パイプライン制御装置１７は、演算の種類やソースオペランド等を参照して、前の命令の実行結果を次の命令が必要とする場合には、次の命令のステージにアイドルステージを挿入するなどして、各ステージ間の整合性を確保する。また、例えば、あるプログラム（例えばプログラムＡ）にＩ／Ｏ待ちのようなハザードが生じた場合、パイプライン制御装置１７はスレッドスケジュール装置にそのプログラムＡを停止させ、別のプログラムＢを実行するよう要求する。
【００５４】
＜オフセットアドレス制御装置＞
オフセットアドレス制御装置１８は、図１に示した、ＬＳＵ１５にオフセットアドレス信号を出力する装置である。
図５を用いて、オフセットアドレス制御装置１８について説明する。図５はオフセットアドレス制御装置１８の概略構成図の一例である。オフセットアドレス制御装置１８には、オン信号（ＨＴ０のオン信号をオン信号０，ＨＴ１のオン信号をオン信号１という）及びスレッド信号が入力される。オン信号は、デコードした命令が相対アドレス指定命令か否かを示す信号なので「１（Ｈ）」である（０（Ｌ）でもよい）。スレッド信号は、ＨＴを識別する信号なので、ＨＴが２個までなら１本の信号線を用いた「１（Ｈ）」又は「０（Ｌ）」を表す信号である。ＨＴが３〜４個までなら２本の信号線を用いた「００」、「０１」、「１０」、又は「１０」を表す信号である。
【００５５】
スレッド信号は番号デコーダ３１に供給される。番号デコーダ３１は、スレッド信号をデコードしてＨＴを特定する。
【００５６】
オフセットアドレス制御装置１８は、図１で説明したオフセットアドレス変換テーブル３２を有する。オフセットアドレス変換テーブル３２には、各ＨＴに対応づけて、オフセットアドレス（図５では、ＨＴ０に0x1000、ＨＴ１に0x2000）が登録されている。
【００５７】
図６は、オフセットアドレスを説明する図の一例である。データ記憶部２４に統合前のプログラムＡとプログラムＢがそのまま記録されている。データ記憶部２４におけるプログラムＡの先頭アドレスは「0x1000」、プログラムBの先頭アドレスは「0x2000」、である。図６では命令記憶部２３に続けてデータ記憶部２４を配置する記憶の態様を示した。このため、ＬＳＵ１５がプログラムＡ（ＨＴ０）のロード／ストア命令を実行する場合は、「0x1000」に対し相対的にアドレスを決定し、プログラムBのロード／ストア命令を実行する場合は、「0x2000」に対し相対的にアドレスを決定すればよい。
【００５８】
また、機能統合ＥＣＵ２００においてもデータ記憶部２４におけるプログラムＡ，Ｂの配置は固定である。したがって、機能統合ＥＣＵ２００の設計時に、ＨＴ０のオフセットアドレスを「0x1000」に、ＨＴ１のオフセットアドレスを「0x2000」にそれぞれ決定し、オフセットアドレス変換テーブル３２に登録しておけばよい。
【００５９】
図５に戻り、オフセットアドレス変換テーブル３２は、選択的に例えばオフセットアドレスを示す１６〜３２bitの信号を出力する回路を実体とする。信号線の本数（１６〜３２）はデータ記憶部２４のアドレス空間の広さによって変わりうる。
【００６０】
番号デコーダ３１がＨＴの特定結果に応じて、オフセットアドレスを選択する信号を出力すると、オフセットアドレス変換テーブル３２は該信号に対応するプログラムＡ又はプログラムＢのオフセットアドレス信号をセレクタ装置３３に出力する。
【００６１】
したがって、命令デコーダ１２がオン信号をセレクタ装置３３に出力すると、セレクタ装置３３はオフセットアドレス信号をＬＳＵ１５に出力できるようになる。よって、プログラムＡ又はＢから相対アドレス指定命令が検出された場合だけ、ＬＳＵ１５がオフセットアドレスを利用することができるようになる。
【００６２】
なお、セレクタ装置３３は一例であり、論理回路を組み合わせて同様の機能を実現してもよい。例えば、セレクタ装置３３にはオフセットアドレス変換テーブル３２の各オフセットアドレスを接続し、番号デコーダ３１の出力をセレクタ装置３３に接続することで、セレクタ装置３３へのオン信号の入力により、セレクタ装置３３は選択的にオフセットアドレスを出力できる。また、セレクタ装置３３をＴＳＢ（スリーステータスバッファ）にしてもよい。
【００６３】
ＬＳＵ１５は、オフセットアドレス制御装置１８からオフセットアドレス信号を通知されると、「変位量[r0]」に対し、レジスタr0に記憶された値の代わりにオフセットアドレス信号に対し相対的に変位量を加算して、データ記憶部２４のアドレスを決定する。「レジスタr0に記憶された値の代わりに」としたのは、レジスタr0には常に「０」が記憶されている場合であり、レジスタr0に「０」が記憶されているとは限らない場合は、「[r0]+ オフセットアドレス信号」に、相対的に変位量を加算して、データ記憶部２４のアドレスを決定する。
【００６４】
こうすることで、ソフトウェア開発者は、相対アドレス指定命令を意識することなく（プログラムＡ、Bを修正することなく）、プログラムＡ又はＢの相対アドレス指定命令が、データ記憶部２４で重複した領域にアクセスすることを回避できる。
【００６５】
〔オフセットアドレス信号をＬＳＵに出力する手順〕
図７は、オフセットアドレス制御装置１８がオフセットアドレス信号をＬＳＵ１５に出力する手順を示すフローチャート図の一例である。図7の手順は、機能統合ＥＣＵ２００の電源がオンになると繰り返し実行される。
【００６６】
オフセットアドレス制御装置１８は、パイプライン制御装置１７からクロック毎又はスケジュール制御装置１６がＨＴを切り替える毎に、スレッド信号を通知される（Ｓ１０）。
【００６７】
ついで、番号デコーダ３１は、スレッド信号をデコードして、ＨＴを特定する（Ｓ２０）。番号デコーダ３１は、例えば、スレッド信号が変化したことをトリガーにスレッド信号をデコードすることで、消費電力を抑制できる。
【００６８】
オフセットアドレス変換テーブル３２は、番号デコーダ３１によるＨＴの特定結果に応じて、プログラムＡ又はプログラムＢのオフセットアドレス信号をセレクタ装置３３まで出力する（Ｓ３０）。
【００６９】
セレクタ装置３３は、命令デコーダ０，１がオン信号を出力しない場合（Ｓ４０のＮｏ）、ハイインピーダンス状態なので、オフセットアドレス信号をＬＳＵ１５に出力しない。この場合、処理手順はステップＳ１０に戻る。
【００７０】
命令デコーダ０，１がオン信号を出力した場合（Ｓ４０のＹｅｓ）、セレクタ装置３３はオフセットアドレス信号をＬＳＵ１５に出力する（Ｓ５０）。よって、ＬＳＵ１５は、オフセットアドレス信号により変位量をオフセットしてデータ記憶部２４にアクセスすることができる。
【００７１】
なお、ＬＳＵ１５がアクセス先のアドレスを決定して命令を実行するクロックサイクルは、命令デコードの次のクロックサイクルである。よって、オフセットアドレス制御装置１８が、オフセットアドレス信号を出力するタイミングは、ＬＳＵ１５が命令を実行する前又は同じクロックサイクルであることが好ましい。したがって、命令デコードとオフセットアドレス信号を出力するタイミングの関係は次のようになる。
・命令デコーダ０，１が命令デコードと同じクロックサイクルでオン信号を出力する場合、オフセットアドレス制御装置１８は１クロックウェイトしてオフセットアドレス信号をＬＳＵ１５に出力する。
・命令デコーダ０，１が命令デコードの次のクロックサイクルでオン信号を出力する場合、オフセットアドレス制御装置１８はオン信号と同じクロックサイクルでオフセットアドレス信号をＬＳＵ１５に出力する。
【００７２】
いずれの場合でも、本実施例ではオフセットアドレス制御装置１８の追加により、ＬＳＵ１５に待機状態が発生することはない。
【００７３】
また、ステップＳ５０の後、オフセットアドレス制御装置１８は、１クロック待ってオフセットアドレス信号を停止する。ＬＳＵ１５は、アクセス先にもよるが最短１クロックでデータ記憶部２４にアクセスできるので、オフセットアドレス信号は１クロックサイクルの間だけ受け取れば十分だからである。こうすることで、相対アドレス指定でない命令にオフセットアドレス信号が提供されることを防止できる。
【００７４】
以上説明したように、本実施例のマイクロプロセッサ１００は、プログラムに相対アドレス指定命令が含まれていても、アクセス先のアドレスをオフセットすることで、複数のＥＣＵを機能統合した際、プログラムを修正する必要がない。よって、ＥＣＵの数が減ることによるコスト削減だけでなく、機能統合ＥＣＵ２００の開発コストも低減できる。
【実施例２】
【００７５】
本実施例では、オフセットアドレス変換テーブル３２に任意のオフセットアドレスを登録できるマイクロプロセッサ１００について説明する。任意のオフセットアドレスを指定することができれば、データ記憶部２４の容量（命令コード量）を削減することができる。
【００７６】
〔空き容量について〕
図８は、任意のオフセットアドレスを指定することの作用を説明する図の一例である。これまで説明したように、プログラムＡとプログラムＢをそのまま統合した場合、図８（ａ）に示すように、プログラムＡの容量とプログラムＢの容量を足しただけの容量がデータ記憶部２４に必要となる。
【００７７】
図8（ａ）のプログラムＡ、Ｂは命令記憶部２３とデータ記憶部２４が一体に不揮発メモリに記憶されている状態を示す。統合前のプログラムＡは、図示するプログラムＡの全体を、相対アドレス指定によりアクセスする領域として確保していた。プログラムＢについても同様である。例えば、Ｃ言語の場合、上位アドレスには命令を含む命令コードが下位アドレスにはデータが配置されるようにコンパイルされる。また、Ｃ言語の場合、下位アドレスには関数の呼び出しなどに必要なスタック領域が確保されている。また、使用する関数によってヒープ領域が確保されることもある。
【００７８】
しかしながら、プログラムＡ、Ｂは実際には確保した領域の全てにアクセスすることはなく、点線で示した“実際に使う領域”にしかアクセスしない。すなわち、プログラムＡ、Ｂの命令コード量の全体には“空き”があり、この空き領域は使用されないので無駄になっている。
【００７９】
このため、プログラムＡ，Ｂを修正することなく複数のＥＣＵを機能統合すると、各プログラムの空き領域が積み重なってしまうことになる。
【００８０】
そこで、本実施例では、ソフトウェア開発者がプログラムＡの空き領域を把握しておき、プログラムＡの空き領域を詰める態様で、プログラムＡとプログラムＢを統合して１つの機能統合ＥＣＵ２００に機能統合するマイクロプロセッサ１００について説明する。
【００８１】
図8（ｂ）は、プログラムＡの空き領域を削減して機能統合した、命令記憶部２３とデータ記憶部２４を模式的に示す図の一例である。空き領域を削減することで、機能統合による空き領域の増大を抑制できる。なお、プログラムＢの空き領域を削減することもできる。
【００８２】
〔本実施例のマイクロプロセッサ１００の構成〕
図９は、本実施例のマイクロプロセッサ１００の概略構成図の一例を示す。図9において、図３と同一部には同一の符号を付しその説明は省略する。図９では、演算器１４にオフセットアドレス変換テーブル指定レジスタ４１が接続されている。オフセットアドレス変換テーブル指定レジスタ４１は、例えばシステムレジスタである。システムレジスタは、マイクロプロセッサ１００が実行環境を制御するために使用したり、割り込み又は例外発生時にマイクロプロセッサ１００の状態を保持するレジスタである。汎用レジスタを使用してもよいが、システムレジスタを使用することでオフセットアドレスの書き換え経路を限定でき、プログラムＡ、Ｂの実行中にオフセットアドレス変換テーブル３２が書き換わることを防止できる。
【００８３】
＜レジスタの書き換え＞
システムレジスタの書き換えには、マイクロプロセッサ１００が用意するＩＳＡ（Instruction  set  architecture）によるがシステムレジスタ書き込み専用命令を利用する。命令コードは例えば次のようになる。
LDSR r2, regID  …（ａ）
（ａ）の命令コードは、「r2」に記憶された値を「regID」が指定するシステムレジスタ（オフセットアドレス変換テーブル指定レジスタ４１）に格納する命令コードである。
【００８４】
空き容量を削減してもプログラムＡとＢのオフセットアドレスが固定であることには変わりはない。
【００８５】
そこで、２つのオフセットアドレス（Ａ＝0x1000、Ｂ＝0x2000）をパラメータとして保持しておき、ソフト的にオフセットアドレス変換テーブル３２に登録することができる。このソフトウェアは、例えば、ＯＳやＢＩＯＳ等、電源のオン時に自動実行されるプログラム（以下、管理プログラム４２という）である。また、２つのオフセットアドレスＡ、Ｂは、データ記憶部２４に記憶されているか、又は、管理プログラム４２に記述されている。  
電源オン時、管理プログラム４２はオフセットアドレスＡを読み出し、「r２」に設定し、次に、上記（ａ）を実行する。これにより、管理プログラム４２は、オフセットアドレス変換テーブル指定レジスタ４１に、ＨＴ番号、オフセットアドレスＡを設定し、バリッドビットを有効（オン）にする。
【００８６】
＜オフセットアドレス変換テーブル３２への設定＞
バリッドビットが有効になると、マイクロプロセッサ１００（例えばパイプライン制御装置１７）がＨＴ番号とオフセットアドレスＡ，Ｂをオフセットアドレス変換テーブル３２に出力する。こうすることで、管理プログラム４２は、オフセットアドレス変換テーブル３２に任意のオフセットアドレスＡ，Ｂを登録することができる。
【００８７】
オフセットアドレスＢについても同様に設定できる。管理プログラム４２は、ＨＴの数だけ、オフセットアドレスの読み出し、「r２」への設定、及び、上記（ａ）の実行、を行う。これにより、管理プログラム４２は、オフセットアドレス変換テーブル３２に、ＨＴ毎のオフセットアドレスを登録することができる。
【００８８】
図１０は、オフセットアドレス変換テーブル３２の一例を示す図である。図１０のオフセットアドレス変換テーブル３２はバリッドビットを有する。これは、管理プログラム４２がオフセットアドレスを登録しないＨＴがあってもよいように、各オフセットアドレスが有効か無効かを示すためである。
【００８９】
よって、本実施例のオフセットアドレス変換テーブル３２は、スレッド信号を通知されても、バリッドビットが有効でないオフセットアドレスをセレクタ装置３３に出力することはない。こうすることで、オフセットアドレス変換テーブル３２に幾つのオフセットアドレスを登録するかを決定できる
本実施例のマイクロプロセッサ１００は、実施例１の効果に加え、管理プログラム４２がオフセットアドレスをオフセットアドレス変換テーブル３２に登録するので、任意のオフセットアドレスを登録できる。また、プログラムＡとプログラムＢを統合する際のデータ記憶部２４の容量を削減できる。
【符号の説明】
【００９０】
１１    命令バッファ
１２    命令デコーダ
１３    レジスタ群
１４    演算器
１５    ＬＳＵ
１６    スケジュール制御装置
１７    パイプライン制御装置
１８    オフセットアドレス制御装置
１９、２１    マルチプレクサ
２３    命令記憶部
２４    データ記憶部
２５    命令フェッチバス
２６    データアクセスバス
３２    オフセットアドレス変換テーブル  
３３    セレクタ装置
４１    オフセットアドレス変換テーブル指定レジスタ
４２    管理プログラム
【図１】
2011198048.tif 000003
【図２】
2011198048.tif 000004
【図３】
2011198048.tif 000005
【図４】
2011198048.tif 000006
【図５】
2011198048.tif 000007
【図６】
2011198048.tif 000008
【図７】
2011198048.tif 000009
【図８】
2011198048.tif 000010
【図９】
2011198048.tif 000011
【図１０】
2011198048.tif 000012