(57)【特許請求の範囲】
【請求項１】
演算結果の正規化の際に前記演算結果についてのスティッキービットの生成を行なう演算処理装置において、
前記演算結果を出力する演算手段と、
前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、
前記複数のシフト手段に含まれる複数段のシフト部に対する複数のシフト量を算出するシフト量算出手段と、
前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行されるか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段と、
前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成手段とを有することを特徴とする演算処理装置。
【請求項２】
演算結果の正規化の際に前記演算結果についてのスティッキービットを用いて演算結果の丸め処理を行なう演算処理装置において、
前記演算結果を出力する演算手段と、
前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、
前記複数のシフト手段に含まれる複数段のシフト部に対する複数のシフト量を算出するシフト量算出手段と、
前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行されるか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段と、
前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成手段と、
前記スティッキービットを用いて前記丸め処理を行なうか否かの判定結果を出力する丸め判定手段と、
前記演算結果に所定値を加算する増分手段と、
前記判定結果を用いて、前記演算結果と前記増分手段の出力とのいずれかを選択する選択手段とを有することを特徴とする演算処理装置。
【請求項３】
演算結果の正規化の際に前記演算結果についてのスティッキービットを用いて演算結果の丸め処理を行なう演算処理装置により演算を行なう情報処理装置において、
前記演算結果を出力する演算手段と、
前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、
前記複数のシフト手段に含まれる複数段のシフト部に対する複数のシフト量を算出するシフト量算出手段と、
前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行されるか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段と、
前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成手段とを有する演算処理装置により演算を行なうことを特徴とする情報処理装置。
【請求項４】
前記演算処理装置はさらに、
前記スティッキービットを用いて前記丸め処理を行なうか否かの判定結果を出力する丸め判定手段と、
前記演算結果に所定値を加算する増分手段と、
前記判定結果を用いて、前記演算結果と前記増分手段の出力とのいずれかを選択する選択手段とを有することを特徴とする請求項３記載の情報処理装置。
【請求項５】
演算結果の正規化の際に前記演算結果についてのスティッキービットを用いて演算結果の丸め処理を行なう演算処理方法において、
演算手段が前記演算を行なうステップと、
複数のシフト処理ステップにおいて用いる複数のシフト量を算出するシフト量算出手段が前記複数のシフト処理を算出するシフト量算出ステップと、
前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を複数のシフト処理ステップに分割して行なう正規化処理手段が、前記シフト量を用いて正規化処理を行なう正規化処理ステップと、
前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行するか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段が前記仮スティッキービットを算出する論理和算出ステップと、
前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成ステップとを有することを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置の浮動小数点積和演算器（FMA：Floating-point Multiply Adder）において、スティッキービット（Sticky bit）を用いて演算結果の丸め処理を行なう技術に関し、特に、演算結果の丸め処理における正規化シフト量を所定ビット（例えば１ビット）の誤差以内で求める予測論理を使用する場合にスティッキービットを効率良く求めるための技術に関する。
【背景技術】
【０００２】
従来から、浮動小数点積和演算器（FMA：Floating-point Multiply Adder）は、例えば図１２に示すごとく構成される。この図１２に示す浮動小数点積和演算器１００は、右シフト部（Aligner（Right Shifter））１０，乗算器（CSA(Carry Save Adder) Tree）１１，ＣＳＡ（Carry Save Adder）１２，絶対値加算器（Abs. Adder）１３，シフト量算出部（L. Z. Predictor（Leading Zero Predictor））２０，正規化処理部（Normalizer（Left Shifter））３００，及び丸め処理部（Rounder）４００をそなえて構成されている。
【０００３】
なお、浮動小数点積和演算器１００は、例えばＩＥＥＥ（The Institute of Electrical and Electronics Engineers, Inc.；米国電子技術者協会）７５４準拠の単精度演算と倍精度演算とをサポートする。
右シフト部１０，乗算器１１，ＣＳＡ１２及び絶対値加算器１３は、３オペランド（図中“OP1”，“OP2”，“OP3”）の浮動小数点積和演算を実行する積和演算部として機能するものである。
【０００４】
シフト量算出部２０は、絶対値加算器１３からの出力データ（演算結果；後述する図１３参照）の先頭からどれだけ“０”が連続しているかを求めるものであり、この結果が正規化処理部３００に入力されるシフト量（Shift Amount）となる。つまり、シフト量算出部２０は、正規化処理部３００による左シフト処理（正規化処理）に用いる正規化シフト量を算出する。
【０００５】
ここで、浮動小数点積和演算器１００では、高速化のために、絶対値加算器１３による処理と並行して、シフト量算出部２０が正規化シフト量を算出するように構成されており、シフト量算出部２０は、絶対値加算器１３の出力データではなく、前段のＣＳＡ１２の出力データ（すなわち、絶対値加算器１３の入力データ）を用いて正規化シフト量を算出する。なお、シフト量算出部２０によって算出された正規化シフト量は、ここでは７ビットで表わされるデータで正規化処理部３００に出力される。
【０００６】
さらに、このようなシフト量算出部２０では、算出する正規化シフト量が１ビット不足する場合がある。
正規化処理部３００は、シフト量算出部２０によって算出された正規化シフト量を用いて絶対値加算器１３の出力データ（以下、演算結果という）に対してシフト処理を施すものであり、正規化処理部３００によって演算結果の所定ビット位置が必ず“１”になる。
【０００７】
丸め処理部４００は、正規化処理部３００によって正規化処理を施された演算結果に対して丸め処理を行なうものであり、丸め処理部４００は丸め処理に必要なスティッキービットを自身で生成する。つまり、丸め処理部４００は、本浮動小数点積和演算器１００の出力データとしての演算結果の仮数部（後述する図１４，図１５参照）の精度を向上すべく、演算結果において仮数部以外の切り捨てられる領域（スティッキービット生成領域；後述する図１４，図１５参照）に“１”がある場合には、当該仮数部に“１”を加える丸め処理を施す。
【０００８】
ここで、図１３に示すごとく、絶対値加算器１３の出力データである演算結果は、例えば１２８ビット長データ（“０”もしくは“１”のデータ）からなり、Ｃ＜１２７：０＞で表わされる。なお、Ｃ＜１２７：１２５＞は固定値“０００”となる。
そして、浮動小数点積和演算器１００が単精度演算をサポートする場合には、正規化処理部３００によって正規化処理を施された正規化処理部３００からの出力データ（Ｒ＜１２７：０＞）は、図１４に示すごとく構成される。
【０００９】
つまり、１２８ビットの演算結果（Ｒ＜１２７：０＞）のうち、最上位から４ビットのＲ＜１２７：１２４＞は固定値のフィールドであり、Ｒ＜１２３：１０１＞の２３ビットが仮数部であり、さらに、その後段のＲ＜１００＞がＧ（guard）ビット、Ｒ＜９９＞がＲ（round）ビットであり、残りのＲ＜９８：０＞の９９ビットがスティッキービットの生成対象範囲となるスティッキービット生成領域となる。
【００１０】
また、浮動小数点積和演算器１００が倍精度演算をサポートする場合には、正規化処理部３００によって正規化処理を施された正規化処理部３００からの出力データ（Ｒ＜１２７：０＞）は図１５に示すごとく構成される。
つまり、１２８ビットの演算結果のうち、最上位から４ビットのＲ＜１２７：１２４＞は固定値のフィールドであり、Ｒ＜１２３：７２＞の５２ビットが仮数部であり、さらに、その後段のＲ＜７１＞がＧ（guard）ビット、Ｒ＜７０＞がＲ（round）ビットであり、残りのＲ＜６９：０＞の７０ビットがスティッキービットの生成対象範囲となるスティッキービット生成領域となる。
【００１１】
なお、図１４，図１５に示す単精度演算及び倍精度演算それぞれの場合において、Ｒ＜１２７：１２４＞は固定値のフィールドで“００００”のままであるが、正規化処理部３００による正規化処理によって、Ｒ＜１２４＞が必ず“１”になる。
図１６に正規化処理部３００及び丸め処理部４００の構成を示す。この図１６に示すように、正規化処理部３００は、複数段のシフタ３１〜３５、つまり、第１シフト部（1st left shifter）３１，第２シフト部（2nd left shifter）３２，第３シフト部（3rd left shifter）３３，第４シフト部（4th left shifter）３４，及び１ビットシフト部（1bit left shifter）３５をそなえて構成されている。
【００１２】
第１〜第４シフト部３１〜３４は、シフト量算出部２０によって７ビット長のデータとして算出された正規化シフト量ＳＡ＜６：０＞（ＳＡ：Shift Amount）を用いて演算結果に正規化処理（左シフト）を行なう。
図１３に示したように、入力データ（演算結果）が１２８ビットのデータであるため、第１〜第４シフト部３１〜３４によるシフト量（つまり、シフト量算出部２０によって算出される正規化シフト量）は、最大で１２７ビットとなる。そのため、ここでは、第１シフト部３１は正規化シフト量として、７ビット長データのうち１ビットのデータに基づいて、６４ビット又は０ビットのシフトを行なうことができ、第２シフト部３２は７ビット長データのうち２ビットのデータに基づいて、４８，３２，１６，０のいずれかのビットのシフトを行なうことができ、第３シフト部３３は７ビット長データのうち２ビットのデータに基づいて、１２，８，４，０のいずれかのビットのシフトを行なうことができ、第４シフト部３４は７ビット長データのうち２ビットのデータに基づいて、３，２，１，０のいずれかのビットのシフトを行なうことができる。
【００１３】
１ビットシフト部３５は、第４シフト部３４による正規化処理の結果、所定のビット位置（ここではＲ＜１２４＞）が“１”になるようにシフトされているか否かを判断し、所定のビット位置が“１”でなければ、シフト量算出部２０によって算出された正規化シフト量が１ビット不足していたものとして、第４シフト部３４によって正規化処理を施された演算結果に対してさらに１ビットの左シフト処理を施す。その結果、かかる所定のビット位置のデータは“１”になる。
【００１４】
つまり、１ビットシフト部３５は、第４シフト部３４の出力データの所定ビット位置が“０”であるか“１”であるかを判断し、“１”である場合にはシフト処理を実行しない。一方、シフト量算出部２０によって算出された正規化シフト量が１ビット不足しているために所定ビット位置が“０”である場合には、正規化処理を完了すべく、所定ビット位置が“１”になるように、第４シフト部３４の出力データを１ビットだけシフトする。
【００１５】
また、図１６に示すごとく、丸め処理部４００は、インクリメンタ（Incrementer）４１，スティッキービット生成部４２，丸め判定部（Judge Round）４３，及び選択回路４４から構成される。
インクリメンタ４１は、正規化処理部３００によって正規化処理を施された演算結果のうちの、仮数部（単精度演算の場合はＲ＜１２３：１０１＞，倍精度演算の場合はＲ＜１２３：７２＞）に“１”を加える丸め処理を行なう。
【００１６】
スティッキービット生成部４２は、インクリメンタ４１によって丸め処理を施された演算結果を最終的に出力するか否かを丸め判定部４３が判断するのに用いるスティッキービットを生成する。スティッキービット生成部４２は、スティッキービット生成領域に“１”のデータが含まれているか否かを、スティッキービット生成領域のすべてのデータに対して論理和演算を行なうことにより判断し、スティッキービット生成領域に少なくとも一つ“１”が含まれる場合にはスティッキービットを“１”に設定する。
【００１７】
したがって、単精度演算の場合には、スティッキービット生成部４２はＲ＜９８：０＞の９９ビットのデータの論理和演算を行なうことによって、このスティッキービット生成領域に“１”が存在するか否かを判断してスティッキービットを生成する。また、倍精度演算の場合には、スティッキービット生成部４２はＲ＜６９：０＞の７０ビットのデータの論理和演算を行なうことによってスティッキービットを生成する。
【００１８】
丸め判定部４３は、スティッキービット生成部４２によって生成されたスティッキービット，演算結果における仮数部の最下位ビットであるＬ（Least significant bit）ビット，Ｇ（Guard）ビット，Ｒ（Round）ビット（図１４，図１５参照）とともに、外部から入力されるＲＤ（Round Direction）ビット及びＳＩＧＮビットに基づいて、丸め処理が必要であるか否かを判断する。そして、丸め判定部４３は、かかる判定の結果を選択回路４４に出力する。
【００１９】
選択回路４４は、丸め判定部４３による判定結果に基づいて、インクリメンタ４１を介して入力される丸め処理を施された演算結果と、正規化処理部３００から出力されたままの演算結果とのいずれか一方を出力するものである。
つまり、選択回路４４は、丸め判定部４３による判定結果が丸め処理が必要であると判断された場合には、インクリメンタ４１によって丸め処理を施された演算結果を出力する一方、丸め判定部４３による判定結果が丸め処理が不要であると判断された場合には、正規化処理部３００から出力されたままの丸め処理が施されていない演算結果を出力する。
【００２０】
また、従来から、正規化処理前の積和演算結果の仮数部を、正規化シフト量に基づいて生成されたマスクデータを用いてマスクすることによってスティッキービットを生成する技術がある（例えば、下記特許文献１参照）。
【特許文献１】特開平８−２１２１９２号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
しかしながら、図１２に示す従来の浮動小数点積和演算器１００では、スティッキービット生成部４２がスティッキービットを生成するために最大（単精度演算の場合）で９９ビット長のデータの論理和演算を必要がある。これは５６ビット長のデータをＡＮＤ回路で処理する場合と同程度のディレイである５６ビットのインクリメンタ４１よりもディレイが大きい。
【００２２】
さらに、浮動小数点積和演算器１００では、正規化処理部３００によって演算結果に正規化処理を施し、次いでスティッキービット生成部４２がスティッキービットを生成した後にさらに丸め判定部４３が丸め判定を行なうことによりデータを選択するので、正規化処理部３００からデータが出力されてから丸め処理部４００（すなわち浮動小数点積和演算器１００）からデータが出力されるまで、ディレイが厳しい結果となる。
【００２３】
また、近年では、浮動小数点積和演算器１００が搭載される中央処理装置の周波数は２ＧＨｚを大きく超えている。このような２ＧＨｚ以上の周波数になると、サイクルタイムが非常に短いため，１２８ビット幅のシフト部（Left Shifter）以上のディレイ時間が要求される正規化処理を、正規化処理部３００において１サイクルで実行するのは困難である。まして丸め処理部４００の処理も同じサイクルタイムで実行するのは困難である。したがって、図１７に破線Ｙで示すごとく、正規化処理部３００による処理と丸め処理部４００による処理との間でパイプラインステージを分割するのが一般的である。なお、図１７に示す例は、単精度演算をサポートする場合であり、破線Ｘで示すごとく、第１シフト部３１による処理と第２シフト部３２による処理の間でパイプラインステージが切られ、また、破線Ｚで示すごとく、選択回路４４からの出力後もパイプラインステージが切られている。
【００２４】
この図１７に示すように、パイプラインステージを分割する場合には、パイプラインステージを切ったところでデータをラッチ（Latch）する必要があり、正規化処理部３００による処理と丸め処理部４００による処理との境界では、１２８ビットのデータをラッチすることになる。つまり、このステージングラッチでは、スティッキービット生成部４２がスティッキービットを生成するためだけに使用するスティッキービット生成領域の９９ビットのデータ（Ｒ＜９８：０＞）をラッチしなくてはならず、かかるステージングラッチのための配置・配線（物量）が膨大になってしまう。なお、倍精度演算をサポートする場合でも、スティッキービットを生成するためだけに、スティッキービット生成領域の７０ビット幅のデータ（Ｒ＜６９：０＞）をラッチしなくてはならない。
【００２５】
また、上記特許文献１に開示されている技術では、シフト量算出部（最上位桁検出部）によって算出された正規化シフト量が１ビット不足する場合に対応するために、正規化シフト量が１ビット不足していない場合のマスクと、正規化シフト量が１ビット不足している場合のマスクとの２種類のマスクを作成する必要がある。
そして、（１）正規化処理の結果を見て正規化シフト量が１ビット不足しているか否かを判断し、上記の２種類のマスクのいずれか一方を採用する方法、又は、（２）上記の２種類のマスクのそれぞれを用いた処理結果を用意しておき、正規化処理の結果に基づいていずれか一方の処理結果を選択する方法のいずれか一方の方法を採用する必要がある。
【００２６】
しかしながら、上記（１）の方法を採用した場合には、ディレイが非常に大きいものになってしまう。また、上記（２）の方法を採用した場合には、マスク処理や論理和演算処理のためのハードウェア資源（物量）が増大してしまう。
本発明は、このような課題に鑑み創案されたもので、スティッキービットを生成するためのハードウェア資源を低減しながら、スティッキービットを生成するために必要となるサイクルタイムを削減して、スティッキービットを効率良く生成できるようにすることを目的とする。
【課題を解決するための手段】
【００２７】
本発明における演算処理装置は、演算結果の正規化の際に前記演算結果についてのスティッキービットの生成を行なう演算処理装置において、前記演算結果を出力する演算手段と、前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、前記複数のシフト手段に含まれる複数段のシフト部に対する複数のシフト量を算出するシフト量算出手段と、前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行されるか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段と、前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成手段とを有することを特徴とする演算処理装置であることを特徴とする。
【００２８】
また、本発明における演算処理装置は、演算結果の正規化の際に前記演算結果についてのスティッキービットを用いて演算結果の丸め処理を行なう演算処理装置において、前記演算結果を出力する演算手段と、前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、前記複数のシフト手段に含まれる複数段のシフト部に対する複数のシフト量を算出するシフト量算出手段と、前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行されるか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段と、前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成手段と、前記スティッキービットを用いて前記丸め処理を行なうか否かの判定結果を出力する丸め判定手段と、前記演算結果に所定値を加算する増分手段と、前記判定結果を用いて、前記演算結果と前記増分手段の出力とのいずれかを選択する選択手段とを有することを特徴とする。
【００２９】
さらに、本発明における演算処理装置は、演算結果の正規化の際に前記演算結果についてのスティッキービットを用いて演算結果の丸め処理を行なう演算処理装置により演算を行なう情報処理装置において、前記演算結果を出力する演算手段と、前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、前記複数のシフト手段に含まれる複数段のシフト部に対する複数のシフト量を算出するシフト量算出手段と、前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行されるか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段と、前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成手段とを有する演算処理装置により演算を行なうことを特徴とする情報処理装置であることを特徴とする。
【００３０】
また、前記演算処理装置はさらに、前記スティッキービットを用いて前記丸め処理を行なうか否かの判定結果を出力する丸め判定手段と、前記演算結果に所定値を加算する増分手段と、前記判定結果を用いて、前記演算結果と前記増分手段の出力とのいずれかを選択する選択手段とを有していてもよい。
さらに、本発明における演算処理方法は、演算結果の正規化の際に前記演算結果についてのスティッキービットを用いて演算結果の丸め処理を行なう演算処理方法において、演算手段が前記演算を行なうステップと、複数のシフト処理ステップにおいて用いる複数のシフト量を算出するシフト量算出手段が前記複数のシフト処理を算出するシフト量算出ステップと、前記演算結果に対する正規化シフトを行なう複数段のシフト部と、前記シフト部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とを有する複数のシフト手段を有し、前記演算結果に対する正規化処理を複数のシフト処理ステップに分割して行なう正規化処理手段が、前記シフト量を用いて正規化処理を行なう正規化処理ステップと、前記正規化処理手段による正規化処理と並行しながら、前記演算結果における最下位から所定のビット数の第１領域内のデータが、前記正規化処理手段による正規化処理によって、正規化処理されたデータについてのスティッキービットを生成するための判断対象となるデータ領域であるスティッキービット生成領域内に移行するか否かを前記シフト量算出手段からの前記複数のシフト量を用いて予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出手段が前記仮スティッキービットを算出する論理和算出ステップと、前記正規化処理手段によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域の範囲と同範囲の領域を除いた領域である第２領域内のデータと、前記論理和算出手段によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成ステップとを有することを特徴とする。
【発明の効果】
【００３１】
このように、本発明によれば、論理和算出部が正規化処理部による正規化処理と並行して、仮スティッキービットを算出し、生成部がこの仮スティッキービットと、正規化処理部によって正規化処理を施された演算結果のうちスティッキービット生成領域の一部のデータとに基づいてスティッキービットの生成を行なうため、正規化処理後にスティッキービット生成領域にかかるすべてのデータについて論理和を算出する必要がなく、ディレイの増大を防止して効率良くスティッキービットを生成することができる。
【００３２】
具体的には従来の方式では、９９入力が必要であった論理和回路を５入力の論理和回路にすることが可能であり、演算ディレイ及びパイプラン段数を大幅に削減しクロック周波数の向上に貢献することが可能となる。
また、正規化処理部による正規化処理と丸め処理部による処理との間のパイプラインステージを分割した場合には、正規化処理と並行してスティッキービットを生成しているので、演算結果すべてをラッチする必要はなく、演算結果からスティッキービット生成領域を除いた領域をラッチするだけで良いため、係るラッチのためのステージングラッチや配置配線にかかるハードウェア資源を低減することができる。具体的には、従来の方式では単精度演算及び倍制度演算のために１２８ビットのデータ幅が必要であったラッチを６０ビット幅にすることが可能となり、配置配線等の物理量を大幅に削減することが可能となる。
【００３３】
さらに、スティッキービット生成部の処理対象領域である第２領域に、正規化シフト量の不足分の正規化処理を施す１ビットシフト部によって処理が施されうる領域が含まれているため、シフト量算出部によって算出された正規化シフト量が所定ビット不足しているか否かにより、それぞれに対応する専用のハードウェアを用意する必要がなく、正規化シフト量が不足している場合にも関わらずスティッキービットを確実に生成することができる。
【００３４】
したがって、上述した特許文献１に開示された技術のように、正規化シフト量が所定ビット不足した場合と、不足しない場合との両方の場合に対応するために、ディレイ増加や物量増加を招くことがない。
従って、従来のように演算結果の正規化処理後にスティッキービットの生成処理を行う方式よりも、本方式は物理量の大幅削減を可能とし、演算ディレイ及びパイプラン段数を大幅に削減することができるという特有の効果を有する。
【発明を実施するための最良の形態】
【００３５】
以下、図面を参照しながら本発明の実施の形態について説明する。
〔１〕本発明の単精度演算における実施形態について
まず、図１に示すブロック図を参照しながら、本発明の一実施形態としての浮動小数点積和演算器の構成について説明する。なお、図１において記述の符号と同一の符号は同一の部分もしくは略同一の部分を示している。したがって、ここではこれらの詳細な説明は一部省略する。
【００３６】
この図１に示すように、本浮動小数点積和演算器１は、右シフト部（Aligner（Right Shifter））１０，乗算器（Multiplier（CSA(Carry Save Adder) Tree））１１，ＣＳＡ（Carry Save Adder）１２，絶対値加算器（Abs. Adder）１３，シフト量算出部（L. Z. Predictor（Leading Zero Predictor）；シフト量算出手段）２０，正規化処理部（Normalizer（Left Shifter）；正規化処理手段）３０，丸め処理部（Rounder）４０，及びスティッキービット生成部（Sticky bit Generator）５０をそなえて構成されている。
【００３７】
なお、本浮動小数点積和演算器１は、例えばＩＥＥＥ（The Institute of Electrical and Electronics Engineers, Inc.；米国電子技術者協会）７５４準拠の単精度演算をサポートする。
また、絶対値加算器１３からの出力データ（演算結果；正規化処理部３０の入力データフォーマット）は上記図１３に示したもの（Ｃ＜１２７：０＞）と同様であり、本浮動小数点積和演算器１が単精度演算をサポートする場合のデータ構造（正規化処理部３０の出力データフォーマット）は上記図１４に示したもの（Ｒ＜１２７：０＞）と同様である。したがって、以下の説明においても、演算結果（入力データフォーマット）や出力データ（出力データフォーマット）については上記図１３〜図１５を用いて説明する。
【００３８】
右シフト部１０，乗算器１１，ＣＳＡ１２及び絶対値加算器１３は、３オペランド（図中“OP1”，“OP2”，“OP3”）の浮動小数点積和演算を実行する積和演算部として機能するものである。なお、この積和演算部の演算結果（すなわち、絶対値加算器１３の出力データ）は、上記図１３に示すようにＣ＜１２７：０＞で表わされる。
シフト量算出部２０は、絶対値加算器１３からの出力データ（演算結果）の先頭からどれだけ“０”が連続しているかを予測するものであり、この結果が正規化処理部３０のシフト量（Shift Amount）となる。つまり、シフト量算出部２０は、正規化処理部３０による左シフト処理（正規化処理）に用いる、演算結果に対する正規化シフト量を算出する。なお、シフト量算出部２０によって算出される正規化シフト量は１ビット不足する場合がある。
【００３９】
正規化処理部３０は、シフト量算出部２０によって算出された正規化シフト量を用いて絶対値加算器１３の出力データ（以下、演算結果という）に対して左シフト処理（正規化処理）を施すものであり、正規化処理部３０によって演算結果の所定ビット位置（ここではＲ＜１２４＞）が必ず“１”になる。
ここで、図２に本浮動小数点積和演算器１の正規化処理部３０，丸め処理部４０，及びスティッキービット生成部５０の構成を示す。この図２に示すごとく、正規化処理部３０は、複数段のシフタ３１〜３５、つまり、第１シフト部（1st left shifter）３１，第２シフト部（2nd left shifter）３２，第３シフト部（3rd left shifter）３３，第４シフト部（4th left shifter）３４，及び１ビットシフト部（1bit left shifter（第２処理部））３５をそなえて構成されている。
【００４０】
第１〜第４シフト部３１〜３４は、シフト量算出部２０によって算出された正規化シフト量（７ビットのデータ：ＳＡ＜６：０＞）を用いて演算結果に正規化処理（左シフト）を行なう第１処理部として機能する。
ここで、演算結果は１２８ビットのデータであるため、第１〜第４シフト部３１〜３４によるシフト量（つまり、シフト量算出部２０によって算出される正規化シフト量）は、最大で１２７ビットとなる。そのため、ここでは、第１シフト部３１は正規化シフト量である７ビット長データＳＡ＜６：０＞のうちＳＡ＜６＞に基づいて、６４ビットもしくは０ビットのシフトを行なうことができ、第２シフト部３２はＳＡ＜６：０＞のうちＳＡ＜５：４＞に基づいて、４８，３２，１６，０のいずれかのビットのシフトを行なうことができ、第３シフト部３３はＳＡ＜６：０＞のうちＳＡ＜３：２＞に基づいて、１２，８，４，０のいずれかのビットのシフトを行なうことができ、第４シフト部３４はＳＡ＜６：０＞のうちＳＡ＜１：０＞に基づいて、３，２，１，０のいずれかのビットのシフトを行なうことができる。
【００４１】
なお、上述のごとく、７ビット長のデータで出力される正規化シフト量のうち、第１シフト部３１には正規化シフト量が６４ビット以上であるか否か、つまり、第１シフト部３１が６４ビットのシフト処理を実行するか否かを示す１ビットのデータ（ＳＡ＜６＞）が入力され、ＳＡ＜６＞が“１”の場合は６４ビットのシフトを実行し、ＳＡ＜６＞が“０”の場合はシフトを実行しない。
【００４２】
また、第２シフト部３２〜第４シフト部３４に入力される正規化シフト量がＳＡ＜５：０＞で表わされる場合、第２シフト部３２はＳＡ＜５：４＞に基づいて正規化処理を実行する。ここでは、第２シフト部３２は、ＳＡ＜５：４＞が“１１”の場合は４８ビットのシフトを実行し、ＳＡ＜５：４＞が“１０”の場合は３２ビットのシフトを実行し、ＳＡ＜５：４＞が“０１”の場合は１６ビットのシフトを実行し、ＳＡ＜５：４＞が００“００”の場合はシフトを実行しない。
【００４３】
また、これと同様に、第３シフト部３３は、ＳＡ＜３：２＞が“１１”の場合は１２ビットのシフトを実行し、ＳＡ＜３：２＞が“１０”の場合は８ビットのシフトを実行し、ＳＡ＜３：２＞が“０１”の場合は４ビットのシフトを実行し、ＳＡ＜３：２＞が“００”の場合はシフトを実行しない。
また、これと同様に、第４シフト部３４は、ＳＡ＜１：０＞が“１１”の場合は３ビットのシフトを実行し、ＳＡ＜１：０＞が“１０”の場合は２ビットのシフトを実行し、ＳＡ＜１：０＞が“０１”の場合は１ビットのシフトを実行し、ＳＡ＜１：０＞が“００”の場合はシフトを実行しない。
【００４４】
１ビットシフト部３５は、第４シフト部３４による正規化シフト量に基づく正規化処理の結果、所定のビット位置Ｒ＜１２４＞が“１”になるようにシフトされているか否か（正規化シフト量が不足しているか否か）を判断し、所定のビット位置が“１”でなければ、シフト量算出部２０によって算出された正規化シフト量が１ビット不足していたものとして、第４シフト部３４によって正規化処理を施された演算結果に対してさらに１ビットのシフト処理を施す。その結果、かかる所定のビット位置のデータは“１”になる。
【００４５】
つまり、１ビットシフト部３５は、第４シフト部３４の出力データの所定ビット位置が“０”であるか“１”であるかを判断し、“１”である場合にはシフト処理を実行しない。
一方、シフト量算出部２０によって算出された正規化シフト量が１ビット不足しているために所定ビット位置が“０”である場合には、正規化処理を完了すべく（すなわち、所定ビット位置を“１”にすべく）、第４シフト部３４の出力データを１ビットだけシフトする。
【００４６】
なお、本浮動小数点積和演算器１では、スティッキービット生成部５０が正規化処理部３０による正規化処理と並行しながらスティッキービットを生成するため、正規化処理部３０は丸め処理部４０に対して正規化処理を施した演算結果の全ビットではなく、かかる演算結果のうち、スティッキービット生成領域を除いた部分を丸め処理部４０に出力する。換言すると、丸め処理部４０には、単精度演算の場合にはＲ＜１２７：９９＞の２９ビット長のデータが丸め処理部４０に入力される。
【００４７】
また、図２に示すごとく、スティッキービット生成部５０は、正規化処理部３０による正規化処理と並行してスティッキービットを生成するものであり、論理和算出部（Sticky bit Predictor；予測手段）５１及び生成部（図中“make sticky”と表記；生成手段）５２をそなえて構成されている。
このスティッキービット生成部５０は、具体的に、正規化処理部３０の出力データ（Ｒ＜１２７：０＞）のうちのスティッキービット生成領域（単精度演算の場合は図１４のＲ＜９８：０＞、１ビットでも“１”があれば、スティッキービットをオンに設定し、スティッキービット生成領域の全ビットが“０”であればスティッキービットをオフに設定するものであり、論理和算出部５１と生成部５２とによってスティッキービットを生成する。
【００４８】
論理和算出部５１は、正規化処理部３０による正規化処理と並行しながら、演算結果における最下位ビットから所定領域内のデータが、正規化処理部３０による正規化処理によってスティッキービット生成領域内に移行されるか否かを予測し、スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービット（Interim Sticky bit）として算出するものである。
【００４９】
ここでは、論理和算出部５１は、第１シフト部３１による正規化処理を施された演算結果に対して、かかる演算結果のうちの所定領域（第１領域）のデータが、正規化処理部３０による正規化処理によってスティッキービット生成領域にシフトされるか否かを、第２シフト部３２及び第３シフト部３３に入力される正規化シフト量（４ビットのデータ；ＳＡ＜５：２＞）を用いて予測し、予測したスティッキービット生成領域内にシフトされるデータが“１”を含むか否かを判断する。これにより、論理和算出部５１は仮スティッキービットを生成する。
【００５０】
ここで、本浮動小数点積和演算器１が単精度演算をサポートする場合について説明する。
本浮動小数点積和演算器１では、正規化処理部２０が左シフト処理を施すので、Ｒ＜９８：０＞に“１”があるか否かのチェックは、正規化シフト量を用いてＣ＜９８：０＞の範囲に“１”を含むか否かをチェックすることにより実行することができる。
【００５１】
具体的には、論理和算出部５１は、まず、第２シフト部３２〜第４シフト部３４がシフトしうる最大範囲である６３ビットに、１ビットシフト部３５がシフトしうる１ビットを加えた６４ビット長分の正規化処理が実行されたとしても、Ｒ＜９８：０＞に含まれる範囲、つまり、正規化シフト量に関係なくスティッキービット生成領域に残る範囲に対して、論理和演算処理を施す。
【００５２】
単精度演算の場合、論理和算出部５１は、最大シフト量である６４ビットの左シフトが実行されてもＲ＜９８：６４＞になるＣ＜３４：０＞について、論理和演算を行なう。
さらに、論理和算出部５１は、上記の正規化シフト量に係わらずＲ＜９８：０＞に含まれる部分を除いた範囲、ここでは、上記Ｃ＜３４；０＞を除いた範囲であるＣ＜９４：３５＞を対象に処理を行なう。ここでは、Ｃ＜９４：３５＞において、正規化シフト量（ＳＡ＜５：２＞）に基づくシフト処理によってＲ＜９８：０＞の外に出ない部分について、４ビット単位で論理和演算して検証する。なお、４ビット単位で論理和演算するのは、第３シフト部３３が４ビット単位でシフト量が変化するように構成されているためである。
【００５３】
つまり、図５（ａ）に示すごとく、Ｃ＜９４：９１＞について、ＳＡ＜５：２＞が“００００”の場合にはシフト量が０〜３ビットとなるため、このＣ＜９４：９１＞はＲ＜９８：０＞の範囲内に必ず残るため、この場合に限り、Ｃ＜９４：９１＞を論理和演算した結果をＰＡＴ＜１４＞として出力する。一方、ＳＡ＜５：２＞が“０００１”の場合にはシフト量が４〜７ビットとなるため、このＣ＜９４：９１＞はＲ＜９８：９５＞の範囲内に収まるか、もしくは、Ｒ＜９８：０＞の範囲外に出るため、生成部５２により処理を行なう。
【００５４】
この図５（ａ）に示す処理は、例えば図６に示すＯＲ（論理和）ゲート，ＮＯＴ（否定）ゲート，及びＡＮＤ（論理積）ゲートからなる論理回路５１ａによって実現される。すなわち、論理和算出部５１は、回路５１ａをそなえている。また論理回路５１ａの入力信号Ｓ１６は、例えば図３に示す論理回路３２ａによって実現される。つまり、論理和算出部５１は、ＳＡ＜５＞とＳＡ＜４＞との論理和をＳ１６（１６ビット以上のシフトを行なうか否かを示す信号）として出力するＯＲゲート３２ａ−３を備える論理回路３２ａをそなえている。また同様に、論理回路５１ａの入力信号Ｓ４は、例えば図４に示す論理回路３３ａによって実現される。つまり、論理和算出部５１は、ＳＡ＜３＞とＳＡ＜２＞との論理和をＳ４（４ビット以上のシフトを行なうか否かを示す信号）として出力するＯＲゲート３３ａ−３を備える論理回路３３ａをそなえている。
【００５５】
次に、図５（ｂ）に示すごとく、Ｃ＜９０：８７＞について、ＳＡ＜５：２＞が“０００１”以下の場合には、このＣ＜９０：８７＞はＲ＜９８：０＞の範囲内に必ず残るため、Ｃ＜９０：８７＞を論理和演算した結果をＰＡＴ＜１３＞として出力する。一方、ＳＡ＜５：２＞が“００１０”の場合には、このＣ＜９０：８７＞はＲ＜９８：９５＞の範囲内に収まるか、もしくは、Ｒ＜９８：０＞の範囲外に出るため、予測を行わずにシフト結果を用いて生成部５２により処理を行なう。
【００５６】
この図５（ｂ）に示す処理は、例えば図７に示すＯＲゲート，ＮＯＴゲート，及びＡＮＤゲートからなる論理回路５１ｂによって実現される。つまり、論理和算出部５１は、Ｃ＜９０：８７＞の論理和を出力するＯＲゲート５１ｂ−１と、Ｓ１６，Ｓ８をそれぞれ反転出力するＮＯＴゲート５１ｂ−２，５１ｂ−３と、これらＮＯＴゲート５１ｂ−２，５１ｂ−３からの出力の論理積を出力するＡＮＤゲート５１ｂ−４と、ＯＲゲート５１ｂ−１の出力とＡＮＤゲート５１ｂ−４の出力との論理積をＰＡＴ＜１３＞として出力するＡＮＤゲート５１ｂ−５とからなる論理回路５１ｂをそなえている。また論理回路51ｂの入力信号Ｓ１６は、例えば図３に示す論理回路３２ａによって実現される。つまり、論理和算出部５１は、ＳＡ＜５＞とＳＡ＜４＞との論理和をＳ１６（１６ビット以上のシフトを行なうか否かを示す信号）として出力するＯＲゲート３２ａ−３からなる論理回路３２ａをそなえている。また同様に、論理回路５１ｂの入力信号Ｓ８は、例えば図４に示す論理回路３３ａによって実現される。つまり、論理和算出部５１は、ＳＡ＜３＞をＳ８（８ビット以上のシフトを行なうか否かを示す信号）として出力するバッファゲート３３ａ−２からなる論理回路３３ａをそなえている。
【００５７】
以降、Ｃ＜８６：３５＞までのデータについても、４ビット毎のデータを対象に、正規化シフト量の値を１ビットずつ増やしながら同様の場合分けをして、論理和演算を行うことによりＰＡＴ＜１２＞〜ＰＡＴ＜１＞として出力するか、もしくは、予測を行わずにシフトした結果を用いて処理を行う。
そして、図５（ｃ）に示すごとく、最後のＣ＜３８：３５＞については、ＳＡ＜５：２＞が“１１１０”以下の場合には、このＣ＜３８：３５＞はＲ＜９８：０＞の範囲内に必ず残るため、この場合に限り、Ｃ＜３８：３５＞を論理和演算した結果をＰＡＴ＜０＞として出力する。一方、ＳＡ＜５：２＞が“１１１１”の場合には、このＣ＜３８：３５＞はＲ＜９８：９５＞の範囲内に収まるか、もしくは、Ｒ＜９８：０＞の範囲外に出るため、生成部５２により処理を行なう。
【００５８】
この図５（ｃ）に示す処理は、例えば図８に示すＯＲゲート，ＮＡＮＤゲート，及びＡＮＤゲートからなる論理回路５１ｃによって実現される。つまり、論理和算出部５１は、Ｃ＜３８：３５＞の論理和を出力するＯＲゲート５１ｃ−１と、Ｓ４８とＳ１２との否定論理積を出力するＮＡＮＤゲート５１ｃ−２と、ＯＲゲート５１ｃ−１の出力とＮＡＮＤゲート５１ｃ−２の出力との論理積をＰＡＴ＜０＞として出力するＡＮＤゲート５１ｃ−３とからなる論理回路５１ｃをそなえている。また論理回路５１ｂの入力信号Ｓ４８は、例えば図３に示す論理回路３２ａによって実現される。つまり、論理和算出部５１は、ＳＡ＜５＞とＳＡ＜４＞との論理積をＳ４８（４８ビットのシフトを行なうか否かを示す信号）として出力するＡＮＤゲート３２ａ−１からなる論理回路３２ａをそなえている。また同様に、論理回路５１ｂの入力信号Ｓ１２は、例えば図４に示す論理回路３３ａによって実現される。つまり、論理和算出部５１は、ＳＡ＜３＞とＳＡ＜２＞との論理積をＳ１２（１２ビットのシフトを行なうか否かを示す信号）として出力するＡＮＤゲート３３ａ−１からなる論理回路３３ａをそなえている。
【００５９】
このように、論理和算出部５１がＣ＜９４：３５＞のデータを対象に、上述のごとく処理を行なうことによって、ＰＡＴ＜１４：０＞が出力される。
最後に、論理和算出部５１は、図１８に示すように構成された論理和回路５１ｄによりＰＡＴ＜１４：０＞の論理和演算を行なうことによって、仮スティッキービットを生成する。ここで、ＰＡＴ＜１４：０＞のうちの少なくとも１ビットが“１”であれば、論理和算出部５１（論理回路５１ｄ）は仮スティッキービットをオン（すなわち“１”）に設定する一方、全ビットが“０”であれば、仮スティッキービットをオフ（すなわち“０”）に設定する。
【００６０】
このように、論理和算出部５１は、単精度演算をサポートする場合には、Ｃ＜９４：０＞（第１領域）のデータを対象に、正規化処理部３０（ここでは第１シフト部３１〜第３シフト部３３）による正規化処理によってスティッキービット生成領域にシフトされるデータを予測して、この予測に基づいて仮スティッキービットを生成する。
次に、生成部５２について説明を行なう。生成部５２は正規化処理部３０によって正規化処理を施された演算結果におけるスティッキービット生成領域のうち第２領域であるＲ＜９８：９５＞の範囲内のデータと、論理和算出部５１によって算出された仮スティッキービットとに基づいて、スティッキービットを生成するものである。
【００６１】
つまり、論理和算出部５１は正規化シフト量のＳＡ＜５：０＞のうちのＳＡ＜５：２＞にかかる正規化処理について予測を行なったが、生成部５２はＳＡ＜１：０＞にかかる正規化処理について予測は行なわず、１ビットシフト部３５の結果による最終的なシフト結果を利用する。
すなわち、第４シフト部３４がシフトしうる最大のシフト量である３ビットと、１ビットシフト部がシフトしうる１ビットとを合わせた、Ｒ＜９８：９５＞の４ビット長データの範囲については、論理和演算を行なう。
【００６２】
したがって、ここでは、生成部５２は、Ｒ＜９８：９５＞の４ビットと、仮スティッキービットの１ビットとの計５ビット長のデータを論理和演算し、これら５ビット長のデータのうち１ビットでも“１”であれば、スティッキービットをオンに設定する一方、全ビットが“０”であればスティッキービットをオフに設定する。
このように、生成部５２が論理和演算を処理しうるビット数は、必ず１ビットシフト部３５が担当しうるシフト量（ここでは１ビット）以上になる。
【００６３】
また、本浮動小数点積和演算器１では、第１処理部として機能する第１シフト部３１〜第４シフト部３４のうちの、最終段の第４シフト部３４が、これら複数段のシフト部３１〜３４の中で最も少ないシフト量を処理しうるように構成されている。これにより、生成部５２が論理和演算を処理しうるビット数を最小にすることができ、生成部５２の回路規模を最小にすることが可能となるとともに、生成部５２のディレイも最小にすることができる。
【００６４】
次に、生成部５２について説明すると、生成部５２は正規化処理部３０によって正規化処理を施された演算結果におけるスティッキービット生成領域のうちの第１領域（ここではＣ＜６５：０＞）の範囲と同範囲の領域を除いた領域（ここではＲ＜６９：６６＞；第２領域）の範囲内のデータと、論理和算出部５１によって算出された仮スティッキービットとに基づいて、スティッキービットを生成するものである。
【００６５】
つまり、生成部５２はＳＡ＜１：０＞にかかる正規化処理について予測は行なわず、Ｒ＜６９：６６＞の４ビットのデータについては、論理和演算を行なう。
したがって、生成部５２は、Ｒ＜６９：６６＞の４ビットと、仮スティッキービットの１ビットとの計５ビットのデータを論理和演算し、これら５ビット長のデータのうち１ビットでも“１”であれば、スティッキービットをオンに設定する一方、全ビットが“０”であればスティッキービットをオフに設定する。
【００６６】
次に、丸め処理部４０について説明する。図２に示すように、丸め処理部４０は、正規化処理部３０によって正規化処理を施された演算結果に対して、スティッキービット生成部５０の生成部５２によって生成されたスティッキービットに基づいて丸め処理を施すものであり、インクリメンタ（Incrementer；増分手段）４１，丸め判定部（Judge Round；丸め判定手段）４３，及び選択回路（選択手段）４４をそなえて構成されている。
【００６７】
インクリメンタ４１は、正規化処理部３０によって正規化処理を施された演算結果のうちの、仮数部（単精度演算の場合はＣ＜１２３：１０１＞）に“１”を加える丸め処理を行なう。
丸め判定部４３は、（１）スティッキービット生成部５０によって生成されたスティッキービット、（２）正規化処理部３０から出力された演算結果における仮数部の最下位ビットであるＬ（Least significant bit）ビット（図１４，図１５参照）、（３）かかる演算結果におけるＧ（Guard）ビット、（４）かかる演算結果におけるＲ（Round）ビット（図１４，図１５参照）、（５）外部から入力されるＲＤ（Round Direction：丸め方向）ビット、及び、（６）外部から入力されるＳＩＧＮ（符号）ビットに基づいて、丸め処理が必要であるか否かを判断する。そして、丸め判定部４３は、かかる判定の結果を選択回路４４に出力する。
【００６８】
選択回路４４は、丸め判定部４３による判定結果に基づいて、インクリメンタ４１を介して入力された丸め処理を施された演算結果と、正規化処理部３０から出力されたまま状態の演算結果とのいずれか一方を出力するものである。
つまり、選択回路４４は、丸め判定部４３による判定結果が丸め処理が必要である場合には、インクリメンタ４１によって丸め処理を施された演算結果を出力する一方、丸め判定部４３による判定結果が丸め処理が不要である場合には、丸め処理が施されていない演算結果である正規化処理部３０の演算結果を出力する。
【００６９】
次に、図１０を参照しながら、本浮動小数点積和演算器１の正規化処理部３０，スティッキービット生成部５０，及び丸め処理部４０の動作例（パイプラインステージを分割する場合）について説明する。なお、図１０は本浮動小数点積和演算器１が単精度演算の演算を行なう場合を示しており、図１０において破線Ｘ〜Ｚはパイプラインステージの分割を行なう境界を示している。
【００７０】
図１０に示すように、本浮動小数点積和演算器１では、正規化処理部３０の第２シフト処理部３２以降の処理に並行して、スティッキービット生成部５０の論理和算出部５１が処理を実行し、スティッキービット生成部５０の生成部５２は正規化処理部３０による正規化処理後に、１ビットシフト部３５の結果を用いてスティッキービットを生成する。
そして、上述したように、従来から正規化処理部３０による正規化処理と、丸め処理部４０による丸め処理との間は処理サイクルが長くなるため、パイプラインステージを分割するのが一般的であり、本浮動小数点積和演算器１でも破線Ｙに示すようにパイプラインステージを分割する場合がある。
【００７１】
この場合、１ビットシフト部３５（つまり、正規化処理部３０）から出力されるデータは、Ｒ＜１２７：０＞のうちの、スティッキービット生成領域Ｒ＜９８：０＞を除いた、Ｒ＜１２７：９９＞の２９ビットのデータとなり、この２９ビット長のデータをラッチするだけで良い。出力データからスティッキービット生成領域Ｒ＜９８：０＞を除くことができるのは、スティッキービット生成部５０がスティッキービットを生成するため、丸め処理部４０にあらためてＲ＜９８：０＞を出力する必要がないためである。
【００７２】
また、スティッキービット生成部５０によって生成されたスティッキービット１ビット分をラッチする必要もある。
そして、ラッチされた２９ビット長のデータのうち、Ｒ＜１２７：１０１＞はインクリメンタ４１に入力されるとともに、インクリメンタ４１をバイパスして選択回路４４にも直接入力される。
【００７３】
さらに、ラッチされた２９ビットのデータのうち、Ｌビット，Ｒビット，及びＧビットに該当するＲ＜１０１：９９＞の３ビット幅のデータは、丸め判定に用いられるため丸め判定部４３に入力される。
そして、ラッチされた５８ビット長のデータのうち、Ｒ＜１２７：７２＞はインクリメンタ４１に入力されるとともに、インクリメンタ４１をバイパスして選択回路４４にも直接入力される。
【００７４】
さらに、ラッチされた５８ビット長のデータのうち、丸め判定部４３による判定に用いられるＬビット，Ｒビット，及びＧビットに該当するＲ＜７２：７０＞の３ビット幅のデータは、丸め判定部４３に入力される。
このように、本発明の一実施形態としての浮動小数点積和演算器１によれば、論理和算出部５１が正規化処理部３０による正規化処理と並行して、仮スティッキービットを算出し、生成部５２が仮スティッキービットと、正規化処理部３０によって正規化処理を施された演算結果のうちスティッキービット生成領域の一部データとに基づいてスティッキービットの生成をため、正規化処理後にスティッキービット生成領域にかかるすべてのデータについて論理和を算出する必要がなく、ディレイを防止して効率良くスティッキービットを生成することができる。
【００７５】
具体的には、単精度演算をサポートする場合、正規化処理部３０による正規化処理後は、スティッキービット生成領域９９ビットのデータを論理和演算するのではなく、５ビットのデータのみを論理和演算するだけで良いため、ディレイを大幅に削減することができる。
また、正規化処理部３０による処理と丸め処理部４０による処理との間のパイプラインステージを分割した場合には、正規化処理と並行してスティッキービットの生成を行なうため、演算結果データのすべて（Ｒ＜１２７：０＞）をラッチする必要はなく、スティッキービット生成領域を除いた範囲のみをラッチするだけで良いため、ラッチ等のハードウェア資源（物量）を削減することができる。具体的には、単精度演算用浮動小数点積和演算器において、従来は１２８ビット長のラッチ対象データを５９ビット長（図１１参照）にまで削減することができ、これらの差分である６８ビット分のラッチを削減することができる。
【００７６】
さらに、本浮動小数点積和演算器１では、１ビットシフト部３５による正規化処理の結果を考慮して、つまり、１ビットシフト部３５による正規化処理で変化しうるスティッキービット生成領域（第２領域）については、当該正規化処理の結果に基づいてスティッキービットの生成を行なうので、スティッキービットの生成を正規化処理部３０による正規化処理と並行して開始しながら、シフト量算出部２０によって算出された正規化シフト量が１ビット不足しているか否かの場合分けを行なう必要がないため、正規化シフト量が不足しているかいないかに関わらずスティッキービットを確実に生成することができる。したがって、上述した特許文献１に開示された技術のように、この正規化シフト量が１ビット不足した場合と、不足しない場合との両方の場合に対応するために、ディレイや物量の増加が発生することはない。
【００７７】
また、正規化処理部３０における複数段により構成されるシフト部３１〜３４のうち最終段の第４シフト部３４による正規化処理に対して、論理和算出部５１は予測を行なわずに、生成部５２が第４シフト部３４における正規化処理の結果に基づいてスティッキービットの生成を行なう。つまり、生成部５２が処理対象とする第２領域は第４シフト部３４による最大シフト量と１ビットシフト部３５の１ビットとの合計である。これによって論理和算出部５１が複数段により構成されるシフト部３１〜３４のすべてのシフト部（第１処理部）による正規化処理の結果を予測する方法よりも効率よく仮スティッキービットを生成することができる。
【００７８】
このとき、本浮動小数点積和演算器１では、第４シフト部３４がシフト部３１〜３４の中で最もシフト量が少ないので、生成部５２による処理も効率が良くなり、さらに、生成部５２を構成する物量を低減することができる。
【００７９】
〔２〕本発明の倍精度演算における実施形態について
まず、図１に示すブロック図を参照しながら、本発明の一実施形態としての浮動小数点積和演算器の構成について説明する。なお、図１において記述の符号と同一の符号は同一の部分もしくは略同一の部分を示している。したがって、ここではこれらの詳細な説明は一部省略する。
【００８０】
この図１に示すように、本浮動小数点積和演算器１は、右シフト部（Aligner（Right Shifter））１０，乗算器（Multiplier（CSA(Carry Save Adder) Tree））１１，ＣＳＡ（Carry Save Adder）１２，絶対値加算器（Abs. Adder）１３，シフト量算出部（L. Z. Predictor（Leading Zero Predictor））２０，正規化処理部（Normalizer（Left Shifter））３０，丸め処理部（Rounder）４０，及びスティッキービット生成部（Sticky bit Generator）５０をそなえて構成されている。
【００８１】
なお、本浮動小数点積和演算器１は、例えばＩＥＥＥ（The Institute of Electrical and Electronics Engineers, Inc.；米国電子技術者協会）７５４準拠の倍精度演算をサポートする。
また、絶対値加算器１３からの出力データ（演算結果；正規化処理部３０の入力データフォーマット）は上記図１３に示したもの（Ｃ＜１２７：０＞）と同様であり、本浮動小数点積和演算器１が倍精度演算をサポートする場合のデータ構造（正規化処理部３０の出力データフォーマット）は上記図１５に示したもの（Ｒ＜１２７：０＞）と同様である。したがって、以下の説明においても、演算結果（入力データフォーマット）や出力データ（出力データフォーマット）については上記図１３〜図１５を用いて説明する。
【００８２】
右シフト部１０，乗算器１１，ＣＳＡ１２及び絶対値加算器１３は、３オペランド（図中“OP1”，“OP2”，“OP3”）の浮動小数点積和演算を実行する積和演算部として機能するものである。なお、この積和演算部の演算結果（すなわち、絶対値加算器１３の出力データ）は、上記図１３に示すようにＣ＜１２７：０＞で表わされる。
シフト量算出部２０は、絶対値加算器１３からの出力データ（演算結果）の先頭からどれだけ“０”が連続しているかを予測するものであり、この結果が正規化処理部３０のシフト量（Shift Amount）となる。つまり、シフト量算出部２０は、正規化処理部３０による左シフト処理（正規化処理）に用いる、演算結果に対する正規化シフト量を算出する。なお、シフト量算出部２０によって算出される正規化シフト量は１ビット不足する場合がある。
【００８３】
正規化処理部３０は、シフト量算出部２０によって算出された正規化シフト量を用いて絶対値加算器１３の出力データ（以下、演算結果という）に対して左シフト処理（正規化処理）を施すものであり、正規化処理部３０によって演算結果の所定ビット位置（ここではＲ＜１２４＞）が必ず“１”になる。
ここで、図２に本浮動小数点積和演算器１の正規化処理部３０，丸め処理部４０，及びスティッキービット生成部５０の構成を示す。この図２に示すごとく、正規化処理部３０は、複数段のシフタ３１〜３５、つまり、第１シフト部（1st left shifter）３１，第２シフト部（2nd left shifter）３２，第３シフト部（3rd left shifter）３３，第４シフト部（4th left shifter）３４，及び１ビットシフト部（1bit left shifter（第２処理部）３５をそなえて構成されている。
【００８４】
第１〜第４シフト部３１〜３４は、シフト量算出部２０によって算出された正規化シフト量（７ビットのデータ：ＳＡ＜６：０＞）を用いて演算結果に正規化処理（左シフト）を行なう第１処理部として機能する。
ここで、演算結果は１２８ビットのデータであるため、第１〜第４シフト部３１〜３４によるシフト量（つまり、シフト量算出部２０によって算出される正規化シフト量）は、最大で１２７ビットとなる。そのため、ここでは、第１シフト部３１は正規化シフト量である７ビット長データＳＡ＜６：０＞のうちＳＡ＜６＞に基づいて、６４ビットもしくは０ビットのシフトを行なうことができ、第２シフト部３２はＳＡ＜６：０＞のうちＳＡ＜５：４＞に基づいて、４８，３２，１６，０のいずれかのビットのシフトを行なうことができ、第３シフト部３３はＳＡ＜６：０＞のうちＳＡ＜３：２＞に基づいて、１２，８，４，０のいずれかのビットのシフトを行なうことができ、第４シフト部３４はＳＡ＜６：０＞のうちＳＡ＜１：０＞に基づいて、３，２，１，０のいずれかのビットのシフトを行なうことができる。
【００８５】
なお、上述のごとく、７ビット長のデータで出力される正規化シフト量のうち、第１シフト部３１には正規化シフト量が６４ビット以上であるか否か、つまり、第１シフト部３１が６４ビットのシフト処理を実行するか否かを示す１ビットのデータ（ＳＡ＜６＞）が入力され、ＳＡ＜６＞が“１”の場合は６４ビットのシフトを実行し、ＳＡ＜６＞が“０”の場合はシフトを実行しない。
【００８６】
また、第２シフト部３２〜第４シフト部３４に入力される正規化シフト量がＳＡ＜５：０＞で表わされる場合、第２シフト部３２はＳＡ＜５：４＞に基づいて正規化処理を実行する。ここでは、第２シフト部３２は、ＳＡ＜５：４＞が“１１”の場合は４８ビットのシフトを実行し、ＳＡ＜５：４＞が“１０”の場合は３２ビットのシフトを実行し、ＳＡ＜５：４＞が“０１”の場合は１６ビットのシフトを実行し、ＳＡ＜５：４＞が００“００”の場合はシフトを実行しない。
【００８７】
また、これと同様に、第３シフト部３３は、ＳＡ＜３：２＞が“１１”の場合は１２ビットのシフトを実行し、ＳＡ＜３：２＞が“１０”の場合は８ビットのシフトを実行し、ＳＡ＜３：２＞が“０１”の場合は４ビットのシフトを実行し、ＳＡ＜３：２＞が“００”の場合はシフトを実行しない。
また、これと同様に、第４シフト部３４は、ＳＡ＜１：０＞が“１１”の場合は３ビットのシフトを実行し、ＳＡ＜１：０＞が“１０”の場合は２ビットのシフトを実行し、ＳＡ＜１：０＞が“０１”の場合は１ビットのシフトを実行し、ＳＡ＜１：０＞が“００”の場合はシフトを実行しない。
【００８８】
１ビットシフト部３５は、第４シフト部３４による正規化シフト量に基づく正規化処理の結果、所定のビット位置Ｒ＜１２４＞が“１”になるようにシフトされているか否か（正規化シフト量が不足しているか否か）を判断し、所定のビット位置が“１”でなければ、シフト量算出部２０によって算出された正規化シフト量が１ビット不足していたものとして、第４シフト部３４によって正規化処理を施された演算結果に対してさらに１ビットのシフト処理を施す。その結果、かかる所定のビット位置のデータは“１”になる。
【００８９】
つまり、１ビットシフト部３５は、第４シフト部３４の出力データの所定ビット位置が“０”であるか“１”であるかを判断し、“１”である場合にはシフト処理を実行しない。
一方、シフト量算出部２０によって算出された正規化シフト量が１ビット不足しているために所定ビット位置が“０”である場合には、正規化処理を完了すべく（すなわち、所定ビット位置を“１”にすべく）、第４シフト部３４の出力データを１ビットだけシフトする。
【００９０】
なお、本浮動小数点積和演算器１では、スティッキービット生成部５０が正規化処理部３０による正規化処理と並行しながらスティッキービットを生成するため、正規化処理部３０は丸め処理部４０に対して正規化処理を施した演算結果の全ビットではなく、かかる演算結果のうち、スティッキービット生成領域を除いた部分を丸め処理部４０に出力する。換言すると、丸め処理部４０には、倍精度演算の場合にはＲ＜１２７：７０＞の５８ビット長のデータが丸め処理部４０に入力される。
【００９１】
また、図２に示すごとく、スティッキービット生成部５０は、正規化処理部３０による正規化処理と並行してスティッキービットを生成するものであり、論理和算出部（Sticky bit Predictor）５１及び生成部（図中“make sticky”と表記）５２をそなえて構成されている。
このスティッキービット生成部５０は、具体的に、正規化処理部３０の出力データ（Ｒ＜１２７：０＞）のうちのスティッキービット生成領域（倍精度演算の場合は図１５のＲ＜６９：０＞）内に、１ビットでも“１”があれば、スティッキービットをオンに設定し、スティッキービット生成領域の全ビットが“０”であればスティッキービットをオフに設定するものであり、論理和算出部５１と生成部５２とによってスティッキービットを生成する。
【００９２】
論理和算出部５１は、正規化処理部３０による正規化処理と並行しながら、演算結果における最下位ビットから所定領域内のデータが、正規化処理部３０による正規化処理によってスティッキービット生成領域内に移行されるか否かを予測し、スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービット（Interim Sticky bit）として算出するものである。
【００９３】
ここでは、論理和算出部５１は、第１シフト部３１による正規化処理を施された演算結果に対して、かかる演算結果のうちの所定領域（第１領域）のデータが、正規化処理部３０による正規化処理によってスティッキービット生成領域にシフトされるか否かを、第２シフト部３２及び第３シフト部３３に入力される正規化シフト量（４ビットのデータ；ＳＡ＜５：２＞）を用いて予測し、予測したスティッキービット生成領域内にシフトされるデータが“１”を含むか否かを判断する。これにより、論理和算出部５１は仮スティッキービットを生成する。
【００９４】
ここで、本浮動小数点積和演算器１が倍精度演算をサポートする場合について説明すると、正規化処理部２０が演算結果に対する左シフト処理を施すので、Ｒ＜６９：０＞の範囲内に“１”があるか否かのチェックは、正規化シフト量を用いてＣ＜６９：０＞の範囲内に“１”があるか否かをチェックすることにより実行できる。
倍精度演算の場合、論理和算出部５１は、まず、第２シフト部３２以降でシフトしうる最大幅である６４ビットのシフト処理を施したとしてもＲ＜６９：６４＞となるＣ＜５：０＞について、論理和演算を行なう。
【００９５】
さらに、論理和算出部５１は、上記の正規化シフト量に係わらずＲ＜６９：０＞に含まれる範囲以外の部分、ここでは、Ｃ＜６５：６＞を対象に処理を行なう。
論理和算出部５１は、Ｃ＜６５：６＞において、正規化シフト量（ＳＡ＜５：２＞）に基づくシフト処理によってＲ＜６９：０＞の範囲外に出ない部分について、４ビット単位で論理和演算して検証する。
【００９６】
つまり、図９（ａ）に示すごとく、Ｃ＜６５：６２＞について、ＳＡ＜５：２＞が“００００”の場合には、このＣ＜６５：６２＞はＲ＜６９：０＞の範囲内に必ず残るため、この場合に限り、Ｃ＜６５：６２＞を論理和演算した結果をＰＡＴ＜１４＞として出力する。一方、ＳＡ＜５：２＞が“０００１”の場合には、このＣ＜６５：６２＞はＲ＜６９：６６＞の範囲内に収まるか、もしくは、Ｒ＜６９：０＞の範囲外に出るため、当該シフト結果を用いて生成部５２による処理を行なう。なお、この処理は、例えば上述した図６に示す論理回路５１ａと同様の構成による論理回路によって実現される。
【００９７】
次に、図９（ｂ）に示すごとく、Ｃ＜６１：５８＞について、ＳＡ＜５：２＞が“０００１”以下の場合には、このＣ＜６１：５８＞はＲ＜６９：０＞の範囲内に必ず残るため、この場合に限り、Ｃ＜６１：５８＞を論理和演算した結果をＰＡＴ＜１３＞として出力する。一方、ＳＡ＜５：２＞が“００１０”の場合には、このＣ＜６１：５８＞はＲ＜６９：６６＞の範囲内に収まるか、もしくは、Ｒ＜６９：０＞の範囲外に出るため、生成部５２による処理を行なう。なお、この処理は、例えば上述した図７に示す論理回路５１ｂと同様の構成による論理回路によって実現される。
【００９８】
以降、Ｃ＜５７：６＞の範囲までのデータについても、４ビット毎のデータを対象に、正規化シフト量の値を１ビットずつ増やしながら同様の場合分けをして、論理和演算を行なうか、もしくは、予測を行わずに当該シフト結果を用いて生成部５２による処理でカバーする。
そして、図９（ｃ）に示すごとく、最後のＣ＜９：６＞については、ＳＡ＜５：２＞が“１１１０”以下の場合には、このＣ＜９：６＞はＲ＜６９：０＞内に必ず残るため、この場合に限り、Ｃ＜９：６＞を論理和演算した結果をＰＡＴ＜０＞として出力する。一方、ＳＡ＜５：２＞が“１１１１”の場合には、このＣ＜９：６＞はＲ＜６９：６６＞内に収まるか、もしくは、Ｒ＜６９：０＞の外に出るため、生成部５２による処理でカバーする。なお、この処理は、例えば上述した図８に示す論理回路５１ｃと同様の構成による論理回路によって実現される。
【００９９】
このように、論理和算出部５１がＣ＜６５：６＞の範囲のデータを対象に、上述のごとく処理を行なうことによって、ＰＡＴ＜１４：０＞が出力される。
最後に、論理和算出部５１は、図１８に示すように構成された論理和回路５１ｄにより、ＰＡＴ＜１４：０＞に対する論理和演算を行なうことによって、単精度演算の場合同様に仮スティッキービットを生成する。
【０１００】
このように、論理和算出部５１は、倍精度演算をサポートする場合には、Ｃ＜６５：０＞（第１領域）のデータを対象に、正規化処理部３０（ここでは第１シフト部３１〜第３シフト部３３）による正規化処理によってスティッキービット生成領域にシフトされる範囲のデータを予測して、この予測に基づいて仮スティッキービットを生成する。
次に、生成部５２について説明すると、生成部５２は正規化処理部３０によって正規化処理を施された演算結果におけるスティッキービット生成領域のうちの第１領域（ここではＣ＜６５：０＞）の範囲と同範囲の領域を除いた領域（ここではＲ＜６９：６６＞；第２領域）の範囲内のデータと、論理和算出部５１によって算出された仮スティッキービットとに基づいて、スティッキービットを生成するものである。
【０１０１】
つまり、生成部５２はＳＡ＜１：０＞にかかる正規化処理について予測は行なわず、Ｒ＜６９：６６＞の４ビットのデータについては、論理和演算を行なう。
したがって、生成部５２は、Ｒ＜６９：６６＞の４ビットと、仮スティッキービットの１ビットとの計５ビットのデータを論理和演算し、これら５ビット長のデータのうち１ビットでも“１”であれば、スティッキービットをオンに設定する一方、全ビットが“０”であればスティッキービットをオフに設定する。
【０１０２】
次に、丸め処理部４０について説明する。図２に示すように、丸め処理部４０は、正規化処理部３０によって正規化処理を施された演算結果に対して、スティッキービット生成部５０の生成部５２によって生成されたスティッキービットに基づいて丸め処理を施すものであり、インクリメンタ（Incrementer）４１，丸め判定部（Judge Round）４３，及び選択回路４４をそなえて構成されている。
【０１０３】
インクリメンタ４１は、正規化処理部３０によって正規化処理を施された演算結果のうちの、仮数部（倍精度演算の場合はＣ＜１２３：７２＞）に“１”を加える丸め処理を行なう。
丸め判定部４３は、（１）スティッキービット生成部５０によって生成されたスティッキービット、（２）正規化処理部３０から出力された演算結果における仮数部の最下位ビットであるＬ（Least significant bit）ビット（図１４，図１５参照）、（３）かかる演算結果におけるＧ（Guard）ビット、（４）かかる演算結果におけるＲ（Round）ビット（図１４，図１５参照）、（５）外部から入力されるＲＤ（Round Direction：丸め方向）ビット、及び、（６）外部から入力されるＳＩＧＮ（符号）ビットに基づいて、丸め処理が必要であるか否かを判断する。そして、丸め判定部４３は、かかる判定の結果を選択回路４４に出力する。
【０１０４】
選択回路４４は、丸め判定部４３による判定結果に基づいて、インクリメンタ４１を介して入力された丸め処理を施された演算結果と、正規化処理部３０から出力されたまま状態の演算結果とのいずれか一方を出力するものである。
つまり、選択回路４４は、丸め判定部４３による判定結果が丸め処理が必要である場合には、インクリメンタ４１によって丸め処理を施された演算結果を出力する一方、丸め判定部４３による判定結果が丸め処理が不要である場合には、丸め処理が施されていない演算結果である正規化処理部３０の演算結果を出力する。
【０１０５】
なお、本浮動小数点積和演算器１が倍精度演算の演算を行なう場合の動作例を図１１に示すと、この場合、１ビットシフト部３５（つまり、正規化処理部３０）から出力されるデータは、Ｒ＜１２７：０＞のうちの、スティッキービット生成領域Ｒ＜６９：０＞の範囲を除いた、Ｒ＜１２７：７０＞の５８ビット長のデータとなり、この５８ビットのデータをラッチするだけでよくなる。
【０１０６】
そして、ラッチされた５８ビット長のデータのうち、Ｒ＜１２７：７２＞はインクリメンタ４１に入力されるとともに、インクリメンタ４１をバイパスして選択回路４４にも直接入力される。
さらに、ラッチされた５８ビット長のデータのうち、丸め判定部４３による判定に用いられるＬビット，Ｒビット，及びＧビットに該当するＲ＜７２：７０＞の３ビット幅のデータは、丸め判定部４３に入力される。
【０１０７】
このように、本発明の一実施形態としての浮動小数点積和演算器１によれば、論理和算出部５１が正規化処理部３０による正規化処理と並行して、仮スティッキービットを算出し、生成部５２が仮スティッキービットと、正規化処理部３０によって正規化処理を施された演算結果のうちスティッキービット生成領域の一部データとに基づいてスティッキービットの生成をため、正規化処理後にスティッキービット生成領域にかかるすべてのデータについて論理和を算出する必要がなく、ディレイを防止して効率良くスティッキービットを生成することができる。
【０１０８】
具体的には、倍精度演算をサポートする場合、正規化処理部３０による正規化処理後は、スティッキービット生成領域７０ビットのデータを論理和演算するのではなく、５ビットのデータのみを論理和演算するだけで良いため、ディレイを大幅に削減することができる。
また、正規化処理部３０による処理と丸め処理部４０による処理との間のパイプラインステージを分割した場合には、正規化処理と並行してスティッキービットの生成を行なうため、演算結果データのすべて（Ｒ＜１２７：０＞）をラッチする必要はなく、スティッキービット生成領域を除いた範囲のみをラッチするだけで良いため、ラッチ等のハードウェア資源（物量）を削減することができる。具体的には、倍精度演算用浮動小数点積和演算器において、従来は１２８ビット長のラッチ対象データを５９ビット長（図１１参照）にまで削減することができ、これらの差分である６８ビット分のラッチを削減することができる。
【０１０９】
さらに、本浮動小数点積和演算器１では、１ビットシフト部３５による正規化処理の結果を考慮して、つまり、１ビットシフト部３５による正規化処理で変化しうるスティッキービット生成領域（第２領域）については、当該正規化処理の結果に基づいてスティッキービットの生成を行なうので、スティッキービットの生成を正規化処理部３０による正規化処理と並行して開始しながら、シフト量算出部２０によって算出された正規化シフト量が１ビット不足しているか否かの場合分けを行なう必要がないため、正規化シフト量が不足しているかいないかに関わらずスティッキービットを確実に生成することができる。したがって、上述した特許文献１に開示された技術のように、この正規化シフト量が１ビット不足した場合と、不足しない場合との両方の場合に対応するために、ディレイや物量の増加が発生することはない。
【０１１０】
また、正規化処理部３０における複数段により構成されるシフト部３１〜３４のうち最終段の第４シフト部３４による正規化処理に対して、論理和算出部５１は予測を行なわずに、生成部５２が第４シフト部３４における正規化処理の結果に基づいてスティッキービットの生成を行なう。つまり、生成部５２が処理対象とする第２領域は第４シフト部３４による最大シフト量と１ビットシフト部３５の１ビットとの合計である。これによって論理和算出部５１が複数段により構成されるシフト部３１〜３４のすべてのシフト部（第１処理部）による正規化処理の結果を予測する方法よりも効率よく仮スティッキービットを生成することができる。
【０１１１】
このとき、本浮動小数点積和演算器１では、第４シフト部３４がシフト部３１〜３４の中で最もシフト量が少ないので、生成部５２による処理も効率が良くなり、さらに、生成部５２を構成する物量を低減することができる。
【０１１２】
〔３〕その他
なお、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態において、第１処理部を構成する複数段のシフト部３１〜３４におけるシフト量は、本発明において限定されるものではなく、種々変更してもよい。
また、上述した実施形態では、シフト量算出部２０によって算出される正規化シフト量について１ビット不足する場合があるものを例に挙げて説明したが、かかる正規化シフト量の不足量は限定されるものではない。
【０１１３】
また、上述した実施形態では、浮動小数点積和演算器１が単精度演算と倍精度演算の演算を実行する場合を例に挙げて説明したが、本発明はこれに限定されるものではなく、例えば、ｎ倍精度演算（ｎは整数）など本浮動小数点積和演算器１がサポートする演算精度は限定されるものではない。
【０１１４】
〔４〕付記
（付記１）
演算結果の正規化の際に前記演算結果がシフトされたか否かを表す情報の生成を行なう演算処理装置において、
前記演算結果を出力する演算手段と、
複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、
前記複数のシフト手段に対する複数のシフト量を算出するシフト量算出手段と、
前記複数のシフト量を用いて、演算結果の正規化の際に前記演算結果がシフトされるか否かの予測結果である仮情報の生成を行なう予測手段と、
前記仮情報を用いて、前記情報の生成を行なう生成手段とを有することを特徴とする演算処理装置。
【０１１５】
（付記２）
演算結果の正規化の際に前記演算結果がシフトされたか否かを表す情報を用いて演算結果の丸め処理を行なう演算処理装置において、
前記演算結果を出力する演算手段と、
複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、
前記複数のシフト手段に対する複数のシフト量を算出するシフト量算出手段と、
前記複数のシフト量を用いて、演算結果の正規化の際に前記演算結果がシフトされるか否かの予測結果である仮情報の生成を行なう予測手段と、
前記仮情報を用いて、前記情報の生成を行なう生成手段と、
前記情報を用いて前記丸め処理を行なうか否かの判定結果を出力する丸め判定手段と、
前記演算結果に所定値を加算する増分手段と、
前記判定結果を用いて、前記演算結果と前記増分手段の出力のいずれかを選択する選択手段とを有することを特徴とする演算処理装置。
【０１１６】
（付記３）
演算結果の正規化の際に前記演算結果がシフトされたか否かを表す情報を用いて演算結果の丸め処理を行なう演算処理装置により演算を行なう情報処理装置において、
前記演算結果を出力する演算手段と、
複数のシフト手段を有し、前記演算結果に対する正規化処理を前記複数のシフト手段により分割して行なう正規化処理手段と、
前記複数のシフト手段に対する複数のシフト量を算出するシフト量算出手段と、
前記複数のシフト量を用いて、演算結果の正規化の際に前記演算結果がシフトされるか否かの予測結果である仮情報の生成を行なう予測手段と、
前記仮情報を用いて、前記情報の生成を行なう生成手段とを有する演算処理装置により演算を行なうことを特徴とする情報処理装置。
【０１１７】
（付記４）
前記演算処理装置はさらに、
前記情報を用いて前記丸め処理を行なうか否かの判定結果を出力する丸め判定手段と、
前記演算結果に所定値を加算する増分手段と、
前記判定結果を用いて、前記演算結果と前記増分手段の出力のいずれかを選択する選択手段とを有することを特徴とする付記３記載の情報処理装置。
【０１１８】
（付記５）
演算結果の正規化の際に前記演算結果がシフトされたか否かを表す情報を用いて演算結果の丸め処理を行なう演算処理方法において、
前記演算を行うステップと、
複数のシフト処理ステップにおいて用いる複数のシフト量を算出するシフト量算出ステップと、
前記演算結果に対する正規化処理を、前記シフト量を用いてそれぞれ前記複数のシフト処理ステップに分割して行なう正規化処理ステップと、
前記複数のシフト量を用いて、演算結果の正規化の際に前記演算結果がシフトされるか否かの予測結果である仮情報の生成を行なう予測ステップと、
前記仮情報を用いて、前記情報の生成を行なう生成ステップとを有することを特徴とする演算処理方法。
【０１１９】
（付記６）
演算結果の正規化の際に前記演算結果がシフトされたか否かを表す情報を用いて演算結果の丸め処理を行なう演算処理方法において、
前記演算結果を出力するステップと、
少なくとも２つ以上のシフト処理ステップにおいて用いる複数のシフト量を算出するシフト量算出ステップと、
前記演算結果に対する正規化処理を、前記シフト量を用いてそれぞれ前記複数のシフト処理ステップに分割して行ない正規化された演算結果を生成する正規化処理ステップと、
前記複数のシフト量を用いて、演算結果の正規化の際に前記演算結果がシフトされる否かの予測結果である仮情報の生成を行なう予測ステップと、
前記仮情報を用いて、前記情報の生成を行なう生成ステップと、
前記正規化された演算結果に対して前記情報を用いて丸め処理を行う丸め処理ステップとを有することを特徴とする演算処理方法。
【０１２０】
（付記７）
積和演算を実行する積和演算部と、
該積和演算部による前記演算の結果に対する正規化シフト量を算出するシフト量算出部と、
該シフト量算出部によって算出された前記正規化シフト量を用いて前記積和演算部による前記演算結果に対して正規化処理を施す正規化処理部と、
該正規化処理部による正規化処理と並行しながら、前記演算結果における最下位から所定領域（以下、第１領域という）内のデータが、前記正規化処理部による正規化処理によってスティッキービット生成領域内に移行されるか否かを予測して、前記スティッキービット生成領域内に移行されると予測したデータの論理和を仮スティッキービットとして算出する論理和算出部と、
前記正規化処理部によって正規化処理を施された演算結果における前記スティッキービット生成領域のうちの前記第１領域と同一領域を除いた領域（以下、第２領域という）内のデータと、前記論理和算出部によって生成された仮スティッキービットとに基づいてスティッキービットを生成する生成部と、
前記正規化処理部によって前記正規化処理を施された前記演算結果に対して、前記生成部によって生成された前記スティッキービットに基づいて丸め処理を施す丸め処理部とをそなえて構成されていることを特徴とする、情報処理装置。
【０１２１】
（付記８）
前記正規化処理部が、前記正規化シフト量に基づいて正規化処理を施す第１処理部と、該第１処理部による正規化処理の結果に基づいて当該正規化シフト量が不足しているか否かを判断して、不足していると判断した場合には当該不足しているシフト量を用いて当該結果に対してさらに正規化処理を施す１ビットシフト部とをそなえ、
前記スティッキービット生成領域の前記第２領域の総ビット数が、前記１ビットシフト部によって正規化処理が施されうる前記不足しているシフト量以上であることを特徴とする、付記１記載の情報処理装置。
【０１２２】
（付記９）
前記正規化処理部の前記１ビットシフト部は、前記正規化シフト量が不足していないと判断した場合には、正規化処理を実行しないことを特徴とする、付記２記載の情報処理装置。
（付記１０）
前記正規化処理部の前記第１処理部が、前記正規化シフト量に基づいて前記演算結果をシフトする複数段のシフト部からなり、
前記スティッキービット生成領域の前記第２領域の総ビット数が、前記複数段のシフト部のうちの最終段のシフト部が担当する最大の正規化シフト量と前記１ビットシフト部が担当しうる前記不足しているシフト量との合計であることを特徴とする、付記２または付記３記載の情報処理装置。
【０１２３】
（付記１１）
前記正規化処理部の前記第１処理部の前記最終段のシフト部が、前記複数段のシフト部の中で最も少ないシフト量を担当することを特徴とする、付記４記載の情報処理装置。
（付記１２）
前記正規化処理部から前記丸め処理部に前記演算結果のうちの前記スティッキービット生成領域を除いた部分が入力されることを特徴とする、付記１〜付記５のいずれか１項に記載の情報処理装置。
【図面の簡単な説明】
【０１２４】
【図１】本発明の一実施形態としての演算処理装置の構成を示すブロック図である。
【図２】本発明の一実施形態としての演算処理装置の正規化処理部，スティッキービット生成部，丸め処理部の構成を示すブロック図である。
【図３】本発明の一実施形態としての演算処理装置のスティッキービット生成部の論理和算出部がそなえる論理回路の一例を示す図である。
【図４】本発明の一実施形態としての演算処理装置のスティッキービット生成部の論理和算出部がそなえる論理回路の一例を示す図である。
【図５】本発明の一実施形態としての演算処理装置が単精度演算をサポートする際のスティッキービット生成部の論理和算出部の動作を説明するための図であり、（ａ）〜（ｃ）のそれぞれはスティッキービット生成領域のうちの一部の領域に対する動作を説明するための図である。
【図６】本発明の一実施形態としての演算処理装置のスティッキービット生成部の論理和算出部がそなえる論理回路の一例を示す図である。
【図７】本発明の一実施形態としての演算処理装置のスティッキービット生成部の論理和算出部がそなえる論理回路の一例を示す図である。
【図８】本発明の一実施形態としての演算処理装置のスティッキービット生成部の論理和算出部がそなえる論理回路の一例を示す図である。
【図９】本発明の一実施形態としての演算処理装置が倍精度演算をサポートする際のスティッキービット生成部の論理和算出部の動作を説明するための図であり、（ａ）〜（ｃ）のそれぞれはスティッキービット生成領域のうちの一部の領域に対する動作を説明するための図である。
【図１０】本発明の一実施形態としての演算処理装置において、単精度演算をサポートする際にパイプラインステージを切ったときの動作例を示す図である。
【図１１】本発明の一実施形態としての演算処理装置において、倍精度演算をサポートする際にパイプラインステージを切ったときの動作例を示す図である。
【図１２】従来の浮動小数点積和演算器の構成を示すブロック図である。
【図１３】第２シフト部に入力されるデータフォーマットを説明するための図である。
【図１４】本発明の演算処理装置及び従来の浮動小数点積和演算器が単精度演算をサポートする場合の出力データを説明するための図である。
【図１５】本発明の演算処理装置及び従来の浮動小数点積和演算器が倍精度演算をサポートする場合の出力データを説明するための図である。
【図１６】従来の浮動小数点積和演算器の正規化処理部及び丸め処理部の構成を示す図である。
【図１７】従来の浮動小数点積和演算器において、単精度演算をサポートする際にパイプラインステージを切ったときの動作例を示す図である。
【図１８】本発明の一実施形態としての演算処理装置のスティッキービット生成部の論理和算出部の論理和回路を示す図である。
【符号の説明】
【０１２５】
１，１００  浮動小数点積和演算器
１０  右シフト部
１１  乗算器
１２  ＣＳＡ（Carry Save Adder）
１３  絶対値加算器
２０  シフト量算出部（シフト量算出手段）
３０，３００  正規化処理部（正規化処理手段）
３１  第１シフト部（第１処理部）
３２  第２シフト部（第１処理部）
３２ａ，３３ａ，５１ａ〜５１ｃ  論理回路
３２ａ−１，３３ａ−１，５１ａ−４，５１ａ−５，５１ｂ−４，５１ｂ−５，５１ｃ−３  ＡＮＤゲート
３２ａ−２，３３ａ−２  バッファゲート
３２ａ−３，３３ａ−３，５１ａ−１〜５１ｃ−１  ＯＲゲート
３３  第３シフト部（第１処理部）
３４  第４シフト部（第１処理部）
３５  1ビットシフト部（第２処理部）
４０  丸め処理部
４１  インクリメンタ（増分手段）
４２，５０  スティッキービット生成部
４３  丸め判定部（丸め判定手段）
４４  選択回路（選択手段）
５１  論理和算出部（予測手段）
５１ａ−２，５１ａ−３，５１ｂ−２，５１ｂ−３  ＮＯＴゲート
５１ｃ−２  ＮＡＮＤゲート
５１ｄ  論理和回路
５２  生成部（生成手段）
【図１】
0004571903.tif 000002
【図２】
0004571903.tif 000003
【図３】
0004571903.tif 000004
【図４】
0004571903.tif 000005
【図５】
0004571903.tif 000006
【図６】
0004571903.tif 000007
【図７】
0004571903.tif 000008
【図８】
0004571903.tif 000009
【図９】
0004571903.tif 000010
【図１０】
0004571903.tif 000011
【図１１】
0004571903.tif 000012
【図１２】
0004571903.tif 000013
【図１３】
0004571903.tif 000014
【図１４】
0004571903.tif 000015
【図１５】
0004571903.tif 000016
【図１６】
0004571903.tif 000017
【図１７】
0004571903.tif 000018
【図１８】
0004571903.tif 000019