JP6871513B2 - 演算器及び演算器の制御方法 - Google Patents

演算器及び演算器の制御方法 Download PDF

Info

Publication number
JP6871513B2
JP6871513B2 JP2017100529A JP2017100529A JP6871513B2 JP 6871513 B2 JP6871513 B2 JP 6871513B2 JP 2017100529 A JP2017100529 A JP 2017100529A JP 2017100529 A JP2017100529 A JP 2017100529A JP 6871513 B2 JP6871513 B2 JP 6871513B2
Authority
JP
Japan
Prior art keywords
circuit
count
value
carry
input
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.)
Active
Application number
JP2017100529A
Other languages
English (en)
Other versions
JP2018195228A (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 JP2017100529A priority Critical patent/JP6871513B2/ja
Priority to US15/983,395 priority patent/US10579333B2/en
Publication of JP2018195228A publication Critical patent/JP2018195228A/ja
Application granted granted Critical
Publication of JP6871513B2 publication Critical patent/JP6871513B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49936Normalisation mentioned as feature only

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computing Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は,演算器及び演算器の制御方法に関する。
演算器の1つとして、第1、第2の入力を乗算する乗算器と、その乗算結果に第3の入力を加算または減算(以下、略して加算と称する。)する加算器を組み合わせた乗加算器がある。一方、浮動小数点の乗加算器は、浮動小数点の入力の小数点の位置を合わせる桁合わせを行って演算し、乗加算結果を正規化シフトする。
正規化シフトは、乗加算結果の小数点位置を左シフトすることで所定の位置に戻す動作であり、乗加算結果を左シフトする正規化シフト回路により行われる。乗加算結果の小数点位置がわかれば左シフト量である正規化シフト量を決定することができるが、加算結果を待って正規化シフト量を決定すると演算時間の遅延になる。そこで、加算器の入力等から正規化シフト量を予測する正規化シフト量予測回路が設けられる。
正規化シフト量予測回路により予測される正規化シフト量は、必ずしも正しいシフト量でない場合がある。正規化シフト量予測回路が、最下位からのキャリー伝播を正確に考慮しないからである。予測されたシフト量が正しいシフト量より少ない場合は、正規化シフト回路が追加の左シフトを行うことで予測誤差を補正する。逆に、予測されたシフト量が正しいシフト量より多い場合は、正規化シフト回路には右シフトの機能を有していないので、正規化シフト回路の出力を右シフトする右シフト補正回路が利用される。
加算器などの加算結果の正規化シフトについては、以下の文献に記載されている。
特開平06−75752号公報 特開平08−87399号公報 特開平10−289096号公報
しかしながら、右シフト補正回路を設けることは、回路規模の拡大とともに、演算時間の遅延を伴うので好ましくない。
上記の特許文献1では、正規化シフト量予測回路の予測シフト量の誤差の有無を判定して予測シフト量を補正するために、入力のボロー伝播回路が追加される。しかしながら、ボロー伝播回路と予測シフト量の補正回路の回路規模が大きく、回路面積、演算時間の遅延、オーバヘッドの発生などが問題となる。
そこで,一つの実施の形態の目的は,少ない回路規模で正規化シフト量の予測値を補正し追加の右シフト補正回路を必要としない演算器及び演算器の制御方法を提供することにある。
本開示の第1の側面は,第1オペランドと第2オペランドの第1入力と第2入力の浮動小数点フォーマットを、M個(Mは複数)の最上位ビットが0で前記最上位ビットに続くN個(Nは複数)の下位ビットが仮数である内部フォーマットに変換して、乗算する乗算器と、
第3オペランドの第3入力の浮動小数点フォーマットを、前記内部フォーマットに変換し、前記第3入力を前記乗算器の乗算結果に加算し乗加算結果を出力する加算器と、
前記乗加算結果を左シフト量に基づいて左シフトする正規化シフト回路と、
前記左シフト量を予測する左シフト量予測回路とを有し、
前記加算器が、前記乗算結果である第1加算値及び第1キャリー値と前記第3入力とを加算するキャリー保存加算器と、前記キャリー保存加算器が出力する第2加算値と第2キャリー値とを加算して前記乗加算結果を出力する全加算器とを有し、
前記左シフト量予測回路は、
前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのゼロカウント判定値を生成し、上位ビット側から降順で連続する真のゼロカウント判定値の数であるゼロカウント(LZC)を生成するゼロカウント回路と、
前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのワンカウント判定値を生成し、上位ビット側から降順で連続する真のワンカウント判定値の数であるワンカウントを生成するワンカウント回路と、
前記第2加算値と第2キャリー値の前記M個の上位ビットの最下位ビットの否定論理和が真になる補正イネーブルの場合に、前記ワンカウントをゼロに補正する補正回路とを有する、演算器、である。
第1の側面によれば,少ない回路規模で正規化シフト量の予測値を補正し追加の右シフト補正回路を必要としない。
第1の実施の形態における演算回路の一例である乗加算回路を示す図である。 第1、第2、第3のオペランドOP1,OP2,OP3と結果レジスタ21内の浮動小数点数のフォーマットを示す図である。 演算器内の内部フォーマットを示す図である。 図1の乗加算器内の各データ間の桁を示す図である。 第1の実施の形態における左シフト量予測回路17の構成例を示す図である。 ワンカウント回路(LOC回路)の構成を示す図である。 LZC回路の構成を示す図である。 ゼロカウント回路(LZC回路)171内のゼロカウント判定回路(LZP回路)と、ワンカウント回路(LOC回)172内のワンカウント判定回路(LOP回路)の論理演算を示す図である。 ワンカウント判定信号LOPの3つの例とワンカウントLOCとの関係を示す図である。 [60][59]ビットのS[60:59],C[60:59]と、[59]ビットのキャリーインCI[59]の全組み合わせ(32通り)でのLOP,LZPと、全加算器15の全加算値ADD1(RESULTのRES)とを示す図である。 図10の(B)多くカウントするケース(CA5)を抽出した図である。 図11についてLZCに誤りが発生する可能性がある場合とLOCに誤りが発生する可能性がある場合について上下に分けて示す図である。 S[63:61] + C[63:61] = 110を満たすS[63:61]とC[63:61]の8つのパターンを示す図である。 上記の保証4と保証2を満たすCSAの入力SUM,CRY,RSFTのパターンを示す図である。 図12の(LOC)の4つのパターンに図14のパターンP_f0を適用した図である。 第2の実施の形態における演算回路の一例である乗加算回路を示す図である。 第2の実施の形態における左シフト量予測回路17の構成例を示す図である。
[第1の実施の形態]
[第1の実施の形態の乗加算回路]
図1は、第1の実施の形態における演算回路の一例である乗加算回路を示す図である。乗加算回路は、第1、第2オペランドOP1、OP2の入力を乗算する乗算器MLPLと、乗算結果SUM+CRYに第3オペランドOP3の入力を加算する加算回路14,15とを有する。3つのオペランドOP1,OP2,OP3の入力は、例えばIEEE754フォーマットの浮動小数点数または整数であり、それぞれのフォーマット回路FORMATにより、後述する所定のデータフォーマットに変換される。
乗算器MLPLは、一例として、ブースアルゴリズム(Booth Algorism)とワレスツリー(Wallace-Tree)で構成される。即ち、乗算器MLPLは、オペランドOP1の乗数をデコードするブースデコーダ10と、ブースデコーダのデコード値に対応するオペランドOP2の被乗数の部分積を選択するブースセレクタ11と、ブースセレクタで選択された被乗数の部分積を加算するワレスツリー12とを有する。
例えば、2次のブースアルゴリズムであれば、ブースデコーダ10は、オペランドOP1の乗数を2ビットずつデコードし、ブースセレクタ11は、オペランドOP2の被乗数の0、±1、±2倍の数(被乗数の部分積)をデコード値に基づいて選択する。
ワレスツリー回路12は、キャリーセーブアダー(Carry Save Adder: CSA)を逆ツリー状に接続して構成され、最終段のCSAが加算SUMとキャリーCRYとを出力する。
一方、第3オペランドOP3の加数は、入力シフト回路である右シフト回路13により右シフト量RSA右シフトされ、乗算器の出力SUM,CRYと桁合わせされる。そして、右シフト回路13の下位側の出力RSFT_Lは、ワレスツリー12の出力SUM,CRYと共に、CSA14に入力され、その出力S,C(SはSum、CはCarryだが、ブースツリーのSUM,CRYと区別するためにS,Cとする)は、全加算器15に入力される。また、右シフト回路13の上位側の出力RSFT_Hと、全加算器15のキャリーアウト(桁上げ)COが、キャリー加算器16により加算される。
また、右シフト回路13は、第3オペランドOP3の加数が負の場合、2の補数に変換する。また、入力シフト回路は右シフト回路に限定されず左右いずれにもシフト可能な左右シフト回路でも良い。
そして、セレクタSEL1は、キャリー加算器の出力ADD2に全加算器の出力ADD1を連結したビット列のうち、上位側か下位側のいずれかを選択して乗加算値MSを出力する。セレクタSEL1の動作については、後で説明する。
一方、全加算器15に入力されるCSA14の出力S,Cが、左シフト量予測回路17に入力される。左シフト量予測回路17は、CSA14の出力S,Cから乗加算値MSの仮数部の先頭の連続する「0」の数(LZC:Leading Zero Count:先頭0数)と、先頭の連続する「1」の数(LOC:Leading One Count:先頭1数)のいずれかである正規化シフト量(左シフト量)LSAを予測する。また、左シフト量予測回路は、予測した正規化シフト量を補正するLOC補正回路を有する。
そして、セレクタSEL1が出力する乗加算値MSは、正規化シフト回路(左シフト回路)18により、正規化シフト量(左シフト量)LSAだけ左シフトされる。後で説明するが、正規化シフト回路18は、セレクタSEL1が下位側を選択した場合に、左シフト量予測回路が予測した正規化シフト量LSAに基づいて乗加算値MSを左シフトし、セレクタSEL1が上位側を選択した場合は、右シフト量RSAと同じシフト量だけ乗加算値MSを左シフトする。したがって、セレクタSEL1が下位側を選択した場合のみ、左シフト量予測回路の予測シフト量LSAが使用される。
最後に、正規化シフト回路18の出力は、丸め回路19で丸め処理され、フォーマット回路20で演算器内の所定のフォーマットからIEEE754のフォーマットに変換され、結果レジスタ21に格納される。
図2は、第1、第2、第3のオペランドOP1,OP2,OP3と結果レジスタ21内の浮動小数点数のフォーマットを示す図である。このフォーマットはIEEE754に準拠している。IEEE754のフォーマットは、最上位ビットから順に符号部S(Sign)、指数部E(Exponent)、仮数部F(Fraction)で構成される。単精度の場合、符号部Sは1ビット、指数部Eは8ビット、仮数部Fは23ビットである。倍精度の場合、Sは1ビット、Eは11ビット、Fは52ビットである。また、半精度の場合、Sは1ビット、Eは5ビット、Fは10ビットである。仮数部Fには隠しビット(Hidden Bit)が省略される。また、隠しビットは、正規化数の場合は「1」、非正規化数(極小値)の場合は「0」である。
図3は、演算器内の内部フォーマットを示す図である。演算器内の内部フォーマットは、ワレスツリー12や右シフト回路13の入力のデータフォーマットである。図3には、単精度の例である。正規化数と非正規化数は、M個(3個)の最上位ビット[31:29]に「0」を有し、M個の最上位ビットに続くN個(24個)の下位ビット[28:5]に最上位に隠しビットを追加した仮数部を有し、さらに[4:0]ビットに「0」を有する。[31:29]と[4:0]の「0」は、単に32ビット幅にするための詰め物である。したがって、浮動小数点数の場合は、実質的な演算対象の仮数は[28:5]ビットに位置する。一方、整数は、全[31:0]ビットが仮数部になる。
本実施の形態の左シフト量予測回路17内のLOC補正回路は、図3の内部フォーマットを前提にした構成である。この点は後で詳述する。
図4は、図1の乗加算器内の各データ間の桁を示す図である。前提として、各オペランドOP1,OP2,OP3のデータのビット幅は単精度である。乗算器MLPLの入力である第1オペランドOP1の乗数と第2オペランドOP2の乗数は、いずれも [31:0] ビットのデータである。そして、乗算値であるワレスツリー12の出力SUM,CRYの和SUM+CRYは、[63:0]ビットのデータとなる。
さらに、加算器の入力である第3オペランドOP3の加数は、[95:64]ビットのデータである。そして、右シフト回路13が、オペランドOP1,OP2,OP3の浮動小数点の指数ビットに基づいて求めた右シフト量RSAにしたがって第3オペランドOP3のデータを右シフトする。図4には、(1)右シフト量RSA1(<32ビット)の場合の右シフト後のデータOP3_R1と、(2)右シフト量RSA2(≧32ビット)の場合の右シフト後のデータOP3_R2とが示される。
上記の(1)の場合、右シフト後のデータOP3_R1が[95:64]と[63:32]とに分離され、右シフト後のデータOP3_R1の63ビット以下の下位側データRSFT_LがCSA14に入力され、64ビット以上の上位側データRSFT_Hがキャリー加算器16に入力される。そして、全加算器15の出力ADD1が[63:0]ビットのデータとして、キャリー加算器16の出力ADD2が[95:64]ビットのデータとして、セレクタSELに入力される。この場合、セレクタSELは、上位64ビットの[95:32]ビットのデータSEL_OUT_Hを選択し、乗加算値MSとして出力する。
上記の(2)の場合、右シフト後のデータOP3_R2は[63:0]内まで右シフトされ、下位側データRSFT_LとしてCSA14に入力される。一方CSA14には、ワレスツリー回路12の出力CRY,SUMが入力される。そして、CSA14がデータOP3_R2とワレスツリー回路の出力CRY,SUMとを加算し、全加算器15がCSA14の出力S,Cを加算し、その出力ADD1が[63:0]ビットのデータとなる。この場合、キャリー加算器16が出力するデータADD2は全て0である。よって、セレクタSELは、[63:0]ビットのデータSEL_OUT_Lを選択し乗加算値MSとして出力する。
図4から明らかなとおり、セレクタSELが上位側SEL_OUT_Hを選択した場合、正規化シフト回路18は、右シフト量RSAと等しいシフト量だけ左シフトする。一方、セレクタSELが下位側SEL_OUT_Lを選択した場合、正規化シフト回路18は、左シフト量予測回路17が予測する左シフト量LSAに従って左シフトする。
[左シフト量予測回路17]
図5は、第1の実施の形態における左シフト量予測回路17の構成例を示す図である。左シフト量予測回路は、CSA14の出力である加算値S[61:0]とキャリー値C[61:0]を入力する。先頭ゼロ「0」の数をカウントするLZC回路171は、S[60:0]とC[60:0]とを最下位からのキャリー伝播を完全に考慮することなく疑似的に加算し、各桁の疑似加算結果に基づいて先頭ゼロの数をカウントし、ゼロカウントLZC[5:0]を出力する。具体的な演算式を後で説明する。
同様に、先頭ワン「1」の数をカウントするLOC回路172も、S[60:0]とC[60:0]とを最下位からのキャリー伝播を完全に考慮することなく疑似的に加算し、各桁の疑似加算結果に基づいて先頭ワンの数をカウントし、カウント値LOC[5:0]を出力する。この具体的な演算式も後で説明する。
さらに、左シフト量予測回路は、補正判定回路CRCT_1を有する。補正判定回路CRCT_1は、例えばS[61]とC[61]から予測されたLOC[5:0]の誤りを示す補正フラグFLAGを生成し、ワンカウントLOCをゼロに補正するワンカウント補正回路ZERO_Mが、補正フラグFLAGに応答して、ワンカウント予測値LOC[5:0]を全てゼロに補正する。
左シフト量予測回路は、更に、セレクタSEL2を有し、セレクタSEL2は、LZCを選択する選択信号LZC_SELが真(LZC_SEL=1)になればLZC[5:0]を選択し、LOCを選択する選択信号LOC_SELが真(LOC_SEL=1)になればLOC[5:0]を選択し、左シフト量LSA[5:0]として出力する。この左シフト量LSAは、正規化シフト回路18に入力される。
図6は、ワンカウント回路(LOC回路)の構成を示す図である。LOC回路172は、ワンカウント判定回路(LOP回路)LOPとエンコーダENC_2とを有する。LOP回路は、S[60:0]とC[60:0]とを最下位からのキャリー伝播を完全に考慮することなく疑似的に加算し、各桁の疑似加算結果に基づいて先頭ワンカウンタLOCをカウントアップするか否かを示すワンカウント判定値(LOP値)を各桁毎に生成する。つまり、LOP値はLOP[60:0]になり、各桁iでLOP[i]=1であれば先頭ワンカウンタLOCをカウントアップすることを示し、LOP[i]=0であればカウントアップしないことを示す。
一方、エンコーダENC_2は、LOPが生成するLOP値LOP[60:0]の60ビットから降順に0ビットまで、図中に示した演算を実行する。即ち、60ビットから順に、LOP[i]=1であれば先頭ワンカウンタLOCをカウントアップし(LOC=LOC+1)、iをデクリメントし(i=i-1)、LOP[i]=0であれば演算を終了する。つまり、エンコーダENC_2は、60ビットから連続するLOP[i]=1をカウントする。また、LOC172は、ワンカウントするので、乗加算値MSが負の場合の正規化シフト量を予測する。
図7は、LZC回路の構成を示す図である。LZC回路171は、LZP回路とエンコーダENC_1とを有する。LZP回路は、S[60:0]とC[60:0]とを最下位からのキャリー伝播を完全に考慮することなく疑似的に加算し、各桁の疑似加算結果に基づいて先頭ゼロカウンタLZCをカウントアップするか否かを示すLZP値を各桁毎に生成する。つまり、LZP値はLZP[60:0]になり、各桁iでLZP[i]=1であれば先頭ゼロカウンタLZCをカウントアップすることを示し、LZP[i]=0であればカウントアップしないことを示す。
一方、エンコーダENC_1は、LZPが生成するLZP値LZP[60:0]の60ビットから降順に0ビットまで、図中に示した演算を実行する。即ち、60ビットから順に、LZP[i]=1であれば先頭ゼロカウンタLZCをカウントアップし(LZC=LZC+1)、iをデクリメントし(i=i-1)、LZP[i]=0であれば演算を終了する。つまり、エンコーダENC_1は、60ビットから連続するLZP[i]=1をカウントする。また、LZC171は、ゼロカウントするので、乗加算値MSが正の場合の正規化シフト量を予測する。
[LZP,LOPについて]
図8は、ゼロカウント回路(LZC回路)171内のゼロカウント判定回路(LZP回路)と、ワンカウント回路(LOC回)172内のワンカウント判定回路(LOP回路)の論理演算を示す図である。LZP回路及びLOP回路の論理式は次のとおりである。
LZP[i] = (S[i]^C[i]) ^ (~S[i-1]&~C[i-1]) 式1
LOP[i] = (S[i]^C[i]) ^ (S[i-1]&C[i-1]) 式2
ここで、S,CはCSA14の出力、^はEOR、~はNOT、&はANDを意味する。
正確なLZC、LOCをカウントするためには、全加算器15の入力S[60:0]、C[60:0]を全加算した結果に対して先頭のゼロ「0」をまたは先頭のワン「1」をカウントする必要がある。しかし、全加算は最下位からのキャリー伝播を全て考慮する必要があり、論理段数が多くなり演算時間が長くなる。
そこで、LZP回路、LOP回路では、キャリー伝播を正確に考慮せず、その代わりにキャリー伝播の可能性を考慮する疑似的な加算を行った疑似的加算結果に対応するカウント判定値LZP,LOPを生成し、エンコーダが、カウント判定値LZP,LOPの先頭ビットからの連続する「1」をカウントする。つまり、キャリー伝播を正確に考慮しない代わりに、カウント対象ビット[i]の半加算値を、1つ下位のビット[i-1]からのキャリー伝播の可能性に基づいて修正し、LZP[i]、LOP[i]を生成する。なお、ゼロカウント判定値LZPは、加算結果が「0」の場合エンコーダがLZCをカウントアップする必要があるので、ゼロカウント判定値LZPは、加算結果「0」に対してLZP=1になる。
図8には、S[i],S[i-1]とC[i],C[i-1]の全ての組み合わせ9通りについて、半加算値S[i]^C[i]と、[i-1]ビットからのキャリーインCI[i]と、半加算値とキャリーインCI[i]とを加算した全加算値の[i]ビットの値S[i]^C[i]^CI[i]と、LZP[i]、LOP[i]の論理式内のキャリー伝播の可能性~S[i-1]&~C[i-1]、S[i-1]&C[i-1]と、LZP[i]と、LOP[i]とを示す。
S[i],S[i-1]とC[i],C[i-1]の全ての組み合わせは、論理的には16通りあるが、加算では被加数と加数の可換性があるので、重複する組み合わせを省略してここでは9通りのケースCA1〜CA9が示される。ビット毎の可換性も考慮されている。以下、9通りのケースCA1〜CA9について説明する。
(1)S[i-1],C[i-1]が0,0の場合(ケースCA1,CA4,CA7)、キャリーインCI[i]が発生する可能性はない。したがって、[i]での半加算値S[i]^C[i]と、[i-1]からのキャリーインCI[i]とに基づいて求められるS[i]^C[i]^CI[i]に基づいて、カウント判定値LZP、LOP(ゼロカウント判定値LZP、ワンカウント判定値LOP)を判定することができる。
つまり、ケースCA1では、S[i]^C[i]^CI[i]=0であるので、ゼロカウント有を示すLZP[i]=1、ワンカウントを示さないLOP[i]=0となる。
ケースCA4では、S[i]^C[i]^CI[i]=1であるので、ゼロカウント無を示すLZP[i]=0、ワンカウントを示すLOP[i]=1となる。
同様に、ケースCA7では、S[i]^C[i]^CI[i]=0であるので、ゼロカウント有を示すLZP[i]=1、ワンカウントを示さないLOP[i]=0となる。
(2)次に、S[i-1],C[i-1]が1,1の場合(ケースCA3,CA6,CA9)、キャリーインCI[i]が必ず発生する。したがって、[i]での半加算値S[i]^C[i]と、[i-1]からのキャリーインCI[i]とに基づいて求められるS[i]^C[i]^CI[i]に基づいて、カウント判定値LZP、LOP(ゼロカウント判定値LZP、ワンカウント判定値LOP)を判定することができる。
つまり、ケースCA3では、S[i]^C[i]^CI[i]=1であるので、ゼロカウント無のLZP[i]=0、ワンカウント有のLOP[i]=1となる。
ケースCA6では、S[i]^C[i]^CI[i]=0であるので、ゼロカウント有のLZP[i]=1、ワンカウント無のLOP[i]=0となる。
同様に、ケースCA9では、S[i]^C[i]^CI[i]=1であるので、ゼロカウント無のLZP[i]=0、ワンカウント有のLOP[i]=1となる。
上記のケースCA1,CA4,CA7とCA3,CA6,CA9の場合、LZP[i]、LOP[i]に誤りはない。
(3)そして、S[i-1],C[i-1]が0,1または1,0の場合(ケースCA2,CA5,CA8)、キャリーインCI[i]が発生する可能性があるだけなので、上記のように2ビットのS[i:i-1],C[i:i-1]だけからは、ゼロカウント有かワンカウント有かを判定できない。つまり、下位の[i-2]からキャリーが上がってくれば、[i-1]からキャリーが上がり、キャリーインCI[i]=1になるが、下位の[i-2]からキャリーが上がってこなければ、[i-1]からキャリーが上がらず、キャリーインCI[i]=0になる。したがって、図中、キャリーインCI[i]=0/1と示している。
そこで、半加算値S[i]^C[i]=0の場合(CA2,CA8)、このビット[i]で必ずキャリー伝播が止まるので、キャリー伝播によるビット反転はビット[i]で止まる。そして、ビット[i]でのゼロカウント判定値LZP及びワンカウント判定値LOPが[i-1]からのキャリー伝播により異なる可能性がある。そこで、LZPもLOPも、ゼロカウント無LZP[i]=0、ワンカウント無LOP[i]=0とし、エンコーダがカウント値を少なく数えるようにする。但し、このような論理により各カウントLZC, LOCが少なくなった場合は、図示しない別の回路で生成されるエラー信号LZP_ERROR、LOP_ERRORにより正規化シフトを追加することで補正を行うことができる。
一方、半加算値S[i]^C[i]=1の場合(CA9)、キャリーインCI[i]=1の場合に、[i+1]ビットにキャリーが伝播するので、カウント有無の判定は[i+1]ビットに委ねることにして、[i]ビットではゼロカウント有LZP[i]=1、ワンカウント有LOP[i]=1とする。つまり、エンコーダがカウント値を多く数える可能性([i-1]からキャリーイン無ならLZP=1でLZCが+1誤り,キャリーイン有ならLOP=1でLOCが+1誤り)を許容する。ここで、カウント有無の判定は[i+1]ビットに委ねるとは、エンコーダが最上位ビット[60]から降順にカウントするので、カウント有無の判定が [i+1]ビットで行われることを示唆している。
図8には、9つのケースCA1-CA9の下に、半加算値S[i]^C[i]=0,1とキャリーインCI[i]=0,0/1,1の6つの組み合わせが、9つのケースCA1-CA9と関連付けて示されている。これを参照して、LZP[i]、LZP[i]の論理式について簡単に説明する。
まず、LOP[i]の論理式(式2)は以下のとおりである。
LOP[i] = (S[i]^C[i]) ^ (S[i-1]&C[i-1]) 式2
すなわち、LOP[i]は、半加算値(S[i]^C[i])と、[i-1]ビットだけでキャリーが発生する条件(S[i-1]&C[i-1])のEORである。EORによれば、(S[i]^C[i])=1は、キャリー発生条件(S[i-1]&C[i-1])=0なら1のまま不変だが、(S[i-1]&C[i-1])=1なら0に反転される。同様に、(S[i]^C[i])=0も、(S[i-1]&C[i-1])=0なら0のまま不変だが、(S[i-1]&C[i-1])=1なら1に反転される。
また、 キャリー発生条件(S[i-1]&C[i-1])=1ならキャリーインCI[i]=1と確定するが、 (S[i-1]&C[i-1])=0ならキャリーインCI[i]=0/1となり、0,1のいずれになるかは[i-2]ビットからのキャリー発生に依存する。
したがって、LOP[i]の式2によれば、半加算値が(S[i]^C[i])=0の場合(左から3列)、キャリー発生条件が(S[i-1]&C[i-1])=0なら、式2において、半加算値(S[i]^C[i])=0が反転されず、LOP[i]=0となる(CA1,7及びCA2,8)。逆に、(S[i-1]&C[i-1])=1なら、半加算値(S[i]^C[i])=0が反転され、LOP[i]=1となる(CA3,9)。但し、CA2,8では、CI[i]=0/1であり、キャリー発生条件が(S[i-1]&C[i-1])=0は正しくない場合を含むが、式2において、半加算値(S[i]^C[i])=0が(S[i-1]&C[i-1])=0で反転されず、LOP[i]=0となる。つまり、CA2,8は、LOCが少なくカウントされる場合を含む。
また、半加算値が(S[i]^C[i])=1の場合(右から3列)、 (S[i-1]&C[i-1])=0なら、半加算値(S[i]^C[i])=1が反転されず、LOP[i]=1となる(CA4,CA5)。逆に、(S[i-1]&C[i-1])=1なら、半加算値(S[i]^C[i])=1が反転され、LOP[i]=0となる(CA6)。但し、CA5では、CI[i]=0/1であり、キャリー発生条件 (S[i-1]&C[i-1])=0は正しくない場合を含むが、式2において、半加算値(S[i]^C[i])=1が(S[i-1]&C[i-1])=0で反転されず、LOP[i]=1となる。つまり、CA5は、LOCが多くカウントされる場合を含む。
次に、LZP[i]の論理式(式1)は以下のとおりである。
LZP[i] = (S[i]^C[i]) ^ (~S[i-1]&~C[i-1]) 式1
すなわち、LZP[i]は、半加算値(S[i]^C[i])はLOP[i]と同じであるが、その半加算値(S[i]^C[i])は、キャリー非発生条件(~S[i-1]&~C[i-1])とEORされている。これは、LOPとは逆に、LZPが先頭ゼロを判定するからである。
つまり、式1において、半加算値(S[i]^C[i])=0の場合(左から3列)、キャリー非発生条件(~S[i-1]&~C[i-1])=1で半加算値=0を反転させてLZP[i]=1(ゼロ有)とし(CA1,7)、キャリー非発生条件(~S[i-1]&~C[i-1])=0では半加算値=0を反転させずLZP[i]=0(ゼロ無)にしている(CA2,8及びCA3,9)。CA2,8ではLZCが少なくカウントされる可能性がある。
逆に、半加算値(S[i]^C[i])=1の場合(右から3列)、キャリー非発生条件(~S[i-1]&~C[i-1])=1で半加算値=1を反転しLZP[i]=0とし(CA4)、キャリー非発生条件(~S[i-1]&~C[i-1])=0では半加算値=1を反転させずLZP[i]=1(ゼロ有)にしている(CA5,6)。CA5ではLZCが多くカウントされる可能性がある。
次に、ケースCA5の場合に、LZP[i]=LOP[i]=1とLZCとLOCを多くカウントするようにしても、一般に問題がないことを説明する。
図9は、ワンカウント判定信号LOPの3つの例とワンカウントLOCとの関係を示す図である。但し、ゼロカウント判定値LZPとゼロカウントLZCも同様である。図中、3つの例(1)(2)(3)の[i+1][i1][i-1]ビットを見ると、下位側から順にCA5,CA5,CA2/8となっている。これは、LOPもLZPも、[i]がCA5なら [i+1]はCA2,CA5,CA8のいずれかになるからである。このことは、図8の9通りで、CA5ではS[i],C[i]=0,1であるので、[i+1]ではS[i-1],C[i-1]=0,1になりCA2,CA5, CA8しか取り得ないことから理解できる。つまり、[i]がCA5の場合、[i-1]からキャリーが伝播してくれば[i+1]はCA5になり、[i-1]からキャリーが伝播してこなければ[i+1]はCA2,CA8のどれかになるのである。したがって、下位ビットからのキャリー伝播が連続する場合にCA5が連続し、[i-1]からのキャリー伝播が途切れれば、[i]でのCA5は [i+1]でCA2,CA8のいずれかになる。
そして、前述したとおり、CA2,CA8ではLOP,LZP=0とLOC,LZCをカウントしないようにしていたし、CA5ではLOP,LZP=1とLOC,LZCをカウントするようにしていた。
LOC,LZCは上位ビットからLOP=1、LZP=1の連続数をカウントするので、[i+1]でCA2,CA8になりLOP=0,LZP=0になると、そこでカウントが完了する。その結果、[i+1]の下位側のビット[i][i-1]がCA5の場合、CA5のLOP=1,LZP=1は、LOC,LZCにカウントされることはない。つまり、[i][i-1]のCA5の誤る可能性を含むLOP=1,LZP=1は、[i+1]でCA2,CA8になれば、LOC,LZCになんら影響を与えない。一方、[i][i-1]のCA5の誤る可能性を含むLOP=1,LZP=1は、[i+1]でCA5になれば、LOC,LZCに誤りの影響が継続される。
そこで、図6、7で説明したとおり、LOC,LZCは、有効ビットが埋め込まれている可能性がある[60]ビットから下位側のビットのLOP,LZP=1を降順でカウントし、一旦LOP,LZP=0になるとカウントを終了する。そこで、図9の3つの例(1)(2)(3)について検討する。
例(3)の場合、[60]ビットでCA2,CA8であればLOP,LZP=0となるので、LOC,LZCのカウントは終了し予測左シフト量LSAは0になる。例(1)(2)の場合、[60]ビットがCA5であるので、LOC,LZCは[60:58]のCA5によるLOP,LZP=1をカウントし、予測左シフト量LSAは3になる。
しかし、例(2)では、[61]ビットでCA2,CA8のいずれか(実際にはS[61],C[61]=00故、CA2)であり、本来ならここでLOC,LZCのカウントは終了し、[60:58]のCA5によるLOP,LZP=1のカウントLOC,LZC=3は誤りになる。例(1)は、[61]ビットでCA5であるので、[60:58]のCA5によるLOP,LZP=1のカウントLOC,LZC=3は誤りでないことになる。
結局、CA5が最上位ビットまで続く場合、それらCA5のLOP=1,LZP=1のカウントLOC,LZCは正しいことを意味している。[i]ビットでのCA5は、[i+1]以上にCA5が伝播するか否かを確認しないと誤りが含まれるか否か判定できないのである。
[LZC/LOC補正が必要な場合の分析]
本実施の形態では、図8の9通りのようなS,C,CIのあらゆる組み合わせについてLOP,LZPに誤りが含まれるケースを抽出し、さらに、図3のデータフォーマットの制約に基づいて、LOP,LZPに誤りが含まれるケースを絞り込み、適切なLOC,LZC補正回路を提案する。
図6、7の左シフト量予測回路17は、全加算器15の加算結果ADD1に基づいて左シフト量LSAを予測せず、全加算器15の入力S,Cの式1、2の論理演算により各ビット[i]についてのLZP[i], LOP[i]を求め、最上位ビット[60]からLZP[i]=1, LOP[i]=1をカウントする。論理演算式1、2は、該当ビット[i]と一つ下位ビットの[i-1]の入力S,Cだけで判定するので、最下位からのキャリー伝播を待つ必要がなく、正規化シフト量(左シフト量)の予測演算を高速化できる。
しかし、図9のケースCA2,CA5,CA8のように下位ビット[i-2]からのキャリー伝播の有無によりLZC,LOCのカウント値が少なくなったり、多くなったりする。CA2,CA8のようにLZC,LOCのカウント値が少なくなる誤りの場合は、エラー信号LZP_ERRORにより正規化シフト回路にて追加の左シフトを行うことで正規化シフトを修正できる。しかし、CA5のようにLZC,LOCのカウント値が多くなる誤りの場合は、正規化シフト回路が右シフト回路を有していないので、なんらかのLZC,LOCの補正回路が必要になる。
[ゼロカウント判定値LZP,ワンカウント判定値LOPの入力パターンに対するゼロカウントLZC,ワンカウントLOCに誤りがある可能性について]
図9で説明したとおり、ゼロカウントLZC,ワンカウントLOCに誤りがあるか否かを、最上位ビット[60]でのLZP[60],LOP[60]に誤りの可能性があるか否かを分析する。そのためには、[60][59]ビットのS[60:59],C[60:59]と、[58]ビットのS[58],C[58]に基づくキャリーインCI[59]の全ての組み合わせを分析し、LZC,LOCに誤りのある可能性を抽出してLZC/LOC補正回路を検討すればよい。
図10は、[60][59]ビットのS[60:59],C[60:59]と、[59]ビットのキャリーインCI[59]の全組み合わせ(32通り)でのLOP,LZPと、全加算器15の全加算値ADD1(RESULTのRES)とを示す図である。ここで、全加算値RES(=ADD1)はRES=S[60:59]+C[60:59]+CI[60:59]である。LZP,LOPは前述の式1、2で求められ、図10中にも式1,2が示されている。
図10によれば、最上行の2列と5列では、RES[60]=0だがLZP[60]=0とLZCが少なくカウントされることになり、図8のCA2に該当する。また、最上行の4列と7列では、RES[60]=1だがLZP[60]=1とLZCが多くカウントされることになり、図8のCA5に該当する。
2行の2列と5列では、RES[60]=1だがLZP[60]=1とLZCが多くカウントされることになり、図8のCA5に該当する。また、2行の4列と7列では、RES[60]=0だがLZP[60]=0とLZCが少なくカウントされることになり、図8のCA8に該当する。
3行の2列と5列では、RES[60]=1だがLOP[60]=0とLOCが少なくカウントされることになり、図8のCA2に該当する。また、3行の4列と7列では、RES[60]=0だがLOP[60]=1とLOCが多くカウントされることになり、図8のCA5に該当する。
4行の2列と5列では、RES[60]=0だがLOP[60]=1とLOCが多くカウントされることになり、図8のCA5に該当する。また、4行の4列と7列では、RES[60]=1だがLOP[60]=0とLOCが少なくカウントされることになり、図8のCA8に該当する。
以上、図10によれば、LZP,LOPを誤るケースは、(A)CA2,CA8のようにLZP,LOP=1とすべきところをLZP,LOP=0と判定してLZC,LOCを少なくカウントするケースと、(B)CA5のようにLZP,LOP=0とすべきところをLZP,LOP=1と判定してLZC,LOCを多くカウントするケースとがあることが判明した。
この場合、(A)少なくカウントするケース(CA2,CA8)は、RES[60:59]=10または01のいずれかであり、CA2,CA8が連続するビットで発生することはなく、つまり下位ビットからのキャリー伝播は必ず[60]ビットで止まり、LZC,LOCは高々1少なくカウントするだけである。このような誤りは、エラー信号により正規化シフト回路(左シフト回路)で再左シフトにより補正可能であり、問題はない。
一方、(B)多くカウントするケース(CA5)は、正規化シフト回路の左シフトでは補正できず、新たに補正用の右シフト回路を設ける必要が生じるので、右シフト回路を設ける代わりにLZC/LOC予測回路で補正することが望ましい。そこで、以降、(B)多くカウントするケース(CA5)について、入力パターンの制約から補正すべきパターンを絞り込む。
再度、図11は、図10の(B)多くカウントするケース(CA5)を抽出した図である。なお、加算器CSAは、入力SとCに可換性があるので、図11の1列と4列及び2列と3列はそれぞれ実質的に重複している。また、各ビット[i],[i-1]での入力S,Cも可換性があるので、図11の1−4列は全て重複している。但し、以降の分析ではこの8つのケースについて検討する。
次に、フォーマットされたオペランドOP1,OP2,OP3のデータフォーマットに基づいて乗加算回路内のデータのパターンを検討する。
[ワレスツリー12の出力(つまりCSA14の入力)SUM,CRYのパターン]
図3のデータフォーマットは、浮動小数点数である正規化数と非正規化数と、整数とに対応するが、LZCは浮動小数点数の演算結果の左シフト(正規化シフト)のシフト量を予測するものである。よって、ワレスツリー12の入力パターンは浮動小数点数の場合に限定できる。その結果、ワレスツリーの入力パターン(OP1,OP2のフォーマット後のパターン)は、[31:28]=0001または0000に限られる。
したがって、ワレスツリーの出力SUM,CRYの加算値SUM+CRY(OP1,OP2の乗算結果)は、正規化数*正規化数(0001*0001=0000001)と、正規化数*非正規化数(0001*0000=00000001)と、非正規化数*非正規化数(0000*0000)のいずれかであり、以下が保証される。
[63:57]=0000001または0000000 保証1
つまり、ワレスツリーの出力パターン(SUN+CRY)は、少なくとも以下が保証される。
[63:58]=000000 保証2
[入力シフト回路RSFTの出力パターン]
右シフト回路RSFTの入力も浮動小数点数に限定すると、[31:28]=0001または0000に限られる。図4にて説明したとおり、正規化シフト回路18は、セレクタSEL1が上位側64ビットSEL_OUT_Hを選択した場合、右シフト量RSAに基づいて左シフトを行い、セレクタSELが下位側64ビットSEL_OUT_Lを選択した場合、LZC/LOC予測シフト量LSAに基づいて左シフトを行う。
そのため、LZC/LOC予測シフト量LSAが利用されるのは、図4の下位側64ビットSEL_OUT_Lが選択される場合であり、その場合、第3のオペランドOP3[28]が右シフト回路RSFTにより[60]ビット以下まで右シフトされている。つまり、右シフト回路RSFTが第3のオペランドの数を少なくとも32ビット右シフトしている。
さらに、第1、第2オペランドOP1,OP2の符号と第3オペランドOP3の符号に基づいて、TRUE_ADDとTRUE_SUBの判定が行われる。つまり、TRUE_ADDは、乗算結果と加算オペランドOP3の符号に基づき乗加算を行うケースであり、TRUE_SUBは、乗算結果と加算オペランドOP3の符号に基づき乗減算を行うケースである。
そして、TRUE_SUBの場合は最小右シフト量が32ビットに制御され、一方、TRUE_ADDの場合は最小右シフト量が33ビットに制御される。
この理由は、TRUE_ADDの場合、全加算器15で下位側からの桁上げ(キャリーイン)により、[60]ビットの1が0に変更され[61]ビットが1になる可能性がある。その場合、[60]ビット以下の数を見誤ることがある。そこでTRUE_ADDの場合、最小右シフト量をTRUE_SUBより1ビット多く33ビットにして、右シフト後のHiddenビットの位置が[59]ビットの位置になるよう制御している。
よって、TRUE_ADDの場合の最小右シフト量は33であり、少なくとも以下が保証される。
RSFT_OUTPUT[63:60]=0000 保証3
また、TRUE_SUBの場合の最小右シフト量は32であり、少なくとも以下が保証される。
RSFT_OUTPUT[63:61]=000 保証4
[ワレスツリー出力+RSFT出力のパターン、ADDERの出力RESのパターン]
次に、ワレスツリー出力+RSFTの出力=ADDERの出力RESであり、CSA14の出力S+C=RESの上位ビットRES[63:58]について検討する。
ワレスツリー出力とRSFTの出力の加算結果RESは、以下のようになる。
RES[63:58] =
{SUM[63:58] + CRY[63:58] + (SUM+CRY[57:0]のCO)[58]} + {RSFT[63:58] + (RSFT[57:0]のCO)[58]}
前述の保証2のとおり、SUM+CRYの結果は[63:58]=000000が保証されるため、以下となる。
{SUM[63:58] + CRY[63:58] + (SUM+CRY[57:0]のCO)[58]}=000000
したがって、上記2つの式を整理すると、以下のとおりとなる。
RES[63:58] = RSFT[63:58] + RSFT[57:0]のCO[58]
ここで、RSFT[57:0]のCO[58]は、TRUE_SUBの場合にコンプリメント(2の補数化)を行うときに最下位ビットにCI=1を加算した場合にのみ発生し、一方、TRUE_ADDの場合、RSFT[57:0]のCO[58]は常に0となる。よって、以下のとおりである。
TRUE_ADDの場合、RSFT[57:0]のCO[58] = 0
TRUE_SUBの場合、RSFT[57:0]のCO[58] = 1
そして、前述の保証3,4によれば、以下のとおりである。
TRUE_ADDの場合、RSFT_OUTPUT[63:58]=0000xx 保証3
TRUE_SUBの場合、RSFT_OUTPUT[63:58]=000xxx 保証4
上記の保証3,4のRSFT_OUTPUT[63:58]とRSFT[57:0]のCO[58]を、上記のRES[63:58]に代入すると、CSAの出力S+C=RESの上位ビットRES[63:58]は、以下のとおり保証される。
TRUE_ADDの場合、RES[63:60] = 0000 保証5
TRUE_SUBの場合、RES[63:60] = 111または000 保証6
TRUE_SUBの000は、下位からのキャリーで反転した場合である。
[LZCに誤りがある場合とLOCに誤りがある場合]
図12は、図11についてLZCに誤りが発生する可能性がある場合とLOCに誤りが発生する可能性がある場合について上下に分けて示す図である。そこで、以下、LZCに誤りが発生する可能性のある上側のパターンについて、LZCが選択される場合があるか否かについて検討する。
[LZCに誤りがある場合]
図5において、セレクタSEL2がLZCを選択する条件は、以下のとおりである。
LZC_SEL = ~TRUE_SUB + CO*HI0
上記の右辺は、第1項の~TRUE_SUBは減算でないことであるから加算、つまりTRUE_ADD=1の場合にLZC_SEL=1になり、第2項のCO*HI0については、CO[63]=1かつHI0=1の場合CO*HI0=1になりLZC_SEL=1になることをそれぞれ意味する。
そこで、右辺の第1項について、~TRUE_SUB=TRUE_ADD=1の場合、上記の保証5からTRUE_ADD=1ならRES[63:60]=0000が保証されるが、図12のLZC側の4つのケースは全てRES[60] =1であるため、TRUE_ADD=1には該当しないことが明らかである。
次に、右辺の第2項について、CO*HI0=1の場合、CO[63]=1とは全加算器15からキャリーアウトが発生すること、ハイゼロHI0=1とはCO加算器16の入力の上位ビットが補数化(コンプリメント)によりALL1であることをそれぞれ意味する。そこで、HI0=1とCO[63]=1とによりCO加算器16の出力の上位ビットはALL0となり、セレクタSEL1は下位側の64ビットをセレクトする。つまり、乗算結果から加算オペランドOP3を減算した結果が正であったことを表す。
そこで、図12のLZC側の4つのケースを見ると、[60]ビットでキャリーアウトは発生していないので、CO[63]=0であることは自明である。したがって、第2項の条件はCO*HI0=0となる。
その結果、上記のLZC_SELの右辺の第1項も第2項も共に0であり、必ずLZC_SEL=0となり、LZCが選択されることはなく、LZCの誤差を補正する必要性がないことが理解できる。
[LOCに誤りがある場合]
次に、図12のLOCに誤りが発生する可能性のあるパターンについて検討する。図7においてセレクタSEL2がLOCをLSFTのシフト量SAとしてセレクトする条件は、以下のとおりである。
LOC_SEL = TRUE_SUB*~CO
ここで、TRUE_SUBとは減算を、~COとは全加算器15のキャリーオーバCO[63]の否定を意味する。つまり、LOCがセレクトされる条件は、減算で且つCO[63]=0を意味する。TRUE_SUB=1且つCO[63]=0は、全加算器での減算においてキャリーオーバが発生しなかったことであり、減算結果が負であったことを意味する。
前述の保証6によれば、TRUE_SUBの場合に全加算器15の出力RES[63:61]は、次のことが保証されていた。
RES[63:61]=111または000 保証6
したがって、
RES[63:61] = S[63:61] + C[63:61] + CI[61] = 111または000
一方、図12のLOCに誤りが発生する可能性のある4パターンでは、全てCI[61]=1であるので、上記の式にCI[61]=1を代入して、以下が得られる。
RES[63:61] = S[63:61] + C[63:61] + 1 = 111または000
これを変形すると、以下が得られる。
S[63:61] + C[63:61] = 110または111
ここで、上記のS[63:61] + C[63:61] = 111の場合を検討すると、図12の下側の4パターンのS,C,CIの組み合わせでは全てCI[61]=1になるので、111が反転され000となりCO[63]=1が発生する。この場合、上記のLOCをセレクトする条件LOC_SEL = TRUE_SUB*~COにおいて、~CO=0となり、LOC_SEL=0となりLOCがセレクトされる条件が成立しない。
つまり、減算でRES[63:61]=000とは、キャリーオーバCO[63]=1が発生して減算結果が正になったことを意味するので、LOCが選択されることはない。
一方、上記のS[63:61] + C[63:61] = 110の場合を検討すると、この式を満たすS[63:61]とC[63:61]の組み合わせは、図13の8パターンである。
図13は、S[63:61] + C[63:61] = 110を満たすS[63:61]とC[63:61]の8つのパターンを示す図である。8つのパターンは、S[63:61]+C[63:61]が、6+0, 5+1, 4+2, 3+3, 2+4, 1+5, 0+6, 7+7(但し10進数表記)に対応する。
ここで、図13のCSAの入力S[63:61]とC[63:61]の8つのパターンについて、CSAの入力パターンで保証されていること(保証2と保証4)に基づいて、絞り込むことを行う。
まず、TRUE_SUB=1の場合は、前述の保証4によれば以下のとおりである。
RSFT[63:61]=111 保証4
また、前述の保証2によれば、次のとおりである。
SUM[63:58] + CRY[63:58] = 000000 保証2
図14は、上記の保証4と保証2を満たすCSAの入力SUM,CRY,RSFTのパターンを示す図である。図14では、SUMとCRYは可換であり、同じビットでも可換であるので、可換な組み合わせは重複を避けて省略する。RSFTもSUM,CRYと可換であるが、図14ではSUM,CRYと区別する。6つのパターンP_a〜P_fでは、SUMとCRYの組み合わせは、保証2を満たす組み合わせである。また、RSFTの[60]ビットは0/1のいずれでも良いので"x"としている。そのため、パターンP_fはRSFT[60]=x(不定)であるため、C[60]=x(不定)になっている。また、6つのパターンそれぞれについてのCSAの出力S,Cが示されている。
図14のCSAの出力S,Cの6つの組み合わせと、図13のS[63:61]+C[63:61]=110を満たすCSAの出力S,Cの8つの組み合わせとで重複する組み合わせは、パターンP_fである。
図14の下段はパターンP_fをRSFTをRSFT[60]=0と1に分けたパターンP_f0, P_f1を示している。下段の2つのパターンP_f0,P_f1のうち、図13の組み合わせと重複する組み合わせは、パターンP_f0であることが理解できる。
パターンP_f0は、CSAへの入力SUM,CRY,RSFTと、CSAの出力S,Cとが含まれる。したがって、このパターンP_f0を他のパターンと区別するためには、CSAの入力SUM,CRY,RSFTの[60]ビットの組み合わせ、または、CSAの出力S,Cの[61]ビットの組み合わせのいずれかを判定すればよい。
CSAの入力SUM,CRY,RSFTの[60]ビットの組み合わせ(SUM[60],CRY[60],RSFT[60]=100 or 010)で区別する場合は、判別式は以下のとおりである。
P_f0 = (SUM[60] ^ CRY[60]) & ~RSFT[60] 判別式10
ここで、SUMとCRYが入れ替わることがあるので、SUMとCRYとはEORで0/1,1/0の組み合わせを特定している。
一方、CSAの出力S,Cの[61]ビットの組み合わせ(S[61],C[60]=00)で区別する場合は、判別式は以下のとおりである。
P_f0 = ~S[61] & ~C[61] = ~(S[61] + C[61]) 判別式11
つまり、~S[61]と~C[61]のAND演算か、S[61]とC[61]のNOR演算結果が真(=1)であれば補正イネーブル状態を示す補正フラグFLAG=1を生成する回路により判別できる。
[LZP,LOPが誤る場合のLZC,LOCの補正回路]
図15は、図12の(LOC)の4つのパターンに図14のパターンP_f0を適用した図である。図5,6で説明したとおり、LOPは[60]ビット以下で生成され、LOCはLOP[60]から1をカウントする。したがって、図15にはLOP=1と誤る例が[60]ビットに,LOP[60]=1と示される。
図15のパターンによれば、乗加算結果RES[60]=0であるので、本来ならワンカウント判定はLOP[60]=0となる。そして、LOP[60]=0の場合、エンコーダのカウント値LOCは、LOP[60]=0によりLOC=0となる。したがって、LOC補正処理は、LOC=0にする処理であればよい。LOC=0に補正する処理は、例えば以下の例がある。
(1)LOP[60]を0に補正する。
(2)LOC[5:0]をLOC[5:0]=0に補正する。
そして、前述の判別式10または11が満たされる場合に、上記の(1)(2)の補正処理を行えばよい。そこで、判別式10または11が満たされる場合に補正イネーブル状態を示す補正フラグFLAG=1を発生する回路を設け、補正フラグFLAG=1の場合に、LOP[60]=0にするワンカウント判定値補正回路か、LOC=0にするワンカウント値補正回路のいずれかを設ければよい。そのような回路を設けることで、LOP,LZP=1が誤っている可能性がある場合に、適切にLOC,LZCを補正することができる。但し、前述したとおり、LZP=1が誤っている可能性がある場合とLZCが選択される場合が同時に満たされる場合がないので、LOP=1が誤っている可能性がある場合(CA5の場合)に、判別式10または11が満たされる補正イネーブル状態の時にLOP[60]またはLOCを適切に補正すれば良い。
補正フラグFLAGを発生する論理式は、前提条件となるLOC_SEL=1の条件TRUE_SUB=1と、パターンP_f0を判別する判別式10または判別式11とのANDになる。したがって、補正フラグFLAGを発生する論理式は、次のとおりである。
FLAG = TRUE_SUB & P_f0
= TRUE_SUB & {(SUM[60] ^ CRY[60]) & ~RSFT[60]} FLAG判定1
or
= TRUE_SUB & (~S[61] & ~C[61]) = TRUE_SUB & ~( S[61] +~C[61]) FLAG判定2
図1、図5に示した第1の実施の形態では、補正判定回路CRCT_1が上記のFLAG判定2を満たす時に補正フラグFLAGを生成し、ワンカウント補正回路であるゼロマスク回路ZERO_MがワンカウントLOCをゼロに補正する演算を行っている。このゼロマスク回路ZERO_Mが、ワンカウント値補正回路である。また、図5には、~S[61] と~C[61]のAND演算器を有する補正判定回路CRCT_1が示されている。この演算器は、S[61] とC[61]のNAND演算器でも良い。なお、セレクタSEL2がLOCを選択する場合はTRUE_SUB=1になるので、図5の補正判定回路CRCT_1ではTRUE_SUB=1を判別していない。
上記したとおり、LOC=0に補正する別の手段は、LOP[60]=0に変更する手段である。LOP[60]=0に変更する手段を採用する場合は、図6のLOC回路内のLOP回路の出力LOP[60]を補正フラグFLAGによりゼロマスクするゲート(図5のゼロマスクZERO_Mと同じゲート)を設ければよい。つまりLOP[60]=~FLAG & LOP[60]のゲート回路を設ければよい。
[第2の実施の形態]
図16は、第2の実施の形態における演算回路の一例である乗加算回路を示す図である。第2の実施の形態における乗加算回路は、左シフト量予測回路17が全加算器15の入力S,Cに加えて、CSA14の入力、つまりワレスツリー12の出力SUM,CRYと右シフト回路13の出力RSFT_Lに基づいて、正規化シフト量LSAを補正する。この構成が、図1の第1の実施の形態の乗加算回路と異なる。第2の実施の形態においても、第1の実施の形態と同様に、左シフト量予測回路17は、全加算器15の入力、つまりCSAの出力S,Cに基づいてLZCとLOCを予測する。
図17は、第2の実施の形態における左シフト量予測回路17の構成例を示す図である。図中、LZC回路、LOC回路は図5と同等である。一方、補正判定回路CRCT_2は、CSAの入力SUM[60],CRY[60],RSFT[60]を入力し、補正フラグFLAGを生成する補正判定回路CRCT_2が設けられている。補正判定回路CRCT_2は、SUM[60],CRY[60]のEORを演算し、EOR出力とRSFT[60]の反転信号のANDを演算して、補正フラグFLAGを生成する。そして、補正フラグFLAGに応答して、ワンカウント補正回路ZERO_MがワンカウントLOCを0に補正している。
第1の実施の形態で述べたとおり、LOC=0に補正する別の手段は、LOP[60]=0に変更する手段である。LOP[60]=0に変更する手段を採用する場合は、図17のLOC回路内のLOP回路の出力LOP[60]を補正フラグFLAGによりゼロマスクするゲート(図5のZERO_Mと同じゲート)を設ければよい。つまりLOP[60]=~FLAG & LOP[60]のゲート回路を設ければよい。
以上説明したとおり、第1及び第2の実施の形態によれば、LOC回路のLOCカウント値を補正するLOC補正回路を、簡単な回路で構成することができる。
OP1,OP2,OP3:オペランド
FORMAT:フォーマット変換回路
RSFT:入力シフト回路(右シフト回路)
10:ブースデコーダ
11:ブースセレクタ
12:ワレスツリー回路
CSA:キャリー保存加算器
ADDER:全加算器
17:左シフト量予測回路
18:正規化シフト回路、左シフト回路
LOP:ワンカウント判定回路、ワンカウント判定値
LOC:ワンカウント回路、ワンカウント
LZP:ゼロカウント判定回路、ゼロカウント判定値
LZC;ゼロカウント回路、ゼロカウント
CRCT:補正判定回路
ZERO_M:ゼロマスク回路、ワンカウント補正回路

Claims (7)

  1. 第1オペランドと第2オペランドの第1入力と第2入力の浮動小数点フォーマットを、M個(Mは複数)の最上位ビットが0で前記最上位ビットに続くN個(Nは複数)の下位ビットが仮数である内部フォーマットに変換して、乗算する乗算器と、
    第3オペランドの第3入力の浮動小数点フォーマットを、前記内部フォーマットに変換し、前記第3入力を前記乗算器の乗算結果に加算し乗加算結果を出力する加算器と、
    前記乗加算結果を左シフト量に基づいて左シフトする正規化シフト回路と、
    前記左シフト量を予測する左シフト量予測回路とを有し、
    前記加算器が、前記乗算結果である第1加算値及び第1キャリー値と前記第3入力とを加算するキャリー保存加算器と、前記キャリー保存加算器が出力する第2加算値と第2キャリー値とを加算して前記乗加算結果を出力する全加算器とを有し、
    前記左シフト量予測回路は、
    前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのゼロカウント判定値を生成し、上位ビット側から降順で連続する真のゼロカウント判定値の数であるゼロカウントを生成するゼロカウント回路と、
    前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのワンカウント判定値を生成し、上位ビット側から降順で連続する真のワンカウント判定値の数であるワンカウントを生成するワンカウント回路と、
    前記第2加算値と第2キャリー値の前記M個の上位ビットの最下位ビットの否定論理和が真になる補正イネーブルの場合に、前記ワンカウントをゼロに補正する補正回路とを有する、演算器。
  2. 第1オペランドと第2オペランドの第1入力と第2入力の浮動小数点フォーマットを、M個(Mは複数)の最上位ビットが0で前記最上位ビットに続くN個(Nは複数)の下位ビットが仮数である内部フォーマットに変換して、乗算する乗算器と、
    第3オペランドの第3入力の浮動小数点フォーマットを、前記内部フォーマットに変換し、前記第3入力を前記乗算器の乗算結果に加算し乗加算結果を出力する加算器と、
    前記乗加算結果を左シフト量に基づいて左シフトする正規化シフト回路と、
    前記左シフト量を予測する左シフト量予測回路とを有し、
    前記加算器が、前記乗算結果である第1加算値及び第1キャリー値と前記第3入力とを加算するキャリー保存加算器と、前記キャリー保存加算器が出力する第2加算値と第2キャリー値とを加算して前記乗加算結果を出力する全加算器とを有し、
    前記左シフト量予測回路は、
    前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのゼロカウント判定値を生成し、上位ビット側から降順で連続する真のゼロカウント判定値の数であるゼロカウントを生成するゼロカウント回路と、
    前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのワンカウント判定値を生成し、上位ビット側から降順で連続する真のワンカウント判定値の数であるワンカウントを生成するワンカウント回路と、
    前記第1加算値及び第1キャリー値の前記N個の下位ビットの最上位ビットの排他的論理和と、前記第3入力の前記N個の下位ビットの最上位ビットの否定との論理積が真になる補正イネーブルの場合に、前記ワンカウントをゼロに補正する補正回路とを有する、演算器。
  3. 前記補正回路は、前記補正イネーブルの場合に、前記ワンカウント回路が出力するワンカウントをゼロに変更するワンカウント補正回路を有する、請求項1または2に記載の演算器。
  4. 前記補正回路は、前記補正イネーブルの場合に、前記ワンカウント判定値の前記N個の下位ビットの最上位ビットをワンカウント判定値を偽に変更するワンカウント判定補正回路を有する、請求項1または2に記載の演算器。
  5. 前記加算器は、更に、前記内部フォーマットに変換された第3入力の桁を、前記乗算結果の桁に合わせる入力シフト回路を有し、
    前記入力シフト回路の出力が前記キャリー保存加算器に入力される、請求項1または2に記載の演算器。
  6. 前記乗算器は、前記内部フォーマットに変換された第1入力をデコードするブースデコーダと、前記ブースデコーダのデコード値に対応する前記内部フォーマットに変換された第2入力の部分積を加算するワレスツリー回路とを有し、
    前記ワレスツリー回路が前記第1加算値及び第1キャリー値を出力する、請求項1または2に記載の演算器。
  7. 第1オペランドと第2オペランドの第1入力と第2入力の浮動小数点フォーマットを、M個(Mは複数)の最上位ビットが0で前記最上位ビットに続くN個(Nは複数)の下位ビットが仮数である内部フォーマットに変換して、乗算する乗算器と、
    第3オペランドの第3入力の浮動小数点フォーマットを、前記内部フォーマットに変換し、前記第3入力を前記乗算器の乗算結果に加算し乗加算結果を出力する加算器と、
    前記乗加算結果を左シフト量に基づいて左シフトする正規化シフト回路と、
    前記左シフト量を予測する左シフト量予測回路とを有し、
    前記加算器が、前記乗算結果である第1加算値及び第1キャリー値と前記第3入力とを加算するキャリー保存加算器と、前記キャリー保存加算器が出力する第2加算値と第2キャリー値とを加算して前記乗加算結果を出力する全加算器とを有し、
    前記左シフト量予測回路は、
    前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのゼロカウント判定値を生成し、上位ビット側から降順で連続する真のゼロカウント判定値の数であるゼロカウントを生成するゼロカウント回路と、
    前記第2加算値と第2キャリー値の前記N個の下位ビットから各ビットのワンカウント判定値を生成し、上位ビット側から降順で連続する真のワンカウント判定値の数であるワンカウントを生成するワンカウント回路とを有する演算器の制御方法であって
    前記第2加算値と第2キャリー値の前記M個の上位ビットの最下位ビットの否定論理和が真になる補正イネーブルの場合に、前記ワンカウントをゼロに補正する工程を有する、演算器の制御方法。
JP2017100529A 2017-05-22 2017-05-22 演算器及び演算器の制御方法 Active JP6871513B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017100529A JP6871513B2 (ja) 2017-05-22 2017-05-22 演算器及び演算器の制御方法
US15/983,395 US10579333B2 (en) 2017-05-22 2018-05-18 Arithmetic unit and control method for arithmetic unit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017100529A JP6871513B2 (ja) 2017-05-22 2017-05-22 演算器及び演算器の制御方法

Publications (2)

Publication Number Publication Date
JP2018195228A JP2018195228A (ja) 2018-12-06
JP6871513B2 true JP6871513B2 (ja) 2021-05-12

Family

ID=64271979

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017100529A Active JP6871513B2 (ja) 2017-05-22 2017-05-22 演算器及び演算器の制御方法

Country Status (2)

Country Link
US (1) US10579333B2 (ja)
JP (1) JP6871513B2 (ja)

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5343413A (en) 1992-07-06 1994-08-30 Matsushita Electric Industrial Co., Ltd. Leading one anticipator and floating point addition/subtraction apparatus
JP2752564B2 (ja) 1992-07-06 1998-05-18 松下電器産業株式会社 先行1予測装置及び浮動小数点加減算装置
US5493520A (en) * 1994-04-15 1996-02-20 International Business Machines Corporation Two state leading zero/one anticipator (LZA)
US5684729A (en) 1994-09-19 1997-11-04 Hitachi, Ltd. Floating-point addition/substraction processing apparatus and method thereof
JP3257278B2 (ja) 1994-09-19 2002-02-18 株式会社日立製作所 冗長なシフト数予測とシフト誤り補正を用いた正規化装置
US5993051A (en) * 1996-11-18 1999-11-30 Samsung Electronics Co., Ltd. Combined leading one and leading zero anticipator
JP3544846B2 (ja) 1997-02-13 2004-07-21 株式会社東芝 論理回路及び浮動小数点演算装置
US6988115B2 (en) * 2001-05-04 2006-01-17 Broadcom Corporation Method and apparatus to correct leading one prediction
JP4571903B2 (ja) * 2005-12-02 2010-10-27 富士通株式会社 演算処理装置,情報処理装置,及び演算処理方法
US8606840B2 (en) * 2010-03-17 2013-12-10 Oracle International Corporation Apparatus and method for floating-point fused multiply add
US9104474B2 (en) * 2012-12-28 2015-08-11 Intel Corporation Variable precision floating point multiply-add circuit

Also Published As

Publication number Publication date
JP2018195228A (ja) 2018-12-06
US10579333B2 (en) 2020-03-03
US20180336013A1 (en) 2018-11-22

Similar Documents

Publication Publication Date Title
US8694572B2 (en) Decimal floating-point fused multiply-add unit
CN100449476C (zh) 用于执行浮点算术运算的系统和方法
JP4500358B2 (ja) 演算処理装置および演算処理方法
US6925480B2 (en) Microarchitecture of an arithmetic unit
US10310818B2 (en) Floating point chained multiply accumulate
US8166092B2 (en) Arithmetic device for performing division or square root operation of floating point number and arithmetic method therefor
US5343413A (en) Leading one anticipator and floating point addition/subtraction apparatus
US20070050434A1 (en) Data processing apparatus and method for normalizing a data value
KR20120017457A (ko) 포화가 적용된 정수 곱셈 연산 및 곱셈-덧셈 연산
US7437400B2 (en) Data processing apparatus and method for performing floating point addition
US20110131262A1 (en) Floating point divider and information processing apparatus using the same
US6947962B2 (en) Overflow prediction algorithm and logic for high speed arithmetic units
JPH0520028A (ja) 加減算のための浮動小数点演算装置の仮数部処理回路
JPH10289096A (ja) 論理回路及び浮動小数点演算装置
US5831884A (en) Apparatus for performing arithmetic operation of floating point numbers capable of improving speed of operation by performing canceling prediction operation in parallel
US20050114422A1 (en) High performance implementation of exponent adjustment in a floating point design
JP6871513B2 (ja) 演算器及び演算器の制御方法
US7016930B2 (en) Apparatus and method for performing operations implemented by iterative execution of a recurrence equation
US7401107B2 (en) Data processing apparatus and method for converting a fixed point number to a floating point number
JP2511527B2 (ja) 浮動小数点演算器
Seidel et al. How many logic levels does floating-point addition require?
US8219604B2 (en) System and method for providing a double adder for decimal floating point operations
US7003540B2 (en) Floating point multiplier for delimited operands
US10275218B1 (en) Apparatus and method for subtracting significand values of floating-point operands
JP2752564B2 (ja) 先行1予測装置及び浮動小数点加減算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201027

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201030

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201105

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: 20210316

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210329

R150 Certificate of patent or registration of utility model

Ref document number: 6871513

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150