JP5515601B2 - 浮動小数点加算器 - Google Patents

浮動小数点加算器 Download PDF

Info

Publication number
JP5515601B2
JP5515601B2 JP2009238856A JP2009238856A JP5515601B2 JP 5515601 B2 JP5515601 B2 JP 5515601B2 JP 2009238856 A JP2009238856 A JP 2009238856A JP 2009238856 A JP2009238856 A JP 2009238856A JP 5515601 B2 JP5515601 B2 JP 5515601B2
Authority
JP
Japan
Prior art keywords
mantissa
adder
absolute value
output
signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009238856A
Other languages
English (en)
Other versions
JP2011086133A (ja
Inventor
宏昭 渥美
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009238856A priority Critical patent/JP5515601B2/ja
Publication of JP2011086133A publication Critical patent/JP2011086133A/ja
Application granted granted Critical
Publication of JP5515601B2 publication Critical patent/JP5515601B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、コンピュータプロセッサにおける浮動小数点加算器ユニットを設計するための技術に関する。
IEEE754で規定される2進浮動小数点加算器では、仮数部を絶対値として格納する。そのため、浮動小数点加算器では、減算によって、加算結果が負の値になるようなときには、仮数部を正の値に戻して絶対値とし、符号を修正する操作をする。
この操作を行うために、浮動小数点加算器では、加算結果の仮数部を正の値に戻すための再補数化の機能を有している。再補数化機能は、浮動小数点加算器内部にある加算器に単独で実装されることが多く、その方法は次のようになっている。
まず、減数の2の補数を作成し、被減数に加算する。
このとき、加算器のキャリー出力が1にならなければ、加算結果が負であるので、再補数化を実行する。
たとえば、AとBの差の絶対値|A−B|を計算する場合、A−B>0の時は、
Figure 0005515601
を計算し、A−B<0の時は、
Figure 0005515601
を計算する。A−B=0になる場合は、有効ビット内では、数1と数2とは同じ値になるので、どちらの方法で計算しても良い。
図22は、従来例に係る浮動小数点加算器の構成例を示す図である。図22に係る浮動小数点加算器は、符号・指数処理部50、オペランドA及びオペランドBをセレクトするセレクタ51、52、補数化回路53、アラインメント部54、絶対値加算器55、正規化処理部56を有する。
図23は、図22で使われている絶対値加算器55の例を示した図である。図23において、Aは被減数とし、Bは絶対値加算器55に入力する前に補数化回路53において1の補数をとった減数であるものとする。図23の絶対値加算器では、A+Bの加算を行う加算器60と、A+B+1の加算を行う加算器61とを有する。加算器60は、キャリー入力が0の時、AとBの排他的論理和により得られる半加算結果(HSUM)とキャリーとの排他的論理和で得られる加算結果を出力する。加算器61は、キャリー入力が1の時についての加算結果を出力する。
EOR(Exclusive−OR)ゲート62は、加算器60の加算結果(A+B)と、減算が行なわれる場合に値「1」が設定されるSUB信号との排他的論理和をとることにより、減算時に加算器60の加算結果に対して1の補数をとる。セレクタ63は、SUB信号を用いて、減算でない場合は0を、減算の場合は加算器60のキャリーアウト信号をセレクトする。
ここで、加算器60のキャリーアウトが1の時は、加算結果は正のため、キャリー入力が1の加算器61の加算結果をセレクタ64でセレクトして絶対値加算器の出力結果Rとする。加算器60のキャリーアウトが0の場合は、キャリー入力が0の時の加算器60の加算結果に対してEORゲート62で1の補数をとったものをセレクタ64でセレクトして、絶対値加算器の出力結果Rとする。尚、前述の通り、A−B=0となる場合には、数1と数2とは同じ値になるので、加算器61のキャリーアウトをセレクタ63に接続しても良い。
特許文献1には、2つの入力データにおける仮数部の大小関係を予め判定しておくことによって、2つの仮数部間で減算を行う必要が生じた場合には常に大なる仮数部より小なる仮数部を減ずるといった形で減算を行なうことによって仮数部演算結果が常に絶対値として得られるようにした発明が開示されている。
特開昭59−188740号公報
しかしながら、背景技術は以下に述べる課題を有する。
図23の絶対値加算器では、キャリーアウトの値によって出力する加算結果を選択するために、キャリー出力で加算結果を選択するパスが加算器の遅延時間を決定してしまい、高速動作の妨げとなっている。また、各ビットへのキャリーの伝播から加算結果が確定するまでの時間が、A+Bの側では、A+B+1の側に比べて、EORゲート62で1の補数を作成する制御を行なう分だけ遅延時間が増加する。
特許文献1記載の発明では、あらかじめオペランドの大小比較をして、キャリーのパスがネックとなる絶対値加算器を使わないようにしている。しかし、必ず仮数部の大きい方から小さい方を減ずる構成となっているので、オペランドの符号及び指数の値によっては、一方のオペランドについて、アラインメント(桁合わせ)と補数化の両方が必要となる場合がある。そのため、浮動小数点加算器の遅延時間に大きく影響を与えるアラインメントのルートを遅くしてしまっているという問題点がある。
上記の課題を解決するための、本発明に係る浮動小数点加算器の一態様は、浮動小数点演算の対象となる2つのオペランドの符号から、加算と減算のいずれの演算を行なうかを示す加減算信号を生成する符号比較器と、前記2つのオペランドの指数の大小を比較し、いずれのオペランドを選択するかを示すオペランド選択信号を生成する指数比較器と、前記オペランド選択信号を用いて前記2つのオペランドの仮数部の一方を選択して第1仮数として出力する第1のセレクタと、前記オペランド選択信号を用いて前記2つのオペランドの仮数部の他方を選択して第2仮数として出力する第2のセレクタと、オペランド加算時には前記第1仮数を、オペランド減算時には前記第1仮数に対する1の補数を第3仮数として出力する補数化部と、前記2つのオペランドの指数の差だけ前記第2仮数のシフトを行い、第4仮数として出力するアラインメント部と、前記第1仮数及び第2仮数の大小を比較する仮数比較器と、前記第3仮数及び第4仮数の絶対値加算を行なう絶対値加算器であって、前記符号比較器が出力する加減算信号が減算であることを示す場合において、前記指数比較器での比較結果及び前記仮数比較器での比較結果により絶対値加算結果が正の数になると認められる場合には該絶対値加算器のキャリー入力を1とし、前記指数比較器での比較結果及び前記仮数比較器での比較結果により絶対値加算結果が負の数になると認められる場合には該絶対値加算器のキャリー入力を0にすると共に、絶対値加算器を構成する半加算器出力信号の1の補数をとることにより、前記第3仮数及び第4仮数の絶対値加算を行なって第5仮数として加算結果を出力する絶対値加算器とを有する。
本発明に係る浮動小数点加算器では、減算時の1の補数を作成する処理を、アラインメントとは別のパスで実行でき、また、加算結果に対する再補数化の制御を絶対値加算器のキャリー出力を用いることなく行なうことができる。浮動小数点加算器の遅延時間はアラインメントのパス及び加算器のキャリー伝播が大きな割合を占めるが、上記課題解決手段により、絶対値加算器の回路規模の増加を伴うことなく高速な浮動小数点加算器を得ることが可能となる。
本発明の実施例1に係る浮動小数点加算器を示す図である。 図1の実施例1の一態様を示す図である。 本発明の実施例1に係る符号・指数処理部の一例を示す図である。 本発明の実施例1に係る比較器の一例を示す図である。 本発明の実施例1に係る絶対値加算器を示す図である。 本発明の実施例1の絶対値加算器に係る64ビットキャリーブロックを示す図である。 本発明の実施例1の絶対値加算器に係る16ビットキャリーブロックを示す図である。 本発明の実施例1における符号、指数部、仮数部(FOPA、FOPB)の値と、SUB、RECOMP、CINの関係を示す表である。 本発明の実施例1における指数部とオペランド交換の関係を示す表である。 本発明の実施例1における符号と補数化回路でのビット反転を示す表である。 本発明の実施例1に係る正規化処理部を示す図である。 本発明の実施例1に係るリーディングゼロカウント値とビットのマッピングを示す図である。 本発明の実施例1に係るリーディングゼロカウントの回路例を示す図である。 本発明の実施例2に係る浮動小数点加算器を示す図である。 本発明の実施例2における符号、指数部、仮数部の値と、SUB、RECOMP、CINの関係(EA=EBでデータ交換しない場合)を示す表である。 本発明の実施例2における符号、指数部、仮数部の値と、SUB、RECOMP、CINの関係(EA=EBでデータ交換する場合)を示す表である。 本発明の実施例3に係る絶対値加算器2を示す図である。 本発明の実施例3に係るRECOMP、Cinの真理値表を示す図である。 本発明の実施例3に係る加算器セグメントを示す図である。 本発明の実施例3に係るブロックキャリー用64ビットキャリーブロックを示す図である。 本発明の実施例3に係る図19のブロックキャリー用16ビットキャリーブロックを示す図である。 従来例1に係る浮動小数点加算器を示す図である。 従来例1に係る絶対値加算器を示す図である。
以下、この発明の実施の形態について詳細に説明する。
図1は、本発明の実施例1に係る浮動小数点加算器の構成を示す図である。図1に示す浮動小数点加算器は、符号・指数処理部10、第1のセレクタ11、第2のセレクタ12、補数化回路13、アラインメント部14、比較器15、絶対値加算器16、正規化処理部17を有する。
図1の符号・指数処理部10は、浮動小数点演算の対象となる2つのオペランドの符号及び指数についての演算処理を行う。符号・指数処理部10では、2つのオペランドOPERAND AおよびOPERAND Bの符号から、加算と減算とのいずれの演算を行うかを示す“ADD/SUB”信号を出力する。“ADD/SUB”信号は、補数化回路13や絶対値加算器16で使用される。
符号・指数処理部10はまた、指数の大小比較結果から得られる、オペランド交換するかどうかを示すEX_OP信号や、指数EAとEBが等しくないことを示すEA_NE_EB信号を出力する。ここで、EX_OP信号は、オペランドAの仮数部とオペランドBの仮数部のいずれを選択するかの制御信号として使用される。また、EA_NE_EB信号はオペランドAの指数EAとオペランドBの指数EBが等しくないときに1となる信号である。
第1のセレクタ11及び第2のセレクタ12は、それぞれオペランドの指数の大小比較結果に基づいて2つのオペランドの仮数の一方を選択し、仮数FOPA及びFOPBを出力する。具体的には、指数の大きい方のオペランドの仮数をセレクタ11で選択して仮数FOPAとして補数化回路13へ出力し、他方のオペランドの仮数をセレクタ12で選択して仮数FOPBとしてアラインメント部14へ出力する。尚、2つのオペランドの指数が等しい場合、セレクタ11はオペランドAの仮数部とオペランドBの仮数部のいずれを選択することもできる。この場合、セレクタ12はセレクタ11で選択されていないオペランドの仮数部を選択する。
補数化回路13は、第1のセレクタ11で選択された仮数FOPAに対して、“ADD/SUB”信号が加算を示す場合にはFOPAをそのまま出力し、“ADD/SUB”信号が減算を示す場合にはFOPAに対して1の補数をとった値を出力する。補数化回路13の出力は、絶対値加算器16に入力する。
アラインメント部14は、後述の符号・指数処理部10で判定される2つのオペランドの指数差(図1では“PA_SFT”)の分だけ、第2のセレクタ12で選択された仮数FOPBのシフトを行うことにより桁合わせ処理を行う。その際、シフトされた仮数の最下位のビットの下に、いわゆるガードビット、ラウンドビット、及びラウンドビットより下位の位置に一つでも“1”があるかどうかを示すスティッキービットを付加するようにしても良い。アラインメント部14の出力は、絶対値加算器16に入力する。
比較器15は、第1のセレクタ11及び第2のセレクタ12で選択された仮数(FOPA,FOPB)を比較し、2つのオペランドの指数の値が等しい時の絶対値加算器16による減算の結果が正負いずれになるかを判定する。2つのオペランドの指数が異なる場合、前述の通り指数が大きいオペランドの仮数FOPAを補数化回路13を通して絶対値加算器16に入力するので、比較器15で仮数の比較をしなくても、絶対値加算器16による減算の結果が負の値となることが分かる。
論理ゲート18は、比較器15の判定結果であるF_GTと、2つのオペランドの指数が等しくないことを示すEA_NE_EB信号との論理演算を行なうことにより、減算時の絶対値加算器16の加算結果が正負いずれの値になるかを示す“POSI/NEG”信号を出力する。
絶対値加算器16は、“ADD/SUB”信号及び“POSI/NEG”信号を用いて絶対値加算器16における再補数化の制御及びキャリー入力の制御を行いつつ、補数化回路13及びアラインメント部14から出力される信号に対する絶対値加算を行う。
正規化処理部17は、絶対値加算器16の出力結果に対して、正規化と丸め操作を行う。
符号・指数処理部10から出力される浮動小数点加算器の加算結果としての符合及び指数、ならびに正規化処理部17から出力される浮動小数点加算器の加算結果としての仮数を合わせて、最終的な浮動小数点加算器の加算結果(F_RESULT)が生成される。
図2では、減算が行なわれる場合、符号・指数処理部10からは、減算を示すSUB信号が出力される例を示す。図2ではまた、論理ゲート18を論理和ゲートとし、オペランドの減算時に絶対値加算器16の加算結果が負となると判別された場合に、NEG信号を出力する。以下の説明では、主として図2に示す実施例を用いて本願実施形態における絶対値加算器の説明を行う。
実施例1に係る浮動小数点加算器1は、桁合わせを行うアラインメント部14の動作と並行して仮数FOPAと仮数FOPBの比較を行う比較器15を設けることを特徴とする。実施例1の比較器15は、指数の大小によって経路を確定した後のオペランドAの仮数FOPA及びオペランドBの仮数FOPBを比較し、FOPA>FOPBが成立する時に出力信号F_GTを1にする。ここで、FOPA≧FOPBが成立する時に比較器15から出力される信号を1にしても良い。
前述の通り、補数化回路13にはオペランドの指数が大きい方のオペランドの仮数部が入力されるので、オペランドの指数が等しくないときは、減算時における絶対値加算器16の加算結果は負の値になる。また、オペランドの指数が等しいときは、オペランドAの仮数がオペランドBの仮数よりも大きい場合に、減算時における絶対値加算器16の加算結果は負の値になる。従って、論理和ゲート18により、比較器15から出力されるF_GT信号とEA_NE_EB信号との論理和をとることにより、NEG信号を生成することができる。このNEG信号は絶対値加算器16に通知され、絶対値加算器16における再補数化の制御及びキャリー入力の制御に用いられる。
図3は、図2における符号・指数処理部10の一例を示す図である。符号・指数処理部10は、指数値の大小を判定し、オペランド間の指数差(pre alignment shift amount)を絶対値として求める。指数値の大小判定は、高速化のために、入力された各オペランドの指数EXPA及びEXPBについて(EXPA−EXPB)と(EXPB−EXPA)を同時に計算し、(EXPA−EXPB)又は(EXPB−EXPA)のキャリー出力を用いて判定する。
具体的には、図3に示す加算器101のA端子にはEXPAがそのまま入力され、加算器101のB端子には、1の補数化器103でEXPBを反転させた信号が入力される。加算器101のキャリー入力を1にすれば、加算器101において(EXPA−EXPB)が計算される。同様に、加算器102のA端子には、1の補数化器104でEXPAを反転させた信号が入力され、加算器102のB端子には、EXPBがそのまま入力される。加算器102のキャリー入力を1にすれば、加算器102において(EXPB−EXPA)が計算される。
セレクタ105は、加算器101のキャリー出力(carry out)の値が1の場合には加算器101の加算結果を、加算器101のキャリー出力の値が0の場合には加算器102の加算結果を選択し、指数差(pre alignment shift amount)として出力する。この指数差は図1・図2で“PA_SFT”として図示しているものであり、図1・図2におけるアラインメント部14において指数差の分だけ桁あわせシフトが行われる。
符号・指数処理部10はまた、加算器101と加算器102との両方のキャリー出力の結果から、各オペランドの指数の大小を判定し、3つの制御信号EXPA_GT_EXPB、EXPB_GT_EXPA、EXPA_EQ_EXPBを生成する。具体的には、インバータ106は、加算器101のキャリー出力を反転することにより、EXPBがEXPAよりも大きいことを示すEXPB_GT_EXPA信号を生成する。インバータ108は、加算器102のキャリー出力を反転することにより、EXPAがEXPBよりも大きいことを示すEXPA_GT_EXPB信号を生成する。また、ANDゲート107は、加算器101のキャリー出力と加算器102のキャリー出力の論理積をとることにより、EXPAとEXPBが等しいことを示すEXPA_EQ_EXPB信号を生成する。これら3つの制御信号EXPA_GT_EXPB、EXPB_GT_EXPA、EXPA_EQ_EXPBを用いて、図1・図2におけるEX_OP信号やEA_NE_EB信号が生成される。
例えば、オペランドBの指数EXPBがオペランドAの指数EXPAよりも大きい場合は、オペランドAの仮数の換わりにオペランドBの仮数を補数化回路13に入力し、オペランドAの仮数をアラインメント部14へ入力する。そのため、オペランド交換するかどうかを示すEX_OP信号としてはEXPB_GT_EXPAをそのまま用いることができる。セレクタ11は、EX_OP信号が0の時にオペランドAの仮数を、EX_OP信号が1の時にオペランドBの仮数を選択してFOPAを出力する。セレクタ12は、EX_OP信号が0の時にオペランドBの仮数を、EX_OP信号が1の時にオペランドAの仮数を選択してFOPBを出力する。
また、図1・図2におけるEA_NE_EB信号としては、EXPA_EQ_EXPBの論理反転をとった信号、あるいはEXPB_GT_EXPAとEXPA_GT_EXPBとの論理和をとった信号等を用いることができる。
指数と符号については、セレクタ101及びセレクタ102は、(EXPA−EXPB)又は(EXPB−EXPA)のキャリー出力を用いて指数値の大きいオペランドの指数と符号を選択する。
具体的には、セレクタ110は、加算器101のキャリー出力(carry out)の値が1の場合には入力した指数EXPAを、加算器101のキャリー出力の値が0の場合には入力した指数EXPBを選択する。選択された指数は、EXP_BEFORE_NORMALIZEとして、正規化処理部17に対してシフト可能な最大値として通知(図1・図2では対応する信号不図示)される。
セレクタ110で選択された指数は、オペランド加算時の1ビット桁あふれした状態を基準位置とするために、+1操作部111で+1操作を行うことで、正規化シフタを片方向シフトのみとしてインプリメントする。
+1操作部111で+1操作した指数に対して、正規化処理部17における正規化操作によってシフトした値分を減じる補正操作が減算器112において行われる。ここで、図3における“leading zero result as normalize shift amount”は、後述する正規化処理部17のリーディングゼロカウント部161が出力するリーディングゼロカウント値LZCに相当する信号である。
また、後述の正規化処理部17における丸め操作により桁上がりが生じた場合には、減算器112から出力される指数に対して+1操作をする必要がある。+1操作部113は、減算器112から出力される指数に対して+1操作を行なう。セレクタ114は、“round carry out”が1の場合には+1操作部113の出力を選択し、“round carry out”が0の場合には減算器112の出力を選択して、浮動小数点加算器の加算結果の指数(result_exp)として出力する。ここで、“round carry out”は、後述の正規化処理部17の丸め加算器164から出力されるキャリー出力信号である。
入力データ、つまり各オペランドの符号signAと符号signBの値が異なる場合には、排他的論理和ゲート120でこれらの符号の排他的論理和をとることにより、減算であることを示すSUB信号を生成する。
セレクタ121は、加算器101のキャリー出力(carry out)の値が1の場合にはsignAを、加算器101のキャリー出力が0の場合にはsignBを選択する。
オペランドの減算時であって、オペランドの指数が等しい場合に絶対値加算器の演算結果を再補数化した場合には、セレクタ121から出力される符号を反転させる必要がある。論理ゲート122は、セレクタ121から出力される符号を反転させるか否かを制御する信号を生成する。すなわち、論理ゲート122は、EORゲートから出力されるSUB信号、ANDゲート107から出力されるEXPA_EQ_EXPB信号、比較器15で生成されたF_EQに相当するFA_EQ_FB(又は、FOPA_EQ_FOPB)信号の反転信号、及び絶対値加算器16で生成されるRECOMP信号の論理積を生成する。EORゲート123は、セレクタ121から出力される信号と論理ゲート122の出力信号との排他的論理和を生成し、絶対値加算器の加算結果の符合(result sign)として出力する。
図4は、図2における比較器15の一例を示す図である。図4に示す比較器は、IEEE754の倍精度演算まで対応できるように、52ビット長の比較器としたものである。IEEE754の倍精度フォーマットでは、仮数部は53ビットの精度をもっているが、正規化してMSBビットを隠れビット化している。このため、指数値が同じ場合には、MSBビットは同じ値になる。仮数部の大小を判定する上では、MSBビットを無視しても比較結果に影響を与えないため、本実施形態においては、データ比較器は最低52ビット分の比較ができれば十分である。
図4に示す比較器は、3つの16ビット・ブロック130、131、132と、4ビット・ブロック133、及び各ブロックからの出力信号をまとめるブロック134とを有する。
16ビット・ブロック130は、4つの4ビット・ブロック130−1〜130−4及びこれらの各4ビット・ブロックからの出力結果をまとめるブロック130−5を有する。なお、他の16ビットブロック131及び132についても、16ビットブロック130と同様の構成となるので、説明を省略する。
4ビット・ブロック130−1は、入力データA[3:0]及び入力データB[3:0]を比較し、A[3:0]とB[3:0]が一致することを示すEQ又はA[3:0]がB[3:0]よりも大きいことを示すGTを出力する。具体的には、ANDゲート130−112は、A[3:0]とB[3:0]の各ビットの排他的論理和の反転信号の論理積をとることにより、EQ信号を出力する。ORゲート130−111は、A[3:0]がB[3:0]よりも大きい場合のデコード信号の論理和をとることにより、GT信号を出力する。
他の4ビット・ブロック130−2〜130−4及び133の構成も4ビット・ブロック130−1と同様の構成となるので、説明を省略する。
各4ビット・ブロックの出力信号を受けるブロック130−5や、各16ビット・ブロックの出力信号を受けるブロック134は、4ビット・ブロック130−1の中のブロック130−11と同様の論理で構成できる。
ブロック130−5では、各4ビット・ブロック130−1〜130−4から出力されるGT信号及びEQ信号に基づいて、入力信号A[15:0]とB[15:0]の比較を行なう。ANDゲート130−52は、A[15:0]とB[15:0]の比較結果が一致していれば、出力信号のEQを1にする。ORゲート130−51は、A[15:0]がB[15:0]よりも大きければ、出力信号のGTを1にする。
ブロック134では、各ブロック130〜133から出力されるGT信号及びEQ信号に基づいて、入力信号A[51:0]とB[51:0]の比較を行う。そして、ブロック134は、その比較結果が一致していれば、ANDゲート134−2の出力信号F_EQを1としてA=Bであることを示す。一方、ブロック134は、A[51:0]がB[51:0]よりも大きければ、ORゲート134−1の出力信号F_GTを1として、A>Bであることを示す。
図4の比較器のA入力(A[51:0])及びB入力(B[51:0])に、図2におけるFOPA及びFOPBを接続し、図4の比較器のF_GT出力に、図2におけるORゲート18を接続すると、図8に示されるNEG信号が得られる。尚、図4のF_EQ信号は、前述の図3におけるFA_EQ_FB(又は、FOPA_EQ_FOPB)信号として用いられる。
図5は、実施例1に係る絶対値加算器16の一例を示す図である。図5において、キャリー伝播ブロック20は、絶対値加算器16のキャリー伝播を行うブロックであり、詳細については、後述する。
図5中、SUB信号は、オペランドAとオペランドBの符号が異なるときに1、符号が等しい時には0となる信号であり、符号・指数処理部10から出力されるSUB信号と同じものである。NEG信号は、図2におけるNEG信号であり、ORゲート18により生成される信号である。
図5において、nビット目の入力A[n]とB[n]の論理積である生成項(Generation term)はANDゲート16−4で生成され、キャリー伝播ブロック20のGn端子に入力される。また、nビット目のA[n]とB[n]の排他的論理和として得られる伝播項(Propagation term)はEOR(Exclusive−OR)ゲート16−5で生成され、キャリー伝播ブロック20のPn端子に入力される。n−1ビット目から0ビット目の生成項及び伝播項についても同様の論理で生成され、キャリー伝播ブロック20の対応する各端子に入力される。
ここで、nビット目の加算結果SUM[n]は、伝播項Pnとキャリー伝播ブロック20のキャリー出力Cnの排他的論理和で求められる。そのため、再補数化を考慮しなければ、nビット目の加算結果はEORゲート16−5の出力とキャリー伝播ブロック20のCn出力のEOR論理をとればよいことになる。しかし、前述の通り、絶対値加算器において絶対値|A−B|を計算する際に、A−B>0の場合は、
Figure 0005515601
を計算し、A−B<0の場合は
Figure 0005515601
を計算することになる。すなわち、A−B<0の場合、キャリー入力が0の
Figure 0005515601
の加算結果に対して1の補数をとる再補数化処理が必要となってくる。
本実施形態では、再補数化処理を加算後に行うのではなく、キャリー伝播回路20の前に移動し、キャリーよりも早く確定する半加算結果(図4ではEORゲート16−5出力)に対して再補数化処理を行う。
具体的には、絶対値加算器16において再補数化するためのEORゲート16−6を、A[n]とB[n]の半加算結果を生成するEORゲート16−5の直後に設け、再補数化するか否かを再補数化要求信号RECOMPにより制御する。再補数化要求信号RECOMPは、ANDゲート16−2においてSUB信号とNEG信号の論理積をとることにより生成する。
また、合わせて、減算時にA−B<0となる場合にはキャリー入力を0にするために、キャリー伝播ブロック20のキャリー入力端子Cinには、AND回路16−1においてNEG信号を反転したインバータ16−3の出力信号とSUB信号との論理積をとった信号を入力する。
図6は、図5におけるキャリー伝播ブロック20の一例を示した図である。図6は64ビットのキャリー生成ブロックの概略図であり、ビット幅64ビットまでの加算器に対応できる。図6の64ビット・キャリー生成ブロックは、4つの16ビットブロック140〜143と、各16ビットブロック140〜143のキャリー生成を行なうための中間信号GG、GP信号を扱うブロック144と、キャリー伝播ブロック20から出力するキャリー信号C[63:0]を生成するブロック145−1〜145−8とを有する。
図7は、図6中の16ビットブロック140〜143の一例を示した図である。図7の16ビット・キャリー生成ブロックは、4つの4ビットブロック150〜153と、各4ビットブロックのキャリー生成を行なうための中間信号DG、DP信号を扱うブロック154と、16ビットキャリー生成ブロック140〜143から出力するキャリー生成用信号C0[15:1]とCP[15:1]とを生成するブロック155−1〜155−15とを有する。図7の16ビットブロックは図6中のブロック140に対応し、図7での入力信号G[15:0]及びP[15:0]は、図6におけるブロック140に入力されるG[15:0]及びP[15:0]となる。
各4ビットブロック150〜153は、図7中の4ビットブロック153に示す構成となっている。図5に示すように、キャリー伝播ブロック20の外側で生成されて入力される生成項G[n]と伝播項P[n]の各ビットに対して、4ビットブロック153では以下の信号を生成する。
4ビットブロック153内のG[3:0]及びP[3:0]は、16ビットブロックに入力されるG[15:12]及びP[15:12]が接続される。
バッファ153−2は、入力されたG[0]をそのままC0[1]として出力する。ORゲート153−4は、P[1]とG[0]との論理積とG[1]との論理和をとって、C0[2]を出力する。 ORゲート153−6は、P[2]とP[1]とG[0]との論理積と、P[2]とG[1]との論理積と、G[2]との論理和をとってC0[3]を出力する。ORゲート153−8は、P[3]とP[2]とP[1]とG[0]との論理積と、P[3]とP[2]とG[1]との論理積と、P[3]とG[2]との論理積と、G[3]との論理和をとってDGを出力する。
バッファ153−1は、入力されたP[0]をそのままCP[1]として出力する。ANDゲート153−3は、P[1]とP[0]との論理積をとってCP[2]を出力する。ANDゲート153−5は、P[2]とP[1]とP[0]との論理積をとってCP[3]を出力する。ANDゲート153−7は、P[3]とP[2]とP[1]とP[0]との論理積をとってDPを出力する。
図7に示す16ビットブロックが処理する生成項G[15:0]より上位ビットの生成項G[31:16]、G[47:32]、G[63:48]、及び、伝播項P[15:0]より上位ビットの伝播項P[31:16]、P[47:32]、P[63:48]の各信号についても、図7に示す4ビットブロック151〜153と同様の構成を持つビットブロックで同じように処理される。
図7中、ブロック154は、各4ビットブロック150〜153と同様の回路構成となっている。ブロック154のG[3:0]には、各4ビットブロックから出力されるDG信号が接続され、P[3:0]には、各4ビットブロックから出力されるDP信号が接続される。そして、ブロック154に含まれるORゲート154−8は、4ビットブロック153におけるORゲート153−8と同様の論理により16ビットブロックのキャリー生成を行なうための中間信号GG信号を出力する。また、ANDゲート154−7は、4ビットブロック153におけるANDゲート153−7と同様の論理により16ビットブロックのキャリー生成を行なうための中間信号GP信号を出力する。また、ブロック154でも、4ビットブロック150〜153と同様の論理でC0[3:0]信号及びCP[3:0]信号を生成して出力する。
ブロック155−1〜155−15は、各4ビットブロック150〜153及びブロック154から出力されたC0[3:0]信号及びCP[3:0]信号を用いて、16ビットブロックのC0[15:1]信号及びCP[15:1]信号を生成して出力する。具体的には、図7に示す16ビットブロック140から出力されるC0[3:1]及びCP[3:1]は、4ビットブロック150から出力されるC0[3:0]及びCP[3:1]をそのままバッファを介して生成される。
16ビットブロックから出力されるC0[4]及びCP[4]は、ブロック154から出力されるC0[1]及びCP[1]をそのままバッファを介して生成される。16ビットブロックから出力されるC0[7:5]は、4ビットブロック151から出力されるCP[3:1]の各ビットとブロック154から出力されるC0[1]との論理積と、4ビットブロック151から出力されるC0[3:1]の各ビットとの論理和をとることにより生成される。16ビットブロックから出力されるCP[7:5]は、4ビットブロック151から出力されるCP[3:1]の各ビットとブロック154から出力されるCP[1]との論理積をとることにより生成される。
16ビットブロックから出力されるC0[8]及びCP[8]は、ブロック154から出力されるC0[2]及びCP[2]をそのままバッファを介して生成される。16ビットブロックから出力されるC0[11:9]は、4ビットブロック152から出力されるCP[3:1]とブロック154から出力されるC0[2]との論理積と、4ビットブロック152から出力されるC0[3:1]との論理和をとることにより生成される。16ビットブロックから出力されるCP[11:9]は、4ビットブロック152から出力されるCP[3:1]とブロック154から出力されるCP[2]との論理積をとることにより生成される。
16ビットブロックから出力されるC0[12]及びCP[12]は、ブロック154から出力されるC0[3]及びCP[3]をそのままバッファを介して生成される。16ビットブロックから出力されるC0[15:13]は、4ビットブロック153から出力されるCP[3:1]とブロック154から出力されるC0[3]との論理積と、4ビットブロック153から出力されるC0[3:1]との論理和をとることにより生成される。16ビットブロックから出力されるCP[15:13]は、4ビットブロック153から出力されるCP[3:1]とブロック154から出力されるCP[3]との論理積をとることにより生成される。
図6では、前記のように構成された各16ビットブロック140〜143、ブロック144、及びブロック145−1〜145−8により、64ビットブロックキャリーブロックとしてのキャリー出力信号C[63:0]を生成する。以下、具体的に説明する。
図6中、ブロック144は、各4ビットブロック150〜153と同様の回路構成となっている。ブロック144のG[3:0]には、各16ビットブロック140〜143から出力されるGG信号が接続され、P[3:0]には、各16ビットブロック140〜143から出力されるGP信号が接続される。そして、ブロック144に含まれるORゲート144−1は、4ビットブロック153におけるORゲート153−8と同様の論理により64ビットブロックのキャリー生成を行なうための中間信号DG信号を出力する。また、ANDゲート144−2は、4ビットブロック153におけるANDゲート153−7と同様の論理により64ビットブロックのキャリー生成を行なうための中間信号DP信号を出力する。また、ブロック144でも、4ビットブロック150〜153と同様の論理でC0[3:0]信号及びCP[3:0]信号を生成して出力する。
ブロック145−1〜145−8は、各16ビットブロック140〜143及びブロック144から出力されたC0[3:0]信号及びCP[3:0]信号を用いて、64ビットブロックとしてのキャリーアウト信号C[63:0]を生成して出力する。
64ビットブロックから出力されるC[0]は、ブロック145−1において、64ビットブロックへ入力されるキャリー入力信号であるCINをそのままバッファを介して生成される。ここで、キャリー入力信号CINに入力される信号は、図5におけるANDゲート16−1で生成された信号と同じ信号である。
C[15:1]は、ブロック145−2において、16ビットブロック140から出力されるCP[15:1]とCINとの論理積をとった信号と、16ビットブロック140から出力されるC0[15:0]との論理和をとることにより生成される。
C[16]は、ブロック145−3において、ブロック144から出力されるCP[1]とCINとの論理積をとった信号と、ブロック144から出力されるC0[1]との論理和をとることにより生成される。
C[31:17]は、ブロック145−4において、16ビットブロック141から出力されるCP[15:1]とブロック144から出力されるCP[1]とCINとの論理積をとった信号と、16ビットブロック141から出力されるCP[15:1]と、ブロック144から出力されるC0[1]の論理積をとった信号と、16ビットブロック141から出力されるC0[15:1]との論理和をとることにより生成される。
C[32]は、ブロック145−5において、ブロック144から出力されるCP[2]とCINとの論理積をとった信号と、ブロック144から出力されるC0[2]との論理和をとることにより生成される。
C[47:33]は、ブロック145−6において、16ビットブロック142から出力されるCP[15:1]とブロック144から出力されるCP[2]とCINとの論理積をとった信号と、16ビットブロック142から出力されるCP[15:1]とブロック144から出力されるC0[2]との論理積をとった信号と、16ビットブロック142から出力されるC0[15:1]との論理和をとることにより生成される。
C[48]は、ブロック145−7において、ブロック144から出力されるCP[3]とCINとの論理積をとった信号と、ブロック144から出力されるC0[3]との論理和をとることにより生成される。
C[63:49]は、ブロック145−8において、16ビットブロック143から出力されるCP[15:1]とブロック144から出力されるCP[3]とCINとの論理積をとった信号と、16ビットブロック143から出力されるCP[15:1]とブロック144から出力されるC0[3]の論理積をとった信号と、16ビットブロック143から出力されるC0[15:1]との論理和をとることにより生成される。
なお、図6のブロック144のORゲート144−1により生成されるCOUT_CIN0信号は、CINが0である場合の加算器のキャリー出力に対応し、COUT_CIN1は、CINが1である場合の加算器のキャリー出力に対応する。本実施例においては、特にこれらCOUT_CIN0及びCOUT_CIN1の各信号は使用していないが、たとえば絶対値加算結果の選択や、再補数化の判定等に用いることも可能である。
図8は、実施例1における、オペランドAの符号SA、指数部EA、オペランドBの符号SB、指数部EBと、指数部の比較結果に応じて仮数部の交換を実施したあとの仮数部データFOPAとFOPBの値によって、SUB、NEG、RECOMP、CINの値をどう決定するかについてまとめた表である。図中、“−”と表示されている欄は比較不要であることを示す。
図8に示すSUB信号については、符号SAとSBが一致する場合にSUB信号は0に、符号SAとSBが異なる場合にSUBは1になる。NEG信号については、指数部EAとEBが異なる場合及び仮数部FOPAがFOPBよりも大きい場合にNEGは1となり、指数部EAとEBが等しく、かつ仮数部FOPAがFOPB以下の場合にNEGは0となる。RECOMP信号については、減算時(SUB=1)であって、かつ、絶対値加算器の加算結果が負となる場合(NEG=1)にRECOMP信号は1となり、それ以外の場合、RECOMP信号は0となる。CINについては、SUB=1であって、かつ、NEG=0の場合にCINは1となり、それ以外の場合、CINは0となる。
図9は、実施例1における指数データの大小関係と仮数部のオペランドデータの交換の実施についてまとめた表である。図9では、EA=EBの場合にデータ交換を行わないことになっているが、EA=EBの場合にデータ交換を行うようにすることもできる。オペランドのデータ交換は、前述の通り、図3におけるEXPA_GT_EXPB又はEXPB_GT_EXPAを用いて制御することができる。
図10は、オペランドデータの符号SA、SBの値に応じて、補数化回路13におけるビット反転を行うかどうかを表にしたものである。符号SA,SBの値をビット反転に直接使用する代わりに、SUB信号を用いて補数化回路13の制御に用いてもよい。具体的には、SUB信号が1の場合、補数化回路13でビット反転を行い、SUB信号が0の場合、補数化回路13でビット反転しないといった制御を行うことができる。
図11は、図1・図2における正規化と丸め操作を行う正規化処理部17の一実施例を示す図である。図11の実施例では、正規化処理部17は、リーディングゼロカウント部161、シフト制御部162、正規化シフト部163、丸め加算器164、及び丸め判定部165を有する。正規化処理部17に入力される信号160は、図1・図2における絶対値加算器16から出力される加算結果である。
減算時において2つのオペランドの値が近い場合、桁落ちによってMSB(Most Significant Bit)側の1ないし複数のビットが0となることがある。IEEE754のバイナリー・フォーマットでは、仮数部の値を正規化しているため、MSBから見て、最初に“1”となるビットを所定の位置に整列する必要がある。従って、図11の実施例では、絶対値加算器16の加算結果である入力信号160のMSB側から見て最初に“1”となるビット位置をリーディングゼロカウント部161で計数し、該計数値等を用いて正規化シフト部163で信号160をシフトさせる。
図12は、図11におけるリーディングゼロカウント部161が計数したリーディングゼロカウント値(LZC)とデータのビット・マッピングの関係を示す図である。図12(a)における“ADD OP A”及び“ADD OP B”は、図1・図2における絶対値加算器16に入力されるオペランドの仮数部であり、補数化回路13及びアラインメント部14から出力された信号に相当する。“ADD RESULT”は、図1・図2における絶対値加算器16の出力信号に相当する。“after normalize shift”は、図11における正規化シフト部163の出力信号に相当する。
図12(a)において、絶対値加算器16の加算結果(ADD RESULT)のMSBの位置に付された“*”の位置、すなわち、絶対値加算器16への入力仮数部(“ADD OP A”,“ADD OP B”)のMSBビットより1ビット上位の位置が、リーディングゼロカウント値LZC=0の位置となる。
図12(b)は、絶対値加算器16の加算結果(ADD RESULT)に対するリーディングゼロカウント部161でのカウント値LZCを説明する図である。図12(b)中、“x”は任意の値を示す。図12(b)に示すように、MSBの位置に“1”がある場合にはLZC=0となり、MSBから1ビット右の位置に“1”がある場合にはLZC=1となり、MSBから2ビット右の位置に“1”がある場合にはLZC=2となる。以下同様に、MSBから見た“1”の位置が右にシフトするに従って、LZCの値も増加する。
図11のリーディングゼロカウント部161は、図12(a)におけるADD RESULT“*”の位置から見て、最初に“1”となるビットの位置まで何ビットずれているかを計数する。すなわち、リーディングゼロカウント部161は、図12(b)に示すように“ADD RESULT”のMSBから見て何ビット目に“1”が存在するかをカウントして、リーディングゼロカウント値LZCを出力する。リーディングゼロカウント値LZCは、図3における“leading zero result as normalize shift amount”を示す信号としても使用される。
図13は、実施例1に係るリーディングゼロカウント部161の回路例を示す図である。図13は、64ビット幅までカウントできるように構成した回路例である。図12の“ADD RESULT”における最上位ビット、つまり図中で*印をつけてあるビットを図13のA[63]に
接続し、以下“ADD RESULT”のA[62]以降をビットの重み順に接続することで、本実施例1におけるリーディングゼロカウントの機能を実現できる。
図13のリーディングゼロカウント部161の回路例は、4つの16ビットブロック170〜173及びこれらの16ビットブロックの出力結果をまとめるブロック174を有する。各16ビットブロック170〜173は、16ビットブロック173の部分に示されているように、4つの4ビットブロック180〜183及びこれらの4ビットブロックの出力結果をまとめるブロック184を有する。
4ビットブロックの回路について、4ビットブロック183を例に説明する。4ビットブロック183は、入力データA[63:60]のMSB側から見て、最初に“1”となるビットの位置を16進数で示すためのC[1:0]信号を生成する。説明の便宜上、4ビットブロック183へ入力されるデータがA[3:0]であるものとして、以下、説明する。
NANDゲート183−4は、A[3]を反転した信号とA[2]との論理積を反転した信号を生成する。NANDゲート183−5は、A[3]を反転した信号とA[2]を反転した信号とA[1]との論理積を反転した信号を生成する。ANDゲート183−1は、A[3]を反転した信号とNANDゲート183−4の出力信号の論理積をとり、C[1]信号を生成する。ANDゲート183−2は、A[3]を反転した信号とNANDゲート183−5の出力信号の論理積をとり、C[0]信号を生成する。ORゲート183−3は、A[3:0]の各信号の論理和をとることにより、A[3:0]の全ビットが0である場合に“0”となるXALL0信号を生成する。
このようにして生成されたC[1:0]信号及びXALL0信号により、入力データA[i]のMSBから見て何ビット目に“1”があるかを知ることができる。すなわち、A[3:0]=1xxxH(x:任意の値)の場合には、C[1:0]=00Bとなり、XALL0=1となる。A[3:0]=01xxHの場合には、C[1:0]=01Bとなり、XALL0=1となる。A[3:0]=001xHの場合には、C[1:0]=10Bとなり、XALL0=1となる。A[3:0]=0001Hの場合には、C[1:0]=11Bとなり、XALL0=1となる。A[3:0]=0000Hの場合には、C[1:0]=11Bとなり、XALL0=0となり、この場合のC[1:0]は後段で使用されないことになる。
ブロック184では、各4ビットブロック180〜183から出力されるXALL0信号を用いて、各4ビットブロック180〜183から出力されるC[1:0]をセレクトし、ORゲート184−3から16ビットブロック173のC[1:0]として出力する。そして、各4ビットブロック180〜183から出力されるXALL0信号に対して、4ビットブロック183のANDゲート183−1〜183−2と同様の論理により、ANDゲート184−1〜184−2で16ビットブロック173のC[3:2]を生成する。このようにして生成されたC[3:0]は、入力信号A[15:0]のMSB側から見て、最初に“1”となるビットの位置を16進数で示す。ブロック184のORゲート184−4から出力されるXALL0信号は、その16ビットブロック173に含まれる4つの4ビットブロック180〜183への入力信号A[15:0](図ではA[63:48])の全てのビットが0の場合に、XALL0=0となる。
ブロック174の回路構成もブロック184の構成と同様の考え方で構成できる。すなわち、ANDゲート174−1〜174−2及びORゲート174−3で、64ビットブロックのC[5:0]に相当する信号を生成することができる。ここで、64ビットの入力A[63:0]の全ビットがゼロの場合もあり得るので、LZCを[6:0]と1ビット拡張し、A[63:0]の全ビットがゼロの場合には、LZC[6:0]=C[6:0]=1000000Bとすることが望ましい。
従って、ORゲート174−5から出力されるXALL0信号を用いてANDゲート174−1〜174−2の出力及びORゲート174−3の出力をANDゲート174−4でマスクし、C[5:0]を生成する。そして、ORゲート174−5で生成されたXALL0をインバータ174−7で反転させてC[6]を生成する。このようにして、64ビットブロックのLZC[6:0]信号を生成することができる。
ところで、IEEE754規格では、各種の異常な演算を検出して、OSに割込みをあげるトラップ条件が規定されている。そのため、浮動小数点加算器を有するプロセッサ等においては、トラップが発生した場合に割込みを発生させるかどうかを制御する回路(以下、「トラップ割込み制御回路」という)を有するのが一般的である。
シフト制御部162は、IEEE754におけるアンダーフロー割込みがトラップ割込み制御回路で許可されている場合には、リーディングゼロカウントの計数結果を採用する。トラップ割込み制御回路においてアンダーフロー割込みが許可されていない場合には、シフト制御部162は、リーディングゼロカウント部161の計数結果と、図3における指数差により選択した指数(EXP BEFORE NORMLIZE)とで、指数値の値を比較して値の小さな方を選択する。正規化シフト部163は、シフト制御部162で選択された値の分だけ正規化シフタ163で絶対値加算器出力の仮数部の演算結果データを左シフト(MSB側へシフト)して正規化を行なう。
図3における指数差により選択した指数(EXP BEFORE NORMLIZE)は、IEEE754におけるdenormalized numberに対応する正規化位置に対応するものであり、本実施例では、アンダーフロー割込みを起さない場合、正規化シフト部163は、denormalized numberとして演算結果を出力する。
丸め判定部165は、正規化シフト部163で絶対値加算器からの出力データを正規化した後のデータのうち、仮数部の演算結果として出力される部分のLSB(Least Significant Bit)側とその下位のビットパターンを判定する。ここで、IEEE754では、演算結果の丸めに関していくつかの丸めモードを規定しており、IEEE754の丸めモードに従った丸めを行なう場合には、丸め判定部165は、IEEE754規格に沿ったように丸めを行なうかどうかを決定する。
丸め加算器164(round adder)は、インクリメンタで構成することができる。丸め加算器164で+1操作を行うと、データパターンによっては丸め加算器164の出力に桁上りが発生することがある。従って、丸め加算器164はキャリー出力(carry out)信号(図3におけるround carry out)を生成し、MSBから桁あがりが発生した場合にはキャリー出力信号によって符号・指数処理部10に通知する。符号・指数処理部10では、丸め加算器164から出力されるキャリー出力信号を用いて指数値の補正が行われる。
丸め加算器164は、丸め判定部165で判定した結果に基づいて、正規化シフト部163から出力されたデータのうち、丸めを行なう部分に対して+1もしくは+0操作を行い、浮動小数点加算器の加算結果における仮数部の結果(result)を出力する。
実施例2に係る浮動小数点加算器を説明する。実施例2は、実施例1の比較器にオペランドA、Bの仮数部を直接つなぐことで、NEG信号生成の速度向上を図ったものである。
図14は、本発明の実施例2に係る浮動小数点加算器を示す図である。図14において、符号・指数処理部10、第1のセレクタ11、第2のセレクタ12、補数化回路13、アラインメント部14、比較器15、絶対値加算器16、及び正規化処理部17については、説明を省略する。
図14において、比較器15は、オペランドA、Bの仮数部を比較し、Aの仮数部がBの仮数部よりも大きい場合にF_GT出力を1にする。ここで、Aの仮数部とBの仮数部が等しい場合に比較器15の出力を1にしても良い。
図14における比較器15の出力はEX_OP信号によるOPERAND交換前の状態の情報のため、EX_OP=1の時に、OPERAND交換を行なうEX_OP信号と比較器15の出力信号とをEORゲート18−2で排他的論理和をとることにより補正を行なう。そして、実施例1の場合と同様、オペランドの指数部が異なるときは、指数部のみでOPERAND交換後の大小が判定できるので、ORゲート18−1でEORゲート18−2の出力信号とEA_NE_EB信号との論理和をとってNEG信号とする。
尚、EA=EBでOPERAND交換を行わない場合には、COMPAREの出力をEX_OP信号で反転するためのEOR論理は省略できるので、図14中のブロック18をブロック19に置き換えることができる。
図14における比較器15の一例としては、前述の図4の回路を用いることができる。図14において、比較器15のA入力にオペランドAの仮数部FAを、B入力にオペランドBの仮数部FBを接続すると、図15や図16のNEG信号が得られる。
図15は、実施例2における符号・指数処理部10での指数の比較を行なった結果、指数部の値が等しい時(EA=EB時)に、データを交換しないようにした場合のSUB、NEG、RECOMP、CINの値をまとめた表である。図15中、SA及びSBは、オペランドA及びBの符号を示し、EA及びEBは、各オペランドの指数部を示し、FA及びFBは、各オペランドの仮数部を示す。
図16は、図15と同様であるが、指数部による比較によるデータ交換時に指数部の値が等しい時(EA=EB時)に、データを交換するようにした場合のSUB、NEG、RECOMP、CINの値をまとめた表である。
実施例3に係る浮動小数点加算器を説明する。実施例3は、実施例1又は実施例2における絶対値加算器16の構成を高速化のためにセグメント分割するように変更したものである。
実施例3における浮動小数点加算器の概略図は図1、図2、又は図14と同様である。実施例3における符号・指数処理部10、第1のセレクタ11、第2のセレクタ12、補数化回路13、アラインメント部14、比較器15、及び正規化処理部17については、図1、図2、又は図14における各部と同じであるので、説明を省略する。
図17に本発明の実施例3に係るセグメント分割した高速タイプの絶対値加算器の構成を示す。セグメント分割されたADDERブロック191〜194と、ADDERブロックへのキャリー伝播を行なうブロックキャリー伝播回路190で構成される。図17中、“BC”は“block carry”の意味であり、セグメント分割されたブロックへ伝播するキャリーである。
ANDゲート195でNEGの反転信号とSUBの論理積をとった信号は、ブロックキャリー伝播回路190のキャリー入力(Cin)として使用する。ANDゲート196で生成されるRECOMP信号は、セグメント分割したADDER ブロック191〜194内部の半加算(Half SUM)信号(=A[i] EOR B[i])を反転させる信号として使用する。これらのSUB、NEG、RECOMP、Cinの各信号の真理値表を図18に示す。
図19は、実施例3のセグメント分割されたADDERブロック191〜194の回路例を示す図である。実施例3のように絶対値加算器をセグメント分割した高速タイプにする場合には、図19に示すような加算器のセグメントを用いる。
図19中、A及びBは、加算器セグメントに入力された所定の複数のビット数からなる加算対象となるデータである。EORゲートはAとBの排他的論理和をとることにより、AとBの半加算結果を出力する。ブロック201は、キャリー入力が0の場合のキャリー出力を生成し、ブロック202は、キャリー入力が1の場合のキャリー出力を生成する。EORゲート203は、EORゲート200から出力される半加算結果と、前記RECOMP信号との排他的論理和をとり、減算時における再補数化の処理を行なう。
EORゲート204は、EORゲート203の出力とブロック201のキャリー出力との排他的論理和をとることにより、キャリー入力が0の場合の加算結果を生成する。EORゲート205は、EORゲート203の出力とブロック202のキャリー出力との排他的論理和をとることにより、キャリー入力が1の場合の加算結果を生成する。セレクタ206は、ブロックキャリー入力BCinの値に応じて、EORゲート204かEORゲート205のいずれかの出力を選択し、最終的な加算結果SUMを出力する。
図19の加算器セグメントでは、RECOMP信号により反転させるEORゲート203が内側に入るが、図25、図26に示す従来例のような物量の増加はない。
図20は、本発明の実施例3に係る図17におけるブロックキャリー伝播回路190の一例を示す図である。図20の実施例は、64 ビット幅の入力をもち、digit(4ビット)単位のブロックに対するキャリーを生成する。
このブロックキャリー伝播回路190は、4つの16ビットブロック210〜213と、各16ビットブロック210〜213のキャリー出力を生成するための中間信号GG、GP信号を扱うブロック214と、ブロックキャリー伝播回路190から出力するブロックキャリー信号BCin[15:0]を生成するブロック215−1〜8を有する。
図21は、図20中の16ビットブロック210〜213の一実施例を示す図である。この16ビットブロックは、4つの4ビットブロック220〜223と、各4ビットブロック220〜223のキャリー出力を生成するための中間信号DG、DP信号を扱うブロック224を有する。各4ビットブロック220〜223の内容は、図21中の4ビットブロック223に示す構成と同様の内容となっている。
図21中、ANDゲート223−1〜4は、各4ビットブロック220〜223に入力されるA[3:0]とB[3:0]の生成項を生成し、ORゲート223−5〜8は、A[3:0]とB[3:0]の伝播項を生成する。また、ORゲート223−9及びANDゲート223−10は、前述の実施例1の図7に示される4ビットブロック150〜153におけるORゲート153−8やANDゲート153−7と同様の論理で4ビットブロックのキャリー出力を生成するための中間信号DG信号及びDP信号を生成する。
図21中、ブロック224は、前記実施例1の各4ビットブロック150〜153と同様の回路構成となっている。ブロック154のG[3:0]には、各4ビットブロック220〜223から出力されるDG信号が接続され、P[3:0]には、各4ビットブロック220〜223から出力されるDP信号が接続される。
そして、ブロック224に含まれるORゲート224−1及びANDゲート224−2は、前記実施例1の4ビットブロック154におけるORゲート154−8及びANDゲート154−7と同様の論理により16ビットブロックのキャリー出力を生成するための中間信号GG信号及びGP信号を生成する。また、前記4ビットブロック154と同様の論理により、各4ビットブロックのキャリー出力を生成するための中間信号DC0[3:1]信号及びDCP[3:1]信号を生成する。
図20では、前記のように構成された各16ビットブロック210〜213、ブロック214、及びブロック215−1〜8によりブロックキャリー伝播回路190から出力されるブロックキャリー出力BCin[15:0]を生成する。以下、具体的に説明する。
図20中、ブロック214は、前記図21におけるブロック224と同様の回路構成となっている。ブロック214のG[3:0]及びP[3:0]には、各16ビットブロック210〜213のキャリー出力を生成するための中間信号GG信号及びGP信号が接続される。そして、ブロック214に含まれるORゲート214−1及びANDゲート214−2は、前記16ビットブロックにおけるブロック224のORゲート224−1及びANDゲート224−2と同様の論理によりDG信号及びDP信号を生成する。また、ブロック214でも、前記ブロック224と同様の論理によりC0[3:1]信号及びCP[3:1]信号を生成する。
ブロック215−1〜8は、前記実施例1におけるブロック145−1〜8と同様の論理により、ブロックキャリー伝播回路190から出力されるブロックキャリー出力BCin[15:0]を生成して出力する。
なお、図20のブロック214のORゲート214−1により生成されるCOUT_CIN0信号は、CINが0である場合の加算器のキャリー出力に対応し、COUT_CIN1は、CINが1である場合の加算器のキャリー出力に対応する。本実施例においては、特にこれらCOUT_CIN0及びCOUT_CIN1の各信号を使用する必要はないが、たとえば背景技術1等における2つの絶対値加算結果の選択や、再補数化の判定等に用いることが可能である。
本発明は、コンピュータプロセッサにおける浮動小数点加算器ユニット等で利用することができる。
10 符号・指数処理部
11 第1のセレクタ
12 第2のセレクタ
13 補数化回路
14 アラインメント部
15 比較器
16 絶対値加算器
17 正規化処理部

Claims (3)

  1. 浮動小数点演算の対象となる2つのオペランドの符号から、加算と減算のいずれの演算を行なうかを示す加減算信号を生成する符号比較器と、
    前記2つのオペランドの指数の大小を比較し、いずれのオペランドを選択するかを示すオペランド選択信号を生成する指数比較器と、
    前記オペランド選択信号を用いて前記2つのオペランドの仮数部の一方を選択して第1仮数として出力する第1のセレクタと、
    前記オペランド選択信号を用いて前記2つのオペランドの仮数部の他方を選択して第2仮数として出力する第2のセレクタと、
    オペランド加算時には前記第1仮数を、オペランド減算時には前記第1仮数に対する1の補数を第3仮数として出力する補数化部と、
    前記2つのオペランドの指数の差だけ前記第2仮数のシフトを行い、第4仮数として出力するアラインメント部と、
    前記第1仮数及び第2仮数の大小を比較する仮数比較器と、
    前記第3仮数及び第4仮数の絶対値加算を行なう絶対値加算器であって、前記符号比較器が出力する加減算信号が減算であることを示す場合において、前記指数比較器での比較結果及び前記仮数比較器での比較結果により絶対値加算結果が正の数になると認められる場合には前記絶対値加算器で前記第3仮数及び第4仮数に加えてさらに1を加算することとなる値を前記絶対値加算器のキャリー入力とし、前記指数比較器での比較結果及び前記仮数比較器での比較結果により絶対値加算結果が負の数になると認められる場合には前記絶対値加算器で前記第3仮数及び第4仮数を加算するときに前記絶対値加算器にゼロのキャリー入力をすると共に、前記絶対値加算器を構成する半加算器による前記第3仮数及び第4仮数の演算出力信号の1の補数をとることにより第5仮数として加算結果を出力する絶対値加算器と、
    を有することを特徴とする浮動小数点加算器。
  2. 浮動小数点演算の対象となる2つのオペランドの符号から、加算と減算のいずれの演算を行なうかを示す加減算信号を生成する符号比較器と、
    前記2つのオペランドの指数の大小を比較し、いずれのオペランドを選択するかを示すオペランド選択信号を生成する指数比較器と、
    前記オペランド選択信号を用いて前記2つのオペランドの仮数部の一方を選択して第1仮数として出力する第1のセレクタと、
    前記オペランド選択信号を用いて前記2つのオペランドの仮数部の他方を選択して第2仮数として出力する第2のセレクタと、
    オペランド加算時には前記第1仮数を、オペランド減算時には前記第1仮数に対する1の補数を第3仮数として出力する補数化部と、
    前記2つのオペランドの指数の差だけ前記第2仮数のシフトを行い、第4仮数として出力するアラインメント部と、
    前記2つのオペランドの仮数データを比較してその大小を比較する仮数比較器と、
    前記第3仮数及び第4仮数の絶対値加算を行なう絶対値加算器であって、前記符号比較器が出力する加減算信号が減算であることを示す場合において、前記指数比較器での比較結果及び前記仮数比較器での比較結果により絶対値加算結果が正の数になると認められる場合には前記絶対値加算器で前記第3仮数及び第4仮数に加えてさらに1を加算することとなる値を前記絶対値加算器のキャリー入力とし、前記指数比較器での比較結果及び前記仮数比較器での比較結果により絶対値加算結果が負の数になると認められる場合には前記絶対値加算器で前記第3仮数及び第4仮数を加算するときに前記絶対値加算器にゼロのキャリー入力をすると共に、前記絶対値加算器を構成する半加算器による前記第3仮数及び第4仮数の演算出力信号の1の補数をとることにより第5仮数として加算結果を出力する絶対値加算器と、
    を有することを特徴とする浮動小数点加算器
  3. 請求項2記載の浮動小数点加算器であって、
    前記第3仮数及び第4仮数の絶対値加算を行なう前記絶対値加算器は、前記符号比較器が出力する加減算信号が減算であることを示す場合において、前記仮数比較器での比較結果に対して前記オペランド選択信号との排他的論理和をとった結果及び前記指数比較器での比較結果により、絶対値加算結果が正の数になると認められる場合に前記絶対値加算器で前記第3仮数及び第4仮数に加えてさらに1を加算することとなる値を前記絶対値加算器のキャリー入力とし、前記仮数比較器での比較結果に対して前記オペランド選択信号との排他的論理和をとった結果及び前記指数比較器での比較結果により、絶対値加算結果が負の数になると認められる場合には前記絶対値加算器で前記第3仮数及び第4仮数を加算するときに前記絶対値加算器にゼロのキャリー入力をすると共に前記絶対値加算器を構成する前記半加算器による前記第3仮数及び第4仮数の演算出力信号の1の補数をとることにより、前記第5仮数として加算結果を出力すること、
    を特徴とする浮動小数点加算器
JP2009238856A 2009-10-16 2009-10-16 浮動小数点加算器 Expired - Fee Related JP5515601B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009238856A JP5515601B2 (ja) 2009-10-16 2009-10-16 浮動小数点加算器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009238856A JP5515601B2 (ja) 2009-10-16 2009-10-16 浮動小数点加算器

Publications (2)

Publication Number Publication Date
JP2011086133A JP2011086133A (ja) 2011-04-28
JP5515601B2 true JP5515601B2 (ja) 2014-06-11

Family

ID=44079029

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009238856A Expired - Fee Related JP5515601B2 (ja) 2009-10-16 2009-10-16 浮動小数点加算器

Country Status (1)

Country Link
JP (1) JP5515601B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0192829A (ja) * 1987-10-02 1989-04-12 Hitachi Ltd 浮動小数点演算器
JP2901463B2 (ja) * 1993-08-31 1999-06-07 甲府日本電気株式会社 加算装置
GB2339936B (en) * 1998-05-27 2002-09-25 Advanced Risc Mach Ltd Data processing apparatus and method for performing multiply-accumulate operations

Also Published As

Publication number Publication date
JP2011086133A (ja) 2011-04-28

Similar Documents

Publication Publication Date Title
JP6001276B2 (ja) 浮動小数点加算を実行するための装置および方法
US8499017B2 (en) Apparatus and method for performing fused multiply add floating point operation
US20110231460A1 (en) Apparatus and method for floating-point fused multiply add
US20100042665A1 (en) Subnormal Number Handling in Floating Point Adder Without Detection of Subnormal Numbers Before Exponent Subtraction
JP4388543B2 (ja) 3項入力の浮動小数点加減算器
JP6415236B2 (ja) 浮動小数点加算ユニットを含む装置及びシステム、並びに浮動小数点加算方法
US8239441B2 (en) Leading zero estimation modification for unfused rounding catastrophic cancellation
US6175851B1 (en) Fast adder/subtractor for signed floating point numbers
CN108694037B (zh) 用于在执行浮点减法时估计移位量的装置和方法
JP2003196079A (ja) 積和演算装置、及び積和演算方法
US7437400B2 (en) Data processing apparatus and method for performing floating point addition
US8620983B2 (en) Leading sign digit predictor for floating point near subtractor
JP4806453B2 (ja) 演算処理装置、情報処理装置、および演算方法
US20070038693A1 (en) Method and Processor for Performing a Floating-Point Instruction Within a Processor
JP2011118633A (ja) 浮動小数点除算器、及びそれを用いた情報処理装置
JPH10289096A (ja) 論理回路及び浮動小数点演算装置
TWI723681B (zh) 多輸入浮點加法器
JP5515601B2 (ja) 浮動小数点加算器
KR102459011B1 (ko) 선두 제로 예측
US10275218B1 (en) Apparatus and method for subtracting significand values of floating-point operands
US7640286B2 (en) Data processing apparatus and method for performing floating point multiplication
US20140059104A1 (en) Arithmetic circuit for calculating correction value
US7386580B2 (en) Data processing apparatus and method for computing an absolute difference between first and second data elements
Li et al. Design of a fully pipelined single-precision multiply-add-fused unit
JP3257278B2 (ja) 冗長なシフト数予測とシフト誤り補正を用いた正規化装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120720

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130924

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140130

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140304

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140317

R150 Certificate of patent or registration of utility model

Ref document number: 5515601

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees