(57)【要約】【課題】回路面積および消費電力を削減する。【解決手段】演算回路は、係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）を２個ずつ組み分けしたときの組毎に計算した値を出力するＬＵＴ生成回路１と、データｘ［ｍ，ｎ］の組をＭ組含むデータセットＸ［ｍ］（ｍ＝１，・・・，Ｍ）のうちデータｘ［ｍ，ｎ］の各々に係数ｃ［ｎ］を乗じて合算した積和演算の値ｙ［ｍ］を、Ｍ組の組毎に並列に計算する分散演算回路２−ｍを備える。分散演算回路２−ｍは、自回路に対応するＮ個のデータｘ［ｍ，ｎ］を２個ずつに組み分けした各値と係数ｃ［ｎ］を２個ずつに組み分けした各値とＬＵＴ生成回路１によって計算された値に基づいて２項積和演算の値を、２個ずつ組み分けした各組毎に計算する複数の２項分散演算回路と、計算された値を合算する合算回路と、合算された結果の小数点以下桁数を所定の小数点以桁数に合わせる桁合わせ回路から構成される。【選択図】  図１
2019121172.tif 000002
【特許請求の範囲】
【請求項１】
固定小数点の２進数であるＮ個（Ｎは２以上の整数）のデータｘ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）の組をＭ組（Ｍは２以上の整数）含むデータセットＸ［ｍ］（ｍ＝１，・・・，Ｍ）と、固定小数点の２進数であるＮ個の係数ｃ［ｎ］とを入力とし、Ｍ個の積和演算の値ｚ［ｍ］を計算して出力する演算回路において、
前記係数ｃ［ｎ］を２個ずつに組み分けしたときの組毎に計算した値を出力するＬＵＴ生成回路と、
前記データセットＸ［ｍ］のうちＮ個のデータｘ［ｍ，ｎ］の各々に係数ｃ［ｎ］を乗じて合算した結果である前記積和演算の値ｚ［ｍ］を、前記Ｍ組の各組毎に並列に計算して出力するＭ個の分散演算回路とを備え、
各分散演算回路は、
自回路に対応するＮ個のデータｘ［ｍ，ｎ］を２個ずつに組み分けした各値と前記係数ｃ［ｎ］を２個ずつに組み分けした各値と前記ＬＵＴ生成回路によって計算された値とに基づいて、前記Ｎ個のデータｘ［ｍ，ｎ］の各々に前記係数ｃ［ｎ］の各々を乗じて合算した２項積和演算の値を、前記２個ずつに組み分けした各組毎に並列に計算して出力する複数の２項分散演算回路と、
前記複数の２項分散演算回路によって計算された値を合算する第１の合算回路と、
この第１の合算回路によって合算された結果の小数点以下桁数を、この小数点以下桁数よりも小さい所定の小数点以桁数に合わせる処理を行い、この処理結果を前記積和演算の値ｚ［ｍ］として出力する桁合わせ回路とから構成され、
各２項分散演算回路は、
前記Ｎ個のデータｘ［ｍ，ｎ］のうち同一組の２個の値のビット位置毎に設けられ、値０と、前記係数ｃ［ｎ］のうち同一組の２個の値と、この係数ｃ［ｎ］の２個の値から前記ＬＵＴ生成回路によって計算された値とからなる要素値の中から、前記Ｎ個のデータｘ［ｍ，ｎ］のうち同一組の２個の値を構成する同一ビット位置の２個の値に対応する１個の要素値をビット位置毎に取得する複数の索引回路と、
前記複数の索引回路によって取得された要素値に対してビット位置別演算を行う複数のビット位置別演算回路と、
前記複数のビット位置別演算回路によって計算された値を合算した結果を前記２項積和演算の値として出力する第２の合算回路とから構成され、
前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが所定の値Ｌｃ（Ｌｃは２以上Ｌ未満の整数）より小さいビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値の最下位ビット側の（Ｌｃ−ｌ）ビット分を無効化することを特徴とする演算回路。
【請求項２】
請求項１の演算回路において、
前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより大きいビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値に対して最下位ビット側に（ｌ−Ｌｃ）ビット分の０を挿入する左シフト演算を行い、
前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより小さいビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値に対して（Ｌｃ−ｌ）ビット分の右シフト演算を行い、
前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃと一致するビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値をそのまま出力することを特徴とする演算回路。
【請求項３】
請求項１または２記載の演算回路において、
前記ＬＵＴ生成回路は、前記係数ｃ［ｎ］を２個ずつに組み分けした値ｃ［２×ｎ’−１］とｃ［２×ｎ’］（ｎ’＝１，・・・，Ｎ’）の和ｃ［２×ｎ’−１］＋ｃ［２×ｎ’］を値ｄ［ｎ’］としてＮ’個（Ｎ’はＮ／２以下で最大の整数）の組毎に計算し、
各分散演算回路は、前記データセットＸ［ｍ］と前記ＬＵＴ生成回路から出力された係数ｃ［ｎ］および前記ＬＵＴ生成回路によって計算された値ｄ［ｎ’］とを入力とし、データセットＸ［ｍ］のうち自回路に対応するＮ個のデータｘ［ｍ，ｎ］の各々に係数ｃ［ｎ］を乗じて合算した結果である前記積和演算の値ｚ［ｍ］を出力することを特徴とする演算回路。
【請求項４】
請求項１乃至３のいずれか１項に記載の演算回路において、
各分散演算回路は、
前記Ｎが奇数の場合にｃ［Ｎ］×ｘ［ｍ，Ｎ］を計算した結果を出力する補助乗算回路をさらに備え、
前記第１の合算回路は、前記Ｎが奇数の場合に、前記複数の２項分散演算回路によって計算された値と前記補助乗算回路によって計算された値とを合算することを特徴とする演算回路。
【請求項５】
請求項１乃至４のいずれか１項に記載の演算回路において、
前記第２の合算回路は、前記複数のビット位置別演算回路のうち最上位のビット位置に対応するビット位置別演算回路によって計算された値のビット幅に、他のビット位置別演算回路によって計算された値のビット幅を合わせた後に、前記複数のビット位置別演算回路によって計算された値を合算することを特徴とする演算回路。
【請求項６】
Ｍ個（Ｍは２以上の整数）の各々が実部値ｘ＿ｒｅａｌ［ｍ］と虚部値ｘ＿ｉｍａｇ［ｍ］（ｍ＝１，・・・，Ｍ）とに分かれる、Ｍ個の複素数Ｘ［ｍ］（ｍ＝１，・・・，Ｍ）と、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇとに分かれる複素数係数Ｃとを入力とし、実部の積和演算の結果と虚部の積和演算の結果とからなるＭ個の複素数値Ｚ［ｍ］を計算して出力する演算回路において、
前記複素数係数Ｃの実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇの差の値ｄ＿ｓｕｂと、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇの和の値ｄ＿ａｄｄとを計算するＬＵＴ生成回路と、
前記複素数Ｘ［ｍ］のうち自回路に対応するデータの各々に前記複素数係数Ｃを乗じて合算した結果である複素数値Ｙ［ｍ］を、前記Ｍ個の各々について並列に計算して出力するＭ個の分散演算回路と、
このＭ個の分散演算回路から出力された複素数値Ｙ［ｍ］のうち、実部の積和演算の結果ｙ＿ｒｅａｌ［ｍ］の小数点以下桁数と虚部の積和演算の結果ｙ＿ｉｍａｇ［ｍ］の小数点以下桁数のそれぞれを、これらの小数点以下桁数よりも小さい所定の小数点以桁数に合わせる処理を行い、この処理結果を前記複素数値Ｚ［ｍ］を構成するｚ＿ｒｅａｌ［ｍ］，ｚ＿ｉｍａｇ［ｍ］として出力するＭ個の桁合わせ回路とを備え、
各分散演算回路は、
前記複素数Ｘ［ｍ］の実部値ｘ＿ｒｅａｌ［ｍ］および虚部値ｘ＿ｉｍａｇ［ｍ］のビット位置毎に設けられ、値０、ｃ＿ｒｅａｌ、−ｃ＿ｉｍａｇ、ｄ＿ｓｕｂからなる要素値の中から、前記実部値ｘ＿ｒｅａｌ［ｍ］および前記虚部値ｘ＿ｉｍａｇ［ｍ］のうち自回路に対応するビット位置の２個の値に対応する１個の要素値をビット位置毎に取得する複数の第１の索引回路と、
前記複数の第１の索引回路によって取得された要素値に対してビット位置別演算を行う複数の第１のビット位置別演算回路と、
前記複数の第１のビット位置別演算回路によって計算された値を合算した結果を前記実部の積和演算の値ｙ＿ｒｅａｌ［ｍ］として出力する第１の合算回路と、
前記複素数Ｘ［ｍ］の実部値ｘ＿ｒｅａｌ［ｍ］および虚部値ｘ＿ｉｍａｇ［ｍ］のビット位置毎に設けられ、値０、ｃ＿ｉｍａｇ、ｃ＿ｒｅａｌ、ｄ＿ａｄｄからなる要素値の中から、前記実部値ｘ＿ｒｅａｌ［ｍ］および前記虚部値ｘ＿ｉｍａｇ［ｍ］のうち自回路に対応するビット位置の２個の値に対応する１個の要素値をビット位置毎に取得する複数の第２の索引回路と、
前記複数の第２の索引回路によって取得された要素値に対してビット位置別演算を行う複数の第２のビット位置別演算回路と、
前記複数の第２のビット位置別演算回路によって計算された値を合算した結果を前記虚部の積和演算の値ｙ＿ｉｍａｇ［ｍ］として出力する第２の合算回路とから構成され、
前記実部の積和演算ｃ＿ｒｅａｌ×ｘ＿ｒｅａｌ［ｍ］−ｃ＿ｉｍａｇ×ｘ＿ｉｍａｇ［ｍ］の結果であるｙ＿ｒｅａｌ［ｍ］と、前記虚部の積和演算ｃ＿ｉｍａｇ×ｘ＿ｒｅａｌ［ｍ］＋ｃ＿ｒｅａｌ×ｘ＿ｉｍａｇ［ｍ］の結果であるｙ＿ｉｍａｇ［ｍ］とを、前記Ｍ個の各々について並列に計算して出力するものであり、
前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが所定の値Ｌｃ（Ｌｃは２以上Ｌ未満の整数）より小さいビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値の最下位ビット側の（Ｌｃ−ｌ）ビット分を無効化することを特徴とする演算回路。
【請求項７】
請求項６の演算回路において、
前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより大きい第１、第２のビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値に対して最下位ビット側に（ｌ−Ｌｃ）ビット分の０を挿入する左シフト演算を行い、
前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより小さい第１、第２のビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値に対して（Ｌｃ−ｌ）ビット分の右シフト演算を行い、
前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃと一致する第１、第２のビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値をそのまま出力することを特徴とする演算回路。
【請求項８】
請求項６または７記載の演算回路において、
前記第１の合算回路は、前記複数の第１のビット位置別演算回路のうち最上位のビット位置に対応する第１のビット位置別演算回路によって計算された値のビット幅に、他の第１のビット位置別演算回路によって計算された値のビット幅を合わせた後に、前記複数の第１のビット位置別演算回路によって計算された値を合算し、
前記第２の合算回路は、前記複数の第２のビット位置別演算回路のうち最上位のビット位置に対応する第２のビット位置別演算回路によって計算された値のビット幅に、他の第２のビット位置別演算回路によって計算された値のビット幅を合わせた後に、前記複数の第２のビット位置別演算回路によって計算された値を合算することを特徴とする演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディジタル信号処理における演算回路に係り、特に積和演算を行う演算回路に関するものである。
【背景技術】
【０００２】
ディジタル信号処理における主な演算は、固定小数点の２進数として表現されたディジタル信号のデータに、同じく固定小数点の２進数として表現された係数を乗じて、これらを合算する積和演算である（非特許文献１参照）。図１１に、一般的な積和演算回路の構成を示す。
【０００３】
図１１の積和演算回路は、各々が２進数で表現されたＮ個のデータｘ［ｎ］（ｎ＝１，・・・，Ｎ）と係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）とを入力とする。ここで、各データｘ［ｎ］は固定小数点の２進数であり、その小数点以下桁数（小数点以下のビット幅）はｘ＿ｓｃａｌｅである。また、各係数ｃ［ｎ］は固定小数点の２進数であり、その小数点以下桁数はｃ＿ｓｃａｌｅである。
【０００４】
積和演算回路は、Ｎ個の乗算回路１０００−ｎ（ｎ＝１，・・・，Ｎ）を備える。各乗算回路１０００−ｎは、データｘ［ｎ］と係数ｃ［ｎ］との乗算ｃ［ｎ］×ｘ［ｎ］を行い、その結果ｗ［ｎ］を出力する。ここでの乗算は単純な２進数の乗算であるため、ｗ［ｎ］を固定小数点数として扱う場合の小数点以下桁数は、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅとなる。
【０００５】
また、積和演算回路は、合算回路１００１を備える。合算回路１００１は、ｗ［ｎ］（ｎ＝１，・・・，Ｎ）の合算Σn=1,・・・,N（ｃ［ｎ］×ｘ［ｎ］）を行い、その結果ｙを出力する。ここでの合算は単純な２進数の加算を繰り返す演算であるため、ｙを固定小数点数として扱う場合の小数点以下桁数は、ｗ［ｎ］の小数点以下桁数と同じく、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅとなる。
【０００６】
さらに、積和演算回路は、桁合わせ回路１００２を備える。桁合わせ回路１００２は、ｙの下位ビット切捨あるいは四捨五入によって、その小数点以下桁数を、積和演算回路が出力すべき固定小数点数ｚの小数点以桁数ｚ＿ｓｃａｌｅに合わせる。通常は、小数点以桁数ｚ＿ｓｃａｌｅは、ｓの小数点以下桁数ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅよりも小さい値である。したがって、切捨処理を行う桁合わせ回路１００２は、ｙの下位の（ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅ−ｚ＿ｓｃａｌｅ）個のビットを削除した値を出力する。また、四捨五入処理を行う桁合わせ回路１００２は、前記の切捨処理によって削除されるビットのうち最上位１ビットを、切捨処理で残った値に加算した値を出力する。
【０００７】
桁合わせ回路１００２が、合算回路１００１によって合算された値ｙに対して切捨処理あるいは四捨五入処理を行う理由を以下に説明する。
一般的にデータや係数には雑音成分が含まれており、特に下位ビットにおいて、信号成分に対する雑音成分の比率が大きくなる。したがって、データと係数の乗算結果についても、その下位ビットにおいて、雑音成分の比率が大きくなる。特に、乗算結果を表すビットのうち、データの小数点以下桁数または係数の小数点以下桁数よりも下位のビットには、量子化雑音が含まれる。
【０００８】
また、ディジタル信号処理において、ある積和演算回路が出力した値は、通常、さらに別の係数値を用いた別の積和演算回路の入力となる。このように積和演算が多段に行われるとき、入力値の桁数と比べて出力値の桁数が増加すると、後段の積和演算回路において扱う桁数が増大するため、回路規模や消費電力が増大するという問題を生じる。
【０００９】
また、前段の積和演算回路内でデータと係数との乗算が行われるため、桁合わせ回路１００２によって桁数を縮小しない場合の乗算以後の桁数は、データと係数の各桁数の和以上となる。したがって、前段の積和演算回路が桁数を縮小しないで出力した値を、その後段の積和演算回路が入力して演算を行う構成では、前段の積和演算回路よりも後段の積和演算回路の方が、回路規模や消費電力が大幅に増大することになる。
【００１０】
したがって、後段の積和演算回路が、前段の積和演算回路によって桁数が増大した値を入力して演算を行っても、雑音成分の比率が大きい下位ビットを対象とした演算処理からは、有意な結果を得ることができない。さらに、後段の積和演算処理を担う回路の面積やその回路が消費した電力は、前記の桁数の増大によって大幅に増大するため、無駄な回路面積や消費電力が大幅に増大するという問題を生じる。
【００１１】
そこで、図１１の積和演算回路では、桁合わせ回路１００２によって、雑音成分の高い下位ビットを削除し、有意なビット幅に限定して後段に出力することにより、後段回路のコスト（面積や消費電力）を削減している。
【００１２】
このように、回路規模や消費電力を削減するため、従来の積和演算回路では、その出力値に対して雑音成分の高い下位ビットを削除する処理を行っている。しかしながら、内部の乗算回路１０００−ｎ自体は、雑音成分の高いビットであるか否かに関わらず、正確な乗算処理を行っていた。したがって、従来の積和演算回路内の乗算回路１０００−ｎによって正確に算出された下位ビットは、桁合わせ回路１００２によって雑音成分の高いビットとして削除されていた。
【００１３】
乗算回路１０００−ｎは、桁数の増加に対して回路規模や消費電力が大幅に増大する特性をもっている（バランスツリー型の乗算回路では桁数の２乗に比例する）。このため、桁数の増加は回路素子や消費電力の増大を招くが、乗算回路１０００−ｎにより正確に算出された下位ビットは、桁合わせ回路１００２によって雑音成分の高いビットとして削除される。
【００１４】
したがって、従来の積和演算回路で使用されていた乗算回路１０００−ｎ内には、雑音成分が高いために桁合わせ回路１００２によって無効化される下位ビット値を正確に計算するための回路が含まれており、この下位ビット値を正確に計算するための回路の面積やその回路が消費した電力は無駄になっていた。特に、ディジタル信号処理システムの精度向上のためのデータの桁数や係数の桁数を増やす場合に、無駄な回路面積と消費電力の増大を招くという課題があった。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】易  茹，立岩武徳，浅見幸司，小林春夫，「遅延デジタルフィルタの分散型積和演算回路を用いたＦＰＧＡ実装の検討」，第２回  電気学会  東京支部  栃木支所・群馬支所  合同研究発表会，２０１２年
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本発明は、上記課題を解決するためになされたもので、回路面積および消費電力を削減することができる演算回路を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明は、固定小数点の２進数であるＮ個（Ｎは２以上の整数）のデータｘ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）の組をＭ組（Ｍは２以上の整数）含むデータセットＸ［ｍ］（ｍ＝１，・・・，Ｍ）と、固定小数点の２進数であるＮ個の係数ｃ［ｎ］とを入力とし、Ｍ個の積和演算の値ｚ［ｍ］を計算して出力する演算回路において、前記係数ｃ［ｎ］を２個ずつに組み分けしたときの組毎に計算した値を出力するＬＵＴ生成回路と、前記データセットＸ［ｍ］のうちＮ個のデータｘ［ｍ，ｎ］の各々に係数ｃ［ｎ］を乗じて合算した結果である前記積和演算の値ｚ［ｍ］を、前記Ｍ組の各組毎に並列に計算して出力するＭ個の分散演算回路とを備え、各分散演算回路は、自回路に対応するＮ個のデータｘ［ｍ，ｎ］を２個ずつに組み分けした各値と前記係数ｃ［ｎ］を２個ずつに組み分けした各値と前記ＬＵＴ生成回路によって計算された値とに基づいて、前記Ｎ個のデータｘ［ｍ，ｎ］の各々に前記係数ｃ［ｎ］の各々を乗じて合算した２項積和演算の値を、前記２個ずつに組み分けした各組毎に並列に計算して出力する複数の２項分散演算回路と、前記複数の２項分散演算回路によって計算された値を合算する第１の合算回路と、この第１の合算回路によって合算された結果の小数点以下桁数を、この小数点以下桁数よりも小さい所定の小数点以桁数に合わせる処理を行い、この処理結果を前記積和演算の値ｚ［ｍ］として出力する桁合わせ回路とから構成され、各２項分散演算回路は、前記Ｎ個のデータｘ［ｍ，ｎ］のうち同一組の２個の値のビット位置毎に設けられ、値０と、前記係数ｃ［ｎ］のうち同一組の２個の値と、この係数ｃ［ｎ］の２個の値から前記ＬＵＴ生成回路によって計算された値とからなる要素値の中から、前記Ｎ個のデータｘ［ｍ，ｎ］のうち同一組の２個の値を構成する同一ビット位置の２個の値に対応する１個の要素値をビット位置毎に取得する複数の索引回路と、前記複数の索引回路によって取得された要素値に対してビット位置別演算を行う複数のビット位置別演算回路と、前記複数のビット位置別演算回路によって計算された値を合算した結果を前記２項積和演算の値として出力する第２の合算回路とから構成され、前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが所定の値Ｌｃ（Ｌｃは２以上Ｌ未満の整数）より小さいビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値の最下位ビット側の（Ｌｃ−ｌ）ビット分を無効化することを特徴とするものである。
【００１８】
また、本発明の演算回路の１構成例において、前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより大きいビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値に対して最下位ビット側に（ｌ−Ｌｃ）ビット分の０を挿入する左シフト演算を行い、前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより小さいビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値に対して（Ｌｃ−ｌ）ビット分の右シフト演算を行い、前記複数のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃと一致するビット位置別演算回路は、自回路に対応する前記索引回路によって取得された要素値をそのまま出力することを特徴とするものである。
また、本発明の演算回路の１構成例において、前記ＬＵＴ生成回路は、前記係数ｃ［ｎ］を２個ずつに組み分けした値ｃ［２×ｎ’−１］とｃ［２×ｎ’］（ｎ’＝１，・・・，Ｎ’）の和ｃ［２×ｎ’−１］＋ｃ［２×ｎ’］を値ｄ［ｎ’］としてＮ’個（Ｎ’はＮ／２以下で最大の整数）の組毎に計算し、各分散演算回路は、前記データセットＸ［ｍ］と前記ＬＵＴ生成回路から出力された係数ｃ［ｎ］および前記ＬＵＴ生成回路によって計算された値ｄ［ｎ’］とを入力とし、データセットＸ［ｍ］のうち自回路に対応するＮ個のデータｘ［ｍ，ｎ］の各々に係数ｃ［ｎ］を乗じて合算した結果である前記積和演算の値ｚ［ｍ］を出力することを特徴とするものである。
【００１９】
また、本発明の演算回路の１構成例において、各分散演算回路は、前記Ｎが奇数の場合にｃ［Ｎ］×ｘ［ｍ，Ｎ］を計算した結果を出力する補助乗算回路をさらに備え、前記第１の合算回路は、前記Ｎが奇数の場合に、前記複数の２項分散演算回路によって計算された値と前記補助乗算回路によって計算された値とを合算することを特徴とするものである。
また、本発明の演算回路の１構成例において、前記第２の合算回路は、前記複数のビット位置別演算回路のうち最上位のビット位置に対応するビット位置別演算回路によって計算された値のビット幅に、他のビット位置別演算回路によって計算された値のビット幅を合わせた後に、前記複数のビット位置別演算回路によって計算された値を合算することを特徴とするものである。
【００２０】
また、本発明は、Ｍ個（Ｍは２以上の整数）の各々が実部値ｘ＿ｒｅａｌ［ｍ］と虚部値ｘ＿ｉｍａｇ［ｍ］（ｍ＝１，・・・，Ｍ）とに分かれる、Ｍ個の複素数Ｘ［ｍ］（ｍ＝１，・・・，Ｍ）と、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇとに分かれる複素数係数Ｃとを入力とし、実部の積和演算の結果と虚部の積和演算の結果とからなるＭ個の複素数値Ｚ［ｍ］を計算して出力する演算回路において、前記複素数係数Ｃの実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇの差の値ｄ＿ｓｕｂと、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇの和の値ｄ＿ａｄｄとを計算するＬＵＴ生成回路と、前記複素数Ｘ［ｍ］のうち自回路に対応するデータの各々に前記複素数係数Ｃを乗じて合算した結果である複素数値Ｙ［ｍ］を、前記Ｍ個の各々について並列に計算して出力するＭ個の分散演算回路と、このＭ個の分散演算回路から出力された複素数値Ｙ［ｍ］のうち、実部の積和演算の結果ｙ＿ｒｅａｌ［ｍ］の小数点以下桁数と虚部の積和演算の結果ｙ＿ｉｍａｇ［ｍ］の小数点以下桁数のそれぞれを、これらの小数点以下桁数よりも小さい所定の小数点以桁数に合わせる処理を行い、この処理結果を前記複素数値Ｚ［ｍ］を構成するｚ＿ｒｅａｌ［ｍ］，ｚ＿ｉｍａｇ［ｍ］として出力するＭ個の桁合わせ回路とを備え、各分散演算回路は、前記複素数Ｘ［ｍ］の実部値ｘ＿ｒｅａｌ［ｍ］および虚部値ｘ＿ｉｍａｇ［ｍ］のビット位置毎に設けられ、値０、ｃ＿ｒｅａｌ、−ｃ＿ｉｍａｇ、ｄ＿ｓｕｂからなる要素値の中から、前記実部値ｘ＿ｒｅａｌ［ｍ］および前記虚部値ｘ＿ｉｍａｇ［ｍ］のうち自回路に対応するビット位置の２個の値に対応する１個の要素値をビット位置毎に取得する複数の第１の索引回路と、前記複数の第１の索引回路によって取得された要素値に対してビット位置別演算を行う複数の第１のビット位置別演算回路と、前記複数の第１のビット位置別演算回路によって計算された値を合算した結果を前記実部の積和演算の値ｙ＿ｒｅａｌ［ｍ］として出力する第１の合算回路と、前記複素数Ｘ［ｍ］の実部値ｘ＿ｒｅａｌ［ｍ］および虚部値ｘ＿ｉｍａｇ［ｍ］のビット位置毎に設けられ、値０、ｃ＿ｉｍａｇ、ｃ＿ｒｅａｌ、ｄ＿ａｄｄからなる要素値の中から、前記実部値ｘ＿ｒｅａｌ［ｍ］および前記虚部値ｘ＿ｉｍａｇ［ｍ］のうち自回路に対応するビット位置の２個の値に対応する１個の要素値をビット位置毎に取得する複数の第２の索引回路と、前記複数の第２の索引回路によって取得された要素値に対してビット位置別演算を行う複数の第２のビット位置別演算回路と、前記複数の第２のビット位置別演算回路によって計算された値を合算した結果を前記虚部の積和演算の値ｙ＿ｉｍａｇ［ｍ］として出力する第２の合算回路とから構成され、前記実部の積和演算ｃ＿ｒｅａｌ×ｘ＿ｒｅａｌ［ｍ］−ｃ＿ｉｍａｇ×ｘ＿ｉｍａｇ［ｍ］の結果であるｙ＿ｒｅａｌ［ｍ］と、前記虚部の積和演算ｃ＿ｉｍａｇ×ｘ＿ｒｅａｌ［ｍ］＋ｃ＿ｒｅａｌ×ｘ＿ｉｍａｇ［ｍ］の結果であるｙ＿ｉｍａｇ［ｍ］とを、前記Ｍ個の各々について並列に計算して出力するものであり、前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが所定の値Ｌｃ（Ｌｃは２以上Ｌ未満���整数）より小さいビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値の最下位ビット側の（Ｌｃ−ｌ）ビット分を無効化することを特徴とするものである。
【００２１】
また、本発明の演算回路の１構成例において、前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより大きい第１、第２のビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値に対して最下位ビット側に（ｌ−Ｌｃ）ビット分の０を挿入する左シフト演算を行い、前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃより小さい第１、第２のビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値に対して（Ｌｃ−ｌ）ビット分の右シフト演算を行い、前記複数の第１、第２のビット位置別演算回路のうち、自回路の対応するビット位置ｌが前記Ｌｃと一致する第１、第２のビット位置別演算回路は、それぞれ自回路に対応する前記第１、第２の索引回路によって取得された要素値をそのまま出力することを特徴とするものである。
また、本発明の演算回路の１構成例において、前記第１の合算回路は、前記複数の第１のビット位置別演算回路のうち最上位のビット位置に対応する第１のビット位置別演算回路によって計算された値のビット幅に、他の第１のビット位置別演算回路によって計算された値のビット幅を合わせた後に、前記複数の第１のビット位置別演算回路によって計算された値を合算し、前記第２の合算回路は、前記複数の第２のビット位置別演算回路のうち最上位のビット位置に対応する第２のビット位置別演算回路によって計算された値のビット幅に、他の第２のビット位置別演算回路によって計算された値のビット幅を合わせた後に、前記複数の第２のビット位置別演算回路によって計算された値を合算することを特徴とするものである。
【発明の効果】
【００２２】
本発明の演算回路は、上位ビットと下位ビットを区別せずに全ビットに対して正確な乗算を行う乗算回路ではなく、データのビット位置毎にＬＵＴを検索して要素値を累積する分散演算を採用することにより、ビット位置毎に予め指定された下位ビットに対応した処理の回路を削減することができる。前記の削減した回路は、雑音成分が高いために桁合わせ回路によって無効化される下位ビット値を計算するための無駄な回路である。本発明は、前記の無駄な回路による面積・電力を削減できる効果がある。
【図面の簡単な説明】
【００２３】
【図１】図１は、本発明の第１の実施例に係る演算回路の構成を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係る分散演算回路の構成を示すブロック図である。
【図３】図３は、本発明の第１の実施例に係る２項分散演算回路の構成を示すブロック図である。
【図４】図４は、本発明の第１の実施例におけるＬＵＴ索引回路の動作を説明する図である。
【図５】図５は、本発明の第１の実施例に係る２項分散演算回路の演算の概念を説明する図である。
【図６】図６は、本発明の第１の実施例に係る２項分散演算回路の演算の概念を説明する図である。
【図７】図７は、本発明の第２の実施例に係る演算回路の構成を示すブロック図である。
【図８】図８は、本発明の第２の実施例に係る分散演算回路の構成を示すブロック図である。
【図９】図９は、本発明の第２の実施例における実部用ＬＵＴ索引回路および虚部用ＬＵＴ索引回路の動作を説明する図である。
【図１０】図１０は、本発明の第２の実施例に係る分散演算回路の演算の概念を説明する図である。
【図１１】図１１は、従来の積和演算回路の構成を示すブロック図である。
【発明を実施するための形態】
【００２４】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。図１は本発明の第１の実施例に係る演算回路の構成を示すブロック図である。本実施例の演算回路は、Ｍ組（Ｍは２以上の整数）のデータセットＸ［ｍ］（ｍ＝１，・・・，Ｍ）と、Ｎ個（Ｎは２以上の整数）の係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）とを入力とする。各データセットＸ［ｍ］（ｍ＝１，・・・，Ｍ）は、Ｎ個のデータｘ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）の組からなる。なお、データｘ［ｍ，ｎ］および係数ｃ［ｎ］の各々は、符号付きの固定小数点数を表現する、２の補数の２進数である。各データｘ［ｍ，ｎ］の小数点以桁数をｘ＿ｓｃａｌｅ、各係数ｃ［ｎ］の小数点以桁数をｃ＿ｓｃａｌｅとする。
【００２５】
図１の演算回路は、上記入力に対して、Ｍ個の積和演算の値ｚ［ｍ］（ｍ＝１，・・・，Ｍ）を計算して出力する。演算回路が出力する積和演算の値ｚ［ｍ］（ｍ＝１，・・・，Ｍ）の各々は、データセットＸ［ｍ］（ｍ＝１，・・・，Ｍ）を構成するＮ個のデータｘ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）の各々に係数ｃ［ｎ］を乗じて合算した結果、すなわちΣn=1,・・・,N（ｃ［ｎ］×ｘ［ｍ，ｎ］）に相当する結果から、雑音成分の高い下位ビットを削除して有意なビット幅に限定した値である。なお、積和演算の値ｚ［ｍ］は、符号付きの固定小数点数を表現する、２の補数の２進数であり、その小数点以桁数をｚ＿ｓｃａｌｅとする。
【００２６】
図１の演算回路は、１個のＬＵＴ生成回路１と、Ｍ個（Ｍは２以上の整数）の分散演算回路２−１〜２−Ｍとから構成される。
ＬＵＴ生成回路１は、積和演算の係数であるＮ個の係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）を入力とし、これらを２個ずつの組に分けたときの各組の値から、分散演算用ＬＵＴの要素として使用する値を計算する。そして、ＬＵＴ生成回路１は、計算した値を係数ｃ［ｎ］と併せて各分散演算回路２−１〜２−Ｍに分配する。
【００２７】
係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）を２個ずつに組み分けする方法は、後述する各分散演算回路２−ｍ（ｍ＝１，・・・，Ｍ）において行われる、分散演算に基づいた２項の積和演算の計算ｃ［ｐ］×ｘ［ｍ，ｐ］＋ｃ［ｑ］×ｘ［ｍ，ｑ］（ｐとｑはそれぞれ１からＮまでの範囲内の整数で、ｐ≠ｑ）でのｃ［ｐ］とｃ［ｑ］の組み分けと同じにする必要がある。
【００２８】
本実施例では、係数ｃ［ｎ］を、番号順が連続する奇数番目の値と直後の偶数番目の値の２個の組に組み分けする方法を説明する。したがって、本実施例では、２個ずつの組み分けにより、ｃ［１］とｃ［２］、ｃ［３］とｃ［４］、・・・というように、ｃ［２×ｎ’−１］とｃ［２×ｎ’］（ｎ’＝１，・・・，Ｎ’、Ｎ’はＮ／２以下で最大の整数）が同じ組に属する。前記のＮ’の値は、Ｎが偶数の場合にＮ／２であり、Ｎが奇数の場合に（Ｎ−１）／２である。
【００２９】
なお、本発明はこの組み分け方法に限定されず、係数ｃ［ｎ］の組み分け方法は、各分散演算回路２−ｍ（ｍ＝１，・・・，Ｍ）において行われる分散演算に基づいた２項の積和演算での組み分け方法と同じであればよい。
【００３０】
ＬＵＴ生成回路１は、係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）を２個ずつに組み分けした値ｃ［２×ｎ’−１］とｃ［２×ｎ’］（ｎ’＝１，・・・，Ｎ’）の和、すなわちｃ［２×ｎ’−１］＋ｃ［２×ｎ’］をｄ［ｎ’］として計算し、係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）と計算した値ｄ［ｎ’］（ｎ’＝１，・・・，Ｎ’）とを、各分散演算回路２−１〜２−Ｍに出力する。
【００３１】
なお、本発明は、以上の計算に限定されず、各分散演算回路２−ｍ（ｍ＝１，・・・，Ｍ）において用いられる分散演算用ＬＵＴの要素を生成するための計算であればよい。また、ＬＵＴ生成回路１により計算された値ｄ［ｎ’］は、符号付きの固定小数点数を表現する、２の補数の２進数である。
【００３２】
分散演算回路２−ｍ（ｍ＝１，・・・，Ｍ）の各々は、Ｎ個のデータｘ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）から構成されるデータセットＸ［ｍ］と、ＬＵＴ生成回路１から分配された係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）およびＬＵＴ生成回路１で計算された値ｄ［ｎ’］（ｎ’＝１，・・・，Ｎ’）とを入力とし、データセットＸ［ｍ］のうち自回路に対応するＮ個のデータｘ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）の各々に係数ｃ［ｎ］を乗じて合算した結果、すなわち、Σn=1,・・・,N（ｃ［ｎ］×ｘ［ｍ，ｎ］）に相当する値ｚ［ｍ］を出力する。
【００３３】
図２に、分散演算回路２−ｍ（ｍ＝１，・・・，Ｍ）の構成を示す。各分散演算回路２−ｍは、Ｎ’個の２項分散演算回路２０ｍ−ｎ’（ｎ’＝１，・・・，Ｎ’）と、分散演算結果合算回路２１ｍと、桁合わせ回路２２ｍとから構成される。
【００３４】
図２の分散演算回路２−ｍは、入力されたデータセットＸ［ｍ］のうち自回路に対応するＮ個のデータｘ［ｍ，ｎ］に対して、ＬＵＴ生成回路１が係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）に対して行った２個ずつの組み分けと同様に、２個ずつの組み分けを行う。
【００３５】
本実施例のＬＵＴ生成回路１は、係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）のうち番号が連続する奇数番目の値と直後の偶数番目の値の２個を同じ組みとして組み分けしている。このため、各分散演算回路２−ｍが行うＮ個のデータｘ［ｍ，ｎ］の組み分けについても同じく、ｘ［ｍ，２×ｎ’−１］とｘ［ｍ，２×ｎ’］（ｎ’＝１，・・・，Ｎ’、Ｎ’はＮ／２以下で最大の整数）を１つの組とする。
【００３６】
２項分散演算回路２０ｍ−ｎ’（ｎ’＝１，・・・，Ｎ’）の各々は、自回路に対応する１組みのデータｘ［ｍ，２×ｎ’−１］，ｘ［ｍ，２×ｎ’］と、係数ｃ［ｎ］（ｎ＝１，・・・，Ｎ）のうち自回路に対応する１組みの係数ｃ［２×ｎ’−１］，ｃ［２×ｎ’］と、ＬＵＴ生成回路１により計算された値ｄ［ｎ’］とを入力とする。
【００３７】
２項分散演算回路２０ｍ−ｎ’は、値０、ｃ［２×ｎ’−１］、ｃ［２×ｎ’］、ｄ［ｎ’］を各要素の数値とするＬＵＴを構成し、このＬＵＴを用いた分散演算によって、積和演算ｃ［２×ｎ’−１］×ｘ［ｍ，２×ｎ’−１］＋ｃ［２ｎ’］×ｘ［ｍ，２×ｎ’］の結果を取得してｙ’［ｍ，ｎ’］として出力する。なお、積和演算の結果ｙ’［ｍ，ｎ’］は、符号付きの固定小数点数を表現する、２の補数の２進数である。
【００３８】
分散演算結果合算回路２１ｍは、各２項分散演算回路２０ｍ−ｎ’（ｎ’＝１，・・・，Ｎ’）が出力した値ｙ’［ｍ，ｎ’］を合算、すなわち、Σn'=1,・・・,N'（ｙ’［ｍ，ｎ’］）を計算し、その結果をｙ［ｍ］として出力する。
【００３９】
なお、以上の分散演算回路２−ｍの説明はＮが偶数の場合であり、Ｎが奇数の場合は、図２に示すように、ｃ［Ｎ］×ｘ［ｍ，Ｎ］を計算して結果をｙ’［ｍ，Ｎ’＋１］として出力する補助乗算回路２３ｍを追加する。
【００４０】
さらに、Ｎが奇数の場合、分散演算結果合算回路２１ｍは、各２項分散演算回路２０ｍ−ｎ’（ｎ’＝１，・・・，Ｎ’）が出力した値ｙ’［ｍ，ｎ’］（ｎ’＝１，・・・，Ｎ’）と補助乗算回路２３ｍが出力した値ｙ’［ｍ，Ｎ’＋１］とを合算して、結果をｙ［ｍ］として出力する。
【００４１】
桁合わせ回路２２ｍは、分散演算結果合算回路２１ｍから出力された積和演算の結果ｙ［ｍ］の下位ビット切捨あるいは四捨五入によって、ｙ［ｍ］の小数点以下桁数を、演算回路が出力すべき固定小数点数の小数点以桁数ｚ＿ｓｃａｌｅに合わせる処理を行い、その処理結果をｚ［ｍ］として出力する。ｚ＿ｓｃａｌｅは、ｙ［ｍ］の小数点以下桁数ｙ＿ｓｃａｌｅよりも小さい値である。
【００４２】
したがって、切捨処理を行う桁合わせ回路２２ｍは、ｙ［ｍ］の下位の（ｙ＿ｓｃａｌｅ−ｚ＿ｓｃａｌｅ）個のビットを削除した値を出力する。また、四捨五入処理を行う桁合わせ回路２２ｍは、前記の切捨処理によって削除されるビットのうち最上位１ビットを、切捨処理で残った値に加算した値を出力する。
【００４３】
図３に、２項分散演算回路２０ｍ−ｎ’（ｍ＝１，・・・，Ｍ、ｎ’＝１，・・・，Ｎ’）の構成を示す。ここで、２進数で表現された任意のデータｘ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ、ｎ＝１，・・・，Ｎ）の１個分のビット幅をＬとし、２項分散演算回路２０ｍ−ｎ’が入力とするデータｘ［ｍ，２×ｎ’−１］の各ビットをｘ［ｍ，２×ｎ’−１］［ｌ］（ｌ＝１，・・・，Ｌ）、ｘ［ｍ，２×ｎ’］の各ビットをｘ［ｍ，２×ｎ’］［ｌ］（ｌ＝１，・・・，Ｌ）とする。
【００４４】
図３に示した２項分散演算回路２０ｍ−ｎ’は、Ｌ個のＬＵＴ索引回路２００ｍ−ｎ’−ｌ（選択回路）と、Ｌ個のビット位置別演算回路２０１ｍ−ｎ’−ｌと、合算回路２０２ｍ−ｎ’とから構成される。
【００４５】
２項分散演算回路２０ｍ−ｎ’は、データｘ［ｍ，２×ｎ’−１］，ｘ［ｍ，２×ｎ’］のビット位置ｌ（ｌ＝１，・・・，Ｌ）毎に設けられたＬＵＴ索引回路２００ｍ−ｎ’−ｌを有する。ＬＵＴ索引回路２００ｍ−ｎ’−ｌは、データｘ［ｍ，２×ｎ’−１］とｘ［ｍ，２×ｎ’］のうち自回路に対応するビット位置ｌにあるビットｘ［ｍ，２×ｎ’−１］［ｌ］とｘ［ｍ，２×ｎ’］［ｌ］とに基づいて、ＬＵＴの要素４個から１個を選択し、この選択した要素値をＬＵＴ＃ｍ−ｎ’−ｌとして取得する。なお、ＬＵＴ＃ｍ−ｎ’−ｌは、符号付きの固定小数点数を表現する、２の補数の２進数である。
【００４６】
図４に、ビットｘ［ｍ，２×ｎ’−１］［ｌ］およびｘ［ｍ，２×ｎ’］［ｌ］の各値と、そのとき選択されるＬＵＴの要素値ＬＵＴ＃ｍ−ｎ’−ｌとの関係を示す。ビットｘ［ｍ，２×ｎ’−１］［ｌ］およびｘ［ｍ，２×ｎ’］［ｌ］の各値と要素値ＬＵＴ＃ｍ−ｎ’−ｌとの関係は、一般的な２項の積和演算を分散演算を用いて行う場合のＬＵＴにおけるアドレスと記憶値との関係と同じである。ＬＵＴ＃ｍ−ｎ’−ｌの値は、（ｃ［２×ｎ’−１］×ｘ［ｍ，２×ｎ’−１］［ｌ］＋ｃ［２×ｎ’］×ｘ［ｍ，２×ｎ’］［ｌ］）となる。
【００４７】
図３に示した２項分散演算回路２０ｍ−ｎ’において、ＬＵＴ索引回路２００ｍ−ｎ’−ｌによってビット位置ｌ（ｌ＝１，・・・，Ｌ）毎に選択された、ＬＵＴの要素値ＬＵＴ＃ｍ−ｎ’−ｌは、それぞれビット位置別演算回路２０１ｍ−ｎ’−ｌによってビット位置別演算が施される。
【００４８】
合算回路２０２ｍ−ｎ’は、Ｌ個のビット位置別演算回路２０１ｍ−ｎ’−ｌによって計算されたビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌを合算した結果、すなわち、Σl=1,・・・,L（ＢＲ＃ｍ−ｎ’−ｌ）をｙ’［ｍ，ｎ’］として出力する。図５を用いて、２項分散演算回路２０ｍ−ｎ’の演算の概念を説明する。
【００４９】
ビット位置別演算回路２０１ｍ−ｎ’−ｌは、自回路の対応するビット位置ｌがＬｃ（Ｌｃは２以上Ｌ未満の整数）より大きい場合（ｌ＝Ｌｃ＋１，・・・，Ｌ）に、自回路に対応するＬＵＴ索引回路２００ｍ−ｎ’−ｌによって選択された要素値ＬＵＴ＃ｍ−ｎ’−ｌに対して、（ｌ−Ｌｃ）ビット分の左シフト演算を行った結果を、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌとして出力する。
【００５０】
この左シフト演算は、要素値ＬＵＴ＃ｍ−ｎ’−ｌに対して２(l-Lc)を乗じたことと等価であり、左シフト演算によってＬＳＢ側に追加される（ｌ−Ｌｃ）個のビット値は０である。図５で言えば、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−（Ｌ−１）が、ビット位置ｌがＬｃより大きい場合の例を示している。
【００５１】
ただし、ｌ＝Ｌのビット位置（データのＭＳＢ位置）に対応するビット位置別演算回路２０１ｍ−ｎ’−Ｌは、ＬＵＴ索引回路２００ｍ−ｎ’−Ｌによって選択された要素値ＬＵＴ＃ｍ−ｎ’−Ｌに対して符号反転を行った後に２の（Ｌ−Ｌｃ）ビット分の左シフト演算を行った結果を、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−Ｌとして出力する。
【００５２】
また、ビット位置別演算回路２０１ｍ−ｎ’−ｌは、自回路の対応するビット位置ｌがＬｃより小さい場合（ｌ＝１，・・・，Ｌｃ−１）に、自回路に対応するＬＵＴ索引回路２００ｍ−ｎ’−ｌによって選択された要素値ＬＵＴ＃ｍ−ｎ’−ｌに対して、（Ｌｃ−ｌ）ビット分の右シフト演算を行った結果を、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌとして出力する。
【００５３】
この右シフト演算は、要素値ＬＵＴ＃ｍ−ｎ’−ｌを２(Lc-l)で除したことに相当し、右シフト演算前のＬＳＢ側（Ｌｃ−ｌ）個のビット値は、右シフト演算後、回路によって保持されず無効となる。この右シフト演算の処理は、要素値ＬＵＴ＃ｍ−ｎ’−ｌのＬＳＢ側（Ｌｃ−ｌ）個のビットに対して切捨処理を施すことと等価である。図５で言えば、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−（Ｌｃ−１），ＢＲ＃ｍ−ｎ’−１が、ビット位置ｌがＬｃより小さい場合の例を示している。
【００５４】
また、ｌ＝Ｌｃのビット位置に対応するビット位置別演算回路２０１ｍ−ｎ’−Ｌｃは、自回路に対応するＬＵＴ索引回路２００ｍ−ｎ’−Ｌｃによって選択された要素値ＬＵＴ＃ｍ−ｎ’−Ｌｃに対して演算を行わず、要素値ＬＵＴ＃ｍ−ｎ’−Ｌｃをそのままビット位置別演算結果＃ｍ−ｎ’−Ｌｃとして出力する。
【００５５】
上述のように、ビット位置ｌがＬｃより小さい場合の各要素値ＬＵＴ＃ｍ−ｎ’−ｌ（ｌ＝１，・・・，Ｌｃ−１）は、ビット位置別演算回路２０１ｍ−ｎ’−ｌでの（Ｌｃ−ｌ）ビット分の右シフト演算によって、ＬＳＢ側（Ｌｃ−ｌ）個のビット値が無効となる。また、通常は、ＬＵＴ索引回路２００ｍ−ｎ’−ｌがＬＵＴの要素値４個の中から１個を選択するために、要素値のビット位置毎に、４個のビット値から１個のビット値を選択する４：１セレクタ回路が用いられる。
【００５６】
そこで、要素値ＬＵＴ＃ｍ−ｎ’−ｌの各ビットのうち、ビット位置別演算回路２０１ｍ−ｎ’−ｌにより無効となるＬＳＢ側（Ｌｃ−ｌ）個のビットについては、前記の４：１セレクタ回路を省くことにより、ＬＵＴ索引回路２００ｍ−ｎ’−ｌの回路規模を削減することが可能である。
【００５７】
各ビット位置別演算回路２０１ｍ−ｎ’−ｌ（ｌ＝１，・・・，Ｌ）から出力されるビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌは、合算回路２０２ｍ−ｎ’によって合算され、その合算結果Σl=1,・・・,L（ＢＲ＃ｍ−ｎ’−ｌ）が上記のｙ’［ｍ，ｎ’］として出力される。
【００５８】
本実施例では、ビット位置ｌに応じて異なるビット数の左シフト演算あるいは右シフト演算が行われているため、各ビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌは、それぞれ異なるビット幅となっている。そこで、合算回路２０２ｍ−ｎ’は、最大のビット幅、すなわち、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−Ｌのビット幅に、他のビット位置別演算結果ＢＲ＃ｍ−ｎ’−１〜ＢＲ＃ｍ−ｎ’−（Ｌ−１）のビット幅を合わせた後に、各ビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌ（ｌ＝１，・・・，Ｌ）の合算を行う。
【００５９】
各ビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌは、符号付きの固定小数点数を表現した、２の補数の２進数である。したがって、前記のビット幅合わせでは、その符号ビットＳ＃ｌと同じ値のビットをＭＳＢ側に追加する必要がある。
【００６０】
なお、ビット位置ｌがＬｃより小さい場合（ｌ＝１，・・・，Ｌｃ−１）に、ビット位置別演算回路２０１ｍ−ｎ’−ｌが要素値ＬＵＴ＃ｍ−ｎ’−ｌに対して（Ｌｃ−ｌ）ビット分の右シフト演算を行うとき、無効化されるＬＳＢ側（Ｌｃ−ｌ）個のビットのうちＭＳＢ側１ビットの値を、前記右シフト演算の結果に加算して、ビット位置別演算結果ＢＲ＃ｍ−ｎ’−ｌとすることも可能である。この処理は、要素値ＬＵＴ＃ｍ−ｎ’−ｌのＬＳＢ側（Ｌｃ−ｌ）個のビットに対して四捨五入処理を施すことと等価である。
【００６１】
各２項分散演算回路２０ｍ−ｎ’が出力する値ｙ’［ｍ，ｎ’］は、データｘ［ｍ，ｎ］と係数ｃ［ｎ］との積和演算の結果である。従来の技術（乗算と加算を組み合わせた演算）により積和演算の結果を得た場合の小数点以下桁数は、データｘ［ｍ，ｎ］の小数点以下桁数ｘ＿ｓｃａｌｅと係数ｃ［ｎ］の小数点以下桁数ｃ＿ｓｃａｌｅとの和、すなわち、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅである。また、積和演算を通常の分散演算（本実施例におけるパラメタＬｃの値を１とした場合に相当する）により行った場合も、積和演算の結果の小数点以下桁数はｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅである。
【００６２】
これに対して、本実施例では、図６に示したように、（Ｌｃ−ｌ）個の下位ビットが無効化されているため、各２項分散演算回路２０ｍ−ｎ’が出力する値ｙ’［ｍ，ｎ’］の小数点以下桁数ｙ’＿ｓｃａｌｅは、無効化されたビット数分だけ短くなるので、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅ−Ｌｃ＋１となる。
【００６３】
このように、本実施例の演算回路は、全ビットに対して正確な乗算を行う乗算回路ではなく、データのビット位置ｌ毎にＬＵＴから要素値ＬＵＴ＃ｍ−ｎ’−ｌを取得し、要素値ＬＵＴ＃ｍ−ｎ’−ｌに対して、ビット位置ｌに応じて予め指定された下位ビット、本実施例では（Ｌｃ−ｌ）個の下位ビットについて、無効化した上で、これらを累積する分散演算を行う。
【００６４】
これにより、本実施例では、無効化を行わない従来の演算回路と比較して、無効化されたビットに対する累積処理が不要となるため、その分の回路面積や消費電力を削減できる。また、無効化された下位ビットには雑音成分が多く含まれているため、従来の演算回路においても桁合わせ回路２２ｍによって四捨五入処理や切捨処理が施されるので、本実施例の下位ビット無効化は、演算回路が出力する値の精度を劣化させない。
【００６５】
すなわち、本実施例の演算回路は、上位ビットと下位ビットを区別せずに全ビットに対して正確な乗算を行う乗算回路ではなく、データのビット位置ｌ毎にＬＵＴから要素値ＬＵＴ＃ｍ−ｎ’−ｌを取得して累積する分散演算を採用し、ビット位置ｌ毎に予め指定された下位ビットの処理を省くことにより、演算精度の劣化なく、回路の面積・電力を削減できる効果がある。
【００６６】
特に、本実施例の演算回路は高速化のために、分散演算回路内のデータのビット位置ｌ毎のＬＵＴ検索と累積を同時に行うためのデータビット幅分の並列化と、Ｍ個のデータセットに対する分散演算を同時に行うための分散演算回路の個数分の並列化を行っている。このため、本実施例の演算回路では、上記の無効化されたビットに対する累積処理に要する回路規模が増大しており、下位ビットの処理を省くことによる回路の削減効果は大きい。
【００６７】
［第２の実施例］
次に、本発明の第２の実施例について説明する。図７は本発明の第２の実施例に係る演算回路の構成を示すブロック図である。図７の演算回路は、各々が実部値ｘ＿ｒｅａｌ［ｍ］と虚部値ｘ＿ｉｍａｇ［ｍ］（ｍ＝１，・・・，Ｍ）とに分かれる、Ｍ個（Ｍは２以上の整数）の複素数Ｘ［ｍ］（ｍ＝１，・・・，Ｍ）と、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇとに分かれる複素数係数Ｃとを入力とする。なお、データｘ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ、ｎ＝１，・・・，Ｎ）は、負の値も取り得る符号付き数値（２の補数による２進数で表現された数値）である。各複素数Ｘ［ｍ］（ｍ＝１，・・・，Ｍ）の実部値ｘ＿ｒｅａｌ［ｍ］および虚部値ｘ＿ｉｍａｇ［ｍ］の小数点以桁数をｘ＿ｓｃａｌｅ、複素数係数Ｃの実部値ｃ＿ｒｅａｌおよび虚部値ｃ＿ｉｍａｇの小数点以桁数をｃ＿ｓｃａｌｅとする。
【００６８】
また、２進数で表現された任意のデータｘ＿ｒｅａｌ［ｍ］（ｍ＝１，・・・，Ｍ）およびｘ＿ｉｍａｇ［ｍ］（ｍ＝１，・・・，Ｍ）の１個分のビット幅をＬとし、後述する分散演算回路２ａ−ｍが入力とするデータｘ＿ｒｅａｌ［ｍ］の各ビットをｘ＿ｒｅａｌ［ｍ］［ｌ］（ｌ＝１，・・・，Ｌ）、ｘ＿ｉｍａｇ［ｍ］の各ビットをｘ＿ｉｍａｇ［ｍ］［ｌ］（ｌ＝１，・・・，Ｌ）とする。
【００６９】
図７の演算回路は、上記入力に対して、実部値ｚ＿ｒｅａｌ［ｍ］と虚部値ｚ＿ｉｍａｇ［ｍ］（ｍ＝１，・・・，Ｍ）とに分かれる、Ｍ個の複素数値Ｚ［ｍ］（ｍ＝１，・・・，Ｍ）を、分散演算（distributed arithmetic）により取得し出力する。Ｍ個の複素数値Ｚ［ｍ］は、各々が（Ｃ×Ｘ［ｍ］）に相当する。すなわち、実部値ｚ＿ｒｅａｌ［ｍ］は、ｃ＿ｒｅａｌ×ｘ＿ｒｅａｌ［ｍ］−ｃ＿ｉｍａｇ×ｘ＿ｉｍａｇ［ｍ］に相当する。虚部値ｚ＿ｉｍａｇ［ｍ］は、ｃ＿ｉｍａｇ×ｘ＿ｒｅａｌ［ｍ］＋ｃ＿ｒｅａｌ×ｘ＿ｉｍａｇ［ｍ］に相当する。
【００７０】
ただし、実部値ｚ＿ｒｅａｌ［ｍ］と虚部値ｚ＿ｉｍａｇ［ｍ］とは、複素数Ｘ［ｍ］と複素数係数Ｃとの乗算結果に対して、雑音成分の高い下位ビットを削除して有意なビット幅に限定した値である。つまり、実部値ｚ＿ｒｅａｌ［ｍ］は、ｃ＿ｒｅａｌ×ｘ＿ｒｅａｌ［ｍ］−ｃ＿ｉｍａｇ×ｘ＿ｉｍａｇ［ｍ］と完全に一致するとは限らない。同様に、虚部値ｚ＿ｉｍａｇ［ｍ］は、ｃ＿ｉｍａｇ×ｘ＿ｒｅａｌ［ｍ］＋ｃ＿ｒｅａｌ×ｘ＿ｉｍａｇ［ｍ］と完全に一致するとは限らない。なお、実部値ｚ＿ｒｅａｌ［ｍ］と虚部値ｚ＿ｉｍａｇ［ｍ］とは、符号付きの固定小数点数を表現する、２の補数の２進数であり、その小数点以桁数をｚ＿ｓｃａｌｅとする。
【００７１】
図７に示す演算回路は、１個のＬＵＴ生成回路１ａと、Ｍ個（Ｍは２以上の整数）の分散演算回路２ａ−１〜２ａ−Ｍと、Ｍ個の桁合わせ回路３ａ−１〜３ａ−Ｍとから構成される。
【００７２】
ＬＵＴ生成回路１ａは、複素数係数Ｃの実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇとを入力とし、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇの差ｃ＿ｒｅａｌ−ｃ＿ｉｍａｇに相当する値ｄ＿ｓｕｂと、実部値ｃ＿ｒｅａｌと虚部値ｃ＿ｉｍａｇの和ｃ＿ｒｅａｌ＋ｃ＿ｉｍａｇに相当する値ｄ＿ａｄｄとをそれぞれ計算し、実部値ｃ＿ｒｅａｌおよび虚部値ｃ＿ｉｍａｇと共に値ｄ＿ｓｕｂおよびｄ＿ａｄｄを各分散演算回路２ａ−１〜２ａ−Ｍに出力する。
【００７３】
分散演算回路２ａ−ｍ（ｍ＝１，・・・，Ｍ）の各々は、複素数Ｘ［ｍ］（ｍ＝１，・・・，Ｍ）と、ＬＵＴ生成回路１ａから分配された実部値ｃ＿ｒｅａｌおよび虚部値ｃ＿ｉｍａｇと値ｄ＿ｓｕｂおよびｄ＿ａｄｄとを入力とし、複素数Ｘ［ｍ］のうち自回路に対応するデータの各々に複素数係数Ｃを乗じて合算した結果である複素数値Ｙ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｍ個の各々について並列に計算して出力する。
【００７４】
分散演算回路２ａ−ｍは、値０、ｃ＿ｒｅａｌ、−ｃ＿ｉｍａｇ、ｄ＿ｓｕｂを各要素の数値とする実部用ＬＵＴと、値０、ｃ＿ｉｍａｇ、ｃ＿ｒｅａｌ、ｄ＿ａｄｄを各要素の数値とする虚部用ＬＵＴとを構成し、実部用ＬＵＴを用いた分散演算によって実部の積和演算ｃ＿ｒｅａｌ×ｘ＿ｒｅａｌ［ｍ］−ｃ＿ｉｍａｇ×ｘ＿ｉｍａｇ［ｍ］の結果を取得してｙ＿ｒｅａｌ［ｍ］として出力すると共に、虚部用ＬＵＴを用いた分散演算によって虚部の積和演算ｃ＿ｉｍａｇ×ｘ＿ｒｅａｌ［ｍ］＋ｃ＿ｒｅａｌ×ｘ＿ｉｍａｇ［ｍ］の結果を取得してｙ＿ｉｍａｇ［ｍ］として出力する。
【００７５】
桁合わせ回路３ａ−ｍは、分散演算回路２ａ−ｍから出力された実部の積和演算の結果ｙ＿ｒｅａｌ［ｍ］の下位ビット切捨あるいは四捨五入によって、ｙ＿ｒｅａｌ［ｍ］の小数点以下桁数を、演算回路が出力すべき固定小数点数の小数点以桁数ｚ＿ｓｃａｌｅに合わせる処理を行い、その処理結果をｚ＿ｒｅａｌ［ｍ］として出力する。同様に、桁合わせ回路３ａ−ｍは、分散演算回路２ａ−ｍから出力された虚部の積和演算の結果ｙ＿ｉｍａｇ［ｍ］の下位ビット切捨あるいは四捨五入によって、ｙ＿ｉｍａｇ［ｍ］の小数点以下桁数を、演算回路が出力すべき固定小数点数の小数点以桁数ｚ＿ｓｃａｌｅに合わせる処理を行い、その処理結果をｚ＿ｉｍａｇ［ｍ］として出力する。ｚ＿ｓｃａｌｅは、ｙ＿ｒｅａｌ［ｍ］やｙ＿ｉｍａｇ［ｍ］の小数点以下桁数ｙ＿ｓｃａｌｅよりも小さい値である。
【００７６】
したがって、切捨処理を行う桁合わせ回路３ａ−ｍは、ｙ＿ｒｅａｌ［ｍ］，ｙ＿ｉｍａｇ［ｍ］に対して、下位の（ｙ＿ｓｃａｌｅ−ｚ＿ｓｃａｌｅ）個のビットを削除した値を、それぞれｚ＿ｒｅａｌ［ｍ］，ｚ＿ｉｍａｇ［ｍ］として出力する。また、四捨五入処理を行う桁合わせ回路３ａ−ｍは、前記の切捨処理によって削除されるビットのうち最上位１ビットを、切捨処理で残った値に加算した値を出力する。
【００７７】
図８に、分散演算回路２ａ−ｍ（ｍ＝１，・・・，Ｍ）の構成を示す。図８に示した分散演算回路２ａ−ｍは、Ｌ個の実部用ＬＵＴ索引回路２０３ｍ−ｌ（実部用選択回路）と、符号反転回路２０４と、Ｌ個の実部用ビット位置別演算回路２０５ｍ−ｌと、実部用合算回路２０６ｍと、Ｌ個の虚部用ＬＵＴ索引回路２０７ｍ−ｌ（虚部用選択回路）と、Ｌ個の虚部用ビット位置別演算回路２０８ｍ−ｌと、虚部用合算回路２０９ｍとから構成される。
【００７８】
分散演算回路２ａ−ｍは、データｘ＿ｒｅａｌ［ｍ］，ｘ＿ｉｍａｇ［ｍ］のビット位置ｌ（ｌ＝１，・・・，Ｌ）毎に設けられた実部用ＬＵＴ索引回路２０３ｍ−ｌと虚部用ＬＵＴ索引回路２０７ｍ−ｌとを有する。
【００７９】
実部用ＬＵＴ索引回路２０３ｍ−ｌは、データｘ＿ｒｅａｌ［ｍ］，ｘ＿ｉｍａｇ［ｍ］のうち自回路に対応するビット位置ｌにあるビットｘ＿ｒｅａｌ［ｍ］［ｌ］，ｘ＿ｉｍａｇ［ｍ］［ｌ］に基づいて、実部用ＬＵＴの４要素値、すなわち値０、ｃ＿ｒｅａｌ、−ｃ＿ｉｍａｇ、ｄ＿ｓｕｂの中から１個を選択し、この選択した要素値をＬＵＴｒ＃ｍ−ｌとして取得する。要素値ＬＵＴｒ＃ｍ−ｌは、符号付きの固定小数点数を表現する、２の補数の２進数である。
【００８０】
虚部用ＬＵＴ索引回路２０７ｍ−ｌは、データｘ＿ｒｅａｌ［ｍ］，ｘ＿ｉｍａｇ［ｍ］のうち自回路に対応するビット位置ｌにあるビットｘ＿ｒｅａｌ［ｍ］［ｌ］，ｘ＿ｉｍａｇ［ｍ］［ｌ］に基づいて、虚部用ＬＵＴの４要素値、すなわち値０、ｃ＿ｉｍａｇ、ｃ＿ｒｅａｌ、ｄ＿ａｄｄの中から１個を選択し、この選択した要素値をＬＵＴｉ＃ｍ−ｌとして取得する。要素値ＬＵＴｉ＃ｍ−ｌは、符号付きの固定小数点数を表現する、２の補数の２進数である。
【００８１】
図９に、ビットｘ＿ｒｅａｌ［ｍ］［ｌ］およびｘ＿ｉｍａｇ［ｍ］［ｌ］の各値と、そのとき選択される実部用ＬＵＴの要素値および虚部用ＬＵＴの要素値との関係を示す。ビットｘ＿ｒｅａｌ［ｍ］［ｌ］およびｘ＿ｉｍａｇ［ｍ］［ｌ］の各値と実部用ＬＵＴの要素値および虚部用ＬＵＴの要素値との関係は、一般的な２項の積和演算を分散演算を用いて行う場合のＬＵＴにおけるアドレスと記憶値との関係と同じである。
【００８２】
図８に示した分散演算回路２ａ−ｍにおいて、実部用ＬＵＴ索引回路２０３ｍ−ｌによってビット位置ｌ（ｌ＝１，・・・，Ｌ）毎に選択された、ＬＵＴの要素値ＬＵＴｒ＃ｍ−ｌは、それぞれ実部用ビット位置別演算回路２０５ｍ−ｌによってビット位置別演算が施される。同様に、虚部用ＬＵＴ索引回路２０７ｍ−ｌによってビット位置ｌ毎に選択された、ＬＵＴの要素値ＬＵＴｉ＃ｍ−ｌは、それぞれ虚部用ビット位置別演算回路２０８ｍ−ｌによってビット位置別演算が施される。
【００８３】
実部用合算回路２０６ｍは、Ｌ個の実部用ビット位置別演算回路２０５ｍ−ｌによって計算されたビット位置別演算結果ＢＲｒ＃ｍ−ｌを合算した結果、すなわち、Σl=1,・・・,L（ＢＲｒ＃ｍ−ｌ）をｙ＿ｒｅａｌ［ｍ］として出力する。同様に、虚部用合算回路２０９ｍは、Ｌ個の虚部用ビット位置別演算回路２０８ｍ−ｌによって計算されたビット位置別演算結果ＢＲｉ＃ｍ−ｌを合算した結果、すなわち、Σl=1,・・・,L（ＢＲｉ＃ｍ−ｌ）をｙ＿ｉｍａｇ［ｍ］として出力する。
【００８４】
図１０に、分散演算回路２ａ−ｍの演算を説明するための概念図を示す。なお、ビット位置別演算処理と合算処理とは、実部用・虚部用共に同じであるため、図１０では、実部用のビット位置別演算処理と合算処理を例に挙げて記載している。
【００８５】
実部用ビット位置別演算回路２０５ｍ−ｌは、自回路の対応するビット位置ｌがＬｃ（Ｌｃは２以上Ｌ未満の整数）より大きい場合（ｌ＝Ｌｃ＋１，・・・，Ｌ）に、自回路に対応する実部用ＬＵＴ索引回路２０３ｍ−ｌによってビット位置ｌ毎に選択された要素値ＬＵＴｒ＃ｍ−ｌに対して、（ｌ−Ｌｃ）ビット分の左シフト演算を行った結果を実部用ビット位置別演算結果ＢＲｒ＃ｍ−ｌとして出力する。同様に、虚部用ビット位置別演算回路２０８ｍ−ｌは、自回路の対応するビット位置ｌがＬｃより大きい場合に、自回路に対応する虚部用ＬＵＴ索引回路２０７ｍ−ｌによってビット位置ｌ毎に選択された要素値ＬＵＴｉ＃ｍ−ｌに対して、（ｌ−Ｌｃ）ビット分の左シフト演算を行った結果を虚部用ビット位置別演算結果ＢＲｉ＃ｍ−ｌとして出力する。
【００８６】
これらの左シフト演算は、要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌに対して２(l-Lc)を乗じたことと等価であり、左シフト演算によってＬＳＢ側に追加される（ｌ−Ｌｃ）個のビット値は０である。図１０で言えば、ビット位置別演算結果ＢＲｒ＃ｍ−（Ｌ−１）が、ビット位置ｌがＬｃより大きい場合の例を示している。
【００８７】
ただし、ｌ＝Ｌのビット位置（データのＭＳＢ位置）に対応する実部用ビット位置別演算回路２０５ｍ−Ｌは、実部用ＬＵＴ索引回路２０３ｍ−Ｌによって選択された要素値ＬＵＴｒ＃ｍ−Ｌに対して符号反転を行った後に２の（Ｌ−Ｌｃ）ビット分の左シフト演算を行った結果を実部用ビット位置別演算結果ＢＲｒ＃ｍ−Ｌとして出力する。同様に、ｌ＝Ｌのビット位置に対応する虚部用ビット位置別演算回路２０８ｍ−Ｌは、虚部用ＬＵＴ索引回路２０７ｍ−Ｌによって選択された要素値ＬＵＴｉ＃ｍ−Ｌに対して符号反転を行った後に２の（Ｌ−Ｌｃ）ビット分の左シフト演算を行った結果を虚部用ビット位置別演算結果ＢＲｉ＃ｍ−Ｌとして出力する。
【００８８】
また、実部用ビット位置別演算回路２０５ｍ−ｌは、自回路の対応するビット位置ｌがＬｃより小さい場合（ｌ＝１，・・・，Ｌｃ−１）に、自回路に対応する実部用ＬＵＴ索引回路２０３ｍ−ｌによって選択された要素値ＬＵＴｒ＃ｍ−ｌに対して、（Ｌｃ−ｌ）ビット分の右シフト演算を行った結果を実部用ビット位置別演算結果ＢＲｒ＃ｍ−ｌとして出力する。同様に、虚部用ビット位置別演算回路２０８ｍ−ｌは、自回路の対応するビット位置ｌがＬｃより小さい場合に、自回路に対応する虚部用ＬＵＴ索引回路２０７ｍ−ｌによって選択された要素値ＬＵＴｉ＃ｍ−ｌに対して、（Ｌｃ−ｌ）ビット分の右シフト演算を行った結果を虚部用ビット位置別演算結果ＢＲｉ＃ｍ−ｌとして出力する。
【００８９】
これらの右シフト演算は、要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌを２(Lc-l)で除したことに相当し、右シフト演算前のＬＳＢ側（Ｌｃ−ｌ）個のビット値は、右シフト演算後、回路によって保持されず無効となる。この右シフト演算の処理は、要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌのＬＳＢ側（Ｌｃ−ｌ）個のビットに対して切捨処理を施すことと等価である。図１０で言えば、ビット位置別演算結果ＢＲｒ＃ｍ−（Ｌｃ−１），ＢＲｒ＃ｍ−１が、ビット位置ｌがＬｃより小さい場合の例を示している。
【００９０】
また、ｌ＝Ｌｃのビット位置に対応する実部用ビット位置別演算回路２０５ｍ−Ｌｃは、自回路に対応する実部用ＬＵＴ索引回路２０３ｍ−Ｌｃによって選択された要素値ＬＵＴｒ＃ｍ−Ｌｃに対して演算を行わず、要素値ＬＵＴｒ＃ｍ−Ｌｃをそのまま実部用ビット位置別演算結果ＢＲｒ＃ｍ−Ｌｃとして出力する。同様に、ｌ＝Ｌｃのビット位置に対応する虚部用ビット位置別演算回路２０８ｍ−Ｌｃは、自回路に対応する虚部用ＬＵＴ索引回路２０７ｍ−Ｌｃによって選択された要素値ＬＵＴｉ＃ｍ−Ｌｃに対して演算を行わず、要素値ＬＵＴｉ＃ｍ−Ｌｃをそのまま虚部用ビット位置別演算結果ＢＲｉ＃ｍ−Ｌｃとして出力する。
【００９１】
実部用ビット位置別演算回路２０５ｍ−ｌ（ｌ＝１，・・・，Ｌ）から出力される実部用ビット位置別演算結果ＢＲｒ＃ｍ−ｌは、実部用合算回路２０６ｍによって合算され、その合算結果Σl=1,・・・,L（ＢＲｒ＃ｍ−ｌ）がｙ＿ｒｅａｌ［ｍ］として出力される。同様に、虚部用ビット位置別演算回路２０８ｍ−ｌから出力される虚部用ビット位置別演算結果ＢＲｉ＃ｍ−ｌは、虚部用合算回路２０９ｍによって合算され、その合算結果Σl=1,・・・,L（ＢＲｉ＃ｍ−ｌ）がｙ＿ｉｍａｇ［ｍ］として出力される。
【００９２】
本実施例では、ビット位置ｌに応じて異なるビット数の左シフト演算あるいは右シフト演算が行われているため、各ビット位置別演算結果ＢＲｒ＃ｍ−ｌ，ＢＲｉ＃ｍ−ｌは、それぞれ異なるビット幅となっている。
【００９３】
そこで、実部用合算回路２０６ｍは、最大のビット幅、すなわち、ビット位置別演算結果ＢＲｒ＃ｍ−Ｌのビット幅に、他のビット位置別演算結果ＢＲｒ＃ｍ−１〜ＢＲｒ＃ｍ−（Ｌ−１）のビット幅を合わせた後に、各ビット位置別演算結果ＢＲｒ＃ｍ−ｌ（ｌ＝１，・・・，Ｌ）の合算を行う。同様に、虚部用合算回路２０９ｍは、ビット位置別演算結果ＢＲｉ＃ｍ−Ｌのビット幅に、他のビット位置別演算結果ＢＲｉ＃ｍ−１〜ＢＲｉ＃ｍ−（Ｌ−１）のビット幅を合わせた後に、各ビット位置別演算結果ＢＲｉ＃ｍ−ｌ（ｌ＝１，・・・，Ｌ）の合算を行う。
【００９４】
各ビット位置別演算結果ＢＲｒ＃ｍ−ｌ，ＢＲｉ＃ｍ−ｌは、符号付きの固定小数点数を表現した、２の補数の２進数である。したがって、前記のビット幅合わせでは、その符号ビットと同じ値のビットをＭＳＢ側に追加する必要がある。
【００９５】
上述のように、ビット位置ｌがＬｃより小さい場合の各要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌ（ｌ＝１，・・・，Ｌｃ−１）は、ビット位置別演算回路２０５ｍ−ｌ，２０８ｍ−ｌでの（Ｌｃ−ｌ）ビット分の右シフト演算によって、ＬＳＢ側（Ｌｃ−ｌ）個のビット値が無効となる。また、通常は、ＬＵＴ索引回路２０３ｍ−ｌ，２０７ｍ−ｌがＬＵＴの要素値４個の中から１個を選択するために、要素値のビット位置毎に、４個のビット値から１個のビット値を選択する４：１セレクタ回路が用いられる。
【００９６】
そこで、要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌの各ビットのうち、ビット位置別演算回路２０５ｍ−ｌ，２０８ｍ−ｌにより無効となるＬＳＢ側（Ｌｃ−ｌ）個のビットについては、前記の４：１セレクタ回路を省くことにより、ＬＵＴ索引回路２０３ｍ−ｌ，２０７ｍ−ｌの回路規模を削減することが可能である。
【００９７】
なお、ビット位置ｌがＬｃより小さい場合（ｌ＝１，・・・，Ｌｃ−１）に、ビット位置別演算回路２０５ｍ−ｌ，２０８ｍ−ｌが要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌに対して（Ｌｃ−ｌ）ビット分の右シフト演算を行うとき、無効化されるＬＳＢ側（Ｌｃ−ｌ）個のビットのうちＭＳＢ側１ビットの値を、前記右シフト演算結果に加算し、ビット位置別演算結果ＢＲｒ＃ｍ−ｌ，ＢＲｉ＃ｍ−ｌとすることも可能である。この処理は、要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌのＬＳＢ側（Ｌｃ−ｌ）個のビットに対して四捨五入処理を施すことと等価である。
【００９８】
各分散演算回路２ａ−ｍが出力する値ｙ＿ｒｅａｌ［ｍ］，ｙ＿ｉｍａｇ［ｍ］は、データｘ＿ｒｅａｌ［ｍ］，ｘ＿ｉｍａｇ［ｍ］と複素数係数Ｃとの積和演算結果である。従来の技術（乗算と加算を組み合わせた演算）により積和演算の結果を得た場合の小数点以下桁数は、データｘ＿ｒｅａｌ［ｍ］，ｘ＿ｉｍａｇ［ｍ］の小数点以下桁数ｘ＿ｓｃａｌｅと複素数係数Ｃの小数点以下桁数ｃ＿ｓｃａｌｅとの和、すなわち、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅである。また、積和演算を通常の分散演算（本実施例におけるパラメタＬｃの値を１とした場合に相当する）により行った場合も、積和演算の結果の小数点以下桁数はｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅである。
【００９９】
これに対して、本実施例では、図１０に示したように、（Ｌｃ−ｌ）個の下位ビットが無効化されているため、各分散演算回路２ａ−ｍが出力する値ｙ＿ｒｅａｌ［ｍ］，ｙ＿ｉｍａｇ［ｍ］の小数点以下桁数ｙ＿ｓｃａｌｅは、無効化されたビット数分だけ短くなるので、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅ−Ｌｃ＋１となる。
【０１００】
このように、本実施例の演算回路は、全ビットに対して正確な乗算を行う乗算回路ではなく、データのビット位置ｌ毎にＬＵＴから要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌを取得し、要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌに対して、ビット位置ｌに応じて予め指定された下位ビット、本実施例では（Ｌｃ−ｌ）個の下位ビットについて、無効化した上で、これらを累積する分散演算を行う。
【０１０１】
これにより、本実施例では、無効化を行わない従来の演算回路と比較して、無効化されたビットに対する累積処理が不要となるため、その分の回路面積や消費電力を削減できる。また、無効化された下位ビットには雑音成分が多く含まれているため、従来の演算回路においても桁合わせ回路２２ｍによって四捨五入処理や切捨処理が施されるので、本実施例の下位ビット無効化は、演算回路が出力する値の精度を劣化させない。
【０１０２】
すなわち、本実施例の演算回路は、上位ビットと下位ビットを区別せずに全ビットに対して正確な乗算を行う乗算回路ではなく、データのビット位置ｌ毎にＬＵＴから要素値ＬＵＴｒ＃ｍ−ｌ，ＬＵＴｉ＃ｍ−ｌを取得して累積する分散演算を採用し、ビット位置ｌ毎に予め指定された下位ビットの処理を省くことにより、演算精度の劣化なく、回路の面積・電力を削減できる効果がある。
【０１０３】
特に、本実施例の演算回路は高速化のため、分散演算回路内のデータのビット位置ｌ毎のＬＵＴ検索と累積を同時に行うためのデータビット幅分の並列化と、Ｍ個のデータセットに対する分散演算を同時に行うための分散演算回路の個数分の並列化を行っている。このため、本実施例の演算回路では、上記の無効化されたビットに対する累積処理に要する回路規模が増大しており、下位ビットの処理を省くことによる回路の削減効果は大きい。
【０１０４】
第１、第２の実施例で説明した演算回路は例えばＦＰＧＡによって実現することができる。
【０１０５】
なお、従来の積和演算回路では、データの小数点以下桁数をｘ＿ｓｃａｌｅとし、係数の小数点以下桁数をｃ＿ｓｃａｌｅとするとき、正確な積和演算値の小数点以下桁数はｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅとなる。そして、桁合わせ回路によって、小数点以下桁数をｚ＿ｓｃａｌｅに丸めている。したがって、ｘ＿ｓｃａｌｅ＋ｃ＿ｓｃａｌｅ−ｚ＿ｓｃａｌｅが、桁合わせによって削除されるビット数Ｌｒとなる。
【０１０６】
これに対して、本発明では、上記の正確な積和演算値よりも、（Ｌｃ−１）ビット分が削除されている。本発明により、回路規模や消費電力を削減しつつ、正確な積和演算値とほぼ同じ値を得たい場合は、上記ＬｒからＬｏｇ2（Ｌｃ）を減じた値を（Ｌｃ−１）の値よりも大きくする、すなわち、Ｌｃ−１＜Ｌｒ−Ｌｏｇ2（Ｌｃ）とする。例えば、Ｌが９、ｘ＿ｓｃａｌｅ，ｃ＿ｓｃａｌｅ，ｚ＿ｓｃａｌｅが全て８の場合は、Ｌｃを５以下とする。
【０１０７】
このようにＬｃの値を定める理由は、本発明ではデータのビット幅Ｌと同じ個数のＬＵＴの索引結果を合算しており、この合算によって正確な積和演算値との差が累積されるので、差の累積によって、丸め後の値に大きい影響を及ぼさないようにするためである。
【産業上の利用可能性】
【０１０８】
本発明は、演算回路に適用することができる。
【符号の説明】
【０１０９】
１，１ａ…ＬＵＴ生成回路、２−１〜２−Ｍ，２ａ−１〜２ａ−Ｍ…分散演算回路、３ａ−１〜３ａ−Ｍ…桁合わせ回路、２０ｍ…２項分散演算回路、２１ｍ…分散演算結果合算回路、２２ｍ…桁合わせ回路、２３ｍ…補助乗算回路、２００ｍ…ＬＵＴ索引回路、２０１ｍ…ビット位置別演算回路、２０２ｍ…合算回路２０３ｍ…実部用ＬＵＴ索引回路、２０４…符号反転回路、２０５ｍ…実部用ビット位置別演算回路、２０６ｍ…実部用合算回路、２０７ｍ…虚部用ＬＵＴ索引回路、２０８ｍ…虚部用ビット位置別演算回路、２０９ｍ…虚部用合算回路。
【図１】
2019121172.tif 000003
【図２】
2019121172.tif 000004
【図３】
2019121172.tif 000005
【図４】
2019121172.tif 000006
【図５】
2019121172.tif 000007
【図６】
2019121172.tif 000008
【図７】
2019121172.tif 000009
【図８】
2019121172.tif 000010
【図９】
2019121172.tif 000011
【図１０】
2019121172.tif 000012
【図１１】
2019121172.tif 000013