(57)【要約】【課題】エンコードされた１０進浮動小数点数に対して高速に実行可能なＬＺＣ処理を提供する。【解決手段】演算回路は、エンコードされた状態の１０進浮動小数点数を保持する保持回路と、保持回路に保持される１０進浮動小数点数をデコードして、１０進浮動小数点数のビットパターンからゼロの配列パターンを検出する検出回路と、検出回路の検出結果に基づいて、１０進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する先行ゼロ計数処理回路とを含む。【選択図】図９
2013210838.tif 000002
【特許請求の範囲】
【請求項１】
エンコードされた状態の１０進浮動小数点数を保持する保持回路と、
前記保持回路に保持される前記１０進浮動小数点数をデコードして、前記１０進浮動小数点数のビットパターンからゼロの配列パターンを検出する検出回路と、
前記検出回路の検出結果に基づいて、前記１０進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する先行ゼロ計数処理回路と
を含むことを特徴とする演算回路。
【請求項２】
前記検出回路は、
各桁におけるゼロの有無を検出するゼロ検出回路と、
前記ゼロ検出回路が出力する各桁におけるゼロの有無を示すデータに基づいてゼロの配列パターンを検出するパターン検出回路と
を含むことを特徴とする請求項１記載の演算回路。
【請求項３】
前記１０進浮動小数点数はＩＥＥＥ７５４−２００８のＤＰＤ形式１０進浮動小数点数であり、前記検出回路は、ＤＰＤ形式１０進浮動小数点数のビットパターンを入力として、該ビットパターンの複数のビットの値の論理積演算を行うことにより、各桁についてゼロの存在の有無を示すビット値を得ることを特徴とする請求項１又は２記載の演算回路。
【請求項４】
前記１０進浮動小数点数はＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数であり、前記検出回路は、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数のビットパターンを入力として、該ビットパターンが各桁の０値に該当する値の範囲にあるか否かの判断に基づき、各桁についてゼロの存在の有無を示すビット値を得ることを特徴とする請求項１又は２記載の演算回路。
【請求項５】
エンコードされた状態の１０進浮動小数点数をデコードして、前記１０進浮動小数点数のビットパターンからゼロの配列パターンを検出し、
前記ゼロの配列パターンの検出結果に基づいて前記１０進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する
各段階を含むことを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算回路及び演算方法に関する。
【背景技術】
【０００２】
先行ゼロ計数（Leading Zero Count）処理は、浮動小数点表示された数値の仮数部における先行ゼロの数、即ち最上位ビット（ＭＳＢ：Most Significant Bit）から連続するゼロの数を計数する演算である。このＬＺＣ処理は、桁合わせのためのビットシフト、データ列の正規化、除算における商の桁合わせ等の種々の処理のために必要な前処理として実行される。ＬＺＣ回路は多くのマイクロプロセッサでハードウェア実装されている。
【０００３】
コンピュータシステムにおいて、HPC（High Performance Computing）等の科学技術計算には２進浮動小数点数が一般に用いられるが、財務計算等の事務系の計算には各桁を１０進表記した１０進浮動小数点数を用いることが多い。現行で用いられている１０進浮動小数点数のデータフォーマットとしては、６４ビットデータとして、ＩＥＥＥ７５４−２００８のＤＰＤ（Densely Packed Decimal）形式１０進浮動小数点数、及び、Ｏｒａｃｌｅ（登録商標）のＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数がある。これらのデータフォーマットでは、仮数部がエンコードされた状態でデータがメモリに格納されている。
【０００４】
エンコードされたデータをＬＺＣ処理したい場合、データをデコードしてからＬＺＣ処理を実行している。この場合において、デコード処理及びＬＺＣ処理は共に重い処理であるため、近年要求されるデータ処理速度を達成することが困難になりつつある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−８６１３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
１つの側面では、本発明は、エンコードされた１０進浮動小数点数に対して高速に実行可能なＬＺＣ処理を提供することを目的とする。
【課題を解決するための手段】
【０００７】
演算回路は、エンコードされた状態の１０進浮動小数点数を保持する保持回路と、前記保持回路に保持される前記１０進浮動小数点数をデコードして、前記１０進浮動小数点数のビットパターンからゼロの配列パターンを検出する検出回路と、前記検出回路の検出結果に基づいて、前記１０進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する先行ゼロ計数処理回路とを含むことを特徴とする。
【０００８】
演算方法は、エンコードされた状態の１０進浮動小数点数をデコードして、前記１０進浮動小数点数のビットパターンからゼロの配列パターンを検出し、前記ゼロの配列パターンの検出結果に基づいて前記１０進浮動小数点数の仮数部分における最上位ビット又は最下位ビットから連続するゼロの個数を示すデータを生成する各段階を含むことを特徴とする。
【発明の効果】
【０００９】
少なくとも１つの実施例によれば、エンコードされた１０進浮動小数点数に対して高速に実行可能なＬＺＣ処理を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】ＤＰＤ形式１０進浮動小数点数のデータフォーマットを示す図である。
【図２】ＤＰＤ形式１０進浮動小数点数の仮数部に対するデコード表である。
【図３】ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数のデータフォーマットを示す図である。
【図４】ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数の仮数部に対するデコード表である。
【図５】ＤＰＤ形式１０進浮動小数点数に対して通常のＬＺＣ処理を実行する際の処理の流れを示す図である。
【図６】ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数に対して通常のＬＺＣ処理を実行する際の処理の流れを示す図である。
【図７】図５におけるデコード後のＬＺＣ処理の部分をより詳細に説明するための図である。
【図８】図５や図７のようにデコード後にＬＺＣ処理を実行する回路に比較して高速にＬＺＣ処理を実行可能な回路の動作を説明するための図である。
【図９】ＤＰＤ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。
【図１０】ゼロ検出回路の論理動作を規定する表である。
【図１１】パターン検出回路の構成の一例を示す図である。
【図１２】ＬＺＣ処理回路の構成の一例を示す図である。
【図１３】ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。
【図１４】ゼロ検出回路の論理動作を規定する表である。
【図１５】パターン検出回路の構成の一例を示す図である。
【図１６】ＤＰＤ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。
【図１７】部分ＬＺＣ回路の論理動作を規定する表である。
【図１８】部分ＬＺＣ回路の構成の一例を示す図である。
【図１９】部分ＬＺＣ回路の構成の一例を示す図である。
【図２０】ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。
【図２１】部分ＬＺＣ回路の論理動作を規定する表である。
【図２２】ＤＰＤ形式１０進浮動小数点数の最上位桁をデコードする回路の回路構成を示す図である。
【図２３】ＤＰＤ形式１０進浮動小数点数の１つのｄｅｃｌｅｔをデコードする回路の回路構成を示す図である。
【図２４】最上位桁の０を検出する回路の構成を示す図である。
【図２５】１つのｄｅｃｌｅｔのゼロの配列パターンを検出する回路の構成を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１２】
図１は、ＤＰＤ形式１０進浮動小数点数のデータフォーマットを示す図である。ＤＰＤ形式１０進浮動小数点数は、符号フィールド（Ｓ）、コンビネーションフィールド（Ｇ）、後続仮数部フィールド（Ｔ）を含む。符号フィールドは１ビットの長さであり、当該浮動小数点数の正負を示す符号情報を格納する。符号フィールドの０は正数、符号フィールドの１は負数を示す。コンビネーションフィールド（Ｇ）は１３ビットの長さであり、指数と仮数の最上位桁であるＭＳＤ（Most Significant Digit）の情報とを格納する。仮数の残りの部分は後続仮数部フィールド（Ｔ）に格納されている。後続仮数部フィールド（Ｔ）は５０ビットの長さである。なお後続仮数部フィールド（Ｔ）は、各々が１０ビット長である複数のブロック（１ｄｅｃｌｅｔ）にブロック分けされている。ここでｄｅｃｌｅｔというのは、ＩＥＥＥ７５４−２００８におけるブロックの正式名称である。１ｄｅｃｌｅｔには３桁の１０進数の情報が格納されている。
【００１３】
図２は、ＤＰＤ形式１０進浮動小数点数の仮数部に対するデコード表である。エンコードされているＤＰＤ形式１０進浮動小数点数から、各桁の１０進数を求めるためには、図２に示されるデコード表に基づいてデコード処理を行えばよい。
【００１４】
具体的には、コンビネーションフィールド（Ｇ）をデコードする場合には、図２（ａ）のデコード表を用いればよい。図２（ａ）のデコード表において、Ｇ＜１２：８＞は、コンビネーションフィールド（Ｇ）の第８ビットから第１２ビットの５ビット部分を示す。例えばＧ＜１２：８＞が"１０ＸＸＸ"（Ｘはドントケア）である場合、仮数部の最上位桁（ＭＳＤ）の３つのビットＧＵ＜２＞、ＧＵ＜１＞、ＧＵ＜０＞に基づいて、４×ＧＵ＜２＞＋２×ＧＵ＜１＞＋ＧＵ＜０＞により最上位桁の１０進数が計算される。
【００１５】
また後続仮数部フィールド（Ｔ）の各ｄｅｃｌｅｔをデコードする場合、図２（ｂ）のデコード表を用いればよい。図２（ｂ）のデコード表において、ｂ＜９：０＞は、着目ｄｅｃｌｅｔの第０ビットから第９ビットの１０ビットのデータである。ｂ＜ｘ＞は、第ｘビットの３ビットのデータである。例えばｂ＜９：０＞が"ＸＸＸ０１Ｘ１１１Ｘ"（Ｘはドントケア）である場合、１００の位（１ｄｅｃｌｅｔの３桁の１０進数の最上桁）の値は、８＋ｂ＜７＞により計算される。また１０の位の値は、４×ｂ＜９＞＋２×ｂ＜８＞＋ｂ＜４＞により計算される。更に１の位の値は、８＋ｂ＜０＞により計算される。
【００１６】
図３は、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数のデータフォーマットを示す図である。ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数は、符号部（Ｓ）、指数部（ｅｘｐ）、及び仮数部（significand）を含む。符号部は１ビットの長さであり、当該浮動小数点数の正負を示す符号情報を格納する。符号部の０は正数、符号部の１は負数を示す。指数部には指数の情報が格納されており、仮数部には仮数の情報が格納されている。この仮数部は８ビット単位でブロック分けされている。１つのブロックには２桁の１０進数の情報が格納されている。
【００１７】
図４は、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数の仮数部に対するデコード表である。エンコードされているＯｒａｃｌｅＮＵＭＢＥＲ１０進浮動小数点数から、各桁の１０進数を求めるためには、図４に示されるデコード表に基づいてデコード処理を行えばよい。図４のデコード表において、ｄｉｇｉｔ＜７：０＞は、着目ブロックの第０ビットから第７ビットの８ビットのデータである。
【００１８】
具体的には、符号部（Ｓ）が０であり負数を示す場合には、ｄｉｇｉｔ＜７：０＞の値をａとすると、１０１−ａの値が当該ブロックの２桁の１０進数となる。また符号部（Ｓ）が１であり正数を示す場合には、ｄｉｇｉｔ＜７：０＞の値をａとすると、ａ−１の値が当該ブロックの２桁の１０進数となる。
【００１９】
以下の説明では、ＤＰＤ形式の１０進浮動小数点数及びＯｒａｃｌｅＮＵＭＢＥＲ形式の１０進浮動小数点数を例として、ＬＺＣ処理の実施形態について説明するが、この実施形態は限定を意図するものではない。
【００２０】
図５は、ＤＰＤ形式１０進浮動小数点数に対して通常のＬＺＣ処理を実行する際の処理の流れを示す図である。まずエンコードされたＤＰＤ形式１０進浮動小数点数１０が与えられる。このＤＰＤ形式１０進浮動小数点数１０のコンビネーションフィールド（Ｇ）及び後続仮数部フィールド（Ｔ）をデコードし、デコードされた１０進数データ１１が得られる。前述の説明通り、コンビネーションフィールド（Ｇ）からは最上位桁（ＭＳＤ）の１０進数がデコードされ、後続仮数部フィールド（Ｔ）の各ｄｅｃｌｅｔからはそれぞれ３桁の１０進数がデコードされる。各桁の１０進数を１０進表示すると"００００８０９・・・"となる。この１０進表示された数値の先頭からゼロを計数すると、０の数は４であるから、４を表わす２進数０１００がＬＺＣ処理の結果１２として得られる。
【００２１】
図６は、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数に対して通常のＬＺＣ処理を実行する際の処理の流れを示す図である。まずエンコードされたＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数１３が与えられる。このＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数１３の仮数部（significand）をデコードし、デコードされた１０進数データ１４が得られる。前述の説明通り、仮数部の各ブロックからはそれぞれ２桁の１０進数がデコードされる。各桁の１０進数を１０進表示すると"０００９・・・"となる。この１０進表示された数値の先頭からゼロを計数すると、０の数は３であるから、３を表わす２進数００１１がＬＺＣ処理の結果１５として得られる。
【００２２】
図７は、図５におけるデコード後のＬＺＣ処理の部分をより詳細に説明するための図である。図７に示すように１０進数"００００８０９・・・"が得られると、まず部分ＬＺＣ（separated LZC）処理として、各ｄｅｃｌｅｔの３桁の１０進数に対して、３桁が全部０であるのか、先頭２桁が０であるのか、先頭１桁が０であるのか、を示すフラグを生成する。これらのフラグは、ゼロの配列パターンを示すフラグである。Ｅｑｕａｌ０ＸＸは、着目ｄｅｃｌｅｔの３桁の１０進数が"０ＸＸ"（Ｘはドントケア）のパターンに一致するときに１になり（図７では○）、一致しないときに０になる（図７では×）。同様にＥｑｕａｌ００Ｘは、着目ｄｅｃｌｅｔの３桁の１０進数が"００Ｘ"（Ｘはドントケア）のパターンに一致するときに１になり（図７では○）、一致しないときに０になる（図７では×）。更にＥｑｕａｌ０００は、着目ｄｅｃｌｅｔの３桁の１０進数が"０００"のパターンに一致するときに１になり（図７では○）、一致しないときに０になる（図７では×）。こうして部分ＬＺＣ処理により得られたフラグに基づいて、先行ゼロの数が４であることを示すＬＺＣ結果１２が得られる。なお最上位桁（ＭＳＤ）については、Ｅｑｕａｌ＿０は、当該桁が０に等しいときに１になり、一致しないときに０になる。
【００２３】
図８は、図５や図７のようにデコード後にＬＺＣ処理を実行する回路に比較して高速にＬＺＣ処理を実行可能な回路の動作を説明するための図である。図８に示すＬＺＣ処理では、図５や図７に示すデコード処理を実行することなく、即ち、デコード後の１０進数"００００８０９・・・"を得ることなく、ＤＰＤ形式１０進浮動小数点数１０から直接に部分ＬＺＣ処理を実行し、その部分ＬＺＣ処理の結果に基づいてＬＺＣ結果１２を得ている。ここで、ＤＰＤ形式１０進浮動小数点数１０から直接に部分ＬＺＣ処理を実行するとは、ＤＰＤ形式１０進浮動小数点数１０のビットパターンそのものに基づいて直接に各桁のゼロの有無を検出する処理を含むことを意味してよい。即ち、図２に示すような規則に従って各桁の１０進数の値を求めることはせず、ＤＰＤ形式１０進浮動小数点数１０のビットパターンを入力として、直接に各桁の１０進数がゼロであるか否かを検出してよい。ここで直接に各桁のゼロの有無を検出するとは、ＤＰＤ形式１０進浮動小数点数１０のビットパターンを入力として、複数のビットの値の論理積演算であるＡＮＤ演算のみを行って、各桁についてゼロの存在の有無を示すビット値を得ることを意味してよい。
【００２４】
図９は、ＤＰＤ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。図９に示す演算回路は、ラッチ回路２０、ゼロ検出回路２１−０乃至２１−５、パターン検出回路２２−１乃至２２−５、ＬＺＣ処理回路２３、及びラッチ回路２４を含む。ゼロ検出回路２１−０乃至２１−５及びパターン検出回路２２−１乃至２２−５が、部分ＬＺＣ処理を実行する回路部分である。
【００２５】
ラッチ回路は、エンコードされた状態のＤＰＤ形式１０進浮動小数点数を格納する。ゼロ検出回路２１−０乃至２１−５は、ラッチ回路２０に格納されたＤＰＤ形式１０進浮動小数点数の対応するコンビネーションフィールド又はｄｅｃｌｅｔに基づいて、直接に各桁のゼロの有無を検出する。具体的には、ゼロ検出回路２１−０が、コンビネーションフィールドに対して、最上位桁（ＭＳＤ）のゼロの有無を検出する。また例えばゼロ検出回路２１−１が、後続仮数部フィールドの第４０ビット乃至第４９ビットである1つのｄｅｃｌｅｔに対して、その３つの桁におけるゼロの有無を検出する。
【００２６】
パターン検出回路２２−１乃至２２−５はそれぞれ、ゼロ検出回路２１−１乃至２１−５のゼロ検出結果を入力とし、ゼロ検出結果に応じて０の配列パターンを検出する。具体的には、パターン検出回路２２−１乃至２２−５の各々は、対応する３桁の１０進数に対して、３桁が全部０であるのか、先頭２桁が０であるのか、先頭１桁が０であるのか、を示すフラグを生成する。ＬＺＣ処理回路２３は、ゼロ検出回路２１−０の出力及びパターン検出回路２２−１乃至２２−５の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、ラッチ回路２４に格納される。
【００２７】
図１０は、ゼロ検出回路２１−０乃至２１−５の論理動作を規定する表である。エンコードされているＤＰＤ形式１０進浮動小数点数から、各桁におけるゼロの有無を求めるためには、図１０に示される表に基づいて論理演算を行えばよい。
【００２８】
具体的には、コンビネーションフィールド（Ｇ）に対して最上位桁（ＭＳＤ）における０の有無を検出する場合には、図１０（ａ）の表を用いればよい。図１０（ａ）の表において、Ｇ＜１２：８＞は、コンビネーションフィールド（Ｇ）の第８ビットから第１２ビットの５ビット部分を示す。Ｇ＜１２：８＞が"１０ＸＸＸ"（Ｘはドントケア）又は"０ＸＸＸＸ"（Ｘはドントケア）であり、且つ、仮数部の最上位桁の３つのビットＧＵ＜２：０＞が全て０、即ち"０００"である場合、最上位桁が０であることが分かる。即ち、この図１０（ａ）の表に示す条件が満たされている場合、ゼロ検出回路２１−０は、最上位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、ゼロ検出回路２１−０は、最上位桁にゼロが無いことを示すデータを出力する。
【００２９】
後続仮数部フィールド（Ｔ）の各ｄｅｃｌｅｔに対して各桁における０の有無を検出する場合、図１０（ｂ）の表を用いればよい。図１０（ｂ）の表において、ｂ＜９：０＞は、着目ｄｅｃｌｅｔの第０ビットから第９ビットの１０ビットのデータである。ｂ＜ｘ：ｙ＞は、第ｘビットから第ｙビットまでのデータである。例えばｂ＜９：０＞が"ＸＸＸＸＸＸ１０１Ｘ"（Ｘはドントケア）である場合、ｂ＜９：７＞の３ビットが全て０、即ち"０００"である場合、１００の位（１ｄｅｃｌｅｔの３桁の１０進数の最上位桁）の値が０であることが分かる。即ち、ゼロ検出回路２１−１乃至２１−５の任意の１つに対して、この条件が満たされている場合、このゼロ検出回路は、最上位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、当該ゼロ検出回路は、最上位桁にゼロが無いことを示すデータを出力する。また同様に、ｂ＜９：０＞が"ＸＸＸＸＸＸ１０１Ｘ"（Ｘはドントケア）である場合、ｂ＜９，８，４＞（即ち第９ビット、第８ビット、第４ビット）の３ビットが全て０、即ち"０００"である場合、１の位の値が０であることが分かる。即ち、ゼロ検出回路２１−１乃至２１−５の任意の１つに対して、この条件が満たされている場合、このゼロ検出回路は、最下位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、当該ゼロ検出回路は、最下位桁にゼロが無いことを示すデータを出力する。なお表中にエントリが無い部分については、当該部分に対応する桁については、ゼロが無いことを示すデータが出力される。
【００３０】
図１１は、パターン検出回路の構成の一例を示す図である。図９に示すパターン検出回路２２−１乃至２２−５の各々は、図１０に示す回路構成を有していてよい。図１１に示す回路は、ＡＮＤ回路２５、ＡＮＤ回路２６、及びバッファ回路２７を含む。入力データの３ビットは、図面左から順番に１００の桁のゼロの有無を示すビット、１０の桁のゼロの有無を示すビット、及び１の桁のゼロの有無を示すビットである。各ビットは、ゼロが有る場合に１となり、ゼロが無い場合に０となる。ＡＮＤ回路２５は、３つの桁全部が０であるときに１を出力し、それ以外の場合に０を出力する。ＡＮＤ回路２６は、３つの桁の上位２桁が全部０であるときに１を出力し、それ以外の場合に０を出力する。バッファ回路２７は、３つの桁の最上位桁が０であるときに１を出力し、それ以外の場合に０を出力する。
【００３１】
図１２は、ＬＺＣ処理回路２３の構成の一例を示す図である。図９に示す演算回路では、全部で１６桁を有する１０進数を処理対象としている。しかしながら、１６桁の全てに対して先行ゼロ計数結果を計算する論理回路は、説明が複雑となるので、図１２では説明を容易にするために先頭の４桁のみを考慮対象とした回路を示してある。この回路は、ゼロ検出回路２１−０及びパターン検出回路２２−１の出力に基づいて、先行ゼロ数が０から３である範囲で先行ゼロ計数値を計算することができる。１６桁全体に対して先行ゼロを計数する回路についても、同様の考え方で、論理回路を構成すればよい。
【００３２】
図１２に示す回路は、ＡＮＤ回路３０乃至３３及び論理和演算を行うＯＲ回路３４を含む。入力ビットは全部で４ビットである。ゼロ検出回路２１−０から、最上位桁（ＭＳＤ）のゼロの有無を示す１つのビット（ＭＳＤ  ｅｑｕａｌ  ０）が入力される。またパターン検出回路２２−１から、３桁のゼロの配列に関する３つのビットが入力される。これら３つのビットは、３桁全部が０のとき１となるビット（２−０ｔｈ  ｅｑｕａｌ  ０００）、上位２桁全部が０のとき１となるビット（２−０ｔｈ  ｅｑｕａｌ  ００Ｘ）、最上位桁が０のときに１となるビット（２−０ｔｈ  ｅｑｕａｌ  ０ＸＸ）である。
【００３３】
出力（ＬＺＣ  ＲＥＳＵＬＴ＜２：０＞）は３ビットのデータであり、先行ゼロの数を２進表現したものとなる。ＡＮＤ回路３０の出力ビットが２２の位である最上位ビット、ＡＮＤ回路３１の出力ビットが２１の位であるビット、ＯＲ回路３４の出力ビットが２０の位である最下位ビットである。例えば、３桁全部が０のとき１となるビット（２−０ｔｈ  ｅｑｕａｌ  ０００）が０、上位２桁全部が０のとき１となるビット（２−０ｔｈ  ｅｑｕａｌ  ００Ｘ）が０、最上位桁が０のときに１となるビット（２−０ｔｈ  ｅｑｕａｌ  ０ＸＸ）が１であるとする。また最上位桁のゼロの有無を示す１つのビット（ＭＳＤ  ｅｑｕａｌ  ０）が１であり、最上位桁にゼロが有ることを示しているとする。この条件は、先行ゼロの数が２個の場合、即ち、ＭＳＤが０でありそれに続く３桁が"０１０"である場合に相当する。この場合、出力は"０１０"即ち２となり、先行ゼロの数が２個であることに一致する。
【００３４】
図１３は、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。図１３に示す演算回路は、ラッチ回路４０、ゼロ検出回路４１−１乃至４１−７、パターン検出回路４２−１乃至４２−７、ＬＺＣ処理回路４３、ラッチ回路４４、セレクタ４５、及び部分ＬＺＣ＆ＬＺＣ回路４６を含む。ゼロ検出回路４１−１乃至４１−７及びパターン検出回路４２−１乃至４２−７が、部分ＬＺＣ処理を実行する回路部分である。
【００３５】
なおゼロ検出回路４１−１乃至４１−７、パターン検出回路４２−１乃至４２−７、及びＬＺＣ処理回路４３は、例えば、符号部（Ｓ）が正である場合の先行ゼロを計数する回路部分である。また部分ＬＺＣ＆ＬＺＣ回路４６が、例えば符号部（Ｓ）が負である場合の先行ゼロを計数する回路部分である。部分ＬＺＣ＆ＬＺＣ回路４６は、符号部（Ｓ）が正である場合の先行ゼロを計数する回路部分と同様のブロック構成を有してよい。即ち、部分ＬＺＣ＆ＬＺＣ回路４６は、複数のゼロ検出回路、複数のパターン検出回路、及びＬＺＣ処理回路を含んでよい。但し、符号部（Ｓ）が正の場合と負の場合とでは、ゼロ検出回路の論理構成が互いに異なる。
【００３６】
符号部（Ｓ）が正である場合の計算値（ＬＺＣ処理回路４３の出力）と符号部（Ｓ）が負である場合の計算値（部分ＬＺＣ＆ＬＺＣ回路４６の出力）とが、セレクタ４５に印加される。セレクタ４５は、符号部（Ｓ）の値を選択信号として用いて、選択動作を実行する。この選択動作により、符号部（Ｓ）が正である場合にはＬＺＣ処理回路４３の出力がラッチ回路４４に格納され、符号部（Ｓ）が負である場合には部分ＬＺＣ＆ＬＺＣ回路４６の出力がラッチ回路４４に格納される。
【００３７】
ラッチ回路は、エンコードされた状態のＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数を格納する。ゼロ検出回路４１−１乃至４１−７は、ラッチ回路４０に格納されたＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数の対応するブロックのビットパターンそのものに基づいて、直接に各桁のゼロの有無を検出する。即ち、図４に示すような規則に従って各桁の１０進数の値を求めることはせず、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数のビットパターンを入力として、直接に各桁の１０進数がゼロであるか否かを検出する。ここで直接に各桁のゼロの有無を検出するとは、１０進浮動小数点数の８ビットのビットパターンを入力として、当該ビットパターンが各桁の０値に該当する値の範囲にあるか否かの判断に基づき、各桁についてゼロの存在の有無を示すビット値を得ることを意味してよい。例えばゼロ検出回路４１−１が、仮数部の第４８ビット乃至第５５ビットである1つのブロックに対して、その２つの桁におけるゼロの有無を検出する。
【００３８】
パターン検出回路４２−１乃至４２−７はそれぞれ、ゼロ検出回路４１−１乃至４１−７のゼロ検出結果を入力とし、ゼロ検出結果に応じて０の配列パターンを検出する。具体的には、パターン検出回路４２−１乃至４２−７の各々は、対応する２桁の１０進数に対して、２桁が全部０であるのか、先頭１桁が０であるのか、を示すフラグを生成する。ＬＺＣ処理回路４３は、パターン検出回路４２−１乃至４２−７の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、セレクタ４５を介して、ラッチ回路４４に格納される。
【００３９】
図１４は、ゼロ検出回路４１−１乃至４１−７の論理動作を規定する表である。エンコードされているＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から、各桁におけるゼロの有無を求めるためには、図１４に示される表に基づいて論理演算を行えばよい。図１４の表において、ｄｉｇｉｔ＜７：０＞は、着目ブロックの第０ビットから第７ビットの８ビットのデータである。
【００４０】
例えば符号部（Ｓ）が０であり負数を示す場合には、ｄｉｇｉｔ＜７：０＞の示す数値が０〜１の範囲（両端を含む）、９２〜１００の範囲（両端を含む）、又は、１０１〜２５５の範囲（両端を含む）にあれば、１０の位の１０進数が０であることが分かる。また同様に符号部（Ｓ）が０であり負数を示す場合、ｄｉｇｉｔ＜７：０＞の示す数値が０、"Ｘ１"（Ｘはドントケア）、又は１０２〜２５５の範囲（両端を含む）であれば、１の位の１０進数が０であることが分かる。符号部（Ｓ）が１であり正数を示す場合についても、図１４の表に示すとおりである。
【００４１】
ゼロ検出回路４１−１乃至４１−７の任意の１つに対して、例えば最下位桁にゼロが有ることの条件が満たされている場合、このゼロ検出回路は、最下位桁にゼロが有ることを示すデータを出力する。最下位桁にゼロが有ることの条件が満たされていない場合、当該ゼロ検出回路は、最下位桁にゼロが無いことを示すデータを出力する。
【００４２】
図１５は、パターン検出回路の構成の一例を示す図である。図１３に示すパターン検出回路４２−１乃至４２−７の各々は、図１５に示す回路構成を有していてよい。図１１に示す回路は、ＡＮＤ回路４７及びバッファ回路４８を含む。入力データの２ビットは、図面左から順番に１０の桁のゼロの有無を示すビット及び１の桁のゼロの有無を示すビットである。各ビットは、ゼロが有る場合に１となり、ゼロが無い場合に０となる。ＡＮＤ回路４７は、２つの桁が両方共に０であるときに１を出力し、それ以外の場合に０を出力する。バッファ回路４８は、２つの桁の最上位桁が０であるときに１を出力し、それ以外の場合に０を出力する。
【００４３】
図１３に戻り、ＬＺＣ処理回路４３は、パターン検出回路４２−１乃至４２−７の出力データを入力として、先行ゼロの個数を計数する。計数結果は、例えば、計数値を示すバイナリデータとして、ＬＺＣ処理回路４３から出力される。ＬＺＣ処理回路４３の回路構成の詳細は省略するが、図１２に示す論理回路の構成と同様にして、先行ゼロの個数に応じたバイナリ値が出力される論理回路を設計すればよい。
【００４４】
図１６は、ＤＰＤ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。図９に示す回路構成では、各桁についてゼロ検出を行い、そのゼロ検出の結果に基づいて、ゼロの配列パターンを検出し、そのゼロの配列パターンの検出結果に基づいて、先行ゼロを計数していた。それに対して図１６の回路構成では、ＤＰＤ形式１０進浮動小数点数から直接にゼロの配列パターンを求める。
【００４５】
図１６に示す演算回路は、ラッチ回路２０、部分ＬＺＣ回路５１−０乃至５１−５、ＬＺＣ処理回路２３、及びラッチ回路２４を含む。図１６において、図９と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図９に示す回路構成では、各桁におけるゼロの有無を検出し、そのゼロ検出結果に基づいてゼロの配列パターンを検出し、そのゼロ配列パターンの検出結果に基づいて、先行ゼロの数を計数している。それに対して、図１６に示す構成では、部分ＬＺＣ回路５１−０乃至５１−５が、ラッチ回路２０に格納されたＤＰＤ形式１０進浮動小数点数の対応するコンビネーションフィールド又はｄｅｃｌｅｔに基づいて、直接にゼロの配列パターンを検出する。具体的には、部分ＬＺＣ回路５１−０が、コンビネーションフィールドに対して、最上位桁のゼロの有無を検出する。また例えば部分ＬＺＣ回路５１−１が、後続仮数部フィールドの第４０ビット乃至第４９ビットである1つのｄｅｃｌｅｔに対して、その３つの桁におけるゼロの配列パターンを検出する。部分ＬＺＣ回路５１−１乃至５１−５の各々は、対応する３桁の１０進数に対して、３桁が全部０であるのか、先頭２桁が０であるのか、先頭１桁が０であるのか、を示すフラグを生成する。ＬＺＣ処理回路２３は、部分ＬＺＣ回路５１−０乃至５１−５の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、ラッチ回路２４に格納される。
【００４６】
図１７は、部分ＬＺＣ回路５１−０乃至５１−５の論理動作を規定する表である。エンコードされているＤＰＤ形式１０進浮動小数点数から、ゼロの配列パターンを求めるためには、図１７に示される表に基づいて論理演算を行えばよい。
【００４７】
具体的には、コンビネーションフィールド（Ｇ）に対して最上位桁における０の有無を検出する場合には、図１７（ａ）の表を用いればよい。図１７（ａ）の表において、Ｇ＜６２：５０＞は、コンビネーションフィールド（Ｇ）の１３ビット長のデータを示す。Ｇ＜６２：５０＞が"０Ｘ０００ＸＸＸＸＸＸＸ"（Ｘはドントケア）又は"Ｘ００００ＸＸＸＸＸＸＸ"（Ｘはドントケア）に一致する場合、最上位桁が０であることが分かる。即ち、この図１７（ａ）の表に示す条件が満たされている場合、部分ＬＺＣ回路５１−０は、最上位桁にゼロが有ることを示すデータを出力する。この条件が満たされていない場合、部分ＬＺＣ回路５１−０は、最上位桁にゼロが無いことを示すデータを出力する。
【００４８】
後続仮数部フィールド（Ｔ）の各ｄｅｃｌｅｔに対してゼロの配列パターンを検出する場合、図１７（ｂ）の表を用いればよい。図１７（ｂ）の表において、Ｔｄｉｇｉｔ＜９：０＞は、着目ｄｅｃｌｅｔの第０ビットから第９ビットの１０ビットのデータである。例えばＴｄｉｇｉｔ＜９：０＞が"０００００００ＸＸＸ"（Ｘはドントケア）又は"００００００１００Ｘ"（Ｘはドントケア）に一致する場合、先頭２桁が０であることが分かる。即ち、部分ＬＺＣ回路５１−１乃至５１−５の任意の１つに対して、この条件が満たされている場合、この部分ＬＺＣ回路は、先頭２桁が０であることを示すビットを１にする。またこの条件が満たされていない場合、当該部分ＬＺＣ回路は、先頭２桁が０であることを示すビットを０にする。
【００４９】
図１８は、部分ＬＺＣ回路の構成の一例を示す図である。図１８の回路は、部分ＬＺＣ回路５１−０に相当する。図１８に示す部分ＬＺＣ回路５１−０は、ＡＮＤ回路５６及び５７、及びＯＲ回路５８を含む。この図１８に示す論理回路は、図１７（ａ）の条件を検出する回路となっている。即ちＡＮＤ回路５６は、Ｔｄｉｇｉｔ＜９：０＞の第５ビット、第６ビット、第７ビット、及び第９ビットの全てが０のときに１を出力する。またＡＮＤ回路５７は、Ｔｄｉｇｉｔ＜９：０＞の第５ビット、第６ビット、第７ビット、及び第８ビットの全てが０のときに１を出力する。ＯＲ回路５８は、ＡＮＤ回路５６の出力とＡＮＤ回路５７の出力とのＯＲ演算結果を出力する。
【００５０】
図１９は、部分ＬＺＣ回路の構成の一例を示す図である。図１９の回路は、部分ＬＺＣ回路５１−１乃至５１−５の任意の１つに相当する。図１９に示す部分ＬＺＣ回路は、ＡＮＤ回路６０乃至７０、及びＯＲ回路７１乃至７２を含む。この図１９に示す論理回路は、図１７（ｂ）の条件を検出する回路となっている。
【００５１】
図１６に戻り、図１６の演算回路では、部分ＬＺＣ回路５１−０乃至５１−５によりＤＰＤ形式１０進浮動小数点数のビットパターンから直接に０の配列パターンを検出している。図１７（ａ）及び（ｂ）に規定され図１６の部分ＬＺＣ回路５１−０乃至５１−５が検出すべき条件は、図１０（ａ）及び（ｂ）に規定され図９のゼロ検出回路２１−０乃至２１−５が検出すべき条件よりも、単純な条件となっている。また図１６に示す演算回路では、図９に示す演算回路のようにゼロ検出回路とパターン検出回路とを別個に設けていない。従って、図１６の演算回路では図９の演算回路に比較して、回路規模を削減することが可能となる。
【００５２】
図２０は、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から直接に部分ＬＺＣ処理を実行することによりＬＺＣ処理を行う演算回路の構成の一例を示す図である。図１３に示す回路構成では、各桁についてゼロ検出を行い、そのゼロ検出の結果に基づいて、ゼロの配列パターンを検出し、そのゼロの配列パターンの検出結果に基づいて、先行ゼロを計数していた。それに対して図２０の回路構成では、ＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から直接にゼロの配列パターンを求める。
【００５３】
図２０に示す演算回路は、ラッチ回路４０、部分ＬＺＣ回路８１−１乃至８１−７、ＬＺＣ処理回路４３、ラッチ回路４４、セレクタ４５、及び部分ＬＺＣ＆ＬＺＣ回路８６を含む。図２０において、図１３と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図１３に示す回路構成では、各桁におけるゼロの有無を検出し、そのゼロ検出結果に基づいてゼロの配列パターンを検出し、そのゼロ配列パターンの検出結果に基づいて、先行ゼロの数を計数している。それに対して、図２０に示す構成では、部分ＬＺＣ回路８１−１乃至８１−７が、ラッチ回路４０に格納されたＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数の対応するブロックのビットパターンに基づいて、直接にゼロの配列パターンを検出する。具体的には、例えば部分ＬＺＣ回路８１−１が、仮数部の第４８ビット乃至第５５ビットである８ビット長のブロックに対して、その２つの桁におけるゼロの配列パターンを検出する。部分ＬＺＣ回路８１−１乃至８１−７の各々は、対応する２桁の１０進数に対して、２桁が全部０であるのか、先頭１桁が０であるのか、を示すフラグを生成する。ＬＺＣ処理回路２３は、部分ＬＺＣ回路８１−１乃至８１−７の出力に応じて、先行ゼロの数を計数した結果を示すバイナリデータを出力する。先行ゼロ計数値を示すバイナリデータは、ラッチ回路４４に格納される。
【００５４】
なお部分ＬＺＣ回路８１−１乃至８１−７及びＬＺＣ処理回路４３は、例えば、符号部（Ｓ）が正である場合の先行ゼロを計数する回路部分である。また部分ＬＺＣ＆ＬＺＣ回路８６が、例えば符号部（Ｓ）が負である場合の先行ゼロを計数する回路部分である。部分ＬＺＣ＆ＬＺＣ回路８６は、符号部（Ｓ）が正である場合の先行ゼロを計数する回路部分と同様のブロック構成を有してよい。即ち、部分ＬＺＣ＆ＬＺＣ回路８６は、部分ＬＺＣ回路及びＬＺＣ処理回路を含んでよい。但し、符号部（Ｓ）が正の場合と負の場合とでは、部分ＬＺＣ回路の論理構成が互いに異なる。
【００５５】
図２１は、部分ＬＺＣ回路８１−１乃至８１−７の論理動作を規定する表である。エンコードされているＯｒａｃｌｅＮＵＭＢＥＲ形式１０進浮動小数点数から、ゼロの配列パターンを求めるためには、図２１に示される表に基づいて論理演算を行えばよい。図２１の表において、Ｓｉｇｎｉｆｉｃａｎｄ＜７：０＞は、着目ブロックの第０ビットから第７ビットの８ビットのデータである。
【００５６】
図２１において、例えば符号部（Ｓ）が１であり正数を示す列には、条件として「先頭１桁０」と示される欄において、８つのビットパターン（"Ｘ００００ＸＸＸ"から"１ＸＸＸＸＸＸＸ"）がリストされている。着目ブロックの８ビットデータが、これらの８つのビットパターンの何れかに一致するとき、正数の場合において先頭１桁が０であることになる。即ち、部分ＬＺＣ回路８１−１乃至８１−７の任意の１つに対して、この条件が満たされている場合、この部分ＬＺＣ回路は、先頭１桁が０であることを示すビットを１にする。またこの条件が満たされていない場合、当該部分ＬＺＣ回路は、先頭１桁が０であることを示すビットを０にする。
【００５７】
以下に、従来のようにＤＰＤ形式１０進浮動小数点数を一度デコードし、そのデコード結果に対してＬＺＣ処理を実行する演算回路と、図１６に示す演算回路とで、回路規模を比較する。
【００５８】
図２２は、ＤＰＤ形式１０進浮動小数点数の最上位桁をデコードする回路の回路構成を示す図である。図２２に示すデコード回路は、ＡＮＤ回路９０乃至９４及びＯＲ回路９５乃至９７を含む。
【００５９】
図２３は、ＤＰＤ形式１０進浮動小数点数の１つのｄｅｃｌｅｔをデコードする回路の回路構成を示す図である。図２３に示すデコード回路は、ＡＮＤ回路１００乃至１１９、ＯＲ回路１２０乃至１２５、ＮＡＮＤ回路１２６及び１２７、ＮＯＲ回路１２８乃至１３０、及びインバータ１３１乃至１３４を含む。
【００６０】
図２４は、最上位桁（ＭＳＤ）の０を検出する回路の構成を示す図である。図２４に示す回路は、ＡＮＤ回路１３５を含む。
【００６１】
図２５は、１つのｄｅｃｌｅｔのゼロの配列パターンを検出する回路の構成を示す図である。図２５に示す回路は、ＡＮＤ回路１４０乃至１４４及びバッファ回路１４５を含む。
【００６２】
図２３乃至図２５の回路構成により、ＤＰＤ形式１０進浮動小数点数からゼロの配列パターン検出結果（即ちＬＺＣ処理回路２３に入力可能なデータ）を生成するためには、トランジスタの段数に換算して２３段が必要になる。それに対して、図１８及び図１９に示す回路構成により、ＤＰＤ形式１０進浮動小数点数からゼロの配列パターン検出結果（即ちＬＺＣ処理回路２３に入力可能なデータ）を生成するためには、トランジスタの段数に換算して１５段で十分である。
【００６３】
このように、図９、図１３、図１６、及び図２０に示す演算回路では、エンコードされた１０進浮動小数点数から、デコード処理を介することなく、直接にゼロの配列パターンを検出するため、回路規模を小さくして高速なＬＺＣ処理を実現することができる。
【００６４】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００６５】
２０  ラッチ回路
２１−０乃至２１−５  ゼロ検出回路
２２−１乃至２２−５  パターン検出回路
２３  ＬＺＣ処理回路
２４  ラッチ回路
【図１】
2013210838.tif 000003
【図２】
2013210838.tif 000004
【図３】
2013210838.tif 000005
【図４】
2013210838.tif 000006
【図５】
2013210838.tif 000007
【図６】
2013210838.tif 000008
【図７】
2013210838.tif 000009
【図８】
2013210838.tif 000010
【図９】
2013210838.tif 000011
【図１０】
2013210838.tif 000012
【図１１】
2013210838.tif 000013
【図１２】
2013210838.tif 000014
【図１３】
2013210838.tif 000015
【図１４】
2013210838.tif 000016
【図１５】
2013210838.tif 000017
【図１６】
2013210838.tif 000018
【図１７】
2013210838.tif 000019
【図１８】
2013210838.tif 000020
【図１９】
2013210838.tif 000021
【図２０】
2013210838.tif 000022
【図２１】
2013210838.tif 000023
【図２２】
2013210838.tif 000024
【図２３】
2013210838.tif 000025
【図２４】
2013210838.tif 000026
【図２５】
2013210838.tif 000027