JP2013210838A - 演算回路及び演算方法 - Google Patents

演算回路及び演算方法 Download PDF

Info

Publication number
JP2013210838A
JP2013210838A JP2012080529A JP2012080529A JP2013210838A JP 2013210838 A JP2013210838 A JP 2013210838A JP 2012080529 A JP2012080529 A JP 2012080529A JP 2012080529 A JP2012080529 A JP 2012080529A JP 2013210838 A JP2013210838 A JP 2013210838A
Authority
JP
Japan
Prior art keywords
circuit
zero
bit
point number
lzc
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.)
Pending
Application number
JP2012080529A
Other languages
English (en)
Inventor
Kensuke Shinomiya
研介 篠宮
Kenichi Kitamura
健一 北村
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 JP2012080529A priority Critical patent/JP2013210838A/ja
Priority to US13/736,343 priority patent/US20130262546A1/en
Publication of JP2013210838A publication Critical patent/JP2013210838A/ja
Pending legal-status Critical Current

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
    • 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/74Selecting or encoding within a word the position of one or more bits having a specified value, e.g. most or least significant one or zero detection, priority encoders
    • 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/491Computations with decimal numbers radix 12 or 20.
    • 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/491Computations with decimal numbers radix 12 or 20.
    • G06F7/492Computations with decimal numbers radix 12 or 20. using a binary weighted representation within each denomination
    • G06F7/493Computations with decimal numbers radix 12 or 20. using a binary weighted representation within each denomination the representation being the natural binary coded representation, i.e. 8421-code

Landscapes

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

Abstract

【課題】エンコードされた10進浮動小数点数に対して高速に実行可能なLZC処理を提供する。
【解決手段】演算回路は、エンコードされた状態の10進浮動小数点数を保持する保持回路と、保持回路に保持される10進浮動小数点数をデコードして、10進浮動小数点数のビットパターンからゼロの配列パターンを検出する検出回路と、検出回路の検出結果に基づいて、10進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する先行ゼロ計数処理回路とを含む。
【選択図】図9

Description

本発明は、演算回路及び演算方法に関する。
先行ゼロ計数(Leading Zero Count)処理は、浮動小数点表示された数値の仮数部における先行ゼロの数、即ち最上位ビット(MSB:Most Significant Bit)から連続するゼロの数を計数する演算である。このLZC処理は、桁合わせのためのビットシフト、データ列の正規化、除算における商の桁合わせ等の種々の処理のために必要な前処理として実行される。LZC回路は多くのマイクロプロセッサでハードウェア実装されている。
コンピュータシステムにおいて、HPC(High Performance Computing)等の科学技術計算には2進浮動小数点数が一般に用いられるが、財務計算等の事務系の計算には各桁を10進表記した10進浮動小数点数を用いることが多い。現行で用いられている10進浮動小数点数のデータフォーマットとしては、64ビットデータとして、IEEE754−2008のDPD(Densely Packed Decimal)形式10進浮動小数点数、及び、Oracle(登録商標)のOracleNUMBER形式10進浮動小数点数がある。これらのデータフォーマットでは、仮数部がエンコードされた状態でデータがメモリに格納されている。
エンコードされたデータをLZC処理したい場合、データをデコードしてからLZC処理を実行している。この場合において、デコード処理及びLZC処理は共に重い処理であるため、近年要求されるデータ処理速度を達成することが困難になりつつある。
特開2011−86133号公報
1つの側面では、本発明は、エンコードされた10進浮動小数点数に対して高速に実行可能なLZC処理を提供することを目的とする。
演算回路は、エンコードされた状態の10進浮動小数点数を保持する保持回路と、前記保持回路に保持される前記10進浮動小数点数をデコードして、前記10進浮動小数点数のビットパターンからゼロの配列パターンを検出する検出回路と、前記検出回路の検出結果に基づいて、前記10進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する先行ゼロ計数処理回路とを含むことを特徴とする。
演算方法は、エンコードされた状態の10進浮動小数点数をデコードして、前記10進浮動小数点数のビットパターンからゼロの配列パターンを検出し、前記ゼロの配列パターンの検出結果に基づいて前記10進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する各段階を含むことを特徴とする。
少なくとも1つの実施例によれば、エンコードされた10進浮動小数点数に対して高速に実行可能なLZC処理を提供することができる。
DPD形式10進浮動小数点数のデータフォーマットを示す図である。 DPD形式10進浮動小数点数の仮数部に対するデコード表である。 OracleNUMBER形式10進浮動小数点数のデータフォーマットを示す図である。 OracleNUMBER形式10進浮動小数点数の仮数部に対するデコード表である。 DPD形式10進浮動小数点数に対して通常のLZC処理を実行する際の処理の流れを示す図である。 OracleNUMBER形式10進浮動小数点数に対して通常のLZC処理を実行する際の処理の流れを示す図である。 図5におけるデコード後のLZC処理の部分をより詳細に説明するための図である。 図5や図7のようにデコード後にLZC処理を実行する回路に比較して高速にLZC処理を実行可能な回路の動作を説明するための図である。 DPD形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。 ゼロ検出回路の論理動作を規定する表である。 パターン検出回路の構成の一例を示す図である。 LZC処理回路の構成の一例を示す図である。 OracleNUMBER形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。 ゼロ検出回路の論理動作を規定する表である。 パターン検出回路の構成の一例を示す図である。 DPD形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。 部分LZC回路の論理動作を規定する表である。 部分LZC回路の構成の一例を示す図である。 部分LZC回路の構成の一例を示す図である。 OracleNUMBER形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。 部分LZC回路の論理動作を規定する表である。 DPD形式10進浮動小数点数の最上位桁をデコードする回路の回路構成を示す図である。 DPD形式10進浮動小数点数の1つのdecletをデコードする回路の回路構成を示す図である。 最上位桁の0を検出する回路の構成を示す図である。 1つのdecletのゼロの配列パターンを検出する回路の構成を示す図である。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
図1は、DPD形式10進浮動小数点数のデータフォーマットを示す図である。DPD形式10進浮動小数点数は、符号フィールド(S)、コンビネーションフィールド(G)、後続仮数部フィールド(T)を含む。符号フィールドは1ビットの長さであり、当該浮動小数点数の正負を示す符号情報を格納する。符号フィールドの0は正数、符号フィールドの1は負数を示す。コンビネーションフィールド(G)は13ビットの長さであり、指数と仮数の最上位桁であるMSD(Most Significant Digit)の情報とを格納する。仮数の残りの部分は後続仮数部フィールド(T)に格納されている。後続仮数部フィールド(T)は50ビットの長さである。なお後続仮数部フィールド(T)は、各々が10ビット長である複数のブロック(1declet)にブロック分けされている。ここでdecletというのは、IEEE754−2008におけるブロックの正式名称である。1decletには3桁の10進数の情報が格納されている。
図2は、DPD形式10進浮動小数点数の仮数部に対するデコード表である。エンコードされているDPD形式10進浮動小数点数から、各桁の10進数を求めるためには、図2に示されるデコード表に基づいてデコード処理を行えばよい。
具体的には、コンビネーションフィールド(G)をデコードする場合には、図2(a)のデコード表を用いればよい。図2(a)のデコード表において、G<12:8>は、コンビネーションフィールド(G)の第8ビットから第12ビットの5ビット部分を示す。例えばG<12:8>が"10XXX"(Xはドントケア)である場合、仮数部の最上位桁(MSD)の3つのビットGU<2>、GU<1>、GU<0>に基づいて、4×GU<2>+2×GU<1>+GU<0>により最上位桁の10進数が計算される。
また後続仮数部フィールド(T)の各decletをデコードする場合、図2(b)のデコード表を用いればよい。図2(b)のデコード表において、b<9:0>は、着目decletの第0ビットから第9ビットの10ビットのデータである。b<x>は、第xビットの3ビットのデータである。例えばb<9:0>が"XXX01X111X"(Xはドントケア)である場合、100の位(1decletの3桁の10進数の最上桁)の値は、8+b<7>により計算される。また10の位の値は、4×b<9>+2×b<8>+b<4>により計算される。更に1の位の値は、8+b<0>により計算される。
図3は、OracleNUMBER形式10進浮動小数点数のデータフォーマットを示す図である。OracleNUMBER形式10進浮動小数点数は、符号部(S)、指数部(exp)、及び仮数部(significand)を含む。符号部は1ビットの長さであり、当該浮動小数点数の正負を示す符号情報を格納する。符号部の0は正数、符号部の1は負数を示す。指数部には指数の情報が格納されており、仮数部には仮数の情報が格納されている。この仮数部は8ビット単位でブロック分けされている。1つのブロックには2桁の10進数の情報が格納されている。
図4は、OracleNUMBER形式10進浮動小数点数の仮数部に対するデコード表である。エンコードされているOracleNUMBER10進浮動小数点数から、各桁の10進数を求めるためには、図4に示されるデコード表に基づいてデコード処理を行えばよい。図4のデコード表において、digit<7:0>は、着目ブロックの第0ビットから第7ビットの8ビットのデータである。
具体的には、符号部(S)が0であり負数を示す場合には、digit<7:0>の値をaとすると、101−aの値が当該ブロックの2桁の10進数となる。また符号部(S)が1であり正数を示す場合には、digit<7:0>の値をaとすると、a−1の値が当該ブロックの2桁の10進数となる。
以下の説明では、DPD形式の10進浮動小数点数及びOracleNUMBER形式の10進浮動小数点数を例として、LZC処理の実施形態について説明するが、この実施形態は限定を意図するものではない。
図5は、DPD形式10進浮動小数点数に対して通常のLZC処理を実行する際の処理の流れを示す図である。まずエンコードされたDPD形式10進浮動小数点数10が与えられる。このDPD形式10進浮動小数点数10のコンビネーションフィールド(G)及び後続仮数部フィールド(T)をデコードし、デコードされた10進数データ11が得られる。前述の説明通り、コンビネーションフィールド(G)からは最上位桁(MSD)の10進数がデコードされ、後続仮数部フィールド(T)の各decletからはそれぞれ3桁の10進数がデコードされる。各桁の10進数を10進表示すると"0000809・・・"となる。この10進表示された数値の先頭からゼロを計数すると、0の数は4であるから、4を表わす2進数0100がLZC処理の結果12として得られる。
図6は、OracleNUMBER形式10進浮動小数点数に対して通常のLZC処理を実行する際の処理の流れを示す図である。まずエンコードされたOracleNUMBER形式10進浮動小数点数13が与えられる。このOracleNUMBER形式10進浮動小数点数13の仮数部(significand)をデコードし、デコードされた10進数データ14が得られる。前述の説明通り、仮数部の各ブロックからはそれぞれ2桁の10進数がデコードされる。各桁の10進数を10進表示すると"0009・・・"となる。この10進表示された数値の先頭からゼロを計数すると、0の数は3であるから、3を表わす2進数0011がLZC処理の結果15として得られる。
図7は、図5におけるデコード後のLZC処理の部分をより詳細に説明するための図である。図7に示すように10進数"0000809・・・"が得られると、まず部分LZC(separated LZC)処理として、各decletの3桁の10進数に対して、3桁が全部0であるのか、先頭2桁が0であるのか、先頭1桁が0であるのか、を示すフラグを生成する。これらのフラグは、ゼロの配列パターンを示すフラグである。Equal0XXは、着目decletの3桁の10進数が"0XX"(Xはドントケア)のパターンに一致するときに1になり(図7では○)、一致しないときに0になる(図7では×)。同様にEqual00Xは、着目decletの3桁の10進数が"00X"(Xはドントケア)のパターンに一致するときに1になり(図7では○)、一致しないときに0になる(図7では×)。更にEqual000は、着目decletの3桁の10進数が"000"のパターンに一致するときに1になり(図7では○)、一致しないときに0になる(図7では×)。こうして部分LZC処理により得られたフラグに基づいて、先行ゼロの数が4であることを示すLZC結果12が得られる。なお最上位桁(MSD)については、Equal_0は、当該桁が0に等しいときに1になり、一致しないときに0になる。
図8は、図5や図7のようにデコード後にLZC処理を実行する回路に比較して高速にLZC処理を実行可能な回路の動作を説明するための図である。図8に示すLZC処理では、図5や図7に示すデコード処理を実行することなく、即ち、デコード後の10進数"0000809・・・"を得ることなく、DPD形式10進浮動小数点数10から直接に部分LZC処理を実行し、その部分LZC処理の結果に基づいてLZC結果12を得ている。ここで、DPD形式10進浮動小数点数10から直接に部分LZC処理を実行するとは、DPD形式10進浮動小数点数10のビットパターンそのものに基づいて直接に各桁のゼロの有無を検出する処理を含むことを意味してよい。即ち、図2に示すような規則に従って各桁の10進数の値を求めることはせず、DPD形式10進浮動小数点数10のビットパターンを入力として、直接に各桁の10進数がゼロであるか否かを検出してよい。ここで直接に各桁のゼロの有無を検出するとは、DPD形式10進浮動小数点数10のビットパターンを入力として、複数のビットの値の論理積演算であるAND演算のみを行って、各桁についてゼロの存在の有無を示すビット値を得ることを意味してよい。
図9は、DPD形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。図9に示す演算回路は、ラッチ回路20、ゼロ検出回路21−0乃至21−5、パターン検出回路22−1乃至22−5、LZC処理回路23、及びラッチ回路24を含む。ゼロ検出回路21−0乃至21−5及びパターン検出回路22−1乃至22−5が、部分LZC処理を実行する回路部分である。
ラッチ回路は、エンコードされた状態のDPD形式10進浮動小数点数を格納する。ゼロ検出回路21−0乃至21−5は、ラッチ回路20に格納されたDPD形式10進浮動小数点数の対応するコンビネーションフィールド又はdecletに基づいて、直接に各桁のゼロの有無を検出する。具体的には、ゼロ検出回路21−0が、コンビネーションフィールドに対して、最上位桁(MSD)のゼロの有無を検出する。また例えばゼロ検出回路21−1が、後続仮数部フィールドの第40ビット乃至第49ビットである1つのdecletに対して、その3つの桁におけるゼロの有無を検出する。
パターン検出回路22−1乃至22−5はそれぞれ、ゼロ検出回路21−1乃至21−5のゼロ検出結果を入力とし、ゼロ検出結果に応じて0の配列パターンを検出する。具体的には、パターン検出回路22−1乃至22−5の各々は、対応する3桁の10進数に対して、3桁が全部0であるのか、先頭2桁が0であるのか、先頭1桁が0であるのか、を示すフラグを生成する。LZC処理回路23は、ゼロ検出回路21−0の出力及びパターン検出回路22−1乃至22−5の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、ラッチ回路24に格納される。
図10は、ゼロ検出回路21−0乃至21−5の論理動作を規定する表である。エンコードされているDPD形式10進浮動小数点数から、各桁におけるゼロの有無を求めるためには、図10に示される表に基づいて論理演算を行えばよい。
具体的には、コンビネーションフィールド(G)に対して最上位桁(MSD)における0の有無を検出する場合には、図10(a)の表を用いればよい。図10(a)の表において、G<12:8>は、コンビネーションフィールド(G)の第8ビットから第12ビットの5ビット部分を示す。G<12:8>が"10XXX"(Xはドントケア)又は"0XXXX"(Xはドントケア)であり、且つ、仮数部の最上位桁の3つのビットGU<2:0>が全て0、即ち"000"である場合、最上位桁が0であることが分かる。即ち、この図10(a)の表に示す条件が満たされている場合、ゼロ検出回路21−0は、最上位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、ゼロ検出回路21−0は、最上位桁にゼロが無いことを示すデータを出力する。
後続仮数部フィールド(T)の各decletに対して各桁における0の有無を検出する場合、図10(b)の表を用いればよい。図10(b)の表において、b<9:0>は、着目decletの第0ビットから第9ビットの10ビットのデータである。b<x:y>は、第xビットから第yビットまでのデータである。例えばb<9:0>が"XXXXXX101X"(Xはドントケア)である場合、b<9:7>の3ビットが全て0、即ち"000"である場合、100の位(1decletの3桁の10進数の最上位桁)の値が0であることが分かる。即ち、ゼロ検出回路21−1乃至21−5の任意の1つに対して、この条件が満たされている場合、このゼロ検出回路は、最上位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、当該ゼロ検出回路は、最上位桁にゼロが無いことを示すデータを出力する。また同様に、b<9:0>が"XXXXXX101X"(Xはドントケア)である場合、b<9,8,4>(即ち第9ビット、第8ビット、第4ビット)の3ビットが全て0、即ち"000"である場合、1の位の値が0であることが分かる。即ち、ゼロ検出回路21−1乃至21−5の任意の1つに対して、この条件が満たされている場合、このゼロ検出回路は、最下位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、当該ゼロ検出回路は、最下位桁にゼロが無いことを示すデータを出力する。なお表中にエントリが無い部分については、当該部分に対応する桁については、ゼロが無いことを示すデータが出力される。
図11は、パターン検出回路の構成の一例を示す図である。図9に示すパターン検出回路22−1乃至22−5の各々は、図10に示す回路構成を有していてよい。図11に示す回路は、AND回路25、AND回路26、及びバッファ回路27を含む。入力データの3ビットは、図面左から順番に100の桁のゼロの有無を示すビット、10の桁のゼロの有無を示すビット、及び1の桁のゼロの有無を示すビットである。各ビットは、ゼロが有る場合に1となり、ゼロが無い場合に0となる。AND回路25は、3つの桁全部が0であるときに1を出力し、それ以外の場合に0を出力する。AND回路26は、3つの桁の上位2桁が全部0であるときに1を出力し、それ以外の場合に0を出力する。バッファ回路27は、3つの桁の最上位桁が0であるときに1を出力し、それ以外の場合に0を出力する。
図12は、LZC処理回路23の構成の一例を示す図である。図9に示す演算回路では、全部で16桁を有する10進数を処理対象としている。しかしながら、16桁の全てに対して先行ゼロ計数結果を計算する論理回路は、説明が複雑となるので、図12では説明を容易にするために先頭の4桁のみを考慮対象とした回路を示してある。この回路は、ゼロ検出回路21−0及びパターン検出回路22−1の出力に基づいて、先行ゼロ数が0から3である範囲で先行ゼロ計数値を計算することができる。16桁全体に対して先行ゼロを計数する回路についても、同様の考え方で、論理回路を構成すればよい。
図12に示す回路は、AND回路30乃至33及び論理和演算を行うOR回路34を含む。入力ビットは全部で4ビットである。ゼロ検出回路21−0から、最上位桁(MSD)のゼロの有無を示す1つのビット(MSD equal 0)が入力される。またパターン検出回路22−1から、3桁のゼロの配列に関する3つのビットが入力される。これら3つのビットは、3桁全部が0のとき1となるビット(2−0th equal 000)、上位2桁全部が0のとき1となるビット(2−0th equal 00X)、最上位桁が0のときに1となるビット(2−0th equal 0XX)である。
出力(LZC RESULT<2:0>)は3ビットのデータであり、先行ゼロの数を2進表現したものとなる。AND回路30の出力ビットが2の位である最上位ビット、AND回路31の出力ビットが2の位であるビット、OR回路34の出力ビットが2の位である最下位ビットである。例えば、3桁全部が0のとき1となるビット(2−0th equal 000)が0、上位2桁全部が0のとき1となるビット(2−0th equal 00X)が0、最上位桁が0のときに1となるビット(2−0th equal 0XX)が1であるとする。また最上位桁のゼロの有無を示す1つのビット(MSD equal 0)が1であり、最上位桁にゼロが有ることを示しているとする。この条件は、先行ゼロの数が2個の場合、即ち、MSDが0でありそれに続く3桁が"010"である場合に相当する。この場合、出力は"010"即ち2となり、先行ゼロの数が2個であることに一致する。
図13は、OracleNUMBER形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。図13に示す演算回路は、ラッチ回路40、ゼロ検出回路41−1乃至41−7、パターン検出回路42−1乃至42−7、LZC処理回路43、ラッチ回路44、セレクタ45、及び部分LZC&LZC回路46を含む。ゼロ検出回路41−1乃至41−7及びパターン検出回路42−1乃至42−7が、部分LZC処理を実行する回路部分である。
なおゼロ検出回路41−1乃至41−7、パターン検出回路42−1乃至42−7、及びLZC処理回路43は、例えば、符号部(S)が正である場合の先行ゼロを計数する回路部分である。また部分LZC&LZC回路46が、例えば符号部(S)が負である場合の先行ゼロを計数する回路部分である。部分LZC&LZC回路46は、符号部(S)が正である場合の先行ゼロを計数する回路部分と同様のブロック構成を有してよい。即ち、部分LZC&LZC回路46は、複数のゼロ検出回路、複数のパターン検出回路、及びLZC処理回路を含んでよい。但し、符号部(S)が正の場合と負の場合とでは、ゼロ検出回路の論理構成が互いに異なる。
符号部(S)が正である場合の計算値(LZC処理回路43の出力)と符号部(S)が負である場合の計算値(部分LZC&LZC回路46の出力)とが、セレクタ45に印加される。セレクタ45は、符号部(S)の値を選択信号として用いて、選択動作を実行する。この選択動作により、符号部(S)が正である場合にはLZC処理回路43の出力がラッチ回路44に格納され、符号部(S)が負である場合には部分LZC&LZC回路46の出力がラッチ回路44に格納される。
ラッチ回路は、エンコードされた状態のOracleNUMBER形式10進浮動小数点数を格納する。ゼロ検出回路41−1乃至41−7は、ラッチ回路40に格納されたOracleNUMBER形式10進浮動小数点数の対応するブロックのビットパターンそのものに基づいて、直接に各桁のゼロの有無を検出する。即ち、図4に示すような規則に従って各桁の10進数の値を求めることはせず、OracleNUMBER形式10進浮動小数点数のビットパターンを入力として、直接に各桁の10進数がゼロであるか否かを検出する。ここで直接に各桁のゼロの有無を検出するとは、10進浮動小数点数の8ビットのビットパターンを入力として、当該ビットパターンが各桁の0値に該当する値の範囲にあるか否かの判断に基づき、各桁についてゼロの存在の有無を示すビット値を得ることを意味してよい。例えばゼロ検出回路41−1が、仮数部の第48ビット乃至第55ビットである1つのブロックに対して、その2つの桁におけるゼロの有無を検出する。
パターン検出回路42−1乃至42−7はそれぞれ、ゼロ検出回路41−1乃至41−7のゼロ検出結果を入力とし、ゼロ検出結果に応じて0の配列パターンを検出する。具体的には、パターン検出回路42−1乃至42−7の各々は、対応する2桁の10進数に対して、2桁が全部0であるのか、先頭1桁が0であるのか、を示すフラグを生成する。LZC処理回路43は、パターン検出回路42−1乃至42−7の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、セレクタ45を介して、ラッチ回路44に格納される。
図14は、ゼロ検出回路41−1乃至41−7の論理動作を規定する表である。エンコードされているOracleNUMBER形式10進浮動小数点数から、各桁におけるゼロの有無を求めるためには、図14に示される表に基づいて論理演算を行えばよい。図14の表において、digit<7:0>は、着目ブロックの第0ビットから第7ビットの8ビットのデータである。
例えば符号部(S)が0であり負数を示す場合には、digit<7:0>の示す数値が0〜1の範囲(両端を含む)、92〜100の範囲(両端を含む)、又は、101〜255の範囲(両端を含む)にあれば、10の位の10進数が0であることが分かる。また同様に符号部(S)が0であり負数を示す場合、digit<7:0>の示す数値が0、"X1"(Xはドントケア)、又は102〜255の範囲(両端を含む)であれば、1の位の10進数が0であることが分かる。符号部(S)が1であり正数を示す場合についても、図14の表に示すとおりである。
ゼロ検出回路41−1乃至41−7の任意の1つに対して、例えば最下位桁にゼロが有ることの条件が満たされている場合、このゼロ検出回路は、最下位桁にゼロが有ることを示すデータを出力する。最下位桁にゼロが有ることの条件が満たされていない場合、当該ゼロ検出回路は、最下位桁にゼロが無いことを示すデータを出力する。
図15は、パターン検出回路の構成の一例を示す図である。図13に示すパターン検出回路42−1乃至42−7の各々は、図15に示す回路構成を有していてよい。図11に示す回路は、AND回路47及びバッファ回路48を含む。入力データの2ビットは、図面左から順番に10の桁のゼロの有無を示すビット及び1の桁のゼロの有無を示すビットである。各ビットは、ゼロが有る場合に1となり、ゼロが無い場合に0となる。AND回路47は、2つの桁が両方共に0であるときに1を出力し、それ以外の場合に0を出力する。バッファ回路48は、2つの桁の最上位桁が0であるときに1を出力し、それ以外の場合に0を出力する。
図13に戻り、LZC処理回路43は、パターン検出回路42−1乃至42−7の出力データを入力として、先行ゼロの個数を計数する。計数結果は、例えば、計数値を示すバイナリデータとして、LZC処理回路43から出力される。LZC処理回路43の回路構成の詳細は省略するが、図12に示す論理回路の構成と同様にして、先行ゼロの個数に応じたバイナリ値が出力される論理回路を設計すればよい。
図16は、DPD形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。図9に示す回路構成では、各桁についてゼロ検出を行い、そのゼロ検出の結果に基づいて、ゼロの配列パターンを検出し、そのゼロの配列パターンの検出結果に基づいて、先行ゼロを計数していた。それに対して図16の回路構成では、DPD形式10進浮動小数点数から直接にゼロの配列パターンを求める。
図16に示す演算回路は、ラッチ回路20、部分LZC回路51−0乃至51−5、LZC処理回路23、及びラッチ回路24を含む。図16において、図9と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図9に示す回路構成では、各桁におけるゼロの有無を検出し、そのゼロ検出結果に基づいてゼロの配列パターンを検出し、そのゼロ配列パターンの検出結果に基づいて、先行ゼロの数を計数している。それに対して、図16に示す構成では、部分LZC回路51−0乃至51−5が、ラッチ回路20に格納されたDPD形式10進浮動小数点数の対応するコンビネーションフィールド又はdecletに基づいて、直接にゼロの配列パターンを検出する。具体的には、部分LZC回路51−0が、コンビネーションフィールドに対して、最上位桁のゼロの有無を検出する。また例えば部分LZC回路51−1が、後続仮数部フィールドの第40ビット乃至第49ビットである1つのdecletに対して、その3つの桁におけるゼロの配列パターンを検出する。部分LZC回路51−1乃至51−5の各々は、対応する3桁の10進数に対して、3桁が全部0であるのか、先頭2桁が0であるのか、先頭1桁が0であるのか、を示すフラグを生成する。LZC処理回路23は、部分LZC回路51−0乃至51−5の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、ラッチ回路24に格納される。
図17は、部分LZC回路51−0乃至51−5の論理動作を規定する表である。エンコードされているDPD形式10進浮動小数点数から、ゼロの配列パターンを求めるためには、図17に示される表に基づいて論理演算を行えばよい。
具体的には、コンビネーションフィールド(G)に対して最上位桁における0の有無を検出する場合には、図17(a)の表を用いればよい。図17(a)の表において、G<62:50>は、コンビネーションフィールド(G)の13ビット長のデータを示す。G<62:50>が"0X000XXXXXXX"(Xはドントケア)又は"X0000XXXXXXX"(Xはドントケア)に一致する場合、最上位桁が0であることが分かる。即ち、この図17(a)の表に示す条件が満たされている場合、部分LZC回路51−0は、最上位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、部分LZC回路51−0は、最上位桁にゼロが無いことを示すデータを出力する。
後続仮数部フィールド(T)の各decletに対してゼロの配列パターンを検出する場合、図17(b)の表を用いればよい。図17(b)の表において、Tdigit<9:0>は、着目decletの第0ビットから第9ビットの10ビットのデータである。例えばTdigit<9:0>が"0000000XXX"(Xはドントケア)又は"000000100X"(Xはドントケア)に一致する場合、先頭2桁が0であることが分かる。即ち、部分LZC回路51−1乃至51−5の任意の1つに対して、この条件が満たされている場合、この部分LZC回路は、先頭2桁が0であることを示すビットを1にする。またこの条件が満たされていない場合、当該部分LZC回路は、先頭2桁が0であることを示すビットを0にする。
図18は、部分LZC回路の構成の一例を示す図である。図18の回路は、部分LZC回路51−0に相当する。図18に示す部分LZC回路51−0は、AND回路56及び57、及びOR回路58を含む。この図18に示す論理回路は、図17(a)の条件を検出する回路となっている。即ちAND回路56は、Tdigit<9:0>の第5ビット、第6ビット、第7ビット、及び第9ビットの全てが0のときに1を出力する。またAND回路57は、Tdigit<9:0>の第5ビット、第6ビット、第7ビット、及び第8ビットの全てが0のときに1を出力する。OR回路58は、AND回路56の出力とAND回路57の出力とのOR演算結果を出力する。
図19は、部分LZC回路の構成の一例を示す図である。図19の回路は、部分LZC回路51−1乃至51−5の任意の1つに相当する。図19に示す部分LZC回路は、AND回路60乃至70、及びOR回路71乃至72を含む。この図19に示す論理回路は、図17(b)の条件を検出する回路となっている。
図16に戻り、図16の演算回路では、部分LZC回路51−0乃至51−5によりDPD形式10進浮動小数点数のビットパターンから直接に0の配列パターンを検出している。図17(a)及び(b)に規定され図16の部分LZC回路51−0乃至51−5が検出すべき条件は、図10(a)及び(b)に規定され図9のゼロ検出回路21−0乃至21−5が検出すべき条件よりも、単純な条件となっている。また図16に示す演算回路では、図9に示す演算回路のようにゼロ検出回路とパターン検出回路とを別個に設けていない。従って、図16の演算回路では図9の演算回路に比較して、回路規模を削減することが可能となる。
図20は、OracleNUMBER形式10進浮動小数点数から直接に部分LZC処理を実行することによりLZC処理を行う演算回路の構成の一例を示す図である。図13に示す回路構成では、各桁についてゼロ検出を行い、そのゼロ検出の結果に基づいて、ゼロの配列パターンを検出し、そのゼロの配列パターンの検出結果に基づいて、先行ゼロを計数していた。それに対して図20の回路構成では、OracleNUMBER形式10進浮動小数点数から直接にゼロの配列パターンを求める。
図20に示す演算回路は、ラッチ回路40、部分LZC回路81−1乃至81−7、LZC処理回路43、ラッチ回路44、セレクタ45、及び部分LZC&LZC回路86を含む。図20において、図13と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図13に示す回路構成では、各桁におけるゼロの有無を検出し、そのゼロ検出結果に基づいてゼロの配列パターンを検出し、そのゼロ配列パターンの検出結果に基づいて、先行ゼロの数を計数している。それに対して、図20に示す構成では、部分LZC回路81−1乃至81−7が、ラッチ回路40に格納されたOracleNUMBER形式10進浮動小数点数の対応するブロックのビットパターンに基づいて、直接にゼロの配列パターンを検出する。具体的には、例えば部分LZC回路81−1が、仮数部の第48ビット乃至第55ビットである8ビット長のブロックに対して、その2つの桁におけるゼロの配列パターンを検出する。部分LZC回路81−1乃至81−7の各々は、対応する2桁の10進数に対して、2桁が全部0であるのか、先頭1桁が0であるのか、を示すフラグを生成する。LZC処理回路23は、部分LZC回路81−1乃至81−7の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、ラッチ回路44に格納される。
なお部分LZC回路81−1乃至81−7及びLZC処理回路43は、例えば、符号部(S)が正である場合の先行ゼロを計数する回路部分である。また部分LZC&LZC回路86が、例えば符号部(S)が負である場合の先行ゼロを計数する回路部分である。部分LZC&LZC回路86は、符号部(S)が正である場合の先行ゼロを計数する回路部分と同様のブロック構成を有してよい。即ち、部分LZC&LZC回路86は、部分LZC回路及びLZC処理回路を含んでよい。但し、符号部(S)が正の場合と負の場合とでは、部分LZC回路の論理構成が互いに異なる。
図21は、部分LZC回路81−1乃至81−7の論理動作を規定する表である。エンコードされているOracleNUMBER形式10進浮動小数点数から、ゼロの配列パターンを求めるためには、図21に示される表に基づいて論理演算を行えばよい。図21の表において、Significand<7:0>は、着目ブロックの第0ビットから第7ビットの8ビットのデータである。
図21において、例えば符号部(S)が1であり正数を示す列には、条件として「先頭1桁0」と示される欄において、8つのビットパターン("X0000XXX"から"1XXXXXXX")がリストされている。着目ブロックの8ビットデータが、これらの8つのビットパターンの何れかに一致するとき、正数の場合において先頭1桁が0であることになる。即ち、部分LZC回路81−1乃至81−7の任意の1つに対して、この条件が満たされている場合、この部分LZC回路は、先頭1桁が0であることを示すビットを1にする。またこの条件が満たされていない場合、当該部分LZC回路は、先頭1桁が0であることを示すビットを0にする。
以下に、従来のようにDPD形式10進浮動小数点数を一度デコードし、そのデコード結果に対してLZC処理を実行する演算回路と、図16に示す演算回路とで、回路規模を比較する。
図22は、DPD形式10進浮動小数点数の最上位桁をデコードする回路の回路構成を示す図である。図22に示すデコード回路は、AND回路90乃至94及びOR回路95乃至97を含む。
図23は、DPD形式10進浮動小数点数の1つのdecletをデコードする回路の回路構成を示す図である。図23に示すデコード回路は、AND回路100乃至119、OR回路120乃至125、NAND回路126及び127、NOR回路128乃至130、及びインバータ131乃至134を含む。
図24は、最上位桁(MSD)の0を検出する回路の構成を示す図である。図24に示す回路は、AND回路135を含む。
図25は、1つのdecletのゼロの配列パターンを検出する回路の構成を示す図である。図25に示す回路は、AND回路140乃至144及びバッファ回路145を含む。
図23乃至図25の回路構成により、DPD形式10進浮動小数点数からゼロの配列パターン検出結果(即ちLZC処理回路23に入力可能なデータ)を生成するためには、トランジスタの段数に換算して23段が必要になる。それに対して、図18及び図19に示す回路構成により、DPD形式10進浮動小数点数からゼロの配列パターン検出結果(即ちLZC処理回路23に入力可能なデータ)を生成するためには、トランジスタの段数に換算して15段で十分である。
このように、図9、図13、図16、及び図20に示す演算回路では、エンコードされた10進浮動小数点数から、デコード処理を介することなく、直接にゼロの配列パターンを検出するため、回路規模を小さくして高速なLZC処理を実現することができる。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
20 ラッチ回路
21−0乃至21−5 ゼロ検出回路
22−1乃至22−5 パターン検出回路
23 LZC処理回路
24 ラッチ回路

Claims (5)

  1. エンコードされた状態の10進浮動小数点数を保持する保持回路と、
    前記保持回路に保持される前記10進浮動小数点数をデコードして、前記10進浮動小数点数のビットパターンからゼロの配列パターンを検出する検出回路と、
    前記検出回路の検出結果に基づいて、前記10進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する先行ゼロ計数処理回路と
    を含むことを特徴とする演算回路。
  2. 前記検出回路は、
    各桁におけるゼロの有無を検出するゼロ検出回路と、
    前記ゼロ検出回路が出力する各桁におけるゼロの有無を示すデータに基づいてゼロの配列パターンを検出するパターン検出回路と
    を含むことを特徴とする請求項1記載の演算回路。
  3. 前記10進浮動小数点数はIEEE754−2008のDPD形式10進浮動小数点数であり、前記検出回路は、DPD形式10進浮動小数点数のビットパターンを入力として、該ビットパターンの複数のビットの値の論理積演算を行うことにより、各桁についてゼロの存在の有無を示すビット値を得ることを特徴とする請求項1又は2記載の演算回路。
  4. 前記10進浮動小数点数はOracleNUMBER形式10進浮動小数点数であり、前記検出回路は、OracleNUMBER形式10進浮動小数点数のビットパターンを入力として、該ビットパターンが各桁の0値に該当する値の範囲にあるか否かの判断に基づき、各桁についてゼロの存在の有無を示すビット値を得ることを特徴とする請求項1又は2記載の演算回路。
  5. エンコードされた状態の10進浮動小数点数をデコードして、前記10進浮動小数点数のビットパターンからゼロの配列パターンを検出し、
    前記ゼロの配列パターンの検出結果に基づいて前記10進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する
    各段階を含むことを特徴とする演算方法。
