(57)【特許請求の範囲】
【請求項１】
命令コードをパイプライン処理するための命令パイプラインと、
前記命令パイプライン内であって、デコードステージよりも下流のステージを含むステージに対応した命令パイプライン内の命令コードのアドレスと次に命令キャッシュメモリ又はメインメモリから読み出そうとする命令コードのアドレスとが同じか否かを比較する比較部と、
前記命令コードのアドレスが同じときには、前記命令キャッシュメモリ及び前記メインメモリからその命令コードを読み出さず、前記命令パイプライン内の命令コードを再び前記命令パイプラインで処理するように制御する制御部と
を有することを特徴とするプロセッサ。
【請求項２】
前記比較部は、前記命令パイプライン内の命令コードのアドレスと次に命令キャッシュメモリ又はメインメモリから読み出そうとする命令コードのアドレスとが同じか否かを比較し、
前記制御部は、前記命令コードのアドレスが同じときには、前記命令キャッシュメモリ及び前記メインメモリからその命令コードを読み出さず、前記命令パイプライン内の命令コードを再び前記命令パイプラインで処理するように制御することを特徴とする請求項１記載のプロセッサ。
【請求項３】
さらに、命令先読みバッファ内の命令コードをデコードし、その命令コードが分岐命令であるときには、その分岐先アドレスを前記次に命令キャッシュメモリ又はメインメモリから読み出そうとする命令コードのアドレスとして選択することを可能とするデコード部を有することを特徴とする請求項１又は２記載のプロセッサ。
【請求項４】
前記制御部は、前記命令コードのアドレスが同じときには、前記命令キャッシュメモリにアクセス抑止信号を出力することを特徴とする請求項１〜３のいずれか１項に記載のプロセッサ。
【請求項５】
前記制御部は、前記命令コードが異なるときには、前記命令キャッシュメモリ又は前記メインメモリからその命令コードを読み出し、前記命令パイプラインで処理するように制御することを特徴とする請求項１〜４のいずれか１項に記載のプロセッサ。
【請求項６】
前記比較部は、前記命令パイプライン内の命令コードのアドレスと次に命令キャッシュメモリから読み出そうとする命令コードのアドレスとが同じか否かを比較し、
前記制御部は、前記命令コードのアドレスが同じときには、前記命令キャッシュメモリからその命令コードを読み出さず、前記命令パイプライン内の命令コードを再び前記命令パイプラインで処理するように制御することを特徴とする請求項１〜５のいずれか１項に記載のプロセッサ。
【請求項７】
命令コードをパイプライン処理するための命令パイプラインを有するプロセッサの処理方法であって、
前記命令パイプライン内であって、デコードステージよりも下流のステージを含むステージに対応した命令パイプライン内の命令コードのアドレスと次に命令キャッシュメモリ又はメインメモリから読み出そうとする命令コードのアドレスとが同じか否かを比較する比較ステップと、
前記命令コードのアドレスが同じときには、前記命令キャッシュメモリ及び前記メインメモリからその命令コードを読み出さず、前記命令パイプライン内の命令コードを再び前記命令パイプラインで処理する再処理ステップと
を有することを特徴とするプロセッサの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びその処理方法に関する。
【背景技術】
【０００２】
図３は、プロセッサの構成例を示す図である。命令先読みバッファ３０２は、命令キャッシュメモリ３０１から命令コードを先読みして記憶する。ステージＳ１〜Ｓ５は、命令パイプラインを構成し、命令先読みバッファ３０２内の命令コードを順次パイプライン処理する。例えば、命令先読みバッファ３０２内の命令コードは、ステージＳ１ではデコード処理され、次にステージＳ２では実行処理され、次にステージＳ３ではライトバック処理される。ステージＳ１は命令コードＩ１及びそのアドレスＡ１を記憶し、ステージＳ２は命令コードＩ２及びそのアドレスＡ２を記憶し、ステージＳ３は命令コードＩ３及びそのアドレスＡ３を記憶し、ステージＳ４は命令コードＩ４及びそのアドレスＡ４を記憶し、ステージＳ５は命令コードＩ５及びそのアドレスＡ５を記憶する。
【０００３】
命令アドレスＡＡは、次回にステージＳ５に送られるアドレスである。ＡＬＵ（算術論理演算装置：Arithmetic Logic Unit）３０４は、命令アドレスＡＡ及びオフセットアドレスＡＳを加算し、次回の命令アドレスＡＡを出力する。命令コードが４バイト命令の場合には、オフセットアドレスＡＳは「＋４」となる。命令アドレスＡＡを＋４ずつ加算することにより、アドレス順に命令コードを実行することができる。
【０００４】
例外制御部３０３は、実行不能命令が実行されたとき等の例外処理を割り込み制御により行う。その際、現在の命令アドレスを一時退避し、例外処理終了後に退避した命令アドレスを戻し、割り込み前の処理を再開する。
【０００５】
また、下記の特許文献１には、ＣＰＵからコプロセッサに対して、その実行アドレスが出力されている場合は、コプロセッサ制御部によって、ＣＰＵからキャッシュメモリへのアドレス出力を遮断させ、キャッシュメモリに対してアドレス供給を行わないようにするマイクロプロセッサが記載されている。
【０００６】
【特許文献１】特開２００３−２２８４８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記のプロセッサは、命令を実行する際に必ずキャッシュメモリ３０１又はメインメモリから命令コードを読み出す。例えば、１ＧＨｚで動作するプロセッサの場合、１０億回強のメモリアクセスを行う必要があり、最近では命令キャッシュメモリ３０１の消費電力がプロセッサ全体の消費電力に占める割合は数十％に達している。特に、スーパスカラやＶＬＩＷといった最近の技術を使った、同時に複数の命令を実行するようなプロセッサにおいて、この問題は深刻となる。
【０００８】
本発明の目的は、命令キャッシュメモリから命令コードを読み出す回数を減らすことにより、命令キャッシュメモリの消費電力を削減することができるプロセッサ及びその処理方法を提供することである。
【課題を解決するための手段】
【０００９】
本発明の一観点によれば、命令コードをパイプライン処理するための命令パイプラインと、前記命令パイプライン内であって、デコードステージよりも下流のステージを含むステージに対応した命令パイプライン内の命令コードのアドレスと次に命令キャッシュメモリ又はメインメモリから読み出そうとする命令コードのアドレスとが同じか否かを比較する比較部と、前記命令コードのアドレスが同じときには、前記命令キャッシュメモリ及び前記メインメモリからその命令コードを読み出さず、前記命令パイプライン内の命令コードを再び前記命令パイプラインで処理するように制御する制御部とを有することを特徴とするプロセッサが提供される。
【発明の効果】
【００１０】
ループ処理の際に命令パイプライン内の命令コードを再利用することにより、命令キャッシュメモリから命令コードを読み出す回数を減らし、命令キャッシュメモリの消費電力を削減することができる。
【発明を実施するための最良の形態】
【００１１】
図１は、本発明の実施形態によるプロセッサの構成例を示す図である。命令キャッシュメモリ１０１は、ＲＡＭであり、メインメモリ内の一部の命令コードを記憶する。命令先読みバッファ１０２は、命令キャッシュメモリ１０１又はメインメモリからセレクタ１０７を介して命令コードを先読みして記憶する。ステージＳ１〜Ｓ５は、命令パイプラインを構成し、命令先読みバッファ１０２内の命令コードを順次パイプライン処理する。例えば、命令先読みバッファ１０２内の命令コードは、ステージＳ１ではデコード処理され、次にステージＳ２では実行処理され、次にステージＳ３ではライトバック処理される。
【００１２】
例えば、ステージＳ１は命令コードＩ１及びそのアドレスＡ１を記憶し、ステージＳ２は命令コードＩ２及びそのアドレスＡ２を記憶し、ステージＳ３は命令コードＩ３及びそのアドレスＡ３を記憶し、ステージＳ４は命令コードＩ４及びそのアドレスＡ４を記憶し、ステージＳ５は命令コードＩ５及びそのアドレスＡ５を記憶する。命令アドレスＡＡは、次回に最初のステージＳ５に送られるアドレスである。
【００１３】
図２は、命令アドレス及び命令コードの例を示す図である。命令アドレスＡ１には命令コードＩ１が記憶され、命令アドレスＡ２には命令コードＩ２が記憶され、命令アドレスＡ３には命令コードＩ３が記憶され、命令アドレスＡ４には命令コードＩ４が記憶され、命令アドレスＡ５には命令コードＩ５が記憶され、命令アドレスＡ６には命令コードＩ６が記憶されている。これらの命令コードは、メインメモリ及び／又は命令キャッシュメモリ１０１に記憶されている。例えば、命令コードＩ６は、分岐命令（ジャンプ命令）である。命令コードＩ１からＩ５までは順次実行され、命令コードＩ６は命令アドレスＡ１へのジャンプを指示する命令である。この場合、命令コードＩ１からＩ５までを実行した後に、再び命令コードＩ１からＩ５までを実行するループ処理となる。
【００１４】
図１において、まず、命令コードＩ１からＩ５までのように、アドレス順に命令コードを実行する場合を説明する。セレクタ１０８は、オフセットアドレスＡＳを選択し、ＡＬＵ（算術論理演算装置：Arithmetic Logic Unit）１０４に出力する。ＡＬＵ１０４は、命令アドレスＡＡ及びオフセットアドレスＡＳを加算し、新たな命令アドレスＡＡを出力する。その際、セレクタ１０９はＡＬＵ１０４の出力を選択し、新たな命令アドレスＡＡを出力する。命令コードが４バイト命令の場合には、オフセットアドレスＡＳは「＋４」となる。命令アドレスＡＡを＋４ずつ加算することにより、アドレス順に命令コードＩ１〜Ｉ５を実行することができる。
【００１５】
次に、命令コードＩ６が分岐命令の場合を説明する。分岐命令の分岐先アドレスの指定方法として、ＰＣ（プログラムカウンタ）相対アドレス指定（自己相対アドレス指定）及び絶対アドレス指定がある。まず、ＰＣ相対アドレス指定について説明する。説明の簡単のため、命令先読みバッファ１０２の容量が１個の命令コード分である場合を例に説明する。命令先読みバッファ１０２には命令コードＩ６が記憶され、それに対応する命令アドレスＡＡはアドレスＡ６である。アドレスＡ６は、アドレスＡ５に「＋４」を加算したアドレスである。デコード部１１１は、命令先読みバッファ１０２から命令コードＩ６を読み出す。命令コードＩ６は、オペコード及び分岐先アドレスフィールドを有する。デコード部１１１は、命令コードＩ６のオペコードが分岐命令の場合には、分岐先アドレスフィールドの分岐先アドレスＡＢをセレクタ１０８に出力する。セレクタ１０８は、分岐先アドレスＡＢを選択し、ＡＬＵ１０４に出力する。ＡＬＵ１０４は、命令アドレスＡＡ及び分岐アドレスＡＢを加算し、新たな命令アドレスＡＡを出力する。その際、セレクタ１０９は、ＡＬＵ１０４の出力を選択し、新たな命令アドレスＡＡとして出力する。例えば、現在の命令アドレスＡＡがアドレスＡ６であり、分岐先アドレスＡＢが「−２０」であり、ＡＬＵ１０４はアドレスＡ１を出力する。
【００１６】
比較回路Ｃ１は、ステージＳ１の命令アドレスＡ１及びセレクタ１０９の出力である新たな命令アドレスＡＡを比較し、一致すれば１を出力し、一致しなければ０を出力する。比較回路Ｃ２は、ステージＳ２の命令アドレスＡ２及びセレクタ１０９の出力である新たな命令アドレスＡＡを比較し、一致すれば１を出力し、一致しなければ０を出力する。比較回路Ｃ３は、ステージＳ３の命令アドレスＡ３及びセレクタ１０９の出力である新たな命令アドレスＡＡを比較し、一致すれば１を出力し、一致しなければ０を出力する。比較回路Ｃ４は、ステージＳ４の命令アドレスＡ４及びセレクタ１０９の出力である新たな命令アドレスＡＡを比較し、一致すれば１を出力し、一致しなければ０を出力する。比較回路Ｃ５は、ステージＳ５の命令アドレスＡ５及びセレクタ１０９の出力である新たな命令アドレスＡＡを比較し、一致すれば１を出力し、一致しなければ０を出力する。比較回路Ｃ６は、命令先読みバッファ１０２の命令アドレス及びセレクタ１０９の出力である新たな命令アドレスＡＡを比較し、一致すれば１を出力し、一致しなければ０を出力する。命令先読みバッファ１０２には、命令コード及びそれに対応する命令アドレスが記憶されており、複数の命令コードを記憶するようにしてもよい。
【００１７】
命令選択制御部１０５は、比較回路Ｃ１〜Ｃ６の出力に応じて、セレクタ１０６を制御する。セレクタ１０６は、比較回路Ｃ１が１を出力したときにはステージＳ１の命令コードＩ１を選択し、比較回路Ｃ２が１を出力したときにはステージＳ２の命令コードＩ２を選択し、比較回路Ｃ３が１を出力したときにはステージＳ３の命令コードＩ３を選択し、比較回路Ｃ４が１を出力したときにはステージＳ４の命令コードＩ４を選択し、比較回路Ｃ５が１を出力したときにはステージＳ５の命令コードＩ５を選択し、比較回路Ｃ６が１を出力したときには命令先読みバッファ１０２の命令コードを選択し、セレクタ１０７に出力する。セレクタ１０７は、命令選択制御部１０５の制御の下、比較回路Ｃ１〜Ｃ６のいずれかが１を出力すると、セレクタ１０６が出力する命令コードを選択し、比較回路Ｃ１〜Ｃ６のすべてが０を出力すると、命令キャッシュ１０１又はメインメモリが出力する命令コードを選択し、命令先読みバッファ１０２に出力する。また、命令選択制御部１０５は、比較回路Ｃ１〜Ｃ６のいずれかが１である場合には、命令キャッシュメモリ１０１にアクセス抑止信号を出力する。命令キャッシュメモリ１０１は、アクセス抑止信号を入力すると、アクセスを行わず、消費電力を削減することができる。
【００１８】
例外制御部１０３は、実行不能命令が実行されたとき等の例外処理を割り込み制御により行う。その際、現在の命令アドレスを一時退避し、例外処理終了後に退避した命令アドレスを戻し、割り込み前の処理を再開する。
【００１９】
例えば、デコード部１１１が分岐命令コードＩ６をデコードし、分岐先アドレスＡＢを出力する場合、セレクタ１０９の出力命令アドレスがアドレスＡ１と同じになる。その場合、比較回路Ｃ１が１を出力し、比較回路Ｃ２〜Ｃ６が０を出力する。セレクタ１０６は、ステージＳ１の命令コードＩ１を選択し、セレクタ１０７に出力する。セレクタ１０７は、セレクタ１０６の出力である命令コードＩ１を選択し、命令先読みバッファ１０２に出力する。命令先読みバッファ１０２は、その命令コードＩ１を記憶する。命令キャッシュメモリ１０１は、命令選択制御部１０５からアクセス抑止信号を入力し、アクセスを行わない。以上のように、命令コードＩ１は、既にステージＳ１に存在するので、それを再び先読みバッファ１０２に記憶させる。この際、命令キャッシュメモリ１０１からの読み出しが行われないので、消費電力を削減することができる。命令アドレスＡＡは、アドレスＡ１になる。
【００２０】
次に、セレクタ１０８は、オフセットアドレスＡＳを選択し、ＡＬＵ１０４に出力する。ＡＬＵ１０４は、命令アドレスＡＡ及びオフセットアドレスＡＳを加算し、セレクタ１０９に出力する。例えば、命令アドレスＡＡはアドレスＡ１、オフセットアドレスＡＳは「＋４」であり、ＡＬＵ１０４はアドレスＡ２を出力する。セレクタ１０９は、ＡＬＵ１０４の出力を選択する。本来、ステージＳ１〜Ｓ５のパイプラインは命令コードをシフトするが、説明の簡単のため、図１のステージＳ１〜Ｓ５の状態で説明する。その場合、比較回路Ｃ２が１を出力し、比較回路Ｃ１、Ｃ３〜Ｃ６が０を出力する。セレクタ１０６は、ステージＳ２の命令コードＩ２を選択し、セレクタ１０７に出力する。セレクタ１０７は、セレクタ１０６の出力である命令コードＩ２を選択し、命令先読みバッファ１０２に出力する。命令先読みバッファ１０２は、その命令コードＩ２を記憶する。命令キャッシュメモリ１０１は、命令選択制御部１０５からアクセス抑止信号を入力し、アクセスを行わない。命令キャッシュメモリ１０１からの読み出しが行われないので、消費電力を削減することができる。
【００２１】
以上のように、分岐命令コードＩ６が命令アドレスＡ１へのジャンプ命令である場合、命令コードＩ１〜Ｉ５を２回実行することになる。命令コードＩ１〜Ｉ５は、ステージＳ１〜Ｓ５に存在するので、それを再利用し、命令キャッシュメモリ１０１のアクセスを行わない。これにより、消費電力を削減することができる。
【００２２】
また、命令先読みバッファ１０２は、複数の命令コードを記憶することができる。その場合、比較回路Ｃ６は、命令先読みバッファ１０２内の命令アドレス及びセレクタ１０９の出力命令アドレスを比較し、一致すれば１を出力し、一致しなければ０を出力する。セレクタ１０６は、比較回路１０６が１を出力したときには、命令先読みバッファ１０２内の命令コードを選択し、セレクタ１０７に出力する。
【００２３】
次に命令キャッシュメモリ１０１から読み出そうとする命令コードが既にステージＳ１〜Ｓ５又は命令先読みバッファ１０２内に存在するときには、命令キャッシュメモリ１０１から読み出さずに、上記の既に存在する命令コードを再利用し、命令先読みバッファ１０２に記憶させることができる。
【００２４】
次に、分岐命令の分岐先アドレスの指定方法として、絶対アドレス指定の場合を説明する。命令コードＩ６が分岐命令の場合、分岐先アドレスはアドレスレジスタ１１０に記憶されている。デコード部１１１は、命令コードＩ６が絶対アドレス指定の分岐命令であると判断すると、セレクタ１０９を制御する。セレクタ１０９は、アドレスレジスタ１１０に記憶されている絶対アドレスを選択し、出力する。それ以外は、上記のＰＣ相対アドレス指定の場合の説明と同じである。
【００２５】
セレクタ１０７は、命令選択制御部１０５の制御の下、比較回路Ｃ１〜Ｃ６がすべて０を出力したときには、命令キャッシュメモリ１０１が出力する命令コードを選択し、命令先読みバッファ１０２に記憶させる。ステージＳ１〜Ｓ５及び命令先読みバッファ１０２内に命令コードが存在しない場合には、命令キャッシュメモリ１０１又はメインメモリから命令コードを読み出して、命令先読みバッファ１０２に記憶させる。命令先読みバッファ１０２内の命令コードは、ステージＳ１〜Ｓ５でパイプライン処理される。
【００２６】
本実施形態によれば、比較回路Ｃ１〜Ｃ６は、命令パイプラインのステージＳ１〜Ｓ５又は命令先読みバッファ１０２内の命令コード（命令アドレス）と次に命令キャッシュメモリ１０１又はメインメモリから読み出そうとする命令コード（命令アドレス）とが同じか否かを比較する。制御部１０５は、前記命令コードが同じときには、前記命令キャッシュメモリ１０１及び前記メインメモリからその命令コードを読み出さず、前記命令パイプラインのステージＳ１〜Ｓ５又は前記命令先読みバッファ１０２内の命令コードを再び前記命令パイプラインのステージＳ１〜Ｓ５又は前記命令先読みバッファ１０２で処理するように制御し、前記命令コードが異なるときには、前記命令キャッシュメモリ１０１又は前記メインメモリからその命令コードを読み出し、前記命令パイプラインのステージＳ１〜Ｓ５で処理するように制御する。デコード部１１１は、前記命令先読みバッファ１０２内の命令コードをデコードし、その命令コードが分岐命令であるときには、その分岐先アドレスを前記次に命令キャッシュメモリ又はメインメモリから読み出そうとする命令コードのアドレスとする。
【００２７】
プロセッサが命令コードのプログラムを実行するうち、その大半はループ処理である。ループ処理の場合、時間的に近い過去に実行した命令コードと同じ命令コードを再度実行することになる。時間的に非常に近い過去に実行した命令コードは、命令先読みバッファ１０２又は命令パイプラインステージＳ１〜Ｓ５に情報が残されている確率が高い。この特性を生かして、これから実行しようとしている命令コードのアドレスと、命令先読みバッファ１０２又は命令パイプラインステージＳ１〜Ｓ５に情報が残っている命令コードのアドレスとを比較して一致した場合に、命令キャッシュメモリ１０１からの読み出しを抑止して、命令先読みバッファ１０２又は命令パイプラインステージＳ１〜Ｓ５に残っている情報を使って命令実行を行う。
【００２８】
特に、ポーリング処理、メモリクリア、メモリ間転送といった非常に短い処理の繰り返しの場合に高い効果が得られる。命令キャッシュメモリ１０１を読むのに比べて、フリップフロップからの読み出しになることで、数％〜数十％の消費電力削減効果が期待できる。
【００２９】
命令先読みバッファ１０２と命令パイプラインステージＳ１〜Ｓ５に残っている情報を使う限りでは物量の増加もほとんど生じない。適用範囲を広げるために、さらに専用のバッファを用意する、という選択肢もある。
【００３０】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施形態によるプロセッサの構成例を示す図である。
【図２】命令アドレス及び命令コードの例を示す図である。
【図３】プロセッサの構成例を示す図である。
【符号の説明】
【００３２】
１０１  命令キャッシュメモリ
１０２  命令先読みバッファ
１０３  例外制御部
１０４  ＡＬＵ
１０５  命令選択制御部
１０６〜１０９  セレクタ
１１０  アドレスレジスタ
１１１  デコード部
【図１】
0005233078.tif 000002
【図２】
0005233078.tif 000003
【図３】
0005233078.tif 000004