(57)【要約】【課題】演算ＴＡＴを短縮して、性能向上と消費電力低減効果を実現できる浮動小数点除算器を提供する。【解決手段】浮動小数点除算器は、２進数の減算シフト型である。この浮動小数点除算器は、仮数繰り返し処理部２５０と、演算実行制御部２００とを具備する。仮数繰り返し処理部２５０は、入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成する。演算実行制御部２００は、部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定する。仮数繰り返し処理部２５０は、演算実行制御部２００の判定結果に基づいて、減算シフト処理の１回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ２倍の商生成及び部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減する。【選択図】図５
2011118633.tif 000002
【特許請求の範囲】
【請求項１】
２進数の減算シフト型浮動小数点除算器であって、
入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成する仮数繰り返し処理部と、
前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定する演算実行制御部と
を具備し、
前記仮数繰り返し処理部は、前記演算実行制御部の判定結果に基づいて、前記減算シフト処理の１回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ２倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減する
浮動小数点除算器。
【請求項２】
請求項１に記載の浮動小数点除算器において、
前記演算実行制御部は、前記減算シフト処理が終了して丸め処理に移行したタイミングで、固定時間経過後に演算実行が終了することを予告する信号を、演算器外部に対して通知する
浮動小数点除算器。
【請求項３】
請求項２に記載の浮動小数点除算器において、
前記部分剰余に関して、全ビット値が０になったかどうかを判定する判定部を更に具備し、
前記演算実行制御部は、前記判定部の判定結果に基づいて、前記部分剰余の全ビット値が０になった場合、前記減算シフト処理を中止して丸め処理に移行する
浮動小数点除算器。
【請求項４】
請求項２に記載の浮動小数点除算器において、
前記入力オペランドが非数か否かを検出する被数検出部を更に具備し、
前記演算実行制御部は、前記入力オペランドのどちらか一方でも非数であることが判明した場合、前記減算シフト処理を中止して丸め処理に移行する
浮動小数点除算器。
【請求項５】
請求項１乃至４のいずれか一項に記載の浮動小数点除算器において、
前記仮数繰り返し処理部は、
前記部分余剰を１ビット左シフトして出力する１ビット左シフタと、
前記部分余剰を２ビット左シフトして出力する２ビット左シフタと、
選択信号に基づいて、前記被除数の仮数、前記１ビット左シフタの出力した前記部分余剰、及び前記２ビット左シフタの出力した前記部分余剰のいずれかを第１の部分剰余として選択する第１のセレクタと、
前記第１の部分余剰と前記入力オペランドの除数とに基づいて減算処理を実行して、桁上げビットと減算結果とを出力する減算器と、
前記桁上げビットに基づいて、前記第１の部分余剰及び前記減算結果のいずれか一方を、新たに前記部分余剰として、前記１ビット左シフタと、前記２ビット左シフタと、前記演算実行制御部に出力する第２のセレクタと
を備え、
前記仮数繰り返し処理部は、前記部分余剰に基づいて、演算実行処理で規定する基数の値により一意に決定される前記特定ビット位置のビット値を前記演算実行制御部に送出し、
前記演算実行制御部は、前記前記特定ビット位置のビット値に基づいて、前記選択信号を生成し、前記第１のセレクタへ出力する
浮動小数点除算器。
【請求項６】
請求項１乃至４のいずれか一項に記載の浮動小数点除算器において、
前記仮数繰り返し処理部は、
前記部分余剰を２ビット左シフトして出力する２ビット左シフタと、
前記部分余剰を４ビット左シフトして出力する４ビット左シフタと、
選択信号に基づいて、前記被除数の仮数、前記２ビット左シフタの出力した前記部分余剰、及び前記４ビット左シフタの出力した前記部分余剰のいずれかを第１の部分剰余として選択する第１のセレクタと、
前記第１の部分余剰と前記入力オペランドの除数とに基づいて減算処理を実行して、第１の桁上げビットと第１の減算結果とを出力する第１の減算器と、
前記第１の部分余剰と前記入力オペランドの除数の２倍の値とに基づいて減算処理を実行して、第２の桁上げビットと第２の減算結果とを出力する第２の減算器と、
前記第１の部分余剰と前記入力オペランドの除数の３倍の値とに基づいて減算処理を実行して、第３の桁上げビットと第３の減算結果とを出力する第３の減算器と、
前記第１の桁上げビットと第２の桁上げビットと第３の桁上げビットとに基づいて、前記第１の部分余剰、前記第１の減算結果、第２の減算結果、及び第３の演算結果のいずれか一つを、新たに前記部分余剰として、前記２ビット左シフタと、前記４ビット左シフタと、前記演算実行制御部に出力する第２のセレクタと、
を備え、
前記仮数繰り返し処理部は、前記部分余剰に基づいて、演算実行処理で規定する基数の値により一意に決定される前記特定ビット位置のビット値を前記演算実行制御部に送出し、
前記演算実行制御部は、前記前記特定ビット位置のビット値に基づいて、前記選択信号を生成し、前記第１のセレクタへ出力する
浮動小数点除算器。
【請求項７】
請求項１乃至６のいずれか一項に記載の浮動小数点除算器を具備する
情報処理装置。
【請求項８】
２進数の減算シフト型浮動小数点除算方法であって、
入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成するステップと、
前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定するステップと
前記ビット値の判定結果に基づいて、前記減算シフト処理の１回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ２倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減するステップと
を具備する
浮動小数点除算方法。
【請求項９】
請求項８に記載の浮動小数点除算方法において、
前記減算シフト処理が終了して丸め処理に移行したタイミングで、固定時間経過後に演算実行が終了することを予告する信号を、演算器外部に対して通知するステップを更に具備する
浮動小数点除算方法。
【請求項１０】
請求項９に記載の浮動小数点除算方法において、
前記部分剰余に関して、全ビット値が０か否かを判定するステップと、
前記０か否かの判定結果に基づいて、前記部分剰余の全ビット値が０になった場合、前記減算シフト処理を中止して丸め処理に移行するステップと
を更に具備する
浮動小数点除算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点除算器、及びそれを用いた情報処理装置に関し、２進数浮動小数点数に対する減算シフト型浮動小数点除算器、及びそれを用いた情報処理装置に関する。
【背景技術】
【０００２】
浮動小数点除算器、例えば、ＩＥＥＥ−７５４の２進数浮動小数点数演算規格に準拠した減算シフト型浮動小数点除算器が知られている。ここで、減算シフト型除算とは、一般的に以下の漸化式で表される。
Ｒ（ｊ＋１）＝ｒ×Ｒ（ｊ）−ｑ（ｊ）×Ｄ  ・・・（１）
ここで、ｊは漸化式の指数、ｒは基数、Ｄは除数、ｑ（ｊ）は商の小数点以下ｊ桁目、Ｒ（ｊ）は前回（ｊ回目）に算出された部分剰余、Ｒ（ｊ＋１）は今回算出される部分剰余である。ここで、部分剰余Ｒ（ｊ＋１）と除数Ｄの間には、以下の制約が存在する。
０≦Ｒ（ｊ＋１）＜Ｄ  ・・・（２）
上記（２）式を満たすように商ｑ（ｊ）を定めて、（１）式を実行して部分剰余Ｒ（ｊ＋１）を求めるのが減算シフト型除算の実行手順である。
【０００３】
例えば、基数ｒを２とすると、この実行手順における商決定は、以下のように表すことができる。
Ｄ≦２×Ｒ（ｊ）        →  ｑ（ｊ）＝１
０≦２×Ｒ（ｊ）＜Ｄ    →  ｑ（ｊ）＝０
このことから、（１）式も考慮すると、基数２の減算シフト型除算の実行手順としては、以下のようにまとめることができる。  
２×Ｒ（ｊ）−Ｄ≧０  →  ｑ（ｊ）＝１、Ｒ（ｊ＋１）＝２×Ｒ（ｊ）−Ｄ
２×Ｒ（ｊ）−Ｄ＜０  →  ｑ（ｊ）＝０、Ｒ（ｊ＋１）＝２×Ｒ（ｊ）
【０００４】
以上を踏まえて、従来の基数２の２進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の動作について説明する。図１は、従来の基数２の２進数減算シフト型浮動小数点除算器の仮数繰り返し処理部の構成を示すブロック図である。この浮動小数点除算器に入力された２つの浮動小数点オペランド（Ｙ：被除数、Ｚ：除数）は、それぞれレジスタ（ＦＦ）で受信される。その後、その２つの浮動小数点オペランドは、それぞれＵｎｐａｃｋｅｒ６４０、６４１と呼ばれるデータ整列器に入力され、仮数部のみが取り出されると共に、符号ビットや隠しビットの補完、単精度浮動小数点と倍精度浮動小数点の小数点位置合わせなどの処理が行われる。一般的にこれらの処理は、仮数前処理と呼ばれる。
【０００５】
被除数ＹのＵｎｐａｃｋｅｒ６４０を通過したデータは、演算実行制御シーケンサ６００から出力される選択制御信号６０５で制御される第１のセレクタ６１５に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第１のセレクタ６１５はＵｎｐａｃｋｅｒ６４０の出力データ側を選択する。第１のセレクタを通過したデータはレジスタ６２０に保持される。一方、除数ＺのＵｎｐａｃｋｅｒ６４１を通過したデータは、そのままレジスタ６２１に保持される。この除数のレジスタ６２１は、演算実行中は常に変わらず除数の値を保持し続ける。
【０００６】
被除数Ｙのレジスタ６２０と除数Ｚのレジスタ６２１のデータは、減算器６３０において減算処理が行われる。減算器６３０から出力された桁上げビットはインバータ６３４を通って第２のセレクタ６３５へ選択制御信号として入力される。この第２のセレクタ６３５は、減算器６３０の出力と被除数のレジスタ６２０の出力のいずれかを選択出力する。この第２のセレクタ６３５の出力は、１ｂｉｔ左シフタ６１０を通って、第１のセレクタ６１５のもう一方の入力となる。演算実行が開始されて２回目以降の仮数減算シフト処理の時は、第１のセレクタ６１５は常に１ｂｉｔ左シフタ６１０の出力を選択し続けることになり、この第１のセレクタ６１５を通過したデータは部分剰余としてレジスタ６２０に保持される。以上の構成要素を含む処理部が、仮数繰り返し処理部６５０である。
【０００７】
レジスタ６２０に保持される部分剰余は１ｂｉｔ左シフタ６１０によって“２×Ｒ（ｊ）”を保持しており、減算器６３０において“２×Ｒ（ｊ）−Ｄ”が求められる。減算器６３０の桁上げ出力は、“２×Ｒ（ｊ）−Ｄ”の結果に対する符号ビットに相当し、この値がビット値０の場合は“２×Ｒ（ｊ）−Ｄ≧０”であることを示しているため、インバータ６３４で反転した結果を除算結果の商とするとともに、第２のセレクタ６３５で減算器６３０の出力である“２×Ｒ（ｊ）−Ｄ”を次回の部分剰余として選択する。一方、符号ビットがビット値１の場合は“２×Ｒ（ｊ）−Ｄ＜０”であることを示しているため、インバータ６３４で反転した結果を除算結果の商とするとともに、第２のセレクタ６３５で部分剰余を保持したレジスタ６２０の出力である“２×Ｒ（ｊ）”を次回の部分剰余として選択する。以上により、この仮数繰り返し処理部６５０において、前述の基数２の減算シフト型除算の実行手順を実現していることが判る。
【０００８】
減算器６３０の桁上げ出力をインバータ６３４で反転した商は、演算実行制御シーケンサ６００から出力されるストローブ信号６０６に従い、１ｂｉｔずつ商レジスタ６８０に保持されていく。また、第２のセレクタ６３５の出力は、演算実行制御シーケンサ６００から出力されるストローブ信号に従い、全ての仮数減算シフト処理が終了した時に、最終的な剰余値として剰余レジスタ６８１に保持される。商レジスタ６８０と剰余レジスタ６８１の出力は、丸め処理部６６０に送出され、丸め処理を実行される。
【０００９】
次に、図１の２進数減算シフト型浮動小数点除算器の仮数繰り返し処理部６５０の動作をについて説明する。図２は、図１の２進数減算シフト型浮動小数点除算器の仮数繰り返し処理部６５０の動作を示すフローチャートである。なお、ここに示す演算制御動作は、一般的には図６の演算実行制御シーケンサ６００においてハードウェアとして実装され、フローチャートにおける各ステップの動作結果は、仮数繰り返し処理部６５０に対する制御信号として出力されることになる。
【００１０】
演算実行開始（ＳＴＥＰ７００）により、まず仮数の減算シフト処理回数の初期値が設定される（ＳＴＥＰ７１０）。この時の初期値は、演算データが単精度浮動小数点データ（３２ｂｉｔ）の場合は２７回、倍精度浮動小数点データ（６４ｂｉｔ）の場合は５６回が一般的である。次に、仮数繰り返し処理を実行する（ＳＴＥＰ７２０）。これは、仮数の減算シフト処理により、商１ｂｉｔと部分剰余を求める処理である。続いて、仮数繰り返し処理（ＳＴＥＰ７２０）の終了後に、仮数の減算シフト処理回数が０になっているかどうかを判定する（ＳＴＥＰ７３０）。ここで、減算シフト処理回数が０になっていれば（ＳＴＥＰ７３０：Ｙｅｓ）、丸め処理を行い（ＳＴＥＰ７８０）、その後、演算実行終了となる（ＳＴＥＰ７９０）。一方、減算シフト処理回数が０になっていなければ（ＳＴＥＰ７３０：Ｎｏ）、仮数繰り返し処理数を−１とし（ＳＴＥＰ７６０）、部分剰余を１ｂｉｔ分左シフト（部分剰余を２倍にする）して（ＳＴＥＰ７６５）、仮数繰り返し処理（ＳＴＥＰ７２０）に戻る。
【００１１】
関連する技術として特許第２８３５１５３号公報（米国特許ＵＳ５１０５３７８（Ａ））に、冗長２進数を用いた減算シフト型高基数除算器の基本構成に関する技術が開示されている。この特許第２８３５１５３号では、この高基数除算器がニュートンラプソン法のような収束型アルゴリズムに対して有利であることを提示している。この高基数除算器を用いることにより、減算シフト処理回数（演算ＴＡＴの大部分を占める）は基数と求める演算精度によって一意に決定される。
【００１２】
また、特開昭５６−１０３７４０号公報に、１０進除算装置が開示されている。この１０進除算装置は、演算対象データをメモリから読み込み減算シフト型の除算処理を実行中に、剰余がゼロになったかどうかを判定して、剰余がゼロになった場合には商計算を停止して、商の未算出分の桁に対してゼロディジットを発生させて、商計算結果をメモリに書き込む。
【００１３】
また、特開２０００−３４７８３６号公報（米国特許ＵＳ６６２５６３３（Ｂ１））に、高次基数除算器およびその方法が開示されている。この高次基数除算器は、除数Ｂの倍数Ｂ、２Ｂ、３Ｂと剰余Ｒとを２つの比較器、及び３入力比較器で並行して比較し、１度に商を２ビットずつ求めて基数４の除算を行う。すなわち、引き戻し法による高基数除算器において、例えば基数４の時に、通常は除数Ｂと剰余Ｒとの間でＲ−３Ｂ／Ｒ−２Ｂ／Ｒ−Ｂの３つの減算処理を行い、その符号ビットで商と次の剰余と求めている。
【００１４】
また、特開２００３−０８４９６９号公報（米国出願ＵＳ２００３０５０９４８（Ａ１））に浮動小数点剰余演算器、情報処理装置及びコンピュータプログラムが開示されている。この浮動小数点剰余演算器は、浮動小数点形式の浮動小数点剰余演算において、剰余を求める際に必要な（被除数−整数商×除数）なる浮動小数点積和演算を、浮動小数点剰余演算の特徴を利用して従来の手法に比べて簡単な回路で剰余を求めるように構成する。すなわち、浮動小数点剰余演算器において、２つの浮動小数点数Ａ、Ｂに対して、浮動小数点除算器で求めた商を整数Ｃへと丸め、その結果からＡ−Ｂ×Ｃを実行して、２つの浮動小数点数Ａ、Ｂの剰余を求める。
【００１５】
また、特開平０６−０７５７５２号公報（米国特許ＵＳ５３４３４１３（Ａ））に、先行１予測装置及び浮動小数点加減算装置が開示されている。この先行１予測装置は、桁落ち量予測装置で、桁落ち量を１ビットの誤差範囲で予測する。ボロウ伝搬装置で最下位ビット側からのボロウの伝搬を伝える。セレクタでボロウ伝搬装置の情報を使って、桁落ち量予測装置の出力を正規化に必要な正確なビットシフト量に修正し出力する。すなわち、浮動小数点加減算器における、仮数桁落ち／正規化処理での桁落ち量予測（ＬＺＡ）で、通常１ビットの予測誤差が発生するため、丸め処理においてこの予測誤差に対する補正（仮数の１ビットアライン）が行われるが、この予測誤差を発生しない桁落ち量予測回路に関する。
【００１６】
更に、特開平０９−２２３０１６号公報（米国特許ＵＳ５８３８６０１（Ａ））に、演算処理方法及び演算処理装置が開示されている。この演算処理方法は、演算処理により得られる演算結果に演算例外が発生する可能性の有無を演算処理の途中で判定し、前記可能性があると判定された場合には命令制御部への演算終了信号の送出を抑制し、前記可能性のある演算処理を専用演算手段とは別の演算手段により実行した後、その演算処理についての演算終了信号を命令制御部へ送出する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特許第２８３５１５３号公報
【特許文献２】特開昭５６−１０３７４０号公報
【特許文献３】特開２０００−３４７８３６号公報
【特許文献４】特開２００３−０８４９６９号公報
【特許文献５】特開平０６−０７５７５２号公報
【特許文献６】特開平０９−２２３０１６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、従来の２進数減算シフト型浮動小数点除算器においては、次のような課題がある。
第１の課題は、除算結果を得るために、非常に長い演算ＴＡＴ（Ｔｕｒｎ  Ａｒｏｕｎｄ  Ｔｉｍｅ）が必要であるということである。その第１の理由は以下のとおりである。浮動小数点除算器の場合、倍精度の演算結果が必要な場合には丸め処理も含めて５６ｂｉｔの商が必要になる。しかし、図１に示したような基数２の減算シフト型浮動小数点除算器では、減算シフト１回に付き１ｂｉｔの商しか求めることができない。そのため、５６ｂｉｔの商を得るためには５６回の減算シフト処理を繰り返す必要がある。また、その第２の理由は以下とおりである。この減算シフト処理には、５６ｂｉｔの部分剰余から５６ｂｉｔの除数を減算して、その結果の符合から減算結果と何も処理をしていない部分剰余のいずれかを、次回の減算シフト処理のための部分剰余として選択する処理が含まれている。そのため、この処理が動作周波数を決定するためのクリティカルパスになっている。
【００１９】
一方、このようなクリティカルパスの遅延時間を短縮して、減算シフト処理を１クロックサイクルに複数実行することで演算ＴＡＴを改善する手法として、冗長２進数（ＳＤ数：Ｓｉｇｎｅｄ  Ｄｅｇｉｔ）を使用する方法がある。図３Ａ及び図３Ｂは、このような２進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の構成を示すブロック図である。この浮動小数点除算器に入力された２つの浮動小数点オペランド（Ｙ：被除数、Ｚ：除数）は、それぞれレジスタ（ＦＦ）で受信される。その後、その２つの浮動小数点オペランドは、それぞれＵｎｐａｃｋｅｒ８４０、８４１と呼ばれるデータ整列器に入力される。被除数ＹのＵｎｐａｃｋｅｒ８４０を通過したデータは、演算実行制御シーケンサ８００から出力される選択制御信号８０５で制御される第１のセレクタ８１６に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第１のセレクタ８１６はＵｎｐａｃｋｅｒ８４０出力データ側を選択する。第１のセレクタ８１６を通過したデータはレジスタ８２１に冗長２進数のＳＵＭデジットとして保持される。一方、除数ＺのＵｎｐａｃｋｅｒ８４１を通過したデータは、そのままレジスタ８２２に保持される。この除数Ｚのレジスタ８２２は、演算実行中は常に変わらず除数Ｚの値を保持し続ける。これとは別に、演算実行制御シーケンサ８００から出力される選択制御信号８０５により、演算実行が開始されて最初の仮数減算シフト処理の時のみ、全ビット値が１のデータを入力として選択する第２のセレクタ８１５がある。第２のセレクタ８１５を通過したデータはレジスタ８２０に冗長２進数のＳＩＧＮデジットとして保持される。
【００２０】
被除数ＹのＳＩＧＮデジットレジスタ８２０とＳＵＭデジットレジスタ８２１のデータは、それぞれ１ｂｉｔ左シフタ８１０、８１１を通って２倍数とされた後、除数Ｚのレジスタ８２２のデータに対して、２つの冗長２進数加算器８３０、８３１において“２×Ｒ（ｊ）＋Ｄ”と“２×Ｒ（ｊ）−Ｄ”が算出される。一方、１ｂｉｔ左シフタ８１０、８１１を通って２倍数となった被除数ＹのＳＩＧＮデジットとＳＵＭデジットの上位３ｂｉｔ（基数が２の場合であり、基数が４以上の場合は更に多くのビット数が必要）は冗長２進数→通常２進数変換器８３３により通常２進数になった後、商決定論理器８３４により商１ｂｉｔの冗長２進数表現でのＳＩＧＮビットとＳＵＭビットが出力される。また、この商決定論理器８３４で生成される商は＋１、０、−１の３値を取り得ることから、次回の減算シフト処理に対する部分剰余のＳＩＧＮデジットとＳＵＭデジットのセレクタ８３５、８３６は、“２×Ｒ（ｊ）＋Ｄ”、“２×Ｒ（ｊ）”、“２×Ｒ（ｊ）−Ｄ”の３つからそれぞれ選択される。以上の構成要素を含む処理部が、第１の仮数繰り返し処理部８５０である。
【００２１】
同様にして、第１の仮数繰り返し処理部８５０からの部分剰余のＳＩＧＮデジットとＳＵＭデジットを入力として、それらがそれぞれ１ｂｉｔ左シフタ８７０、８７１を通って２つの冗長２進数加算器８９０、８９１に入力される。それと共に、部分剰余のＳＩＧＮデジットとＳＵＭデジットの上位３ｂｉｔは冗長２進数→通常２進数変換器８９３で通常２進数に変換された後、商決定論理器８９４により商１ｂｉｔの冗長２進数表現でのＳＩＧＮビットとＳＵＭビットが出力されて、次回の減算シフト処理に対する部分剰余のＳＩＧＮデジットとＳＵＭデジットがセレクタ８９５、８９６により選択される。以上の構成要素を含む処理部が、第２の仮数繰り返し処理部８５１がある。
【００２２】
ここで、第１の仮数繰り返し処理部８５０と第２の仮数繰り返し処理部８５１とから出力された、それぞれ各１ｂｉｔの商の冗長２進数表現でのＳＩＧＮビットとＳＵＭビットは、演算実行制御シーケンサ８００から出力されるストローブ信号８０６に従い、２ｂｉｔずつ商のＳＩＧＮデジットレジスタ８８０とＳＵＭデジットレジスタ８８１に保持されていく。第２の仮数繰り返し処理部８５１の部分剰余のＳＩＧＮデジットセレクタ８９５とＳＵＭデジットセレクタ８９６から出力される部分剰余のＳＩＧＮデジットとＳＵＭデジットは、演算実行制御シーケンサ８００から出力されるストローブ信号に従い、全ての仮数減算シフト処理が終了した時に、最終的な剰余値として剰余のＳＩＧＮデジットレジスタ８８２とＳＵＭデジットレジスタ８８３に保持される。商ＳＩＧＮデジットレジスタ８８０／商ＳＵＭデジットレジスタ８８１と剰余ＳＩＧＮデジットレジスタ８８２／剰余ＳＵＭデジットレジスタ８８３の出力は、丸め処理部８６０に送出され、冗長２進数から通常２進数に変換された後、丸め処理を実行される。
【００２３】
冗長２進数の仮数繰り返し処理部では、冗長２進数加算器での桁上げ伝播が隣接ビットへの１桁しか伝播しないため、通常２進数による仮数繰り返し処理でのクリティカルパスに対して、減算シフト処理に関する論理段数を大幅に削減できる。このため、図３Ａ及び図３Ｂに示したように、第１の仮数繰り返し処理部８５０と、第２の仮数繰り返し処理部８５１を１クロックサイクルにカスケード接続で実装することが可能になり、これにより１クロックサイクルで２回の減算シフト処理を行って、２ｂｉｔの商を得ることができる。
【００２４】
また、図３Ａ及び図３Ｂでは基数２の場合を例示しているが、基数を４にすると１回の減算シフト処理で２ｂｉｔの商が、基数を８にすると１回の減算シフト処理で３ｂｉｔの商が得られる。また、基数２の減算シフト処理を１クロックサイクルに２回実行するように実装しているが、１クロックサイクルに３回、４回と実装数を増やすことでも、１クロックサイクルで得られる商のビット数を増やすことができる。当然のことながら、基数４の減算シフト処理を１クロックサイクルに２回実行するような、組み合わせての実装も可能である。
【００２５】
しかしながら、このような冗長２進数を用いた減算シフト型浮動小数点除算器においては、次のような課題がある。すなわち、従来の２進数減算シフト型浮動小数点除算器における第２の課題は、設計難度が非常に高くなるということである。その理由は以下のとおりである。演算ＴＡＴ短縮のために演算の高基数化を行ったり１クロックサイクルに対して減算シフト処理のカスケード実装を行うことは、冗長２進数で減算シフト処理１回当たりのクリティカルパス遅延は短縮しているとしても、遅延増加やハードウェア量増大の影響が大きく、動作周波数向上のためにはカスタム設計を行ったり、Ｄｏｍｉｎｏ回路設計を行ったりする必要が生じるなど、設計難度が非常に高くなるということである。
【００２６】
本発明の目的は、大幅なＨＷ（ＨａｒｄＷａｒｅ）量増加やクリティカルパス遅延の増大、設計の高難度化を避けながら、演算ＴＡＴを短縮して、性能向上と消費電力低減効果を実現できる浮動小数点除算器、及びそれを用いた情報処理装置を提供することにある。
【課題を解決するための手段】
【００２７】
本発明の浮動小数点除算器は、２進数の減算シフト型である。この浮動小数点除算器は、仮数繰り返し処理部と、演算実行制御部とを具備する。仮数繰り返し処理部は、入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成する。演算実行制御部は、前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定する。前記仮数繰り返し処理部は、前記演算実行制御部の判定結果に基づいて、前記減算シフト処理の１回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ２倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減する。
【００２８】
本発明の情報処理装置は、上記の段落に記載の浮動小数点除算器を具備する。
【００２９】
本発明の浮動小数点除算方法は、２進数の減算シフト型浮動小数点除算方法である。入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成するステップと、前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定するステップと前記ビット値の判定結果に基づいて、前記減算シフト処理の１回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ２倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減するステップとを具備する。
【発明の効果】
【００３０】
本発明により、大幅なＨＷ量増加やクリティカルパス遅延の増大、設計の高難度化を避けながら、演算ＴＡＴを短縮して、性能向上と消費電力低減効果を実現できる。
【図面の簡単な説明】
【００３１】
【図１】図１は、従来の基数２の２進数減算シフト型浮動小数点除算器の仮数繰り返し処理部の構成を示すブロック図である。
【図２】図２は、図１の２進数減算シフト型浮動小数点除算器の仮数繰り返し処理部６５０の動作を示すフローチャートである。
【図３Ａ】図３Ａは、このような２進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の構成を示すブロック図である。
【図３Ｂ】図３Ｂは、このような２進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の構成を示すブロック図である。
【図４】図４は、一般的な２進数減算シフト型浮動小数点除算器の全体構成を示すブロック図である。
【図５】図５は、本発明の第１の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。
【図６】図６は、本発明の第１の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。
【図７Ａ】図７Ａは、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。
【図７Ｂ】図７Ｂは、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。
【図８Ａ】図８Ａは、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。
【図８Ｂ】図８Ｂは、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。
【発明を実施するための形態】
【００３２】
以下、本発明の浮動小数点除算器、及びそれを用いた情報処理装置の実施の形態に関して、添付図面を参照して説明する。
【００３３】
（第１の実施の形態）
本発明の第１の実施の形態に係る浮動小数点除算器、及びそれを用いた情報処理装置ついて、添付図面を参照して説明する。
図４は、一般的な２進数減算シフト型浮動小数点除算器の全体構成を示すブロック図である。この２進数減算シフト型浮動小数点除算器において、入力された２つの浮動小数点入力オペランドは、それぞれレジスタ（ＦＦ）で受信される。その後、その２つの浮動小数点入力オペランドは、それぞれその全ｂｉｔもしくは一部のｂｉｔが非通常数検出部１１０、符号処理部１２０、指数処理部１３０、仮数前処理部１４０に入力される。符号処理部１２０、指数処理部１３０、仮数前処理部１４０には、それぞれの浮動小数点入力オペランドが、そのｂｉｔ位置に応じて定まっている符号、指数、仮数に分割されて入力される。仮数前処理部１４０に入力された仮数は、必要な前処理を行った後に、減算シフト処理を行う仮数繰り返し処理部１５０に入力され、求める演算精度によって決まる回数だけ繰り返し処理を行った後に、仮数後処理／丸め処理部１６０に入力される。仮数後処理／丸め処理部１６０には、非通常数検出部１１０、符号処理部１２０、指数処理部１３０の結果も入力され、最終的な浮動小数点除算結果を出力する。また、仮数後処理／丸め処理部１６０からは、仮数丸め処理における指数桁上げ情報も出力され、非通常数検出部１１０、符号処理部１２０、指数処理部１３０からの出力と共に、例外処理部１７０にて演算例外の検出処理が行われる。また、これら浮動小数点除算処理を実行するために各処理部の動作を制御するための演算実行制御シーケンサ１００があり、各処理部に対して実行シーケンスに応じて必要な制御信号を送出する。
【００３４】
非通常数検出部１１０は、２つの浮動小数点入力オペランドについて、それぞれ非数や無限大数、ゼロ数など、通常の浮動小数点数として表現可能な数値以外であるかどうかを検出する。２つの浮動小数点入力オペランドのいずれか一方でもこのような非通常数であった場合には、除算結果は必ず非通常数になる。そのため、非通常数検出部１１０は、出力とすべき非通常数を決定するための組み合わせ論理回路を含み、その結果を仮数後処理／丸め処理部１６０に通知して、演算結果出力値を非通常数の形式に差し替える処理を行う。
【００３５】
符号処理部１２０は、２つの浮動小数点入力オペランドについて、それぞれの符号を参照して、演算結果の符合ビットを生成する。一般的にこの処理は排他的論理和で実現される。指数処理部１３０では、２つの浮動小数点入力オペランドについて、それぞれの指数を参照して、演算結果の指数を生成する。一般的にこの処理には減算器が使用されるが、指数値の正負を表現するためにバイアス値による表現を用いる場合には、このバイアス値を考慮した３入力の加減算器が用いられる。仮数前処理部１４０と仮数繰り返し処理部１５０については、２つの浮動小数点入力オペランドについて、それぞれの仮数を参照して、減算シフト動作により演算結果の商と剰余を生成する。詳細は図５と共に後述される。
【００３６】
仮数後処理／丸め処理部１６０では、仮数繰り返し処理部１５０からの商と剰余を入力として、商を有効ビット数まで丸めて演算結果の仮数生成処理を行う。また、この時、仮数繰り上がりによる指数のインクリメント処理が必要になる場合があり、符号処理部１２０や指数処理部１３０からの符号や指数も入力して、演算結果として出力するデータ形式に整形を行う。なお、仮数繰り上がりによる指数のインクリメント処理のため、指数処理部１３０で最初からインクリメント処理の有無による２通りの指数を生成しておいて、仮数繰り上がり結果によってどちらか一方の指数を選択するような先見論理が比較的よく利用される。
【００３７】
例外処理部１７０では、非通常数検出部１１０、符号処理部１２０、指数処理部１３０の各出力や、仮数後処理／丸め処理部１６０からの丸め処理結果や仮数繰り上がり信号を入力として、演算例外の検出を行う。一般的に、検出される演算例外としては浮動小数点オーバーフロー例外、浮動小数点アンダーフロー例外、ゼロ除算例外、不正確演算例外、無効演算例外の５種類である。
【００３８】
図５は、本発明の第１の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。本実施の形態における浮動小数点除算器は、基本的に図４に示される２進数減算シフト型浮動小数点除算器と同じであるが、図５に示される仮数繰り返し処理部とその周辺の構成において、図４の場合と異なっている。以下、図５を参照して、本実施の形態における浮動小数点除算器の構成を説明する。
【００３９】
浮動小数点除算器に入力された２つの浮動小数オペランド（Ｙ：被除数、Ｚ：除数）は、それぞれレジスタ（ＦＦ）で受信される。その後、その２つの浮動小数点オペランドは、それぞれＵｎｐａｃｋｅｒ２４０、２４１と呼ばれるデータ整列器に入力され、仮数部のみが取り出されると共に、符号ビットや隠しビットの補完、単精度浮動小数点と倍精度浮動小数点の小数点位置合わせなどの処理が行われる。一般的にこれらの処理は、仮数前処理と呼ばれる。すなわち、本実施の形態における浮動小数点除算器では、このＵｎｐａｃｋｅｒ２４０、２４１は、図４における仮数前処理部１４０と置き換えられている、又は、その機能を追加されている。
【００４０】
被除数のＵｎｐａｃｋｅｒ２４０を通過したデータは、演算実行制御シーケンサ２００から出力される選択制御信号２０５で制御される第１のセレクタ２１５に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第１のセレクタ２１５はＵｎｐａｃｋｅｒ２４０の出力データ側を選択する。ただし、本実施の形態における浮動小数点除算器では、この演算実行制御シーケンサ２００は、図４における演算実行制御シーケンサ１００と置き換えられている、又は、その機能を追加されている。第１のセレクタ２１５を通過したデータはレジスタ２２０に保持される。一方、除数のＵｎｐａｃｋｅｒ２４１を通過したデータは、そのままレジスタ２２１に保持される。この除数のレジスタ２２１は、演算実行中は常に変わらず除数の値を保持し続ける。
【００４１】
被除数のレジスタ２２０と除数のレジスタ２２１のデータに対して、減算器２３０において減算処理が行われる。減算器２３０から出力された桁上げビットはインバータ２３４を通って第２のセレクタ２３５に選択制御信号として入力される。この第２のセレクタ２３５は、減算器２３０の出力と被除数レジスタ２２０の出力のいずれかを次回の部分剰余として選択出力する。この第２のセレクタ２３５の出力は、１ｂｉｔ左シフタ２１０を通って第１のセレクタ２１５の別の入力になると同時に、２ｂｉｔ左シフタ２１１を通って、第１のセレクタ２１５の更に別の入力になる。また、この第２のセレクタ２３５の出力としての部分剰余の特定ｂｉｔの情報２３６は演算実行制御シーケンサ２００に出力される。演算実行制御シーケンサ２００は、この特定ｂｉｔ情報２３６に基づいて、部分剰余の２ｂｉｔ左シフタ２１１の結果を次回の減算シフト処理の部分剰余とするかどうかの選択制御信号２０５を生成する。演算実行が開始されて２回目以降の仮数減算シフト処理の時は、第１のセレクタ２１５は、演算実行制御シーケンサ２００からの選択制御信号２０５によって、１ｂｉｔ左シフタ２１０の出力、もしくは２ｂｉｔ左シフタ２１１の出力のいずれかを選択し続けることになる。この第１のセレクタ２１５を通過したデータは部分剰余としてレジスタ２２０に保持される。以上の構成要素を含む処理部が、仮数繰り返し処理部２５０である。すなわち、本実施の形態における浮動小数点除算器では、この仮数繰り返し処理部２５０は、図４における仮数繰り返し処理部１５０と置き換えられている、又は、その機能を追加されている。
【００４２】
レジスタ２２０に保持される部分剰余は１ｂｉｔ左シフタ２１０によって“２×Ｒ（ｊ）”を保持しており、減算器２３０において“２×Ｒ（ｊ）−Ｄ”が求められる。減算器２３０の桁上げ出力は、“２×Ｒ（ｊ）−Ｄ”の結果に対する符号ビットに相当し、この値がビット値０の場合は“２×Ｒ（ｊ）−Ｄ≧０”であることを示している。そのため、インバータ２３４で反転した結果を除算結果の商とするとともに、第２のセレクタ２３５で減算器２３０の出力である“２×Ｒ（ｊ）−Ｄ”を次回の部分剰余として選択する。一方、符号ビットがビット値１の場合は“２×Ｒ（ｊ）−Ｄ＜０”であることを示している。そのため、インバータ２３４で反転した結果を除算結果の商とするとともに、第２のセレクタ２３５で部分剰余を保持したレジスタ２２０の出力である“２×Ｒ（ｊ）”を次回の部分剰余として選択する。以上により、この仮数繰り返し処理部２５０において、前述の基数２の減算シフト型除算の実行手順を実現している。
【００４３】
減算器２３０の桁上げ出力をインバータ２３４で反転した商は、演算実行制御シーケンサ２００から出力されるストローブ信号２０６に従い、１ｂｉｔずつ商レジスタ２８０に保持されていく。なお、この商レジスタ２８０は、演算実行制御シーケンサ２００からの制御により、演算実行開始時に全ビットの値がビット値０にリセットされる。また、第２のセレクタ２３５の出力は、演算実行制御シーケンサ２００から出力されるストローブ信号に従い、全ての仮数減算シフト処理が終了した時に、最終的な剰余値として剰余レジスタ２８１に保持される。商レジスタ２８０と剰余レジスタ２８１の出力は、丸め処理部２６０に送出され、丸め処理を実行される。すなわち、本実施の形態における浮動小数点除算器では、この丸め処理部２６０は、図４における丸め処理部１６０と置き換えられている、又は、その機能を追加されている。
【００４４】
次に、本発明の第１の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成（図２）の動作について説明する。図６は、本発明の第１の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。なお、ここに示す演算制御動作は、一例としては、図５の演算実行制御シーケンサ２００においてハードウェアとして実装され、フローチャートにおける各ステップの動作結果は、仮数繰り返し処理部２５０や仮数後処理／丸め処理部２６０に対する制御信号として出力されることになる。
【００４５】
演算実行開始（ＳＴＥＰ３００）により、まず仮数の減算シフト処理回数の初期値が設定される（ＳＴＥＰ３１０）。この時の初期値は、演算データが単精度浮動小数点データ（３２ｂｉｔ）の場合は２７回、倍精度浮動小数点データ（６４ｂｉｔ）の場合は５６回が一般的である。次に、仮数繰り返し処理を実行する（ＳＴＥＰ３２０）。これは仮数の減算シフト処理により、商１ｂｉｔと部分剰余を求める処理である。続いて、仮数繰り返し処理（ＳＴＥＰ３２０）の終了後に、仮数の減算シフト処理回数が０になっているかどうかを判定する（ＳＴＥＰ３３０）。ここで、減算シフト処理回数が０になっていれば（ＳＴＥＰ３３０：Ｙｅｓ）、丸め処理を行い（ＳＴＥＰ３８０）、その後、演算実行終了となる（ＳＴＥＰ３９０）。
【００４６】
一方、減算シフト処理回数が０になっていなければ（ＳＴＥＰ３３０：Ｎｏ）、仮数繰り返し処理（ＳＴＥＰ３２０）で求められた部分剰余のＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ：）から２ｂｉｔ目（ＭＳＢをｂｉｔ０とする場合はｂｉｔ１）のビット値が０かどうかを判定する（ＳＴＥＰ３４０）。具体的には、部分剰余のＭＳＢから２ｂｉｔ目のビット値を示す特定ｂｉｔ情報２３６を受信して、当該特定ｂｉｔ情報２３６のビット値が０かどうかを判定する。ビット値が０でなかった場合（ＳＴＥＰ３４０：Ｎｏ）、通常の減算シフト型除算器の動作と同様、仮数繰り返し処理数を−１とし（ＳＴＥＰ３６０）、部分剰余を１ｂｉｔ分左シフト（部分剰余を２倍にする：選択制御信号２０５）して（ＳＴＥＰ３６５）、仮数繰り返し処理（ＳＴＥＰ３２０）に戻る。
【００４７】
一方、ビット値が０であった場合（ＳＴＥＰ３４０：Ｙｅｓ）、次回の減算シフト処理における商１ｂｉｔの値が必ずビット値０になることが事前に判明するため、仮数繰り返し処理数を−２とし（ＳＴＥＰ３５０）、部分剰余を２ｂｉｔ分左シフト（部分剰余を４倍にする：選択制御信号２０５）して（ＳＴＥＰ３５５）、仮数繰り返し処理（ＳＴＥＰ３２０）に戻る。この場合、次の演算結果を商レジスタ２８０に格納するときは、次のストローブ信号２０６により、商レジスタ２８０を２ｂｉｔずらして保持する。
【００４８】
こうすることによって、次回の仮数減算シフト処理を１回省略することが可能になる。このような状況は、倍精度浮動小数点データにおいては５６回繰り返し実行される減算シフト処理中において１回だけに限らず、その時の部分剰余の値に応じて複数回発生する可能性があり、その分だけ演算実行ＴＡＴを短縮することが可能になる。この時、本来実行するはずであった減算シフト処理回数に比較して、より少ない減算シフト処理回数で同じ演算結果を得ることができるため、演算結果を得るために必要な消費電力は当然ながら削減されることになる。
【００４９】
また、図５とその説明において明らかなように、従来の構成に対して追加された要素は、部分剰余の特定ｂｉｔの情報２３６を演算実行制御シーケンサ２００に送り、その結果により部分剰余の２ｂｉｔ左シフト２１１の結果を次回の減算シフト処理の部分剰余とするかどうかの選択制御信号２０５を生成する論理だけである。これは、図６のフローチャートでは、部分剰余のＭＳＢから２ｂｉｔ目（ＭＳＢをｂｉｔ０とする場合はｂｉｔ１）のビット値が０かどうかを判定するＳＴＥＰ３４０と、ビット値が０であった場合に仮数繰り返し処理数を−２とするＳＴＥＰ３５０と、部分剰余を２ｂｉｔ分左シフト（部分剰余を４倍にする）するＳＴＥＰ３５５とに相当する。この追加要素や追加処理フローは、ハードウェア量の増大やクリティカルパスの遅延時間に対する増加としての影響としてはあまり大きくはないため、設計難度もそれほど高くなることはない。
【００５０】
以上説明したように、本実施の形態においては、以下に記載するような効果を奏する。
第１の効果は、２進数の減算シフト型浮動小数点除算器において、本来、減算シフト処理回数は基数と求める演算精度で一意に決定されるのに対して、本願発明では、演算入力オペランドの値に依存することにはなるが、減算シフト処理回数を削減することができ、その結果、除算の演算ＴＡＴ短縮により演算性能向上ができることである。
【００５１】
第２の効果は、除算結果を求めることに対して、無駄な減算シフト処理を行わないようにしているので、１回の演算実行における消費電力を削減できることである。第３の効果は、追加されるＨＷ量が小さく、クリティカルパス遅延への影響も小さく抑えているので、高い演算実行性能を得るために、Ｄｏｍｉｎｏ回路を使用したり、カスタム設計手法を採用することなく、従来通り設計自動化ツールを使用した回路／レイアウト設計の省力化ができることである。
【００５２】
（第２の実施の形態）
本発明の第２の実施の形態に係る浮動小数点除算器、及びそれを用いた情報処理装置ついて、添付図面を参照して説明する。
図７Ａ及び図７Ｂは、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。本実施の形態では、その基本的構成は第１の実施の形態と同様であるが、図５の構成が図７Ａ及び図７Ｂの構成に変更されている点、すなわち、基数を４にすると共に、減算シフト回数の削減についてさらに判定論理を追加している点で、第１の実施の形態と異なる。以下、具体的に説明する。
【００５３】
浮動小数点除算器に入力された２つの浮動小数点オペランド（Ｙ：被除数、Ｚ：除数）は、それぞれレジスタ（ＦＦ）で受信される。その後、その２つの浮動小数点オペランドは、それぞれＵｎｐａｃｋｅｒ４４０、４４１に入力される。ここでの処理は、図５でのＵｎｐａｃｋｅｒ２４０、２４１と同様である。
【００５４】
被除数のＵｎｐａｃｋｅｒ４４０を通過したデータは、演算実行制御シーケンサ４００から出力される選択制御信号４０５で制御される第１のセレクタ４１５に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第１のセレクタ４１５はＵｎｐａｃｋｅｒ４４０出力データ側を選択する。第１のセレクタを通過したデータはレジスタ４２０に保持される。一方、除数のＵｎｐａｃｋｅｒ４４１を通過したデータは、そのまま除数レジスタ４２１に保持されると同時に、倍精度演算用に除数の３倍数を生成する加算器４４２と単精度演算用に除数の３倍数を生成する加算器４４３に入力される。そして、実行演算が倍精度か単精度かによって３倍数生成加算器４４２、４４３のいずれかの出力を選択するセレクタ４４５を通って、除数３倍数レジスタ４２２にも保持される。この除数レジスタ４２１と除数３倍数レジスタ４２２は、演算実行中は常に変わらず除数とその３倍数の値を保持し続ける。
【００５５】
被除数のレジスタ４２０、除数レジスタ４２１、除数３倍数レジスタ４２２のデータは、３つの減算器４３０、４３１、４３２において減算処理が行われる。３つの減算器４３０、４３１、４３２から出力された桁上げビットは商決定論理器４３４を通って、第２のセレクタ４３５の選択制御信号として入力される。この第２のセレクタ４３５は、３つの減算器４３０、４３１、４３２の出力と被除数レジスタ４２０の出力のいずれかを次回の部分剰余として選択出力する。この第２のセレクタ４３５の出力は、２ｂｉｔ左シフタ４１０を通って第１のセレクタ４１５の別の入力になると同時に、４ｂｉｔ左シフタ４１１を通って第１のセレクタ４１５の更に別の入力になる。また、この第２のセレクタ４３５の出力としての部分剰余のＭＳＢから２ビット目から４ビット目までの計３ｂｉｔが全てビット値０であるかどうかの検出論理の出力信号４３６は演算実行制御シーケンサ４００に出力される。演算実行制御シーケンサ４００は次回の減算シフト処理における部分剰余を２ｂｉｔ左シフタ４１０の出力とするか、４ｂｉｔ左シフタ４１１の出力とするかを決定する選択制御信号４０５を生成する。演算実行が開始されて２回目以降の仮数減算シフト処理の時は、第１のセレクタ４１５は、演算実行制御シーケンサ４００からの選択制御信号４０５によって、２ｂｉｔ左シフタ４１０の出力、もしくは４ｂｉｔ左シフタ４１１の出力のいずれかを選択し続けることになる。この第１のセレクタ４１５を通過したデータは部分剰余としてレジスタ４２０に保持される。
【００５６】
レジスタ４２０に保持される部分剰余は２ｂｉｔ左シフタ４１０によって“４×Ｒ（ｊ）”を保持しており、第１の減算器４３０において“４×Ｒ（ｊ）−Ｄ”が求められる。第１の減算器４３０の桁上げ出力は、“４×Ｒ（ｊ）−Ｄ”の結果に対する符号ビットに相当し、この値がビット値０の場合は“４×Ｒ（ｊ）−Ｄ≧０”であることを示している。同様に、第２の減算器４３１においては“４×Ｒ（ｊ）−２×Ｄ”が求められ、この桁上げ出力のビット値０の場合は“４×Ｒ（ｊ）−２×Ｄ≧０”であることを示している。第３の減算器４３２においては“４×Ｒ（ｊ）−３×Ｄ”が求められ、この桁上げ出力のビット値０の場合は“４×Ｒ（ｊ）−３×Ｄ≧０”であることを示している。従って、商決定論理器４３４では、これら３つの減算器４３０、４３１、４３２の桁上げ信号から、商２ｂｉｔの値として０、１、２、３のいずれかを決定できる。すなわち、全ての桁上げ信号がビット値１であれば商は０、第１の減算器４３０の桁上げ信号のみがビット値０でそれ以外が全てビット値１であれば商は１、第１の減算器４３０と第２の減算器４３１の桁上げ信号のみがビット値０で第３の減算器４３２の桁上げ信号がビット値１であれば商は２、３つの減算器４３０、４３１、４３２の桁上げ信号が全てビット値０であれば商は３、となって基数４における減算シフト処理における２ｂｉｔの商を求めることができる。また、この商の値に応じて、第２のセレクタ４３５において、今回の部分剰余を保持しているレジスタ４２０の出力である“４×Ｒ（ｊ）”と、第１の減算器４３０の出力である“４×Ｒ（ｊ）−Ｄ”と、第２の減算器４３１の出力である“４×Ｒ（ｊ）−２×Ｄ”と、第３の減算器４３２の出力である“４×Ｒ（ｊ）−３×Ｄ”とから、次回の減算シフト処理における部分剰余として選択する。
【００５７】
商決定論理器４３４から出力された商は、演算実行制御シーケンサ４００から出力されるストローブ信号４０６に従い、２ｂｉｔずつ商レジスタ４８０に保持されていく。なお、この商レジスタ４８０は、演算実行制御シーケンサ４００からの制御により、演算実行開始時に全ビットの値がビット値０にリセットされる。また、第２のセレクタ４３５の出力は、演算実行制御シーケンサ４００から出力されるストローブ信号に従い、剰余レジスタ４８１に保持される。ここまでの構成は、基数４の減算シフト型除算器の仮数前処理部（４４０、４４１、４４２、４４３）、及び仮数繰り返し部４５０の構成である。
【００５８】
本実施の形態では追加構成要素として、まず第２のセレクタ４３５から出力される部分剰余のＭＳＢから２ビット目から４ビット目までの計３ｂｉｔが全てビット値０であるかどうかの検出論理器４３７がある。本構成の例では３入力の否定論理和（ＮＯＲ論理）で実現できる。この検出論理の出力信号４３６は、演算実行制御シーケンサ４００に入力され、第１のセレクタ４１５の選択制御信号として、次回の減算シフト処理における部分剰余を２ｂｉｔ左シフタ４１０の出力とするか、４ｂｉｔ左シフタ４１１の出力とするかを決定する。通常は２ｂｉｔ左シフタ４１０の出力を選択することになる。すなわち、部分剰余のＭＳＢから２ビット目から４ビット目までの計３ｂｉｔが全てビット値０であった場合、２ｂｉｔ左シフト後の部分剰余のＭＳＢから３ｂｉｔが全てビット値０となる。この時、除数レジスタ４２１や除数３倍数レジスタ４２２に格納されている値を考慮すると、次回の減算シフト処理における３つの減算器４３０、４３１、４３２の桁上げ信号は全てビット値１であることが容易に判断でき、次回の減算シフト処理における商も０（２ｂｉｔ）となる。このようなケースでは、第１のセレクタ４１５の選択制御信号として４ｂｉｔ左シフタ４１１の出力を選択して、次回の減算シフト処理を１回省略する。
【００５９】
また、別の追加構成要素として、剰余レジスタ４８１の全ビットがビット値０になったかどうかの検出論理がある。通常、このような論理は減算シフト処理が全て終了して、最終的な剰余の値が剰余レジスタに格納された後、この剰余レジスタの全ビットに対する論理和を採って、丸め処理部４６０での仮数丸め処理に対するスティッキービットとして利用される。しかし、本実施の形態では、減算シフト処理を実行中の全てのタイミングでこの検出論理を動作させる。全ビットのビット値が０であるかどうかの検出は否定論理和で実現できるので、スティッキービット生成論理としての論理和器４８２と、その出力に対するインバータ４８３とで、剰余レジスタ４８１の全ビット０検出論理を構成して、その検出信号４８６を演算実行制御シーケンサ４００に入力する。減算シフト処理の実行途中に剰余レジスタの全ビットがビット値０になった場合、その時点で除算として割り切れた状態を表しているため、このケースでは演算実行制御シーケンサ４００は、以降の減算シフト処理の実行を全てキャンセルして、仮数後処理／丸め処理へと処理シーケンスを移行することで、演算ＴＡＴの短縮を実現することができる。また、この構成は図５の構成（第１実施の形態）に追加することも可能である。その場合、動作において後述のＳＴＥＰ５７０が追加される。
【００６０】
更に、別の追加構成要素として、浮動小数点除算器に入力された２つの浮動小数点オペランド（Ｙ：被除数、Ｚ：除数）に対して、非通常数かどうかを検出する非通常数検出部４９０がある。この非通常数検出部４９０からの、非通常数検出信号４９６も、演算実行制御シーケンサ４００に入力するようにする。どちらか一方のオペランドでも非通常数として検出された場合、除算の演算結果はかならず非通常数となるため、仮数の減算シフト処理はその実行自体が必要ないことになる。そのため、このようなケースでも演算実行制御シーケンサ４００は、以降の減算シフト処理の実行を全てキャンセルして、仮数後処理／丸め処理へと処理シーケンスを移行することで、演算ＴＡＴの短縮を実現することができる。
【００６１】
なお、このように本実施の形態による演算ＴＡＴ短縮では、演算ＴＡＴは固定時間ではなく、入力されるオペランドデータの値に依存して変動することになる。そこで、演算実行制御シーケンサ４００から、仮数の減算シフト処理が終了して仮数後処理／丸め処理へと処理シーケンスが移行したタイミングで、演算器外の命令発行制御論理（浮動小数点除算器の外部の制御回路等）に対して演算実行終了予告信号４０７を出力するようにする。演算実行終了予告信号４０７が出力されると、必ずそれから固定時間経過後に丸め処理が終了して演算結果が確定することが判るため、後続する命令の発行処理を行うことが可能になる。また、図５の構成（第１実施の形態）の場合にも、仮数の減算シフト処理が終了して仮数後処理／丸め処理へと処理シーケンスが移行したタイミングで、演算器外の命令発行制御論理に対して演算実行終了予告信号を出力する動作を追加することも可能である。
【００６２】
次に、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成（図７Ａ及び図７Ｂ）の動作について説明する。図８Ａ及び図８Ｂは、本発明の第２の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。なお、ここに示す演算制御動作は、一例としては、図７Ａ及び図７Ｂの演算実行制御シーケンサ４００においてハードウェアとして実装され、フローチャートにおける各ステップの動作結果は、仮数繰り返し処理部４５０や仮数後処理／丸め処理部４６０に対する制御信号として出力されることになる。
【００６３】
演算実行開始（ＳＴＥＰ５００）により、まず除数のＵｎｐａｃｋｅｒ４４１を通過したデータについて、倍精度演算用に除数の３倍数を生成し、単精度演算用に除数の３倍数を生成する。そして、実行演算が倍精度か単精度かによってそれら３倍数のいずれかが保持される（ＳＴＥＰ５０５）。次に、仮数の減算シフト処理回数の初期値が設定される（ＳＴＥＰ５１０）。この時の初期値は、演算基数が４なので、演算データが単精度浮動小数点データ（３２ｂｉｔ）の場合は１４回、倍精度浮動小数点データ（６４ｂｉｔ）の場合は２８回が一般的である。次に、仮数繰り返し処理（ＳＴＥＰ５２０）を実行する。これは仮数の減算シフト処理により、商２ｂｉｔと部分剰余を求める処理である。続いて、仮数繰り返し処理（ＳＴＥＰ５２０）の終了後に、仮数の減算シフト処理回数が０になっているかどうかを判定する（ＳＴＥＰ５３０）。ここで、減算シフト処理回数が０になっていれば（ＳＴＥＰ５３０：Ｙｅｓ）、演算実行終了予告信号を出力して（ＳＴＥＰ５７０）、丸め処理を行い（ＳＴＥＰ５８０）、その後、演算実行終了となる（ＳＴＥＰ５９０）。一方、減算シフト処理回数が０になっていなければ（ＳＴＥＰ５３０：Ｎｏ）、まず、部分剰余の全ビットがビット値０になっているかどうかを判断する（ＳＴＥＰ５３５）。ここで、部分剰余の全ビットがビット値０であった場合（ＳＴＥＰ５３５：Ｙｅｓ）、演算実行終了予告信号を出力して（ＳＴＥＰ５７０）、丸め処理を行い（ＳＴＥＰ５８０）、その後、演算実行終了となる（ＳＴＥＰ５９０）。
【００６４】
なお、演算実行開始（ＳＴＥＰ５００）において、２つの浮動小数点入力オペランドのそれぞれについて非通常数かどうかの検出を行い（ＳＴＥＰ５１５）、どちらか一方の浮動小数点入力オペランドでも非通常数であるかを判断する（ＳＴＥＰ５２５）。非通常数であった場合（ＳＴＥＰ５２５：Ｙｅｓ）、演算実行終了予告信号を出力して（ＳＴＥＰ５７０）、丸め処理を行い（ＳＴＥＰ５８０）、その後、演算実行終了となる（ＳＴＥＰ５９０）。一方、非通常数でなかった場合（ＳＴＥＰ５２５：Ｎｏ）、ＳＴＥＰ５０５へ戻り、演算を実行する。
【００６５】
部分剰余の全ビットがビット値０でなかった場合（ＳＴＥＰ５３５：Ｎｏ）、仮数繰り返し処理（ＳＴＥＰ５２０）で求められた部分剰余のＭＳＢから３ｂｉｔ目／４ｂｉｔ目／５ｂｉｔ目の３ｂｉｔ（ＭＳＢをｂｉｔ０とする場合はｂｉｔ２〜ｂｉｔ４）のビット値が全て０かどうかを判定する（ＳＴＥＰ５４０）。具体的には、部分剰余のＭＳＢから３ｂｉｔ目／４ｂｉｔ目／５ｂｉｔ目の３ｂｉｔのビット値を示す出力信号４３６を受信して、当該出力信号４３６のビット値が０かどうかを判定する。ビット値が全て０でなかった場合（ＳＴＥＰ５４０：Ｎｏ）、通常の基数４の減算シフト型除算器の動作であり、仮数繰り返し処理数を−１とし（ＳＴＥＰ５６０）、部分剰余を２ｂｉｔ分左シフト（部分剰余を４倍にする：選択制御信号４０５）して（ＳＴＥＰ５６５）、仮数繰り返し処理（ＳＴＥＰ５２０）に戻る。
【００６６】
一方、ビット値が全て０であった場合（ＳＴＥＰ５４０：Ｙｅｓ）、次回の減算シフト処理における商２ｂｉｔの値が必ずビット値００になることが事前に判明するため、仮数繰り返し処理数を−２とし（ＳＴＥＰ５５０）、部分剰余を４ｂｉｔ分左シフト（部分剰余を１６倍にする：選択制御信号４０５）して（ＳＴＥＰ５５５）、仮数繰り返し処理（ＳＴＥＰ５２０）に戻る。
【００６７】
こうすることによって、次回の仮数減算シフト処理を１回省略することが可能になる。このような状況は、倍精度浮動小数点データにおいては２８回繰り返し実行される減算シフト処理中において１回だけに限らず、その時の部分剰余の値に応じて複数回発生する可能性があり、その分だけ演算実行ＴＡＴを短縮することが可能になる。この時、本来実行するはずであった減算シフト処理回数に比較して、より少ない減算シフト処理回数で同じ演算結果を得ることができるため、演算結果を得るために必要な消費電力は当然ながら削減されることになる。
【００６８】
このように、本実施の形態では、基数４で実施することで、減算シフト回数の削減による演算ＴＡＴ短縮に加えて、減算シフト処理中に割り切れた状態を検出して仮数減算シフト処理を中断したり、入力オペランドが非通常数であることを検出して同じく仮数減算シフト処理を中断したりする構成要素を追加して、更に演算ＴＡＴを短縮するための仕組みを追加している。また、演算実行終了予告信号を演算器外の命令発行制御に通知する機能を追加して、入力されるオペランドデータの値に依存して変動する演算ＴＡＴに対して、後続命令の発行制御を容易にしている。
【００６９】
なお、本構成においては基数を４としているが、さらに大きな２のべき乗数でも基本的には同様の構成により本願発明を実現することは可能である。また、クリティカルパス遅延時間の増加（動作周波数の低下）や、ハードウェア量の増大を許容できるのであれば、本発明における仮数減算シフト処理部を１クロックサイクル中に複数段カスケード接続して実装することで、より演算ＴＡＴを短縮する構成とすることも可能である。
【００７０】
本発明係る浮動小数点除算器は、ワークステーションやコンピュータのような各種情報処理装置に適用することができる。例えば、それらに内蔵された半導体集積回路として実現することが可能である。
【００７１】
本発明は上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変形又は変更され得ることは明らかである。また、各実施の形態の技術は、技術的矛盾の発生しない限り他の実施の形態においても同様に適用可能である。
【符号の説明】
【００７２】
６００    演算実行制御シーケンサ
６０５    選択制御信号
６０６    ストローブ信号
６１０    １ｂｉｔ左シフタ
６１５    第１のセレクタ
６２０    レジスタ
６２１    レジスタ
６３０    減算器
６３４    インバータ
６３５    第２のセレクタ
６４０、６４１    Ｕｎｐａｃｋｅｒ
６５０    仮数繰り返し処理部
６８０    商レジスタ
６８１    剰余レジスタ
６６０    丸め処理部
８００    演算実行制御シーケンサ
８０５    選択制御信号
８０６    ストローブ信号
８１５    第２のセレクタ
８１６    第１のセレクタ
８２０    レジスタ
８２１    レジスタ
８２２    レジスタ
８１０、８１１    １ｂｉｔ左シフタ
８３０、８３１    冗長２進数加算器
８３３    冗長２進数→通常２進数変換器
８３４    商決定論理器
８３５、８３６    セレクタ
８４０、８４１    Ｕｎｐａｃｋｅｒ
８５０    第１の仮数繰り返し処理部
８６０    丸め処理部
８７０、８７１    １ｂｉｔ左シフタ
８７２    インバータ
８９０、８９１    冗長２進数加算器
８９３    冗長２進数→通常２進数変換器
８９４    商決定論理器
８９５    ＳＩＧＮデジットセレクタ
８９６    ＳＵＭデジットセレクタ
８５１    第２の仮数繰り返し処理部
８８０    ＳＩＧＮデジットレジスタ
８８１    ＳＵＭデジットレジスタ
８８２    ＳＩＧＮデジットレジスタ
８８３    ＳＵＭデジットレジスタ
１００    演算実行制御シーケンサ
１１０    非通常数検出部
１２０    符号処理部
１３０    指数処理部
１４０    仮数前処理部
１５０    仮数繰り返し処理部
１６０    仮数後処理／丸め処理部
１７０    例外処理部
２００    演算実行制御シーケンサ
２０５    選択制御信号
２０６    ストローブ信号
２１０    １ｂｉｔ左シフタ
２１１    ２ｂｉｔ左シフタ
２１５    第１のセレクタ
２２０    レジスタ
２２１    レジスタ
２３０    減算器
２３４    インバータ
２３５    第２のセレクタ
２３６    特定ｂｉｔ情報
２４０、２４１    Ｕｎｐａｃｋｅｒ
２５０    仮数繰り返し処理部
２６０    丸め処理部
２８０    商レジスタ
２８１    剰余レジスタ
４００    演算実行制御シーケンサ
４０５    選択制御信号
４０６    ストローブ信号
４０７    演算実行終了予告信号
４１０    ２ｂｉｔ左シフタ
４１１    ４ｂｉｔ左シフタ
４１５    第１のセレクタ
４２０    被除数レジスタ
４２１    除数レジスタ
４２２    除数３倍数レジスタ
４３０、４３１、４３２    減算器
４３４    商決定論理器
４３５    第２のセレクタ
４３６    出力信号
４３７    検出論理器
４４０、４４１    Ｕｎｐａｃｋｅｒ
４４２    加算器
４４３    加算器
４４５    セレクタ
４５０    仮数繰り返し処理部
４６０    丸め処理部
４８０    商レジスタ
４８１    剰余レジスタ
４８２    論理和器
４８３    インバータ
４８６    検出信号
４９０    非通常数検出部
４９６    非通常数検出信号
【図１】
2011118633.tif 000003
【図２】
2011118633.tif 000004
【図３Ａ】
2011118633.tif 000005
【図３Ｂ】
2011118633.tif 000006
【図４】
2011118633.tif 000007
【図５】
2011118633.tif 000008
【図６】
2011118633.tif 000009
【図７Ａ】
2011118633.tif 000010
【図７Ｂ】
2011118633.tif 000011
【図８Ａ】
2011118633.tif 000012
【図８Ｂ】
2011118633.tif 000013