(57)【特許請求の範囲】
【請求項１】
除算を行なう際に与えられた除数より、その逆数の近似値を獲得して、これを初期値としてニュートンラフソン法の反復計算を一回以上行なって必要な精度の逆数を求めて、これを被除数に乗じて除算を行なう小容量メモリを用いた除算方式において、
与えられた除数の仮数部を表現するビット配列をＭＳＢの１ビットを除き３つのビットフィールドに分けて、そのうちＭＳＢ側のビットフィールドの内容をインデックスとしてメモリから２つの値を索き、これらと中間のビットフィールドの内容とを用いて一次近似を行なってニュートンラフソン法の反復計算の初期値を計算することを特徴とする、小容量メモリを用いた除算方式。
【請求項２】
ニュートンラフソン法の反復計算の際に初期値を演算に必要な最低限の精度に丸めることによって下位ビットをゼロとし、反復計算に用いられる乗算回路の一部を省略したこと、及びニュートンラフソン法の反復計算を行なう回路を専用に設けたことを特徴とする、請求項１に記載の小容量メモリを用いた除算方式。
【請求項３】
ニュートンラフソン法の反復計算の式を変形して差分を分離し、この差分の演算に必要な情報が少ないことを利用して、反復計算に用いられる乗算回路の一部を省略したことを特徴とする、請求項１又は２に記載の小容量メモリを用いた除算方式。
【請求項４】
初期値と除数の積を、１．０より減じた値を元に、級数計算を無限に行ない、これに初期値を乗じる事で逆数の演算精度を高めたことを特徴とする、請求項１〜３のいずれか一項に記載の小容量メモリを用いた除算方式。
【請求項５】
初期値と除数の積を、１．０より減じた値を元に、有限項の級数計算を行ない、これに初期値を乗じる事で逆数の演算精度を高めたことを特徴とする、請求項１〜３のいずれか一項に記載の小容量メモリを用いた除算方式。
【請求項６】
級数計算の一部の値を表としてメモリに格納し、初期値と除数の積を１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表を索いた値を、級数計算の一部と置き換える事で逆数の演算精度を高めたことを特徴とする、請求項４又は５に記載の小容量メモリを用いた除算方式。
【請求項７】
【数１】
0004313467.tif 000040
〔β＝（１−Ｙ0・Ｒm ）
Ｙ0 は初期値、Ｒm は除数の仮数部〕
の値を表としてメモリに格納し、初期値と除数の積を、１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
【数２】
0004313467.tif 000041
に示される計算を行う、請求項４記載の小容量メモリを用いた除算方式。
【請求項８】
【数３】
0004313467.tif 000042
の値を表としてメモリに格納し、初期値と除数の積を、１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
【数４】
0004313467.tif 000043
に示される計算を行う、請求項４記載の小容量メモリを用いた除算方式。
【請求項９】
【数５】
0004313467.tif 000044
の値を表としてメモリに格納し、初期値と除数の積を、１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
【数６】
0004313467.tif 000045
に示される計算を行う、請求項４記載の小容量メモリを用いた除算方式。
【請求項１０】
【数７】
0004313467.tif 000046
に示される計算を行う、請求項５記載の小容量メモリを用いた除算方式。
【請求項１１】
【数８】
0004313467.tif 000047
に示される計算を行う、請求項５記載の小容量メモリを用いた除算方式。
【請求項１２】
初期値計算、反復計算、１．０より初期値と除数の積を減じた値を用いた計算において、連続する加算と乗算の組み合わせに冗長表現の演算回路を用いて演算時間を短縮した、請求項１〜５のいずれか一項に記載の小容量メモリを用いた除算方式。
【請求項１３】
ルックアップテーブル型のプログラマブルロジックデバイスに実装し、ルックアップテーブルを小型のＲＯＭメモリとして用いて、これに、初期値計算に用いる表を格納して実装することを特徴とする、請求項１に記載の小容量メモリを用いた除算方式。
【請求項１４】
ルックアップテーブル型のプログラマブルロジックデバイスに実装し、ルックアップテーブルを小型のメモリとして用い、これに級数計算の一部の値の表を格納することを特徴とする請求項６〜９のいずれか一項に記載の小容量メモリを用いた除算方式。
【請求項１５】
表を格納するメモリに要求される容量を算出する方法を用いて、最低限のメモリを使用した、請求項１記載の小容量メモリを用いた除算方式。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は計算機における演算方式に関する。さらに詳しくは除算において、与えられた除数の逆数を求めて、これを被除数に乗じて除算を行う方式に関する。
【０００２】
本明細書の中で、特に断らない限り、単精度の浮動小数点形式というときは、ＩＥＥＥ−７５４規格における単精度の浮動小数点数のデータ形式、即ち、符号部１ビット・指数部８ビット・仮数部２３ビット（但し常に１であるＭＳＢを補って仮数部の精度は２４ビットである）からなるデータ形式を例として、逆数演算や除算を実現する方法について述べる。
これは説明の為の仮定であって、実際に本発明で述べる演算方式に則って回路を実装する際には必要とする演算精度に応じて、各パラメータを調整すれば良い。
【０００３】
【従来の技術】
浮動小数点除算は、四則演算の中でも最も時間を要する演算項目である。除算を実現するには大別して減算シフト型除算、表と演算を組み合わせる方法、乗算型除算がある。
【０００４】
減算シフト型除算では、最も単純にはプログラムでシフト命令・加減算命令（減算命令または加算命令）・条件分岐命令を組み合わせて１ビットずつ商を算出する方法があげられる。また、マイクロプログラミングでシフト・減算又は加算を反復処理する手法も実装されており、前述の命令を組み合わせる場合よりも高速に処理を行なえる。
【０００５】
減算シフト型除算において、より高速に除算を処理する手法としてＳＲＴ法がある。これは除数と被除数を上位から数ビットずつ取り、それらを基にして数ビットの商をえたり、あるいはそれらをインデックスとして表を検索して数ビットずつ商を得る操作を繰り返して必要な精度の商を得る手法で、上記の１ビットずつ商を得る手法に比べて処理のステップ数を削減する。ＬＳＩに実装された減算シフト型と乗算型の除算器の比較によれば高基数のＳＲＴ法が有利ともされる。
【０００６】
除算を行なう為に表と演算を組み合わせる方法も提案されている。これは、表をＲＯＭに格納し、除数の仮数部を表現するビット配列の一部をビットフィールドとして抽出して、その内容をインデックスとして表から得た値をもとに計算を行なって逆数を求め、これを被除数に乗じて除算を実現する方法である。
【０００７】
乗算型除算としては、ニュートンラフソン法（以下Ｎ／Ｒ法と記す) がある。これは、与えられた除数の逆数の近似値を得て、
【数９】
0004313467.tif 000002
［Ｒｍは除数の仮数部］
に示される反復計算を行なって所定の精度の逆数を得て、これを被除数に乗じて除算を実現する方法である。
【０００８】
【発明の解決すべき課題】
減算シフト型では、１ステップを処理する度に条件を判定する必要があるので、プログラミングでシフト命令・加減算命令・条件分岐命令を組み合わせて実現する場合には演算に多大な時間を要するという問題がある。また、命令間にデータ依存があるために命令パイプライン構成を持つアーキテクチャの計算機を用いても処理速度を向上させるのが困難であるという問題がある。
【０００９】
減算シフト型除算を、マイクロプログラミングでシフト・加減算を反復して実行する場合には、前述の個々の命令を組み合わせる方法に比べれば高速に処理できるが、単独の加算命令・減算命令・乗算命令（以下まとめて加減乗算命令という）に比較すると多大な処理時間を要するという問題がある。
【００１０】
高基数のＳＲＴ法では、前述の単純な減算シフト型除算に比べて高速ではあるが、依然多くのステップ数を必要とするという問題がある。また、高基数のＳＲＴ法を実装するには、得られた暫定解を元に乗算器を用いて減数を算出して減算を行う回路を構成するか、起こりうる暫定解に対応した減数を予め算出しておいて得られた暫定解に応じた減算を行なう為に減数を選択するセレクタを構成する必要があり。演算に要する時間の面でも使用する資源の面でも、この手法は必ずしも有利ではない。
【００１１】
また、減算シフト型除算では、一つの除算を行っている間は、回路資源を反復使用する為に、演算回路が占有されて、次の除算を開始する事が出来ず、スループットを向上させる事が出来ないという問題がある。
【００１２】
表と演算を組み合わせる方法も、小型といえども単精度の演算を行なう為には数十〜数百キロビットの容量のメモリを要求するため、ＬＳＩ上に実装するには、やはり実装効率が悪いという問題がある。
【００１３】
Ｎ／Ｒ法においては、従来は初期値の表をメモリに格納し、与えられた除数の仮数部を表現するビット配列のうち、ＭＳＢ側より必要なビットフィールドを抽出し、これをインデックスとして初期値を取り出して、反復計算に供する回路が実装されていた。
【００１４】
既存の実装の例では８ビット程度の精度の表を用いる例が多く見受けられたが、単精度の逆数を得るには反復計算を２回行なう必要があり、加減乗算命令を組み合わせて反復計算を行う場合には時間を要するという問題がある。
【００１５】
一回の反復で２４ビットの精度を得るには、初期値として最低１２ビットの精度が必要であり、これを直接表として作成する場合には１２ビット幅４０９６ワード、即ち４９１５２ビット( ６キロバイト) 容量のメモリが最低でも必要である。
【００１６】
実際には演算の為のガードビットも必要であり、この数倍の容量が要求されるので、ＬＳＩ上に構成するには大きな面積を占有して効率が悪いとう問題がある。また、現在市販されているプログラマブルロジックデバイス（以下ＰＬＤと略す。なお、ここでいうＰＬＤにはＣＰＬＤ、即ちコンプレックス・プログラマブル・ロジック・デバイス、やＦＰＧＡ、即ちフィールド・プログラマブル・ゲート・アレイ等のプログラマブルなデバイスも含む）の類には搭載することが出来ないという問題がある。
【００１７】
この他にも、１２ビットの精度の初期値を得て、一回の反復計算を行なう場合には、
【数１０】
0004313467.tif 000003
［Ｒｍは除数の仮数部］
に示される漸化式、より具体的には
【数１１】
0004313467.tif 000004
に示される演算を行なうが、この計算を別途演算命令を組み合わせて実現する場合には、複数の命令間にデータ依存が生じ、命令パイプラインや演算パイプラインを持つプロセッサでは効率良く処理できず、また、演算装置の使用のコンフリクトが生じ、反復計算を行っている間は演算器を占有して、他の命令を実行出来ないという問題がある。
【００１８】
既存の乗算器に改変を施して、従来の単純な２４ビット×２４ビットの演算を行なうモードと、初期値Ｙ0 と除数の仮数部Ｒｍの積を算出しつつこれを２．０から減じるモードの、二つのモードを備えた演算器も用いられている。後者のモードは積の２の補数をとって上位ビットを操作するので、ほとんど回路を追加すること無く実現できる。しかし、この場合にも反復計算と他の演算を並行して行なうことができず、性能が落ちるという問題がある。また、Ｎ／Ｒ法の反復に、同じ乗算器を繰り返し用いる事から、一つの除算が終了するまで次の除算を開始できずスループットを向上させる事が出来ないという問題がある。
【００１９】
また、Ｎ／Ｒ法で高い精度（ここでは仮に単精度の倍の４８ビットを例とする）の逆数を算出する場合には、初期値として２４ビットの精度の逆数を与えて１回の反復計算を行うか、１２ビットの精度の逆数を与えて２回反復を行う必要があり、前者の場合には必要とする表が大きくなるという問題がある。一方で後者の場合には２回目の反復計算を行う回路が大きくなり、かつ演算時間が延びるという問題がある。
【００２０】
この他に、回路資源に強い制約のあるＰＬＤには、大型の表を搭載する事が出来ず、Ｎ／Ｒ法による逆数計算や除算が実装出来ないという問題がある。
【００２１】
上述の諸問題を解決し、小型・低レイテンシ・高スループットな逆数演算回路を用いた除算回路を提供することを課題として本発明はなされた。
具体的には、まずＮ／Ｒ法の初期値を得るのに用いる表を小型にする手段を与える。即ち、表に初期値そのものを格納するのではなく、小型の表から検索した値を演算器に入力して初期値を算出することにより、表の大きさが小さくても済むような演算手法を与える、更には、必要になる表の最低限の大きさや、表の内容を決定する手段を与える。
【００２２】
次に、得た初期値よりＮ／Ｒ法による反復計算を行って必要な精度の逆数を算出する際に、プログラミングによって演算命令を組み合わせて計算することによる計算時間の増大を避ける為に、反復計算を行う専用回路を構成し、パイプライン化することによりスループットを向上させる事が可能な回路を与える。更には、その専用回路に要する回路資源を節約し、回路規模を小さくし、演算時間を短縮する演算回路の構成を与える。
【００２３】
また、Ｎ／Ｒ法で高い精度の逆数を算出するために、初期値として高い精度の逆数の近似値を必要とせず、また、反復回数を増加させることなく、計算で得られる逆数の精度を向上させる演算回路の構成を与える。
【００２４】
また、ＰＬＤ上にＮ／Ｒ法を用いた逆数計算回路や、それを用いた除算回路を効率良く実装する方法を与える。
【００２５】
【課題を解決するための手段】
以下の説明では浮動小数点形式で表現された除数Ｒの仮数部Ｒｍ１００（本明細書においては、０．５≦Ｒｍ＜１．０の範囲に正規化されているものとし、以下除数の仮数部１００と呼ぶ）に注目する。単に除数というときは、特に断らない限り与えられた除数Ｒの仮数部１００（Ｒｍ）を指す。
【００２６】
本発明では、Ｎ／Ｒ法で逆数を求めて、これを別途の乗算命令で被除数に乗じて商を得る形で除算を実現する。あるいは、Ｎ／Ｒ法で得られた逆数を被除数に乗じる回路を追加して、除算を実現する。
【００２７】
請求項１にかかる発明では、与えられた除数の仮数部１００を表現するビット配列を複数のビットフィールドに分割し、その内容をインデックスとしてメモリに格納した表から値を索き、その値とビットフィールドの内容とを用いて算術演算を行なって初期値１０４を得る。図２にその概念を示す。
【００２８】
請求項２にかかる発明では、与えられた除数の仮数部１００を表現するビット配列を、図１に示すようにＭＳＢを除いて、３つのビットフィールドに分割し、このうち２つのビットフィールド（ＭＳＢ側のビットフィールド１２０と中間のビットフィールド１２１）を用い、図３に示すようにビットフィールド１２０の内容をインデックスとして表を索いて得た二つの値（値３０５、値３０６）とビットフィールド１２１の内容とを用いて算術演算を行ない、一次近似を行う事で除数１００の逆数の近似値、即ち初期値１０４を得る。
【００２９】
請求項３にかかる発明では、与えられた除数の仮数部１００を表現するビット配列を、ＭＳＢを除いて、３つのビットフィールドに分割し、このうち２つのビットフィールド（ＭＳＢ側のビットフィールド１２０と中間のビットフィールド１２１）を用い、ビットフィールド１２０の内容をインデックスとして表を索いて得た値とビットフィールド１２１の内容とを用いて算術演算を行ない、二次近似を行う事で除数１００の逆数の近似値、即ち初期値１０４を得る。図４Ａと図４Ｂの構成４００及び構成４５０に回路の構成の例を示す。
【００３０】
請求項４及び５にかかる発明では、Ｎ／Ｒ法の反復計算そのものを演算回路として実装する。その構造の概略を図５に示す。除数の仮数部１００と被除数の仮数部５０１が与えられており、初期値計算回路５０４、補正器付き乗算器５０３、乗算器５０２からなる。ここで逆数１０６を取り出して別途乗算命令で被除数の仮数部５０１に乗じてもよいし、これを被除数の仮数部５０１に乗ずる乗算器５０６を接続して、商の仮数部５０７を算出してもよい。
【００３１】
初期値計算回路５０４は与えられた除数の仮数部１００より、その逆数の近似値、即ちＮ／Ｒ法の初期値１０４を算出するもので、従来は除数の仮数部１００を表現するビット配列からビットフィールドを抽出し、その内容をインデックスとして表から初期値を索いた。
【００３２】
この初期値計算回路５０４には、除数の仮数部１００の逆数の、より粗い近似値を基にＮ／Ｒ法の反復を行って、必要な精度の逆数を求める回路をあてて、その出力を初期値１０４として用いても良い。あるいは他の簡便な逆数計算回路を用いてもよい。
【００３３】
補正器（単に積を出力するのではなく、得られた積に対して加工を施す回路または機能）付き乗算器５０３は、２．０から初期値１０４と除数の仮数部１００の積を減じる演算を行って値５０５を出力するが、積の２の補数をとった上で２．０の位を操作すれば良いので、使用する素子数及び演算時間は、単純な乗算回路とほとんど変わらない。
【００３４】
請求項６にかかる発明では、与えられた初期値１０４を、演算のガードビットを含み最低限必要な精度に丸めて、下位ビットを０とすることで、Ｎ／Ｒ法の反復計算回路を簡略化する。
【００３５】
請求項７にかかる発明は、値１０６を得る際に、
【数１２】
0004313467.tif 000005
を変形して
【数１３】
0004313467.tif 000006
と
【数１４】
0004313467.tif 000007
に分けて、一度差分ΔＹを計算してから最終的に逆数１０６を得る手法である。
【００３６】
具体的には
【数１５】
0004313467.tif 000008
に示される、初期値１０４と除数の仮数部１００の積を、１．０より減じた値１１１をβとおき、これに初期値１０４を乗じて差分１０９として、更に初期値１０４を加えて逆数１０６を得る。
【００３７】
請求項７にかかる演算回路の構成の例を図６に示す。これは、初期値１０４と除数の仮数部１００の積を、１．０より減じて値１１１を求めた例である。式の変形を行うことによって、補正器付き乗算器６０１において部分積の一部を省略し、また、乗算器６０３においても部分積の一部を省略する。
【００３８】
補正器付き乗算器６０１は、
【数１６】
0004313467.tif 000009
に示された計算を行うもので、初期値１０４と除数の仮数部１００の積を、１．０より減じる演算を行うが、積の２の補数をとった上で１．０の位を操作すれば良い。また、その演算結果の値１１１の絶対値は、値５０５の絶対値より小さい。
【００３９】
補正器付き乗算器６０１で得た結果の値１１１に、初期値１０４を乗じて得た積１０９に、初期値１０４を、経路６０２を通して加算器６０４を用いて加算して、値１０６を算出する構造を取る。この加算器を、乗算器６０３の加算木の一部として繰り入れて、ブロック６０５を一つの演算器として構成しても良い。これはブロック７０７、８０５、９０４、１００４でも同様である。
【００４０】
請求項８にかかる発明では、
【数１７】
0004313467.tif 000010
に示される、初期値１０４と除数の仮数部１００の積を、１．０より減じた値１１１をβとおき、これを用いて逆数の演算精度を向上させる。
【００４１】
即ち、Ｎ／Ｒ法の漸化式
【数１８】
0004313467.tif 000011
をｎ回、反復したときの値１５０は、初期値１０４と、値１１１だけを用いて
【数１９】
0004313467.tif 000012
の形で表現されるので、これを計算する回路を実装する。
【００４２】
尚、反復を無限回数繰り返して、精度を無限に高めた場合の値１５１は、初期値１０４と値１１１を用いて
【数２０】
0004313467.tif 000013
に表現される。また、級数計算を第ｎ項で打ち切った場合の値Ｙ∞は、
【数２１】
0004313467.tif 000014
に表現される。この時の誤差は、
【数２２】
0004313467.tif 000015
を経て
【数２３】
0004313467.tif 000016
に示される値δｙに拠る。
【００４３】
請求項９にかかる発明では、級数計算を有限個行う
【数２４】
0004313467.tif 000017
の計算を行う回路を実装する。その概略を図７に示す。尚、図７では順次値１１１を乗じてｎ次の値を得ているが、二乗、三乗等の、階乗計算を行なう回路を用いて、値１１１から直接ｎ次の値を算出しても良い。これは図８や図１０でも同様である。
【００４４】
請求項１０にかかる発明では、級数計算の一部の値を表としてメモリに格納し、値１１１を表現するビット配列のうちＭＳＢ側から適当なビット幅のビットフィールドを抽出し、これをインデックスとして表から値を索き、これを級数計算の一部の代わりとして用いる。この表を索く操作は請求項１１ないし１３の発明においても同様である。
【００４５】
メモリに格納する表の値には、あるｎ次の項より高次の、無限個の項の合計の値を用いても良いし、必要な精度が得られるという条件の下で有限個の項で打ち切った、合計の値を用いても良い。
【００４６】
請求項１０にかかる発明において、三次迄の項を個別に計算し、四次以降の高次の項を合計した値８０１を表にしてメモリ８０６に格納した場合を例とした演算回路を図８に示す。
【００４７】
請求項１１にかかる発明では、項１５４の値を表としてメモリ９０５に格納し、値１１１を表現するビット配列のＭＳＢ側からビットフィールドを抽出し、その内容をインデックスとして、表から値を索いて、
【数２５】
0004313467.tif 000018
の計算を行う回路を実装する。図９がその構成である。
【００４８】
請求項１２にかかる発明では、
【数２６】
0004313467.tif 000019
の中の項１５５の値を表としてメモリ１００５に格納し、値１１１を表現するビット配列から抽出したビットフィールドの内容をインデックスとして、表から項の値を索いて、
【数２７】
0004313467.tif 000020
の計算を行う回路を実装する。図１０がその構成である。
【００４９】
請求項１３にかかる発明では、
【数２８】
0004313467.tif 000021
の中の項１５６の値を表としてメモリ８０６に格納し、値１１１の値をインデックスとして、表から項の値を索いて、該計算を行う回路を実装する。図８がその構成に相当する。
【００５０】
請求項１４にかかる発明では、
【数２９】
0004313467.tif 000022
の計算を行う回路を実装する。その構成は図７より乗算器７０２と乗算器７０３を除いた形をとる。
【００５１】
請求項１５にかかる発明では、
【数３０】
0004313467.tif 000023
の計算を行う回路を実装する。その構成は図７より乗算器７０３を除いた形をとる。
【００５２】
請求項１６にかかる発明では、初期値計算、反復計算、１．０より初期値と除数の積を減じた値を用いた計算において、乗算が連続する部分、あるいは、加減算と乗算が交互に連続する部分で、冗長表現の演算方式を用いて、演算時間を短縮する。
【００５３】
請求項１７にかかる発明では、逆数計算を行う回路をＰＬＤ上に搭載する際に、ＬＵＴをＲＯＭメモリとして用い、ここに初期値計算回路の中に用いられる表を格納する。複数のＬＵＴを接続して、より大きなＲＯＭメモリを構成して、ここに表を格納しても良い。図１１にその例を示す。１１０３がＬＵＴをメモリセルとして用いたメモリであり、１１０４がＬＵＴを接続してより大容量のメモリを構成する役割を果たすＬＵＴである。
【００５４】
請求項１８にかかる発明では、級数計算を行う回路をＰＬＤ上に搭載する際に、ＬＵＴをＲＯＭメモリとして用い、ここに級数計算の一部の値の表を格納する。複数のＬＵＴを接続して、より大きなＲＯＭメモリを構成して、ここに表を格納しても良い。
【００５５】
請求項１９にかかる発明では、初期値１０４として要求される、逆数の近似値に許される誤差１７２１が与えられたときに、一次近似に用いる表の、最低限の大きさを示す式を与える。
【００５６】
【実施例】
以下に単精度計算に請求項１にかかる発明を適用した実施例をあげる。図１に示すビット列で表される除数の仮数部１００（Ｒｍ）が与えられたとき、この上位からＭＳＢの１ビットをおいて、５ビットを取りビットフィールド１２０（Ｎｘ）とおく。また引続き９ビットを取りビットフィールド１２１（Ｎｙ）とおく。そして、除数１００の定義域０．５≦Ｒｍ＜１．０を３２区分して、各区分において１２ビットの精度で初期値を獲得する。
【００５７】
図１２は、
【数３１】
0004313467.tif 000024
の曲線の一部であり、除数の仮数部１００の定義域０．５≦Ｒｍ＜１．０と、その逆数Ｙ＝１／Ｒｍの値域（但し１．０＜１／Ｒｍ≦２．０）が取る部分( 着色部１２０１) を拡大して図１３に示す。
【００５８】
図１３に於いて定義域を３２の区分に分割し、ビットフィールド１２０（Ｎｘ）の値を用いて与えられた除数に近い区分を取る。濃色部１３０１で示された柱状部分が選択された区分で、この中で一次近似を行なう。この部分を拡大したものを図１４に示す。
【００５９】
一次の近似計算を行なう回路構成が図３に示される。各々の区分において一次近似に必要になるのは、各区分における逆数の近似値３０６と、その区分での一次近似に用いられる線分の傾きの値３０５であり、前者に１４ビット幅３２ワードのメモリ３０１と、後者に９ビット幅３２ワードのメモリ３０２の、２つのメモリが充てられる。併せて７３６ビット容量のメモリを用意すれば足りる。
【００６０】
回路は、１４ビット３２ワードのメモリ３０１、９ビット３２ワードのメモリ３０２と、乗算器３０３、減算器３０４からなる。メモリ３０２より索いた傾きの値３０５とビットフィールド１２１を、乗算器３０３で乗じて、この積を、減算器３０４を用いてメモリ３０１より索いた近似値３０６より減じて、初期値１０４を算出する。
【００６１】
選択された区分に於けるＹ＝１／Ｒｍの近似値３０６を、フィールド１２０をインデックスとして小容量メモリ３０１より索く。同時にこの区分に於ける線分１４０１の傾きの値３０５を小容量メモリ３０２より索く。引続きフィールド１２１の値を傾き３０５に乗じて近似値３０６より減じ、
【数３２】
0004313467.tif 000025
より初期値１０４を得る。これは除数の仮数部１００の逆数として１２ビット以上の精度を持つ。
【００６２】
この他にも、当該区分の一次近似の線分１４０１の左端と右端に於ける近似値を各々２つのメモリに格納し、ビットフィールド１２１によって中点をとる回路を用いて近似値を算出する方式でも良い。
【００６３】
こうして得た初期値１０４より、２４ビット精度の逆数１０６を得るには、
【数３３】
0004313467.tif 000026
を計算すれば良い。
【００６４】
単精度の除算において、請求項６および７にかかる発明を適用した実施例を図１５や図１６に示す。初期値１０４は精度が１２ビットなので、演算のガードビット２ビットを加えてＭＳＢより１４ビットを取り、残りＬＳＢ側の１０ビットをゼロとする。これにより、ＭＳＢより１４ビット分の演算を行えばよい。この手法はＮ／Ｒ法を反復する際の途中結果にも用いられる。
【００６５】
図１５は、除数の仮数部１００と初期値１０４の各々２４ビットの仮数部の乗算に於ける部分積５７６項（領域１５０１）を示すが、前述の様に有意なビットの位置に注意すれば、濃色部１５０２（淡色領域１５０３を含む）の部分積だけを考慮すれば良い。
【００６６】
尚、領域１５０３の部分は、必要とする演算精度が低くても良いならば、ＬＳＢ側から相応の程度の項について省略しても良い。この場合、省略した項の代わりに適切な定数項を付け足す事で演算精度をある程度、維持することもできる。
得られた積１５０６を丸めると共に、その２の補数をとって、１．０の位を操作して値１１１を算出する。
【００６７】
また、値１１１の上位ビットは必ず全て１（Ｙ０×Ｒｍ＞１．０のとき）か、全て０（Ｙ０×Ｒｍ≦１．０のとき）になる。そのため、部分積１５０４に当る位までを計算し、その位が０か１かを判定すれば、それより上位のビットの状態もわかる。これより、領域１５０５（白色）の部分積の項の計算も省略できる。
【００６８】
引き続き、更に値１０４を乗ずる。その様子を図１６に示す。これは図６のブロック６０５に相当する。この時にも無効なビットにかかわる演算を省略して領域１６０２に示された濃色部分の項について計算を行なえば良い。また、加算器６０４及び減算器１６０５は乗算の中に構成される加算木の一項として扱い、ブロック６０５を一つの演算器として構成しても良い。値１１１の上位ビット（部分積１５０４の位）の状況によって、減算器１６０５によって積１６０４から、初期値１０４を減ずるか否かを定める。
なお淡色領域１６０３の部分は必要とする演算精度が低くても良いならば、ＬＳＢ側から相応の程度の項について省略してもよい。この場合、省略した項の代わりに適切な定数項を付け足す事で演算精度をある程度、維持することもできる。
【００６９】
上記の様にして初期値の算出とＮ／Ｒ法の反復からなる単精度の逆数計算そのものが実装できる。使用する回路資源は、反復計算の為に従来の乗算器を二つ追加する場合に比べて小さい。
【００７０】
請求項１９にかかる実施例を図１７を用いて説明する。
【数３４】
0004313467.tif 000027
による曲線があるとき、これより初期値１０４に許される許容誤差１７２１上方の曲線を
【数３５】
0004313467.tif 000028
で、また下方の曲線を
【数３６】
0004313467.tif 000029
で表す。この二つの式に挟まれた着色領域１７２０内に初期値があれば、Ｎ／Ｒ法反復計算で所定の精度の逆数を得られるものとする。
【００７１】
値１７０６において
【数３７】
0004313467.tif 000030
に接する線分を表す
【数３８】
0004313467.tif 000031
（あるいは
【数３９】
0004313467.tif 000032
）を考える。また、これが
【数４０】
0004313467.tif 000033
と交わる点を各々解１７０７、解１７０８とする。
【００７２】
この解１７０７と解１７０８においては、
【数４１】
0004313467.tif 000034
と
【数４２】
0004313467.tif 000035
は等しい事を利用して、
【数４３】
0004313467.tif 000036
を立て、この解を求める事によって解１７０７と解１７０８の間の距離を求める。この式は
【数４４】
0004313467.tif 000037
と同値であり、その解が
【数４５】
0004313467.tif 000038
であることから、２解間の距離は値１７１２で与えられる。
【００７３】
許容誤差１７２１に、所望の許容誤差を代入する事で、解の距離は数１７１２によって求まり、これによって、与えられた除数の定義域（０．５≦Ｒｍ＜１．０）をどれだけの区分に分ければ良いかが分かる。
【００７４】
尚、
【数４６】
0004313467.tif 000039
より、Ｒｍ＜１．０の範囲ではさらに多少の誤差が許容される事がわかり、この範囲内で演算精度を下げて回路を減らす事が出来る。
【００７５】
【発明の効果】
請求項１にかかる発明を用いる事により、初期値を格納する大きな表を用いることなく、小さな表と演算器を組み合わせて用いる事で必要な精度の初期値を得る事が出来る。
【００７６】
請求項２にかかる発明を用いる事により、単純な減算器と乗算器を表と組み合わせる事で、必要な精度の初期値を得る事が出来る。また、構成が単純であって、必要となる最低限の表の大きさ、すなわちメモリの容量を算出する事が容易である。
【００７７】
請求項３にかかる発明を用いる事により、請求項２にかかる発明に比べて、同じ精度の初期値を得るのに、必要な表が小型となる。構成４００は基本的な構成である。構成４５０は、二乗計算器４５６を小型化できる。
【００７８】
請求項４及び５にかかる発明を用いる事により、演算資源の利用の衝突を回避する事が出来、完全に演算データの流れが一方方向となって、回路全体をパイプライン化して演算のスループットを向上させる事ができる。また、専用の回路を構築する事により、Ｎ／Ｒ法に最適化した演算形式を取る事が可能で、回路資源の節約や演算時間の短縮を行う手法を適用する事が可能となる。
【００７９】
請求項６にかかる発明を用いる事で、乗算回路の一部を省略して、回路規模を小さくすると共に、演算速度を向上させる事が出来る。
【００８０】
請求項７にかかる発明を用いる事で、乗算回路の一部を省略して、回路規模を小さくすると共に、演算速度を向上させる事が出来る。
【００８１】
請求項８にかかる発明を用いる事で、従来のＮ／Ｒ法では、演算精度を向上させる為に、反復回数を追加して行なう必要があり、一回の反復で２回の乗算を行う必要があったものが、乗算器を追加することで演算精度を向上させる事が可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。また、乗算器７０５を用いて、級数に乗ずる初期値１０４の有意なビットは少なく、乗算器７０５に要する回路が少なくてすむ。更に、乗算器に加えて階乗計算器を追加することで、演算時間を増やさずに演算精度を向上させることが可能となる。また、高次の項の値を表に組み入れて、容易に精度を向上させる応用が広がる。
【００８２】
請求項９にかかる発明を用いる事で、従来のＮ／Ｒ法では、演算精度を向上させる為に、反復回数を追加し、一回の反復につき２回の乗算を追加する必要があったものが、乗算器を追加するのみで演算精度を向上させる事が可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。乗算器に加えて階乗計算器を追加することで、演算時間を増やさずに演算精度を向上させることが可能となる。また、乗算器８０３を用いて、級数に乗ずる初期値１０４の有意なビットは少なく、乗算器８０３に要する回路が少なくてすむ。これは、乗算器９０２、１００２でも同様である。
【００８３】
請求項１０にかかる発明を用いる事で、級数計算の一部、即ち乗算器や階乗計算器を表を格納したメモリに置き換えることが可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。特に、級数計算を途中で打ち切りつつ、更に数ビット演算精度を向上させる場合には有用である。
【００８４】
請求項１１にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて２４ビット精度の逆数を得ていたところへ、更に数ビット演算精度を向上させて、ガードビットを作り出すことが可能となる。
【００８５】
請求項１２にかかる発明を用いる事で、例えば初期値に１７ビットの精度の逆数を与えることで、容易に５１ビットの精度の逆数を得ると共に、表を用いて２ビット以上演算精度を追加する事で、ＩＥＥＥ７５４の倍精度演算を行えるようになる。或いは、初期値に１８ビットの精度の逆数を与えることで、容易に５４ビットの精度の逆数を得ると共に、表を用いて更に演算精度を追加することで、ＩＥＥＥ７５４の倍精度演算において十分なガードビットを提供できる。
【００８６】
請求項１３にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて、容易に４８ビットの精度に拡張すると共に、表を用いて５〜６ビットの演算精度を追加する事で、ＩＥＥＥ７５４の倍精度演算を行えるようになる。或いは、倍精度で逆数を求めて、これを単精度の被除数に乗ずる事で、除算全体の結果にＩＥＥＥ単精度の演算規格に則った丸めを施す事が可能となる。
【００８７】
請求項１４にかかる発明を用いる事で、例えば初期値に１８ビットの精度の逆数を与えることで、容易に５４ビットの精度の逆数を得て、ＩＥＥＥ７５４の倍精度演算において十分な逆数を得られる。
【００８８】
請求項１５にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて、４８ビットの逆数を得て、これを単精度の被除数に乗じて、除算全体でＩＥＥＥ単精度の規格に則った丸めを施すことが可能となる。或いは、１４ビットの精度の初期値を与えてＩＥＥＥ７５４の倍精度（５３ビット精度）の演算を行う事が可能となる。
【００８９】
請求項１６にかかる発明を用いる事で、乗算が連続し、あるいは乗算と加減算が交互に行われる本発明の回路の演算速度を向上させる事が出来る。
【００９０】
請求項１７にかかる発明を用いる事で、初期値計算に用いられる表をルックアップテーブルに格納し、回路資源に強い制約のあるＰＬＤ上にも逆数演算回路や除算回路を実装する事が可能となる。
【００９１】
請求項１８にかかる発明を用いる事で、級数の値の表をルックアップテーブルに格納し、回路資源に強い制約のあるＰＬＤ上でも演算精度を容易に向上させる事が可能となる。
【００９２】
請求項１９にかかる発明を用いる事で、必要最低限の表の大きさ、すなわちメモリ容量を算出して、要求される演算精度の仕様を満たしつつ最小規模の回路を設計する事が可能となる。
【図面の簡単な説明】
【図１】除数の仮数部を構成するビット列を３つのビットフィールドに区分する様子を示す説明図である。
【図２】本発明の一実施態様において、初期値を得る様子を示す説明図である。
【図３】本発明の一実施態様において、初期値を得るための回路構成図である。
【図４】本発明の一実施態様において、初期値を得るための回路構成図である。
【図５】本発明の一実施態様において、Ｎ／Ｒ法の反復計算そのものを演算回路として実装した回路構成図である。
【図６】本発明の一実施態様の回路構成図である。
【図７】本発明の一実施態様の回路構成図である。
【図８】本発明の一実施態様の回路構成図である。
【図９】本発明の一実施態様の回路構成図である。
【図１０】本発明の一実施態様の回路構成図である。
【図１１】本発明の一実施態様において、ルックアップテーブルをＲＯＭとして用いて、ここに初期値計算回路で用いられる表を格納した様子を示す説明図である。
【図１２】曲線ｙ＝１／ｘの一部を示す。
【図１３】図１２の曲線の一部拡大図である。
【図１４】図１３の曲線の一部拡大図である。
【図１５】Ｎ／Ｒ法の反復計算回路を簡略化する様子を示す説明図である。
【図１６】Ｎ／Ｒ法の反復計算回路を簡略化する様子を示す説明図である。
【図１７】一次補間の区分数の解析説明図である。
【符号の説明】
１００  除数の仮数部
１０４  初期値
１０６  逆数
１２０、１２１  ビットフィールド
３０１、３０２  メモリ
３０３  乗算回路
３０４  減算回路
５０１  被除数の仮数部
５０２、５０６、６０３、７０１、７０２、７０３、７０５、８０３、９０３、１００３  乗算器
５０３、６０１  補正器付き乗算器
５０４  初期値計算回路
５０７  商の仮数部
６０４、７０４、７０６、８０２、８０４、９０２、９０４、１００２、１００４  加算器
８０１、９０１、１００１  メモリ
【図１】
0004313467.tif 000048
【図２】
0004313467.tif 000049
【図３】
0004313467.tif 000050
【図４Ａ】
0004313467.tif 000051
【図４Ｂ】
0004313467.tif 000052
【図５】
0004313467.tif 000053
【図６】
0004313467.tif 000054
【図７】
0004313467.tif 000055
【図８】
0004313467.tif 000056
【図９】
0004313467.tif 000057
【図１０】
0004313467.tif 000058
【図１１】
0004313467.tif 000059
【図１２】
0004313467.tif 000060
0004313467.tif 000061
【図１４】
0004313467.tif 000062
【図１５】
0004313467.tif 000063
【図１６】
0004313467.tif 000064
【図１７】
0004313467.tif 000065