(57)【要約】【課題】浮動小数点演算において、キャリー伝播加算の入力から正確に先頭非ゼロ位置を検出し、正規化に要する時間を短くする。【解決手段】加算結果が正のとき、先頭の非ゼロ位置を表すことのあるステップ関数Ｐｉと、加算結果が負のとき、その加算器出力をビット反転したときの先頭の非ゼロ位置を表すことのあるステップ関数Ｎｉとを、そのビットのキャリーの値によって適宜選択して関数値とするステップ関数Ｆｉを定義する。Ｆｉにより先頭の非ゼロ位置を検出して、浮動小数点データの正規化をおこなう【選択図】        図５
2005134965.tif 000002
【特許請求の範囲】
【請求項１】
最上位ビットが符号ビットとしてデジタル表現されたデータの加算器出力を解析するための論理回路において、
符号ビットを除く各ビット毎に値を定められた第一の関数は、
そのビットおよびそのビットより上位の加算器入力の算術加算結果が、
すべて０またはすべて１のときに、そのビットの関数値を１、
その他のときには、そのビットの関数値を０と定義される関数であって、
符号ビットを除く各ビット毎に値を定められた第二の関数は、
そのビットより上位の加算器入力の算術加算結果が、
すべて１のときに、そのビットの関数値を１、
その他のときには、そのビットの関数値を０と定義される関数であって、
符号ビットを除く各ビット毎に値を定められた第三の関数は、
そのビットの下位ビットからのキャリーが、０の場合には、前記第一の関数の関数値をそのビットの関数値として選択し、１の場合には、前記第二の関数の関数値をそのビットの関数値として選択される関数であって、
前記第三の関数により、
前記加算器出力が正の場合には、先頭の非ゼロ位置を、
前記加算器出力が負の場合には、その加算器出力をビット反転したときの先頭の非ゼロ位置を検出する論理回路。
【請求項２】
最上位ビットを第０番目としたときに、第ｊ−１番目のビットに対して加算器の第一の入力と加算器の第二の入力との排他的論理和ｓｊ−１と、
第ｊ番目のビットに対して加算器の第一の入力と加算器の第二の入力との論理和のビット反転値ｚｊとに対し、
前記第一の関数の第ｉ番目のビットの関数値は、ｊ＝１からｉまでのすべての前記ｓｊ−１と前記ｚｊとの排他的論理和の論理積を取った値であることを特徴とする請求項１記載の論理回路。
【請求項３】
最上位ビットを第０番目としたときに、第ｊ−１番目のビットに対して加算器の第一の入力と加算器の第二の入力との排他的論理和ｓｊ−１と、
第ｊ番目のビットに対して加算器の第一の入力と加算器の第二の入力との論理積ｇｊとに対し、
前記第二の関数の第ｉ番目のビットの関数値は、ｊ＝１からｉまでのすべての前記ｓｊ−１と前記ｇｊとの排他的論理和の論理積を取った値であることを特徴とする請求項１記載の論理回路。
【請求項４】
２の補数表現で表された仮数部を持つ浮動小数点演算回路において、
加算結果が正のとき、下位ビットからキャリーがないときに、先頭の非ゼロ位置を表す第一のステップ関数の関数値を出力する第一の手段と、
加算結果が負のとき、下位ビットからキャリーがあるときに、その加算器出力をビット反転したときの先頭の非ゼロ位置を表す第二のステップ関数の関数値とを出力する第二の手段と、
下位ビットからのキャリーの有無によって、前記第一の手段と前記第二の手段の出力を適宜選択して関数値とする第三のステップ関数の関数値とを出力する第三の手段とを有し、
前記第三の手段によって、前記加算器出力が正の場合には、先頭の非ゼロ位置を、
前記加算器出力が負の場合には、その加算器出力をビット反転したときの先頭の非ゼロ位置を検出することを特徴とする浮動小数点演算回路。
【請求項５】
前記加算器出力が正の場合には、先頭の非ゼロ位置を、
前記加算器出力が負の場合には、その加算器出力をビット反転したときの先頭の非ゼロ位置を検出して、正規化をおこなうことを特徴とする請求項４記載の浮動小数点演算回路。
【請求項６】
２の補数表現で表された仮数部のデータによって演算をおこなう浮動小数点演算プロセッサを有するマイクロプロセッサにおいて、
前記浮動小数点演算プロセッサは、
加算結果が正のとき、下位ビットからキャリーがないときに、先頭の非ゼロ位置を表す第一のステップ関数の関数値を出力する第一の手段と、
加算結果が負のとき、下位ビットからキャリーがあるときに、その加算器出力をビット反転したときの先頭の非ゼロ位置を表す第二のステップ関数の関数値とを出力する第二の手段と、
下位ビットからのキャリーの有無によって、前記第一の手段と前記第二の手段の出力を適宜選択して関数値とする第三のステップ関数の関数値とを出力する第三の手段とを有し、
前記浮動小数点演算プロセッサは、
前記第三の手段によって、前記加算器出力が正の場合には、先頭の非ゼロ位置を、
前記加算器出力が負の場合には、その加算器出力をビット反転したときの先頭の非ゼロ位置を検出することを特徴とするマイクロプロセッサ。
【請求項７】
前記浮動小数点演算プロセッサは、
前記加算器出力が正の場合には、先頭の非ゼロ位置を、
前記加算器出力が負の場合には、その加算器出力をビット反転したときの先頭の非ゼロ位置を検出して、正規化をおこなうことを特徴とする請求項６記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点演算回路に係り、特に、浮動小数点データの正規化を高速におこなうことのできる浮動小数点演算回路とマイクロプロセッサに関する。
【背景技術】
【０００２】
浮動小数点データは、符号部、指数部、仮数部の三つの部分を持ち、演算結果を正規化して、最終的にメモリなどに格納される。正規化とは、演算結果の仮数部の絶対値の先頭の非ゼロを検出して仮数部が１で始まるようにシフトし、シフト数に応じて指数部を補正する処理である。
【０００３】
演算結果が得られてから先頭非ゼロを検出して、正規化処理をおこなうと、演算の高速化の要請に反するため、従来より、演算結果を得るためのキャリー伝播加算と同時にキャリー伝播加算の入力から先頭非ゼロを求める方式が考案されている。例えば、以下の特許文献１や特許文献２の方式である。
【０００４】
これらの方式では、検出した先頭非ゼロ位置に１ビットの誤差が生じる恐れがある。そのため、正規化前に検出した先頭非ゼロ位置を加算結果で補正するか、正規化後に最上位桁をチェックして補正する必要が生じる。
【０００５】
【特許文献１】特開平８−２１２１９２号公報
【０００６】
【特許文献２】米国特許５４９３５２０号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来技術において、先頭非ゼロ位置に１ビットの誤差が生じるのは、下位ビットからのキャリー伝播を無視して、上位ビットから先頭非ゼロ位置の検出を暫定的におこなおうとする発想によるものである。
【０００８】
したがって、キャリー伝播加算の入力から正確に先頭非ゼロ位置を検出すれば、正規化前後で従来おこなつていた１ビットの誤差の補正が不要となる。しかしながら、正確ではあっても低速な方法によれば演算速度の高速化という要請は達成されないことになる。すなわち、キャリー伝播加算終了時に正確な先頭非ゼロ位置の検出ができていれば、正規化に要する時間は、正規化シフトの時間のみに抑えることができる。
【０００９】
先頭非ゼロ位置の検出をするために、演算結果の全ビットがある定数と一致することを検出する方式も存在する。
【００１０】
しかしながら、先頭非ゼロ位置が同一である演算結果は、先頭非ゼロ位置より下位のビットが１でも０でも良く、多様なパターンが存在するため、下位の全ての多様な場合を一致検出でチェックすることは現実的でない。
【００１１】
また、別に考えられるの選択肢としては、先頭非ゼロ位置へのキャリーの有無をチェックすることである。しかしながら、先頭非ゼロ位置が判明してから、その位置へのキャリーを選択して判断していては、時間がかかり、演算の高速化はおこなえない。
【００１２】
本発明は、上記問題点を解決するためになされたもので、キャリー伝播加算の入力から正確に先頭非ゼロ位置を検出し、正規化に要する時間を短くして、浮動小数点演算の高速化を図ることにある。
【課題を解決するための手段】
【００１３】
本発明では、加算結果が正のとき、先頭の非ゼロ位置を表すことのあるステップ関数Ｐｉと、加算結果が負のとき、その加算器出力をビット反転したときの先頭の非ゼロ位置を表すことのあるステップ関数Ｎｉとを、そのビットのキャリーの値によって適宜選択して関数値とするステップ関数Ｆｉを定義する。Ｆｉにより先頭の非ゼロ位置を検出して、浮動小数点データの正規化をおこなうようにした。 ＰｉとＮｉは、１ビットの誤差が生じる可能性があるが、Ｆｉは、キャリーを考慮するので誤差は生じない。しかも、Ｆｉは、演算の最終結果を待たずとも、ビット毎の加算と並列して値を求めていくことができるので、演算の高速化の障壁となることもない。
【発明の効果】
【００１４】
本発明によれば、キャリー伝播加算の入力から正確に先頭非ゼロ位置を検出し、正規化に要する時間を短くして、浮動小数点演算の高速化された浮動小数点回路を提供することができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明に係る一実施形態を、図１ないし図１１を用いて説明する。
【００１６】
〔本発明の先頭非ゼロ位置を検出するためのステップ関数の原理〕
先ず、図１ないし図３を用いて先頭非ゼロ位置を検出するためのステップ関数の原理について説明する。
図１は、本発明の先頭非ゼロ位置を検出するためのステップ関数に関係する関数の定義式を示す図である。
図２は、加算結果が正のときの具体例を示す図である。
図３は、加算結果が負のときの具体例を示す図である。
【００１７】
以下では、加算器の入力は、２の補数表現でビッグエンディアン表示（先頭桁が０ビット目から始まる）であるものとする。すなわち、ビット０は符号ビットである、正のときには、０であり、負のときには、１である。
【００１８】
また、以下では、「先頭非ゼロ位置」を、正のときには先頭の０でないビットの位置、負のときには、符号ビット以外のビットをビット反転したときの先頭の０でないビットの位置とする。
【００１９】
図１の記法で、インデックスは、ビットｉ番目を表すものとする。
【００２０】
aiは、加算器への第一の入力であり、biは、加算器への第二の入力であり、Ｓiが、算術加算結果である。
【００２１】
そして、zi、gi、および、siは、２つの加算器入力のビットｉ番目が、それぞれ双方とも０、双方とも１、および、一方が０で他方が１であることを示す関数である。
【００２２】
また、Ciはビットｉへの下位ビットからのキャリー（桁上がり）である。
【００２３】
Ｐiは、加算結果の正の場合の先頭非ゼロ位置を検出するためのステップ関数であり、Ｎiは、加算結果の負の場合の先頭非ゼロ位置を検出するためのステップ関数であり、１から０の変化を見ることにより、先頭非ゼロ位置が検出される仕様の関数である。しかしながら、ここで、これらの関数は、場合によっては、１ビットの誤差が生じることがあることを注意する。
【００２４】
Ｐiは、図１に示されるように、ｊ＝１からｉまでのｐjすべての論理積を取った関数であり、同様に、Ｎiは、ｊ＝１からｉまでのｎjすべての論理積を取った関数であり、あるビット位置で、pi＝０、ni＝０になるとそれより下位（ビット位値が大きい）では、すべて０になる。ここで、ｐj，ｎjは、２桁づつのパターンを検査するための関数である。Ｐiは、ｉとそれより上位のビットが全て０、または、ｉとそれより上位のビットが全て１のときに、１となり、それ以外の場合には、０となる関数である。一方、Ｎiは、ｉより上位のビットが全て１のときに、１となり、それ以外の場合には、０となる関数である。
【００２５】
そして、これらの関数Ｐi，Ｎiが１から０に変わる場所で、Ｓiの先頭非ゼロ位置を検出しようとするものであるが、これらは、正確に、Ｓiの先頭非ゼロ位置を検出していることもあるが、下位の方にずれることもある。
【００２６】
これは、関数Ｐi，Ｎiが上位からパターンを検出する関数であるため、下位からのキャリーの有無によって、誤差が生じることがあるためである。従来技術では、演算の高速性を確保するため、演算結果を正規化するときには、このような関数によって暫定的な先頭非ゼロ位置を求めて、必要ならば補正するという手法を採っていた。
【００２７】
図に示した例では、正のときの図２Ｂ、図２Ｄ、図２Ｆ、負のときの図３Ｂ、図３Ｄ、図３Ｆが、先頭非ゼロ位置の検出に、誤差を生じる場合である。例えば、加算結果が正の場合には、図２Ａの例では、ビットｋで正しく、先頭非ゼロ位置の検出が求められるが、図２Ｂの例では、ビットｋで桁上がりがあり、ビットｋ−１の先頭非ゼロ位置が正しく求められていない。逆に、加算結果が負の場合には、図３Ａの例では、ビットｋで桁上がりがあり、ビットｋで正しく、先頭非ゼロ位置（反転した０のパターン）の検出が求められるが、図３Ｂの例では、ビットｋ−１の先頭非ゼロ位置が正しく求められていない。
【００２８】
そこで、本発明のステップ関数Ｆiでは、ビットｉで、キャリーがないときには、Ｐiを、キャリーがあるときには、Ｎiを選択的に取るようにする。
【００２９】
ＰiとＮiの取り方によって、１の列は、加算結果が正のときには、Ｐiが常に長く、加算結果が負のときには、Ｎiが常に長くなることが保証されている。したがって、加算結果が正のときでも、キャリーがあるときには、常に、Ｐiに対して反転しているビットＮiの方を取って、加算結果が負のときでも、キャリーがないときには、常に、Ｎiに対して反転しているビットＰiを取るようにすると、ステップ関数で従来生じていた誤差が修正される。
【００３０】
図２と図３は、具体的なビット入力の結果を示したものであり、図２が加算結果が正の場合であり、図３が加算結果が負の場合である。
【００３１】
図２Ａに示される加算結果が正の場合の第一の例では、上位ｊビットは、ａｉは１で、ｂｉは０、ビットｊは双方とも１、次のｋ−ｊ−１ビットは双方とも０、ビットｋはａｉが１で、ｂｉが０、ビットｋ＋１は双方とも０である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように、加算結果Ｓｉの先頭非ゼロ位置はｋであり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００３２】
図２Ｂに示される加算結果が正の場合の第二の例では、上位ｊビットは、ａｉは１で、ｂｉは０、ビットｊは双方とも１、次のｋ−ｊ−１ビットは双方とも０、ビットｋ＋１は双方とも１である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように、加算結果Ｓｉの先頭非ゼロ位置はｋ−１であり、ビットｋ−２からｋ−１でステップ関数Ｆｉが１から０に変化している。
【００３３】
図２Ｃに示される加算結果が正の場合の第三の例では、上位ｋ−１ビットは、ａｉは１で、ｂｉは０、ビットｋ−１は双方とも１、ビットｋはａｉが１で、ｂｉが０、ビットｋ＋１は双方とも０である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋであり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００３４】
図２Ｄに示される加算結果が正の場合の第四の例では、上位ｋ−１ビットは、ａｉは１で、ｂｉは０、ビットｋ−１は双方とも１、ビットｋは双方とも１である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋ−１であり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００３５】
図２Ｅに示される加算結果が正の場合の第五の例では、上位ｋビットは、ａｉおよびｂｉ双方とも０、ビットｋはａｉが１で、ｂｉが０、ビットｋ＋１は双方とも０である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋであり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００３６】
図２Ｆに示される加算結果が正の場合の第六の例では、上位ｋビットは、ａｉおよびｂｉ双方とも０、ビットｋは双方とも１である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋ−１であり、ビットｋ−２からｋ−１でステップ関数Ｆｉが１から０に変化している。
【００３７】
図３Ａに示される加算結果が負の場合の第一の例では、上位ｊビットは、ａｉは１で、ｂｉは０、ビットｊは双方とも０、次のｋ−ｊ−１ビットは双方とも１、ビットｋはａｉが１で、ｂｉが０、ビットｋ＋１は双方とも１である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋであり（加算結果が負であることに注意）、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００３８】
図３Ｂに示される加算結果が負の場合の第二の例では、上位ｊビットは、ａｉは１で、ｂｉは０、ビットｊは双方とも０、次のｋ−ｊ−１ビットは双方とも１、ビットｋは双方とも０である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋ−１であり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００３９】
図３Ｃに示される加算結果が負の場合の第三の例では、上位ｋ−１ビットは、ａｉは１で、ｂｉは０、ビットｋ−１は双方とも０、ビットｋはａｉが１で、ｂｉが０、ビットｋ＋１は双方とも１である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋであり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００４０】
図３Ｄに示される加算結果が負の場合の第一の例では、上位ｋ−１ビットは、ａｉは１で、ｂｉは０、ビットｋは双方とも０、ビットｋ＋１は双方とも０である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋ−１であり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００４１】
図３Ｅに示される加算結果が負の場合の第四の例では、上位ｋビットは、ａｉおよびｂｉ双方とも１、ビットｋはａｉが１で、ｂｉが０、ビットｋ＋１は双方とも１である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋであり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００４２】
図３Ｆに示される加算結果が負の場合の第五の例では、上位ｋビットは、ａｉおよびｂｉ双方とも１、ビットｋは双方とも０である。ビットｋ＋１より下位は任意の値でよい。このとき、図のように加算結果Ｓｉの先頭非ゼロ位置はｋ−１であり、ビットｋ−１からｋでステップ関数Ｆｉが１から０に変化している。
【００４３】
以上の例から理解できるように、加算結果が正の場合に、下位ビットからのキャリーがあるときには、加算結果Ｓｉとステップ関数Ｐｉには、先頭非ゼロ位置の検出に１ビットのずれが生じ、逆に、加算結果が負の場合に、下位ビットからのキャリーがないときには、加算結果Ｓｉとステップ関数Ｎｉには、先頭非ゼロ位置の検出に１ビットのずれが生じる。
【００４４】
したがって、下位からのキャリーに従って、ステップ関数Ｐｉとステップ関数Ｎｉを選択して、新しいステップ関数Ｆｉを作れば、加算結果が正の場合であれ負の場合であれ、正確な先頭非ゼロ位置を表すことができるというのが本発明の発想である。
【００４５】
実際、図２Ｂ、図２Ｄ、図２Ｆの場合に、Ｐｉにより先頭非ゼロ位置を検出するときに、１ビットの誤差が生じるにもかかわらず、Ｆｉは正確に先頭非ゼロ位置を検出することができる。図３Ｂ、図３Ｄ、図３Ｆの場合にも同様に、Ｎｉにより先頭非ゼロ位置を検出するときに、１ビットの誤差が生じるにもかかわらず、Ｆｉは正確に先頭非ゼロ位置を検出することができるには１ビットの誤差があるにもかかわらず、正確に先頭非ゼロ位置を検出することができる。
【００４６】
〔浮動小数点演算回路を有するマイクロプロセッサの構成〕
次に、図４を用いて本発明の浮動小数点演算がおこなわれるマイクロプロセッサの構成について説明する。
図４は、一般的な浮動小数点演算をおこなうことのできるマイクロプロセッサのブロック図である。
【００４７】
マイクロプロセッサ００は、コア０１と周辺モジュール０２とメモリコントローラ３０が内部バス２０を介して結合された形態である。また、外部バス４０により、ＲＡＭ５０に接続されている。
【００４８】
コア０１は、ＣＰＵ１０、ＦＰＵ１１、命令キャッシュ１２、データキャッシュ１３を含んでいる。
【００４９】
ＣＰＵ１０は、プログラムの命令を実行し、メモリ上のデータをアクセスする。ＦＰＵ１１は、本発明の浮動小数点演算をおこなうための回路である。命令キャッシュ１２は、命令用のキャッシュメモリであり、データキャッシュ１３は、データ用のキャッシュメモリである。ＣＰＵ１０がＲＡＭ５０上のプログラムとデータをアクセスするときには、メモリコントローラ３０を介して命令キャッシュ１２とデータキャッシュ１３に取り込まれる。
【００５０】
周辺モジュール０２は、タイマー、シリアルインターフェース、割り込み、ＤＭＡ（Direct Memory Access）などの機能を含む周辺機器を制御するための回路である。
【００５１】
〔浮動小数点演算回路の構成と動作〕
次に、図５を用いて本発明に係る浮動小数点演算回路の構成と動作について説明する。
図５は、本発明に係る浮動小数点演算回路の浮動小数点積和乗算器の構成を示すブロック図である。
【００５２】
この浮動小数点演算回路は、被乗数Ｘと乗数Ｙの積に加数Ｚを加算する積和演算をおこなう浮動小数点積和乗算器である。
【００５３】
加数Ｚを０．０とすれば乗算器に、また、乗数Ｙを１．０とすれば加算器にもなる。積和演算器は、乗算アレイＡＲＹ、指数差生成回路ＥＸＰＤ、指数部生成回路ＥＸＰＧ、桁合せシフタＡＬＮ、キャリー保存加算器ＣＳＡ、先頭非ゼロ位置検出およびキャリー伝播加算器ＬＮＺＣＰＡ、仮数部正規化シフタＮＲＭ、指数部正規化回路ＥＸＰＮ、および、丸め回路ＲＮＤから成る。
【００５４】
先ず、乗算アレイＡＲＹにおいて被乗数Ｘと乗数Ｙの仮数部の積をキャリー保存形式で生成し桁合せシフタＡＬＮに出力する。同時に、指数差生成回路ＥＸＰＤは積と加数Ｚとの指数差を求めてシフタＡＬＮに出力する。さらに、指数部生成回路ＥＸＰＧは、積または加数Ｚの指数部うち大きい方を演算結果の正規化前指数部として指数部正規化回路ＥＸＰＮに出力する。
【００５５】
桁合せシフタＡＬＮは、乗算アレイＡＲＹ出力および加数Ｚを指数差生成回路ＥＸＰＤからの指数差によって桁合せし、キャリー保存加算器ＣＳＡに出力する。キャリー保存加算器ＣＳＡは、キャリー保存形式の積の２項と加数Ｚの３項を加算し、キャリー保存形式の２項ａｉおよびｂｉとして、先頭非ゼロ位置検出およびキャリー伝播加算器ＬＮＺＣＰＡに出力する。
【００５６】
先頭非ゼロ検出およびキャリー伝播加算器ＬＮＺＣＰＡは本発明によってキャリー伝播加算器入力ａｉおよびｂｉから、本発明の正確に先頭非ゼロ位置を検出できるステップ関数Ｆｉおよびキャリー伝播加算結果Ｓｉを生成し、仮数部正規化シフタＮＲＭおよび指数部正規化回路ＥＸＰＮに出力する。
【００５７】
仮数部正規化シフタＮＲＭはキャリー伝播加算結果Ｓｉを正確な先頭非ゼロ位置関数Ｆｉによってシフトして正規化し、正規化後仮数部として丸め回路ＲＮＤに出力する。指数部正規化回路ＥＸＰＮは、本発明の正確に先頭非ゼロ位置を検出できるステップによって正規化前指数部を正規化し、正規化後指数部として丸め回路ＲＮＤに出力する。
【００５８】
丸め回路ＲＮＤは正規化後仮数部を丸めて、必要に応じて正規化後指数部を補正して、さらに必要に応じて無限大、ゼロ、非数等に演算結果を差し替えて、浮動小数点積和演算結果Ｒとして出力する。
【００５９】
本発明のステップ関数Ｆｉは、キャリー伝播加算結果Ｓｉと並行してビット毎に演算していけるので、キャリー伝播加算器ＬＮＺＣＰＡにおける先頭非ゼロ検出が高速になり、正規化のための遅延時間を最小限に抑えることができる。
【００６０】
しかも、正確に先頭非ゼロ位置検出がおこなえるので、正規化の補正が不要となって、仮数部正規化シフタＮＲＭ、指数部正規化回路ＥＸＰＮ、および、丸め回路ＲＮＤの構造も簡素化され、演算も高速におこなえるようになる。
【００６１】
〔論理回路での実現〕
次に、図６および図１１を用いて本発明の浮動小数点演算に用いる関数の論理回路の実現例について説明する。
図６は、zi、giおよびsiを求める論理回路の例を示す図である。
図７は、Ｃiを求める論理回路の例を示す図である。
図８は、Ｓiを求める論理回路の例を示す図である。
図９は、ｐiおよびｎiを求める論理回路の例を示す図である。
図１０は、ＰiおよびＮiを求める論理回路の例を示す図である。
図１１は、Ｆiを求める論理回路の例を示す図である。
【００６２】
ここで、加算器入力ａi、ｂiは、８ビットであるものとする。
【００６３】
先ず、図６の論理回路により、zi、giの論理反転、および、siを生成する。
【００６４】
さらに、図７の論理回路により、ziおよびgiの論理反転からキャリーＣiを、また、図８の論理回路のより、siおよびＣiから加算結果Ｓiを生成する。
【００６５】
そして、図９に示される論理回路により、ｐiおよびｎｉを生成し、図１０Ａに示される論理回路により、ＰｉおよびＮｉを生成する。二進木構造にすることによりビット数の対数のオーダーでｐｉおよびｎｉからＰｉおよびＮｉを生成することができる。
【００６６】
そして、最後に、図１１に示される論理回路により、Ｐｉ、ＮｉおよびＣｉからステップ関数Ｆｉを生成する。この論理回路は、セレクタであり、Ｃｉ＝０のとき、Ｐｉを出力し、Ｃｉ＝１のとき、Ｎｉを出力する。
【００６７】
なお、図１１のセレクタ入力がＰｉとＮｉの反転となっているのは、回路の実現上ＮＡＮＤ回路とＮＯＲ回路を使っているためである。
【００６８】
上記の図１０Ａに示される論理回路は、単純な二進木構造であるため、全ビットのＰｉおよびＮｉを生成する際に出力ファンアウトの多いゲートができてしまう。この問題はビット幅の増大とともに深刻になる。図１０Ｂのように二進木構造を多重化すると出力ファンアウトを最大２に抑えることが可能となり、ＰｉおよびＮｉの生成が高速化される。
【００６９】
また、キャリーＣｉを生成する論理回路は、図７のものに限定されない。加算の高速化方式は長年にわたって研究されている。特にキャリーＣｉの高速生成方式はそのキーとなる技術であり、様々な論理回路が提案されている。本発明に使用するキャリーが加算結果を生成するためのキャリーと同一であるか、同等の速度で生成されるのであれば、排他的論理和とセレクタの速度は同等であるため、通常はステップ関数Ｆｉの生成が加算結果Ｓｉの生成より遅くなることはない。
【００７０】
さらに、ＰｉおよびＮｉを生成する論理回路も図１０Ａや図１０Ｂのものに限定されない。上位から逐次論理積をとる最もゲート数が少なく低速な方式から図１０Ｂの論理回路までの様々な中間方式が考えられる。加算器のキャリーＣｉ生成速度より高速であっても、Ｆｉの生成がキャリーＣｉネックとなってしまい、Ｆｉの生成速度に寄与しないので、加算器の方式に合わせて実現方式を選択すべきである。
【図面の簡単な説明】
【００７１】
【図１】本発明の先頭非ゼロ位置を検出するためのステップ関数に関係する関数の定義式を示す図である。
【図２Ａ】加算結果が正のときの加算演算の具体例を示す図である（第一の例）。
【図２Ｂ】加算結果が正のときの加算演算の具体例を示す図である（第二の例）。
【図２Ｃ】加算結果が正のときの加算演算の具体例を示す図である（第三の例）。
【図２Ｄ】加算結果が正のときの加算演算の具体例を示す図である（第四の例）。
【図２Ｅ】加算結果が正のときの加算演算の具体例を示す図である（第五の例）。
【図２Ｆ】加算結果が正のときの加算演算の具体例を示す図である（第六の例）。
【図３Ａ】加算結果が負のときの加算演算の具体例を示す図である（第一の例）。
【図３Ｂ】加算結果が負のときの加算演算の具体例を示す図である（第二の例）。
【図３Ｃ】加算結果が負のときの加算演算の具体例を示す図である（第三の例）。
【図３Ｄ】加算結果が負のときの加算演算の具体例を示す図である（第四の例）。
【図３Ｅ】加算結果が負のときの加算演算の具体例を示す図である（第五の例）。
【図３Ｆ】加算結果が負のときの加算演算の具体例を示す図である（第六の例）。
【図４】一般的な浮動小数点演算をおこなうことのできるマイクロプロセッサのブロック図である。
【図５】本発明に係る浮動小数点演算回路の浮動小数点積和乗算器の構成を示すブロック図である。
【図６】zi、giおよびsiを求める論理回路の例を示す図である。
【図７】Ｃiを求める論理回路の例を示す図である。
【図８】Ｓiを求める論理回路の例を示す図である。
【図９】ｐiおよびｎiを求める論理回路の例を示す図である。
【図１０Ａ】ＰiおよびＮiを求める論理回路の例を示す図である（その一）。
【図１０Ｂ】ＰiおよびＮiを求める論理回路の例を示す図である（その一）。
【図１１】Ｆiを求める論理回路の例を示す図である。
【図１】
2005134965.tif 000003
【図２Ａ】
2005134965.tif 000004
【図２Ｂ】
2005134965.tif 000005
【図２Ｃ】
2005134965.tif 000006
【図２Ｄ】
2005134965.tif 000007
【図２Ｅ】
2005134965.tif 000008
【図２Ｆ】
2005134965.tif 000009
【図３Ａ】
2005134965.tif 000010
【図３Ｂ】
2005134965.tif 000011
【図３Ｃ】
2005134965.tif 000012
【図３Ｄ】
2005134965.tif 000013
【図３Ｅ】
2005134965.tif 000014
【図３Ｆ】
2005134965.tif 000015
【図４】
2005134965.tif 000016
【図５】
2005134965.tif 000017
【図６】
2005134965.tif 000018
【図７】
2005134965.tif 000019
【図８】
2005134965.tif 000020
【図９】
2005134965.tif 000021
【図１０Ａ】
2005134965.tif 000022
【図１０Ｂ】
2005134965.tif 000023
【図１１】
2005134965.tif 000024