(57)【要約】【課題】分岐先に分岐すると判定したときに必要となるサイクル数を削減することが可能なプロセッサを提供すること。【解決手段】命令デコーダ３は、フェッチされた命令コードをデコードする。メモリ／演算制御部５は、命令デコーダ３によるデコード結果に応じて演算を実行する。アドレス制御／書き込みマスク制御部７は、命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御する。したがって、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮することが可能となる。【選択図】図１
2008299729.tif 000002
【特許請求の範囲】
【請求項１】
命令コードをフェッチする命令フェッチ手段と、
前記命令フェッチ手段によってフェッチされた命令コードをデコードする命令デコード手段と、
前記命令デコード手段によるデコード結果に応じて演算を実行する演算実行手段と、
前記命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御する制御手段とを含むプロセッサ。
【請求項２】
前記所定値は、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数との和である、請求項１記載のプロセッサ。
【請求項３】
前記制御手段は、分岐命令に続く命令を順次実行するときに、レジスタまたはデータメモリへの演算結果の書き込みをマスクする、請求項１または２記載のプロセッサ。
【請求項４】
前記制御手段は、分岐命令の次の命令から分岐先命令の前の命令までの演算結果の書き込みをマスクする、請求項３記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサにおける分岐制御に関し、特に、分岐先に分岐すると判定したときに必要となるサイクル数を削減するように分岐制御を行なうプロセッサに関する。
【背景技術】
【０００２】
一般に、プロセッサはパイプライン方式を採用しており、フェッチした命令コードが分岐命令の場合にパイプラインにおいてハザードが発生する可能性がある。ハザードが発生する可能性は、分岐予測をすることによってある程度減らすことができるが、なくすことはできない。
【０００３】
図３は、従来のプロセッサにおいて分岐命令を実行したときのパイプライン処理の一例を示す図である。図３（ａ）は、分岐命令を実行して分岐しないと判定された場合のパイプライン処理の一例を示す図である。
【０００４】
図３（ａ）において、Ｆ１〜Ｆ４は命令フェッチ（Ｆ）ステージにおける命令１〜４の処理を示し、Ｄ１〜Ｄ４は命令デコード（Ｄ）ステージにおける命令１〜４の処理を示し、Ｅ１〜Ｅ４は演算実行（Ｅ）ステージにおける命令１〜４の処理を示し、Ｗ１〜Ｗ４はライトバック（Ｗ）ステージにおける命令１〜４の処理を示している。なお、Ｅステージにおいて、アドレス計算も実行される。
【０００５】
サイクルＴ１において命令１がフェッチされ、サイクルＴ２において命令１がデコードされ、サイクルＴ３において命令１が実行される。サイクルＴ２〜Ｔ３において、命令２および命令３が順次フェッチされ、命令２のデコードが行なわれる。
【０００６】
サイクルＴ４において、命令１の実行によって分岐しないことが決定する。この場合には、サイクルＴ５以降において、パイプラインに入っている命令２〜命令４の処理がそのまま続行される。
【０００７】
図３（ｂ）は、分岐命令を実行して分岐すると判定された場合のパイプライン処理の一例を示す図である。図３（ａ）と同様に、サイクルＴ１において命令１がフェッチされ、サイクルＴ２において命令１がデコードされ、サイクルＴ３において命令１が実行される。
【０００８】
サイクルＴ４において、命令１の実行によって分岐することが決定する。この場合には、サイクルＴ５〜Ｔ８において、４サイクルのプリフェッチが行なわれる。そして、サイクルＴ９において、分岐先命令ｎのフェッチが行なわれる。したがって、すでにパイプラインに入っている命令２〜命令４が破棄される。
【０００９】
なお、サイクルＴ５〜Ｔ８でプリフェッチが行なわれるため、それに対応してＤステージ、ＥステージおよびＷステージのそれぞれにおいてストールが発生している。
【００１０】
これに関連する技術として、下記の特許文献１に開示された発明がある。特許文献１に開示された情報処理装置においては、デコーダを含む第１命令レジスタと第２命令レジスタ、第１分岐命令検出回路と第２分岐命令検出回路とにより、パイプラインのＤステージの処理を２つ同時に実行する。第１セレクタは、オペランド用アドレス加算器および命令用アドレス加算器に供給する命令をセレクトし、第２セレクタは、分岐判定回路に供給する条件付分岐命令のマスクフィールドの状態を示す情報をセレクトする。また、第３セレクタは、命令列選択回路および命令用アドレス加算器に供給する分岐命令検出信号をセレクトする。第１セレクタ、第２セレクタおよび第３セレクタは、命令列選択回路の出力により制御される。
【特許文献１】特開平９−２７４５６６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
図３を用いて説明したように、分岐命令を実行して分岐することが決定した場合、すでにパイプラインに入っている命令を破棄してプリフェッチを行なう必要があるため、大幅なペナルティが発生するといった問題点があった。
【００１２】
また、特許文献１に開示された情報処理装置は、分岐命令の次命令からのパイプライン処理と、分岐先命令のパイプライン処理とを同時に実行させるため、分岐命令を含む命令列のパイプラインの処理速度を向上させることができる。しかしながら、２つのパイプライン処理を同時に実行させる必要があるため、回路規模が大きくなるといった問題点があった。
【００１３】
本発明は、上記問題点を解決するためになされたものであり、その目的は、分岐先に分岐すると判定したときに必要となるサイクル数を削減することが可能なプロセッサを提供することである。
【課題を解決するための手段】
【００１４】
本発明のある局面に従えば、プロセッサは、命令コードをフェッチする命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令コードをデコードする命令デコード手段と、命令デコード手段によるデコード結果に応じて演算を実行する演算実行手段と、命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御する制御手段とを含む。
【００１５】
好ましくは、所定値は、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数との和である。
【００１６】
好ましくは、制御手段は、分岐命令に続く命令を順次実行するときに、レジスタまたはデータメモリへの演算結果の書き込みをマスクする。
【００１７】
さらに好ましくは、制御手段は、分岐命令の次の命令から分岐先命令の前の命令までの演算結果の書き込みをマスクする。
【発明の効果】
【００１８】
本発明のある局面によれば、制御手段は、命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御するので、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮することが可能となる。
【００１９】
また、所定値が、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数との和であるので、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮できるか否かを容易に判定することが可能となる。
【００２０】
また、制御手段は、分岐命令に続く命令を順次実行するときに、レジスタまたはデータメモリへの演算結果の書き込みをマスクするだけであるので、回路規模を増大させずに分岐制御を行なうことが可能となる。
【００２１】
また、制御手段は、分岐命令の次の命令から分岐先命令の前の命令までの演算結果の書き込みをマスクするので、不要なデータ書き込みが行なわれるのを防止することが可能となる。
【発明を実施するための最良の形態】
【００２２】
図１は、本発明の実施の形態におけるプロセッサの概略構成を示すブロック図である。このプロセッサは、プログラムカウンタ（ＰＣ）１と、命令メモリ２と、命令デコーダ３と、レジスタ４と、メモリ／演算制御部５と、データメモリ６と、アドレス制御／書き込みマスク制御部７と、加算器８と、フリップフロップ（ＦＦ）９〜１１とを含む。
【００２３】
命令メモリ２およびデータメモリ６は、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）などによって構成され、キャッシュメモリを搭載するようにしてもよい。
【００２４】
レジスタ４は、汎用レジスタ、アキュムレータ、スタックポインタなどによって構成される。なお、図示していないが、プロセッサは算術演算、論理演算などを行なう演算器を備えている。メモリ／演算制御部５は、命令デコーダ３のデコード結果に応じて、演算器に演算を行なわせる。この演算器は、アドレス計算にも使用される。
【００２５】
ＦＦ９〜１１は、各ステージ間に設けられ、クロックに同期して前段のステージの内容を次段のステージに転送する、
命令フェッチ（Ｆ）ステージにおいて、ＰＣ１のアドレスに応じて命令メモリ２から命令コードがフェッチされる。ＦＦ９は、フェッチされた命令コードと、ＰＣ１のアドレスとを次段の命令デコード（Ｄ）ステージに転送する。
【００２６】
命令デコード（Ｄ）ステージにおいて、命令デコーダ３は、ＦＦ９から受けた命令コードをデコードし、デコード結果をＦＦ１０に出力する。このとき、命令がレジスタ４の内容を参照する命令であれば、レジスタ４の内容が読み出されてＦＦ１０に出力される。ＦＦ１０は、デコード結果、読み出したレジスタ４の内容およびその命令のアドレスを次段の演算実行（Ｅ）ステージに転送する。
【００２７】
演算実行（Ｅ）ステージにおいて、メモリ／演算制御部５は、ＦＦ１０から受けたデコード結果およびレジスタ４の内容に応じて演算を実行する。このとき、命令がデータメモリ６の内容を参照する命令であれば、メモリ／演算制御部５はデータメモリ６の内容を読み出す。ＦＦ１１は、演算結果、読み出したデータメモリ６の内容およびその命令のアドレスを次段のライトバック（Ｗ）ステージに転送する。
【００２８】
ライトバック（Ｗ）ステージにおいて、アドレス制御／書き込みマスク制御部７は、ＦＦ１１から受けた演算結果に応じて分岐するか否かを判定し、判定結果に応じてアドレス制御を行なう。また、アドレス制御／書き込みマスク制御部７は、ＦＦ１１から受けた演算結果の書き込み制御を行なう。
【００２９】
本実施の形態においては、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数とから、分岐するか否かを判定する値Ｓを次式によって計算する。
【００３０】
Ｓ＝プリフェッチクロック数＋パイプライン段数  …（１）
なお、以下の説明においては、プリフェッチクロック数を４、パイプライン段数を４として説明する。
【００３１】
アドレス制御／書き込みマスク制御部７は、分岐すると判定した場合であって、分岐先がＰＣ１の位置から正方向に８以内、すなわち分岐先のアドレス変位量（分岐先アドレス−ＰＣ１の値）が８以内であれば、ＰＣ１の値が分岐先アドレスとなるまで分岐しない場合と同様の処理を行なう。このとき、アドレス制御／書き込みマスク制御部７は、レジスタ４およびデータメモリ６への書き込みをマスクする。
【００３２】
また、アドレス制御／書き込みマスク制御部７は、分岐すると判定した場合であって、分岐先のアドレス変位量が８より大きい、または負の値であれば、図３（ｂ）を用いて説明したのと同様に、分岐先命令をプリフェッチする。
【００３３】
なお、次命令をフェッチする場合には、アドレス制御／書き込み制御部７は所定の値を加算器８に出力する。また、分岐先命令をフェッチする場合には、アドレス制御／書き込みマスク制御部７はアドレス変位量を加算器８に出力する。加算器８は、ＦＦ１１から受けたアドレスとアドレス制御／書き込みマスク制御部７から受けた値とを加算して、ＰＣ１に書き込む。
【００３４】
図２は、本発明の実施の形態におけるプロセッサのパイプライン処理の一例を示す図である。サイクルＴ１において命令１がフェッチされ、サイクルＴ２において命令１がデコードされ、サイクルＴ３において命令１が実行される。
【００３５】
命令１の実行によって分岐することが決定するが、分岐先がＦ６であり、アドレス変位量が正の値であり８以下であるので、サイクルＴ４以降において、分岐しない場合と同様の処理を続行するとともに、アドレス制御／書き込みマスク制御部７は、レジスタ４およびデータメモリ６にマスク信号を出力する。
【００３６】
サイクルＴ６において分岐先命令６がフェッチされ、サイクルＴ７において分岐先命令６がデコードされ、サイクルＴ８において分岐先命令６が実行される。このサイクルＴ８において、アドレス制御／書き込みマスク制御部７は、レジスタ４およびデータメモリ６のマスクを解除する。
【００３７】
なお、以上の説明においては、分岐するか否かの判定をライトバック（Ｗ）ステージで行なうようにした。分岐命令が条件分岐命令の場合には、演算結果に応じて分岐するか否かを判定するため、ライトバック（Ｗ）ステージでそれを判定する必要がある。
【００３８】
一方、分岐命令が無条件分岐命令の場合には、命令をデコードした時点で分岐することが判定できる。したがって、無条件分岐命令の場合には、命令デコード（Ｄ）ステージで分岐することを判定し、分岐先がＳ以内であるか否かを判定してパイプライン制御を行なうようにしてもよい。
【００３９】
以上説明したように、本実施の形態におけるプロセッサによれば、分岐命令の実行によって分岐することが決定した場合でも、分岐先がＰＣ１の位置から正方向にある値以内であれば、レジスタ４およびデータレジスタ６への書き込みをマスクするとともに、分岐しない場合と同様の処理を続行するようにしたので、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮することが可能となった。
【００４０】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００４１】
【図１】本発明の実施の形態におけるプロセッサの概略構成を示すブロック図である。
【図２】本発明の実施の形態におけるプロセッサのパイプライン処理の一例を示す図である。
【図３】従来のプロセッサにおいて分岐命令を実行したときのパイプライン処理の一例を示す図である。
【符号の説明】
【００４２】
１  ＰＣ、２  命令メモリ、３  命令デコーダ、４  レジスタ、５  メモリ／演算制御部、６  データメモリ、７  アドレス制御／書き込みマスク制御部、８  加算器、９〜１１  ＦＦ。
【図１】
2008299729.tif 000003
【図２】
2008299729.tif 000004
【図３】
2008299729.tif 000005