(57)【特許請求の範囲】
【請求項１】
複数の浮動小数点数の累算結果に対応する所定の桁数の第１の固定小数点数を記憶する第１のレジスタと、
入力される第１の浮動小数点数を前記所定の桁数の第２の固定小数点数に変換する第１の変換部と、
前記第２の固定小数点数を記憶する第２のレジスタと、
前記第２のレジスタに記憶された前記第２の固定小数点数と前記第１のレジスタに記憶された前記第１の固定小数点数とを加算し、当該加算の結果を前記第１の固定小数点数として前記第１のレジスタに格納する加算器と、
前記第１の固定小数点数を第２の浮動小数点数に変換して出力する第２の変換部と、
を備え、
前記第１のレジスタは、所定のビット幅の所定数の第１のサブレジスタと、当該所定数の桁上げ情報を記憶する所定数の桁上げレジスタとを含み、
前記第２のレジスタは、前記所定のビット幅の前記所定数の第２のサブレジスタを含み、
前記加算器は、前記第１のサブレジスタと前記第２のサブレジスタとの互いに対応するビット位置の値を加算する前記所定数のサブ加算器を含み、
前記所定数のサブ加算器のそれぞれは、対応する前記第１のサブレジスタに記憶された値と、当該対応する前記第２のサブレジスタに記憶された値と、当該対応する前記第１のサブレジスタより下位ビットにおける前記桁上げレジスタに記憶された前記桁上げ情報とを加算して、当該対応する第１のサブレジスタ及び当該対応する桁上げレジスタを更新する
浮動小数点加算器。
【請求項２】
前記第１の変換部は、
前記第１の浮動小数点数の仮数部を符号付きの第３の固定小数点数に変換する固定小数点化演算器と、
前記第３の固定小数点数を前記所定の桁数に符号拡張し、前記第１の浮動小数点数の指数部の値に応じたビット数分を左シフトして前記第２の固定小数点数として出力する第１の左シフタと、を含む
請求項１に記載の浮動小数点加算器。
【請求項３】
前記所定の桁数は、前記第１の浮動小数点数の符号部の桁数、前記仮数部の桁数、及び、前記指数部の値に応じたビット数の合計値である
請求項２に記載の浮動小数点加算器。
【請求項４】
前記第２の変換部は、
前記第１のレジスタに格納された前記第１の固定小数点数の絶対値を算出する絶対値演算器と、
前記絶対値の最上位ビットから連続して値が０であるビット数を計数するＬＺＤ（Leading-Zero Detector）演算器と、
前記絶対値について前記ビット数分を左シフトする第２の左シフタと、
前記左シフトの結果に対して丸め処理を行い、前記第２の浮動小数点数の仮数部として出力する丸め処理演算器と、
前記ビット数を所定の定数値から減算して前記第２の浮動小数点数の指数部として出力する指数減算器と、
を含む、請求項１に記載の浮動小数点加算器。
【請求項５】
前記第２の変換部は、
前記所定数の第１のサブレジスタの記憶された各値をビットの並び順で連結した前記所定の桁数の第４の固定小数点数を生成し、
前記所定数の桁上げレジスタの記憶された各値を対応するビット位置に配置した前記所定の桁数の第５の固定小数点数を生成し、
前記第４の固定小数点数と前記第５の固定小数点数とを加算し、
当該加算の結果を前記第２の浮動小数点数に変換して出力する
請求項１に記載の浮動小数点加算器。
【請求項６】
請求項１乃至５のいずれか１項を備える半導体装置。
【請求項７】
複数の浮動小数点数の累算結果に対応する所定の桁数の第１の固定小数点数を第１のレジスタに記憶し、
入力される第１の浮動小数点数を前記所定の桁数の第２の固定小数点数に変換し、
前記第２の固定小数点数を第２のレジスタに記憶し、
前記第２の固定小数点数と前記第１の固定小数点数とを加算し、当該加算の結果を前記第１の固定小数点数として前記第１のレジスタに格納し、
前記第１の固定小数点数を第２の浮動小数点数に変換して出力し、
前記第１のレジスタは、所定のビット幅の所定数の第１のサブレジスタと、当該所定数の桁上げ情報を記憶する所定数の桁上げレジスタとを含み、
前記第２のレジスタは、前記所定のビット幅の前記所定数の第２のサブレジスタを含み、
特定の第１のサブレジスタに記憶された値と、当該特定の第１のサブレジスタに対応する第２のサブレジスタに記憶された値と、当該特定の第１のサブレジスタより下位ビットにおける前記桁上げレジスタに記憶された前記桁上げ情報とを加算して、当該対応する第１のサブレジスタ及び当該対応する桁上げレジスタを更新する、
浮動小数点加算器の制御方法。
【請求項８】
前記第１の浮動小数点数の仮数部を符号付きの第３の固定小数点数に変換し、
前記第３の固定小数点数を前記所定の桁数に符号拡張し、前記第１の浮動小数点数の指数部の値に応じたビット数分を左シフトして前記第２の固定小数点数として出力する
請求項７に記載の浮動小数点加算器の制御方法。
【請求項９】
前記所定の桁数は、前記第１の浮動小数点数の符号部の桁数、前記仮数部の桁数、及び、前記指数部の値に応じたビット数の合計値である
請求項８に記載の浮動小数点加算器の制御方法。
【請求項１０】
前記第１のレジスタに格納された前記第１の固定小数点数の絶対値を算出し、
前記絶対値の最上位ビットから連続して値が０であるビット数を計数し、
前記絶対値について前記ビット数分を左シフトし、
前記左シフトの結果に対して丸め処理を行い、前記第２の浮動小数点数の仮数部として出力し、
前記ビット数を所定の定数値から減算して前記第２の浮動小数点数の指数部として出力する
請求項７に記載の浮動小数点加算器の制御方法。
【請求項１１】
前記所定数の第１のサブレジスタの記憶された各値をビットの並び順で連結した前記所定の桁数の第４の固定小数点数を生成し、
前記所定数の桁上げレジスタの記憶された各値を対応するビット位置に配置した前記所定の桁数の第５の固定小数点数を生成し、
前記第４の固定小数点数と前記第５の固定小数点数とを加算し、
当該加算の結果を前記第２の浮動小数点数に変換して出力する
請求項７に記載の浮動小数点加算器の制御方法。
【請求項１２】
前記第１の浮動小数点数の加算対象として入力される第３の浮動小数点数を前記所定の桁数の第３の固定小数点数に変換し、
前記第３の固定小数点数を前記第２のレジスタに記憶する、
前記第３の固定小数点数と前記第１の固定小数点数とを加算し、当該加算の結果を前記第１の固定小数点数として前記第１のレジスタに格納する
請求項７に記載の浮動小数点加算器の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点加算器、半導体装置及び浮動小数点加算器の制御方法に関し、例えば、浮動小数点数を加算するための浮動小数点加算器、半導体装置及び浮動小数点加算器の制御方法に関する。
【背景技術】
【０００２】
画像認識プログラムでは、画像から特徴量ベクトルを抽出して、判定用の辞書ベクトルとの間で判定計算を行う。この判定計算における主要な演算は、高次元のベクトル内積である。ベクトル内積の計算は、膨大な数の積和演算の連続である。積和演算の連続処理を効率的に実行するため、加算は過去の累積結果を保持するレジスタを含む累算器で行われる。累算を毎サイクル行うためには、加算を１サイクルで行う必要がある。近年ではダイナミックレンジの広がりからベクトル要素の表現形式として浮動小数点数が主流となっている。ここで、浮動小数点数は、1ビットの符号と、固定長の指数部及び仮数部とから成る数表現である。
【０００３】
特許文献１には、浮動小数点積和演算器に関する技術が開示されている。特許文献１にかかる浮動小数点積和演算器は、浮動小数点乗算器と、桁合わせシフタと、仮数部加算器と、中間結果レジスタとを備える。ここで、桁合わせシフタは、中間結果レジスタに格納された前回の積和演算の中間結果と、浮動小数点乗算器による乗算結果との桁合わせを行う。そして、仮数部加算器は、桁合わせシフタによって桁合わせされた２つの仮数部を加算して、積和演算の中間結果として中間結果レジスタに格納する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−１０２３５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１にかかる技術では、前回の積和演算の中間結果と、今回の乗算結果とを浮動小数点数の加算処理を行うために、桁合わせのシフタが必要となる。そのため、浮動小数点数の加算器部分におけるパス遅延が長いという問題点がある。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００６】
一実施の形態によれば、浮動小数点加算器は、被演算数を固定小数点数に型変換してから加減算を行い、加減算結果の固定小数点数を浮動小数点数に逆変換するものである。
【発明の効果】
【０００７】
前記一実施の形態によれば、浮動小数点数の加算処理を高速化することができる。
【図面の簡単な説明】
【０００８】
【図１】本実施の形態１にかかる浮動小数点加算器の構成を示すブロック図である。
【図２】本実施の形態１にかかる浮動小数点の加算処理の流れを示すフローチャートである。
【図３】本実施の形態２にかかる浮動小数点加算器の構成を示すブロック図である。
【図４】本実施の形態２にかかる浮動小数点の加算処理の流れを示すフローチャートである。
【図５】本実施の形態２にかかる浮動小数点の加算処理の流れを示すタイミングチャートである。
【図６】関連技術と本実施の形態２にかかる浮動小数点加算器における最大動作周波数と面積との相関グラフである。
【図７】本実施の形態３にかかる浮動小数点加算器の構成を示すブロック図である。
【図８】本実施の形態３にかかる中間レジスタ（Ｂ’）、加減算器、中間レジスタ（Ｙ）及び加算器の構成を示すブロック図である。
【図９】本実施の形態３にかかる浮動小数点の加算処理の流れを示すフローチャートである。
【図１０】ＩＥＥＥ７５４形式の単精度の浮動小数点数表現を説明するための図である。
【図１１】関連技術にかかる浮動小数点加算器の構成を示すブロック図である。
【図１２】関連技術にかかる浮動小数点の加算処理の流れを示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下では、上述した課題を解決するための手段を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１０】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１１】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１２】
ここで、課題について詳述する。まず、画像認識の分野では、演算性能の向上と性能当たりの消費電力の低減により、膨大な演算量を必要とする画像認識処理を行う装置が組込機器に搭載されるようになってきている。
【００１３】
画像認識処理は大きく分けて２つの工程から成る。第１の工程は、画像内に映っている物体の形状を表現するパターンを特徴量ベクトルとして算出する工程である。特徴量ベクトルの一例としては、画像から背景と物体の境界線を抽出する処理を行って得られる各画素について境界線の有無と境界線の方向（角度）から成るベクトルが挙げられる。第２の工程は、画像から算出された特徴量ベクトルと、検出対象物の典型的な特徴量ベクトルから、検出対象が映っているかどうかを判定する工程である。
【００１４】
ここで、画像認識処理では、多くのベクトル演算が行われ、その中でも内積計算が重要な位置を占める。例えば、検出対象物は、その角度や環境に応じて様々な見え方をするため、多数の特徴量ベクトルを一般化するような情報にまとめられる。この情報は画像から算出される特徴量ベクトルの各要素に対する重みから成る重みベクトルとして表現される。判定処理では画像の特徴量ベクトルと検出対象物の重みベクトルの内積をとり、その結果として得られる値が閾値を超えるかどうかで判定される。
【００１５】
画像認識処理で用いられる特徴量ベクトルは非常に高次元であるため、内積演算で多数繰り返される積和累算の高速化が重要である。
【００１６】
特徴量ベクトルの各要素のデータ型は任意であるが、近年では浮動小数点型が多く用いられるようになっている。そのため、浮動小数点数に対する積和累算の高速化が特に重要になっている。
【００１７】
ここで、図１０は、ＩＥＥＥ（The Institute of Electrical and Electronics Engineers, Inc）７５４形式の単精度の浮動小数点数表現を説明するための図である。すなわち、浮動小数点数は、符号部ｕｓと指数部ｕｅと仮数部ｕｆとを備える。そして、ＩＥＥＥ７５４形式の単精度では、符号ｓ、指数ｅ、仮数ｆとした場合、以下の式（１）により数値を表現する。
（−１）ｓ×ｆ×２ｅ      ・・・（１）
尚、符号はs={0,1}、指数eは任意の整数で、仮数は1≦f＜2の範囲の固定小数点数である。IEEE754形式は精度により異なるビット長の表現が用いられる。上記の単精度表現は、符号部ｕｓが最上位で１ビット、指数部ｕｅが８ビット、仮数部ｕｆが２３ビットで浮動小数点数全体では合計３２ビットである。また、倍精度表現では指数部１１ビット、仮数部５２ビットで合計６４ビットである。
【００１８】
浮動小数点型は、整数型や固定小数点型と異なり、加減算が複雑である。その理由は、整数型や小手小数点型とは異なり、浮動小数点数は仮数の加減算の前に指数差に基づく桁合わせの処理が必要であることと、及び、仮数の加減算後に正規化が必要であることにある。
【００１９】
標準化されたＩＥＥＥ７５４方式では、原則として仮数部は１以上２未満の固定小数点数で表現しなければならない。このため、指数部が異なれば仮数部同士を直接、加減算することができず、事前に桁合わせが必要になる。桁合わせとは、２つの被加数の指数に差がある場合、小さい方を大きい方に合わせて等しくし、それに合わせて小さい方の仮数を２の指数差乗で割る（指数差のビット数だけ右シフトする）ことである。これによって、桁合わせ後の仮数同士を加減算することが可能となり、演算結果の中間結果となる仮数を得ることができる。また、大きい方の指数を演算結果の中間結果となる指数を得ることができる。
【００２０】
また、加減算の結果で仮数部が１未満になってしまう場合もある。そのため、加減算の結果が１以上２未満になるように、仮数を２のべき乗倍して、仮数に乗じた値の分だけ指数部を減ずるという正規化処理が必要となる。
【００２１】
図１１は、一般的な浮動小数点加算器９００の構成を示すブロック図である。浮動小数点加算器９００は、レジスタ９１１及び９１２と、指数減算器９２と、マルチプレクサ（ＭＵＸ）９３１、９３２及び９３３と、仮数右シフタ９４と、仮数加減算器９５と、ＬＺＡ（Leading Zero Anticipator）演算器９６と、左シフタ９７と、丸め処理演算器９８とを備える。レジスタ９１１は、外部から入力される加算対象の浮動小数点数を保持する。レジスタ９１１には、仮数部Ｂｆと指数部Ｂｅとが格納されている。レジスタ９１２は、浮動小数点加算器９００による加算結果である浮動小数点数を保持する。レジスタ９１２には、仮数部Ｙｆと指数部Ｙｅとが格納されている。仮数部Ｙｆと指数部Ｙｅとは、複数の浮動小数点数が累算される際の中間結果でもある。尚、図１１では、符号部は省略されている。
【００２２】
指数減算器９２は、指数部Ｂｅと指数部Ｙｅとの入力を受け付け、指数部Ｂｅと指数部Ｙｅとの差分を算出する。そして、指数減算器９２は、算出した差分の符号をマルチプレクサ９３１、９３２及び９３３へ出力する。また、指数減算器９２は、算出した差分（指数差）を仮数右シフタ９４へ出力する。
【００２３】
マルチプレクサ９３１は、指数減算器９２から入力される（指数差の）符号に基づいて、仮数部Ｂｆと仮数部Ｙｆのうち指数が小さい方の仮数Ｌｆを選択して、仮数右シフタ９４へ出力する。マルチプレクサ９３２は、指数減算器９２から入力される（指数差の）符号に基づいて、仮数部Ｂｆと仮数部Ｙｆのうち指数が大きい方の仮数Ｇｆを選択して、仮数加減算器９５及びＬＺＡ演算器９６へ出力する。また、マルチプレクサ９３３は、指数減算器９２から入力される（指数差の）符号に基づいて、指数部Ｂｅと指数部Ｙｅのうち指数が大きい方の指数Ｇｅを選択して、レジスタ９１２へ指数部Ｙｅとして格納する。
【００２４】
仮数右シフタ９４は、マルチプレクサ９３１から入力される仮数Ｌｆについて、指数差の分だけ右シフトし、仮数加減算器９５及びＬＺＡ演算器９６へ出力する。つまり、仮数右シフタ９４は、仮数部Ｂｆと仮数部Ｙｆのうち小さい方の仮数を指数差分だけ右シフトする。
【００２５】
仮数加減算器９５は、被演算数の符号が同一であれば入力される仮数同士を加算し、被演算数の符号が異なれば入力される仮数同士の減算を行う。具体的には、仮数加減算器９５は、仮数Ｇｆと右シフト後の仮数Ｌｆとについて加算又は減算を行い、加減算結果を左シフタ９７へ出力する。
【００２６】
ＬＺＡ演算器９６は、加減算前の仮数（仮数Ｇｆ及び右シフト後の仮数Ｌｆ）を入力として、それらから加減算結果の最上位ビット（ＭＳＢ（Most Significant Bit））から連続して０となるビット数を予測し、左シフタ９７へ出力する。
【００２７】
左シフタ９７は、仮数加減算器９５からの加減算結果について、ＬＺＡ演算器９６からのビット数分だけ左シフトし、丸め処理演算器９８へ出力する。丸め処理演算器９８は、左シフタ９７から入力されるシフト結果について、仮数部のビット幅以下の端数に対する丸め処理を行い、レジスタ９１２に仮数部Ｙｆとして格納する。これにより、仮数部Ｙｆ及び指数部Ｙｅは、次回入力される浮動小数点数との演算対象となり、累算の中間結果となる。
【００２８】
図１２は、上述した浮動小数点加算器９００による浮動小数点の加算処理の流れを示すフローチャートである。まず、指数減算器９２は、指数部Ｂｅと指数部Ｙｅの差分を算出する（Ｓ９０１）。次に、指数の差分に基づいて指数部Ｂｅと指数部Ｙｅの大小を判定し、指数部Ｂｅの方が大きければ、仮数右シフタ９４は仮数部Ｙｆを指数部の差分だけ右シフトする（Ｓ９０３）。一方、指数部Ｙｅの方が大きければ、仮数右シフタ９４は仮数部Ｂｆを指数部の差分だけ右シフトする（Ｓ９０４）。
【００２９】
続いて、仮数加減算器９５は、右シフト後の仮数Ｌｆと他方の仮数Ｇｆとを加減算する（Ｓ９０５）。並行して、ＬＺＡ演算器９６は、右シフト後の仮数Ｌｆと他方の仮数Ｇｆとに基づき、加減算結果のＭＳＢから連続して０となるビット数を予測する（Ｓ９０６）。
【００３０】
その後、左シフタ９７は、加減算結果からＬＺＡの結果（のビット数）分を左シフトする（Ｓ９０７）。そして、丸め処理演算器９８は、左シフト結果に対して丸め処理を行う（Ｓ９０８）。
【００３１】
このように、上述した一般的な浮動小数点の加算処理は複雑であるため、浮動小数点加算器９００の演算回路の遅延は長くなってしまう。それ故、浮動小数点積和累算の性能が低くなるという課題がある。
【００３２】
ここで、積和累算の浮動小数点加算を１サイクルで行う場合には、回路遅延の長さからクロック周波数を低くせざるを得ない。それ故、システム全体の性能まで低く抑えられてしまう。そしてこの場合、桁合わせの仮数右シフトと加減算と正規化の仮数左シフトが必要になる。しかしながら、一般に任意のビット数のシフトが可能なシフト演算器は、乗算器に匹敵するほどの回路遅延があるため、合計のパス遅延は非常に長くなる。
【００３３】
尚、この課題を回避するため、浮動小数点加算をパイプライン化して複数サイクルで行うように回路を構成することも考えられる。但し、例えば、加算を２サイクルで実行した場合、積和累算を毎サイクル実行することができない。その理由は、被演算数を毎サイクル、投入してしまうと、乗算が終わったサイクルで直前の演算の累算結果が得られていないためである。そのため、２サイクルに１度だけしか演算が実行できず、性能が半減してしまうことになる。
【００３４】
そこで、上述した課題を解決するための実施の形態について以下に説明する。
【００３５】
＜実施の形態１＞
図１は、本実施の形態１にかかる浮動小数点加算器１の構成を示すブロック図である。浮動小数点加算器１は、複数の浮動小数点数を累算するためのものである。特に、本実施の形態１にかかる浮動小数点加算器１は、被演算数を固定小数点数に型変換してから加減算を行い、加減算結果の固定小数点数を浮動小数点数に逆変換する方式である。
【００３６】
浮動小数点加算器１は、第１の変換部１１と、第２のレジスタ１２と、加算器１３と、第１のレジスタ１４と、第２の変換部１５とを備える。第１のレジスタ１４は、予め複数の浮動小数点数の累算結果に対応する所定の桁数の第１の固定小数点数２４を記憶するものとする。第１の変換部１１は、入力される第１の浮動小数点数２１を所定の桁数の第２の固定小数点数２３に変換する。第２のレジスタ１２は、第２の固定小数点数２３を記憶する。加算器１３は、第２のレジスタ１２に記憶された第２の固定小数点数２３と第１のレジスタ１４に記憶された第１の固定小数点数２４とを加算し、当該加算の結果を第１の固定小数点数２４として第１のレジスタ１４に格納する。第２の変換部１５は、第１の固定小数点数２４を第２の浮動小数点数２２に変換して出力する。
【００３７】
図２は、本実施の形態１にかかる浮動小数点の加算処理の流れを示すフローチャートである。まず、複数の浮動小数点数の累算結果に対応する所定の桁数の第１の固定小数点数２４を第１のレジスタ１４に記憶する（Ｓ１１）。次に、第１の変換部１１は、入力される第１の浮動小数点数２１を所定の桁数の第２の固定小数点数２３に変換する（Ｓ１２）。そして、第２の固定小数点数２３を第２のレジスタ１２に記憶する（Ｓ１３）。
【００３８】
続いて、加算器１３は、第２の固定小数点数２３と第１の固定小数点数２４とを加算する（Ｓ１４）。そして、加算器１３は、当該加算の結果を第１の固定小数点数２４として第１のレジスタ１４に格納する（Ｓ１５）。その後、第２の変換部１５は、第１の固定小数点数２４を第２の浮動小数点数２２に変換して出力する（Ｓ１６）。
【００３９】
このように本実施の形態１では、複数の浮動小数点数の累算結果（中間結果）を固定小数点数（第１の固定小数点数２４）として保持しておき、以後の加算対象の浮動小数点数の入力に対して固定小数点数（第２の固定小数点数２３）に変換した上で、保持しておいた固定小数点数との加算し、加算結果を次回の加算のために保持しておくことを繰り返すものである。そのため、第２のレジスタ１２と第１のレジスタ１４の間の１サイクルで加算処理を実現できる。そして、所定の桁数の固定小数点数同士の加算処理であるため、桁合わせのシフタも不要である。つまり、繰り返す処理にシフト演算を含まないため、パス遅延を短く抑えることができる。そのため、特許文献１や上述した浮動小数点加算器９００と比べて、浮動小数点数の加算処理を高速化することができる。
【００４０】
＜実施の形態２＞
図３は、本実施の形態２にかかる浮動小数点加算器１００の構成を示すブロック図である。浮動小数点加算器１００は、上述した実施の形態１にかかる浮動小数点加算器１の一例である。浮動小数点加算器１００は、浮動小数点数を連続して入力して加算処理を繰り返す、つまり、累算するものである。ここで、以下の説明では、浮動小数点数をＩＥＥＥ７５４形式の単精度型とする。そのため、以下の説明における浮動小数点数は、符号部が１ビット、指数部が８ビット、仮数部が２３ビットである。尚、浮動小数点数の形式、型及びビット数はこれに限定されない。また、以下の説明では、図３のＭ＝２及びＮ＝２であるものとするが、これに限定されない。また、図３では符号部を省略している。
【００４１】
浮動小数点加算器１００は、レジスタ１１１〜１１６、符号付固定小数点数化演算器１２１、算術左バレルシフタ１２２、加減算器１３０、絶対値算出器１４１、ＬＺＤ演算器１４２、算術左バレルシフタ１４３、丸め処理演算器１４４、及び、指数減算器１４５を備える。ここで、符号付固定小数点数化演算器１２１、レジスタ１１２及び算術左バレルシフタ１２２をまとめた機能ブロックは、上述した第１の変換部１１の一例である。また、絶対値算出器１４１、レジスタ１１５、ＬＺＤ演算器１４２、算術左バレルシフタ１４３、丸め処理演算器１４４、及び、指数減算器１４５をまとめた機能ブロックは、上述した第２の変換部１５の一例である。
【００４２】
レジスタ１１１は、入力の浮動小数点数の仮数部Ｂｆ及び指数部Ｂｅを記憶する。レジスタ１１２は、２５ビットの符号付きの固定小数点数である仮数部Ｂｆ’と、指数部Ｂｅ’とを記憶する。レジスタ１１３は、２７９ビットの符号付きの固定小数点数Ｂ’を記憶する。レジスタ１１３は、上述した第２のレジスタ１２の一例であり、固定小数点数Ｂ’は、上述した第２の固定小数点数２３の一例である。レジスタ１１４は、累算結果である２７９ビットの符号付きの固定小数点数Ｙを記憶する。レジスタ１１４は、上述した第１のレジスタ１４の一例であり、固定小数点数Ｙは、上述した第１の固定小数点数２４の一例である。レジスタ１１５は、固定小数点数Ｙの絶対値である２７８ビットの固定小数点数Ｙ’を記憶する。レジスタ１１６は、出力の浮動小数点数の仮数部Ｙｆ及び指数部Ｙｅを記憶する。尚、レジスタ１１１及びレジスタ１１６は、浮動小数点加算器１００の必須の構成ではない。
【００４３】
符号付固定小数点数化演算器１２１は、レジスタ１１１に記憶された２３ビットの仮数部Ｂｆを２４ビットに拡張する。そして、入力の浮動小数点数の符号部が正を示す場合には、符号付固定小数点数化演算器１２１は、最上位に０を付加した２５ビットの固定小数点数を生成する。一方、入力の浮動小数点数の符号部が負を示す場合には、符号付固定小数点数化演算器１２１は、最上位に０を付加したのち、−１倍した２５ビットの固定小数点数を生成する。いずれにしても、符号付固定小数点数化演算器１２１は、生成した２５ビットの固定小数点数を仮数部Ｂｆ’としてレジスタ１１２に格納する。
【００４４】
算術左バレルシフタ１２２は、レジスタ１１２に記憶された２５ビットの固定小数点数である仮数部Ｂｆ’を、右詰に配置して２７９ビットに符号拡張する。そして、算術左バレルシフタ１２２は、符号拡張後の固定小数点数について、レジスタ１１２に記憶された指数部Ｂｅ’の値分を左シフトして、２７９ビットの固定小数点数Ｂ’としてレジスタ１１３に格納する。
【００４５】
加減算器１３０は、レジスタ１１３に記憶された２７９ビットの符号付きの固定小数点数Ｂ’と、レジスタ１１４に記憶された２７９ビットの符号付きの固定小数点数Ｙとを加減算し、加減算の結果を固定小数点数Ｙとしてレジスタ１１４に格納する。ここで、加減算器１３０は、固定小数点数Ｂ’とＹの符号が同一であれば、固定小数点数Ｂ’とＹとを加算し、固定小数点数Ｂ’とＹの符号が異なれば、固定小数点数Ｂ’とＹとの一方から他方を減算することになる。
【００４６】
絶対値算出器１４１は、レジスタ１１４に記憶される２７９ビットの符号付きの固定小数点数Ｙの絶対値として２７８ビットの符号なし固定小数点数を算出し、レジスタ１１５に固定小数点数Ｙ’として格納する。
【００４７】
ＬＺＤ演算器１４２は、レジスタ１１５に記憶される２７８ビットの固定小数点数Ｙ’の最上位ビットから連続して値が０であるビット数（０連続ビット数）を計数して出力する。尚、ＬＺＤ演算器１４２から出力される０連続ビット数の上限値は２５４とする。そのため、ＬＺＤ演算器１４２は、計数の結果、０連続ビット数が２５４未満であれば、計数値をそのまま０連続ビット数として出力し、０連続ビット数が２５４以上であれば、０連続ビット数として２５４を出力する。
【００４８】
算術左バレルシフタ１４３は、レジスタ１１５に記憶される２７８ビットの固定小数点数Ｙ’について、ＬＺＤ演算器１４２から出力される０連続ビット数分を左シフトして出力する。丸め処理演算器１４４は、算術左バレルシフタ１４３から出力される固定小数点数について丸め処理を行い、仮数部Ｙｆとしてレジスタ１１６に格納する。ここで、丸め処理演算器１４４は、算術左バレルシフタ１４３から出力される固定小数点数について、当該固定小数点数の最上位から第２４ビット目と第２６ビット目の間の３ビットから端数の桁上げの有無を判定する。そして、丸め処理演算器１４４は、端数の桁上げがないと判定した場合、前記固定小数点数の上位第２ビット目から第２４ビット目を出力する。一方、丸め処理演算器１４４は、端数の桁上げがあると判定した場合、前記固定小数点数の上位第２ビット目から第２４ビット目を抜き出した数に、第２４ビット目のみが１でその上位は全て０となる値を加算して出力する。丸め処理演算器１４４の出力となる２３ビットの固定小数点数は、浮動小数点加算器１００の演算結果である浮動小数点数の仮数部Ｙｆである。
【００４９】
指数減算器１４５は、ＬＺＤ演算器１４２から出力される０連続ビット数を、定数値２５５から減算する。そして、算術左バレルシフタ１４３から出力される固定小数点数の最上位ビットが１の場合には、指数減算器１４５は、減算結果をそのまま出力する。一方、算術左バレルシフタ１４３から出力される固定小数点数の最上位ビットが０の場合には、指数減算器１４５は、減算結果からさらに１を減じて出力する。この出力結果は、浮動小数点加算器１００の演算結果である浮動小数点数の指数部Ｙｅである。
【００５０】
以上のことから本実施の形態２では、上述した第１の変換部１１に相当する処理は、レジスタ１１２及びレジスタ１１３にデータが格納されることからクロックで２サイクルを要する。また、上述した加算器１３に相当する処理は、レジスタ１１４にデータが格納されることからクロックで１サイクルを要する。さらに、上述した第１のレジスタ１４に相当する処理は、レジスタ１１５及びレジスタ１１６にデータが格納されることからクロックで２サイクルを要する。そのため、本実施の形態２ではＭ＝２、Ｎ＝２の場合について説明した。
【００５１】
尚、本実施の形態２はＭ＝２、Ｎ＝２の場合に限定されない。例えば、レジスタ１１２を省いてＭ＝１にすることや、レジスタ１１５を省いてＮ＝１にしてもよい。また、
レジスタ１１１とレジスタ１１２の間、又は、レジスタ１１２とレジスタ１１３の間の演算器にさらに中間レジスタを追加して、Ｍを３以上にしてもよい。同様に、レジスタ１１４とレジスタ１１５の間、又は、レジスタ１１５とレジスタ１１６の間の演算器にさらに中間レジスタを追加して、Ｎを３以上にしてもよい。
【００５２】
図４は、本実施の形態２にかかる浮動小数点の加算処理の流れを示すフローチャートである。まず、前提として、複数の浮動小数点数の累算結果に対応する２７９ビットの符号付きの固定小数点数Ｙがレジスタ１１４に記憶されているものとする。
【００５３】
符号付固定小数点数化演算器１２１は、入力された浮動小数点数の仮数部Ｂｆを符号付き固定小数点数化して、仮数部Ｂｆ’としてレジスタ１１２に格納する（Ｓ２１）。このとき、並行して入力された浮動小数点数の指数部Ｂｅが指数部Ｂｅ’としてレジスタ１１２に格納されるものとする。
【００５４】
次に、算術左バレルシフタ１２２は、符号付きの固定小数点数である仮数部Ｂｆ’を符号拡張し、指数部Ｂｅ’分を左シフトして、固定小数点数Ｂ’としてレジスタ１１３に格納する（Ｓ２２）。
【００５５】
続いて、加減算器１３０は、累算結果（固定小数点数Ｙ）と左シフト後の固定小数点数Ｂ’とを加減算して、固定小数点数Ｙとしてレジスタ１１４に格納する（Ｓ２３）。
【００５６】
その後、絶対値算出器１４１は、加減算結果（固定小数点数Ｙ）の絶対値を算出して、固定小数点数Ｙ’としてレジスタ１１５に格納する（Ｓ２４）。続いて、ＬＺＤ演算器１４２は、加減算結果の絶対値の最上位ビット（ＭＳＢ）から連続して値が０であるビット数（０連続ビット数）を出力する（Ｓ２５）。
【００５７】
ここで、算術左バレルシフタ１４３は、加減算結果の絶対値のＬＺＤ結果（０連続ビット数）分を左シフトする（Ｓ２６）。そして、丸め処理演算器１４４は、左シフト結果を丸め処理し、仮数部Ｙｆを算出して出力する（Ｓ２７）。並行して、ステップＳ２５の後、指数減算器１４５は、ＬＺＤ結果から指数部Ｙｅを算出して出力する（Ｓ２８）。
【００５８】
図５は、本実施の形態２にかかる浮動小数点の加算処理の流れを示すタイミングチャートである。まず、浮動小数点加算器１００は、レジスタ１１２〜１１５に記憶されている値を０に初期化する。
【００５９】
そして、第１のサイクルにおいて、浮動小数点加算器１００は、第１の累算命令の被演算数（浮動小数点数、以下同じ。）が入力されると、入力値とレジスタ１１２の間での演算（符号付き固定小数点数化）を行い、その結果をレジスタ１１２に第１の累算命令に対する中間データとして格納する。
【００６０】
第２のサイクルにおいて、浮動小数点加算器１００は、第２の累算命令の被演算数が入力されると、入力値とレジスタ１１２の間での演算（符号付き固定小数点数化）を行い、その結果をレジスタ１１２に第２の累算命令に対する中間データとして格納する。それに並行して、浮動小数点加算器１００は、第１の累算命令に対する中間データに対してレジスタ１１２と１１３の間での演算（算術左シフト）が行われ、レジスタ１１３に第１の累算命令に対する中間データとして格納する。
【００６１】
第３のサイクルにおいて、浮動小数点加算器１００は、第３の累算命令の被演算数が入力されると、入力値とレジスタ１１２の間での演算（符号付き固定小数点数化）を行い、その結果をレジスタ１１２に第３の累算命令に対する中間データとして格納する。それに並行して、浮動小数点加算器１００は、第２の累算命令に対する中間データに対してレジスタ１１２と１１３の間での演算（算術左シフト）が行われ、レジスタ１１３に第２の累算命令に対する中間データとして格納する。さらにそれに並行して、浮動小数点加算器１００は、第１の累算命令に対する中間データとレジスタ１１４に格納されていた初期値０が加減算され、その結果を第１の累算命令に対する中間データとしてレジスタ１１４に格納する。
【００６２】
第４のサイクルにおいて、浮動小数点加算器１００は、第４の累算命令の被演算数が入力されると、入力値とレジスタ１１２の間での演算（符号付き固定小数点数化）を行い、その結果をレジスタ１１２に第４の累算命令に対する中間データとして格納する。それに並行して、浮動小数点加算器１００は、第３の累算命令に対する中間データに対してレジスタ１１２と１１３の間での演算（算術左シフト）が行われ、レジスタ１１３に第３の累算命令に対する中間データとして格納する。さらにそれに並行して、浮動小数点加算器１００は、第２の累算命令に対する中間データとレジスタ１１４に格納されていた第１の累算命令に対する中間データが加減算され、その結果（第１の累算命令と第２の累算命令の被演算数に対する累算の中間結果）が第２の累算命令に対する中間データとしてレジスタ１１４に格納される。さらにそれに並行して、浮動小数点加算器１００は、第１の累算命令に対する中間データに対してレジスタ１１４と１１５の間での演算（絶対値化）が行われ、レジスタ１１５に第１の累算命令に対する中間データとして格納する。
【００６３】
第５のサイクルにおいて、浮動小数点加算器１００は、第５の累算命令の被演算数が入力されると、入力値とレジスタ１１２の間での演算（符号付き固定小数点数化）を行い、その結果をレジスタ１１２に第５の累算命令に対する中間データとして格納する。それに並行して浮動小数点加算器１００は、第４の累算命令に対する中間データに対してレジスタ１１２と１１３の間での演算（算術左シフト）が行われ、レジスタ１１３に第４の累算命令に対する中間データとして格納する。さらにそれに並行して、浮動小数点加算器１００は、第２の累算命令に対する中間データとレジスタ１１４に格納されていた第２の累算命令に対する中間データが加減算され、その結果（第１〜第３の累算命令の被演算数に対する累算の中間結果）が第３の累算命令に対する中間データとしてレジスタ１１４に格納される。さらにそれに並行して、浮動小数点加算器１００は、第２の累算命令に対する中間データに対してレジスタ１１４と１１５の間での演算（絶対値化）が行われ、レジスタ１１５に第２の累算命令に対する中間データを格納する。さらにそれに並行して、浮動小数点加算器１００は、第１の累算命令に対する中間データに対してレジスタ１１５と出力の間での演算（ＬＺＤ、算術左シフト、丸め処理及び指数減算）が行われ、第１の累算命令に対する演算結果を出力する。
【００６４】
第６のサイクル以降も第５のサイクルの動作と同様の動作を継続する。つまり、レジスタ１１４に第１の累算命令からの累算結果の中間データが格納され、その後の２サイクルでレジスタ１１４と１１５の間とレジスタ１１５と出力の間の演算を経て、第１の累算命令からの累算の結果を出力するように動作する。
【００６５】
（実施形態２の効果）
このように、本実施形態２にかかる浮動小数点加算器１００は、レジスタ１１３と１１４の間で２つの被演算数（固定小数点数）同士の加減算処理を、毎サイクル実行するものである。そのため、実質的に複数の浮動小数点数の累算処理を毎サイクル実行できる。よって、複数の浮動小数点数の累算処理を高速化できる。
【００６６】
図６は、関連技術と本実施の形態２にかかる浮動小数点加算器における最大動作周波数と面積との相関グラフである。当該相関グラフの縦軸は、浮動小数点加算器の回路面積を示し、横軸は、浮動小数点加算器のクロック周波数を示す。尚、回路面積とクロック周波数はそれぞれ関連技術のクロック周波数が最大の場合を１．０としている。
【００６７】
ここで、クロック周波数で比較すると、関連技術と本実施形態ともに最大値の場合、本実施形態が関連技術の２．５倍程度となっており、本実施形態は前記効果を有することを示している。特に、回路面積を１．０に揃えると、本実施形態は関連技術に比べてクロック周波数が２．０倍程度となる。
【００６８】
さらに、本実施形態では、浮動小数点数の累算の有効精度を高める効果を有する。関連技術の方式は、仮数の加減算の幅を２６ビット程度に制限するものである。そのため、関連技術では、丸め処理を受けるため有効数字の上位からビット位置が加減算幅よりも下位となる桁の情報が失われる。例えば、１．００・・・０１×２の０乗を１６回加算した場合、１６（＝２の４乗）倍することになるため、１．００・・・０１×２の４乗となる。ところが、関連技術における加算では、２回目の累算で１．００・・・０１×２の１乗となった後、３回目以降で仮数の最下位桁の１が丸められてしまう。切り捨て方式であれば、最終的に１．００・・・００×２の４乗となり、本来の演算結果から乖離する。それに対して本実施形態にかかる浮動小数点加算器１００は、全てのビットを内部に格納しているのでこのような精度低下は起こらない。よって、上述した効果を奏する。
【００６９】
ここで、本実施形態２の特徴の一部は次のように表現できる。すなわち、前記第１の変換部は、前記第１の浮動小数点数の仮数部を符号付きの第３の固定小数点数に変換する固定小数点化演算器と、前記第３の固定小数点数を前記所定の桁数に符号拡張し、前記第１の浮動小数点数の指数部の値に応じたビット数分を左シフトして前記第２の固定小数点数として出力する第１の左シフタと、を含むことが望ましい。これにより、入力される浮動小数点数の仮数部に、符号部及び指数部の情報を反映させた固定小数点数に変換することができ、入力される浮動小数点数の情報を維持したまま加減算処理を行うことができる。
【００７０】
さらに、前記所定の桁数は、前記第１の浮動小数点数の符号部の桁数、前記仮数部の桁数、及び、前記指数部の値に応じたビット数の合計値であることが望ましい。これにより、必要最小限の桁数で浮動小数点数の情報を維持できる。
【００７１】
また、前記第２の変換部は、前記第１のレジスタに格納された前記第１の固定小数点数の絶対値を算出する絶対値演算器と、前記絶対値の最上位ビットから連続して値が０であるビット数を計数するＬＺＤ（Leading-Zero Detector）演算器と、前記絶対値について前記ビット数分を左シフトする第２の左シフタと、前記左シフトの結果に対して丸め処理を行い、前記第２の浮動小数点数の仮数部として出力する丸め処理演算器と、前記ビット数を所定の定数値から減算して前記第２の浮動小数点数の指数部として出力する指数減算器と、を含むことが望ましい。これにより、一度、変換された固定小数点数を、元の浮動小数点数の情報を維持したまま復元できる。また、固定小数点数同士の加減算結果を精度良く浮動小数点数に変換できる。
【００７２】
または、本実施形態２は次のように表現することもできる。すなわち、前記第１の浮動小数点数の仮数部を符号付きの第３の固定小数点数に変換し、前記第３の固定小数点数を前記所定の桁数に符号拡張し、前記第１の浮動小数点数の指数部の値に応じたビット数分を左シフトして前記第２の固定小数点数として出力することが望ましい。これにより、入力される浮動小数点数の仮数部に、符号部及び指数部の情報を反映させた固定小数点数に変換することができ、入力される浮動小数点数の情報を維持したまま加減算処理を行うことができる。
【００７３】
さらに、前記第１のレジスタに格納された前記第１の固定小数点数の絶対値を算出し、前記絶対値の最上位ビットから連続して値が０であるビット数を計数し、前記絶対値について前記ビット数分を左シフトし、前記左シフトの結果に対して丸め処理を行い、前記第２の浮動小数点数の仮数部として出力し、前記ビット数を所定の定数値から減算して前記第２の浮動小数点数の指数部として出力することが望ましい。一度、変換された固定小数点数を、元の浮動小数点数の情報を維持したまま復元できる。また、固定小数点数同士の加減算結果を精度良く浮動小数点数に変換できる。
【００７４】
また、前記第１の浮動小数点数の加算対象として入力される第３の浮動小数点数を前記所定の桁数の第３の固定小数点数に変換し、前記第３の固定小数点数を前記第２のレジスタに記憶し、前記第３の固定小数点数と前記第１の固定小数点数とを加算し、当該加算の結果を前記第１の固定小数点数として前記第１のレジスタに格納するともいえる。これにより、連続して入力される浮動小数点数に対して固定小数点数の累算を効率的に実行できる。
【００７５】
尚、本実施形態２は、次のように表現することもできる。すなわち、浮動小数点累算器は、１つの浮動小数点数が入力される。浮動小数点累算器は、累算結果である第１の固定小数点数を記憶するレジスタ(Y)と、入力された第１の浮動小数点数の仮数部を符号付きの第２の固定小数点数に変換して出力する固定小数点化演算器と、前記第２の固定小数点数を符号拡張して前記浮動小数点数の指数部の値に応じたビット数だけ左シフトして第３の固定小数点数を出力する第１の算術左バレルシフタと、前記第３の固定小数点数と前記累算結果の第１の固定小数点数を加算して新たな累算結果を出力して前記レジスタに記憶させる加減算器と、前記レジスタに記憶された第１の固定小数点数の絶対値を計算して出力する絶対値演算器と、前記絶対値の最上位ビットから連続して値が０であるビット数を計数するＬＺＤ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ｄｅｔｅｃｔｏｒ）演算器と、前記ビット数だけ前記絶対値を左シフトして累算結果の第２の浮動小数点数の仮数部を出力する第２の算術左バレルシフタと、前記ビット数を定数値から減算して前記第２の浮動小数点数の指数部を出力する減算器と、前記第２の浮動小数点数の仮数部の丸め処理を行う丸め演算器とを備える。
【００７６】
＜実施の形態３＞
上述した実施の形態２では、加減算器１３０の被演算データのビット数が２７８ビットと大きい。高速な加算器が必要とする論理段数は、ビット数の対数をとった値に比例すると知られており、実施形態２でも高速な累算器を得ることは可能である。しかしながら、さらに高速な累算器を求める場合は、このステージがボトルネックになる可能性がある。そこで、本実施の形態３では、中間レジスタであるレジスタ１１３及び１１４と加減算器１３０とをそれぞれ、所定のビット幅の所定数に分割することで、実施の形態２と比べて、加減算器をさらに高速化させる。
【００７７】
図７は、本実施の形態３にかかる浮動小数点加算器１００ａの構成を示すブロック図である。浮動小数点加算器１００ａは、上述した実施の形態２にかかる浮動小数点加算器１００と比べて、レジスタ１１３及び１１４並びに加減算器１３０がレジスタ１１３ａ及び１１４ａ並びに加減算器１３０ａに置き換わり、加算器１４６が追加されたものである。
【００７８】
図８は、本実施の形態３にかかるレジスタ１１３ａ（Ｂ’）、加減算器１３０ａ、レジスタ１１４ａ（Ｙ）及び加算器１４６の構成を示すブロック図である。ここでは、分割幅を８ビットとした場合の具体例を示している。
【００７９】
レジスタ１１３ａは、２７８ビットを下位ビットから８ビット単位で計３５個のサブレジスタ（第２のサブレジスタの一例）に分割したものである。すなわち、レジスタ１１３ａは、所定のビット幅（８ビット幅）の所定数（３５個）の第２のサブレジスタを含むものである。具体的には、下位から順にＢ’０（最下位（第０）ビットから第７ビット：[7:0]）、Ｂ’１（第８ビットから第１５ビット：[15:8]）、・・・、Ｂ’３４（第２７２ビットから第２７７ビット：[277:272]）と記号のつけられる分割中間レジスタに分割する。
【００８０】
レジスタ１１４ａは、２７８ビットを下位ビットから８ビット単位で計３５個のサブレジスタ（第１のサブレジスタの一例）に分割し、かつ、計３５個の桁上げ情報を記憶する桁上げ中間レジスタ（Ｃ０、Ｃ１、・・・、Ｃ３４）を追加したものである。すなわち、レジスタ１１４ａは、所定のビット幅の所定数の第１のサブレジスタと、当該所定数の桁上げ情報を記憶する所定数の桁上げレジスタとを含むものである。
【００８１】
加減算器１３０ａは、８ビット単位で加減算を行う計３５個の加減算部１５０、１５１、・・・を含む。加減算部１５０等のそれぞれは、第１のサブレジスタと第２のサブレジスタとの互いに対応するビット位置の値を加算する。各加減算部は、所定数のサブ加算器の一例である。各加減算部は、符号の末尾の数字（便宜上、「添え字」と呼ぶ。）の対応するサブレジスタの値と加減算部の添え字よりも１添え字の数字を持つ桁上げ中間レジスタの値を入力する。例えば、図８の加減算部１５０は、同じ添え字（０）であるサブレジスタＢ’０とＹ０の値を入力とする。１小さい添え字（−１）の桁上げ中間レジスタは存在しないので、その入力は無しとする。加減算部１５１は同じ添え字（１）であるサブレジスタＢ’１とＹ１の値と、加減算部１５１の添え字（１）よりも１小さい添え字（０）の桁上げ中間レジスタＣ０の値を入力とする。
【００８２】
各加減算部の出力は、同じ添え字のレジスタ１１４ａ（Ｙ）に含まれるサブレジスタ（Ｙ０，Ｙ１，・・・、Ｙ３４）に格納され、加減算部の最上位の桁上げはＹに含まれる桁上げ中間レジスタ（Ｃ０，Ｃ１，…、Ｃ３４）に格納される。
【００８３】
言い換えると、各サブ加算器は、対応する第１のサブレジスタに記憶された値と、当該対応する第２のサブレジスタに記憶された値と、当該対応する第１のサブレジスタより下位ビットにおける桁上げレジスタに記憶された桁上げ情報とを加算して、当該対応する第１のサブレジスタ及び当該対応する桁上げレジスタを更新する。これらにより、繰り返されるか減算処理を実施形態２と比べてさらに高速化することができる。
【００８４】
尚、本実施形態では分割幅を一例として８ビットとしているが、分割幅のビット数はこれに限定されない。
【００８５】
加算器１４６は、レジスタ１１４ａ（Ｙ）に含まれるサブレジスタ（Ｙ０，Ｙ１，…、Ｙ３４）の値と桁上げ中間レジスタ（Ｃ０，Ｃ１，…、Ｃ３４）の値が入力される。加算器１４６の入力演算データの一方は、サブレジスタの値を連結した数（｛Ｙ３４，・・・，Ｙ１，Ｙ０｝）とする。他方は、桁上げ中間レジスタの値を対応するビット位置に配して得られる数（｛Ｃ３４，５’ｈ０，Ｃ３３，７’ｈ０，Ｃ３２，…，Ｃ２，７’ｈ０，Ｃ１，７’ｈ０，Ｃ０，８’ｈ０｝、「ｎ’ｈ０」はｎビット長の０）とする。加算器１４６から出力される加算結果は実施形態２のレジスタ１１４に格納される値と等しい。
【００８６】
言い換えると、前記第２の変換部は、前記所定数の第１のサブレジスタの記憶された各値をビットの並び順で連結した前記所定の桁数の第４の固定小数点数を生成し、前記所定数の桁上げレジスタの記憶された各値を対応するビット位置に配置した前記所定の桁数の第５の固定小数点数を生成し、前記第４の固定小数点数と前記第５の固定小数点数とを加算し、当該加算の結果を前記第２の浮動小数点数に変換して出力する。これにより、高速化のために分割した固定小数点数を適切に連結して精度を維持できる。
【００８７】
図９は、本実施の形態３にかかる浮動小数点の加算処理の流れを示すフローチャートである。図９は、上述した図４と比べ、ステップＳ２３及びＳ２４がステップＳ２３ａ、Ｓ２９及びＳ２４ａに置き換わったものである。それ以外のステップは図４と同等であるため、説明を省略する。
【００８８】
ステップＳ２３ａにおいて、加減算器１３０ａは、累算結果と左シフト後の固定小数点数を８ビットごとに加減算する。そして、加算器１４６は、８ビットごとの加減算結果と桁上げ情報を連結する（Ｓ２９）。その後、絶対値算出器１４１は、連結結果の絶対値を算出する（Ｓ２４ａ）。
【００８９】
つまり、加減算器１３０ａは、特定の第１のサブレジスタに記憶された値と、当該特定の第１のサブレジスタに対応する第２のサブレジスタに記憶された値と、当該特定の第１のサブレジスタより下位ビットにおける前記桁上げレジスタに記憶された前記桁上げ情報とを加算して、当該対応する第１のサブレジスタ及び当該対応する桁上げレジスタを更新する。これにより、繰り返されるか減算処理を実施形態２と比べてさらに高速化することができる。
【００９０】
さらに、加算器１４６を含む第２の変換部１５は、前記所定数の第１のサブレジスタの記憶された各値をビットの並び順で連結した前記所定の桁数の第４の固定小数点数を生成し、前記所定数の桁上げレジスタの記憶された各値を対応するビット位置に配置した前記所定の桁数の第５の固定小数点数を生成し、前記第４の固定小数点数と前記第５の固定小数点数とを加算し、当該加算の結果を前記第２の浮動小数点数に変換して出力する。これにより、高速化のために分割した固定小数点数を適切に連結して精度を維持できる。
【００９１】
（実施形態３の効果）
本実施形態３にかかる浮動小数点加算器１００ａは、レジスタ１１３ａと１１４ａの間での加減算器１３０ａの遅延を短くすることで、実施形態２の浮動小数点加算器１００よりも高いクロック周波数で動作する累算器を得ることができるという効果を有する。ここで、実施形態２のレジスタ１１３と１１４の間での加減算で行う処理の一部を、実施形態３ではレジスタ１１４ａと１１５の間での加算に移動させていると見なすことができる。但し、レジスタ１１４ａと１１５の間のパイプラインステージは何段のパイプラインステージに分割しても累算の演算性能に影響しないため、上述した効果を得ることが可能となっている。
【００９２】
＜その他の実施の形態＞
上述した各実施形態にかかる浮動小数点加算器は、半導体装置に搭載することができる。これにより、ベクトル演算に限らず様々な演算処理を高速化できる。
【００９３】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、ＢＤ(Blu-ray(登録商標) Disc)、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００９４】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００９５】
１  浮動小数点加算器
１１  第１の変換部
１２  第２のレジスタ
１３  加算器
１４  第１のレジスタ
１５  第２の変換部
２１  第１の浮動小数点数
２２  第２の浮動小数点数
２３  第２の固定小数点数
２４  第１の固定小数点数
１００  浮動小数点加算器
１００ａ  浮動小数点加算器
１１１  レジスタ
１１２  レジスタ
１１３  レジスタ
１１３ａ  レジスタ
１１４  レジスタ
１１４ａ  レジスタ
１１５  レジスタ
１１６  レジスタ
１２１  符号付固定小数点数化演算器
１２２  算術左バレルシフタ
１３０  加減算器
１３０ａ  加減算器
１４１  絶対値算出器
１４２  ＬＺＤ演算器
１４３  算術左バレルシフタ
１４４  丸め処理演算器
１４５  指数減算器
１４６  加算器
１５０  加減算部
１５１  加減算部
９００  浮動小数点加算器
９１１  レジスタ
９１２  レジスタ
９２  指数減算器
９３１  マルチプレクサ
９３２  マルチプレクサ
９３３  マルチプレクサ
９４  仮数右シフタ
９５  仮数加減算器
９６  ＬＺＡ演算器
９７  左シフタ
９８  丸め処理演算器
ｕｆ  仮数部
ｕｅ  指数部
ｕｓ  符号部
ｆ  仮数
ｅ  指数
ｓ  符号
Ｂｆ  仮数部
Ｂｅ  指数部
Ｂｆ’  仮数部
Ｂｅ’  指数部
Ｙｆ  仮数部
Ｙｅ  指数部
Ｌｆ  仮数
Ｇｆ  仮数
Ｇｅ  指数
Ｂ’  固定小数点数
Ｙ  固定小数点数
Ｙ’  固定小数点数
【図１】
0006410637.tif 000002
【図２】
0006410637.tif 000003
【図３】
0006410637.tif 000004
【図４】
0006410637.tif 000005
【図５】
0006410637.tif 000006
【図６】
0006410637.tif 000007
【図７】
0006410637.tif 000008
【図８】
0006410637.tif 000009
【図９】
0006410637.tif 000010
【図１０】
0006410637.tif 000011
【図１１】
0006410637.tif 000012
【図１２】
0006410637.tif 000013