JP3950920B2 - 積和演算器及びデータ処理装置 - Google Patents
積和演算器及びデータ処理装置 Download PDFInfo
- Publication number
- JP3950920B2 JP3950920B2 JP32391095A JP32391095A JP3950920B2 JP 3950920 B2 JP3950920 B2 JP 3950920B2 JP 32391095 A JP32391095 A JP 32391095A JP 32391095 A JP32391095 A JP 32391095A JP 3950920 B2 JP3950920 B2 JP 3950920B2
- Authority
- JP
- Japan
- Prior art keywords
- digit
- product
- addend
- sum
- significant digit
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
- G06F7/49952—Sticky bit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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 for evaluating functions by calculation
- G06F7/5443—Sum of products
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Nonlinear Science (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明はマイクロプロセッサ等のデータ処理装置における積和演算器に係り、特に演算結果を正規化する積和演算命令を高速に実行する積和演算器および該積和演算器を備えるデータ処理装置に関する。
【0002】
【従来技術】
従来のマイクロプロセッサで演算結果を正規化する積和演算命令を実行している例としては、「The PowerPC 603 Microprocessor: A High Performance, Low Power, Superscalar RISC Microprocessor」(digest of papers SPRING COMPCON 94 pp300−306)記載のPowerPC 603が挙げられる。
該プロセッサはキャリー伝搬加算後の値から最上位桁の検出を行っている。また、加数が積よりも上位にはみ出した場合に、このはみ出した加数を下位の部分に桁位置を合わせて、下位からのキャリーによってインクリメントしている。
【0003】
【発明が解決しようとする課題】
上記文献のプロセッサは、上記したようにキャリー伝搬加算後に該キャリー伝搬加算で得た値に基づき最上位検出を行っているため、キャリー伝搬加算と最上位検出の処理に必要な時間がこれらの合計の処理時間となり、積和演算命令を高速に実行できなかった。
また、加数が積よりも上位にはみ出した場合に、このはみ出した加数を下位の部分に桁合わせして、下位からのキャリーによってインクメントとしているため、最上位桁検出及び正規化の桁数が大きくなっている。
本発明の目的は、演算結果を正規化する積和演算命令を高速に実行する積和演算器および該積和演算器を備えるデータ処理装置を提供することにある。
【0004】
【課題を解決するための手段】
上記目的を達成するため、本発明は、
積和演算の最後に乗算アレイの2項の演算出力に基づきキャリー伝搬加算を行い、該演算結果の絶対値の0でない最上位桁を検出して正規化を行う積和演算器において、
前記乗算アレイの2項の演算出力を入力とし、キャリー伝搬加算前の該2項の演算出力に基づき絶対値の0でない最上位桁を検出する最上位桁検出回路を備え、キャリー伝搬加算と前記最上位桁の検出を並列に実行するようにしている。
また、前記最上位桁検出回路を検出精度に1桁の誤差を許す最上位桁検出回路とし、該最上位桁検出回路出力に基づく正規化出力に対して1桁の補正を行う手段を備えるようにしている。
また、正規化を行う積和演算器において、該積和演算器における桁合せシフト数指数生成出力部の出力である桁合せシフト数と加数仮数部を入力とする加数桁合せ符号合せ部は、積よりも上位にはみ出した加数部分を出力する構成とし、該加数部分を最上位桁位置を動かさないで処理する手段を設け、前記加数部分の正規化を不要とし、該加数部分の処理と他の部分の正規化を並列に実行するようにしている。
また、データ処理装置に前記いずれかの積和演算器を備えるようにしている。
【0005】
【実施例】
本発明による積和演算器の各実施例を添付図面を参照して詳細に説明する。
以下の実施例においては、同一機能を有するものには同一符号を付し、その重複説明を省略する。
本発明における積和演算とは(被乗数)×(乗数)+(加数)を計算する浮動小数演算である。また、正規化とは小数点を0でない最上位桁の右側にすることである。例えば、0.001×22を1.000×2~1とすることである。
図1は本発明による積和演算を高速化した積和演算器の一実施例の構成図であり、桁合せシフト数指数生成部1、加数桁合せ符号合せ部2、加数下位スティッキービット生成部3、乗算アレイ(積和演算アレイ)4、最上位桁検出部5、キャリー伝搬加算器6、加数上位インクリメンタ7、指数正規化部8、スティッキービット生成部9、正規化シフタ10、正数化丸め部11、指数補正部12からなる。
【0006】
次に、図1の各部の構成及び動作を説明する。
桁合せシフト数指数生成部1は、加数、被乗数、および乗数の指数部を入力とし、桁合せシフト数D1および正規化前の積和演算結果の指数D2を生成して、それぞれ加数桁合せ符号合せ部2および指数正規化部8へ出力する。
桁合せシフト数は、ここでは被乗数の指数部と乗数の指数部の和すなわち積の指数部から加数指数部を引いて生成する。
指数正規化部8へ出力する指数D2は、桁合せシフト数が−3以下の場合、即ち、最上位桁が必ず加数上位にある場合は加数指数部を、桁合せシフト数が−2以上の場合、即ち、最上位桁が必ずしも加数上位にない場合は積の指数部を選択する。
加数桁合せ符号合せ部2は、加数仮数部および桁合せシフト数D1を入力とし、加数の桁合せおよび符号合せを行い、積に対応する桁を加数中位として乗算アレイ4に、加数中位より上位にはみ出した部分を加数上位として加数上位インクリメンタ9に、下位にはみ出した部分を加数下位として加数下位スティッキービット生成部3に出力する。
符号合せは、加数の符号および乗数と被乗数との積の符号を比較して符号が互いに異なる場合に、加数部を符号反転して2の補数にするために、各ビットの0、1の反転を行い、1を加算することである。しかし、ここでは加数上位および加数中位の0、1の反転のみ行う。加数上位は正規化シフタ10での正規化シフトが不要となるように桁合せ時に下位側にシフトしない。加数上位を下位側にシフトしない場合、加数上位の桁数に応じて加数上位の最下位桁位置が変化する。そこで、加数上位最下位も加数上位インクリメンタ9に出力する。加数上位最下位とは加数上位の最下位桁位置に1を立てた値で、加数上位と加算すると加数上位のインクリメントが行える値である。
【0007】
加数下位スティッキービット生成部3は、加数桁合せ符号合せ部2からの加数下位を入力とし、加数下位スティッキービットD5を生成してキャリー伝搬加算器6およびスティッキービット生成部9へ出力する。
スティッキービットとは演算結果の丸めの際に使用する値で、入力データの桁数および丸め後の桁数をnとすると、丸め前の演算結果の上位n+1桁以外の値が0でない場合に立てるビットである。
加数下位が0桁でない場合、積和演算による桁落ちは最大1桁であるため、キャリー伝搬加算器6出力は少なくとも2n−2桁ある。
尚、2桁以上の桁落ちが発生するのは桁合せシフト数が−2〜1の場合であり、この時、加数下位は0桁である。したがって、加数下位は常にスティッキービット生成にのみ用いられるので、加数下位の値自身は不要であり、加数下位が0でない場合に1となる加数下位スティッキービットとして残しておけばよい。
加数桁合せ符号合せ部2で加数下位の符号合せを行っていないが、符号合せしてもしなくても0か0でないかは変らないので、加数下位スティッキービットの値は変らない。
【0008】
乗算アレイ4は被乗数仮数部、乗数仮数部、および加数桁合せ符号合せ部2からの加数中位を入力とし、被乗数仮数部と乗数仮数部の積と加数中位の和を、キャリー保存加算器、冗長2進加算器等のアレイを用いて計算し、結果を最上位桁検出部5およびキャリー伝搬加算器6に出力する。
乗算アレイ4の出力は、キャリー伝搬加算器6で加算すると正規化前の積和演算結果の仮数部となる2つの値(2つの項)である。この2つの項は例えば、乗算アレイがキャリー保存加算器ならばキャリー部分と和の部分、冗長2進加算器ならば正数部分と負数部分である。
【0009】
最上位桁検出部5は、桁合せシフト数指数生成部1からの桁合せシフト数S1、および乗算アレイ4の出力から、正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出し、検出結果に基づいて、指数正規化部8へは指数正規化値D7、スティッキービット生成部9へはスティッキービット生成用のマスクD8、そして正規化シフタ10へは正規化シフト数D9を出力する。該最上位桁検出は以下のように行う。
桁合せシフト数が−3以下の場合は、該最上位桁は加数上位にある。そして、積と加数が同符号ならば1桁の桁上がりが、異符号ならば1桁の桁落ちが生じる可能性がある。
そこで、該最上位桁検出に上位側への1桁の誤差を認めることにして、この桁上がりおよび桁落ちの有無を使用せずに該最上位桁を決められるようにすると、該最上位桁は積と加数が同符号の場合は加数上位の最上位桁、異符号の場合は加数上位の最上位桁の1桁下位となる。
桁合せシフト数が−3以下の場合の桁合せシフト数指数生成部1の出力する指数は加数指数部である。したがって、指数正規化値は、積と加数が同符号ならば加数を基準にすると最上位桁が動かないので0であり、異符号ならば1桁上位に動くので−1である。また、正規化シフト数は、積と加数が同符号ならば桁合せシフト時の加数の左シフト数だけ右シフトすればよいので、桁合せシフト数を符号反転した値になり、異符号ならば同符号の場合より1桁上位にずれるので、桁合せシフト数に1を加算して符号反転した値となる。
丸め後の桁数をnとすると、正規化シフタ10では該最上位桁の1桁上位からn+2桁を抽出する。そして、抽出した値より下位の桁からスティッキービットを生成する。したがって、スティッキービット生成用のマスクは該最上位桁より下位方向に数え始めてn+2桁目以降、即ち、最上位桁のn+1桁下位の桁以降に全て“1”を立てればよい。
【0010】
桁合せシフト数が−2以上の場合は、絶対値の0でない最上位桁はキャリー伝搬加算器6出力または加数上位の下位2桁にある。この場合の詳細な処理は後述する。指数正規化値および正規化シフト数は求めた最上位桁と正規化前の小数点位置との差で決る。スティッキービット生成用のマスクは前述の場合と同様に該最上位桁の下位n+1桁目以降を全て立てればよい。
【0011】
キャリー伝搬加算器6は乗算アレイ4出力の2つの値を加算して正規化前の積和演算結果の仮数部を生成し、スティッキービット生成部9および正数化丸め部11へ出力する。この時、積と加数が異符号かつ加数下位スティッキービットが0の場合は加算の際に最下位に1を加算する。
加数桁合せ符号合せ部2では、符号反転処理のうち加数中位と加数上位の0、1の反転のみを行ったので、最下位への1の加算により符号反転処理が完了する。
加数下位スティッキービットが0の場合のみ1を加算するのは以下の理由による。仮に、加数下位を0、1反転して最下位に1を加算したとすると加数中位までキャリーが伝わるのは、反転後に加数下位が全て1になった場合、すなわち、反転前に加数下位が0の場合である。これは加数下位スティッキービットが0の場合に相当する。キャリーが伝わらなければ1を加算する必要はない。
【0012】
加数上位インクリメンタ7は、加数桁合せ符号合せ部2からの加数上位および加数上位最下位並びにキャリー伝搬加算器6からのキャリーを入力とし、キャリーが1の場合には加数上位と加数上位最下位を加算した値、キャリーが0の場合には加数上位を選択する。
さらに、正規化シフタ10の抽出値と桁位置が合うように、積と加数が同符号および異符号の場合に、加数上位の最上位桁が加数上位インクリメンタ7出力のそれぞれ最上位桁の1桁下位および最上位桁になるようにして正規化シフタ10に出力する。
桁合せシフト数が−2以上の場合、上記処理では正規化シフタ10の抽出値と桁位置が合わない可能性がある。そこで、最上位桁検出部5から正規化シフト数の情報をもらって、正規化シフト数が1および2の場合に、加数上位の最上位桁が加数上位インクリメンタ7出力のそれぞれ最上位桁および最上位桁の1桁下位になるようにする。そして、正規化シフト数が上記以外の場合は加数上位インクリメンタ7出力を0とする。
【0013】
指数正規化部8は桁合せシフト数指数生成部1からの指数、即ち、正規化前の積和演算結果の指数と最上位桁検出部5からの指数正規化値を加算し、加算結果を正規化された指数D11として指数補正部12へ出力する。
スティッキービット生成部9は、キャリー伝搬加算器6からの正規化前の積和演算結果の仮数部を最上位桁検出部5からのマスクでマスクして論理和をとり、さらに加数下位スティッキービットとの論理和をとって、結果をスティッキービットとして正数化丸め部11へ出力する。
正規化シフタ10は、キャリー伝搬加算器6からの正規化前の積和演算結果の仮数部を最上位桁検出部5からの正規化シフト数を用いて正規化し、加数上位インクリメンタ7出力との論理和をとって、結果を正数化丸め部11へ出力する。
正数化丸め部11は、正規化シフタ10の出力を入力とし、正数化、丸めを行って、最終的な正規化された積和演算結果の仮数部を出力する。正数化処理は加数上位が負または加数上位が0かつキャリー伝搬加算器6出力が負の場合に行い、0、1反転の後、キャリー伝搬加算器6の場合と同様にスティッキービットが0の場合のみ1を加算する。
指数補正部12は正数化、丸めによって生じる桁上がりによる指数部の補正を行い、最終的な正規化された積和演算結果の指数部を出力する。
【0014】
次に、上記積和演算器の動作を仮数部が4ビットの具体的な数値を用いて図1−図3を参照して説明する。
ここでは、先ず以下の式(1)を計算する場合について図1,2を参照して説明する。図2は図1の積和演算器によりこの式(1)を計算する場合の図1の各構成要素での処理の流れを示す動作説明図である。
(1.110×22)×(1.101×23)+(1.011×2~1)…(1)
まず、桁合せシフト数指数生成部1で積の結果と加数との間で桁合わせに必要なシフト数(桁合せシフト数)として2+3−(−1)=6を生成する。
この場合、桁合せシフト数6は−2以上なので、指数として、積部の指数の和(2+3=5)と仮数部の指数−1とのうち積部の指数の和5を選択して出力する(図2のステップS1)。
次に、加数桁合せ符号合せ部2で、ステップS1で得られた桁合わせシフト数6に従い、加数の仮数部1.011を6桁右(下位側)にシフトして0.000001010を得る。
先ず、これから加数中位00.000001(4桁×4桁の乗算なので8桁を有効数字とする)を得る(ステップS2)。
さらに、加数の仮数部1.011とマスク0.000(6桁右シフトにより仮数部1.011が上位にはみ出したビットはないのでマスクビットは全て0であるとの論理積から)加数上位0.000を得(ステップS3)、
またさらに加数の仮数部1.011とますく0.111(6桁右シフトにより仮数部1.011が下位にはみ出したビットは仮数部の下位側3ビットなので、この下位側3ビットを有効とすべくマスクビットは0.111となる)との論理積から加数下位0011を得る(ステップS4)。
さらに、この場合上位は0しかないため下位からの桁上がりが考えられるために加数上位最下位として少数点の左に1を立てて1.000を得る(ステップS5)。
【0015】
次に、加数下位スティッキービット生成部3において加数下位に基づき加数下位スティッキービットを生成するが、この場合、加数下位0011は全てが0ではないので加数下位スティッキービットとして1を生成する(ステップS6)。
また、積の結果と加数が同符号(共に+)なので(即ち、図2のexclusixe OR(以下、EORと称す)ゲートEOR1出力が0なので)、ANDゲートAND1の出力は0であり、この値0はキャリー伝搬加算部6に与えられる。これは積の結果と加数が同符号の時はnegateする必要がないからである。なお、ゲートEOR1は桁合わせシフト数指数生成部1に含ませても良い。
これらの操作により、(1)式は次式(2)のようになる。
{(1.110×1.101+加数中位)×25}+加数下位スティッキー
ビット={(1.110×1.101+00.000001)×25}+加数下位スティッキービット……(2)
次に、乗算アレイ4において、上式(2)の
(1.110×1.101+00.000001)内の計算を行うが、先ずその乗算部分を加算部(3−1)〜(3−4)に直して以下のようにする。
【0016】
0.001110 ……(3−1)
+ 0.00000 ……(3−2)
+ 0.1110 ……(3−3)
+ 1.110 ……(3−4)
+ 00.000001 ……(3−5)
値(3−5)は式(2)の加算部である。
乗算アレイ4は、ここでは例えばキャリー保存加算器とする。キャリー保存加算器は3つの数を加算してキャリー部分と和の部分の2つの数(2つの項)を出力する。キャリー部分は各桁に2つ以上1がある場合に次の桁に1を立てることによって生成する。和の部分は各桁に1つまたは3つ1がある場合にその桁に1を立てることによって生成する。
まず、最初の3項(3−1)〜(3−3)を加算すると、この部分がキャリー部分(3−6)と和の部分(3−7)の2つの項となって、
0.010000 ……(3−6)
+ 0.110110 ……(3−7)
+ 1.110 ……(3−4)
+ 00.000001 ……(3−5)
となる。
さらにこの結果の最初の3項(3−6),(3−7),(3−4)を加算すると、この部分が2項(3−8),(3−9)となって、
01.100000 ……(3−8)
+ 1.010110 ……(3−9)
+ 00.000001 ……(3−5)
となる。
さらにこの3項(3−8),(3−9),(3−5)を加算すると、
010.000000 ……(3−10)
+ 00.110111 ……(3−11)
\4+2桁/
となる。この2項が乗算アレイ4の出力であり、値(3−10)がキャリー部分、(3−11)が和の部分である(ステップS7)。
桁合せシフト数が−2以上の場合の最上位桁検出部5の動作の詳細は図5〜7等で詳細に後述する。
【0017】
最上位桁検出部5は乗算アレイ4の出力(式(3−10),(3−11))および桁合せシフト数指数生成部16から桁合せシフト数に基づき、指数正規化値、スティッキービット生成用のマスク、正規化シフト数を生成する。
先ず、後述する図7の第1ステップにおいて、乗算アレイ4の出力の上位側に、即ち、乗算アレイ4の和部の上位側に加数上位の最上位桁“0”を付け加えて、キャリー部分と共に最上位桁検出部5に入力する。次いで、積と加数が同符号か、異符号か判定する。
上記したように積と加数とは同符号(EORゲートEOR1の出力が0)であるため、第3+ステップに進み、乗算アレイ4の出力(式(3−10),(3−11))の最初の桁“00”から下位に向かって“00”以外の桁を探すと2桁目に“10”があり、したがってこの桁が最上位桁となる。
【0018】
従って、小数点から左に2桁目に最上位桁があるため、指数正規化値としては1を指数正規化部8へ出力する。(ステップS8)
尚、小数点から左に1桁目、2桁目、3桁目…に最上位桁がある場合は、それぞれ指数正規化値は0,1,2…となる。
一方、小数点から右に1桁目、2桁目、3桁目…に最上位桁がある場合は、それぞれ指数正規化値は−1,−2,−3…となる。
マスクとしては、最上位桁(小数点から左に2桁目)の下位n+1(=4+1=5桁目(小数点から右に4桁目)以下に“1”を立てて00.000111を得る(ステップS9)。
また、小数点から左に2桁目に最上位桁があるため、正規化シフト数としては1を正規化シフタ10へ出力する(ステップS10)。桁合わせシフト数−2以上の場合、正規化シフト数の値は指数正規化値と同じとなる。
【0019】
尚、図7の第1ステップにおいて積の結果と加数とは同符号と判定されると符号反転(sign change)信号として0がEORゲートEOR2及び正数化丸め部11に出力される。
また、第1ステップにおいて、積の結果と加数とが異符号と判定されると、図6の第2ステップに進み、該第2ステップにおいて下位の桁に“00”が発見されると加算結果は負であるので符号反転信号として0をそれぞれ出力する(ステップS22)。従って、本例の場合は同符号であるので符号反転信号として0を出力する。
正数化丸め部11においては符号反転信号が1の場合に正規化シフタ10の出力を符号反転する。
【0020】
キャリー伝搬加算器6では、乗算アレイ4の出力のキャリー部(3−10)と加算部(3−11)とANDゲートAND1の出力とを加算して10.110111を生成し(ステップS11)、スティッキービット生成部9及び正規化シフタ10へ出力する。また、ステップS11で得た加算値10.110111の最上位からのキャリー0を加数上位インクリメンタ7へ出力する(ステップS12)。
加数上位インクリメンタ7では加数上位0.000と加数上位最下位1.000とキャリーを入力し、キャリーに応じて加数上位0.000と加数上位最下位1.000の和01.000と加数上位0.000の一方を選択する。さらに、選択した出力を図2のEORゲートEOR1の出力に応じてシフトして出力する。
このケースでは、キャリーが0なので加数上位00.000を選択し、また積の結果と加数が同符号なので(即ち、EORゲートEOR1の出力が0なので)シフトを行わずにそのまま加数上位00.000を出力する(ステップS13)。
この時、式(1)は、ステップS11で得られた加算値、ステップS1で得られた指数5から以下の式(4)のように表わされる。
(10.110111×25)+加数下位スティッキービット ……(4)
次に、指数正規化部8で、桁合せシフト数指数生成部1からの指数5と最上位桁検出部5からの指数正規化値1を加算して6を出力する(ステップS14)。
【0021】
スティッキービット生成部9では、キャリー伝搬加算器6の出力10.110111を最上位桁検出部5からの出力であるマスクビット00.000111でマスクしてそれらの論理和をとり(ステップS15)、さらに該論理和と加数下位スティッキービット生成部からの1と論理和をとった値1を出力する(ステップS16)。
正規化シフタ10では、ステップS10で得られた最上位桁検出部5からの正規化シフト数が1であるからキャリー伝搬加算器6の出力10.110111を1桁右シフトして上位6ビットの01.0110を抽出し(ステップS17)、加数上位インクリメンタ7の出力00.000と論理和をとって、01.0110を得て出力する(ステップS18)。
この時、最初の式(1)は
(01.0110×26)+スティッキービット ……(5)
となっている。
正数化丸め部11は丸めモードによって動作が異なる。ここでは、値の近い方または偶数方向に丸めるものとすると、正規化シフタ10の出力が01.0110でスティッキービット生成部9からのスティッキービットが1であるから、正数化丸め部11の出力は1.011である(ステップS19)。
指数補正部12では、正数化丸め部11で最上位桁位置の補正が不要だったので、指数正規化部8の出力6をそのまま出力する(ステップS20)。
この結果、演算結果は1.011×26となる(ステップS21)。
【0022】
次に、以下の式(6)を計算する場合について図1、図3を参照して説明する。
図3は図1の積和演算器によりこの式(6)を計算する場合の図1の各構成要素での演算の流れを示す動作説明図である。
(−1.110×2~1)×(1.101×2~2)+(1.011×21)……(6)
先ず、桁合せシフト数指数生成部1で、桁合せシフト数として(6)式の指数に基づき−1+(−2)−1=−4を生成する(ステップS30)。
この場合、桁合せシフト数−4は−3以下なので、指数として、積部の指数の和(−1+(−2)=−3)と加数部の指数1とのうち加数部の指数の値1を選択して出力する(図3のステップS31)。
次に、加数桁合せ符号合せ部2で、ステップS30で得られた桁合せシフト数−4に従い、加数の仮数部1.011を4桁左(上位側)にシフトして10110.000000を得る。
先ず、加数中位10.000000(4桁×4桁の乗算なので8桁を有効数字とする)を得(ステップS32)。
ここで、式(6)の積の結果と加数が異符号なのでEORゲートEOR1の出力は1であり、従ってステップS32で得られた加数中位10.000000を反転して01.111111を得て乗算アレイ4に出力する(ステップS33)。
さらに、加数の仮数部1.011を反転したもの0.100とマスク1.110(4桁左シフトにより仮数部1.011が上位にはみ出したビットは3ビットなので、この上位側3ビットを有効とすべくマスクビットは1.110である)との論理積から加数上位0.100を得て加数上位インクリメント部7に出力する(ステップS34)。
また、さらに加数の仮数部1.011とマスク0.000(4桁左シフトにより仮数部1.011が下位にはみ出したビットはないのでマスクビットは全て0となる)との論理積から加数下位0.000を得て加数下位スティッキービット生成部3に出力する(ステップS35)。
さらに、上記のように加数上位は上位側3ビットが有効なので、上位から3ビット目が加数上位の最下位にに対応するため、その位置に1を立てて加数上位最下位として0.010を得て、加数上位インクリメント部7に出力する(ステップS36)。
尚、加数上位の2の補数は10.100であるが、最上位桁は符号を表していて計算には不要なので省く。
【0023】
次に、加数下位スティッキービット生成部3において加数下位に基づき加数下位スティッキービットを生成するが、この場合加数下位が0000で全て0であるため加数下位スティッキービットとして0を生成してスティッキービット生成部9に出力する(ステップS37)。
また、積の結果と加数が異符号(−と+)(即ち、図2のEORゲートEOR1の出力が1)であり、かつスティッキービットが0なので、ANDゲートAND1(スティッキービットは反転されてAND1に入力されるので)であり、この値1はキャリー伝搬加算部6に与えられる(ステップS38)。これは積の結果と加数が異符号の時はnegateする必要があるからである。
【0024】
これらの操作により、(6)式は次式(7)のようになる。
−(0.100×21)+{(1.110×1.101+01.111111)×2~3} ……(7)
次に、乗算アレイ4において、上式(7)の
(1.110×1.101+01.111111)内の計算を行うが、先ず乗算部分を加算部に直して上記の場合と同様に3項ずつ加算して以下の様にキャリー部(8−1)と和の部(8−2)を得る(ステップS39)。
011.101100 ……(8−1)
+ 01.001001 ……(8−2)
この2項が(8−1),(8−2)が乗算アレイ4出力である。
【0025】
最上位桁検出部5は乗算アレイ4の出力(式(8−1),(8−2))及び桁合せシフト数指数生成部1からの桁合せシフト数に基づき、指数正規化値、スティッキービット生成用のマスク、正規化シフト数を生成する。
上記したように、桁合せシフト数が−3以下であり、またこの場合、乗数と被乗数との積の結果とは異符号であるので最上位桁は加数上位の最上位桁の1桁下位となる。また、積の結果と加数とが異符号であるため、指数正規化値としては−1を指数正規化部8へ出力する(ステップS40)。
マスクとしては、最上位桁(小数点から左に4桁目)の下位n+1(=4+1=5)桁目(小数点から右に2桁目)以下に“1”を立てて00.011111を得る(ステップS40)。
また、正規化シフト数としては、桁合せシフト数−4に1を加算して符号反転した値3であり、この値を正規化シフタ10へ出力する(ステップS41)。
また、桁合せシフト数が−3以下の場合、積の結果と加数とが同符号の場合は符号反転信号として0を、異符号の場合は符号反転信号として1を出力する。従って、この場合は異符号のため1を出力する(ステップS48)。
【0026】
キャリー伝搬加算器6では、乗算アレイ4の出力のキャリー部(8−1)と加算部(8−2)とANDゲートAND1の出力1を加算して100.110110を生成し(ステップS42)、スティッキービット生成部9および正規化シフタ10へ出力する。また、ステップS42で得た加算値100.110110の最上位からのキャリー1を加数上位インクリメンタ7へ出力する(ステップS43)。
【0027】
加数上位インクリメンタ7では、加数上位0.100と加数上位最下位0.010とキャリー1を入力し、キャリーに応じて、加数上位と加数上位最下位の和00.110と加数上位0.100の一方を選択する。
このケースでは、キャリーが1なので、和00.110を選択し、また、積の結果と加数が異符号なので(即ち、図2のEORゲートEOR1の出力が1なので)左に1桁シフトを行って(即ち、桁合わせを行って)シフト後の値01.100を正規化シフタ10に出力する(ステップS44)。
【0028】
指数正規化部8では、桁合せシフト数指数生成部1からの指数1と最上位桁検出部5からの指数正規化値−1を加算して0を出力する(ステップS45)。
この時、最初の式は
−{(01.10×20)+(00.110110×2~3)} ……(8)
となっている。
次に、スティッキービット生成部9で、キャリー伝搬加算器6の出力00.110110を最上位桁検出部5からの出力であるマスクビット00.011111でマスクしてそれらの論理和をとり、さらに該論理和と加数下位スティッキービット生成部からの0との論理和をとった値1を出力する(ステップS46)。
正規化シフタ10では、正規化シフト数が3であるからキャリー伝搬加算器6出力00.110101を3桁右シフトして上位6ビットの00.0001を抽出し、加数上位インクリメンタ7の出力01.100と論理和をとって、01.1001として出力する(ステップS47)。
この時、最初の式(6)は
−((01.1001×20)+スティッキービット) ……(9)
となっている。
正数化丸め部11では、まず、加数上位が負であるから、最上位桁検出部5からの符号反転信号1に応答して正数化のために正規化シフタ10の出力01.1001をその0、1を反転して10.0110とする(ステップS49)。
スティッキービットが0でないので正数化のために1を加算する必要はない。さらに、正規化すべく最上位桁位置を補正して1.00110とする(ステップS50)。
値の近い方または偶数方向に丸めるものとすると、スティッキービットが1であるから、正数化丸め部11出力は1.010である(ステップS51)。
指数補正部12では、正数化丸め部11で1桁補正したので、指数正規化部8出力0に1を加算して1を出力する(ステップS52)。
この結果、最終的な演算結果は1.010×21となる(ステップS53)。
【0029】
このように、本例では、積より加数の方が大きい場合に、積より上位にはみ出した加数上位部分を最上位桁を動かさずに処理し、該はみ出した部分以外の加数と積との積和演算結果を正規化したものと最終的に加算を行って最終的な正規化した積和演算結果を得ている。従って、上記積より上位にはみ出した加数上位部分の正規化が不要なため、積和演算が高速化される。
【0030】
ここで、最上位桁検出部5において、乗算アレイ4の出力である2項から、正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を求める処理を図4のフローチャートを用いて説明する。
先ず、ステップ401において、桁合わせシフト数が−3以下か−2以上かを判断し、−2以上の場合は図5〜図7の処理(本実施例では図7の処理)を行う。
一方、桁合わせシフト数が−3以下の場合は、ステップ402に進み、乗数と被乗数との積と加数とが異符号か同符号かを判定する。
同符号と判定された場合は、加数上位の最上位桁を上記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁と判定する(ステップ403)。
一方、異符号と判定された場合は、加数上位の最上位桁の1桁下位の桁を上記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁と判定する(ステップ404)。
【0031】
次に、桁合せシフト数が−2以上の場合の、最上位桁検出部5において、乗算アレイ4の出力である2項から、正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を誤差なしで求める処理を説明する。
まず、最上位桁検出部5において、一般に2の補数表現の入力を検出部5の加算器に与え、それらの加算結果の絶対値の0でない最上位桁を誤差なしで求める方式を説明し、次に、1桁の誤差を認めることによってこの処理を簡素化し、最後に、実際に最上位桁検出部5に適用した場合について説明する。
図5は、加算器への入力から加算結果の絶対値のうち0でない最上位桁を誤差なしで求める処理である。
加算結果が正の場合は加算結果がそのまま絶対値であるので、加算結果の0でない最上位桁を求めればよい。これに対して、加算結果が負の場合は、絶対値にするために加算結果を0、1反転して1を加算する。この時、通常は最上位からみて最初の0の桁が、絶対値の0でない最上位桁となる。しかし、加算結果が最上位から途中まですべて1で残りが全て0の場合は、0、1反転して1を加算するとキャリーが伝わるので、最上位からみて最初の0の桁の1桁上位が0でない最上位桁となる。このことを踏まえると処理は以下のようになる。
【0032】
第1、第2ステップは正負のチェック、第3ステップは最上位桁の検索、第4ステップはキャリーの有無による最上位桁の補正、第5ステップは負数の正数化時のキャリーの有無による最上位桁の補正を行っている。
まず、第1ステップで、乗算アレイ4の2つの項の出力であるキャリー部と和部の対応する桁、先ず最上位桁のビット対、即ち入力2ビットの値をチェックする。“00”または“11”の場合は第2ステップを飛ばして第3ステップを行う。“01”または“10”の場合は第2ステップを行う。
第2ステップでは、次の桁から下位に向かって入力2ビットの値が“00”または“11”の桁を探す。発見できなかった場合は図5の(11)に該当し加算結果はオール1すなわち−1なので、0でない最上位桁は最下位桁である。
第3ステップは第1、第2ステップの結果によって2通りに分かれる。
一方は第1ステップで最上位桁の入力2ビットの値が“11”の場合または第2ステップで“00”を発見した場合である。この場合の加算結果は負であるので、第3−ステップを行う。他方は第1ステップで最上位桁の入力2ビットの値が“00”の場合および第2ステップで“11”を発見した場合である。この場合の加算結果は正であるので、第3+ステップを行う。
第3−ステップでは、次の桁から下位に向かって入力2ビットの値が“11”以外の桁を探す。発見できなかった場合は図5の(6)に該当し加算結果は−2なので、0でない最上位桁は最下位桁の1桁上位である。“01”または“10”を発見した場合は、下位からのキャリーの有無によって0でない最上桁が1桁動くので、第4−ステップを行う。“00”を発見した場合は、第5−Bステップを行う。
第3+ステップでは、次の桁から下位に向かって入力2ビットの値が“00”以外の桁を探す。発見できなかった場合は図5の(10)に該当し加算結果は0なので、0でない最上位桁は存在しない。“01”または“10”を発見した場合は、下位からのキャリーの有無によって0でない最上桁が1桁動くので、第4+ステップを行う。“11”を発見した場合は図5の(9)に該当し、この桁でキャリーが発生して1桁上位が1となるので、この桁の1桁上位が0でない最上位桁である。
第4−ステップでは、次の桁から下位に向かって入力2ビットの値が“00”または“11”の桁を探す。“11”を発見した場合は第5−Aステップを行う。“00”を発見した場合または発見できなかった場合は図5の(3)に該当しキャリーが発生しないので、第3−ステップで発見した桁の1桁上位が0でない最上位桁である。
第4+ステップでは、次の桁から下位に向かって入力2ビットの値が“00”または“11”の桁を探す。“11”を発見した場合は図5の(8)に該当し、この桁から第3+ステップで発見した桁の1桁上位までキャリーが伝わって、第3+ステップで発見した桁の1桁上位が0でない最上位桁になる。“00”を発見した場合または発見できなかった場合は図5の(7)に該当しキャリーが発生しないので、第3+ステップで発見した桁が0でない最上位桁である。
第5−Aステップでは、次の桁から下位に向かって入力2ビットの値が“00”以外の桁を探す。発見した場合は図5の(1)に該当し、第4−ステップで発見した桁から第3−ステップで発見した桁の1桁上位までキャリーが伝わって、第3−ステップで発見した桁が0でない最上位桁になる。発見しなかった場合は図5の(2)に該当し、0、1反転して1を加算するとさらにキャリーが伝わるので、3−ステップで発見した桁の1桁上位が0でない最上位桁である。
第5−Bステップでは、次の桁から下位に向かって入力2ビットの値が“00”以外の桁を探す。発見した場合は図5の(4)に該当し、3−ステップで発見した桁の1桁上位が0でない最上位桁である。発見しなかった場合は図5の(5)に該当し、0、1反転して1を加算するとキャリーが伝わるので、3−ステップで発見した桁の2桁上位が0でない最上位桁である。
以上が加算器入力から加算結果の絶対値の0でない最上位桁を求める処理である。
【0033】
次に、上記処理を4ビットの具体的な数値を使用して説明する。
図5のように本処理では11通りの場合があるのでそれぞれの場合について説明する。
加算器入力を1011と1110とすると、第1ステップで最上位桁は“11”であるから、次に第3−ステップを行う。上位から第2桁で“01”を発見するので、次に第4−ステップを行う。次の桁で“11”を発見するので、次に第5−Aステップを行う。次の桁で“00”以外を発見するので(1)に該当し、0でない最上位桁は第2桁である。実際に加算して符号反転すると0111となり正しい結果を得ている。
加算器入力を1101と1111とすると、第1ステップで最上位桁は“11”であるから、次に第3−ステップを行う。上位から第3桁で“01”を発見するので、次に第4−ステップを行う。次の桁で“11”を発見するので、次に第5−Aステップを行う。既に最下位に達しているので発見できない場合になって(2)に該当し、0でない最上位桁は第2桁である。実際に加算して符号反転すると0100となり正しい結果を得ている。
加算器入力を0010と1000とすると、第1ステップで最上位桁は“01”であるから、次に第2ステップを行う。次の桁で“00”を発見するので第3−ステップを行う。上位から第3桁で“10”を発見するので、次に第4−ステップを行う。次の桁で“00”を発見するので(3)に該当し、0でない最上位桁は第2桁である。実際に加算して符号反転すると0110となり正しい結果を得ている。
加算器入力を1000と0001とすると、第1ステップで最上位桁は“10”であるから、次に第2ステップを行う。次の桁で“00”を発見するので第3−ステップを行う。上位から第3桁で“00”を発見するので、次に第5−Bステップを行う。次の桁で“00”以外を発見するので(4)に該当し、0でない最上位桁は第2桁である。実際に加算して符号反転すると0111となり正しい結果を得ている。
加算器入力を1100と1100とすると、第1ステップで最上位桁は“11”であるから、第3−ステップを行う。上位から第3桁で“00”を発見するので、第5−Bステップを行う。“00”以外を発見しないので(5)に該当し、0でない最上位桁は第1桁である。実際に加算して符号反転すると1000となり正しい結果を得ている。
加算器入力を0101と1001とすると、第1ステップで最上位桁は“01”であるから、次に第2ステップを行う。次の次の桁で“00”を発見するので第3−ステップを行う。“11”以外を発見しないので、(6)に該当し、0でない最上位桁は第3桁である。実際に加算して符号反転すると0010となり正しい結果を得ている。
加算器入力を0110と1101とすると、第1ステップで最上位桁は“01”であるから、次に第2ステップを行う。次の桁で“11”を発見するので第3+ステップを行う。上位から第3桁で“10”を発見するので、次に第4+ステップを行う。“00”も“11”も発見しないので(7)に該当し、0でない最上位桁は第3桁である。実際に加算すると0011となり正しい結果を得ている。
加算器入力を0011と0101とすると、第1ステップで最上位桁は“00”であるから、次に第3+ステップを行う。上位から第2桁で“01”を発見するので、次に第4+ステップを行う。次の次の桁で“11”も発見するので(8)に該当し、0でない最上位桁は第1桁である。実際に加算すると1000となり正しい結果を得ている。
加算器入力を0011と0010とすると、第1ステップで最上位桁は“00”であるから、次に第3+ステップを行う。上位から第3桁で“11”を発見するので(9)に該当し、0でない最上位桁は第2桁である。実際に加算すると0101となり正しい結果を得ている。
加算器入力を0110と1010とすると、第1ステップで最上位桁は“01”であるから、次に第2ステップを行う。次の次の桁で“11”を発見するので第3+ステップを行う。“00”以外の桁を発見しないので(10)に該当し、値が0となって0でない最上位桁は存在しない。実際に加算すると0000となり正しい結果を得ている。
加算器入力を0110と1001とすると、第1ステップで最上位桁は“01”であるから、次に第2ステップを行う。“00”も“11”も発見しないので(11)に該当し、0でない最上位桁は最下位である。実際に加算して符号反転すると0001となり正しい結果を得ている。
以上が加算器入力から加算結果の絶対値の0でない最上位桁を誤差なしで求める処理の具体例である。
【0034】
上記図5の処理は比較的複雑でハードウェア量および検出時間の増大を招く恐れがある。これに対して、0でない最上位桁を求める際に1桁の誤差を認めれば、上記処理は大幅に簡素化される。
図6は加算器入力から加算結果の絶対値の0でない最上位桁を1桁の誤差で求める処理である。
第1、第2ステップは図5の処理と同一である。第3−ステップおよび第3+ステップでは、次の桁から下位に向かって入力2ビットの値がそれぞれ“11”以外および“00”以外の桁を探し、発見した桁を0でない最上位桁とする。発見できなかった場合は最下位桁を0でない最上位桁とする。
こうすると図5の(1)〜(11)のうち、(5)以外は1桁の誤差に収る。(5)の場合は発見した桁の2桁上位が0でない最上位桁であり1桁の誤差に収まらない。
しかし、この場合は正数化丸め部11において以下のように処理すればよい。上記の場合、正数化丸め部11において符号反転した時点では、まだ発見した桁の1桁上位が0でない最上位桁であり1桁の誤差に収まっていて、値はオール1である。そして、1を加算するとキャリーが最上位まで伝わって100.0となる。この結果を2桁右シフトすると正しい仮数部が得られるので、指数補正部12に2を送り、指数を補正する。一方、仮数部は最上位以外は全て0でありシフトしなくても値は正しく、2桁右シフト回路は不要である。最上位のみ2桁右シフトを行う。
【0035】
上記図6の処理を最上位桁検出部5に適用するには以下のようにする。
桁合せシフト数が−1以上の場合は加数上位は0桁であるが、桁合せシフト数が−2の場合は加数上位は1桁である。したがって、該最上位桁検出はキャリー伝搬加算器6の入力である乗算アレイ4の出力にこの加数上位1桁を加えた値に対して行う(図7の第1ステップ)。
乗算アレイ4の出力はそれぞれの入力がn桁とすると、2n+1桁と2n桁の2値になる。例えば、乗算アレイ4がキャリー保存加算器であれば、キャリー部分が2n+1桁、和の部分が2n桁となる。加数上位1桁は2n桁側に加える。こうすると、どちらも2n+1桁なる。図6の処理をそのまま適用するにはさらにキャリー部分、和の部分の最上位に符号ビットを加える必要がある。積と加数が同符号なら双方(キャリー部分、和の部分の最上位に)0、異符号なら一方の最上位に0、他方の最上位に1を加える。しかし、同符号なら第3+ステップから、異符号なら第2ステップから始めれば、符号ビットを付加しないで済む。結局、図6の処理の第1ステップを図7の第1ステップのように修正すればよい。
【0036】
図8は図7の処理を実現する図1の最上位桁検出部5の構成例を示すブロック図である。
最上位桁検出部5は桁シフト数判定部82と、符号判定部84と、最上位桁判定部86と、検索回路80と、エンコーダ88とを含む。ここではスティッキービット生成用のマスクの生成部の構成は省略する。
桁シフト数判定部82は入力された桁シフト数S1の値が−2以上か、−3以下かを判定する。桁シフト数が−3以下と判定された場合は、最上位桁判定部86において、ゲートEOR1の出力に基づき図4のステップ402−404の処理を行うと共に、検索回路80に後述する検索完了モード(01)を出力して検索回路80での検索処理を行わない。
桁シフト数が−2以上と判定された場合は、符号判定部84において図7の第1ステップを行う。即ち、ゲートEOR1からの出力に基づき積と加数とが異符号か同符号かを判定し、その判定結果に基づいたモード(mode[K−1])を出力して検索回路80に与える。
検索回路80は図7の第2ステップ、第3+ステップ、第3−ステップを行うものである。
乗算アレイ4からの2項のビット幅が例えば4n桁(nは1又は2以上の整数)であるとすると、検索回路80はn−1個の4桁検索回路802〜80nと1つの最下位4桁検索回路801とから構成される。
図8において、各4桁検索回路への各入力input[]は、乗算アレイ4からの2項の対応する桁の1ビットずつ(即ち、キャリー部の1ビットと和部の1ビットからなるビット対)の計2ビットの組(桁の組)である。
各4桁検索回路は、各2ビットの組が図7の対応するステップに該当する数字の組であるかどうか判定し、判定結果をfound[]として出力すると共に、該回路への全ての入力の判定結果に従い検索モード信号mode[]を出力し、次段の検索回路に与える。
出力信号found[]は入力に対応する桁の数字が図7に対応するステップに該当する数字の組であれば“1”、そうでなければ“0”となる。
検索回路80の全ての出力found[4n−1]〜found[4k−4]はエンコーダ88でエンコードされ指数正規化値D7、正規化シフト数D9として出力される。
このように、本例では、検索回路80を4桁ごとに分割して複数の4桁検索回路を構成し、各4桁検索回路では乗算アレイ4からの2項の入力(input[])と前段の回路(または上位の4桁検索回路)からの検索モード(mode[])に基づき検索を行い、検索結果(found[])を出力すると共に、下位の4桁検索回路に検索結果に基づく検索モードを与える。
本例では、検索モードは図9のように4種類ある。即ち、図7の第2ステップに対応する正負判定モード、第3+ステップに対応する正数検索モード、第3−ステップに対応する負数検索モード、および検索終了モードであり、これら4種類のモードにはモードの種別を示す2ビットコード“00”“10”“11”“01”を割り当てている。
【0037】
図10A、図10Bはそれぞれ図8の4桁検索回路、最下位4桁検索回路における論理の例を示す表である。図10A、図10Bにおいて、¬(00)、
¬(11)(¬は否定を表わす)はそれぞれ00以外、11以外の2ビットの組み合わせを示す。
図8の検索回路80の動作を図7のフローチャート及び図10A、図10Bに示す論理を用いて説明する。
符号判定部84は図7の第1ステップを実行するものであり、ゲートEOR1の出力が“1”であれば異符号であるのでモード信号mode[k−1]として正負判定モード[00]を出力し、ゲートEOR1の出力が“0”であれば同符号であるのでモード信号mode[k−1]として整数検索モード[10]を出力する。
各4桁検索回路802〜80nの動作を以下に説明する。
各4桁検索回路802〜80nにおいては、入力されるモード信号mode[k−1]のモードが正負判定モード[00]であれば(図10Aの(1)〜(22)該当する)、第2ステップを実行すべく、次の桁から下位に向かって2ビットの組が“00”または“11”の桁を探す。
該4桁検索回路の4組の入力input[4k−4]〜input[4k−1]に“00”の桁があれば(図10Aの(1)〜(10)該当)加算結果は負であるので、第3−ステップを実行し、該“00”が発見された桁から下位の桁に向かって“11”以外の桁を探す。“11”以外の桁が発見されれば、該発見された“11”以外の桁が求める最上位桁である。従って、この場合は次段以降の4桁検索回路での検索が不要であるのでモード信号mode[k]として検索完了モード[01]を出力する(図10Aの(1)〜(3)、(5)、(6)、(8))。“11”以外の桁が発見されなければ、モード信号mode[k]として負数検索モード[11]を出力し、次段の4桁検索回路において第3−ステップを実行する(図10Aの(4)、(7)、(9)、(10))。
【0038】
一方、第2ステップにおいて、“11”の桁が発見されれば(図10Aの
(13)〜(22)に該当)加算結果は正であるので、第3+ステップを実行し、該“11”が発見された桁から下位の桁に向かって“00”以外の桁を探す。“00”以外の桁が発見されれば、該発見された“00”以外の桁が求める最上位桁である。従って、この場合は次段以降の4桁検索回路での検索が不要であるのでモード信号mode[k]として検索完了モード[01]を出力する((15)、(17)、(18)、(20)〜(22))。
“00”以外の桁が発見されなければ、モード信号mode[k]として正数検索モード[10]を出力し、次段の4桁検索回路において第3+ステップを実行する(図10Aの(13)、(14)、(16)、(19))。
また、第2ステップにおいて、“00”、“11”いずれの桁も発見されなければ、モード信号mode[k]として正負判定モード[00]を出力し、次段の4桁検索回路において第2ステップを実行する(図10Aの(11)、
(12))。
【0039】
一方、各4桁検索回路802〜80nにおいては、入力されるモード信号mode[k−1]のモードが正数検索モード[10]であれば(図10Aの(24)〜(28))、第3+ステップを上記と同様に実行する。
また、各4桁検索回路802〜80nにおいては、入力されるモード信号mode[k−1]のモードが負数検索モード[11]であれば(図10Aの(29)〜(33))、第3−ステップを上記と同様に実行する。
また、各4桁検索回路802〜80nにおいては、入力されるモード信号mode[k−1]のモードが検索完了モード[01]であれば(図10Aの(23))、そのまま検索を行わずに検索完了モード[01]を出力する。
最下位4桁検索回路801の論理は、4桁検索回路802〜80nとほぼ同じであるが、第2ステップ又は第3+ステップ又は第3−ステップを実行した際に、該当する桁が発見されなかった場合は、最下位桁が求める最上位桁と判定する。また、最下位4桁検索回路801においてはモード信号は出力しない。
【0040】
次に、図8の検索回路80の動作を図2の例を用いて説明する。
図2の例では検索回路80は1つの4桁検索回路802と最下位4桁検索回路801で構成されるが、ここでは例えば最下位4桁検索回路801の入力を5桁とする。ゲートEOR1の出力が“0”であり積と加数が同符号であるのでモード信号mode[k−1]として4桁検索回路802に正数検索モード[10]が与えられ、4桁検索回路802は第3+ステップを実行する。
すなわち、下位に向かって“00”以外の桁を探すと“10”がinput[4k−3]にあるため出力found[4k−4]、found[4k−3]、found[4k−2]、found[4k−1]として“0100”を出力し、、さらに、モード信号mode[k]として検索完了モード[01]を出力する。したがって、最下位桁検索回路80では出力found[4n−4]、found[4n−3]、found[4n−2]、found[4n−1]として“0000”を出力する。
こうして、入力input[4k−3]に求める最上位桁があると判定される。
【0041】
図8の回路は乗算アレイ4の出力のビット幅が小さい場合は単純で良い回路であるが、ビット幅が大きくなると検索時間が増大する。また、ビット幅が大きい場合に正規化シフタ10による正規化を1段階のシフトで行うとシフタの負荷が重くなって遅くなる。
図11Aの検索回路はビット幅が大きい場合に対応して図8の検索回路80を改良した回路である。
ビット幅はこの例では64桁である。ここでは、検索回路110は、7個のモード先見および第1段シフト制御回路30〜36、最下位モード先見および第1段シフト制御回路37、15個の4桁検索回路38〜52、最下位4桁検索回路53、8個の8ビット論理和54〜61(図11B)から成る。
検索を高速化するために検索モード信号を高速に下位に伝えるモード先見回路を付加し、正規化シフタ10による正規化を2段階にした場合に対応する第1段シフト制御信号shift_1st[1〜8]および第2段シフト制御信号shift_2nd[1〜8]を出力している。
【0042】
ここでは、各モード先見及び第1段シフト制御回路30〜36、及び最下位第1段シフト制御回路37への入力は8桁とする。これら8桁の入力のうち上位4桁と下位4桁とはそれぞれさらに2つの4桁検索回路(図8の4桁検索回路と同様の構成)に入力される。
各第1段シフト制御回路30〜37の出力である第1段シフト制御信号shift_1st[1]〜[8]はエンコーダ90に与えられる。各第1段シフト制御回路30〜37に関連する2つの4桁検索回路の8つの出力(found[8k−8]〜found[8k−1]、本例ではk=1〜8)の対応する1つの対応するオアゲート54〜61の1つに入力されている。即ち、8つの出力found[8k−8]、found[8(k+1)−8]…found[56]はオアゲート54に入力され、8つの出力found[8k−7]、found[8(k+1)−7]…found[57]はオアゲート(第2段シフト制御回路)55に入力される。これらおあげーと54〜61の出力である第2段シフト制御信号shift_2nd[i]は同様にエンコーダ90に与えられる。
各モード先見及び第1段シフト制御回路30〜36は前段からのモード信号mode[]に従ったモードで検索を行い、8桁の入力内に求める最上位桁があるかどうか判定し、あれば第1段シフト制御信号shift_1st[k]を“1”、なければ“0”としてエンコーダに与える。さらに、該判定結果に従ったモード信号を次段に与える。
【0043】
図12A、12Bはそれぞれ図11Aのモード先見及び第1段シフト制御回路、最下位第1段シフト制御回路の動作論理の例を示す表である。
次に、モード先見及び第1段シフト制御回路30〜36の動作論理を説明する。図12Aにおいて、“−”はdon’t careを示す。
【0044】
図において、例(1)〜(18)は入力モードが[00]、即ち正負判定モードであり、該回路において第2ステップを実行する事を示す。そのうち例(1)〜(8)は、該回路で8桁の入力について第2ステップを実行した結果“11”が発見されたため出力モード信号として負数検索モード[11]を出力する場合を示す。従って、次段では第3−ステップを実行する。
同様に、例(11)〜(18)は、該回路で8桁の入力について第2ステップを実行した結果“00”が発見されたため出力モード信号として正数検索モード[10]を出力する場合を示す。従って、次段では第3+ステップを実行する。
また、例(9)、(10)は、該回路で8桁の入力について第2ステップを実行した結果“00”、“11”いずれも発見されないため出力モード信号として正負判定モード[00]を出力する場合を示す。従って、次段では第2ステップを依然として実行する。
例(19)は、前段において、求める最上位桁が発見されたため入力モードが[01]、即ち、検索完了モードであり、従って同様に出力モード信号として検索完了モード[01]を出力する。
【0045】
例(20)は、入力モードが[10]、即ち、正数検索モードであり、該回路において第3+ステップを実行した結果、“00”以外の桁が発見されず、出力モード信号として正数検索モード[10]を出力する場合を示す。従って、次段では第3+ステップを依然として実行する。
例(21)は、入力モードが[11]、即ち、負数検索モードであり、該回路において第3−ステップを実行した結果、“11”以外の桁が発見されず、出力モード信号として負数検索モード[11]を出力する場合を示す。従って、次段では第3−ステップを依然として実行する。
上記いずれの場合も第1段シフト制御信号shift_1st[k]は“0”である。
一方、例(22)は、上記以外の場合であり、モード先見及び第1段シフト制御回路において求める最上位桁が発見され、出力モード信号として検索完了モード[01]を出力すると共に第1段シフト制御信号shift_1st[k]として“1”を出力する。
【0046】
最下位第1段シフト制御回路37の動作論理は図12Bに示す通りである。
即ち、前段以前の段において、求める最上位桁が発見されたため入力モードが[01]、即ち、検索完了モードであり、従って第1段シフト制御信号shift_1st[8]として“0”を出力する。
また、入力モードが[01]以外の場合、即ち、[00][10][11]のいずれの場合も、前段以前の段において求める最上位桁が発見されなかったため、この最下位8桁で発見されるか、またはこの最下位8桁で発見されない場合は最下位桁で発見されたとみなす。従って、いずれにしてもこの最下位8桁で発見されるため第1段シフト制御信号shift_1st[8]として“1”を出力する。
【0047】
従って、各モード先見及び第1段シフト制御回路からの第1段シフト制御信号shift_1st[k]により8桁単位で求める最上位桁位置(シフト量)が分かり、さらにオアゲート54〜61からの第2段シフト制御信号shift_2nd[i]により1桁単位で最上位桁位置(シフト量)が分かる。従って、これら第1段、第2段シフト制御信号から最上位桁位置が分かり、これをエンコードすれば指数正規化値、正規化シフト数が求まる。
【0048】
このように、各モード先見及び第1段シフト制御回路において図7の対応するステップを実行した結果、目的の桁が発見されなかった場合は次段のモード先見及び第1段シフト制御回路において同様のステップを実行する必要がある(図12Aの例(10)、(19)〜(21))。
従ってそのような場合に、図8の構成では4桁検索回路での検索動作を介してモードが伝送されるが、図11Aの構成ではモード先見及び第1段シフト制御回路のみの処理で速やかに次段に実行すべきモードを指示できるので、図8の構成に比べ出力モードを高速に下位に伝送でき、その結果、速やかに求める最上位桁を検出できる。
【0049】
モード先見論理は一見複雑で高速なモード信号の伝達ができないかのように見える。しかし、検索モードの切り替わりは、正負判定モードから正数検索モードまたは負数検索モードへの切り替わりと、その検索モードから検索完了モードへの切り替わりの2回である。すなわち、8桁ずつ8個あるモード先見回路のうち、少なくとも6個では検索モードが切り替わらない。
したがって、検索モードが切り替わらない場合を高速化すれば高速なモード信号の伝達が可能となる。検索モードが切り替わらない場合は、入力が全て0(図12Aの例(20))、全て1(例21)、入力の排他的論理和が全て1()例(9)、(10)の3通りであり、回路のこの部分の高速化は容易である。
また、第1段シフト制御論理は8桁のどこかに最上位桁があるかないかを判定しているので、検索結果であるfound[0〜63]に比べて生成論理が単純で高速に生成できる。
第2段シフト制御論理はfound[0〜63]から8入力論理和回路を通して生成するので遅くなるが、第1段シフトの完了時に間に合えばよいので問題ない。
例えば倍精度浮動小数の積和演算を行った場合、入力の仮数部は53桁あり、キャリー伝搬加算器6の出力は106桁+上位へのキャリーとなる。そして、桁落ちが発生すると106桁のどこにでも絶対値の0でない最上位桁が来る可能性がある。しかし、該最上位桁が下位53桁に来る可能性は極めて低い。しかも、このような大幅な桁落ちが発生すると有効数字は0桁になる。更に、該最上位桁が下位53桁にあれば丸めが不要となり正規化しなくとも正確な値を出力できる。したがって、このような場合は実行サイクル数が伸びても一旦正規化していない値を結果として出力し、その後実行サイクル数を伸して正規化を行えば十分である。
以上から最上位桁検出部5と正規化シフタ10を、キャリー伝搬加算器6の出力の下位から52桁以上に該最上位桁がある場合に正しく正規化を行い、そうでない場合には下位53桁を正規化しないまま出力するようにしても性能に影響はない。そして、こうすることにより最上位桁検出部5と正規化シフタ10を簡素化することができる。
【0050】
このような構成の積和演算器の動作を図13を参照して説明する。
【0051】
ここでは、仮数部が4桁の場合で具体的な数値を用いて説明する。
(1.001×21)×(1.001×22)+(−1.010×23)を計算すると以下のようになる。
まず、桁合せシフト数指数生成部1で、桁合せシフト数として1+2−3=0を生成し、桁合せシフト数が−2以上なので指数として1+2=3を生成する。
次に、加数桁合せ符号合せ部2で、加数仮数部1.010を0桁右シフトし、異符号なので加数中位と加数上位の0、1反転をして、加数中位10.101111、加数上位1.000、仮数下位0000、および加数上位最下位1.000を生成する。次に、加数下位スティッキービット生成部3で、加数下位0000が0なのでスティッキービットとして0を生成する。
これらの操作によって、上式は
(1.000×25)+((1.001×1.001+10.101111)×23)
となる。25は加数上位の1が加数中位の最上位の1桁上位であることを示している。
次に、乗算アレイ4で、
1.001×1.001+10.101111
を前述のように乗算部分を加算に直して3項ずつ加算すると、
000.000010
+ 11.111110
となる。この2項が乗算アレイ4出力である。
【0052】
最上位桁検出部5では、乗算アレイ4出力および桁合せシフト数0とから、0でない最上位桁は最下位桁であるので、下位から4桁目で検索を打切って、指数正規化部8へ指数正規化値−3を、スティッキービット生成部9へマスク00000000を、正規化シフタ10へ正規化シフト数−3を出力する。
キャリー伝搬加算器6では、乗算アレイ4出力を加算し、さらに積と加数が異符号かつ加数下位スティッキービットが0なので最下位に1を加算して00.000001を生成し、スティッキービット生成部9および正規化シフタ10へ出力する。また、最上位からのキャリー1を加数上位インクリメンタ7へ出力する。
加数上位インクリメンタ7では、桁合せシフト数0が−2以上で正規化シフト数−3が1、2以外なので00.000を生成する。
この時、最初の式は
(00.000×23)+(00.000001×23)
となっている。
指数正規化部8では、桁合せシフト数指数生成部1からの指数3と最上位桁検出部5からの−3を加算して0を出力する。
スティッキービット生成部9では、キャリー伝搬加算器6出力00.000001を最上位桁検出部5出力00000000でマスクして論理和をとり、さらに加数下位スティッキービット生成部からの0と論理和をとった値0を出力する。
正規化シフタ10では、正規化シフト数が−3であるからキャリー伝搬加算器6出力00.000001を3桁左シフトして上位6ビットの00.0010を抽出し、加数上位インクリメンタ7出力00.000と論理和をとって、00.0010として出力する。
この時、最初の式は
00.0010×20
となっている。正数化丸め部11では、正規化シフタ10出力が00.0010でスティッキービットが0であるから、正数化丸め部11出力は0.001である。指数補正部12では、正数化丸め部11で最上位桁位置の補正が不要だったので、指数正規化部8出力0をそのまま出力する。
この結果、最終的な演算結果は0.001×20となる。そして、この値を改めて正規化すると、1.000×2~3となる。
【0053】
図14は本発明の更に別の実施例による積和演算器の構成図である。
本積和演算器は浮動小数積和演算で一般的に行われている符号合わせ、正数化、及び様々な丸めモードによる丸めを行わない。したがって、本実施例は、被乗数、乗数、及び加数が全て同符号で丸めは切捨てのみを行う浮動小数積和演算器である。本分野を専門とする技術者であれば、本実施例に該符号合わせ、正数化、及び丸め処理を付け加えて一般的な浮動小数積和演算器を構成することが可能である。
【0054】
本実施例は、桁合せシフト数指数生成部1、加数桁合せ部2、積和演算アレイ4、再上位桁検出部5、キャリー伝搬加算器6、指数正規化部8、及び正規化シフタ10から成る。
桁合せシフト数指数生成部1は、加数、被乗数、及び乗数の指数部を入力とし、桁合せシフト数および正規化前の指数を生成して、それぞれ加数桁合せ符号合せ部2および指数正規化部8へ出力する。正規化前の指数としては被乗数と乗数の指数部の和すなわち積の指数部を出力する。桁合せシフト数は、該積の指数部から加数指数部を引いて生成する。
尚、桁合せシフト数が(−仮数部の桁数−1)以下の場合を統一的に処理しようとすると仮数部を処理する加数桁合せ部2、積和演算アレイ4、再上位桁検出部5、キャリー伝搬加算器6、及び正規化シフタ10のビット幅が膨大となり現実的でない。この場合は、丸めが切捨てであれば積の部分が切捨てられて結果は加数そのものとなるので、本実施例とは別にこの場合を検出して結果として加数を出力する回路を付け加えることにより、仮数部を処理する部分の桁数を(仮数部の桁数×3)にすることができる。
【0055】
加数桁合せ部2は、加数仮数部および桁合せシフト数を入力とし、加数仮数部の桁合せを行い桁合せ後の加数仮数部として積和演算アレイ4に出力する。通常は桁合せシフト数に応じたシフトを行う。しかし、前節で説明したように桁合せシフト数が(−仮数部の桁数−1)以下の場合は本実施例の回路の処理結果は使用しないため出力値は任意である。一方、桁合せシフト数が(仮数部の桁数×2−1)以上の場合は加数が切り捨てられて結果は被乗数と乗数の積となる。この場合は、桁合せ後の加数仮数部として0を出力する。
【0056】
積和演算アレイ4は被乗数仮数部、乗数仮数部、および桁合せ後の加数仮数部を入力とし、被乗数仮数部と乗数仮数部の積と桁合せ後の加数仮数部の和を、キャリー保存加算器、冗長2進加算器等のアレイを用いて計算し、結果を最上位桁検出部5およびキャリー伝搬加算器6に出力する。積和演算アレイ4の出力は、キャリー伝搬加算器6で加算すると積和演算結果となる2つの値である。
【0057】
最上位桁検出部5は、積和演算アレイ4出力から、積和演算結果の絶対値の0でない最上位桁を検出し、検出結果に基づいて、指数正規化部8へは指数正規化値、正規化シフタ10へは正規化シフト数を出力する。
本実施例では該指数正規化値及び正規化シフト数は常に同一である。該最上位桁検出は図5の処理に基づいて行う。但し、本実施例では該積和演算アレイ4出力は2の補数ではなく絶対値である。図5の処理を適用するには入力の2つの値のそれぞれの最上位桁の上位に0を加えて2の補数とすればよい。指数正規化値および正規化シフト数は、求めた最上位桁と正規化前の小数点の左の桁との桁位置の差である。
【0058】
キャリー伝搬加算器6は積和演算アレイ4出力の2つの値を加算して正規化前の積和演算結果仮数部を生成し、正規化シフタ10へ出力する。
指数正規化部8は正規化前の指数に最上位桁検出部5からの指数正規化値を加算して正規化し、加算結果を最終的な積和演算結果指数部として出力する。
正規化シフタ10は、キャリー伝搬加算器6からの正規化前の積和演算結果仮数部を最上位桁検出部5からの正規化シフト数を用いて正規化し、最終的な積和演算結果仮数部として出力する。
【0059】
図15は本実施例の仮数部が4ビットの具体的な数値による動作例である。
(1.110×22)×(1.101×23)+(1.011×27)を計算すると以下のようになる。
まず、桁合せシフト数指数生成部1で、桁合せシフト数として2+3−7=−2を生成し、正規化前の指数として2+3=5を生成する。次に、加数桁合せ符号合せ部2で、加数仮数部1.011を2桁左シフトして、桁合せ後の加数仮数部000101.100000を生成する。これらの操作によって、上式は
((1.110×1.101+000101.100000)×25)
となる。次に、積和演算アレイ4で、
1.110×1.101+000101.100000
の乗算部分を加算に直して、
とし、以下のように計算する。
【0060】
積和演算アレイ4はキャリー保存加算器とする。キャリー保存加算器は3つの数を加算してキャリー部分と和の部分の2つの数を出力する。キャリー部分は各桁に2つ以上1がある場合に次の桁に1を立てることによって生成する。和の部分は各桁に1つまたは3つ1がある場合にその桁に1を立てることによって生成する。まず、最初の3項を加算すると、この部分がキャリー部分と和の部分の2項となって、
となる。
さらにこの結果の最初の3項を加算すると、この部分が2項となって、
となる。
さらにこの3項を加算すると、
となる。
この2項が積和演算アレイ4の出力である。
【0061】
次に、最上位桁検出部5で、該積和演算アレイ4出力の2項の最上位桁の上位に0を加えて2の補数とし図5の処理に基づいて最上位桁検出を行う。
まず、第1ステップで、最上位桁が00であるから次に第3+ステップを行う。
第3+ステップでは、正規化前の小数点の左の桁を基準桁として2桁左で01を発見するので、次に第4+ステップを行う。
第4+ステップでは11を発見するので、図5の(8)の場合に該当し絶対値の0でない最上位桁として第3+ステップで発見した桁の1桁上位すなわち基準桁の3桁左が求める最上位桁である。
したがって、指数正規化部8及びへ正規化シフタ10へ指数正規化値及び正規化シフト数として3を出力する。
キャリー伝搬加算器6では、積和演算アレイ4出力を加算して0001000.010110を生成し、正規化シフタ10へ出力する。この時、最初の式は
(0001000.010110×25)
となっている。
次に、指数正規化部8で、正規化前の指数5と最上位桁検出部5からの指数正規化値3を加算して8を出力する。正規化シフタ10では、正規化シフト数が3であるからキャリー伝搬加算器6出力0001000.010110を3桁右シフトして小数点の左の桁から4ビットの1.000を出力する。この結果、演算結果は1.000×28となる。
【0062】
なお、上記実施例においては、乗算アレイとしてキャリー保存加算器のアレイを用い、最上位桁検出部は該乗算アレイの2項の演算出力であるキャリー部分と和の部分を入力として絶対値の0でない最上位桁を検出しているが、乗算アレイとして冗長2進加算器等のアレイを用い、該アレイの2項の演算出力を入力として絶対値の0でない最上位桁を検出する最上位桁検出部を実施例の場合と同様に構成することができることは云うまでもない。
【0063】
尚、図3の例のように、積より加数の方が大きい場合に、積より上位にはみ出した加数上位部分を最上位桁を動かさずに処理し、該はみ出した部分以外の加数と積との積和演算結果を正規化したものと最終的に加算を行って最終的な正規化した積和演算結果を得ている実施例においては、最上位検出部への入力を乗算アレイからの2つの項の代わりにキャリー伝搬加算部6からの正規化前の積和演算結果の仮数部を用いてもよい。
【0064】
次に、上記の本発明による積和演算器を用いたデータ処理装置の一例を図16を参照して説明する。
該データ処理装置は命令フェッチデコード部100、演算部200、メモリアクセス部300、メモリ400から成る。本発明に基づく積和演算器210は演算部200内にある。
【0065】
次に、図16の各部の構成及び動作を説明する。
命令フェッチデコード部100は、メモリアクセス部300に命令アドレス110を出力して命令フェッチ要求を行ってメモリ400から命令を読み出して該メモリアクセス部300を介して命令120を受取り、該命令をデコードして演算部200に制御情報130を出力する。通常は連続する命令アドレスに対して該命令フェッチ及びデコード処理を行い、演算部200が分岐アドレス140を出力して分岐要求を行った場合は、該処理を分岐アドレス140に対して行う。演算部200は命令フェッチデコード部100からの制御情報130に基づいて演算、データフェッチ及びストア等を行う。特に、演算が浮動少数積和演算の場合は本発明に基づく積和演算器210を用いて処理する。
また、データフェッチ又はストアを行う場合は、メモリアクセス部300にアドレス220を出力し、更にストア時にはデータ230も出力して、フェッチ又はストア要求を行い、フェッチ時には該メモリアクセス部300からデータ230を受取る。
メモリアクセス部300は、命令フェッチデコード部100からの命令フェッチ要求及び演算部200からのデータフェッチ又はストア要求に基づいて、メモリ400にアドレス310を出力し、更にストア時にはデータ320も出力してアクセスを行い、要求がフェッチの場合はメモリ400からフェッチしたデータ320を要求元に出力する。
メモリ400はメモリアクセス部300からアドレス310を受取り、更にストア時にはデータ320も受取って、フェッチ又はストア動作を行い、要求がフェッチの場合はデータ320をメモリアクセス部300に出力する。
【0066】
次に、積和演算器210による演算動作を説明する。
先ず、命令フェッチデコード部100は、上記のようにメモリアクセス部300に命令アドレス110を出力してメモリアクセス部300より命令120を受け取り、該命令をデコードして制御情報130を得る。制御情報130としてはオペランド、加算、乗算、浮動小数点演算等の演算に関する情報がある。積和演算器210は該制御情報に基づき、メモリ400から読み出したデータ(加数、乗数、被乗数)、または演算部200内のレジスタ212から読み出したデータの積和演算を上記各実施例のように行う。演算結果はレジスタ212またはメモリアクセス部300を介してメモリ400にストアされる。
【0067】
本実施例は、具体的にはメモリ400以外の部分を1つのチップに納めればいわゆるマイクロプロセッサであり、複数チップに納めてボードに実装すればプロセッサボードとなる。
本実施例は本発明に基づく積和演算器を用いたデータ処理装置の一例であるが、一般に、浮動小数積和演算器を使用するデータ処理装置であれば、本発明による積和演算器を適用することができる。
【0068】
【発明の効果】
本発明により、キャリー伝搬加算前の値からキャリー伝搬加算後の値の絶対値の0でない最上位桁の検出を行って、キャリー伝搬加算と最上位桁の検出を並列に実行することが可能となる。そして、キャリー伝搬加算と最上位桁の検出のうち、所要時間の短い方がもう一方の時間に隠れる。また、積よりも上位にはみ出した加数のインクリメントを他の部分の正規化終了までに完了すればよくなる。そして、下位からのキャリーが生成されてからインクリメントを完了するまでの時間と正規化の時間のうち、所要時間の短い方がもう一方の時間に隠れる。以上により、積和演算が高速化される。
【図面の簡単な説明】
【図1】本発明の実施例による積和演算器の構成を示すブロック図である。
【図2】図1の積和演算器によりある式の積和演算を行う場合の図1の各構成要素での処理の流れを示す動作説明のための図である。
【図3】図1の積和演算器により別の式の積和演算を行う場合の図1の各構成要素での処理の流れを示す動作説明のための図である。
【図4】図1の最上位桁検出部において、乗算アレイの出力である2項から、正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を求める処理の一例を示すフローチャートである。
【図5】桁合わせシフト数が−2以上の場合の、最上位桁検出部において、乗算アレイの出力である2項から、正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を誤差なしで求める処理を示すフローチャートである。
【図6】正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を1桁の誤差で求めるように図5の処理修正した処理を示すフローチャートである。
【図7】図6の処理を図1の積和演算結果の最上位桁検出部に適用可能に修正した処理を示すフローチャートである。
【図8】図7の処理を実現する図1の最上位桁検出部の構成例を示すブロック図である。
【図9】図8の検索回路におけるモードの例を示す図である。
【図10A】図8の検索回路における動作論理の例を示す図である。
【図10B】図8の検索回路における動作論理の例を示す図である。
【図11A】図8の最上位桁検出部の検索回路の別の構成例を示すブロック図である。
【図11B】図11Aの検索回路の第2段シフト制御回路の構成を示す図である。
【図12A】図11Aのモード先見及び第1段シフト制御回路の動作論理の例を示す図である。
【図12B】図11Aの最下位第1段シフト制御回路の動作論理の例を示す図である。
【図13】本発明の別実施例による積和演算器により積和演算を行う場合の各構成要素での処理の流れを示す動作説明のための図である。
【図14】本発明のさらに別の実施例による積和演算器の構成を示すブロック図である。
【図15】図14の積和演算器によりある式の積和演算を行う場合の図14の各構成要素での処理の流れを示す動作説明のための図である。
【図16】本発明による積和演算器を用いたデータ処理装置の一例を示すブロック図である。
【符号の説明】
1 桁合せシフト数指数生成部
2 加数桁合せ符号合せ部
3 加数下位スティッキービット生成部
4 乗算アレイ
5 最上位桁検出部
6 キャリー伝搬加算器
7 加数上位インクリメンタ
8 指数正規化部
9 スティッキービット生成部
10 正規化シフタ
11 正規化丸め部
12 指数補正部
Claims (13)
- 乗数と被乗数と加数との積和演算を行う積和演算器において、
前記乗数の指数部と前記被乗数の指数部と前記加数の指数部とに基づき、桁合わせシフト数及び正規化前の積和演算結果の指数を得る桁合わせシフト数生成部と、
前記加数の仮数部を前記桁合わせシフト数に基づいてシフトして出力する加数桁合わせ部と、
前記乗数の仮数部と前記被乗数の仮数部と前記加数桁合わせ部からの前記加数の仮数部とを入力してこれらの積和演算を行い2つの項を出力する積和演算アレイと、
前記積和演算アレイからの前記2つの項を入力して、それに基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する最上位桁検出部であり、前記2つの項の和が正か負かを決定する決定部と、前記和が正のとき前記2つの項に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する第1の検出部と、前記和が負のとき前記2つの項に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する第2の検出部と、上位から下位へ、前記和の符号を判定する正負判定モード、前記和が正のときの正数検索モード、前記和が負のときの負数検索モード、及び前記最上位桁を検出した後の検索終了モードのいずれのモードであるかを伝える信号を備え、0でない最上位桁は、該最上位桁の検出が前記第1の検出部と第2の検出部のいずれで行われても、最初の検出により最終的に決定する最上位桁検出部と、
前記積和演算アレイからの前記2つの項を入力して、前記最上位桁検出部の最上位桁検出動作と並列に、前記2つの項に基づきキャリー伝搬加算を行い正規化前の積和演算結果の仮数部を出力するキャリー伝搬加算部と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記キャリー伝搬加算部からの前記正規化前の積和演算結果の仮数部の正規化を行い、正規化された積和演算結果の仮数部を得る正規化部と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記桁合わせシフト数生成部からの前記正規化前の積和演算結果の指数の正規化を行い、正規化された積和演算結果の指数を得る指数正規化部とを備えることを特徴とする積和演算器。 - 請求項1記載の積和演算器において、
前記積和演算アレイがキャリー保存加算器である場合、前記積和演算アレイからの前記2つの項はキャリー部分と和の部分であることを特徴とする積和演算器。 - 請求項1記載の積和演算器において、
前記積和演算アレイが冗長2進加算器である場合、前記積和演算アレイからの前記2つの項は正数部分と負数部分であることを特徴とする積和演算器。 - 請求項1記載の積和演算器において、
前記最上位桁検出部は、
前記最上位桁が必ず、桁合せの結果積より上位に位置する部分である加数上位にあるか、必ずしも加数上位にないかを判定する手段と、
前記乗数と前記被乗数の積の符号と前記加数の符号が同符号か異符号かを判定する手段と、
前記最上位桁が必ず加数上位にあると判定された場合に、前記積の符号と前記加数の符号が同符号か異符号かに従って、前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を、それぞれ加数上位の最上位桁、前記加数上位の最上位桁の1桁下位と判定する手段とを有することを特徴とする積和演算器。 - 請求項1記載の積和演算器において、
前記最上位桁検出部は1桁の誤差で最上位桁を検出し、
前記積和演算器は更に、前記最上位桁検出部で検出された前記最上位桁に基づき、前記正規化部からの前記正規化された積和演算結果の仮数部に対して1桁の桁シフトを選択的に行う手段を備えることを特徴とする積和演算器。 - 請求項5記載の積和演算器において、
前記最上位桁検出部は
前記最上位桁が必ず、桁合せの結果積より上位に位置する部分である加数上位にあるか、必ずしも加数上位にないかを判定する手段と、
前記乗数と前記被乗数の積の符号と前記加数の符号が同符号か異符号かを判定する手段と、
前記最上位桁が必ずしも加数上位にないと判定された場合に、前記積の符号と前記加数の符号が同符号か異符号かに従って、前記乗算アレイからの前記2つの項の対応する桁のビット対を順次下位に向かって判別して、前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する手段とを有することを特徴とする積和演算器。 - データ処理装置において、
演算に必要な情報をストアするメモリと、
演算情報に基づき乗数、被乗数、加数との積和演算を行う積和演算器を有する演算部と、
前記メモリ内の前記情報を読み出してデコードし、デコード結果の演算情報を前記演算部に与える命令フェッチ部とを備え、
前記積和演算器は、
前記乗数の指数部と前記被乗数の指数部と前記加数の指数部とに基づき、桁合わせシフト数及び正規化前の積和演算結果の指数を得る桁合わせシフト数生成部と、
前記加数の仮数部を前記桁合わせシフト数に基づいてシフトして出力する加数桁合わせ部と、
前記乗数の仮数部と前記被乗数の仮数部と前記加数桁合わせ部からの前記加数の仮数部とを入力してこれらの積和演算を行い2つの項を出力する積和演算アレイと、
前記積和演算アレイからの前記2つの項を入力して、それに基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する最上位桁検出部であり、前記2つの項の和が正か負かを決定する決定部と、前記和が正のとき前記2つの項に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する第1の検出部と、前記和が負のとき前記2つの項に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する第2の検出部と、上位から下位へ、前記和の符号を判定する正負判定モード、前記和が正のときの正数検索モード、前記和が負のときの負数検索モード、及び前記最上位桁を検出した後の検索終了モードのいずれのモードであるかを伝える信号を備え、0でない最上位桁は、該最上位桁の検出が前記第1の検出部と第2の検出部のいずれで行われても、最初の検出により最終的に決定する最上位桁検出部と、
前記積和演算アレイからの前記2つの項を入力して、前記最上位桁検出部の最上位桁検出動作と並列に、前記2つの項に基づきキャリー伝搬加算を行い正規化前の積和演算結果の仮数部を出力するキャリー伝搬加算部と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記キャリー伝搬加算部からの前記正規化前の積和演算結果の仮数部の正規化を行い、正規化された積和演算結果の仮数部を得る正規化部と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記桁合わせシフト数生成部からの前記正規化前の積和演算結果の指数の正規化を行い、正規化された積和演算結果の指数を得る指数正規化部とを備えることを特徴とするデータ処理装置。 - 乗数と被乗数と加数との積和演算を行う積和演算器において、
前記乗数の指数部と前記被乗数の指数部と前記加数の指数部とに基づき、桁合わせシフト数及び正規化前の積和演算結果の指数を得る桁合わせシフト数生成部と、
該桁合わせシフト数に基づき前記加数の仮数部のなかで積に対応する桁より上位にはみ出した部分からなる前記加数の第1の仮数部からなる前記加数の第1の仮数部を出力すると共に、前記加数の仮数部のうちで前記第1の仮数部を除いた部分からなる前記加数の第2の仮数部を前記桁合わせシフト数に基づいてシフトして出力する加数桁合わせ部と、
前記乗数の仮数部と前記被乗数の仮数部と前記加数桁合わせ部からの前記加数の第2の仮数部とを入力してこれらの積和演算を行い2つの項を出力する積和演算アレイと、
前記積和演算アレイからの前記2つの項を入力して、前記2つの項に基づきキャリー伝搬加算を行い正規化前の積和演算結果の下位側の仮数部を出力するキャリー伝搬加算部と、
前記積和演算アレイからの前記2つの項、積と加数部が異符号であることを示す乗数と被乗数と加数の符号部の排他的論理和との一方、及び前記桁合わせシフト数を入力して、これらに基づき前記正規化前の積和演算結果の仮数部の絶対値の0でない最上位桁を検出する最上位桁検出部であり、前記2つの項の和または前記下位側の仮数部と桁合わせシフト数の和が正か負かを決定する決定部と、前記和が正のとき、前記2つの項または前記下位側の仮数部と桁合わせシフト数に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する第1の検出部と、前記和が負のとき、前記2つの項または前記下位側の仮数部と桁合わせシフト数に基づき前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する第2の検出部と、上位から下位へ、前記和の符号を判定する正負判定モード、前記和が正のときの正数検索モード、前記和が負のときの負数検索モード、及び前記最上位桁を検出した後の検索終了モードのいずれのモードであるかを伝える信号を備え、0でない最上位桁は、該最上位桁の検出が前記第1の検出部と第2の検出部のいずれで行われても、最初の検出により最終的に決定する最上位桁検出部と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記キャリー伝搬加算部からの前記正規化前の積和演算結果の下位側の仮数部の正規化を行い、正規化された積和演算結果の下位側の仮数部を得る正規化部と、
前記加数桁合わせ部からの前記加数の第1の仮数部を前記キャリー伝搬加算部からのキャリーに基づいて選択的にインクリメントする加数上位インクリメント部と、
前記正規化部から前記正規化された積和演算結果の下位側の仮数部と、前記加数上位インクリメント部からの前記インクリメントされた前記加数の第1の仮数部との論理和をとり正規化された積和演算結果の仮数部を得る手段と、
前記最上位桁検出部で検出された前記最上位桁に基づき、前記桁合わせシフト数生成部からの前記正規化前の積和演算結果の指数の正規化を行い、正規化された積和演算結果の指数を得る指数正規化部とを備えることを特徴とする積和演算器。 - 請求項8記載の積和演算器において、
前記積和演算アレイがキャリー保存加算器である場合、前記積和演算アレイからの前記2つの項はキャリー部分と和の部分であることを特徴とする積和演算器。 - 請求項8記載の積和演算器において、
前記積和演算アレイが冗長2進加算器である場合、前記積和演算アレイからの前記2つの項は正数部分と負数部分であることを特徴とする積和演算器。 - 請求項8記載の積和演算器において、
前記最上位桁検出部は、
前記最上位桁が必ず加数上位にあるか、必ずしも加数上位にないかを判定する手段と、
前記乗数と前記被乗数の積の符号と前記加数の符号が同符号か異符号かを判定する手段と、
前記最上位桁が必ず加数上位にあると判定された場合に、前記積の符号と前記加数の符号が同符号か異符号かに従って、前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を、それぞれ前記加数上位の最上位桁、前記加数上位の最上位桁の1桁下位と判定する手段とを有することを特徴とする積和演算器。 - 請求項8記載の積和演算器において、
前記最上位桁検出部は1桁の誤差で最上位桁を検出し、
前記積和演算器は更に、前記最上位桁検出部で検出された前記最上位桁に基づき、前記正規化部からの前記正規化された積和演算結果の仮数部に対して1桁の桁シフトを選択的に行う手段を備えることを特徴とする積和演算器。 - 請求項12記載の積和演算器において、
前記最上位桁検出部は、
前記最上位桁が必ず加数上位にあるか、必ずしも加数上位にないかを判定する手段と、
前記乗数と前記被乗数の積の符号と前記加数の符号が同符号か異符号かを判定する手段と、
前記最上位桁が必ずしも加数上位にないと判定された場合に、前記積の符号と前記加数の符号が同符号か異符号かに従って、前記乗算アレイからの前記2つの項の対応する桁のビット対を順次下位に向かって判別して、前記正規化前の積和演算結果の仮数部の絶対値のうち0でない最上位桁を検出する手段とを有することを特徴とする積和演算器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32391095A JP3950920B2 (ja) | 1994-11-17 | 1995-11-17 | 積和演算器及びデータ処理装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30820094 | 1994-11-17 | ||
JP6-308200 | 1994-11-17 | ||
JP32391095A JP3950920B2 (ja) | 1994-11-17 | 1995-11-17 | 積和演算器及びデータ処理装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006275032A Division JP2007073061A (ja) | 1994-11-17 | 2006-10-06 | データ処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08212192A JPH08212192A (ja) | 1996-08-20 |
JP3950920B2 true JP3950920B2 (ja) | 2007-08-01 |
Family
ID=26565450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP32391095A Expired - Fee Related JP3950920B2 (ja) | 1994-11-17 | 1995-11-17 | 積和演算器及びデータ処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3950920B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4571903B2 (ja) * | 2005-12-02 | 2010-10-27 | 富士通株式会社 | 演算処理装置,情報処理装置,及び演算処理方法 |
DE102018209901A1 (de) * | 2018-06-19 | 2019-12-19 | Robert Bosch Gmbh | Recheneinheit, Verfahren und Computerprogramm zum Multiplizieren zumindest zweier Multiplikanden |
-
1995
- 1995-11-17 JP JP32391095A patent/JP3950920B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH08212192A (ja) | 1996-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR0185254B1 (ko) | 곱합연산기 및 그것을 사용한 데이타처리장치 | |
US9703531B2 (en) | Multiplication of first and second operands using redundant representation | |
US5404324A (en) | Methods and apparatus for performing division and square root computations in a computer | |
US8046399B1 (en) | Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module | |
JPH09269891A (ja) | 部分積加算方法および装置、浮動小数点乗算方法および装置、浮動小数点積和演算方法および装置 | |
JP3418460B2 (ja) | 倍精度除算回路および方法 | |
US9720646B2 (en) | Redundant representation of numeric value using overlap bits | |
US20070050434A1 (en) | Data processing apparatus and method for normalizing a data value | |
JPH09212337A (ja) | 浮動小数点演算処理装置 | |
GB2549153B (en) | Apparatus and method for supporting a conversion instruction | |
US5867413A (en) | Fast method of floating-point multiplication and accumulation | |
JP3950920B2 (ja) | 積和演算器及びデータ処理装置 | |
JPH04355827A (ja) | 開平演算装置 | |
US4979141A (en) | Technique for providing a sign/magnitude subtraction operation in a floating point computation unit | |
JP2007073061A (ja) | データ処理装置 | |
JP3257278B2 (ja) | 冗長なシフト数予測とシフト誤り補正を用いた正規化装置 | |
JP2856792B2 (ja) | 浮動小数点数演算装置 | |
JPH01282633A (ja) | 非正規化数の処理方式 | |
JP3233432B2 (ja) | 乗算器 | |
JP3522387B2 (ja) | パイプライン演算装置 | |
JPH05204606A (ja) | 浮動小数点演算方式および装置 | |
JPH0361224B2 (ja) | ||
JPH0580973A (ja) | 正規化丸め装置 | |
Venkatachalapathy | Signed Digit Representation of Numbers | |
JPH0325526A (ja) | 浮動小数点丸め方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040217 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20040218 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040318 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040426 |
|
A072 | Dismissal of procedure |
Free format text: JAPANESE INTERMEDIATE CODE: A073 Effective date: 20041116 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20050622 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050829 |
|
A072 | Dismissal of procedure |
Free format text: JAPANESE INTERMEDIATE CODE: A072 Effective date: 20051108 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051206 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060206 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060808 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061005 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20061201 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070228 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110511 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110511 Year of fee payment: 4 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110511 Year of fee payment: 4 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120511 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120511 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130511 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |