(57)【要約】  複数の乗算器が演算精度モードに応じて１または２以上の乗算器毎に分割されて１または複数のグループのそれぞれに割り当てられ、各グループにおいて各乗算器が演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲である個別被乗数を乗算する乗算部と、複数の加算器が演算精度モードに応じて１または２以上の加算器毎に分割されて１または複数のグループのそれぞれに割り当てられ、各グループに割り当てられた１または２以上の加算器が当該グループに割り当てられた各乗算器による各乗算結果を加算して乗数および被乗数の積を出力する加算部とを備える演算装置を提供する。
2019189878.tif 000002
【特許請求の範囲】
【請求項１】
可変精度で乗算を実行する演算装置であって、
複数の乗算器を有し、前記複数の乗算器が演算精度モードに応じて１または２以上の乗算器毎に分割されて１または複数のグループのそれぞれに割り当てられ、各グループにおいて各乗算器が演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲である個別被乗数を乗算する乗算部と、
複数の加算器を有し、前記複数の加算器が演算精度モードに応じて１または２以上の加算器毎に分割されて前記１または複数のグループのそれぞれに割り当てられ、各グループに割り当てられた前記１または２以上の加算器が当該グループに割り当てられた各乗算器による各乗算結果を加算して前記乗数および前記被乗数の積を出力する加算部と、
演算精度モードに応じて、前記１または複数のグループのそれぞれについて、各乗算器による各乗算結果を、前記１また２以上の加算器における当該乗算結果を加えるべき桁位置へと入力させる第１接続切替器と
を備える演算装置。
【請求項２】
前記複数の乗算器のそれぞれは、前記個別乗数および前記個別被乗数を乗算して各桁の和データおよび各桁からの桁上げデータを含む前記乗算結果を出力する請求項１に記載の演算装置。
【請求項３】
前記複数の乗算器のそれぞれは、１単位ビット長の前記個別乗数および前記個別被乗数を乗算して２単位ビット長の前記乗算結果を出力し、
前記複数の加算器のそれぞれは、２単位ビット長の複数の入力データを加算して２単位ビット長の和、および前記演算精度モードに応じて上位桁への桁上りを出力する
請求項１または２に記載の演算装置。
【請求項４】
２単位ビット長以上の前記乗数および前記被乗数を乗算する少なくとも１つの演算精度モードにおいて、
前記１または複数のグループのそれぞれについて、
前記１または２以上の乗算器は、サイクル毎に、前記乗数のうち各乗算器が担当する桁範囲の前記個別乗数と、前記被乗数におけるサイクル毎に上位桁から順に１単位ビット長ずつ選択された前記個別被乗数とを入力して、サイクル毎にそれぞれの前記個別乗数および前記個別被乗数の部分積を前記乗算結果として出力し、
前記第１接続切替器は、サイクル毎に、前記乗数における最下位側の桁範囲の前記個別乗数および前記個別被乗数の前記部分積が前記１または２以上の加算器における最下位の桁範囲に対応するように、前記１または２以上の乗算器が出力するそれぞれの前記部分積をシフトして前記１または２以上の加算器に入力させて中間結果に加算させ、
前記演算装置は、前記１または複数のグループのそれぞれについて、サイクル毎に、前記中間結果を上位側に１単位ビット長シフトさせて前記１または２以上の加算器へと入力させる第２接続切替器を更に備える
請求項１から３のいずれか一項に記載の演算装置。
【請求項５】
２単位ビット長以上の少なくとも１つの演算精度モードにおいて、前記複数の乗算器および前記複数の加算器は２以上のグループに割り当てられ、
前記演算装置は、前記２以上のグループのそれぞれについて前記乗数および前記被乗数の積を、複数のサイクルを用いて演算する
請求項４に記載の演算装置。
【請求項６】
１単位ビット長の前記乗数および前記被乗数を乗算する演算精度モードにおいて、
前記複数の乗算器は、各々が１個の乗算器を含む前記複数のグループに割り当てられ、
各グループに割り当てられた乗算器は、当該グループに割り当てられた１単位ビット長の前記乗数および前記被乗数を乗算する
請求項４または５に記載の演算装置。
【請求項７】
前記加算部は、前記複数の加算器のそれぞれに対応してそれぞれ設けられ、前記中間結果における各加算器に対応する桁範囲をそれぞれ保持する複数の中間レジスタを有する請求項４から６のいずれか一項に記載の演算装置。
【請求項８】
前記複数の加算器のそれぞれは、各桁の和データおよび各桁からの桁上げデータを含む加算結果を出力する第１加算要素を含み、
前記複数の中間レジスタのそれぞれは、前記中間結果における対応する第１加算要素が出力する桁範囲の和データおよび桁上げデータを保持し、
前記加算部は、前記複数の加算器のそれぞれに対応してそれぞれ設けられる複数の第２加算要素であって、演算精度モードに応じて１または２以上の第２加算要素毎に分割されて前記１または複数のグループのそれぞれに割り当てられ、各グループにおいて１または２以上の前記第１加算要素が出力する和データおよび桁上げデータを加算して前記乗数および前記被乗数の積として出力する複数の第２加算要素を更に有する
請求項７に記載の演算装置。
【請求項９】
可変精度で乗算を実行する演算装置であって、
各々が１単位ビット長の２つの数を乗算して各桁の和データおよび各桁からの桁上がりデータを含む乗算結果を出力する複数の乗算器を有する乗算部と、
各々が前記複数の乗算器のうちの少なくとも１つの乗算器による前記乗算結果を含む少なくとも２つの入力データを加算する複数の加算器を有する加算部と、
演算精度モードに応じて、前記複数の乗算器および前記複数の加算器を、１以上の乗算器および１以上の加算器を含み互いに異なる乗数および被乗数を乗算するグループ毎に分割する分割数と、前記グループにおいて前記１以上の乗算器および前記１以上の加算器を用いて前記乗数および前記被乗数を乗算するのに用いるサイクル数とを選択するモード選択部と
を備える演算装置。
【請求項１０】
前記モード選択部は、ｎ単位ビット長（ｎは自然数）の前記乗数および前記被乗数を乗算する演算精度モードにおいて、前記複数の乗算器および前記複数の加算器を、ｎ個の乗算器およびｎ個の加算器をそれぞれ含む少なくとも１つの前記グループに分割し、
前記少なくとも１つのグループのそれぞれにおける前記ｎ個の乗算器は、前記グループ毎の前記乗数に含まれる１単位ビット長の桁範囲ずつであるｎ個の個別乗数のそれぞれと、前記被乗数に含まれる１単位ビット長の桁範囲ずつであるｎ個の個別被乗数のそれぞれとの乗算を、ｎサイクルの間、１サイクルにｎ組ずつ乗算し、
前記少なくとも１つのグループのそれぞれにおける前記ｎ個の加算器は組み合わされて、ｎサイクルの間、サイクル毎に同じグループの前記ｎ個の乗算器からの各乗算結果を、前記乗数および前記被乗数の積の中間結果における各乗算結果に応じた桁位置に加算していく、
請求項９に記載の演算装置。
【請求項１１】
請求項１から１０のいずれか一項に記載の演算装置を複数個備える演算ユニットと、
前記演算ユニットを共有する複数のプロセッサと
を備える演算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置および演算システムに関し、特に、可変精度で乗算を実行する演算装置および演算システムに関する。
【背景技術】
【０００２】
従来から、倍精度の乗算を実行する装置が知られている。たとえば、特許文献１に記載の演算装置は、２つの乗算器１２，１３と、ＡＬＵ３７と、アキュムレータ２４，２５とを備える。ＡＬＵ３７の入力部には、乗算器１２，１３の乗算結果と、アキュムレータ２４，２５の出力が与えられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２５９２７３号公報
【解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載の装置は、２つの乗算器１２，１３が最終的な乗算結果まで求めるために回路規模が大きく、その結果電力効率が悪いという問題がある。
【０００５】
さらに、近年では、１つの精度の乗算だけでなく、可変精度の乗算を小さな回路規模で実行することができる演算装置が望まれている。
【０００６】
一般に、単精度の乗算に必要なトランジスタの数は、倍精度の乗算に必要なトランジスタの数の１／４以下であり、半精度の乗算に必要なトランジスタの数は、倍精度の乗算に必要なトランジスタの数の１／１６以下である。したがって、例えば単精度と倍精度を切替えて実行するような一般的な演算装置は、回路規模としては倍精度演算１つ分、または単精度演算４つ分を実行することができるようなトランジスタ数を有する。このような一般的な演算装置では、単精度演算時に使用されるトランジスタが、倍精度演算に使用されるトランジスタの１／４以下となる。また、倍精度演算１つまたは単精度演算２つを切替可能とすることも考えられるが、その場合においても単精度演算時に使用されるトランジスタが、倍精度演算に使用されるトランジスタの１／２以下となる。つまり、このような演算装置は、倍精度演算のために大きな回路規模を有するにも係らず、単精度演算を実行するときには、演算装置内のトランジスタの３／４または１／２以上が使用されずに、無駄となる。
【０００７】
それゆえに、本発明の目的は、小さな回路規模で、複数の精度の乗算をそれぞれ効率良く実行することができる演算装置および演算システムを提供することである。
【一般的開示】
【０００８】
本発明の第１態様においては、可変精度で乗算を実行する演算装置を提供する。演算装置は、複数の乗算器を有し、複数の乗算器が演算精度モードに応じて１または２以上の乗算器毎に分割されて１または複数のグループのそれぞれに割り当てられ、各グループにおいて各乗算器が演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲である個別被乗数を乗算する乗算部を備えてよい。演算装置は、複数の加算器を有し、複数の加算器が演算精度モードに応じて１または２以上の加算器毎に分割されて１または複数のグループのそれぞれに割り当てられ、各グループに割り当てられた１または２以上の加算器が当該グループに割り当てられた各乗算器による各乗算結果を加算して乗数および被乗数の積を出力する加算部を備えてよい。演算装置は、演算精度モードに応じて、１または複数のグループのそれぞれについて、各乗算器による各乗算結果を、１また２以上の加算器における当該乗算結果を加えるべき桁位置へと入力させる第１接続切替器を備えてよい。
【０００９】
複数の乗算器のそれぞれは、個別乗数および個別被乗数を乗算して各桁の和データおよび各桁からの桁上げデータを含む乗算結果を出力してよい。
【００１０】
複数の乗算器のそれぞれは、１単位ビット長の個別乗数および個別被乗数を乗算して２単位ビット長の乗算結果を出力してよい。複数の加算器のそれぞれは、２単位ビット長の複数の入力データを加算して２単位ビット長の和、および演算精度モードに応じて上位桁への桁上りを出力してよい。
【００１１】
２単位ビット長以上の乗数および被乗数を乗算する少なくとも１つの演算精度モードにおいて、１または複数のグループのそれぞれについて、１または２以上の乗算器は、サイクル毎に、乗数のうち各乗算器が担当する桁範囲の個別乗数と、被乗数におけるサイクル毎に上位桁から順に１単位ビット長ずつ選択された個別被乗数とを入力して、サイクル毎にそれぞれの個別乗数および個別被乗数の部分積を乗算結果として出力してよい。第１接続切替器は、サイクル毎に、乗数における最下位側の桁範囲の個別乗数および個別被乗数の部分積が１または２以上の加算器における最下位の桁範囲に対応するように、１または２以上の乗算器が出力するそれぞれの部分積をシフトして１または２以上の加算器に入力させて中間結果に加算させてよい。演算装置は、１または複数のグループのそれぞれについて、サイクル毎に、中間結果を上位側に１単位ビット長シフトさせて１または２以上の加算器へと入力させる第２接続切替器を更に備えてよい。
【００１２】
２単位ビット長以上の少なくとも１つの演算精度モードにおいて、複数の乗算器および複数の加算器は２以上のグループに割り当てられてよい。演算装置は、２以上のグループのそれぞれについて乗数および被乗数の積を、複数のサイクルを用いて演算してよい。
【００１３】
１単位ビット長の乗数および被乗数を乗算する演算精度モードにおいて、複数の乗算器は、各々が１個の乗算器を含む複数のグループに割り当てられ、各グループに割り当てられた乗算器は、当該グループに割り当てられた１単位ビット長の乗数および被乗数を乗算してよい。
【００１４】
加算部は、複数の加算器のそれぞれに対応してそれぞれ設けられ、中間結果における各加算器に対応する桁範囲をそれぞれ保持する複数の中間レジスタを有してよい。
【００１５】
複数の加算器のそれぞれは、各桁の和データおよび各桁からの桁上げデータを含む加算結果を出力する第１加算要素を含んでよい。複数の中間レジスタのそれぞれは、中間結果における対応する第１加算要素が出力する桁範囲の和データおよび桁上げデータを保持してよい。加算部は、複数の加算器のそれぞれに対応してそれぞれ設けられる複数の第２加算要素であって、演算精度モードに応じて１または２以上の第２加算要素毎に分割されて１または複数のグループのそれぞれに割り当てられ、各グループにおいて１または２以上の第１加算要素が出力する和データおよび桁上げデータを加算して乗数および被乗数の積として出力する複数の第２加算要素を更に有してよい。
【００１６】
本発明の第２態様においては、可変精度で乗算を実行する演算装置を提供する。演算装置は、各々が１単位ビット長の２つの数を乗算して各桁の和データおよび各桁からの桁上がりデータを含む乗算結果を出力する複数の乗算器を有する乗算部を備えてよい。演算装置は、各々が複数の乗算器のうちの少なくとも１つの乗算器による乗算結果を含む少なくとも２つの入力データを加算する複数の加算器を有する加算部を備えてよい。演算装置は、演算精度モードに応じて、複数の乗算器および複数の加算器を、１以上の乗算器および１以上の加算器を含み互いに異なる乗数および被乗数を乗算するグループ毎に分割する分割数と、グループにおいて１以上の乗算器および１以上の加算器を用いて乗数および被乗数を乗算するのに用いるサイクル数とを選択するモード選択部を備えてよい。
【００１７】
モード選択部は、ｎ単位ビット長（ｎは自然数）の乗数および被乗数を乗算する演算精度モードにおいて、複数の乗算器および複数の加算器を、ｎ個の乗算器およびｎ個の加算器をそれぞれ含む少なくとも１つのグループに分割してよい。少なくとも１つのグループのそれぞれにおけるｎ個の乗算器は、グループ毎の乗数に含まれる１単位ビット長の桁範囲ずつであるｎ個の個別乗数のそれぞれと、被乗数に含まれる１単位ビット長の桁範囲ずつであるｎ個の個別被乗数のそれぞれとの乗算を、ｎサイクルの間、１サイクルにｎ組ずつ乗算してよい。少なくとも１つのグループのそれぞれにおけるｎ個の加算器は組み合わされて、ｎサイクルの間、サイクル毎に同じグループのｎ個の乗算器からの各乗算結果を、乗数および被乗数の積の中間結果における各乗算結果に応じた桁位置に加算していってよい。
【００１８】
本発明の第３態様においては、可変精度で乗算を実行する演算装置であって、各々が、２つの入力データの乗算結果の１段前の和信号および桁上げ信号を出力するように構成される複数の乗算器と、複数の加算器と、各々が、対応する加算器の加算結果を保持するように構成される複数のレジスタと、複数の出力端子と、演算精度モードに応じて、前記複数の乗算器から出力される複数の和信号および複数の桁上げ信号を構成する複数の１単位ビット長のデータの出力先を前記複数の加算器の複数の入力の複数のビット位置の中のいずれかに切り替えるように構成される第１の切替器と、前記演算精度モードに応じて、前記複数のレジスタに保持されている複数の加算結果を構成する複数の１単位ビット長のデータの出力先を前記複数の加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記レジスタに保持されている複数の加算結果の出力先を前記複数の出力端子のいずれかに切り替えるように構成される第２の切替器とを備える演算装置を提供する。
【００１９】
本発明の第４態様においては、可変精度で乗算を実行する演算装置であって、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第１の和信号および第１の桁上げ信号を出力するように構成される第１の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第２の和信号および第２の桁上げ信号を出力するように構成される第２の乗算器と、複数の２単位ビット長のデータの加算を実行するようにそれぞれ構成される第１および第２の加算器と、前記第１の加算器の第１の加算結果および前記第２の加算器の第２の加算結果をそれぞれ保持するように構成される第１および第２のレジスタと、第１および第２の出力端子と、演算精度モードに応じて、前記第１の乗算器から出力される前記第１の和信号および前記第１の桁上げ信号と、前記第２の乗算器から出力される前記第２の和信号および前記第２の桁上げ信号とをそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器および前記第２の加算器の複数の入力の複数のビット位置の中のいずれかに切り替えるように構成される第１の接続切替器と、前記演算精度モードに応じて、前記第１のレジスタ内の前記第１の加算結果および前記第２のレジスタ内の前記第２の加算結果をそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器および前記第２の加算器の複数の入力の複数のビット位置の中のいずれかに切替え、または前記第１のレジスタ内の前記第１の加算結果の出力先を前記第１の出力端子に切り替えるとともに前記第２のレジスタ内の前記第２の加算結果の出力先を前記第２の出力端子に切り替えるように構成される第２の接続切替器とを備える演算装置を提供する。
【００２０】
本発明の第５態様においては、可変精度で乗算を実行する演算装置であって、各々が、２つの入力データの乗算結果の１段前の和信号および桁上げ信号を出力する複数の乗算器と、各々が、加算結果の１段前の和信号および桁上げ信号を出力するように構成される複数の第１段加算器と、各々が、対応する前記第１段加算器から出力される前記和信号を保持するように構成される複数の和信号保持レジスタと、各々が、対応する前記第１段加算器から出力される前記桁上げ信号を保持するように構成される複数の桁上げ信号保持レジスタと、各々が、入力される和信号と桁上げ信号とを加算するように構成される複数の第２段加算器と、演算精度モードに応じて、前記複数の乗算器から出力される複数の和信号および桁上げ信号を構成する複数の１単位ビット長のデータの出力先を前記複数の第１段加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記複数の乗算器から出力される複数の和信号および桁上げ信号の出力先を前記複数の第２段加算器の複数の入力のいずれかに切り替えるように構成される第１の接続切替器と、前記演算精度モードに応じて、前記複数の和信号保持レジスタに保持されている複数の和信号を構成する複数の１単位ビット長のデータおよび前記複数の桁上げ信号保持レジスタに保持されている複数の桁上げ信号を構成する複数の１単位ビット長のデータの出力先を前記複数の第１段加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記複数の和信号保持レジスタに保持されている複数の和信号および前記複数の桁上げ信号保持レジスタに保持されている複数の桁上げ信号を前記複数の第２段加算器の複数の入力のいずれかに切り替えるように構成される第２の接続切替器とを備える演算装置を提供する。
【００２１】
本発明の第６態様においては、可変精度で乗算を実行する演算装置であって、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第１の和信号および第１の桁上げ信号を出力するように構成された第１の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第２の和信号および第２の桁上げ信号を出力するように構成された第２の乗算器と、複数の２単位ビット長のデータの加算結果の１段前の第３の和信号および第３の桁上げ信号を出力するように構成された第１の加算器と、複数の２単位ビット長のデータの加算結果の１段前の第４の和信号および第４の桁上げ信号を出力するように構成された第２の加算器と、前記第３の和信号、前記第３の桁上げ信号、前記第４の和信号、および前記第４の桁上げ信号をそれぞれ保持するように構成される第１〜第４のレジスタと、入力される和信号と桁上げ信号とをそれぞれ加算するように構成される第３および第４の加算器と、前記第３の加算器の加算結果および前記第４の加算器の加算結果をそれぞれ出力する第１および第２の出力端子と、演算精度モードに応じて、前記第１の乗算器から出力される前記第１の和信号および前記第１の桁上げ信号と、前記第２の乗算器から出力される前記第２の和信号および前記第２の桁上げ信号とをそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器および前記第２の加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記第１の和信号および前記第１の桁上げ信号とを前記第３の加算器へ出力するととともに前記第２の和信号および前記第２の桁上げ信号とを前記第４の加算器へ出力するように構成された第１の接続切替器と、前記演算精度モードに応じて、前記第１のレジスタ内の前記第３の和信号、前記第２のレジスタ内の前記第３の桁上げ信号、前記第３のレジスタ内の前記第４の和信号、および前記第４のレジスタ内の前記第４の桁上げ信号をそれぞれ構成する複数の１単位ビット長のデータ出力先を前記第１の加算器および前記第２の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第１のレジスタ内の前記第３の和信号および前記第２のレジスタ内の前記第３の桁上げ信号とを前記第３の加算器へ出力するととともに前記第３のレジスタ内の前記第４の和信号および前記第４のレジスタ内の前記第４の桁上げ信号とを前記第４の加算器へ出力するように構成された第２の接続切替器とを備える演算装置を提供する。
【００２２】
本発明の第７態様においては、可変精度で乗算を実行する演算装置であって、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第１の和信号および第１の桁上げ信号を出力するように構成される第１の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第２の和信号および第２の桁上げ信号を出力するように構成される第２の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第３の和信号および第３の桁上げ信号を出力するように構成される第３の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第４の和信号および第４の桁上げ信号を出力するように構成される第４の乗算器と、複数の２単位ビット長のデータの加算を実行するようにそれぞれ構成される第１〜第４の加算器と、前記第１の加算器の第１の加算結果、前記第２の加算器の第２の加算結果、前記第３の加算器の第３の加算結果、および前記第４の加算器の第４の加算結果をそれぞれ保持するように構成される第１〜第４のレジスタと、第１〜第４の出力端子と、演算精度モードに応じて、前記第１の乗算器から出力される前記第１の和信号および前記第１の桁上げ信号と、前記第２の乗算器から出力される前記第２の和信号および前記第２の桁上げ信号と、前記第３の乗算器から出力される前記第３の和信号および前記第３の桁上げ信号と、前記第４の乗算器から出力される前記第４の和信号および前記第４の桁上げ信号とをそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器、前記第２の加算器、前記第３の加算器および前記第４の加算器の複数の入力の複数のビット位置のいずれかに切り替えるように構成される第１の接続切替器と、前記演算精度モードに応じて、前記第１のレジスタ内の前記第１の加算結果、前記第２のレジスタ内の前記第２の加算結果、前記第３のレジスタ内の前記第３の加算結果、および前記第４のレジスタ内の前記第４の加算結果をそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器、前記第２の加算器、前記第３の加算器、および前記第４の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第１のレジスタ内の前記第１の加算結果の出力先を前記第１の出力端子に切り替え、かつ前記第２のレジスタ内の前記第２の加算結果の出力先を前記第２の出力端子に切り替え、かつ前記第３のレジスタ内の前記第３の加算結果の出力先を前記第３の出力端子に切り替え、かつ前記第４のレジスタ内の前記第４の加算結果の出力先を前記第４の出力端子に切り替えるように構成される第２の接続切替器とを備える演算装置を提供する。
【００２３】
本発明の第８態様においては、可変精度で乗算を実行する演算装置であって、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第１の和信号および第１の桁上げ信号を出力するように構成される第１の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第２の和信号および第２の桁上げ信号を出力するように構成される第２の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第３の和信号および第３の桁上げ信号を出力するように構成される第３の乗算器と、２つの１単位ビット長のデータの乗算結果の１段前の２単位ビット長の第４の和信号および第４の桁上げ信号を出力するように構成される第４の乗算器と、複数の２単位ビット長のデータの加算結果の１段前の第５の和信号および第５の桁上げ信号を出力するように構成された第１の加算器と、複数の２単位ビット長のデータの加算結果の１段前の第６の和信号および第６の桁上げ信号を出力するように構成された第２の加算器と、複数の２単位ビット長のデータの加算結果の１段前の第７の和信号および第７の桁上げ信号を出力するように構成された第３の加算器と、複数の２単位ビット長のデータの加算結果の１段前の第８の和信号および第８の桁上げ信号を出力するように構成された第４の加算器と、前記第５の和信号、前記第５の桁上げ信号、前記第６の和信号、前記第６の桁上げ信号、前記第７の和信号、前記第７の桁上げ信号、前記第８の和信号、および前記第８の桁上げ信号をそれぞれ保持するように構成される第１〜第８のレジスタと、入力される和信号と桁上げ信号とを加算するようにそれぞれ構成される第５〜第８の加算器と、前記第５の加算器の加算結果、前記第６の加算器の加算結果、前記第７の加算器の加算結果、および前記第８の加算器の加算結果をそれぞれ出力する第１〜第４の出力端子と、演算精度モードに応じて、前記第１の乗算器から出力される前記第１の和信号および前記第１の桁上げ信号と、前記第２の乗算器から出力される前記第２の和信号および前記第２の桁上げ信号と、前記第３の乗算器から出力される前記第３の和信号および前記第３の桁上げ信号と、前記第４の乗算器から出力される前記第４の和信号および前記第４の桁上げ信号とをそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器、前記第２の加算器、前記第３の加算器および前記第４の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第１の和信号および前記第１の桁上げ信号とを前記第５の加算器へ出力し、かつ前記第２の和信号および前記第２の桁上げ信号とを前記第６の加算器へ出力し、かつ前記第３の和信号および前記第３の桁上げ信号とを前記第７の加算器へ出力し、かつ前記第４の和信号および前記第４の桁上げ信号とを前記第８の加算器へ出力するように構成される第１の接続切替器と、前記演算精度モードに応じて、前記第１のレジスタ内の前記第５の和信号、前記第２のレジスタ内の前記第５の桁上げ信号、前記第３のレジスタ内の前記第６の和信号、前記第４のレジスタ内の前記第６の桁上げ信号、前記第５のレジスタ内の前記第７の和信号、前記第６のレジスタ内の前記第７の桁上げ信号、前記第７のレジスタ内の前記第８の和信号、および前記第８のレジスタ内の前記第８の桁上げ信号をそれぞれ構成する複数の１単位ビット長のデータの出力先を前記第１の加算器、前記第２の加算器、前記第３の加算器、および前記第４の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第１のレジスタ内の前記第５の和信号および前記第２のレジスタ内の前記第５の桁上げ信号とを前記第５の加算器へ出力し、かつ前記第３のレジスタ内の前記第６の和信号および前記第４のレジスタ内の前記第６の桁上げ信号とを前記第６の加算器へ出力し、かつ前記第５のレジスタ内の前記第７の和信号および前記第６のレジスタ内の前記第７の桁上げ信号とを前記第７の加算器へ出力し、かつ前記第７のレジスタ内の前記第８の和信号および前記第８のレジスタ内の前記第８の桁上げ信号とを前記第８の加算器へ出力するように構成された第２の接続切替器と備える演算装置を提供する。
【００２４】
本発明の第９態様においては、上述の演算装置を複数個備える演算ユニットと、演算ユニットを共有する複数のプロセッサとを備える演算システムを提供する。
【図面の簡単な説明】
【００２５】
【図１】本実施形態に係る演算装置４０５の構成を示す。
【図２】本実施形態に係る演算装置４０５の半精度演算モードにおける演算を示す。
【図３】単精度の乗数Ａ１および被乗数Ｂ１の乗算を示す。
【図４】本実施形態に係る演算装置４０５の単精度演算モードにおける演算を示す。
【図５】倍精度の乗数Ａ１および被乗数Ｂ１の乗算を示す。
【図６】本実施形態の第１変形例に係る加算器５４０および中間レジスタ５５０の構成を示す。
【図７】本実施形態の第２変形例に係る演算装置１の構成を示す。
【図８】半精度演算モードにおける乗数Ａｉ、被乗数Ｂｉ、およびこれらの積Ｃｉ（ｉ＝１〜４）を示す。
【図９】第２変形例に係る演算装置１の半精度演算モードにおける動作を示す。
【図１０】第２変形例の半精度演算モードにおける加算器４ａの入出力を示す。
【図１１】単精度演算モードにおける乗数Ａｉ、被乗数Ｂｉ、およびこれらの積Ｃｉ（ｉ＝１〜２）を示す。
【図１２】第２変形例に係る演算装置１の単精度演算モードにおける動作を示す。
【図１３】第２変形例の単精度演算モードにおける第１サイクルの加算器４ａ〜ｂの入出力を示す。
【図１４】第２変形例の単精度演算モードにおける第２サイクルの加算器４ａ〜ｂの入出力を示す。
【図１５】倍精精度演算モードにおける乗数Ａ１、被乗数Ｂ１、およびこれらの積Ｃ１を示す。
【図１６】第２変形例に係る演算装置１の単精度演算モードにおける動作を示す。
【図１７】第２変形例の倍精度演算モードにおける第１サイクルの加算器４ａ〜ｄの入出力を示す。
【図１８】第２変形例の倍精度演算モードにおける第２サイクルの加算器４ａ〜ｄの入出力を示す。
【図１９】Ｗａｌｌａｃｅ木乗算器２ａの構成を示す。
【図２０】Ｗａｌｌａｃｅ木乗算器２ａで生成されるデータを示す。
【図２１】本実施形態の第３変形例に係る演算装置１０１の構成を示す。
【図２２】第３変形例に係る演算装置１０１の半精度演算モードにおける動作を示す。
【図２３】第３変形例の半精度演算モードにおける加算器４ａの入出力を示す。
【図２４】第３変形例に係る演算装置１０１の単精度演算モードにおける動作を示す。
【図２５】第３変形例の単精度演算モードにおける第１サイクルの加算器１４ａ〜ｂの入出力を示す。
【図２６】第３変形例の単精度演算モードにおける第２サイクルの加算器１４ａ〜ｂの入出力を示す。
【図２７】第３変形例に係る演算装置１０１の倍精度演算モードにおける動作を示す。
【図２８Ａ】第３変形例の倍精度演算モードにおける第１サイクルの加算器１４ａ〜ｂの入出力を示す。
【図２８Ｂ】第３変形例の倍精度演算モードにおける第１サイクルの加算器１４ｃ〜ｄの入出力を示す。
【図２９Ａ】第３変形例の倍精度演算モードにおける第２サイクルの加算器１４ａ〜ｂの入出力を示す。
【図２９Ｂ】第３変形例の倍精度演算モードにおける第２サイクルの加算器１４ｃ〜ｄの入出力を示す。
【図３０】２個のＣＳＡを用いて桁上げ信号保留加算を実行する加算器２００の構成を示す。
【図３１】加算器２００の入力データ、途中データ、出力データを示す。
【図３２】４個のＣＳＡを用いて桁上げ信号保留加算を実行する加算器３００の構成を示す。
【図３３】加算器３００の入力データ、途中データ、出力データを表わす図である。
【図３４】８個のＣＳＡを用いて桁上げ信号保留加算を実行する加算器４００の構成を示す。
【図３５】本実施形態の第４変形例に係る演算システム１０００の構成を示す。
【発明を実施するための形態】
【００２６】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００２７】
図１は、本実施形態に係る演算装置４０５の構成を示す。演算装置４０５は、可変精度で乗算を実行する。本実施形態においては、一例として演算装置４０５は、例えば１３ビットである半精度の乗数および被乗数を乗算する半精度演算モード、例えば２６ビットである単精度の乗数および被乗数を乗算する単精度演算モード、および、例えば５２ビットである倍精度の乗数および被乗数を乗算する倍精度演算モードの３つの演算精度モードを有する。なお、説明の便宜上乗算される２つの数を「乗数」および「被乗数」と示すが、これらの間に実質的な相違はない。したがって、請求の範囲および明細書等に記載の「乗数」および「被乗数」を入れ換えた構成も、請求の範囲に係る発明の技術的範囲に属し、本明細書等に開示されたものである。
【００２８】
ここで、半精度の数を表すのに用いられるビット長（例えば１３ビット）を「１単位ビット長」と表したとすると、単精度の数は２単位ビット長となり、倍精度の数は４単位ビット長となる。乗数および被乗数の乗算は、乗数の各桁および被乗数の各桁の全ての組合せについて桁同士の乗算をした各乗算結果を適切な桁位置に加えていくことによって最終の積を得る計算であることに鑑みれば、半精度の数同士の乗算は１単位ビット長の数同士の乗算を１回、単精度の数同士の乗算は１単位ビット長の数同士の乗算を４回（２×２）、倍精度の数同士の乗算は１単位ビット長の数同士の乗算を１６回（４×４）回行うものとなる。そして、ｎ単位ビット長の数同士の乗算は、１単位ビット長の数同士の乗算をｎ×ｎ回行うものとなる。なお、１単位ビット長は、演算装置４０５の設計に応じて任意の長さであってよい。
【００２９】
本実施形態に係る演算装置４０５は、半精度演算モード、単精度演算モード、および倍精度演算モードの各演算精度モードにおいて、演算装置４０５が有する複数の乗算器を有効利用する。
【００３０】
演算装置４０５は、乗算部４１０と、加算部４３０と、モード選択部４６０と、第１接続切替器４７０と、第２接続切替器４８０とを備える。乗算部４１０は、複数の乗算器４２０、すなわち例えば本実施形態においては４つの乗算器４２０−１〜４を有する。複数の乗算器４２０は、各々が１単位ビット長の２つの数を入力し、これらを乗算して乗算結果を出力する。各乗算器４２０−ｉ（ｋ＝１，２，３，４）は、１単位ビット長の入力データＩＮｉｋ０およびＩＮｉ１を入力し、２単位ビット長の乗算結果を出力する。
【００３１】
加算部４３０は、複数の加算器４４０と、複数の中間レジスタ４５０とを有する。本実施形態においては、加算部４３０は、一例として４つの加算器４４０−１〜４と、４つの中間レジスタ４５０−１〜４とを有する。
【００３２】
複数の加算器４４０は、各々が複数の乗算器４２０−１〜４のうちの少なくとも１つの乗算器４２０による乗算結果を含む少なくとも２つの入力データを加算する。各加算器４４０−ｉ（ｉ＝１，２，３，４）は、２単位ビット長の複数の入力データを加算して２単位ビット長の和、および演算精度モードに応じて上位桁への桁上りを出力する。ここで、加算器４４０は、乗算器４２０と同数設けられてよく、乗算器４２０の出力データと同じビット長（例えば２単位ビット長）の入力データを入力可能であってよい。
【００３３】
複数の中間レジスタ４５０−ｉ（ｉ＝１，２，３，４）は、複数の加算器４４０−１〜４のそれぞれに対応してそれぞれ設けられる。各中間レジスタ４５０は、対応する加算器４４０が出力する加算結果を保持する。
【００３４】
モード選択部４６０は、演算装置４０５が動作すべき演算精度モードを入力し、演算精度モードに応じて演算装置４０５の各部を制御する。ここで、モード選択部４６０は、演算装置４０５に接続されたプロセッサ等から演算精度モードの指定を受けて、指定された演算精度モードで動作するように演算装置４０５の各部を動的に制御してもよく、設定レジスタ等に設定された演算精度モードを受けて、その演算精度モードで固定的に動作するように演算装置４０５の各部を制御してもよい。
【００３５】
モード選択部４６０は、演算精度モードに応じて、複数の乗算器４２０および複数の加算器４４０を、１以上の乗算器４２０および１以上の加算器４４０を含むグループ毎に分割する分割数を選択する。これらの１または複数のグループは、互いに異なる乗数および被乗数を乗算するために用いられる。このようなグループ分割により、複数の乗算器４２０は、演算精度モードに応じて１または２以上の乗算器４２０毎に分割されて１または複数のグループのそれぞれに割り当てられる。そして、各グループにおいて、各乗算器４２０は、演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲（例えば１単位ビット長の桁範囲）である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲（例えば１単位ビット長の桁範囲）である個別被乗数を乗算する。
【００３６】
また、モード選択部４６０は、演算精度モードに応じて、グループにおいて１以上の乗算器４２０および１以上の加算器４４０を用いて乗数および被乗数を乗算するのに用いるサイクル数を選択する。ここで、上記のグループ分割により、複数の加算器４４０は、演算精度モードに応じて１または２以上の加算器４４０に分割されて１または複数のグループのそれぞれに割り当てられる。そして、各グループに割り当てられた１または２以上の加算器４４０は、当該グループに割り当てられた各乗算器４２０による各乗算結果を加算する。各グループに割り当てられた１または２以上の加算器４４０は、演算精度モードに応じて選択したサイクル数の間、各乗算結果を加算していく。各グループの１または２以上の加算器４４０に対応する１または２以上の中間レジスタ４５０は、サイクル毎の加算結果である中間結果における、各加算器４４０に対応する桁範囲をそれぞれ保持する。これにより、各グループに割り当てられた１または２以上の加算器４４０は、最終的に乗数および被乗数の積を得て、これを出力する。
【００３７】
本実施形態に係るモード選択部４６０は、半精度演算モードにおいては、４つの乗算器４２０および４つの加算器４４０を、１つの乗算器４２０および１つの加算器４４０を含む４つのグループに分割し、互いに異なりうる４組の乗数および被乗数の乗算を、４つのグループで並列に行う。
【００３８】
また、モード選択部４６０は、単精度演算モードにおいては、４つの乗算器４２０および加算器４４０を、２つの乗算器４２０および２つの加算器４４０を含む２つのグループに分割し、互いに異なりうる２組の乗数および被乗数の乗算を、２つのグループで並列に行う。この場合、各グループは、１サイクルに１単位ビット長の乗算を２つ実行することで、２サイクルを用いて１単位ビット長の乗算を４回行う単精度の乗算を実行することが可能となる。
【００３９】
また、モード選択部４６０は、倍精度演算モードにおいては、４つの乗算器４２０および加算器４４０を１つのグループとし、１組の乗数および被乗数の乗算を１つのグループで行う。この場合、グループは、１サイクルに１単位ビット長の乗算を４つ実行することで、４サイクルを用いて１単位ビット長の乗算を１６回行う倍精度の乗算を実行することが可能となる。
【００４０】
第１接続切替器４７０は、モード選択部４６０の制御を受けて、演算精度モードに応じて、各乗算器４２０が出力する各乗算結果を各加算器４４０の各入力データにおけるどの桁位置へと伝送するかを切り替える。第１接続切替器４７０は、演算精度モードに応じて、１または複数のグループのそれぞれについて、各乗算器４２０による各乗算結果を、グループ内の１また２以上の加算器４４０における当該乗算結果を加えるべき桁位置へと入力させる。
【００４１】
第２接続切替器４８０は、モード選択部４６０の制御を受けて、演算精度モードに応じて、１または複数のグループのそれぞれについて、サイクル毎に、グループ内の２以上の中間レジスタ４５０に保持された中間結果をシフトして、グループ内の２以上の加算器４４０へと入力させる。これにより、演算装置４０５は、各グループについて、サイクル毎に、上位側（または下位側）から下位側（または上位側）へと乗算器４２０毎の乗算結果を算出し、各サイクルにおいて乗算器４２０毎の乗算結果をグループの中間結果の下位側（または上位側）に加え、次のサイクルで中間結果を上位側（または下位側）にシフトしていくことによって、乗数および被乗数の積における適切な位置に各乗算結果を加えることができる。
【００４２】
図２は、本実施形態に係る演算装置４０５の半精度演算モードにおける演算を示す。半精度演算モードにおいて、演算装置４０５は、半精度、すなわち１単位ビット長の４組の乗数Ａｉおよび被乗数Ｂｉ（ｉ＝１，２，３，４）をそれぞれ乗算して、１サイクルで４組の積Ｃｉを出力する。
【００４３】
半精度演算ノードにおいて、複数の乗算器４２０は、各々が１個の乗算器４２０を含む複数のグループに割り当てられる。本実施例においては、乗算器４２０−ｉ（ｉ＝１，２，３，４）は、４つのグループに１つずつ割り当てられる。各乗算器４２０−ｉは、そのグループに割り当てられた１単位ビット長の乗数Ａｉおよび被乗数Ｂｉを入力データＩＮｉ０およびＩＮｉ１として入力し、これらを乗算して２単位ビット長の積Ｃｉを出力する。
【００４４】
半精度演算モードにおいて、第１接続切替器４７０は、各乗算器４２０−ｉの乗算結果である積Ｃｉを、各乗算器４２０−ｉに対応する加算器４４０−ｉに入力する。各加算器４４０−ｉは、例えば他の入力データとして値０を入力して積Ｃｉに加える等により、積Ｃｉを変更せずに各中間レジスタ４５０−ｉに格納する。第２接続切替器４８０は、各中間レジスタ４５０−ｉに格納された積Ｃｉを最終的な乗算結果ＯＵＴｉとして出力する。
【００４５】
図３は、単精度、すなわち２単位ビット長の乗数Ａ１および被乗数Ｂ１の乗算を示す。乗数Ａ１は、各々１単位ビット長の桁範囲である上位側の個別乗数Ａ１０および下位側の個別乗数Ａ１１に分けることができる。また、被乗数Ｂ１は、同様に上位側の個別乗数Ｂ１０および下位側の個別乗数Ｂ１１に分けることができる。ここで個別乗数および個別被乗数は、乗数および被乗数を、各乗算器４２０に対して入力可能なビット長の桁範囲毎に分割した数である。
【００４６】
乗数Ａ１および被乗数Ｂ１の乗算結果は、Ａ１０およびＢ１０の乗算、Ａ１１およびＢ１０の乗算、Ａ１０およびＢ１１の乗算、並びに、Ａ１１およびＢ１１の乗算の４つの乗算結果を、図示したようにそれぞれ適切な桁位置で加算することによって計算することができる。
【００４７】
図４は、本実施形態に係る演算装置４０５の単精度演算モードにおける演算を示す。単精度演算モードにおいて、演算装置４０５は、単精度、すなわち２単位ビット長の２組の乗数Ａｉおよび被乗数Ｂｉ（ｉ＝１，２）をそれぞれ並行して乗算して、２サイクルで２組の積Ｃｉを出力する。
【００４８】
単精度演算モードにおいて、複数の乗算器４２０および加算器４４０は、各々が２個の乗算器４２０および２個の加算器４４０を含む複数のグループに割り当てられる。本実施例においては、乗算器４２０−１〜２および加算器４４０−１〜２が第１グループに割り当てられ、乗算器４２０−３〜４および加算器４４０−３〜４が第２グループに割り当てられる。演算装置４０５は、第ｉグループに対する２単位ビット長の乗数Ａｉおよび被乗数Ｂｉを入力し、これらを乗算して第ｉグループに対する４単位ビット長の積Ｃｉを出力する。第１グループおよび第２グループの動作は、割り当てられる乗算器４２０、加算器４４０、および中間レジスタ４５０が異なる他は同様であるから、以下第１グループの動作を中心に説明する。
【００４９】
単精度演算モードにおいて、演算装置４０５は、各グループにおいて図３に示した乗算方法を２サイクルで実現する。第１サイクルにおいて、演算装置４０５は、個別乗数Ａ１０およびＡ１１のそれぞれと、個別被乗数Ｂ１０との乗算およびこれに付随する加算を行う。
【００５０】
第１サイクルにおいて、乗算器４２０−１は入力ＩＮ１０にＡ１０、入力ＩＮ１１にＢ１０を入力し、これらの積である部分積Ａ１０×Ｂ１０を出力する。乗算器４２０−２は入力ＩＮ２０にＡ１１、入力ＩＮ２１にＢ１０を入力し、これらの積である部分積Ａ１１×Ｂ１０を出力する。
【００５１】
加算器４４０−１および加算器４４０−２は、組み合わされて４単位ビット長の加算器（「加算器Ｑ」と示す。）として機能する。４単位ビット長の加算における加算器４４０−２から加算器４４０−１への桁上がりは、例えば桁上げ先見回路等によって生成され、加算器４４０−１へと供給されてよい。第１接続切替器４７０は、部分積Ａ１０×Ｂ１０および部分積Ａ１１×Ｂ１０のうち最下位側の部分積Ａ１１×Ｂ１０が加算器Ｑの最下位側の桁範囲に対応するように、部分積Ａ１０×Ｂ１０および部分積Ａ１１×Ｂ１０をシフトして加算器Ｑに入力させる。すなわち、第１接続切替器４７０は、部分積Ａ１１×Ｂ１０は、図中２および３と示した桁範囲へとシフトして加算器Ｑに入力させる。部分積Ａ１０×Ｂ１０は部分積Ａ１１×Ｂ１０よりも１単位ビット長分上位側に位置するので、第１接続切替器４７０は、部分積Ａ１０×Ｂ１０を、図中１および２と示した桁範囲へとシフトして加算器Ｑに入力させる。この結果、加算器Ｑは、最下位の１単位ビット長の桁範囲３に部分積Ａ１１×Ｂ１０の下位１単位ビット長の桁範囲、最下位から１単位ビット長分上位側の桁範囲２に部分積Ａ１０×Ｂ１０の下位１単位ビット長の桁範囲および部分積Ａ１１×Ｂ１０の上位１単位ビット長の桁範囲、最下位から２単位ビット長分上位側の桁範囲１に部分積Ａ１０×Ｂ１０の上位１単位ビット長の桁範囲をそれぞれ入力して加算し、桁範囲１〜３が乗数Ａ１および個別被乗数Ｂ１０の積である部分積Ａ１×Ｂ１０となる中間結果を出力する。加算器Ｑは、この部分積Ａ１×Ｂ１０を中間レジスタ４５０−１〜２に格納する。
【００５２】
第２サイクルにおいて、第２接続切替器４８０は、中間レジスタ４５０−１〜２に格納された中間結果である部分積Ａ１×Ｂ１０を１単位ビット長分上位側にシフトして加算器Ｑに供給する。乗算器４２０−１〜２および第１接続切替器４７０は、第１サイクルと同様にして部分積Ａ１０×Ｂ１１および部分積Ａ１１×Ｂ１１を算出し、これらの部分積を、最下位側の部分積Ａ１１×Ｂ１１が加算器Ｑの最下位側の桁範囲に対応するように加算器Ｑに入力させる。加算器Ｑは、第２接続切替器４８０によってシフトされた部分積Ａ１×Ｂ１０と、第２サイクルに算出された部分積Ａ１０×Ｂ１１およびＡ１１×Ｂ１１とを、桁範囲が正しく対応付けられた状態で入力して加算し、積Ａ１×Ｂ１＝Ｃ１を出力する。中間レジスタ４５０−１〜２は積Ｃ１を保持し、第２接続切替器４８０は、中間レジスタ４５０−１〜２に保持された積Ｃ１を第３サイクル以降にＯＵＴ１〜２として出力する。
【００５３】
図５は、倍精度、すなわち４単位ビット長の乗数Ａ１および被乗数Ｂ１の乗算を示す。乗数Ａ１は、上位側から順に各々１単位ビット長の個別乗数Ａ１０〜Ａ１３に分けられる。被乗数Ｂ１は、上位側から順に各々１単位ビット長の個別被乗数Ｂ１０〜Ｂ１３に分けられる。
【００５４】
乗数Ａ１および被乗数Ｂ１の乗算結果は、個別乗数Ａ１０〜Ａ１３と、個別被乗数Ｂ１０〜Ｂ１３との全組合せ（１６組）の間の乗算結果をそれぞれ適切な桁位置で加算することによって計算することができる。ここで、最下位側からｍ単位ビット長分上位側にある個別乗数と、最下位側からｎ単位ビット長分上位側にある個別被乗数との乗算結果は、最下位側からｍ＋ｎ単位ビット長分上位側の桁位置において中間結果に加算される。
【００５５】
倍精度演算モードにおいて、演算装置４０５は、倍精度、すなわち４単位ビット長の乗数Ａ１およびＢ１を４サイクルで乗算して、積Ｃ１を出力する。倍精度モードにおいては、複数の乗算器４２０および加算器４４０は、１つのグループに割り当てられる。
【００５６】
第１サイクルにおいて、乗算器４２０−１〜４は、Ａ１０〜Ａ１３をＩＮ１０〜ＩＮ４０に、Ｂ１０をＩＮ１１〜ＩＮ４１のそれぞれに入力し、Ａ１０〜Ａ１３のそれぞれと、Ｂ１０との積である部分積Ａ１０×Ｂ１０、Ａ１１×Ｂ１０、Ａ１２×Ｂ１０、およびＡ１３×Ｂ１０を出力する。
【００５７】
加算器４４０−１〜４は、組み合わされて８単位ビット長の加算器（「加算器Ｏ」と示す。）として機能する。２単位ビット長の加算における加算器４４０−ｉから加算器４４０−（ｉ−１）への桁上がりは、例えば桁上げ先見回路等によって生成され、加算器４４０−（ｉ−１）へと供給されてよい。単精度演算モードと同様に、第１接続切替器４７０は、部分積Ａ１０×Ｂ１０〜Ａ１３×Ｂ１０のうち最下位側の部分積Ａ１３×Ｂ１０が加算器Ｏの最下位側の桁範囲に対応するように、部分積Ａ１０×Ｂ１０〜Ａ１３×Ｂ１０をシフトして加算器Ｏに入力させる。この結果、加算器Ｏは、最下位側の桁範囲６〜７に部分積Ａ１３×Ｂ１０を、最下位から１単位ビット長分上位側の桁範囲５〜６に部分積Ａ１２×Ｂ１０を、最下位から２単位ビット長分上位側の桁範囲４〜５に部分積Ａ１１×Ｂ１０を、最下位から１単位ビット長分上位側の桁範囲３〜４に部分積Ａ１０×Ｂ１０をそれぞれ入力して加算し、桁範囲３〜７が乗数Ａ１および個別被乗数Ｂ１０の積である部分積Ａ１×Ｂ１０となる中間結果を出力する。加算器Ｏは、この部分積Ａ１×Ｂ１０を中間レジスタ４５０−１〜４に格納する。
【００５８】
第２サイクルにおいて、第２接続切替器４８０は、中間レジスタ４５０−１〜４に格納された中間結果を１単位ビット長分上側にシフトして加算器Ｏに供給する。乗算器４２０−１〜４および第１接続切替器４７０は、第１サイクルと同様にして部分積Ａ１０×Ｂ１１〜Ａ１３×Ｂ１１を算出し、これらの部分積を、最下位側の部分積Ａ１３×Ｂ１１が加算器Ｏの最下位側の桁範囲に対応するように加算器Ｏに入力させる。加算器Ｏは、第２接続切替器４８０によってシフトされた部分積Ａ１×Ｂ１０と、第２サイクルに算出された部分積Ａ１０×Ｂ１１〜Ａ１３×Ｂ１１とを、桁範囲が正しく対応付けられた状態で入力して加算して、中間結果を出力する。加算器Ｏは、この中間結果を中間レジスタ４５０−１〜４に格納する。
【００５９】
第３〜４サイクルにおいても、演算装置４０５は、第２サイクルと同様にして、中間レジスタ４５０−１〜４に格納された中間結果を１単位ビット長分上側にシフトした値と、部分積Ａ１０×Ｂ１２〜Ａ１３×Ｂ１２（第３サイクルの場合）または部分積Ａ１０×Ｂ１３〜Ａ１３×Ｂ１３（第４サイクルの場合）とを加算して中間レジスタ４５０−１〜４に格納する。これにより、第４サイクルにおいて、中間レジスタ４５０−１〜４は積Ｃ１を格納する。第２接続切替器４８０は、中間レジスタ４５０−１〜４に保持された積Ｃ１を第５サイクル以降にＯＵＴ１〜４として出力する。
【００６０】
以上に示したように、演算装置４０５は、上記の単精度演算モードおよび倍精度演算モードのような、２単位ビット長以上の乗数および被乗数を乗算する少なくとも１つの演算精度モードにおいて、複数の乗算器４２０、複数の加算器４４０、および複数の中間レジスタ４５０を１または複数のグループに分割し、各グループが並行して複数サイクルを用いてグループ毎の乗数および被乗数の積を算出する。各グループにおいて、１または２以上の乗算器４２０は、サイクル毎に、乗数のうち各乗算器４２０が担当する桁範囲の個別乗数と、被乗数におけるサイクル毎に上位桁から順に１単位ビット長ずつ選択された個別被乗数とを入力して、サイクル毎にそれぞれの個別乗数および個別被乗数の部分積を乗算結果として出力する。第１接続切替器４７０は、サイクル毎に、乗数における最下位側の桁範囲の個別乗数および個別被乗数の部分積が１または２以上の加算器４４０における最下位の桁範囲に対応するように、１または２以上の乗算器４２０が出力するそれぞれの部分積をシフトして１または２以上の加算器４４０に入力させて中間結果に加算させる。第２接続切替器４８０は、サイクル毎に、中間結果を上位側に１単位ビット長シフトさせて１または２以上の加算器４４０−１〜４へと入力させる。
【００６１】
上記の半精度演算モードのような、１単位ビット長の演算精度モードにおいて、複数の乗算器４２０は、１個ずつの乗算器４２０を含む複数のグループに割り当てられる。そして、演算装置４０５は、複数のグループのそれぞれについて乗数および被乗数の積を１サイクルで演算する。これにより、演算装置４０５は、複数の乗算器４２０のそれぞれで別々の乗算を行うことで、複数の乗算器４２０を有効利用することができる。
【００６２】
上記の単精度演算モードのような、２単位ビット長以上の少なくとも１つの演算精度モードにおいて、複数の乗算器４２０および複数の加算器４４０は、２以上のグループに割り当てられる。そして、演算装置４０５は、２以上のグループのそれぞれについて乗数および被乗数の積を、複数のサイクルを用いて演算する。これにより、演算装置４０５は、複数の乗算器４２０を複数のグループに分割し、サイクル数を増やして個別乗数および個別被乗数の乗算結果を必要数得ることにより、より高精度の演算精度モードにおいても複数の乗算器４２０を有効活用することができる。
【００６３】
上記の倍精度演算モードのような、２単位ビット長以上の少なくとも１つの演算精度モードにおいて、複数の乗算器４２０および複数の加算器４４０は、１つのグループに割り当てられる。そして、演算装置４０５は、１つのグループにおいて乗数および被乗数の積を、複数のサイクルを用いて演算する。これにより、演算装置４０５は、複数の乗算器４２０を１つのグループにまとめ、サイクル数を増やして個別乗数および個別被乗数の乗算結果を必要数得ることにより、さらに高精度の演算精度モードにおいても複数の乗算器４２０を有効活用することができる。
【００６４】
本実施形態においては、モード選択部４６０は、ｎ単位ビット長（ｎは自然数）の乗数および被乗数を乗算する演算精度モードにおいて、複数の乗算器４２０および複数の加算器４４０を、ｎ個の乗算器４２０およびｎ個の加算器４４０をそれぞれ含む少なくとも１つのグループに分割する。例えば、半精度演算モード（ｎ＝１）においては、モード選択部４６０は、全体で４個の乗算器４２０（および４個の加算器４４０）を、１個の乗算器４２０（および１個の加算器４４０）をそれぞれ含む４つのグループに分割する。単精度演算モード（ｎ＝２）においては、モード選択部４６０は、全体で４個の乗算器４２０および４個の加算器４４０を、２個の乗算器４２０および２個の加算器４４０をそれぞれ含む２つのグループに分割する。倍精度演算モード（ｎ＝４）においては、モード選択部４６０は、全体で４個の乗算器４２０および４個の加算器４４０を、４個の乗算器４２０および４個の加算器４４０を含む１つのグループに分割する（割り当てる）。
【００６５】
そして、各グループにおけるｎ個の乗算器４２０は、グループ毎の乗数に含まれる１単位ビット長の桁範囲ずつであるｎ個の個別乗数のそれぞれと、被乗数に含まれる１単位ビット長の桁範囲ずつであるｎ個の個別被乗数のそれぞれとの乗算を、ｎサイクルの間、１サイクルにｎ組ずつ乗算する。各グループにおけるｎ個の加算器４４０は組み合わされて、ｎサイクルの間、サイクル毎に同じグループのｎ個の乗算器４２０からの各乗算結果を、乗数および被乗数の積の中間結果における各乗算結果に応じた桁位置に加算していく。
【００６６】
ここで、ｎ単位ビット長の乗数および被乗数を乗算する演算精度モードにおいて、グループにｎ未満の乗算器４２０を割り当てたとしても、グループ内の加算器４４０は、組み合わされて２ｎ単位ビット長の加算をする必要があるから、１サイクルで加算をするためにはグループにｎ個の加算器４４０を設ける必要がある。逆に、ｎ単位ビット長の乗数および被乗数を乗算する演算モードにおいて、グループにｎを越える乗算器４２０を割り当てた場合、１サイクルで加算をするためにはグループにｎ個の加算器４４０を設ければ十分であるが、より多くの乗算結果を加算する必要があるので加算器４４０により多くの入力を設ける必要がある。これに対し、本実施形態の構成によれば、複数の乗算器４２０に加えて加算器４４０も有効活用することができる。なお、加算器４４０の有効活用を重視しない場合には、モード選択部４６０は、他のグループ分割および異なるサイクル数での演算を行うようにしてもよい。
【００６７】
また、本実施形態においては、第１接続切替器４７０は、各乗算器４２０からの乗算結果を１または２以上の加算器４４０の下位側の桁範囲に入力し、第２接続切替器４８０は、中間結果を上位側にシフトする構成をとる。これに代えて、第１接続切替器４７０は、各乗算器４２０からの乗算結果を１または２以上の加算器４４０の上位側の桁範囲に入力し、第２接続切替器４８０は、中間結果を下位側にシフトする構成をとってもよい。また、演算装置４０５は、第２接続切替器４８０を備えない構成を採用してもよく、この場合に第１接続切替器４７０は各乗算結果を、最終的な積における対応する桁範囲に加算できるようにサイクル毎に接続を切り替えるようにしてもよい。
【００６８】
なお、本実施形態に係る演算装置４０５は、半精度演算モード、単精度演算モード、および倍精度演算モードの３つの演算精度モードを備える。これに代えて演算装置４０５は、任意の演算精度モードを備えてよい。また、演算装置４０５は、１単位ビット長の２のべき乗倍のビット長を有する数に応じた各演算モードを備える。演算装置４０５は、１単位ビット長の２のべき乗倍以外のビット長を有する数（例えば３単位ビット長等）に応じた演算モードを１または複数備えてもよい。このような演算モードにおいて、演算装置４０５は、一部の乗算器４２０および加算器４４０をアイドル状態としてもよい。また、演算装置４０５は、２のべき乗倍となる個数の乗算器４２０、加算器４４０、および中間レジスタ４５０を有するのに代えて、２のべき乗倍とならない個数（例えば６個）の乗算器４２０、加算器４４０、および中間レジスタ４５０を有する構成をとってもよい。
【００６９】
図６は、本実施形態の第１変形例に係る加算器５４０および中間レジスタ５５０の構成を示す。第１変形例は、主に、図１から５に示した演算装置４０５における各加算器４４０を加算器５４０に、各中間レジスタ４５０を中間レジスタ５５０に変更したものであるから、以下演算装置４０５からの相違点を除いて説明を省略する。
【００７０】
第１変形例においては、図１の各加算器４４０による加算を、桁上げ保存加算器（ＣＳＡ：Ｃａｒｒｙ  Ｓａｖｅ  Ａｄｄｅｒ、「桁上げ保留加算器」とも示す。）を含む加算器５４０によって行う。加算器５４０は、第１加算要素５４２と、第２加算要素５４４とを含む。
【００７１】
第１加算要素５４２は、第１接続切替器４７０を介して入力される１または複数の乗算器４２０からの１または複数の乗算結果、および第２接続切替器４８０を介して入力される中間結果における当該加算器５４０に対応する桁範囲等の各入力データを加算して、各桁の和データおよび各桁からの桁上げデータを含む加算結果を出力するＣＳＡである。
【００７２】
第２加算要素５４４は、各加算器５４０に対応して設けられる。演算精度モードに応じて複数の加算器５４０が１または２以上の加算器５４０毎に分割されるのに伴って、複数の第２加算要素５４４は、１または２以上の第２加算要素５４４毎に分割されて１または複数のグループのそれぞれに割り当てられる。第２加算要素５４４は、各グループにおいて１または２以上の第１加算要素５４２が出力する和データおよび桁上げデータを加算して乗数および被乗数の積として出力する。
【００７３】
より具体的には、第２加算要素５４４は、中間レジスタ５５０に保持された和データおよび桁上げデータを加算してＯＵＴｘ（ｘ＝１，２，３，４）として出力する。第２加算要素５４４は、各桁からの桁上がりを上位桁に加算して桁上がりを反映した和を出力する、桁上げ先見加算器および桁上げ伝搬加算器等の加算器である。第２加算要素５４４は、モード選択部４６０によるグループ分割に応じて、必要によりグループ内の下位側の第２加算要素５４４からの桁上げを受け取って加算し、および必要によりグループ内の上位側の第２加算要素５４４へと加算結果の桁上がりを伝搬させる。
【００７４】
中間レジスタ５５０は、対応する第１加算要素５４２が出力する桁範囲の和データおよび桁上げデータを保持する。中間レジスタ５５０は、保持している和データおよび桁上げデータを第２加算要素５４４へと出力する。本変形例において、中間レジスタ５５０は、保持している和データおよび桁上げデータを第２加算要素５４４を介さずに第２接続切替器４８０経由で１または２以上の第１加算要素５４２へと供給する。これにより、本変形例に係る演算装置４０５は、最終的に乗数および被乗数の積を算出し終えるまでの各サイクルにおいて、桁上がりを反映した和を算出する必要がなくなるので、中間結果を算出する回路における回路遅延を低減することができる。
【００７５】
また、演算装置４０５は、複数の乗算器４２０のそれぞれとして、個別乗数および個別被乗数を乗算して各桁の和データおよび各桁からの桁上げデータを含む乗算結果を出力する、ウォレス木（Ｗａｌｌｅｃｅ  ｔｒｅｅ）を用いた乗算器を用いてもよい。各乗算器４２０および各加算器５４０としてＣＳＡおよびウォレスツリー乗算器を用いることにより、演算装置４０５は、回路遅延を低減し、１サイクルに要する処理時間を短縮することができる。
【００７６】
以下に、他の変形例について、図面を参照して説明する。なお、以下に示す変形例は、図１〜６に示した実施形態またはその第１変形例と同一または類似の構成および機能を有するので、相違点を除いて説明を省略する場合がある。
【００７７】
［第２変形例］
図７は、第２変形例の演算装置１の構成を表わす。
【００７８】
この演算装置１は、可変精度で乗算を実行する。演算装置１は、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄ（乗算器４２０−１〜４に対応）と、第１の接続切替器２０（第１接続切替器４７０に対応）と、加算器４ａ〜４ｄ（加算器４４０−１〜４に対応）と、レジスタ５ａ〜５ｄ（中間レジスタ４５０−１〜４に対応）と、第２の接続切替器３０（第２接続切替器４８０に対応）と、出力端子ＯＰ１〜ＯＰ４と、スイッチ９ｂ，９ｃ，９ｄとを備える。
【００７９】
演算装置１は、８個の入力（ＩＮ１〜ＩＮ８）を受けて、４個の出力（ＯＵＴ１〜ＯＵＴ４）を出力する。入力ＩＮ１〜ＩＮ８は、１単位ビット長（１３ビット）のデータであり、出力ＯＵＴ１〜ＯＵＴ４は、２単位ビット長（２６ビット）である。
【００８０】
Ｗａｌｌａｃｅ木乗算器２ａは、入力データＩＮ１と入力データＩＮ２とを受けて、Ｗａｌｌａｃｅ木に基づいて、桁上がり保留加算を複数回実行することによって、入力データＩＮ１と入力データＩＮ２との乗算結果の１段前の２６ビットの和信号Ｄおよび桁上げ信号Ｅとを出力する。Ｗａｌｌａｃｅ木乗算器２ｂ〜２ｄは、入力データおよび出力する信号が本図のように相違する他はＷａｌｌａｃｅ木乗算器２ａと同様である。
【００８１】
加算器４ａ〜４ｄは、それぞれ、複数の２６ビット長のデータの加算を実行する。
レジスタ５ａ〜５ｄは、それぞれ対応する加算器４ａ〜４ｄの加算結果を保持する。
【００８２】
第１の接続切替器２０は、演算精度モードに応じて、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄから出力される和信号Ｄ、Ｆ、Ｈ、Ｊ、および桁上げ信号Ｅ、Ｇ、Ｉ、Ｋをそれぞれ構成する上位１３ビットのデータ、下位１３ビットのデータの出力先を加算器４ａ〜４ｄの複数の入力の複数のビット位置（下位半分のビット位置または上位半分のビット位置）の中のいずれかに切り替える。第１の接続切替器２０は、スイッチおよびシフタを有し、これらを制御することによって、上述の切替を実行する。
【００８３】
第２の接続切替器３０は、演算精度モードに応じて、レジスタ５ａ〜５ｄ内の複数の加算結果をそれぞれ構成する上位１３ビットのデータ、下位１３ビットのデータの出力先を加算器４ａ〜４ｄの複数の入力の複数のビット位置（下位半分のビット位置または上位半分のビット位置）の中のいずれかに切り替え、またはレジスタ５ａ〜５ｄ内の加算器４ａ〜４ｄの加算結果の出力先を出力端子ＯＰ１〜４に切り替える。第２の接続切替器３０は、スイッチおよびシフタを有し、これらを制御することによって、上述の切替を実行する。
【００８４】
スイッチ９ｂは、加算器４ｂから加算器４ａへ桁上りビットを送るか否かを切り替える。スイッチ９ｃは、加算器４ｃから加算器４ｂへ桁上りビットを送るか否かを切り替える。スイッチ９ｄは、加算器４ｄから加算器４ｃへ桁上りビットを送るか否かを切り替える。
【００８５】
演算装置１は、半精度演算モード、単精度演算モード、および倍精度演算モードの複数の演算精度モードで動作する。以下では、各演算モードでの動作を説明する。
【００８６】
（半精度演算モード）
半精度演算モードでは、乗数および被乗数は、１３ビットであり、積は、２６ビットである。半精度演算モードでは、１サイクルで乗算が実行される。半精度演算モードでは、スイッチ９ｂ〜９ｄは、オフとなる。
【００８７】
図８は、半精度演算モード時の第ｉの乗数Ａｉ、第ｉの被乗数Ｂｉ、第ｉの積Ｃｉを表わす（ｉ＝１，２，３，４）。図９は、第２変形例の演算装置１の半精度演算モードの動作を説明する。
【００８８】
演算装置１は、第ｉの乗数Ａｉと第ｉの被乗数Ｂｉとを乗算して、第ｉの積Ｃｉを出力する。Ｗａｌｌａｃｅ木乗算器２ａは、第１の乗数Ａ１の全１３ビットと、第１の被乗数Ｂ１の全１３ビットとを受けたときに、和信号Ｄおよび桁上げ信号Ｅを出力する。Ｗａｌｌａｃｅ木乗算器２ｂ〜２ｄは、入力および出力が本図のように相違する他はＷａｌｌａｃｅ木乗算器２ａと同様に動作する。
【００８９】
第１の接続切替器２０によって、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄのそれぞれの出力（２６ビットの和信号および２６ビットの桁上げ信号）が、加算器４ａ〜４ｄのうち対応する加算器に送られる。
【００９０】
図１０は、第２変形例の半精度演算モードにおける加算器４ａの入力および出力を表わす。加算器４ａは、第１の入力の全２６ビットとして和信号Ｄの全２６ビット｛ｄ２５−ｄ０｝を、第２の入力の全２６ビットとして桁上げ信号Ｅの全２６ビット｛ｅ２５−ｅ０｝をそれぞれ受ける。加算器４ａの加算結果Ｌのうちの下位２６ビット｛ｌ２５−ｌ０｝がレジスタ５ａに送られる。加算器４ｂ〜４ｄは、入力および出力が本図のように相違する他は加算器４ａと同様に動作する。
【００９１】
第２の接続切替器３０は、レジスタ５ａ〜ｄ内のデータの出力先を出力端子ＯＰ１〜４に切替える。これによって、出力端子ＯＰ１〜４から、第１〜４の積Ｃ１〜４が出力される。
【００９２】
（単精度演算モード）
単精度演算モードでは、乗数および被乗数は、２６ビットであり、積は、５２ビットである。単精度演算モードでは、２サイクルで乗算が実行される。単精度演算モードでは、スイッチ９ｂ，９ｄは、オンとなり、スイッチ９ｃは、オフとなる。
【００９３】
図１１は、単精度演算モード時の第ｉの乗数Ａｉ、第ｉの被乗数Ｂｉ、および第ｉの積Ｃｉを表わす（ｉ＝１，２）。図１２は、第２変形例の演算装置１の単精度演算モードの動作を、主にｉ＝１に関して説明する。なお、ｉ＝２に関する動作は、入力および出力が異なる他はｉ＝１に関する動作と同様であるため説明を省略する。
【００９４】
演算装置１は、第ｉの乗数Ａｉと第ｉの被乗数Ｂｉとを乗算して、第ｉの積Ｃｉを出力する（ｉ＝１，２）。第ｉの乗数Ａｉの上位１３ビットがＡｉ０であり、下位１３ビットがＡｉ１である。第ｉの被乗数Ｂｉの上位１３ビットがＢｉ０であり、下位１３ビットがＢｉ１である。第ｉの積Ｃｉの上位２６ビットがＣｉ０であり、下位２６ビットがＣｉ１である。
【００９５】
まず、単精度演算モードにおける第１サイクルの計算手順を、主にｉ＝１に関して説明する。
【００９６】
Ｗａｌｌａｃｅ木乗算器２ａは、第１の乗数Ａ１の上位１３ビットＡ１０と、第１の被乗数Ｂ１の上位１３ビットＢ１０とを受けたときに、和信号Ｄ（０）および桁上げ信号Ｅ（０）を出力する。Ｗａｌｌａｃｅ木乗算器２ｂは、第１の乗数Ａ１の下位１３ビットＡ１１と、第１の被乗数Ｂ１の上位１３ビットＢ１０とを受けたときに、和信号Ｆ（０）および桁上げ信号Ｇ（０）を出力する。
【００９７】
第１の接続切替器２０によって、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄの出力が、加算器４ａ〜４ｄに送られる。第２の接続切替器３０によって、レジスタ５ａ〜５ｄ内のデータが加算器４ａ〜４ｄに送られる。
【００９８】
すなわち、和信号Ｄ（０）の上位１３ビットがシフタ６ａに送られる。シフタ６ａは、和信号Ｄ（０）の上位１３ビットを下位へ１３ビットだけシフトさせて、加算器４ａの第１の入力の下位１３ビット位置へ供給する。和信号Ｄ（０）の下位１３ビットが加算器４ｂの第３の入力の上位１３ビット位置へ送られる。桁上げ信号Ｅ（０）の上位１３ビットがシフタ６ｂに送られる。シフタ６ｂは、桁上げ信号Ｅ（０）の上位１３ビットを下位へ１３ビットだけシフトさせて、加算器４ａの第２の入力の下位１３ビット位置へ供給する。桁上げ信号Ｅ（０）の下位１３ビットが加算器４ｂの第２の入力の上位１３ビット位置へ送られる。和信号Ｆ（０）の全２６ビットが加算器４ｂの第３の入力の全２６ビット位置へ供給される。桁上げ信号Ｇ（０）の全２６ビットが加算器４ｂの第４の入力の全２６ビット位置へ供給される。
【００９９】
図１３は、第２変形例の単精度演算モードにおける第１サイクルの加算器４ａ〜ｂの入力および出力を表わす図である。
【０１００】
加算器４ａは、第１の入力の下位１３ビット位置に、和信号Ｄ（０）の上位１３ビット｛ｄ２５（０）−ｄ１３（０）｝を受ける。加算器４ａは、第２の入力の下位１３ビット位置に、桁上げ信号Ｅ（０）の上位１３ビット｛ｅ２５（０）−ｅ１３（０）｝を受ける。加算器４ａは、第３の入力の全２６ビット位置に、シフタ７ａから２６ビット（全ビットが０）を受ける。加算器４ａは、第４の入力の下位２ビット位置に、加算器４ｂの加算結果（２８ビット）のうちの上位２ビットを受ける。
【０１０１】
加算器４ａの加算結果Ｌ（０）のうちの下位２６ビット｛ｌ２５（０）−ｌ０（０）｝がレジスタ５ａに送られる。
【０１０２】
加算器４ｂは、第１の入力の上位１３ビット位置に、和信号Ｄ（０）の下位１３ビット｛ｄ１２（０）−ｄ０（０）｝を受ける。加算器４ｂは、第２の入力の上位１３ビット位置に、桁上げ信号Ｅ（０）の下位１３ビット｛ｅ１２（０）−ｅ０（０）｝を受ける。
【０１０３】
加算器４ｂは、第３の入力の全２６ビット位置に、和信号Ｆ（０）の全２６ビット｛ｆ２５（０）−ｆ０（０）｝を受ける。加算器４ｂは、第４の入力の全２６ビット位置に、桁上げ信号Ｇ（０）の全２６ビット｛ｇ２５（０）−ｇ０（０）｝を受ける。加算器４ｂは、第５の入力の全２６ビット位置に、シフタ７ｂから２６ビット（全ビットが０）を受ける。
【０１０４】
加算器４ｂの加算結果Ｍ（０）のうちの下位２６ビット｛ｍ２５（０）−ｍ０（０）｝が第１の出力として、レジスタ５ｂに送られる。加算器４ｂの加算結果Ｍ（０）のうちの上位２ビットが第２の出力として、加算器４ａの第４の入力の下位２ビット位置に送られる。
【０１０５】
次に、単精度演算モードにおける第２サイクルの計算手順を説明する。
Ｗａｌｌａｃｅ木乗算器２ａは、第１の乗数Ａ１の上位１３ビットＡ１０と、第１の被乗数Ｂ１の下位１３ビットＢ１１とを受けたときに、和信号Ｄ（１）および桁上げ信号Ｅ（１）を出力する。Ｗａｌｌａｃｅ木乗算器２ｂは、第１の乗数Ａ１の下位１３ビットＡ１１と、第１の被乗数Ｂ１の下位１３ビットＢ１１とを受けたときに、和信号Ｆ（１）および桁上げ信号Ｇ（１）を出力する。
【０１０６】
第１の接続切替器２０によって、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄの出力が、加算器４ａ〜４ｄに送られる。第２の接続切替器３０によって、レジスタ５ａ〜５ｄ内のデータが加算器４ａ〜４ｄに送られる。第１の接続切替器２０は、信号Ｄ（１）〜Ｇ（１）を、第１サイクルの信号Ｄ（０）〜Ｇ（０）と同様にして加算器４ａ〜ｂに送る。
【０１０７】
図１４は、第２変形例の単精度演算モードにおける第２サイクルの加算器４ａ〜ｂの入力および出力を表わす。加算器４ａの第１〜２および４の入力並びに出力と、加算器４ｂの第１〜４の入力並びに出力とは、本図に示したように第１サイクルにおいて各入力に与えられた信号および出力される信号に対応する第２サイクルの信号であるから、相違点を除き説明を省略する。
【０１０８】
シフタ７ａは、レジスタ５ａに保持されている２６ビット｛ｌ２５（０）−ｌ０（０）｝を上位へ１３ビットだけシフトさせる。シフタ７ｂは、レジスタ５ｂに保持されている２６ビット｛ｍ２５（０）−ｍ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ７ｂから溢れた１３ビット｛ｍ２５（０）−ｍ１３（０）｝をシフタ７ａの下位１３ビット位置に送る。加算器４ａは、第３の入力の全２６ビット位置に、シフタ７ａから２６ビット｛上位１３ビット：ｌ１２（０）−ｌ０（０）、下位１３ビット：ｍ２５（０）−ｍ１３（０）｝を受ける。
【０１０９】
加算器４ｂは、第５の入力の全２６ビット位置に、シフタ７ｂから２６ビット｛上位１３ビット：ｍ１２（０）−ｍ０（０）、下位１３ビット：全ビットが０｝を受ける。
【０１１０】
第２の接続切替器３０は、第２サイクルの終了後、レジスタ５ａ〜ｄ内のデータの出力先を出力端子ＯＰ１〜４へ切り替える。これによって、出力端子ＯＰ１〜４から、第１の積の上位２６ビットＣ１０、第１の積の下位２６ビットＣ１１、第２の積の上位２６ビットＣ２０、第２の積の下位２６ビットＣ２１が出力される。
【０１１１】
（倍精度演算モード）
倍精度演算モードでは、乗数および被乗数は、５２ビットであり、積は、１０４ビットである。倍精度演算モードでは、４サイクルで乗算が実行される。倍精度演算モードでは、スイッチ９ｂ，９ｃ，９ｄは、オンとなる。
【０１１２】
図１５は、倍精精度演算モード時の乗数Ａ１、および被乗数Ｂ１、積Ｃ１を表わす。図１６は、第２変形例の演算装置１の倍精度演算モードの動作を説明する。
【０１１３】
図１５および図１６に示すように、演算装置１は、乗数Ａ１と被乗数Ｂ１とを乗算して、積Ｃ１を出力する。乗数Ａ１は、ビット位置が上位から順番に、第１〜４ビット群（第１〜４桁範囲）Ａ１０〜Ａ１３に分割される。被乗数Ｂ１は、ビット位置が上位から順番に、第１〜４ビット群（第１〜４桁範囲）Ｂ１０〜Ｂ１３に分割される。積Ｃ１は、ビット位置が上位から順番に、第１〜４ビット群Ｃ１０〜Ｃ１３に分割される。
【０１１４】
まず、倍精度演算モードにおける第１サイクルの計算手順を説明する。
Ｗａｌｌａｃｅ木乗算器２ａは、乗数Ａ１の第１ビット群Ａ１０と、被乗数Ｂ１の第１ビット群Ｂ１０とを受けて、和信号Ｄ（０）および桁上げ信号Ｅ（０）を出力する。Ｗａｌｌａｃｅ木乗算器２ｂは、乗数Ａ１の第２ビット群Ａ１１と、被乗数Ｂ１の第１ビット群Ｂ１０とを受けて、和信号Ｆ（０）および桁上げ信号Ｇ（０）を出力する。Ｗａｌｌａｃｅ木乗算器２ｃは、乗数Ａ１の第３ビット群Ａ１２と、被乗数Ｂ１の第１ビット群Ｂ１０とを受けて、和信号Ｈ（０）および桁上げ信号Ｉ（０）を出力する。Ｗａｌｌａｃｅ木乗算器２ｄは、乗数Ａ１の第４ビット群Ａ１３と、被乗数Ｂ１の第１ビット群Ｂ１０とを受けて、和信号Ｊ（０）および桁上げ信号Ｋ（０）を出力する。
【０１１５】
第１の接続切替器２０によって、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄの出力が、加算器４ａ〜４ｄに送られる。第２の接続切替器３０によって、レジスタ５ａ〜５ｄ内のデータが加算器４ａ〜４ｄに送られる。
【０１１６】
すなわち、和信号Ｄ（０）の上位１３ビットが加算器４ｂの第１の入力の下位１３ビット位置に送られる。和信号Ｄ（０）の下位１３ビットが加算器４ｃの第１の入力の上位１３ビット位置に送られる。桁上げ信号Ｅ（０）の上位１３ビットが加算器４ｂの第２の入力の下位１３ビット位置に送られる。桁上げ信号Ｅ（０）の下位１３ビットが加算器４ｃの第２の入力の上位１３ビット位置に送られる。和信号Ｆ（０）の全２６ビットが加算器４ｃの第３の入力の全２６ビット位置に供給される。桁上げ信号Ｇ（０）の全２６ビットが加算器４ｃの第４の入力の全２６ビット位置に供給される。和信号Ｈ（０）の上位１３ビットが加算器４ｃの第５の入力の下位１３ビット位置に送られる。和信号Ｈ（０）の下位１３ビットが加算器４ｄの第１の入力の上位１３ビット位置に送られる。桁上げ信号Ｉ（０）の上位１３ビットが加算器４ｃの第６の入力の下位１３ビット位置に送られる。桁上げ信号Ｉ（０）の下位１３ビットが加算器４ｄの第２の入力の上位１３ビット位置に送られる。和信号Ｊ（０）の全２６ビットが加算器４ｄの第３の入力の全２６ビット位置に供給される。桁上げ信号Ｋ（０）の全２６ビットが加算器４ｄの第４の入力の全２６ビットと位置に供給される。
【０１１７】
図１７は、第２変形例の倍精度演算モードにおける第１サイクルの加算器４ａ〜ｄの入力および出力を表わす図である。加算器４ａは、第１の入力の全２６ビット位置に、シフタ７ａから２６ビット（全ビットが０）を受ける。加算器４ａは、第２の入力の下位２ビット位置に、加算器４ｂの加算結果Ｍ（０）（２８ビット）のうちの上位２ビットを受ける。
【０１１８】
加算器４ａの加算結果Ｌ（０）のうちの下位２６ビット｛ｌ２５（０）−ｌ０（０）｝がレジスタ５ａに送られる。
【０１１９】
加算器４ｂは、第１の入力の下位１３ビット位置に、和信号Ｄ（０）の上位１３ビット｛ｄ２５（０）−ｄ１３（０）｝を受ける。加算器４ｂは、第２の入力の下位１３ビット位置に、桁上げ信号Ｅ（０）の上位１３ビット｛ｅ２５（０）−ｅ１３（０）｝を受ける。加算器４ｂは、第３の入力の全２６ビット位置に、シフタ７ｂから２６ビット（全ビットが０）を受ける。加算器４ｂは、第４の入力の下位２ビット位置に、加算器４ｃの加算結果Ｎ（０）（２８ビット）のうちの上位２ビットを受ける。
【０１２０】
加算器４ｂの加算結果Ｍ（０）のうちの下位２６ビット｛ｍ２５（０）−ｍ０（０）｝が第１の出力として、レジスタ５ｂに送られる。加算器４ｂの加算結果Ｍ（０）のうちの上位２ビットが第２の出力として、加算器４ａの第２の入力の下位２ビット位置に送られる。
【０１２１】
加算器４ｃは、第１の入力の上位１３ビット位置に、和信号Ｄ（０）の下位１３ビット｛ｄ１２（０）−ｄ０（０）｝を受ける。加算器４ｃは、第２の入力の上位１３ビット位置に、桁上げ信号Ｅ（０）の下位１３ビット｛ｅ１２（０）−ｅ０（０）｝を受ける。加算器４ｃは、第３の入力の全２６ビット位置に、和信号Ｆ（０）の全２６ビット｛ｆ２５（０）−ｆ０（０）｝を受ける。加算器４ｃは、第４の入力の全２６ビット位置に、桁上げ信号Ｇ（０）の全２６ビット｛ｇ２５（０）−ｇ０（０）｝を受ける。加算器４ｃは、第５の入力の下位１３ビット位置に、和信号Ｈ（０）の上位１３ビット｛ｈ２５（０）−ｈ１３（０）｝を受ける。加算器４ｃは、第６の入力の下位１３ビット位置に、桁上げ信号Ｉ（０）の上位１３ビット｛ｉ２５（０）−ｉ１３（０）｝を受ける。加算器４ｃは、第７の入力の全２６ビット位置に、シフタ７ｃから２６ビット（全ビットが０）を受ける。加算器４ｃは、第８の入力の下位２ビット位置に、加算器４ｄの加算結果Ｏ（０）（２８ビット）のうちの上位２ビットを受ける。
【０１２２】
加算器４ｃの加算結果Ｎ（０）のうちの下位２６ビット｛ｎ２５（０）−ｎ０（０）｝が第１の出力として、レジスタ５ｃに送られる。加算器４ｃの加算結果Ｎ（０）のうちの上位２ビットが第２の出力として、加算器４ｂの第４の入力の下位２ビット位置に送られる。
【０１２３】
加算器４ｄは、第１の入力の上位１３ビット位置に、和信号Ｈ（０）の下位１３ビット｛ｈ１２（０）−ｈ０（０）｝を受ける。加算器４ｄは、第２の入力の上位１３ビット位置に、桁上げ信号Ｉ（０）の下位１３ビット｛ｉ１２（０）−ｉ０（０）｝を受ける。加算器４ｄは、第３の入力の全２６ビット位置に、和信号Ｊ（０）の全２６ビット｛ｊ２５（０）−ｊ０（０）｝を受ける。加算器４ｄは、第４の入力の全２６ビット位置に、桁上げ信号Ｋ（０）の全２６ビット｛ｋ２５（０）−ｋ０（０）｝を受ける。加算器４ｄは、第５の入力の全２６ビット位置に、シフタ７ｄから２６ビット（全ビットが０）を受ける。
【０１２４】
加算器４ｄの加算結果Ｏ（０）のうちの下位２６ビット｛ｏ２５（０）−ｏ０（０）｝が第１の出力として、レジスタ５ｄに送られる。加算器４ｄの加算結果Ｏ（０）のうちの上位２ビットが第２の出力として、加算器４ｃの第８の入力の下位２ビット位置に送られる。
【０１２５】
次に、倍精度演算モードにおける第２サイクルの計算手順を説明する。
Ｗａｌｌａｃｅ木乗算器２ａは、乗数Ａ１の第１ビット群Ａ１０と、被乗数Ｂ１の第２ビット群Ｂ１１とを受けて、和信号Ｄ（１）および桁上げ信号Ｅ（１）を出力する。Ｗａｌｌａｃｅ木乗算器２ｂは、乗数Ａ１の第２ビット群Ａ１１と、被乗数Ｂ１の第２ビット群Ｂ１１とを受けて、和信号Ｆ（１）および桁上げ信号Ｇ（１）を出力する。Ｗａｌｌａｃｅ木乗算器２ｃは、乗数Ａ１の第３ビット群Ａ１２と、被乗数Ｂ１の第２ビット群Ｂ１１とを受けて、和信号Ｈ（１）および桁上げ信号Ｉ（１）を出力する。Ｗａｌｌａｃｅ木乗算器２ｄは、乗数Ａ１の第４ビット群Ａ１３と、被乗数Ｂ１の第２ビット群Ｂ１１とを受けて、和信号Ｊ（１）および桁上げ信号Ｋ（１）を出力する。
【０１２６】
第１の接続切替器２０によって、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄの出力が、加算器４ａ〜４ｄに送られる。第２の接続切替器３０によって、レジスタ５ａ〜５ｄ内のデータが加算器４ａ〜４ｄに送られる。第１の接続切替器２０は、信号Ｄ（１）〜Ｋ（１）は、第１サイクルの信号Ｄ（０）〜Ｋ（０）と同様にして加算器４ａ〜ｄに送る。
【０１２７】
図１８は、第２変形例の倍精度演算モードにおける第２サイクルの加算器４ａ〜ｄの入力および出力を表わす。加算器４ａの出力と、加算器４ｂの第１〜２および４の入力並びに出力と、加算器４ｃの第１〜６および８の入力並びに出力と、加算器４ｄの第１〜４の入力および出力とは、本図に示したように第２サイクルにおいて各入力に与えられた信号および出力される信号に対応する第２サイクルの信号であるから、相違点を除いて説明を省略する。
【０１２８】
シフタ７ａは、レジスタ５ａに保持されている２６ビット｛ｌ２５（０）−ｌ０（０）｝を上位へ１３ビットだけシフトさせる。シフタ７ｂは、レジスタ５ｂに保持されている２６ビット｛ｍ２５（０）−ｍ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ７ｂから溢れた１３ビット｛ｍ２５（０）−ｍ１３（０）｝をシフタ７ａの下位１３ビット位置に送る。
【０１２９】
加算器４ａは、第１の入力の全２６ビット位置に、シフタ７ａから２６ビット｛上位１３ビット：ｌ１２（０）−ｌ０（０）、下位１３ビット：ｍ２５（０）−ｍ１３（０）｝を受ける。
【０１３０】
シフタ７ｃは、レジスタ５ｃに保持されている２６ビット｛ｎ２５（０）−ｎ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ７ｃから溢れた１３ビット｛ｎ２５（０）−ｎ１３（０）｝をシフタ７ｂの下位１３ビット位置に送る。
【０１３１】
加算器４ｂは、第３の入力の全２６ビット位置に、シフタ７ｂから２６ビット｛上位１３ビット：ｍ１２（０）−ｍ０（０）、下位１３ビット：ｎ２５（０）−ｎ１３（０）｝を受ける。加算器４ｂは、第４の入力の下位２ビット位置に、加算器４ｃの加算結果Ｎ（１）（２８ビット）のうちの上位２ビットを受ける。
【０１３２】
シフタ７ｄは、レジスタ５ｄに保持されている２６ビット｛ｏ２５（０）−ｏ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ７ｄから溢れた１３ビット｛ｏ２５（０）−ｏ１３（０）｝をシフタ７ｃの下位１３ビット位置に送る。
【０１３３】
加算器４ｃは、第７の入力の全２６ビット位置に、シフタ７ｃから２６ビット｛上位１３ビット：ｎ１２（０）−ｎ０（０）、下位１３ビット：ｏ２５（０）−ｏ１３（０）｝を受ける。
【０１３４】
加算器４ｄは、第５の入力の全２６ビット位置に、シフタ７ｄから２６ビット｛上位１３ビット：ｏ１２（０）−ｏ０（０）、下位１３ビット：全ビットが０｝を受ける。
【０１３５】
加算器４ｄの加算結果Ｏ（１）のうちの下位２６ビット｛ｏ２５（１）−ｏ０（１）｝が第１の出力として、レジスタ５Ｄに送られる。加算器４ｄの加算結果Ｏ（１）のうちの上位２ビットが第２の出力として、加算器４ｃの第８の入力の下位２ビット位置に送られる。
【０１３６】
倍精度演算モードにおける第３サイクルにおけるＷａｌｌａｃｅ木乗算器２ａ〜２ｄの入力は以下のように動作する。
【０１３７】
Ｗａｌｌａｃｅ木乗算器２ａは、乗数Ａ１の第１ビット群Ａ１０と、被乗数Ｂ１の第３ビット群Ｂ１２とを受けて、和信号Ｄ（２）および桁上げ信号Ｅ（２）を出力する。Ｗａｌｌａｃｅ木乗算器２ｂは、乗数Ａ１の第２ビット群Ａ１１と、被乗数Ｂ１の第３ビット群Ｂ１２とを受けて、和信号Ｆ（２）および桁上げ信号Ｇ（２）を出力する。Ｗａｌｌａｃｅ木乗算器２ｃは、乗数Ａ１の第３ビット群Ａ１２と、被乗数Ｂ１の第３ビット群Ｂ１２とを受けて、和信号Ｈ（２）および桁上げ信号Ｉ（２）を出力する。Ｗａｌｌａｃｅ木乗算器２ｄは、乗数Ａ１の第４ビット群Ａ１３と、被乗数Ｂ１の第３ビット群Ｂ１２とを受けて、和信号Ｊ（２）および桁上げ信号Ｋ（２）を出力する。
【０１３８】
第３サイクルの以降の計算手順は、第２サイクルの計算手順と同様なので、説明を繰り返さない。
【０１３９】
倍精度演算モードにおける第４サイクルにおけるＷａｌｌａｃｅ木乗算器２ａ〜２ｄの入力は以下のように動作する。
【０１４０】
Ｗａｌｌａｃｅ木乗算器２ａは、乗数Ａ１の第１ビット群Ａ１０と、被乗数Ｂ１の第４ビット群Ｂ１３とを受けて、和信号Ｄ（３）および桁上げ信号Ｅ（３）を出力する。Ｗａｌｌａｃｅ木乗算器２ｂは、乗数Ａ１の第２ビット群Ａ１１と、被乗数Ｂ１の第４ビット群Ｂ１３とを受けて、和信号Ｆ（３）および桁上げ信号Ｇ（３）を出力する。Ｗａｌｌａｃｅ木乗算器２ｃは、乗数Ａ１の第３ビット群Ａ１２と、被乗数Ｂ１の第４ビット群Ｂ１３とを受けて、和信号Ｈ（３）および桁上げ信号Ｉ（３）を出力する。Ｗａｌｌａｃｅ木乗算器２ｄは、乗数Ａ１の第４ビット群Ａ１３と、被乗数Ｂ１の第４ビット群Ｂ１３とを受けて、和信号Ｊ（３）および桁上げ信号Ｋ（３）を出力する。
【０１４１】
第４サイクルの以降の計算手順は、第２サイクルの計算手順と同様なので、説明を繰り返さない。
【０１４２】
第２の接続切替器３０は、第４サイクルの終了後、レジスタ５ａ〜ｄ内のデータの出力先を出力端子ＯＰ１〜４に切替える。これによって、出力端子ＯＰ１〜４から、積Ｃ１の第１〜４ビット群Ｃ１０〜Ｃ１３が出力される。
【０１４３】
図１９は、Ｗａｌｌａｃｅ木乗算器２ａの構成を表わす。図２０は、Ｗａｌｌａｃｅ木乗算器２ａで生成されるデータを表わす。
【０１４４】
Ｗａｌｌａｃｅ木乗算器２ａは、入力生成器７９と、ＣＳＡ（Ｃａｒｒｙ  Ｓａｖｅ  Ａｄｄｅｒ）５１〜ＣＳＡ６１とを備える。入力生成器７９は、１３ビットの入力ＩＮ１と、１３ビットの入力ＩＮ２とから、各々１３ビットのＸ０〜Ｘ１２を生成する。
【０１４５】
Ｘ０は、ＩＮ１と、ＩＮ２の第０ビット（ＬＳＢ）との積である。ＩＮ２の第０ビットが０の場合に、Ｘ０の全ビットが０である。ＩＮ２の第０ビットが１の場合には、Ｘ０の全ビットは、ＩＮ１の全ビットと同じである。同様に、Ｘｉ（ｉ＝１〜１３）は、ＩＮ１と、ＩＮ２の第ｉビットとの積である。
【０１４６】
ＣＳＡ５１は、Ｘ１と、Ｘ２と、Ｘ３とを桁上げ信号保留加算して、和信号１Ｓと、桁上げ信号１Ｒとを出力する。ＣＳＡ５２は、Ｘ３と、Ｘ４と、Ｘ５とを桁上げ信号保留加算して、和信号２Ｓと、桁上げ信号２Ｒとを出力する。ＣＳＡ５３は、Ｘ６と、Ｘ７と、Ｘ８とを桁上げ信号保留加算して、和信号３Ｓと、桁上げ信号３Ｒとを出力する。ＣＳＡ５４は、Ｘ９と、Ｘ１０と、Ｘ１１とを桁上げ信号保留加算して、和信号４Ｓと、桁上げ信号４Ｒとを出力する。ＣＳＡ５５は、和信号１Ｓと、桁上げ信号１Ｒと、和信号２Ｓとを桁上げ信号保留加算して、和信号５Ｓと、桁上げ信号５Ｒとを出力する。ＣＳＡ５６は、桁上げ信号２Ｒと、和信号３Ｓと、桁上げ信号３Ｒとを桁上げ信号保留加算して、和信号６Ｓと、桁上げ信号６Ｒとを出力する。ＣＳＡ５７は、和信号４Ｓと、桁上げ信号４Ｒと、Ｘ１２とを桁上げ信号保留加算して、和信号７Ｓと、桁上げ信号７Ｒとを出力する。ＣＳＡ５８は、和信号５Ｓと、桁上げ信号５Ｒと、和信号６Ｓとを桁上げ信号保留加算して、和信号８Ｓと、桁上げ信号８Ｒとを出力する。ＣＳＡ５９は、桁上げ信号６Ｒと、和信号７Ｓと、桁上げ信号７Ｒとを桁上げ信号保留加算して、和信号９Ｓと、桁上げ信号９Ｒとを出力する。ＣＳＡ６０は、和信号８Ｓと、桁上げ信号８Ｒと、和信号９Ｓとを桁上げ信号保留加算して、和信号１０Ｓと、桁上げ信号１０Ｒとを出力する。ＣＳＡ６１は、和信号１０Ｓと、桁上げ信号１０Ｒと、桁上げ信号９Ｒとを桁上げ信号保留加算して、和信号１１Ｓと、桁上げ信号１１Ｒとを出力する。和信号１１ＳがＷａｌｌａｃｅ木乗算器２ａから出力される和信号Ｄとなり、桁上げ信号１１ＲがＷａｌｌａｃｅ木乗算器２ａから出力される桁上げ信号Ｅとなる。
【０１４７】
加算器４ａ〜４ｄも、複数のＣＳＡを備え、Ｗａｌｌａｃｅ木に基づいて、加算を実行するものであってもよい。
【０１４８】
以上のように、本変形例によれば、小さな回路規模で、半精度演算、単精度演算、または倍精度演算を実行することができる。
【０１４９】
［第３変形例］
図２１は、第３変形例の演算装置１０１の構成を表わす。
【０１５０】
この演算装置１０１は、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄと、第１の接続切替器１２０と、加算器１４ａ〜１４ｄと、レジスタ１５ａ〜１５ｄと、レジスタ２５ａ〜２５ｄと、第２の接続切替器１３０と、加算器１６ａ〜１６ｄと、出力端子ＯＰ１〜ＯＰ４と、スイッチ１６１ｂ〜１６１ｄ、１５１ｂ〜１５１ｄを備える。演算装置１は、第２変形例と同様に、８個の入力（ＩＮ１〜ＩＮ８）を受けて、４個の演算結果（ＯＵＴ１〜ＯＵＴ４）を出力する。
【０１５１】
第３変形例の演算装置１０１は、第２変形例の演算装置１における加算器４ａ〜ｄを桁上げ保存加算器（ＣＳＡ）としたものであり、第２変形例の演算装置１に対し、図１の実施形態から図６の第１変形例への変更と同様の変更を加えたものである。すなわち、演算装置１におけるレジスタ５ａ〜５ｄは、和信号および桁上げ信号を別々に保持できるようにレジスタ１５ａ〜ｄおよびレジスタ２５ａ〜ｄに分けられている。また、レジスタ１５ａ〜ｄおよびレジスタ２５ａ〜ｄに保持される和信号および桁上げ信号を加算して最終的な積を算出するために、第１変形例の第２加算要素５４４に対応する加算器１６ａ〜ｄが設けられる。また、加算器４ａ〜ｄをＣＳＡとしたことに伴って、加算器４ｂ〜ｄからの桁上がりビットを上位側に送るか否かを切り替えるスイッチ９ｂ〜ｄは、和信号用のスイッチ１６１ｂ〜ｄおよび桁上げ信号用のスイッチ１５１ｂ〜ｄに分けられる。以下、第２変形例の演算装置１からの変更点を中心に、演算装置１０１の構成および動作を説明する。
【０１５２】
Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄは、第２変形例と同様である。
加算器１４ａ〜１４ｄは、Ｗａｌｌａｃｅ木に基づいて、複数の２単位ビット長のデータの加算結果の１段前の和信号および桁上げ信号を出力する。
【０１５３】
レジスタ１５ａ〜１５ｄは、それぞれ対応する加算器１４ａ〜１４ｄから出力される和信号を保持する。
レジスタ２５ａ〜２５ｄは、それぞれ対応する加算器１４ａ〜１４ｄから出力される桁上げ信号を保持する。
【０１５４】
加算器１６ａ〜１６ｄは、それぞれ入力される和信号と桁上げ信号とを加算する。
出力端子ＯＰ１〜ＯＰ４は、それぞれ加算器１６ａ〜１６ｄの加算結果を出力する。
【０１５５】
第１の接続切替器１２０は、第２変形例と同様である。
【０１５６】
第２の接続切替器１３０は、第２変形例と同様に、レジスタ５ａ〜ｄの各加算結果に代えて、レジスタ１５ａおよびレジスタ２５ａの和信号および桁上げ信号の組、レジスタ１５ｂおよびレジスタ２５ｂの和信号および桁上げ信号の組、レジスタ１５ｃおよびレジスタ２５ｃの和信号および桁上げ信号の組、レジスタ１５ｄおよびレジスタ２５ｄの和信号および桁上げ信号の組の出力先を切り替える。
【０１５７】
スイッチ１６１ｂは、加算器１４ｂから加算器１４ａへ和信号の桁上りビットを送るか否かを切り替える。スイッチ１６１ｃは、加算器１４ｃから加算器１４ｂへ和信号の桁上りビットを送るか否かを切り替える。スイッチ１６１ｄは、加算器１４ｄから加算器１４ｃへ和信号の桁上りビットを送るか否かを切り替える。スイッチ１５１ｂは、加算器１４ｂから加算器１４ａへ桁上げ信号の桁上りビットを送るか否かを切り替える。スイッチ１５１ｃは、加算器１４ｃから加算器１４ｂへ桁上げ信号の桁上りビットを送るか否かを切り替える。スイッチ１５１ｄは、加算器１４ｄから加算器１４ｃへ桁上げ信号の桁上りビットを送るか否かを切り替える。
【０１５８】
演算装置１０１は、第２変形例と同様に、半精度演算モード、単精度演算モード、および倍精度演算モードで動作する。以下では、各演算モードについて、第２変形例の演算装置１の動作との相違点を中心に動作を説明する。
【０１５９】
（半精度演算モード）
図２２は、第３変形例の演算装置１０１の半精度演算モードの動作を説明する。半精度演算モードでは、第１の接続切替器１２０によって、Ｗａｌｌａｃｅ木乗算器２ａ〜２ｄの出力が、加算器１６ａ〜１６ｄに送られる。
【０１６０】
すなわち例えば、和信号Ｄの全２６ビットが加算器１６ａの第１の入力の全２６ビット位置に供給され、桁上げ信号Ｅの全２６ビットが加算器１６ａの第２の入力の全２６ビット位置に供給される。
【０１６１】
図２３は、第３変形例の半精度演算モードにおける加算器１６ａの入力を表わす。
【０１６２】
加算器１６ａは、第１の入力の全２６ビット位置に、和信号Ｄの全２６ビット｛ｄ２５−ｄ０｝を受ける。加算器１６ａは、第２の入力の全２６ビット位置に、桁上げ信号Ｅの全２６ビット｛ｅ２５−ｅ０｝を受ける。加算器１６ａは、和信号Ｄの全２６ビットと桁上げ信号Ｅの全２６ビットとを加算して、第１の積Ｃ１として下位２６ビットを出力する。加算器１６ｂ〜ｄは、入力および出力が図２２のように相違する他は加算器１６ａと同様に動作する。
【０１６３】
（単精度演算モード）
図２４は、第３変形例の演算装置１０１の単精度演算モードの動作を、主に乗数Ａ１および被乗数Ｂ１の積Ｃ１を算出する動作における第２変形例との相違点を中心に説明する。図１６のシフタ７ａ〜ｄは、和信号および桁上げ信号をシフトするべくシフタ１７ａ〜ｄおよびシフタ２７ａ〜ｄに分けられる。
【０１６４】
図２５は、第３変形例の単精度演算モードにおける第１サイクルの加算器１４ａ〜ｂの入力および出力を表わす。
【０１６５】
加算器１４ａの入力および出力は、第２変形例における加算器４ａの入力および出力に対して、第３の入力が和信号の第３入力および桁上げ信号の第４の入力に分けられ、第４の入力が和信号の第５の入力および桁上げ信号の第６の入力に分けられ、出力が和信号の第１の出力および桁上げ信号の第２の出力に分けられたものとなる。加算器１４ａは、第３の入力の全２６ビット位置に、シフタ１７ａから２６ビット（全ビットが０）を受ける。加算器１４ａは、第４の入力の全２６ビット位置に、シフタ２７ａから２６ビット（全ビットが０）を受ける。加算器１４ａは、第５の入力の下位２ビット位置に、加算器１４ｂの加算結果である和信号ＳＭ（２８ビット）の上位２ビットを受ける。加算器１４ａは、第６の入力の下位２ビット位置に、加算器１４ｂの加算結果である桁上げ信号ＲＭ（２９ビット）の上位３ビットを受ける。
【０１６６】
加算器１４ａの加算結果である和信号ＳＬ（０）のうちの下位２６ビット｛Ｓｌ２５（０）−Ｓｌ０（０）｝が第１の出力として、レジスタ１５ａに送られる。加算器１４ａの加算結果である桁上げ信号ＲＬ（０）のうちの下位２６ビット｛Ｒｌ２５（０）−Ｒｌ０（０）｝が第２の出力として、レジスタ２５ａに送られる。
【０１６７】
加算器１４ｂの入力および出力は、第２変形例における加算器４ｂの入力および出力に対して、第５の入力が和信号の第５の入力および桁上げ信号の第６の入力に分けられ、第１の出力が和信号の第１の出力および桁上げ信号の第２の出力に分けられ、第２の出力が和信号の第３の出力および桁上げ信号の第４の出力に分けられたものとなる。加算器１４ｂは、第５の入力の全２６ビット位置に、シフタ１７ｂから２６ビット（全ビットが０）を受ける。加算器１４ｂは、第６の入力の全２６ビット位置に、シフタ２７ｂから２６ビット（全ビットが０）を受ける。
【０１６８】
加算器１４ｂの加算結果である和信号ＳＭ（０）のうちの下位２６ビット｛Ｓｍ２５（０）−Ｓｍ０（０）｝が第１の出力として、レジスタ１５ｂに送られる。加算器１４ｂの加算結果である和信号ＳＭ（０）のうちの上位２ビットが第３の出力として、加算器１４ａの第５の入力の下位２ビット位置に送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（０）のうちの下位２６ビット｛Ｒｍ２５（０）−Ｒｍ０（０）｝が第２の出力として、レジスタ２５ｂに送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（０）のうちの上位３ビットが第４の出力として、加算器１４ａの第６の入力の下位３ビット位置に送られる。
【０１６９】
図２６は、第３変形例の単精度演算モードにおける第２サイクルの加算器１４ａ〜ｂの入力および出力を表わす。加算器１４ａ〜ｂに対する信号の入力元は、第１サイクルと同様である。
【０１７０】
シフタ１７ａは、レジスタ１５ａに保持されている２６ビット｛Ｓｌ２５（０）−Ｓｌ０（０）｝を上位へ１３ビットだけシフトさせる。シフタ１７ｂは、レジスタ１５ｂに保持されている２６ビット｛Ｓｍ２５（０）−Ｓｍ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ１７ｂから溢れた１３ビット｛Ｓｍ２５（０）−Ｓｍ１３（０）｝をシフタ１７ａの下位１３ビット位置に送る。シフタ２７ａは、レジスタ２５ａに保持されている２６ビット｛Ｒｌ２５（０）−Ｒｌ０（０）｝を上位へ１３ビットだけシフトさせる。シフタ２７ｂは、レジスタ２５ｂに保持されている２６ビット｛Ｒｍ２５（０）−Ｒｍ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ２７ｂから溢れた１３ビット｛Ｒｍ２５（０）−Ｒｍ１３（０）｝をシフタ２７ａの下位１３ビット位置に送る。
【０１７１】
加算器１４ａは、第３の入力の全２６ビット位置に、シフタ１７ａから２６ビット｛上位１３ビット：Ｓｌ１２（０）−Ｓｌ０（０）、下位１３ビット：Ｓｍ２５（０）−Ｓｍ１３（０）｝を受ける。加算器１４ａは、第４の入力の全２６ビット位置に、シフタ２７ａから２６ビット｛上位１３ビット：Ｒｌ１２（０）−Ｒｌ０（０）、下位１３ビット：Ｒｍ２５（０）−Ｒｍ１３（０）｝を受ける。
【０１７２】
加算器１４ａは、第５の入力の下位２ビット位置に、加算器１４ｂの加算結果である和信号ＳＭ（１）（２８ビット）のうちの上位２ビットを受ける。加算器１４ａは、第６の入力の下位２ビット位置に、加算器１４ｂの加算結果である桁上げ信号ＲＭ（１）（２９ビット）のうちの上位３ビットを受ける。
【０１７３】
加算器１４ａの加算結果である和信号ＳＬ（１）のうちの下位２６ビット｛Ｓｌ２５（１）−Ｓｌ０（１）｝がレジスタ１５ａに送られる。加算器１４ａの加算結果である桁上げ信号ＲＬ（１）のうちの下位２６ビット｛Ｒｌ２５（１）−Ｒｌ０（１）｝がレジスタ２５ａに送られる。
【０１７４】
加算器１４ｂは、第５の入力の全２６ビット位置に、シフタ１７ｂから２６ビット｛上位１３ビット：Ｓｍ１２（０）−Ｓｍ０（０）、下位１３ビット：全ビットが０｝を受ける。加算器１４ｂは、第６の入力の全２６ビット位置に、シフタ２７ｂから２６ビット｛上位１３ビット：Ｒｍ１２（０）−Ｒｍ０（０）、下位１３ビット：全ビットが０｝を受ける。
【０１７５】
加算器１４ｂの加算結果である和信号ＳＭ（１）のうちの下位２６ビット｛Ｓｍ２５（１）−Ｓｍ０（１）｝が第１の出力として、レジスタ１５ｂに送られる。加算器１４ｂの加算結果である和信号ＳＭ（１）のうちの上位２ビットが第３の出力として、加算器１４ａの第５の入力の下位２ビット位置に送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（１）のうちの下位２６ビット｛Ｒｍ２５（１）−Ｒｍ０（１）｝が第２の出力として、レジスタ２５ｂに送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（１）のうちの上位３ビットが第４の出力として、加算器１４ａの第６の入力の下位３ビット位置に送られる。
【０１７６】
第２の接続切替器１３０は、第２サイクルの終了後、レジスタ１５ａ〜１５ｄ、２５ａ〜２５ｄ内のデータを加算器１６ａ〜１６ｄのいずれかに出力する。
【０１７７】
レジスタ１５ａに保持されている和信号｛Ｓｌ２５（１）−Ｓｌ０（１）｝と、レジスタ２５ａに保持されている桁上げ信号｛Ｒｌ２５（１）−Ｒｌ０（１）｝とが加算器１６ａへ送られる。加算器１６ａは、加算を実行して、第１の積Ｃ１の上位２６ビットＣ１０を出力端子ＯＰ１へ出力する。加算器１６ｂも同様にして、第１の積Ｃ１の下位２６ビットＣ１１を出力端子ＯＰ２へ出力する。ここで、加算器１６ｂは、この加算に伴う桁上がりを加算器１６ａへと供給し、加算器１６ａはこの桁上がりを含めて上記の加算を行ってよい。
【０１７８】
（倍精度演算モード）
図２７は、第３変形例の演算装置１０１の倍精度演算モードの動作を、第２変形例との相違点を中心に説明する。
【０１７９】
図２８Ａおよび図２８Ｂは、第３変形例の倍精度演算モードにおける第１サイクルの加算器１４ａ〜ｄの入力および出力を表わす。
【０１８０】
第２変形例のレジスタ５ａ〜ｄを和信号用のレジスタ１５ａ〜ｄおよび桁上げ信号用のレジスタ２５ａ〜ｄに分けたことに伴い、第２変形例におけるシフタ７ａ〜ｄから加算器４ａ〜ｄへの入力が、シフタ１７ａ〜ｄから加算器１４ａ〜ｄへの和信号の入力およびシフタ２７ａ〜ｄから加算器１４ａ〜ｄへの桁上げ信号の入力に分けられる。また、加算器１４ａ〜ｄをＣＳＡとしたことに伴い、下位桁からの桁上がりが和信号からの桁上がりおよび桁上げ信号からの桁上がりに分けられる。また、加算器４ａ〜ｄの出力は、和信号および桁上げ信号に分けられる。これらの相違を除き、図２８Ａ〜Ｂに示した加算器１４ａ〜ｄの入出力は、図１７に示した加算器４ａ〜ｄの入出力と同様である。
【０１８１】
加算器１４ａは、第１の入力の全２６ビット位置に、シフタ１７ａから２６ビット（全ビットが０）を受ける。加算器１４ａは、第２の入力の全２６ビット位置に、シフタ２７ａから２６ビット（全ビットが０）を受ける。加算器１４ａは、第３の入力の下位２ビット位置に、加算器１４ｂの加算結果である和信号ＳＭ（０）（２８ビット）のうちの上位２ビットを受ける。加算器１４ａは、第４の入力の下位３ビット位置に、加算器１４ｂの加算結果である桁上げ信号ＲＭ（０）（２９ビット）のうちの上位３ビットを受ける。
【０１８２】
加算器１４ａの加算結果である和信号ＳＬ（０）のうちの下位２６ビット｛Ｓｌ２５（０）−Ｓｌ０（０）｝がレジスタ１５ａに送られる。加算器１４ａの加算結果である桁上げ信号ＲＬ（０）のうちの下位２６ビット｛Ｒｌ２５（０）−Ｒｌ０（０）｝がレジスタ２５ａに送られる。
【０１８３】
加算器１４ｂは、第３の入力の全２６ビット位置に、シフタ１７ｂから２６ビット（全ビットが０）を受ける。加算器１４ｂは、第４の入力の全２６ビット位置に、シフタ２７ｂから２６ビット（全ビットが０）を受ける。加算器１４ｂは、第５の入力の下位３ビット位置に、加算器１４ｃの加算結果である和信号ＳＮ（０）（２９ビット）のうちの上位３ビットを受ける。加算器１４ｂは、第６の入力の下位４ビット位置に、加算器１４ｃの加算結果である桁上げ信号ＲＮ（０）（３０ビット）のうちの上位４ビットを受ける。
【０１８４】
加算器１４ｂの加算結果である和信号ＳＭ（０）のうちの下位２６ビット｛Ｓｍ２５（０）−Ｓｍ０（０）｝が第１の出力として、レジスタ１５ｂに送られる。加算器１４ｂの加算結果である和信号ＳＭ（０）のうちの上位２ビットが第３の出力として、加算器１４ａの第３の入力の下位２ビット位置に送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（０）のうちの下位２６ビット｛Ｒｍ２５（０）−Ｒｍ０（０）｝が第２の出力として、レジスタ１５ｂに送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（０）のうちの上位３ビットが第４の出力として、加算器１４ａの第４の入力の下位３ビット位置に送られる。
【０１８５】
加算器１４ｃは、第７の入力の全２６ビット位置に、シフタ１７ｃから２６ビット（全ビットが０）を受ける。加算器１４ｃは、第８の入力の全２６ビット位置に、シフタ２７ｃから２６ビット（全ビットが０）を受ける。加算器１４ｃは、第９の入力の下位２ビット位置に、加算器１４ｄの加算結果である和信号ＳＯ（０）（２８ビット）のうちの上位２ビットを受ける。加算器１４ｃは、第１０の入力の下位３ビット位置、加算器１４ｄの加算結果である桁上げ信号ＲＯ（０）（２９ビット）のうちの上位３ビットを受ける。
【０１８６】
加算器１４ｃの加算結果である和信号ＳＮ（０）のうちの下位２６ビット｛Ｓｎ２５（０）−Ｓｎ０（０）｝が第１の出力として、レジスタ１５ｃに送られる。加算器１４ｃの加算結果である和信号ＳＮ（０）のうちの上位３ビットが第３の出力として、加算器１４ｂの第５の入力の下位３ビット位置に送られる。加算器１４ｃの加算結果である桁上げ信号ＲＮ（０）のうちの下位２６ビット｛Ｒｎ２５（０）−Ｒｎ０（０）｝が第２の出力として、レジスタ２５ｃに送られる。加算器１４ｃの加算結果である桁上げ信号ＲＮ（０）のうちの上位４ビットが第４の出力として、加算器１４ｂの第６の入力の下位４ビット位置に送られる。
【０１８７】
加算器１４ｄは、第５の入力の全２６ビット位置に、シフタ１７ｄから２６ビット（全ビットが０）を受ける。加算器１４ｄは、第５の入力の全２６ビット位置に、シフタ２７ｄから２６ビット（全ビットが０）を受ける。
【０１８８】
加算器１４ｄの加算結果Ｏ（０）のうちの下位２６ビット｛ｏ２５（０）−ｏ０（０）｝が第１の出力として、レジスタ１５ｄに送られる。加算器１４ｄの加算結果Ｏ（０）のうちの上位２ビットが第２の出力として、加算器１４ｃの第８の入力の下位２ビット位置に送られる。
【０１８９】
図２９Ａ〜Ｂは、第３変形例の倍精度演算モードにおける第２サイクルの加算器１４ａ〜ｄの入出力を表わす図である。加算器１４ａ〜ｄに対する信号の入力元は、第２サイクルと同様である。
【０１９０】
シフタ１７ａは、レジスタ１５ａに保持されている２６ビット｛Ｓｌ２５（０）−Ｓｌ０（０）｝を上位へ１３ビットだけシフトさせる。シフタ１７ｂは、レジスタ１５ｂに保持されている２６ビット｛Ｓｍ２５（０）−Ｓｍ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ１７ｂから溢れた１３ビット｛Ｓｍ２５（０）−Ｓｍ１３（０）｝をシフタ１７ａの下位１３ビット位置に送る。シフタ２７ａは、レジスタ２５ａに保持されている２６ビット｛Ｒｌ２５（０）−Ｒｌ０（０）｝を上位へ１３ビットだけシフトさせる。シフタ２７ｂは、レジスタ２５ｂに保持されている２６ビット｛Ｒｍ２５（０）−Ｒｍ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ２７ｂから溢れた１３ビット｛Ｒｍ２５（０）−Ｒｍ１３（０）｝をシフタ２７ａの下位１３ビット位置に送る。
【０１９１】
加算器１４ａは、第１の入力の全２６ビット位置に、シフタ１７ａから２６ビット｛上位１３ビット：Ｓｌ１２（０）−Ｓｌ０（０）、下位１３ビット：Ｓｍ２５（０）−Ｓｍ１３（０）｝を受ける。加算器１４ａは、第２の入力の全２６ビット位置に、シフタ２７ａから２６ビット｛上位１３ビット：Ｒｌ１２（０）−Ｒｌ０（０）、下位１３ビット：Ｒｍ２５（０）−Ｒｍ１３（０）｝を受ける。加算器１４ａは、第３の入力の下位２ビット位置に、加算器１４ｂの加算結果である和信号ＳＭ（１）（２８ビット）のうちの上位２ビットを受ける。加算器１４ａは、第４の入力の下位３ビット位置に、加算器１４ｂの加算結果である桁上げ信号ＲＭ（１）（２９ビット）のうちの上位３ビットを受ける。
【０１９２】
加算器１４ａの加算結果である和信号ＳＬ（１）のうちの下位２６ビット｛Ｓｌ２５（１）−Ｓｌ０（１）｝がレジスタ１５ａに送られる。加算器１４ａの加算結果である桁上げ信号ＲＬ（１）のうちの下位２６ビット｛Ｒｌ２５（１）−Ｒｌ０（１）｝がレジスタ２５ａに送られる。
【０１９３】
シフタ１７ｃは、レジスタ１５ｃに保持されている２６ビット｛Ｓｎ２５（０）−Ｓｎ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ１７ｃから溢れた１３ビット｛Ｓｎ２５（０）−Ｓｎ１３（０）｝をシフタ１７ｂの下位１３ビット位置に送る。シフタ２７ｃは、レジスタ２５ｃに保持されている２６ビット｛Ｒｎ２５（０）−Ｒｎ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ２７ｃから溢れた１３ビット｛Ｒｎ２５（０）−Ｒｎ１３（０）｝をシフタ２７ｂの下位１３ビット位置に送る。
【０１９４】
加算器１４ｂは、第３の入力の全２６ビット位置に、シフタ１７ｂから２６ビット｛上位１３ビット：Ｓｍ１２（０）−Ｓｍ０（０）、下位１３ビット：Ｓｎ２５（０）−Ｓｎ１３（０）｝を受ける。加算器１４ｂは、第４の入力の全２６ビット位置に、シフタ２７ｂから２６ビット｛上位１３ビット：Ｒｍ１２（０）−Ｒｍ０（０）、下位１３ビット：Ｒｎ２５（０）−Ｒｎ１３（０）｝を受ける。加算器１４ｂは、第５の入力の下位３ビット位置に、加算器１４ｃの加算結果である和信号ＳＮ（１）（２９ビット）のうちの上位３ビットを受ける。加算器１４ｂは、第６の入力の下位４ビット位置に、加算器１４ｃの加算結果である桁上げ信号ＲＮ（１）（３０ビット）のうちの上位４ビットを受ける。
【０１９５】
加算器１４ｂの加算結果である和信号ＳＭ（１）のうちの下位２６ビット｛Ｓｍ２５（１）−Ｓｍ０（１）｝が第１の出力として、レジスタ１５ｂに送られる。加算器１４ｂの加算結果である和信号ＳＭ（１）のうちの上位２ビットが第３の出力として、加算器１４ａの第３の入力の下位２ビット位置に送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（１）のうちの下位２６ビット｛Ｒｍ２５（１）−Ｒｍ０（１）｝が第２の出力として、レジスタ２５ｂに送られる。加算器１４ｂの加算結果である桁上げ信号ＲＭ（１）のうちの上位３ビットが第４の出力として、加算器１４ａの第４の入力の下位３ビット位置に送られる。
【０１９６】
シフタ１７ｄは、レジスタ１５ｄに保持されている２６ビット｛Ｓｏ２５（０）−Ｓｏ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ１７ｄから溢れた１３ビット｛Ｓｏ２５（０）−Ｓｏ１３（０）｝をシフタ１７ｃの下位１３ビット位置に送る。シフタ２７ｄは、レジスタ２５ｄに保持されている２６ビット｛Ｒｏ２５（０）−Ｒｏ０（０）｝を上位へ１３ビットだけシフトさせて、シフタ２７ｄから溢れた１３ビット｛Ｒｏ２５（０）−Ｒｏ１３（０）｝をシフタ２７ｃの下位１３ビット位置に送る。
【０１９７】
加算器１４ｃは、第７の入力の全２６ビット位置に、シフタ１７ｃから２６ビット｛上位１３ビット：Ｓｎ１２（０）−Ｓｎ０（０）、下位１３ビット：Ｓｏ２５（０）−Ｓｏ１３（０）｝を受ける。加算器１４ｃは、第８の入力の全２６ビット位置に、シフタ２７ｃから２６ビット｛上位１３ビット：Ｒｎ１２（０）−Ｒｎ０（０）、下位１３ビット：Ｒｏ２５（０）−Ｒｏ１３（０）｝を受ける。加算器１４ｃは、第９の入力の下位２ビット位置に、加算器１４ｄの加算結果である和信号ＳＯ（１）（２８ビット）のうちの上位２ビットを受ける。加算器１４ｃは、第１０の入力の下位３ビット位置に、加算器１４ｄの加算結果である桁上げ信号ＲＯ（１）（２９ビット）のうちの上位３ビットを受ける。
【０１９８】
加算器１４ｃの加算結果である和信号ＳＮ（１）のうちの下位２６ビット｛Ｓｎ２５（１）−Ｓｎ０（１）｝が第１の出力として、レジスタ１５ｃに送られる。加算器１４ｃの加算結果である和信号ＳＮ（１）のうちの上位３ビットが第３の出力として、加算器１４ｂの第５の入力の下位３ビット位置に送られる。加算器１４ｃの加算結果である桁上げ信号ＲＮ（１）のうちの下位２６ビット｛Ｒｎ２５（１）−Ｒｎ０（１）｝が第２の出力として、レジスタ２５ｃに送られる。加算器１４ｃの加算結果である桁上げ信号ＲＮ（１）のうちの上位４ビットが第４の出力として、加算器１４ｂの第６の入力の下位４ビット位置に送られる。
【０１９９】
加算器１４ｄは、第５の入力の全２６ビット位置に、シフタ１７ｄから２６ビット｛上位１３ビット：Ｓｏ１２（０）−Ｓｏ０（０）、下位１３ビット：全ビットが０｝を受ける。加算器１４ｄは、第６の入力の全２６ビット位置に、シフタ２７ｄから２６ビット｛上位１３ビット：Ｒｏ１２（０）−Ｒｏ０（０）、下位１３ビット：全ビットが０｝を受ける。
【０２００】
加算器１４ｄの加算結果である和信号ＳＯ（１）のうちの下位２６ビット｛Ｓｏ２５（１）−Ｓｏ０（１）｝が第１の出力として、レジスタ１５ｄに送られる。加算器１４ｄの加算結果である和信号ＳＯ（１）のうちの上位２ビットが第３の出力として、加算器１４ｃの第９の入力の下位２ビット位置に送られる。加算器１４ｄの加算結果である桁上げ信号ＲＯ（１）のうちの下位２６ビット｛Ｒｏ２５（１）−Ｒｏ０（１）｝が第２の出力として、レジスタ２５ｄに送られる。加算器１４ｄの加算結果である桁上げ信号ＲＯ（１）のうちの上位３ビットが第４の出力として、加算器１４ｃの第１０の入力の下位３ビット位置に送られる。
【０２０１】
倍精度演算モードにおける第３〜４サイクルにおけるＷａｌｌａｃｅ木乗算器２ａ〜２ｄの入力は第２変形例と同様である。第３〜４サイクルの以降の計算手順は、第２サイクルの計算手順と同様なので、説明を繰り返さない。
【０２０２】
第２の接続切替器１３０は、第４サイクルの終了後、レジスタ１５ａ〜１５ｄ、２５ａ〜２５ｄ内のデータを加算器１６ａ〜１６ｄのいずれかに出力する。
【０２０３】
レジスタ１５ａに保持されている和信号｛Ｓｌ２５（３）−Ｓｌ０（３）｝と、レジスタ２５ａに保持されている桁上げ信号｛Ｒｌ２５（３）−Ｒｌ０（３）｝とが加算器１６ａに送られる。加算器１６ａは、加算を実行して、積Ｃ１の第１ビット群Ｃ１０を出力端子ＯＰ１へ出力する。加算器１６ｂ〜ｄも同様にして、積Ｃ１の第２〜４ビット群Ｃ１１〜Ｃ１３を出力端子ＯＰ２〜４へ出力する。ここで、加算器１６ｂ〜ｄは、この加算に伴う桁上がりを上位側の加算器１６ａ〜ｃへ供給し、上位側の加算器１６ａ〜ｃはこの桁上がりを含めて上記の加算を行ってよい。
【０２０４】
次に、加算器１４ａ〜１４ｄの具体的な構成例を説明する。
半精度演算モードでは、加算器１４ａ〜ｄには、データが入力されない。すなわち、Ｗａｌｌａｃｅ木乗算器２ａ〜ｄから出力される和信号Ｄ、Ｆ、Ｈ、およびＪと桁上げ信号Ｅ、Ｇ、Ｉ、およびＫとが、加算器１４ａ〜ｄを迂回して、加算器１６ａ〜ｄに送られる。単精度演算モードでは、加算器１４ａ〜ｄは、順に、６入力２出力、６入力２出力＋２桁上げ信号出力、６入力２出力、６入力２出力＋２桁上げ信号出力の桁上げ信号保留加算を実行する。倍精度演算モードでは、加算器１４ａ〜ｄは、順に、４入力２出力、６入力２出力＋２桁上げ信号出力、１０入力２出力＋２桁上げ信号出力、６入力２出力＋２桁上げ信号出力の桁上げ信号保留加算を実行する。
【０２０５】
加算器１４ａは、４個のＣＳＡを備える。加算器１４ａは、単精度演算モードでは、４個のＣＳＡを用いて桁上げ信号保留加算を実行し、倍精度演算モードでは、２個のＣＳＡを用いて桁上げ信号保留加算を実行する。
【０２０６】
加算器１４ｂは、４個のＣＳＡを備える。加算器１４ｂは、単精度演算モードおよび倍精度演算モードでは、４個のＣＳＡを用いて桁上げ信号保留加算を実行する。
【０２０７】
加算器１４ｃは、８個のＣＳＡを備える。加算器１４ｃは、単精度演算モードでは、４個のＣＳＡを用いて桁上げ信号保留加算を実行し、倍精度演算モードでは、８個のＣＳＡを用いて桁上げ信号保留加算を実行する。
【０２０８】
加算器１４ｄは、４個のＣＳＡを備える。加算器１４ｄは、単精度演算モードおよび倍精度演算モードでは、４個のＣＳＡを用いて桁上げ信号保留加算を実行する。
【０２０９】
図３０は、２個のＣＳＡを用いて桁上げ信号保留加算を実行する加算器２００の構成を表わす。この加算器２００の構成は、加算器１４ａの倍精度演算モード時の構成である。図３１は、加算器２００の入力データ、途中データ、出力データを表わす。
【０２１０】
この加算器２００には、４つのデータＹ０、Ｙ１、Ｙ２、Ｙ３が入力される。
ＣＳＡ１１１は、Ｙ０と、Ｙ１と、Ｙ２とを桁上げ信号保留加算して、和信号１Ｓと、桁上げ信号１Ｒとを出力する。ＣＳＡ１１２は、Ｙ３と、和信号１Ｓと、桁上げ信号１Ｒとを桁上げ信号保留加算して、和信号２Ｓと、桁上げ信号２Ｒとを出力する。
【０２１１】
和信号２Ｓの下位２６ビットが一方のレジスタへ出力され、桁上げ信号２Ｒの下位２６ビットが他方のレジスタへ出力される。
【０２１２】
図３２は、４個のＣＳＡを用いて桁上げ信号保留加算を実行する加算器３００の構成を表わす図である。この加算器３００の構成は、加算器１４ａ〜ｄの単精度演算モード時の構成、および加算器１４ｂ，ｄの倍精度演算モード時の構成である。図３３は、加算器３００の入力データ、途中データ、出力データを表わす図である。
【０２１３】
この加算器３００には、６つのデータＹ０、Ｙ１、Ｙ２、Ｙ３、Ｙ４、Ｙ５が入力される。
【０２１４】
ＣＳＡ１２１は、Ｙ０と、Ｙ１と、Ｙ２とを桁上げ信号保留加算して、和信号１Ｓと、桁上げ信号１Ｒとを出力する。ＣＳＡ１２２は、Ｙ３と、Ｙ４と、Ｙ５とを桁上げ信号保留加算して、和信号２Ｓと、桁上げ信号２Ｒとを出力する。ＣＳＡ１２３は、和信号１Ｓと、桁上げ信号１Ｒと、和信号２Ｓとを桁上げ信号保留加算して、和信号３Ｓと、桁上げ信号３Ｒとを出力する。ＣＳＡ１２４は、和信号３Ｓと、桁上げ信号３Ｒと、桁上げ信号２Ｒとを桁上げ信号保留加算して、和信号４Ｓと、桁上げ信号４Ｒとを出力する。
【０２１５】
和信号４Ｓの下位２６ビットが一方のレジスタへ出力され、桁上げ信号４Ｒの下位２６ビットが他方のレジスタへ出力される。桁上げ信号出力する場合には、和信号４Ｓの上位２ビットが他の加算器へ桁上げ信号出力され、桁上げ信号４Ｒの上位３ビットが他の加算器へ桁上げ信号出力される。
【０２１６】
なお、和信号１Ｓ、２Ｓ、桁上げ信号１Ｒ，２Ｒが生成された時点で、それらのパターンに従って、２ビットまたは３ビットの桁上げビットを生成して、加算器３００から他の加算器へ出力するものとしてもよい。
【０２１７】
図３４は、８個のＣＳＡを用いて桁上げ信号保留加算を実行する加算器４００の構成を表わす図である。この加算器４００の構成は、加算器１４ｃの倍精度演算モード時の構成である。この加算器４００には、１０個のデータＹ０〜Ｙ９が入力される。
【０２１８】
ＣＳＡ１３１は、Ｙ０と、Ｙ１と、Ｙ２とを桁上げ信号保留加算して、和信号１Ｓと、桁上げ信号１Ｒとを出力する。ＣＳＡ１３２は、Ｙ３と、Ｙ４と、Ｙ５とを桁上げ信号保留加算して、和信号２Ｓと、桁上げ信号２Ｒとを出力する。ＣＳＡ１３３は、Ｙ６と、Ｙ７と、Ｙ８とを桁上げ信号保留加算して、和信号３Ｓと、桁上げ信号３Ｒとを出力する。
【０２１９】
ＣＳＡ１３４は、和信号１Ｓと、桁上げ信号１Ｒと、和信号２Ｓとを桁上げ信号保留加算して、和信号４Ｓと、桁上げ信号４Ｒとを出力する。ＣＳＡ１３５は、Ｙ９と、桁上げ信号２Ｒと、和信号３Ｓとを桁上げ信号保留加算して、和信号５Ｓと、桁上げ信号５Ｒとを出力する。ＣＳＡ１３６は、和信号４Ｓと、桁上げ信号４Ｒと、和信号５Ｓとを桁上げ信号保留加算して、和信号６Ｓと、桁上げ信号６Ｒとを出力する。ＣＳＡ１３７は、和信号６Ｓと、桁上げ信号３Ｒと、桁上げ信号５Ｒとを桁上げ信号保留加算して、和信号７Ｓと、桁上げ信号７Ｒとを出力する。ＣＳＡ１３８は、桁上げ信号６Ｒと、和信号７Ｓと、桁上げ信号７Ｒとを桁上げ信号保留加算して、和信号８Ｓと、桁上げ信号８Ｒとを出力する。
【０２２０】
和信号８Ｓの下位２６ビットが一方のレジスタへ出力され、桁上げ信号８Ｒの下位２６ビットが他方のレジスタへ出力される。また、和信号８Ｓの上位３ビットが他の加算器へ桁上げ信号出力され、桁上げ信号８Ｒの上位４ビットが他の加算器へ桁上げ信号出力される。
【０２２１】
本実施の形態の演算装置によれば、加算器１４ａ〜１４ｄは、加算結果の１段前の和信号および桁上げ信号を出力し、加算器１６ａ〜１６ｄは、単精度演算では、２サイクルに１回だけ、倍精度演算では、４サイクルに１回だけ加算を実行すればよい。したがって、本実施の形態では、演算装置全体の動作速度および電力効率を第２変形例よりも増加させることができる。
【０２２２】
［第４変形例］
図３５は、第４変形例の演算システム１０００の構成を表わす。この演算システム１００は、演算ユニット９００と、複数の要素プロセッサＰＥ１〜ＰＥ４とを備える。
【０２２３】
複数の要素プロセッサＰＥ１〜ＰＥ４は、演算ユニット９００を共有して使用する。演算システム１０００が行列演算を実行するときには、要素プロセッサＰＥ１〜ＰＥ４が協同して１つのプロセッサとして動作し、行列演算以外の演算を実行するときには、要素プロセッサＰＥ１〜ＰＥ４が個別のプロセッサとして動作する。演算システム１０００が行列演算以外の演算を実行する際にも、要素プロセッサＰＥ１〜ＰＥ４が１つのプロセッサとして動作するものとしてもよい。要素プロセッサＰＥ１〜ＰＥ４が１つのプロセッサとして動作する場合、１つのインストラクションで要素プロセッサＰＥ１〜ＰＥ４が動作するので、要素プロセッサＰＥ１〜ＰＥ４は、ＳＩＭＤ動作を行っているとみなされうる。
【０２２４】
要素プロセッサＰＥ１〜ＰＥ４は、リング結合されている。具体的には、要素プロセッサＰＥ１と要素プロセッサＰＥ２とがデータバスで接続され、要素プロセッサＰＥ２と要素プロセッサＰＥ３とがデータバスで接続され、要素プロセッサＰＥ３と要素プロセッサＰＥ４とがデータバスで接続され、要素プロセッサＰＥ４と要素プロセッサＰＥ１とがデータバスで接続されている。要素プロセッサＰＥ１〜ＰＥ４には、要素プロセッサを一意に識別可能なプロセッサＩＤ（００，０１，１０，１１）が設定されている。
【０２２５】
演算システム１０００には、メモリ空間が設定されている。メモリ空間のメモリアドレスは、プロセッサＩＤを含む。たとえば、メモリアドレスの下位２ビットがプロセッサＩＤに対応するものとしてもよい。要素プロセッサＰＥ１〜ＰＥ４のそれぞれには、たとえば、１０ビットのアドレスに対応するメモリ空間が割り当てられている。したがって、演算システム１０００のメモリ空間は、１２ビットに拡大されている。つまり、演算システム１０００のメモリ空間が４等分され、各メモリアドレスによって示されるメモリ領域には、当該メモリアドレスに含まれるプロセッサＩＤによって示される要素プロセッサがアクセスする。
【０２２６】
要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、当該要素プロセッサのプロセッサＩＤを含むメモリアドレスによって示されるメモリ領域（担当領域）へアクセスできるが、当該要素プロセッサのプロセッサＩＤとは異なるプロセッサＩＤを含むメモリアドレスによって示されるメモリ領域（非担当領域）へアクセスできない。要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、リング結合を介して他の要素プロセッサに順にデータ転送（循環シフト）する。これにより、要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、非担当領域のデータを読出し、または非担当領域にデータを書込むことができる。要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、メモリアドレスによって示される領域に、演算ユニット９００による演算対象である入力データ、および演算ユニット９００による演算結果である出力データを保持する。
【０２２７】
演算ユニット９００は、たとえば、複数の浮動小数点演算を並列して実行することができる。演算ユニット９００は、たとえば、ディープニューラルネットワーク（ＤＮＮ：Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）およびコンボリューションニューラルネットワーク（ＣＮＮ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｔｗｏｒｋ）のための演算を実行することができる。
【０２２８】
演算ユニット９００は、複数の演算装置１Ａ〜１Ｄを備える。演算装置１Ａ〜１Ｄのそれぞれは、実施形態で説明した演算装置４０５、第１変形例で説明した演算装置４０５、第２変形例で説明した演算装置１、または第３変形例で説明した演算装置１０１である。
【０２２９】
演算装置１Ａ〜１Ｄの各々は、演算ユニット９００の演算の一部を実行する装置である。要素プロセッサＰＥ１は、演算装置１Ａのレジスタにアクセス可能である。要素プロセッサＰＥ２は、演算装置１Ｂのレジスタにアクセス可能である。要素プロセッサＰＥ３は、演算装置１Ｃのレジスタにアクセス可能である。要素プロセッサＰＥ４は、演算装置１Ｄのレジスタにアクセス可能である。
【０２３０】
（他の変形例）
本発明は、上記の実施形態に限定されるものではなく、たとえば以下のような変形例も含む。
【０２３１】
（１）上記の実施形態では、演算装置は、乗算（Ａ＊Ｂ）を実行しているが、Ａ＊Ｂ＋Ｃを実行することも可能である。このためには、単精度演算の場合には、加算器４ａ、４ｃ、１４ａ，１４ｃの第３の入力の初期値を０からＣに変更すればよく、倍精度演算の場合には、加算器４ａ、１４ａの第１の入力の初期値を０からＣに変更すればよい。半精度の場合にも、加算器４ａ〜４ｄ、１４ａ〜１４ｄの使用されていない入力ポートにＣを供給すればよい。
【０２３２】
（２）上記の実施形態では、浮動小数点形式のデータの仮数部分の演算回路を示しているが、固定小数点形式およびブロック浮動小数点形式のデータの演算回路としても適用可能である。また、これらの演算データ（浮動小数点形式、固定小数点形式、およびブロック浮動小数点形式）が混在したデータの演算回路としても適用可能である。
【０２３３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２３４】
１，１Ａ〜１Ｄ，１０１  演算装置、２ａ〜２ｄ  Ｗａｌｌａｃｅ木乗算器、４ａ〜４ｄ，１４ａ〜１４ｄ，１６ａ〜１６ｄ，２００，３００，４００  加算器、５ａ〜５ｄ，１５ａ〜１５ｄ，２５ａ〜２５ｄ  レジスタ、６ａ〜６ｄ，７ａ〜７ｄ，１７ａ〜１７ｄ，２７ａ〜２７ｄ  シフタ、９ｂ〜９ｄ，１５１ｂ〜１５１ｄ，１６１ｂ〜１６１ｄ  スイッチ、２０，１２０  第１の接続切替器、３０，１３０  第２の接続切替器、５１〜６１，１１１，１１２，１２１〜１２４，１３１〜１３８  ＣＳＡ、７９  入力生成器、９００  演算ユニット、１０００  演算システム、ＰＥ１〜ＰＥ４  要素プロセッサ、ＯＰ１〜ＯＰ４  出力端子、４０５  演算装置、４１０  乗算部、４２０−１〜４  乗算器、４３０  加算部、４４０−１〜４  加算器、４５０−１〜４  中間レジスタ、４６０  モード選択部、４７０  第１接続切替器、４８０  第２接続切替器、５４０  加算器、５４２  第１加算要素、５４４  第２加算要素、５５０  中間レジスタ。
【図１】
2019189878.tif 000003
【図２】
2019189878.tif 000004
【図３】
2019189878.tif 000005
【図４】
2019189878.tif 000006
【図５】
2019189878.tif 000007
【図６】
2019189878.tif 000008
【図７】
2019189878.tif 000009
【図８】
2019189878.tif 000010
【図９】
2019189878.tif 000011
【図１０】
2019189878.tif 000012
【図１１】
2019189878.tif 000013
【図１２】
2019189878.tif 000014
【図１３】
2019189878.tif 000015
【図１４】
2019189878.tif 000016
【図１５】
2019189878.tif 000017
【図１６】
2019189878.tif 000018
【図１７】
2019189878.tif 000019
【図１８】
2019189878.tif 000020
【図１９】
2019189878.tif 000021
【図２０】
2019189878.tif 000022
【図２１】
2019189878.tif 000023
【図２２】
2019189878.tif 000024
【図２３】
2019189878.tif 000025
【図２４】
2019189878.tif 000026
【図２５】
2019189878.tif 000027
【図２６】
2019189878.tif 000028
【図２７】
2019189878.tif 000029
【図２８Ａ】
2019189878.tif 000030
【図２８Ｂ】
2019189878.tif 000031
【図２９Ａ】
2019189878.tif 000032
【図２９Ｂ】
2019189878.tif 000033
【図３０】
2019189878.tif 000034
【図３１】
2019189878.tif 000035
【図３２】
2019189878.tif 000036
【図３３】
2019189878.tif 000037
【図３４】
2019189878.tif 000038
【図３５】
2019189878.tif 000039
【国際調査報告】
2019189878.tif 000040
2019189878.tif 000041
2019189878.tif 000042