説明

プロセッサ

【課題】分岐先に分岐すると判定したときに必要となるサイクル数を削減することが可能なプロセッサを提供すること。
【解決手段】命令デコーダ3は、フェッチされた命令コードをデコードする。メモリ/演算制御部5は、命令デコーダ3によるデコード結果に応じて演算を実行する。アドレス制御/書き込みマスク制御部7は、命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御する。したがって、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮することが可能となる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサにおける分岐制御に関し、特に、分岐先に分岐すると判定したときに必要となるサイクル数を削減するように分岐制御を行なうプロセッサに関する。
【背景技術】
【0002】
一般に、プロセッサはパイプライン方式を採用しており、フェッチした命令コードが分岐命令の場合にパイプラインにおいてハザードが発生する可能性がある。ハザードが発生する可能性は、分岐予測をすることによってある程度減らすことができるが、なくすことはできない。
【0003】
図3は、従来のプロセッサにおいて分岐命令を実行したときのパイプライン処理の一例を示す図である。図3(a)は、分岐命令を実行して分岐しないと判定された場合のパイプライン処理の一例を示す図である。
【0004】
図3(a)において、F1〜F4は命令フェッチ(F)ステージにおける命令1〜4の処理を示し、D1〜D4は命令デコード(D)ステージにおける命令1〜4の処理を示し、E1〜E4は演算実行(E)ステージにおける命令1〜4の処理を示し、W1〜W4はライトバック(W)ステージにおける命令1〜4の処理を示している。なお、Eステージにおいて、アドレス計算も実行される。
【0005】
サイクルT1において命令1がフェッチされ、サイクルT2において命令1がデコードされ、サイクルT3において命令1が実行される。サイクルT2〜T3において、命令2および命令3が順次フェッチされ、命令2のデコードが行なわれる。
【0006】
サイクルT4において、命令1の実行によって分岐しないことが決定する。この場合には、サイクルT5以降において、パイプラインに入っている命令2〜命令4の処理がそのまま続行される。
【0007】
図3(b)は、分岐命令を実行して分岐すると判定された場合のパイプライン処理の一例を示す図である。図3(a)と同様に、サイクルT1において命令1がフェッチされ、サイクルT2において命令1がデコードされ、サイクルT3において命令1が実行される。
【0008】
サイクルT4において、命令1の実行によって分岐することが決定する。この場合には、サイクルT5〜T8において、4サイクルのプリフェッチが行なわれる。そして、サイクルT9において、分岐先命令nのフェッチが行なわれる。したがって、すでにパイプラインに入っている命令2〜命令4が破棄される。
【0009】
なお、サイクルT5〜T8でプリフェッチが行なわれるため、それに対応してDステージ、EステージおよびWステージのそれぞれにおいてストールが発生している。
【0010】
これに関連する技術として、下記の特許文献1に開示された発明がある。特許文献1に開示された情報処理装置においては、デコーダを含む第1命令レジスタと第2命令レジスタ、第1分岐命令検出回路と第2分岐命令検出回路とにより、パイプラインのDステージの処理を2つ同時に実行する。第1セレクタは、オペランド用アドレス加算器および命令用アドレス加算器に供給する命令をセレクトし、第2セレクタは、分岐判定回路に供給する条件付分岐命令のマスクフィールドの状態を示す情報をセレクトする。また、第3セレクタは、命令列選択回路および命令用アドレス加算器に供給する分岐命令検出信号をセレクトする。第1セレクタ、第2セレクタおよび第3セレクタは、命令列選択回路の出力により制御される。
【特許文献1】特開平9−274566号公報
【発明の開示】
【発明が解決しようとする課題】
【0011】
図3を用いて説明したように、分岐命令を実行して分岐することが決定した場合、すでにパイプラインに入っている命令を破棄してプリフェッチを行なう必要があるため、大幅なペナルティが発生するといった問題点があった。
【0012】
また、特許文献1に開示された情報処理装置は、分岐命令の次命令からのパイプライン処理と、分岐先命令のパイプライン処理とを同時に実行させるため、分岐命令を含む命令列のパイプラインの処理速度を向上させることができる。しかしながら、2つのパイプライン処理を同時に実行させる必要があるため、回路規模が大きくなるといった問題点があった。
【0013】
本発明は、上記問題点を解決するためになされたものであり、その目的は、分岐先に分岐すると判定したときに必要となるサイクル数を削減することが可能なプロセッサを提供することである。
【課題を解決するための手段】
【0014】
本発明のある局面に従えば、プロセッサは、命令コードをフェッチする命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令コードをデコードする命令デコード手段と、命令デコード手段によるデコード結果に応じて演算を実行する演算実行手段と、命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御する制御手段とを含む。
【0015】
好ましくは、所定値は、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数との和である。
【0016】
好ましくは、制御手段は、分岐命令に続く命令を順次実行するときに、レジスタまたはデータメモリへの演算結果の書き込みをマスクする。
【0017】
さらに好ましくは、制御手段は、分岐命令の次の命令から分岐先命令の前の命令までの演算結果の書き込みをマスクする。
【発明の効果】
【0018】
本発明のある局面によれば、制御手段は、命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御するので、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮することが可能となる。
【0019】
また、所定値が、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数との和であるので、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮できるか否かを容易に判定することが可能となる。
【0020】
また、制御手段は、分岐命令に続く命令を順次実行するときに、レジスタまたはデータメモリへの演算結果の書き込みをマスクするだけであるので、回路規模を増大させずに分岐制御を行なうことが可能となる。
【0021】
また、制御手段は、分岐命令の次の命令から分岐先命令の前の命令までの演算結果の書き込みをマスクするので、不要なデータ書き込みが行なわれるのを防止することが可能となる。
【発明を実施するための最良の形態】
【0022】
図1は、本発明の実施の形態におけるプロセッサの概略構成を示すブロック図である。このプロセッサは、プログラムカウンタ(PC)1と、命令メモリ2と、命令デコーダ3と、レジスタ4と、メモリ/演算制御部5と、データメモリ6と、アドレス制御/書き込みマスク制御部7と、加算器8と、フリップフロップ(FF)9〜11とを含む。
【0023】
命令メモリ2およびデータメモリ6は、SDRAM(Synchronous Dynamic Random Access Memory)、SRAM(Static Random Access Memory)などによって構成され、キャッシュメモリを搭載するようにしてもよい。
【0024】
レジスタ4は、汎用レジスタ、アキュムレータ、スタックポインタなどによって構成される。なお、図示していないが、プロセッサは算術演算、論理演算などを行なう演算器を備えている。メモリ/演算制御部5は、命令デコーダ3のデコード結果に応じて、演算器に演算を行なわせる。この演算器は、アドレス計算にも使用される。
【0025】
FF9〜11は、各ステージ間に設けられ、クロックに同期して前段のステージの内容を次段のステージに転送する、
命令フェッチ(F)ステージにおいて、PC1のアドレスに応じて命令メモリ2から命令コードがフェッチされる。FF9は、フェッチされた命令コードと、PC1のアドレスとを次段の命令デコード(D)ステージに転送する。
【0026】
命令デコード(D)ステージにおいて、命令デコーダ3は、FF9から受けた命令コードをデコードし、デコード結果をFF10に出力する。このとき、命令がレジスタ4の内容を参照する命令であれば、レジスタ4の内容が読み出されてFF10に出力される。FF10は、デコード結果、読み出したレジスタ4の内容およびその命令のアドレスを次段の演算実行(E)ステージに転送する。
【0027】
演算実行(E)ステージにおいて、メモリ/演算制御部5は、FF10から受けたデコード結果およびレジスタ4の内容に応じて演算を実行する。このとき、命令がデータメモリ6の内容を参照する命令であれば、メモリ/演算制御部5はデータメモリ6の内容を読み出す。FF11は、演算結果、読み出したデータメモリ6の内容およびその命令のアドレスを次段のライトバック(W)ステージに転送する。
【0028】
ライトバック(W)ステージにおいて、アドレス制御/書き込みマスク制御部7は、FF11から受けた演算結果に応じて分岐するか否かを判定し、判定結果に応じてアドレス制御を行なう。また、アドレス制御/書き込みマスク制御部7は、FF11から受けた演算結果の書き込み制御を行なう。
【0029】
本実施の形態においては、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数とから、分岐するか否かを判定する値Sを次式によって計算する。
【0030】
S=プリフェッチクロック数+パイプライン段数 …(1)
なお、以下の説明においては、プリフェッチクロック数を4、パイプライン段数を4として説明する。
【0031】
アドレス制御/書き込みマスク制御部7は、分岐すると判定した場合であって、分岐先がPC1の位置から正方向に8以内、すなわち分岐先のアドレス変位量(分岐先アドレス−PC1の値)が8以内であれば、PC1の値が分岐先アドレスとなるまで分岐しない場合と同様の処理を行なう。このとき、アドレス制御/書き込みマスク制御部7は、レジスタ4およびデータメモリ6への書き込みをマスクする。
【0032】
また、アドレス制御/書き込みマスク制御部7は、分岐すると判定した場合であって、分岐先のアドレス変位量が8より大きい、または負の値であれば、図3(b)を用いて説明したのと同様に、分岐先命令をプリフェッチする。
【0033】
なお、次命令をフェッチする場合には、アドレス制御/書き込み制御部7は所定の値を加算器8に出力する。また、分岐先命令をフェッチする場合には、アドレス制御/書き込みマスク制御部7はアドレス変位量を加算器8に出力する。加算器8は、FF11から受けたアドレスとアドレス制御/書き込みマスク制御部7から受けた値とを加算して、PC1に書き込む。
【0034】
図2は、本発明の実施の形態におけるプロセッサのパイプライン処理の一例を示す図である。サイクルT1において命令1がフェッチされ、サイクルT2において命令1がデコードされ、サイクルT3において命令1が実行される。
【0035】
命令1の実行によって分岐することが決定するが、分岐先がF6であり、アドレス変位量が正の値であり8以下であるので、サイクルT4以降において、分岐しない場合と同様の処理を続行するとともに、アドレス制御/書き込みマスク制御部7は、レジスタ4およびデータメモリ6にマスク信号を出力する。
【0036】
サイクルT6において分岐先命令6がフェッチされ、サイクルT7において分岐先命令6がデコードされ、サイクルT8において分岐先命令6が実行される。このサイクルT8において、アドレス制御/書き込みマスク制御部7は、レジスタ4およびデータメモリ6のマスクを解除する。
【0037】
なお、以上の説明においては、分岐するか否かの判定をライトバック(W)ステージで行なうようにした。分岐命令が条件分岐命令の場合には、演算結果に応じて分岐するか否かを判定するため、ライトバック(W)ステージでそれを判定する必要がある。
【0038】
一方、分岐命令が無条件分岐命令の場合には、命令をデコードした時点で分岐することが判定できる。したがって、無条件分岐命令の場合には、命令デコード(D)ステージで分岐することを判定し、分岐先がS以内であるか否かを判定してパイプライン制御を行なうようにしてもよい。
【0039】
以上説明したように、本実施の形態におけるプロセッサによれば、分岐命令の実行によって分岐することが決定した場合でも、分岐先がPC1の位置から正方向にある値以内であれば、レジスタ4およびデータレジスタ6への書き込みをマスクするとともに、分岐しない場合と同様の処理を続行するようにしたので、分岐先命令をプリフェッチする場合と比較して分岐先命令を実行するまでの時間を短縮することが可能となった。
【0040】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【0041】
【図1】本発明の実施の形態におけるプロセッサの概略構成を示すブロック図である。
【図2】本発明の実施の形態におけるプロセッサのパイプライン処理の一例を示す図である。
【図3】従来のプロセッサにおいて分岐命令を実行したときのパイプライン処理の一例を示す図である。
【符号の説明】
【0042】
1 PC、2 命令メモリ、3 命令デコーダ、4 レジスタ、5 メモリ/演算制御部、6 データメモリ、7 アドレス制御/書き込みマスク制御部、8 加算器、9〜11 FF。