JP2012080529A 2012-03-30 2012-03-30 演算回路及び演算方法 Pending JP2013210838A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012080529A JP2013210838A (ja) 2012-03-30 2012-03-30 演算回路及び演算方法
US13/736,343 US20130262546A1 (en) 2012-03-30 2013-01-08 Arithmetic circuit and arithmetic method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012080529A JP2013210838A (ja) 2012-03-30 2012-03-30 演算回路及び演算方法

Publications (1)

Publication Number Publication Date
JP2013210838A true JP2013210838A (ja) 2013-10-10

Family

ID=49236507

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012080529A Pending JP2013210838A (ja) 2012-03-30 2012-03-30 演算回路及び演算方法

Country Status (2)

Country Link
US (1) US20130262546A1 (ja)
JP (1) JP2013210838A (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9100015B1 (en) * 2014-07-02 2015-08-04 Xilinx, Inc. Find-first-set bit circuit and method
CN108241483B (zh) * 2016-12-23 2020-09-22 龙芯中科技术有限公司 前导零的检测结构和方法
US10101967B2 (en) 2017-02-22 2018-10-16 International Business Machines Corporation Zero detection of a sum of inputs without performing an addition
US10505860B1 (en) 2017-05-30 2019-12-10 Xilinx, Inc. System and method for round robin scheduling
US20230315394A1 (en) * 2022-03-25 2023-10-05 International Business Machines Corporation Verifying the correctness of a leading zero counter

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060179098A1 (en) * 2005-02-09 2006-08-10 International Business Machines Corporation System and method for reduction of leading zero detect for decimal floating point numbers
JP2012221187A (ja) * 2011-04-08 2012-11-12 Fujitsu Ltd 演算回路、演算処理装置、及び演算回路の制御方法

Also Published As

Publication number Publication date
US20130262546A1 (en) 2013-10-03

Similar Documents

Publication Publication Date Title
US10216479B2 (en) Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
US9608662B2 (en) Apparatus and method for converting floating-point operand into a value having a different format
JP6162203B2 (ja) 命令に応じた丸め処理の実行
US9582248B2 (en) Standalone floating-point conversion unit
US8392489B2 (en) ASCII to binary floating point conversion of decimal real numbers on a vector processor
CN107769791B (zh) 用于定点到浮点的转换的装置和方法及2的负幂检测器
EP0018519A1 (en) Multiplier apparatus having a carry-save/propagate adder
JP2013210838A (ja) 演算回路及び演算方法
US8661072B2 (en) Shared parallel adder tree for executing multiple different population count operations
JP6069690B2 (ja) 演算回路及び演算回路の制御方法
CN1826580A (zh) 具有初步饱和检测的加法或者减法运算单元
JP4883251B1 (ja) 半導体集積回路及び指数算出方法
JP2010238011A (ja) ベクトル乗算処理装置および方法ならびにプログラム
CN112596699A (zh) 乘法器、处理器及电子设备
US7401107B2 (en) Data processing apparatus and method for converting a fixed point number to a floating point number
JP7044528B2 (ja) リーディングゼロ予想
US7599974B2 (en) Data processing apparatus and method for comparing floating point operands
US10275218B1 (en) Apparatus and method for subtracting significand values of floating-point operands
JP6497250B2 (ja) 演算処理装置および演算処理装置の制御方法
He et al. Multiply-add fused float point unit with on-fly denormalized number processing
JP3613466B2 (ja) データ演算処理装置及びデータ演算処理プログラム
EP0875822A2 (en) Method for providing pure carry-save output for multiplier
EP3289445B1 (en) Floating point computation apparatus and method
US20080307032A1 (en) Divider Circuit
JP2016042651A (ja) エラー検出コード生成回路,エラー検出コード生成方法及びフォーマット変換装置