【特許請求の範囲】
【請求項1】
命令コードをフェッチする命令フェッチ手段と、
前記命令フェッチ手段によってフェッチされた命令コードをデコードする命令デコード手段と、
前記命令デコード手段によるデコード結果に応じて演算を実行する演算実行手段と、
前記命令コードが分岐命令であり、かつ分岐すると判定した場合に、当該分岐命令から分岐先命令までのアドレスが所定値以内であれば、分岐制御を行なわずに分岐命令に続く命令を順次実行するよう制御する制御手段とを含むプロセッサ。
【請求項2】
前記所定値は、分岐先命令をプリフェッチするときに必要となるクロック数とパイプラインの段数との和である、請求項1記載のプロセッサ。
【請求項3】
前記制御手段は、分岐命令に続く命令を順次実行するときに、レジスタまたはデータメモリへの演算結果の書き込みをマスクする、請求項1または2記載のプロセッサ。
【請求項4】
前記制御手段は、分岐命令の次の命令から分岐先命令の前の命令までの演算結果の書き込みをマスクする、請求項3記載のプロセッサ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate


【公開番号】特開2008−299729(P2008−299729A)
【公開日】平成20年12月11日(2008.12.11)
【国際特許分類】
【出願番号】特願2007−147023(P2007−147023)
【出願日】平成19年6月1日(2007.6.1)
【出願人】(000134109)株式会社デジタル (224)
【Fターム(参考)】