JP6995629B2 - 演算回路 - Google Patents

演算回路 Download PDF

Info

Publication number
JP6995629B2
JP6995629B2 JP2018000451A JP2018000451A JP6995629B2 JP 6995629 B2 JP6995629 B2 JP 6995629B2 JP 2018000451 A JP2018000451 A JP 2018000451A JP 2018000451 A JP2018000451 A JP 2018000451A JP 6995629 B2 JP6995629 B2 JP 6995629B2
Authority
JP
Japan
Prior art keywords
circuit
value
real
lut
values
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018000451A
Other languages
English (en)
Other versions
JP2019121171A5 (ja
JP2019121171A (ja
Inventor
健治 川合
亮 粟田
和人 武井
公昭 飯塚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Electronics Corp
Nippon Telegraph and Telephone Corp
Original Assignee
NTT Electronics Corp
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Electronics Corp, Nippon Telegraph and Telephone Corp filed Critical NTT Electronics Corp
Priority to JP2018000451A priority Critical patent/JP6995629B2/ja
Priority to US16/959,968 priority patent/US11360741B2/en
Priority to PCT/JP2018/046495 priority patent/WO2019135354A1/ja
Priority to CN201880085302.XA priority patent/CN111615700B/zh
Publication of JP2019121171A publication Critical patent/JP2019121171A/ja
Publication of JP2019121171A5 publication Critical patent/JP2019121171A5/ja
Priority to US17/643,507 priority patent/US20220100472A1/en
Application granted granted Critical
Publication of JP6995629B2 publication Critical patent/JP6995629B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Nonlinear Science (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)

Description

本発明は、ディジタル信号処理における演算回路に係り、特に積和演算を行う演算回路に関するものである。
ディジタル信号処理における主な演算は、ディジタル信号のデータに係数を乗じて合算する積和演算であるが、積和演算を効率的に行うための手法として分散演算(distributed arithmetic)が知られている(非特許文献1参照)。図10に、分散演算を採用した積和演算回路の構成例を示し、図11に、図10の積和演算回路の動作のタイミングチャートを示す。
図10の積和演算回路は、N個(Nは2以上の整数)のデータx[n](n=1,・・・,N)が入力されたとき、各データx[n]に係数c[n]を乗じて合算する積和演算を行う、すなわちΣn=1,・・・,N(c[n]×x[n])を計算する演算回路である。この積和演算回路にx[n](n=1,・・・,N)を入力した時点から、x[n]のビット幅に相当する個数のクロックパルスを入力することによって、積和演算の結果が出力される。
上記の分散演算を用いた演算回路は、係数c[n](n=1,・・・,N)が定数であることを前提として、上記の積和演算を開始する前に、ROM(Read Only Memory)などのメモリ回路によって構成されたルックアップテーブル(Look-Up Table、以下LUT)1001の各アドレスのメモリ領域に、係数c[n](n=1,・・・,N)と前記アドレスとに基づいて計算された値を記憶しておく。データx[n](n=1,・・・,N)が入力されたとき、データx[n](n=1,・・・,N)に基づいてLUT1001に記憶された値を検索し、LUT1001からの読出値を合算することによって、積和演算と同じ結果を得ることができる。このように、分散演算を採用した積和演算回路は、回路構成が複雑な乗算回路を用いる必要がない。
図10のLUT1001は、図12に示されるように、2N個のアドレスのメモリ領域を備えている。各アドレスのメモリ領域には、係数c[n](n=1,・・・,N)に基づいて計算された値が予め記憶される。具体的には、アドレスaに記憶される値LUT[a]は、アドレスaを2進数表記したときの各ビットをa[n](n=1,・・・,N、a=Σn=1,・・・,N(2n-1×a[n]))としたときの、Σn=1,・・・,N(c[n]×a[n])の値である。
図10のシフトレジスタ1000-XR[n](n=1,・・・,N)は、2進数で表現されたデータx[n](n=1,・・・,N)の各ビットx[n][l](l=1,・・・,L、Lはx[n]のビット幅、x[n]=Σl=1,・・・,L(x[n][l]×2l-1)が入力され、かつデータ有効信号が有効を示すとき、データx[n]の各ビットx[n][l]を取り込んで、その後のクロックパルスの入力毎に、各ビットをMSB(Most Significant Bit)から順にLSB(Least Significant Bit)まで出力する。
図13を用いて、シフトレジスタ1000-XR[n]の動作を説明する。まず、データx[n]が入力されたときの有効を表すデータ有効信号に応じて、各セレクタs[n,2]~s[n,L]は、データx[n]の各ビットx[n][2]~x[n][L]の値を選択する。そして、その直後のクロックパルス(1個目のクロックパルス)の入力を契機として、フリップフロップxr[n,1]はビットx[n][1]の値を取り込み、フリップフロップxr[n,2]~xr[n,L]はそれぞれセレクタs[n,2]~s[n,L]から出力されるビットx[n][2]~x[n][L]の値を取り込む。したがって、フリップフロップxr[n,1]はデータx[n]のLSBであるx[n][1]を取り込み、フリップフロップxr[n,L]はデータx[n]のMSBであるx[n][L]を取り込む。
その後は、データ有効信号が無効を表す値になることにより、各セレクタs[n,2]~s[n,L]は、前段のフリップフロップxr[n,1]~xr[n,L-1]から出力された値を選択する。したがって、クロックパルスの入力毎に、フリップフロップxr[n,2]~xr[n,L]は、前段のフリップフロップxr[n,1]~xr[n,L-1]が保持していた値を取り込む動作となる。
すなわち、クロックパルスの入力毎に、シフトレジスタ1000-XR[n]の最終段のフリップフロップxr[n,L](n=1,・・・,N)の出力値は変化する。フリップフロップxr[n,L]の出力値は、最初のクロックパルスの入力時にはx[n][L]となるが、次のクロックパルスの入力時にはx[n][L-1]となる。すなわち、データ有効信号が有効になった時点からt個目(t=1,・・・,L)のクロックパルスの入力時には、フリップフロップxr[n,L]の出力値は、x[n][L-t+1]となる。
図10の積和演算回路において、LUT1001から値を読み出すときの読出アドレスaの各ビットをa[n](n=1,・・・,N)とすると、a[n]の値は、フリップフロップxr[n,L]が保持している値である。したがって、データ有効信号が有効になった時点からt個目(t=1,・・・,L)のクロックパルスの入力直後には、a[n]の値はx[n][L-t+1]となる。
LUT1001は、上記の読出アドレスaが入力されると、読出アドレスaのメモリ領域に記憶されている値LUT[a]を出力する。LUT[a]の値は、図12に示されているように、Σn=1,・・・,N(c[n]×a[n])であり、データ有効信号が有効になった時点からt個目(t=1,・・・,L)のクロックパルスの入力直後のa[n]の値はx[n][L-t+1]の値と一致するため、t個目(t=1,・・・,L)のクロックパルスの入力直後のLUT1001の出力は、Σn=1,・・・,N(c[n]×x[n][L-t+1])となる。
図10の積和演算回路において、上記のLUT1001の出力値と、累積値レジスタ1002が保持する累積値を2倍にする2倍回路1003の出力値とは、加算回路1004に入力される。加算回路1004は、LUT1001の出力値と2倍回路1003の出力値とを加算し、その結果を加算値yとして出力する。
累積値レジスタ1002は、クロックパルスの入力毎に、加算値yを、更新された累積値として保持する。なお、累積値レジスタ1002が保持する値は、データ有効信号が有効になったときに0にリセットされるので、その初期値(最初のクロックパルスが入力された時点での値)は0である。
累積値レジスタ1002が保持する累積値を2倍にする2倍回路1003は、2進数で表現された累積値を1ビット左にシフトする配線で実現できるため、累積値を2倍にする処理に論理ゲートを必要としない。したがって、図10の積和演算回路に乗算回路は用いられていない。
図10の積和演算回路が、積和演算結果を出力するまでの過程を説明する。まず、データ有効信号が有効になった直後に入力される1個目のクロックパルスの入力により、加算回路1004は、累積値レジスタ1002に保持されている累計値が0であるため、LUT1001の出力値を加算値yとして出力する。すなわち、1個目のクロックパルス入力直後の加算値yは、Σn=1,・・・,N(c[n]×x[n][L])となる。
次に、データ有効信号が有効になった時点から2個目のクロックパルスの入力により、加算回路1004は、LUT1001の出力値と2倍回路1003の出力値とを加算した値を加算値yとして出力する。LUT1001の出力値はΣn=1,・・・,N(c[n]×x[n][L-1])であり、累積値レジスタ1002に保持されている累積値は1個目のクロックパルス入力直後の加算値であるため、Σn=1,・・・,N(c[n]×x[n][L])である。したがって、2個目のクロックパルス入力直後の加算値yは、2×Σn=1,・・・,N(c[n]×x[n][L])+Σn=1,・・・,N(c[n]×x[n][L-1])となる。
このように、クロックパルスの入力毎に、LUT1001の出力値が合算されるため、L個のクロックパルス入力直後の加算値yは、式(1)のようになる。
y=Σt=1,・・・,L(2L-t×Σn=1,・・・,N(c[n]×x[n][L-t+1]))
・・・(1)
ここで、L個のクロックパルス入力直後の加算値yを表す上記の式(1)に対して、クロックパルスの番号を表すtを L-l+1(l=L,・・・,1)と置き換えて変形することにより、L個のクロックパルス入力直後の加算値yは、式(2)のようになる。
y=Σn=1,・・・,N(c[n]×(Σl=L,・・・,1(x[n][l]×2l-1))
・・・(2)
さらに、x[n][l]は、データx[n]を2進数で表現したときの各ビットの値であり、式(2)中のΣl=L,・・・,1(x[n][l]×2l-1)はx[n]に一致するため、L個のクロックパルス入力直後の加算値yは、積和演算の結果であるΣn=1,・・・,N(c[n]×x[n])となる。すなわち、積和演算回路の加算値yは、データx[n](n=1,・・・,N)が入力された時点から、x[n]のビット幅Lと同じ個数のクロックパルスが入力された時点で、求めるべき積和演算結果となる。
なお、入力されるデータx[n](n=1,・・・,N)が、負の値も取り得る符号付き数値である場合は、データx[n]を2の補数とする。すなわち、x[n]≧0の場合は、x[n][L]=0、x[n]=Σl=1,・・・,L-1(x[n][l]×2l-1)とする。また、Σx[n]<0の場合は、x[n][L]=1、かつx[n]=-2L+Σl=1,・・・,L-1(x[n][l]×2l-1)とする。さらに、図10の加算回路1004を、1個目のクロックパルスの入力直後の動作のみ加算ではなく減算するように、すなわち、LUT1001の出力値に対して符号を反転するように、変更する。ただし、2個目のクロックパルス入力以後は、累積値を2倍した値との加算であり変更はない。
このように、分散演算を採用した積和演算回路は、入力値を1ビットづつシフトさせる(L×N)個のフリップフロップと、入力値をフリップフロップに取り込むかシフトさせるかを選択するセレクタと、LUTを構成するメモリ回路と、クロックパルスを契機に累積値を取り込んで保持する累積値レジスタ(累積値のビット幅と同じ個数のフリップフロップ)と、1個の加算回路(符号付き入力データを扱う場合は加算/符号反転回路)とによって実現できるため、複雑な乗算回路は不要となり、比較的単純な回路で実現できるという特徴を備える。
上記の分散演算を採用した従来の積和演算回路には、乗算回路が不要となる一方で、データx[n]の入力後、データx[n]のビット位置毎にLUTに記憶された値を検索する、すなわちデータx[n]のビット幅Lと同じ回数だけLUTに記憶された値の検索を繰り返す必要があるため、スループットが低い(データ入力から次のデータ入力が可能となるまでの時間が長い)という課題があった。
また、係数c[n]の値が固定値ではなく時間の経過に伴って変動する積和演算に、LUTとしてメモリ回路を用いる図10の積和演算回路を適用する場合、係数c[n]の値が変化した時点で、LUTに保持する値の再計算と、再計算した結果のLUTへの書込(全アドレスに1個づつアクセスして計算結果を書き込む処理)とを行う必要が生じる。LUTの更新中は積和演算を中断する必要があるため、係数c[n]の変動によって生じる頻繁なLUTの更新によって、スループットが低下するという課題があった。
また、データx[n]のビット幅Lと同じ個数のコピーされたLUTを用いるLUT検索の並列化によって、分散演算を用いた積和演算を高速化しようとする場合や、分散演算を用いた積和演算回路の並列化によって、スループットを高くしようとする場合、LUTが保持する値が同じであっても、各LUTに対してそれぞれ異なる検索を行うので、積和演算回路毎にLUT用のメモリ回路を備える必要があるため、同じ値を記憶するメモリ素子が多数存在する冗長な回路となって、無駄に回路規模が増大するという課題があった。
また、ディジタル信号処理において頻繁に行われる複素数間の乗算についても、実部や虚部の乗算とこの乗算の結果の加減算を積和演算として扱うことで、複素数間の乗算に分散演算を採用した積和演算回路を使用することが可能である。しかしながら、実部を計算するためのLUTと虚部を計算するためのLUTという、一部の記憶値が同じ2個のLUTを必要とするので、同じ値を記憶しているメモリ素子が2個存在する冗長な回路となって、無駄に回路規模が増大するという課題があった。
易 茹,立岩武徳,浅見幸司,小林春夫,「遅延デジタルフィルタの分散型積和演算回路を用いたFPGA実装の検討」,第2回 電気学会 東京支部 栃木支所・群馬支所 合同研究発表会,2012年
本発明は、上記課題を解決するためになされたもので、回路規模および消費電力を削減し、演算のスループットを向上させることができる演算回路を提供することを目的とする。
本発明は、N個(Nは2以上の整数)のデータx[m,n](n=1,・・・,N)の組をM組(Mは2以上の整数)含むデータセットX[m](m=1,・・・,M)と、N個の係数c[n]とを入力とし、M個の積和演算の値y[m]を計算して出力する演算回路において、前記係数c[n]を2個ずつに組み分けしたときの組毎に計算した値を出力するLUT生成回路と、前記データセットX[m]のうちN個のデータx[m,n]の各々に係数c[n]を乗じて合算した結果である前記積和演算の値y[m]を、前記M組の各組毎に並列に計算して出力するM個の分散演算回路とを備え、各分散演算回路は、自回路に対応するN個のデータx[m,n]を2個ずつに組み分けした各値と前記係数c[n]を2個ずつに組み分けした各値と前記LUT生成回路によって計算された値とに基づいて、前記N個のデータx[m,n]の各々に前記係数c[n]の各々を乗じて合算した2項積和演算の値を、前記2個ずつに組み分けした各組毎に並列に計算して出力する複数の2項分散演算回路と、前記複数の2項分散演算回路によって計算された値を合算した結果を前記積和演算の値y[m]として出力する2項分散演算結果合算回路とから構成され、前記LUT生成回路は、前記係数c[n]を2個ずつに組み分けした値c[2×n’-1]とc[2×n’](n’=1,・・・,N’)の和c[2×n’-1]+c[2×n’]を値d[n’]としてN’個(N’はN/2以下で最大の整数)の組毎に計算し、各分散演算回路は、前記データセットX[m]と前記LUT生成回路から出力された係数c[n]および前記LUT生成回路によって計算された値d[n’]とを入力とし、データセットX[m]のうち自回路に対応するN個のデータx[m,n]の各々に係数c[n]を乗じて合算した結果である前記積和演算の値y[m]を出力することを特徴とするものである。
また、本発明の演算回路の1構成例は、前記LUT生成回路と前記M個の分散演算回路との間に設けられ、前記係数c[n]と前記LUT生成回路によって計算された値とをクロックに同期して保持し、保持した値を前記M個の分散演算回路に出力するLUTラッチ回路をさらに備えることを特徴とするものである
また、本発明の演算回路の1構成例において、各分散演算回路は、前記Nが奇数の場合にc[N]×x[m,N]を計算した結果を出力する補助乗算回路をさらに備え、前記2項分散演算結果合算回路は、前記Nが奇数の場合に、前記複数の2項分散演算回路によって計算された値と前記補助乗算回路によって計算された値とを合算した結果を前記積和演算の値y[m]として出力することを特徴とするものである。
また、本発明の演算回路の1構成例において、前記2項分散演算回路は、前記N個のデータx[m,n]のうち同一組の2個の値のビット位置毎に設けられ、値0と、前記係数c[n]のうち同一組の2個の値と、この係数c[n]の2個の値から前記LUT生成回路によって計算された値とからなる要素値の中から、前記N個のデータx[m,n]のうち同一組の2個の値を構成する同一ビット位置の2個の値に対応する1個の要素値をビット位置毎に取得する複数の索引回路と、前記複数の索引回路によって取得された要素値を、それぞれ (l-1) 倍(lはビット位置の番号)することをビット位置毎に行う複数の倍数演算回路と、前記複数の倍数演算回路によって計算された値を合算した結果を前記2項積和演算の値として出力する合算回路とから構成されることを特徴とするものである。
また、本発明は、M個(Mは2以上の整数)の各々が実部値x_real[m]と虚部値x_imag[m](m=1,・・・,M)とに分かれる、M個の複素数X[m](m=1,・・・,M)と、実部値c_realと虚部値c_imagとに分かれる複素数係数Cとを入力とし、実部の積和演算の結果と虚部の積和演算の結果とからなるM個の複素数値Y[m]を計算して出力する演算回路において、前記複素数係数Cの実部値c_realと虚部値c_imagの差の値d_subと、実部値c_realと虚部値c_imagの和の値d_addとを計算するLUT生成回路と、前記複数X[m]のうち自回路に対応するデータの各々に前記複素数係数Cを乗じて合算した結果である前記複素数値Y[m]を、前記M個の各々について並列に計算して出力するM個の分散演算回路とを備え、各分散演算回路は、前記複素数X[m]と前記複素数係数Cの実部値c_realおよび虚部値c_imagと前記LUT生成回路によって計算された値d_subおよびd_addとを入力とし、前記実部の積和演算c_real×x_real[m]-c_imag×x_imag[m]の結果であるy_real[m]と、前記虚部の積和演算c_imag×x_real[m]+c_real×x_imag[m]の結果であるy_imag[m]とを、前記M個の各々について並列に計算して出力することを特徴とするものである。
また、本発明の演算回路の1構成例は、前記LUT生成回路と前記M個の分散演算回路との間に設けられ、前記複素数係数Cの実部値c_realおよび虚部値c_imagと前記LUT生成回路によって計算された値d_subおよびd_addとをクロックに同期して保持し、保持した値を前記M個の分散演算回路に出力するLUTラッチ回路をさらに備えることを特徴とするものである。
また、本発明の演算回路の1構成例において、前記分散演算回路は、前記複素数X[m]の実部値x_real[m]および虚部値x_imag[m]のビット位置毎に設けられ、値0、c_real、-c_imag、d_subからなる要素値の中から、前記実部値x_real[m]および前記虚部値x_imag[m]のうち自回路に対応するビット位置の2個の値に対応する1個の要素値をビット位置毎に取得する複数の第1の索引回路と、前記複数の第1の索引回路によって取得された要素値を、それぞれ (l-1) 倍(lはビット位置の番号)することをビット位置毎に行う複数の第1の倍数演算回路と、前記複数の第1の倍数演算回路によって計算された値を合算した結果を前記実部の積和演算の値y_real[m]として出力する第1の合算回路と、前記複素数X[m]の実部値x_real[m]および虚部値x_imag[m]のビット位置毎に設けられ、値0、c_imag、c_real、d_addからなる要素値の中から、前記実部値x_real[m]および前記虚部値x_imag[m]のうち自回路に対応するビット位置の2個の値に対応する1個の要素値をビット位置毎に取得する複数の第2の索引回路と、前記複数の第2の索引回路によって取得された要素値を、それぞれ (l-1) 倍することをビット位置毎に行う複数の第2の倍数演算回路と、前記複数の第2の倍数演算回路によって計算された値を合算した結果を前記虚部の積和演算の値y_imag[m]として出力する第2の合算回路とから構成されることを特徴とするものである。
本発明の演算回路は、データのビット位置毎にLUTを検索する分散演算において、対象となるビット位置をずらしながらLUTの検索を繰り返すのではなく、全ビット位置について並列処理することにより、演算のスループットを向上させることができる。
また、本発明の演算回路は、LUTにメモリ回路を用いていないため、係数c[n]または複素数係数Cが時間の経過に伴って変動する積和演算に本発明を適用した場合にも、LUTのアドレス1個ずつ更新するのではなく、全アドレスに対して同時に更新することができるので、係数c[n]または複素数係数Cの変動によって生じる頻繁なLUTの更新が生じても、スループットが低下しない。
また、本発明の演算回路は、1個のLUTを複数個のメモリ回路にコピーすることで高速化するのではなく、LUTの要素値を生成する回路をLUT生成回路として共通化し、LUTを検索する回路である分散演算回路のみを並列化することによって、冗長回路(同じ値を保持する回路のコピー)を無くすことができ、回路規模が増大しない。
このように、本発明では、従来の分散演算を採用した積和演算回路が持っていた乗算回路を用いた積和演算回路と比較したときにスループットが低いという課題と、同じ値を保持する回路が並列化され回路規模が増大するという課題を解決することができる。さらに、本発明では、分散演算によって乗算回路が不要となるため、乗算中のスイッチング電力を抑制できるので、回路規模および消費電力を大幅に削減できる効果がある。
図1は、本発明の第1の実施例に係る演算回路の構成を示すブロック図である。 図2は、本発明の第1の実施例に係る分散演算回路の構成を示すブロック図である。 図3は、本発明の第1の実施例に係る2項分散演算回路の構成を示すブロック図である。 図4は、本発明の第1の実施例におけるLUT索引回路の動作を説明する図である。 図5は、本発明の第2の実施例に係る演算回路の構成を示すブロック図である。 図6は、本発明の第3の実施例に係る演算回路の構成を示すブロック図である。 図7は、本発明の第3の実施例に係る分散演算回路の構成を示すブロック図である。 図8は、本発明の第3の実施例における実部演算用LUT索引回路および虚部演算用LUT索引回路の動作を説明する図である。 図9は、本発明の第4の実施例に係る演算回路の構成を示すブロック図である。 図10は、従来の積和演算回路の構成例を示すブロック図である。 図11は、従来の積和演算回路の動作を説明するタイミングチャートである。 図12は、従来の積和演算回路のルックアップテーブルを説明する図である。 図13は、従来の積和演算回路のシフトレジスタの構成例を示すブロック図である。
[第1の実施例]
以下、本発明の実施例について図面を参照して説明する。図1は本発明の第1の実施例に係る演算回路の構成を示すブロック図である。本実施例の演算回路は、M組(Mは2以上の整数)のデータセットX[m](m=1,・・・,M)と、N個(Nは2以上の整数)の係数c[n](n=1,・・・,N)とを入力とする。各データセットX[m](m=1,・・・,M)は、N個のデータx[m,n](n=1,・・・,N)の組からなる。なお、データx[m,n](m=1,・・・,M、n=1,・・・,N)は、負の値も取り得る符号付き数値(2の補数による2進数で表現された数値)である。
図1の演算回路は、上記入力に対して、M個の積和演算の値y[m](m=1,・・・,M)を計算して出力する。演算回路が出力する積和演算の値y[m](m=1,・・・,M)の各々は、データセットX[m](m=1,・・・,M)を構成するN個のデータx[m,n](n=1,・・・,N)の各々に係数c[n]を乗じて合算した結果、すなわち、Σn=1,・・・,N(c[n]×x[m,n])に相当する値である。
図1の演算回路は、1個のLUT生成回路1と、M個(Mは2以上の整数)の分散演算回路2-1~2-Mとから構成される。
LUT生成回路1は、積和演算の係数であるN個の係数c[n](n=1,・・・,N)を入力とし、これらを2個ずつの組に分けたときの各組の値から、分散演算用LUTの要素として使用する値を計算する。そして、LUT生成回路1は、計算した値を係数c[n]と併せて各分散演算回路2-1~2-Mに分配する。
係数c[n](n=1,・・・,N)を2個ずつに組み分けする方法は、後述する各分散演算回路2-m(m=1,・・・,M)において行われる、分散演算に基づいた2項の積和演算の計算c[p]×x[m,p]+c[q]×x[m,q](pとqはそれぞれ1からNまでの範囲内の整数で、p≠q)でのc[p]とc[q]の組み分けと同じにする必要がある。
本実施例では、係数c[n]を、番号順が連続する奇数番目の値と直後の偶数番目の値の2個の組に組み分けする方法を説明する。したがって、本実施例では、2個ずつの組み分けにより、c[1]とc[2]、c[3]とc[4]、・・・というように、c[2×n’-1]とc[2×n’](n’=1,・・・,N’、N’はN/2以下で最大の整数)が同じ組に属する。前記のN’の値は、Nが偶数の場合にN/2であり、Nが奇数の場合に(N-1)/2である。
なお、本発明はこの組み分け方法に限定されず、係数c[n]の組み分け方法は、各分散演算回路2-m(m=1,・・・,M)において行われる分散演算に基づいた2項の積和演算での組み分け方法と同じであればよい。
LUT生成回路1は、係数c[n](n=1,・・・,N)を2個ずつに組み分けした値c[2×n’-1]とc[2×n’](n’=1,・・・,N’)の和、すなわちc[2×n’-1]+c[2×n’]をd[n’]として計算し、係数c[n](n=1,・・・,N)と計算した値d[n’](n’=1,・・・,N’)とを、各分散演算回路2-1~2-Mに出力する。
なお、本発明は、以上の計算に限定されず、各分散演算回路2-m(m=1,・・・,M)において用いられる分散演算用LUTの要素を生成するための計算であればよい。
分散演算回路2-m(m=1,・・・,M)の各々は、N個のデータx[m,n](n=1,・・・,N)から構成されるデータセットX[m]と、LUT生成回路1から分配された係数c[n](n=1,・・・,N)およびLUT生成回路1で計算された数値d[n’](n’=1,・・・,N’)とを入力とし、データセットX[m]のうち自回路に対応するN個のデータx[m,n](n=1,・・・,N)の各々に係数c[n]を乗じて合算した結果、すなわち、Σn=1,・・・,N(c[n]×x[m,n])に相当する値y[m]を出力する。
図2に分散演算回路2-m(m=1,・・・,M)の構成を示す。各分散演算回路2-mは、N’個の2項分散演算回路20m-n’(n’=1,・・・,N’)と、2項分散演算結果合算回路21mとから構成される。
図2の分散演算回路2-mは、入力されたデータセットX[m]のうち自回路に対応するN個のデータx[m,n]に対して、LUT生成回路1が係数c[n](n=1,・・・,N)に対して行った2個ずつの組み分けと同様に、2個ずつの組み分けを行う。
本実施例のLUT生成回路1は、係数c[n](n=1,・・・,N)のうち番号が連続する奇数番目の値と直後の偶数番目の値の2個を同じ組みとして組み分けしている。このため、各分散演算回路2-mが行うN個のデータx[m,n]の組み分けについても同じく、x[m,2×n’-1]とx[m,2×n’](n’=1,・・・,N’、N’はN/2以下で最大の整数)を1つの組とする。
2項分散演算回路20m-n’(n’=1,・・・,N’)の各々は、自回路に対応する1組みのデータx[m,2×n’-1],x[m,2×n’]と、係数c[n](n=1,・・・,N)のうち自回路に対応する1組みの係数c[2×n’-1],c[2×n’]と、LUT生成回路1により計算された値d[n’]とを入力とする。
2項分散演算回路20m-n’は、値0、c[2×n’-1]、c[2×n’]、d[n’]を各要素の数値とするLUTを構成し、このLUTを用いた分散演算によって、積和演算c[2×n’-1]×x[m,2×n’-1]+c[2n’]×x[m,2×n’]の結果を取得してy’[m,n’]として出力する。
2項分散演算結果合算回路21mは、各2項分散演算回路20m-n’(n’=1,・・・,N’)が出力した値y’[m,n’]を合算、すなわち、Σn'=1,・・・,N'(y’[m,n’])を計算し、その結果をy[m]として出力する。
なお、以上の分散演算回路2-mの説明はNが偶数の場合であり、Nが奇数の場合は、図2に示すように、c[N]×x[m,N]を計算して結果をy’[m,N’+1]として出力する補助乗算回路22mを追加する。
さらに、Nが奇数の場合、2項分散演算結果合算回路21mは、各2項分散演算回路20m-n’(n’=1,・・・,N’)が出力した値y’[m,n’](n’=1,・・・,N’)と補助乗算回路22mが出力した値y’[m,N’+1]とを合算して、結果をy[m]として出力する。
図3に、2項分散演算回路20m-n’(m=1,・・・,M、n’=1,・・・,N’)の構成を示す。ここで、2進数で表現された任意のデータx[m,n](m=1,・・・,M、n=1,・・・,N)の1個分のビット幅をLとし、2項分散演算回路20m-n’が入力とするデータx[m,2×n’-1]の各ビットをx[m,2×n’-1][l](l=1,・・・,L)、x[m,2×n’]の各ビットをx[m,2×n’][l](l=1,・・・,L)とする。
図3に示した2項分散演算回路20m-n’は、L個のLUT索引回路200m-n’-l(選択回路)と、符号反転回路202と、L個の倍数演算回路203m-n’-lと、合算回路204とから構成される。
2項分散演算回路20m-n’は、データx[m,2×n’-1],x[m,2×n’]のビット位置l(l=1,・・・,L)毎に設けられたLUT索引回路200m-n’-lを有する。LUT索引回路200m-n’-lは、データx[m,2×n’-1]とx[m,2×n’]のうち自回路に対応するビット位置lにあるビットx[m, 2×n’-1][l]とx[m, 2×n’][l]とに基づいて、LUTの要素4個から1個を選択し、この選択した要素値をLUT#m-n’-lとして取得する。
図4に、ビットx[m,2×n’-1][l]およびx[m,2×n’][l]の各値と、そのとき選択されるLUTの要素値LUT#m-n’-lとの関係を示す。ビットx[m,2×n’-1][l]およびx[m,2×n’][l]の各値と要素値LUT#m-n’-lとの関係は、N=2(2項の積和演算)の場合の図12に示した、アドレスと、各アドレスに対応する記憶値の関係と同じである。
すなわち、図12のアドレスa[0]は図4のビットx[m, 2×n’-1][l]に対応し、図12のアドレスa[1]は図4のビットx[m, 2×n’][l]に対応し、図12のc[0]は図4のc[2×n’-1]に対応し、図12のc[1]は図4のc[2×n’]に対応する。
図3に示した2項分散演算回路20m-n’において、LUT索引回路200m-n’-lによってビット位置l(l=1,・・・,L)毎に選択された、LUTの要素値LUT#m-n’-lは、それぞれ倍数演算回路203m-n’-lによって (l-1) 倍される。
合算回路204は、L個の倍数演算回路203m-n’-lによって計算された値を合算した結果を、積和演算c[2×n’-1]×x[m,2×n’-1]+c[2n’]×x[m,2×n’]の結果であるy’[m,n’]として出力する。
ただし、l=Lのビット位置(データのMSB位置)については、選択された要素値LUT#m-n’-Lに対して符号反転回路202によって符号反転が行われた後に、倍数演算回路203m-n’-Lによって (L-1) 倍される。
図10に示した従来の積和演算回路では、l番目のクロックパルスの入力により、ビット位置lについてLUT出力値を、累積値を2倍した値と合算する処理を行い、L個のクロックパルス入力によって積和演算の結果を得ることができた。
一方、図3に示した2項分散演算回路20m-n’では、図10のLUT1001と累積値レジスタ1002と2倍回路1003と加算回路1004に相当する処理を、全てのビット位置l(l=1,・・・,L)に関して同時に行うことによって、L個のクロックパルス入力を必要とせずに、即座に積和演算の結果を得ることができる。
なお本実施例では、MSBのビット位置Lについては、選択された要素値LUT#m-n’-Lの符号反転を行っている。符号反転を行う理由は、データx[m,n](m=1,・・・,M、n=1,・・・,N)を、負の値も取り得る符号付き数値(2の補数による2進数で表現された数値)としているためである。データx[m,n]が、0以上のみに限定される符号なし数値の場合は、MSBのビット位置Lについても、他のビット位置と同様に、要素値LUT#m-n’-Lをそのまま倍数演算回路203m-n’-Lによって (L-1) 倍すればよい。
また、上記のビット位置lについて、選択された要素値LUT#m-n’-lを (l-1) する処理は、2進数で表現された要素値LUT#m-n’-lを、(l-1)ビット左にシフトすることによって実現できる。したがって、L個の倍数演算回路203m-n’-lに乗算回路を用いる必要はなく、簡易な回路で実現できる。
本実施例の演算回路が出力するM個の数値y[m](m=1,・・・,M)は、各データセットX[m](m=1,・・・,M)を構成するN個のデータx[m,n](n=1,・・・,N)の各々にN個の係数c[n]を乗じて合算した積和演算の結果Σn=1,・・・,N(c[n]×x[m,n])と同じ値となる。
図10の積和演算回路は、N個のデータの数値とN個の係数との乗算とその合算であるN項の積和演算を分散演算により実現している。
一方、本実施例の演算回路は、N項の積和演算を、N’個の2項の積和演算に分割して、各2項の積和演算をそれぞれ並列演算により実現し、これらの結果を合算することによって、N項の積和演算と同じ結果を得ている。前記の構成の差による効果について、以下に説明する。
図10の積和演算回路は、N項の積和演算を分散演算により実現するために、2N個の要素を備えた1個のLUT1001を必要としている。LUT1001には、2N個のアドレスをもつメモリ回路が使用される。メモリ回路により実現されたLUT1001は、フリップフロップおよび論理ゲートにより実現されたLUT回路と比較して、一般的に、1ビットあたりの記憶素子の面積が小さく、かつ、多数のアドレスの各々に記憶された値から指定された1個のアドレスに記憶された値の読み出しを行う処理を効率的に(高速かつ低消費電力かつ小さい面積の回路で)実現できる。この特徴によって、要素数が多い図10のLUT1001を、フリップフロップや論理ゲートによって実現する場合よりも、メモリ回路で実現する方が、高速かつ低消費電力かつ小面積となる。
しかしながら、図10の積和演算回路では、データのビット位置毎にLUT1001のメモリ回路を読み出す必要があるので、データのビット幅分の回数のメモリアクセスによってスループットが制限される。スループットの制限を緩和する対策としては、データのビット幅分の個数のメモリ回路を備えておき、1個のLUT1001をこれらのメモリ回路にコピーすることにより、全ビット位置について同時にLUTを検索可能とする方法がある。しかし、この方法では、多数のメモリ回路を備える必要があるので、回路の面積が増大するという課題が生じる。
本実施例の演算回路は、N項積和演算をN’(=N/2)個の2項積和演算へと分割することによって、LUT(LUT生成回路1とLUT索引回路200m-n’-l)に保持すべき数値の個数を大幅に削減し、LUTをメモリ回路ではなくフリップフロップや論理ゲートにより構成した場合にも回路規模が問題とならないような構成としている。
すなわち、N項積和演算を1個のLUT1001を用いて分散演算を行う場合は、LUT1001に2N-1個の数値を保持する必要がある(アドレス数は2Nだが、そのうち1個のアドレスには値0が入るため数値として保持する必要はないので、保持すべき数値の個数は2N-1個)。
一方、本実施例では、N’(=N/2)個の2項積和演算に分割することにより、3(=22-1)個の数値を保持するLUT(LUT生成回路1とLUT索引回路200m-n’-l)がN’(=N/2)個使用されるので、(N×1.5)個の数値を保持すれば済む。
例えばN=8の場合、保持すべき数値の個数を255個から12個に削減できるので、LUT(LUT生成回路1とLUT索引回路200m-n’-l)にメモリ回路を使用しなくとも回路規模が問題とならないような構成とすることができる。なお、N項積和演算を2項積和演算に分割することによって、N’(=N/2)個の2項積和演算結果を合算する2項分散演算結果合算回路21mを追加する必要があるが、LUT1001を構成するメモリ回路と比較すると、2項分散演算結果合算回路21mの回路規模は十分に小さく、問題とはならない。
本実施例の演算回路では、上記のように、N項積和演算を2項積和演算に分割することにより、LUT(LUT生成回路1とLUT索引回路200m-n’-l)に保持される要素値の個数を大幅に削減することができるが、さらにLUT索引回路200m-n’-lの合計規模についても、大幅に削減できることを、3項積和演算に分割する場合と比較することにより示す。
N項積和演算を2項積和演算に分割する場合は、4:1セレクタであるLUT索引回路200m-n’-lがN/2個必要となるが、3項積和演算に分割する場合は、8:1セレクタであるLUT索引回路がN/3個必要となる。4:1セレクタは3個の2:1セレクタから構成可能であり、8:1セレクタは7個の2:1セレクタから構成可能である。したがって、N項積和演算を2項積和演算に分割する場合は、(N×1.5)個の2:1セレクタが必要となるのに対して、3項積和演算に分割する場合は、(N×7/3)個の2:1セレクタが必要となる。
また、N項積和演算を2項積和演算に分割する場合は、LUTの要素値に2個の係数c[2×n’-1]とc[2×n’]の合計値d[n’]が含まれるため、LUTの要素値のビット幅は、係数c[2×n’-1],c[2×n’]のビット幅+1ビットとなる。
これに対して、N項積和演算を3項積和演算に分割する場合は、LUTの要素値に3個の係数の合計値が含まれるため、そのLUTの要素値のビット幅は、係数のビット幅+2ビットとなる。このため、LUT索引回路に使用される2:1セレクタの個数、および2:1セレクタのビット幅が、N項積和演算を2項積和演算に分割する場合よりも3項積和演算に分割する場合の方が大きくなる。このように、本実施例の演算回路は、N項積和演算を2項積和演算に分割することにより、LUT索引回路200m-n’-lの合計規模を削減する効果がある。
本実施例の演算回路では、LUT(LUT生成回路1とLUT索引回路200m-n’-l)を、メモリ回路ではなく、予め要素値を生成する回路と要素値をセレクタ等の論理ゲートを用いて選択する回路としている。従来のようにLUTがメモリ回路の場合、データの全ビット位置について同時にLUTを検索する並列化や、積和演算回路自体の並列化によって、スループットを高くしようとしたときに、データのビット位置毎や積和演算回路毎に、LUTをコピーした複数個のメモリ回路を備える必要がある。
本実施例の演算回路では、LUTにメモリ回路を用いていないため、LUTの各要素値を事前に生成・保持する回路(LUT生成回路1)と、要素値を選択する回路(LUT索引回路200m-n’-l)に分けることが可能であり、LUT生成回路1を並列化せずにLUT索引回路200m-n’-lのみを並列化する。これにより、冗長な回路の構成、すなわちLUTの各要素値を保持する回路の並列化(コピー)を防止することができ、並列化に伴う回路規模の増大を抑制することができる。
また、本実施例で説明した演算回路は、乗算回路と加算回路によりΣn=1,・・・,N(c[n]×x[m,n])を計算する一般的な積和演算回路と同様に、データの入力時点から結果が出力されるまでに要する時間を、入力データのビット幅の平方根に比例した時間とすることができる。
一方、図10に示した積和演算回路では、入力データのビット幅と同じ個数のクロックパルス入力を完了するまで計算結果を得ることができない。したがって、データの入力時点から結果が出力されるまでに要する時間は、入力データのビット幅と比例した時間となる。このように、本実施例の演算回路は入力データのビット幅の平方根に比例した計算時間で済むため、前記ビット幅に比例した計算時間を要する図10の積和演算回路と比較して、スループットを向上させることができる。
また、本実施例の演算回路は、LUT(LUT生成回路1とLUT索引回路200m-n’-l)にメモリ回路を用いずに、LUT生成回路1からLUTの各要素値を分配し、これらが分配された2項分散演算回路20m-n’において要素値の中から1個を選択する。このため、係数c[n]が時間の経過に伴って変動する積和演算に本実施例を適用した場合に、係数c[n]の変化を即時にLUTに反映させることができる。
一方、図10の積和演算回路のようにLUT1001にメモリ回路を用いる場合は、そのアドレスを1個ずつアクセスして記憶値を書き換える処理が必要となるため、全てのアドレスに対して書き換え処理が完了するまで積和演算が中断される。このように、本実施例の演算回路は、係数c[n]の変動によって生じる頻繁なLUTの更新が生じても、スループットが低下しない。
[第2の実施例]
次に、本発明の第2の実施例について説明する。図5は本発明の第2の実施例に係る演算回路の構成を示すブロック図であり、図1と同一の構成には同一の符号を付してある。本実施例は、第1の実施例に示した演算回路に対して、回路規模や消費電力の増大なく、スループットを改善する構成を示す。
図5の演算回路は、図1に示した演算回路と同じく、M組(Mは2以上の整数)のデータセットX[m](m=1,・・・,M)と、N個(Nは2以上の整数)の係数c[n](n=1,・・・,N)とを入力とする。各データセットX[m](m=1,・・・,M)は、N個のデータx[m,n](n=1,・・・,N)の組からなる。なお、データx[m,n](m=1,・・・,M、n=1,・・・,N)は、負の値も取り得る符号付き数値(2の補数による2進数で表現された数値)である。
図5の演算回路は、図1に示した演算回路と同じく、上記入力に対して、M個の積和演算の値y[m](m=1,・・・,M)を計算して出力する。演算回路が出力する積和演算の値y[m](m=1,・・・,M)の各々は、データセットX[m](m=1,・・・,M)を構成するN個のデータx[m,n](n=1,・・・,N)の各々に係数c[n]を乗じて合算した結果、すなわち、Σn=1,・・・,N(c[n]×x[m,n])に相当する値である。
図5の演算回路は、1個のLUT生成回路1と、1個のLUTラッチ回路3と、M個(Mは2以上の整数)の分散演算回路2-1~2-Mから構成される。
LUT生成回路1は、積和演算の係数であるN個の係数c[n](n=1,・・・,N)を入力とし、これらを2個ずつの組に分けたときの各組の値から、分散演算用LUTの要素として使用する値d[n’](n’=1,・・・,N’、N’はN/2以下で最大の整数)を計算し、計算した値d[n’]を係数c[n]と併せてLUTラッチ回路3に出力する。d[n’](n’=1,・・・,N’)の計算方法は、第1の実施例において説明した方法と同じである。
LUTラッチ回路3は、LUT生成回路1から出力された係数c[n](n=1,・・・,N)とN’個(N’はN/2以下で最大の整数)の値d[n’](n’=1,・・・,N’)とを入力とし、クロックパルスの入力毎に、係数c[n]と値d[n’]とをラッチして、次のクロックパルスの入力まで保持する回路である。LUTラッチ回路3は、係数c[n]と値d[n’]の各ビットの値をクロックに同期して保持するフリップフロップによって実現できる。そして、LUTラッチ回路3は、保持した係数c[n](n=1,・・・,N)と値d[n’](n’=1,・・・,N’)とを、各分散演算回路2-1~2-Mに出力する。
分散演算回路2-m(m=1,・・・,M)の各々は、N個のデータx[m,n](n=1,・・・,N)から構成されるデータセットX[m]と、LUTラッチ回路3から分配された係数c[n](n=1,・・・,N)および値d[n’](n’=1,・・・,N’)とを入力とし、データセットX[m]のうち自回路に対応するN個のデータx[m,n](n=1,・・・,N)の各々に係数c[n]を乗じて合算した結果、すなわち、Σn=1,・・・,N(c[n]×x[m,n])に相当する値y[m]を出力する。値y[m]の計算方法は、第1の実施例において説明した方法と同じである。
図5の演算回路は、図1の演算回路と比較して、LUTラッチ回路3がLUT生成回路1と分散演算回路2-1~2-Mの間に挿入されている点が異なる。すなわち、LUT生成回路1とM並列の分散演算回路2-m(m=1,・・・,M)とがパイプライン構成となっている。
図1の演算回路では、LUT生成回路1内で、c[n](n=1,・・・,N)からd[n’](n’=1,・・・,N’)を計算する処理時間である生成時間Td_LUTと、分散演算回路2-m内でデータx[m,n](n=1,・・・,N)と係数c[n](n=1,・・・,N)および値d[n’](n’=1,・・・,N’)とに基づいてΣn=1,・・・,N(c[n]×x[m,n])に相当する数値y[m]を生成する処理時間である分散演算時間Tdとの合計時間、すなわち(Td_LUT+Td)によって、演算回路を含むシステムのクロック周波数の上限が制約される。
一方、図5の演算回路では、生成時間Td_LUTと分散演算時間Tdのそれぞれによって、演算回路を含むシステムのクロック周波数の上限が制約される。
すなわち、図1の演算回路を採用したシステムのクロック周波数の上限値は 1/(Td_LUT+Td)であるのに対して、図5の演算回路を採用したシステムのクロック周波数の上限値は、1/Td_LUTと1/Tdのうち値が小さい方になる。つまり、図1の演算回路よりも、図5の演算回路の方が、高速に動作する。
通常、処理の流れが一方向の回路は、パイプライン構成の採用によって、高速化(スループット向上)が可能となるが、フリップフロップが多数使用されるため、回路規模や消費電力が増大するという課題が存在する。
本実施例において、パイプライン構成での課題となるフリップフロップは、LUTラッチ回路3内で、係数c[n](n=1,・・・,N)と値d[n’](n’=1,・・・,N’)とをクロックに同期して保持する回路に使用されるフリップフロップである。
パイプライン構成の回路規模や消費電力は、LUTの要素数、すなわち、係数c[n](n=1,・・・,N)および値d[n’](n’=1,・・・,N’)の個数(N+N’)に、ほぼ比例する。なお、正確にはc[2×n’-1]とc[2×n’]の加算値であるd[n’](n’=1,・・・,N’)の方が少なくとも1ビット分ビット幅が大きくなるため、追加されるフリップフロップの個数は、完全に(N+N’)に比例はしないが、通常c[n]のビット幅は1ビットと比較すると十分に大きいため、ほぼ比例すると考えてよい。
しかし、第1の実施例の説明にあるように、第1の実施例および本実施例では、メモリ回路でLUTを構成しなくとも済むようLUT(LUT生成回路1とLUT索引回路200m-n’-l)の要素数を削減している。
図10の積和演算回路では、N項積和演算を1個のLUT1001を用いて分散演算を行うため、LUT1001の要素数は2N-1であったが、本実施例や第1の実施例の演算回路では、N項積和演算をN/2個の2項積和演算に分割することによってその要素数を(N×1.5)個にまで削減している。例えばN=8の場合、要素数を255個から12個にまで削減できる。このように、本実施例では、図10の積和演算回路を基にパイプライン構成化した場合と比較すると、パイプライン構成化に伴って追加されるフリップフロップの個数を大幅に削減できるため、回路規模や消費電力を増大させることなく、スループットを改善できる。
また、分散演算を用いない、乗算回路と加算回路を組み合わせて構成された一般的な積和演算回路に対してパイプライン構成化する場合、乗算回路と加算回路の間にフリップフロップを挿入する構成を採ることが可能である。乗算回路と加算回路の間に挿入すべきフリップフロップ数は、積和演算の並列数Mに比例するので、演算回路全体に対するフリップフロップの規模の割合が大きく、パイプライン構成の採用によって生じる回路規模や消費電力の増加が問題となる。しかし、本実施例に示した演算回路では、パイプライン構成化により挿入されるフリップフロップ数は、演算の並列数Mに比例して増加することはなく、少ないLUTの要素数に比例した個数で済む。
このように、従来の積和演算回路では、パイプライン構成化に伴って回路規模・消費電力が大幅に増大するが、本実施例に示したようにLUT生成回路1とM並列の分散演算回路2-m(m=1,・・・,M)とを分けたパイプライン構造とすることで、本実施例の演算回路は、回路規模や消費電力を増大させることなく、スループットを改善できるという、特徴を備える。
[第3の実施例]
次に、本発明の第3の実施例について説明する。図6は本発明の第3の実施例に係る演算回路の構成を示すブロック図である。図6の演算回路は、各々が実部値x_real[m]と虚部値x_imag[m](m=1,・・・,M)とに分かれる、M個(Mは2以上の整数)の複素数X[m](m=1,・・・,M)と、実部値c_realと虚部値c_imagとに分かれる複素数係数Cとを入力とする。なお、データx[m,n](m=1,・・・,M、n=1,・・・,N)は、負の値も取り得る符号付き数値(2の補数による2進数で表現された数値)である。
図6の演算回路は、上記入力に対して、実部値y_real[m]と虚部値y_imag[m](m=1,・・・,M)とに分かれる、M個の複素数値Y[m](m=1,・・・,M)を、分散演算(distributed arithmetic)により取得し出力する。M個の複素数値Y[m]は、各々が(C×X[m])に相当する。すなわち、実部値y_real[m]は、c_real×x_real[m]-c_imag×x_imag[m]に相当する。虚部値y_imag[m]は、c_imag×x_real[m]+c_real×x_imag[m]に相当する。
図6の演算回路は、1個のLUT生成回路1aと、M個(Mは2以上の整数)の分散演算回路2a-1~2a-Mとから構成される。
LUT生成回路1aは、複素数係数Cの実部値c_realと虚部値c_imagとを入力とし、実部値c_realと虚部値c_imagの差c_real-c_imagに相当する値d_subと、実部値c_realと虚部値c_imagの和c_real+c_imagに相当する値d_addとをそれぞれ計算し、実部値c_realおよび虚部値c_imagと共に値d_subおよびd_addを各分散演算回路2a-1~2a-Mに出力する。
分散演算回路2a-m(m=1,・・・,M)の各々は、複素数X[m](m=1,・・・,M)と、LUT生成回路1aから分配された実部値c_realおよび虚部値c_imagと値d_subおよびd_addとを入力とし、複数数X[m]のうち自回路に対応するデータの各々に複素数係数Cを乗じて合算した結果である複素数値Y[m](m=1,・・・,M)を、M個の各々について並列に計算して出力する。
分散演算回路2a-mは、値0、c_real、-c_imag、d_subを各要素の数値とする実部演算用LUTと、値0、c_imag、c_real、d_addを各要素の数値とする虚部演算用LUTとを構成し、実部演算用LUTを用いた分散演算によって実部の積和演算c_real×x_real[m]-c_imag×x_imag[m]の結果を取得してy_real[m]として出力すると共に、虚部演算用LUTを用いた分散演算によって虚部の積和演算c_imag×x_real[m]+c_real×x_imag[m]の結果を取得してy_imag[m]として出力する。
図7に、分散演算回路2a-m(m=1,・・・,M)の構成を示す。ここで、2進数で表現された任意のデータx_real[m](m=1,・・・,M)およびx_imag[m](m=1,・・・,M)の1個分のビット幅をLとし、分散演算回路2a-mが入力とするデータx_real[m]の各ビットをx_real[m][l](l=1,・・・,L)、x_imag[m]の各ビットをx_imag[m][l](l=1,・・・,L)とする。
図7に示した分散演算回路2a-mは、L個の実部演算用LUT索引回路205m-l(実部演算用選択回路)と、符号反転回路206,207と、L個の倍数演算回路208m-lと、合算回路209と、L個の虚部演算用LUT索引回路210m-l(虚部演算用選択回路)と、符号反転回路211と、L個の倍数演算回路212m-lと、合算回路213とから構成される。
分散演算回路2a-mは、データx_real[m],x_imag[m]のビット位置l(l=1,・・・,L)毎に設けられた実部演算用LUT索引回路205m-lと虚部演算用LUT索引回路210m-lとを有する。
実部演算用LUT索引回路205m-lは、データx_real[m],x_imag[m]のうち自回路に対応するビット位置lにあるビットx_real[m][l],x_imag[m][l]に基づいて、実部演算用LUTの4要素値、すなわち値0、c_real、-c_imag、d_subの中から1個を取得する。
虚部演算用LUT索引回路210m-lは、データx_real[m],x_imag[m]のうち自回路に対応するビット位置lにあるビットx_real[m][l],x_imag[m][l]に基づいて、虚部演算用LUTの4要素値、すなわち値0、c_imag、c_real、d_addの中から1個を取得する。
図8に、ビットx_real[m][l]およびx_imag[m][l]の各値と、そのとき選択される実部演算用LUTの要素値および虚部演算用LUTの要素値との関係を示す。ビットx_real[m][l]およびx_imag[m][l]の各値と実部演算用LUTの要素値および虚部演算用LUTの要素値との関係は、N=2(2項の積和演算)の場合の図12に示した、アドレスと、各アドレスに対応する記憶値の関係と同じである。
すなわち、図12のアドレスa[0]は本実施例のビットx_real[m][l]に対応し、図12のアドレスa[1]は本実施例のビットx_imag[m][l]に対応する。また、y_real[m]を求める実部の積和演算については、図12の係数c[0]は本実施例のc_realに対応し、図12の係数c[1]は本実施例の-c_imagに対応する。また、y_imag[m]を求める虚部の積和演算については、図12の係数c[0]は本実施例のc_imagに対応し、図12の係数c[1]は本実施例のc_realに対応する。
図7に示した分散演算回路2a-mにおいて、実部演算用LUT索引回路205m-lによってビット位置l(l=1,・・・,L)毎に選択された実部演算用LUTの要素値は、それぞれ倍数演算回路208m-lによって (l-1) 倍される。
同様に、虚部演算用LUT索引回路210m-lによってビット位置l(l=1,・・・,L)毎に選択された虚部演算用LUTの要素値は、それぞれ倍数演算回路212m-lによって (l-1) 倍される。
合算回路209は、L個の倍数演算回路208m-lによって計算された値を合算し、合算回路213は、L個の倍数演算回路212m-lによって計算された値を合算する。
ただし、実部値のl=Lのビット位置(データのMSB位置)については、実部演算用LUT索引回路205m-Lによって選択された要素値に対して符号反転回路207によって符号反転が行われた後に、倍数演算回路208m-Lによって (L-1) 倍される。同様に、虚部値のl=Lのビット位置については、虚部演算用LUT索引回路210m-Lによって選択された要素値に対して符号反転回路211によって符号反転が行われた後に、倍数演算回路212m-Lによって (L-1) 倍される。
このように、全てのビット位置について合算回路209による合算が行われた結果は、本実施例の演算回路が出力すべき複素数値Y[m]の実部値であるy_real[m]として出力される。また、合算回路213による合算が行われた結果は、複素数値Y[m]の虚部値であるy_imag[m]として出力される。
図7に示した分散演算回路2a-mでは、図3に示した第1の実施例の回路と同じく、図10のLUT1001と累積値レジスタ1002と2倍回路1003と加算回路1004に相当する処理を、全てのビット位置l(l=1,・・・,L)に関して同時に行うことによって、L個のクロックパルス入力を必要とせずに、即座に積和演算の結果を得ることができる。
なお本実施例では、MSBのビット位置Lについては、実部演算用LUT索引回路205m-Lによって選択された要素値の符号反転、および虚部演算用LUT索引回路210m-Lによって選択された要素値の符号反転を行っている。符号反転を行う理由は、データx[m,n](m=1,・・・,M、n=1,・・・,N)を、負の値も取り得る符号付き数値(2の補数による2進数で表現された数値)としているためである。
x_real[m]やx_imag[m]が、0以上のみに限定される符号なし数値の場合は、MSBのビット位置Lについても、他のビット位置と同様に、実部演算用LUT索引回路205m-Lによって選択された要素値をそのまま倍数演算回路208m-Lによって (L-1) 倍し、虚部演算用LUT索引回路210m-Lによって選択された要素値をそのまま倍数演算回路212m-Lによって (L-1) 倍すればよい。
また、上記のビット位置lについて、実部演算用LUT索引回路205m-l、虚部演算用LUT索引回路210m-lによって選択された要素値を (l-1) 倍する処理は、2進数で表現された要素値を(l-1)ビット左にシフトすることによって実現できる。したがって、L個の倍数演算回路208m-lおよびL個の倍数演算回路212m-lに乗算回路を用いる必要はなく、簡易な回路で実現できる。
本実施例の演算回路が出力するM個の複素数値Y[m](m=1,・・・,M)は、複素数X[m](m=1,・・・,M)に複素数係数Cを乗じて合算した積和演算の結果(C×X[m])と同じ値となる。
第1の実施例では、N項積和演算をN’(=N/2)個の2項積和演算へと分割することによって、LUT(LUT生成回路1とLUT索引回路200m-n’-l)に保持すべき数値の個数を大幅に削減している。
一方、本実施例では、複素数間の乗算が2項積和演算の形式であるため、N項積和演算から2項積和演算に分割しなくとも、わずか4個の要素値のLUT(LUT生成回路1aと実部演算用LUT索引回路205m-lと虚部演算用LUT索引回路210m-l)を用いて分散演算が可能となる。
本実施例は、複素数間の乗算に関する上記の特徴を利用しており、複素数のデータに係数を乗じた結果の実部および虚部の各数値を得るための各LUTを、メモリ回路ではなく、予めLUTの要素値を生成する回路と要素値をセレクタ等の論理ゲートを用いて選択する回路としている。このような構成により、第1の実施例と同様の効果を得ることができる。
すなわち、従来のように各LUTがメモリ回路であった場合、データの全ビット位置について同時にLUTを検索する並列化や、複素数係数CをM個の複素数のデータX[m](m=1,・・・,M)の各々に乗じるための複素数乗算回路の並列化によって、スループットを高くしようとしたときに、データのビット位置毎や積和演算回路毎に、LUTをコピーした複数個のメモリ回路を備える必要がある。
本実施例の演算回路では、LUTにメモリ回路を用いていないため、LUTの各要素値を事前に生成・保持する回路(LUT生成回路1a)と、LUTの各要素値を選択する回路(実部演算用LUT索引回路205m-lおよび虚部演算用LUT索引回路210m-l)に分けることが可能であり、LUT生成回路1aを並列化せずに実部演算用LUT索引回路205m-lおよび虚部演算用LUT索引回路210m-lのみを並列化する。これにより、冗長な回路の構成、すなわちLUTの各要素値を保持する回路の並列化(コピー)を防止することができ、並列化に伴う回路規模の増大を抑制することができる。
なお、本実施例の演算回路は、複素数の乗算に適用した場合に、実部計算用と虚部計算用のLUTに分けて、各LUTの要素値を生成・分配するのではなく、実部計算用LUTと虚部計算用LUTの要素値のうち、共通する要素であるc_realについては生成・分配を共通化している。さらに、虚部計算用LUTの要素値であるc_imagについては、実部計算用LUTの要素に-c_imagがあるため、c_imagのみを実部演算用LUT索引回路205m-l側の符号反転回路206によって符号反転することにより、分配に用いられる回路内の配線数を削減している。このような共通化と符号反転により、実部計算用LUTと虚部計算用LUTを完全に独立して生成・分配する構成よりも回路規模および消費電力を削減することができる。
[第4の実施例]
次に、本発明の第4の実施例について説明する。図9は本発明の第4の実施例に係る演算回路の構成を示すブロック図であり、図6と同一の構成には同一の符号を付してある。本実施例は、第3の実施例に示した演算回路に対して、回路規模や消費電力の増大なく、スループットを改善する構成を示す。
図9の演算回路は、図6に示した演算回路と同じく、各々が実部値x_real[m]と虚部値x_imag[m](m=1,・・・,M)とに分かれる、M個(Mは2以上の整数)の複素数X[m](m=1,・・・,M)と、実部値c_realと虚部値c_imagとに分かれる複素数係数Cとを入力とする。なお、データx[m,n](m=1,・・・,M、n=1,・・・,N)は、負の値も取り得る符号付き数値(2の補数による2進数で表現された数値)である。
図9の演算回路は、図6に示した演算回路と同じく、上記入力に対して、実部値y_real[m]と虚部値y_imag[m](m=1,・・・,M)とに分かれる、M個の複素数値Y[m](m=1,・・・,M)を、分散演算により取得し出力する。M個の複素数値Y[m]は、各々が(C×X[m])に相当する。すなわち、実部値y_real[m]は、c_real×x_real[m]-c_imag×x_imag[m]に相当する。虚部値y_imag[m]は、c_imag×x_real[m]+c_real×x_imag[m]に相当する。
図9の演算回路は、1個のLUT生成回路1aと、1個のLUTラッチ回路3aと、M個(Mは2以上の整数)の分散演算回路2a-1~2a-Mから構成される。
LUT生成回路1aは、複素数係数Cの実部値c_realと虚部値c_imagとを入力とし、実部値c_realと虚部値c_imagの差c_real-c_imagに相当する値d_subと、実部値c_realと虚部値c_imagの和c_real+c_imagに相当する値d_addとをそれぞれ計算し、実部値c_realおよび虚部値c_imagと共に値d_subおよびd_addをLUTラッチ回路3aに出力する。
LUTラッチ回路3aは、LUT生成回路1aから出力されたc_real、c_imag、d_sub、d_addを入力とし、クロックパルスの入力毎に、c_real、c_imag、d_sub、d_addの各値をラッチして、次のクロックパルスの入力まで保持する回路である。LUTラッチ回路3aは、c_real、c_imag、d_sub、d_addの各値の各ビットの値をクロックに同期して保持するフリップフロップによって実現できる。そして、LUTラッチ回路3aは、保持したc_real、c_imag、d_sub、d_addを、各分散演算回路2a-1~2a-Mに出力する。
分散演算回路2a-m(mは1~Mの整数)の各々は、第3の実施例と同様に、複素数X[m](m=1,・・・,M)と、LUTラッチ回路3から分配された実部値c_realおよび虚部値c_imagと値d_subおよびd_addとを入力とし、複数数X[m]のうち自回路に対応するデータの各々に複素数係数Cを乗じて合算した結果である複素数値Y[m](m=1,・・・,M)を、M個の各々について並列に計算して出力する。
分散演算回路2a-mは、値0、c_real、-c_imag、d_subを各要素の数値とする実部演算用LUTと、値0、c_imag、c_real、d_addを各要素の数値とする虚部演算用LUTとを構成し、実部演算用LUTを用いた分散演算によって実部の積和演算c_real×x_real[m]-c_imag×x_imag[m]の結果を取得してy_real[m]として出力すると共に、虚部演算用LUTを用いた分散演算によって虚部の積和演算c_imag×x_real[m]+c_real×x_imag[m]の結果を取得してy_imag[m]として出力する。分散演算回路2a-mの構成は第3の実施例で説明したとおりである。
図9の演算回路は、図6の演算回路と比較して、LUTラッチ回路3aがLUT生成回路1aと分散演算回路2a-1~2a-Mの間に挿入されている点が異なる。すなわち、LUT生成回路1aとM並列の分散演算回路2a-m(m=1,・・・,M)とがパイプライン構成となっている。
図6の演算回路では、LUT生成回路1a内で、複素数係数Cからd_subおよびd_addを計算する処理時間である生成時間Td_LUTと、分散演算回路2a-m内でy_real[m]およびy_imag[m]を生成する処理時間である分散演算時間Tdとの合計時間、すなわち(Td_LUT+Td)によって、演算回路を含むシステムのクロック周波数の上限が制約される。
一方、図9の演算回路では、生成時間Td_LUTと分散演算時間Tdのそれぞれによって、演算回路を含むシステムのクロック周波数の上限が制約される。
すなわち、図6の演算回路を採用したシステムのクロック周波数の上限値は 1/(Td_LUT+Td)であるのに対して、図9の演算回路を採用したシステムのクロック周波数の上限値は、1/Td_LUTと1/Tdのうち値が小さい方になる。つまり、図6の演算回路よりも、図9の演算回路の方が、高速に動作する。
通常、処理の流れが一方向の回路は、パイプライン構成の採用によって、高速化(スループット向上)が可能となるが、フリップフロップが多数使用されるため、回路規模や消費電力が増大するという課題が存在する。
本実施例において、パイプライン構成での課題となるフリップフロップは、LUTラッチ回路3a内で、c_real、c_imag、d_sub、d_addをクロックに同期して保持する回路に使用されるフリップフロップのみである。分散演算回路2a-1~2a-Mの並列数Mが大きい場合、演算回路全体に対するフリップフロップの規模の割合はわずかであり、本実施例に示したパイプライン構成の採用によって生じる回路規模や消費電力の増加は問題とならない。
また、分散演算を用いない、乗算回路と加算回路を組み合わせて構成された一般的な複素数乗算回路に対してパイプライン構成化する場合、乗算回路と加算回路の間にフリップフロップを挿入する構成を採ることが可能である。乗算回路と加算回路の間に挿入すべきフリップフロップ数は、複素数乗算の並列数Mに比例するので、演算回路全体に対するフリップフロップの規模の割合が大きく、パイプライン構成の採用によって生じる回路規模や消費電力の増加が問題となる。しかし、本実施例に示した演算回路では、パイプライン構成化により挿入されるフリップフロップ数は、演算の並列数Mに比例して増加することはなく、少ないLUTの要素数に比例した個数で済む。
このように、従来の複素数乗算回路ではパイプライン構成化に伴って回路規模・消費電力が大幅に増大するが、本実施例に示したようにLUT生成回路1aとM並列の分散演算回路2a-m(m=1,・・・,M)とを分けたパイプライン構造とすることにより、本実施例の演算回路は、回路規模や消費電力を増大させることなく、スループットを改善できるという、特徴を備える。
なお、第1~第4の実施例で説明した演算回路は例えばFPGAによって実現することができる。
本発明は、演算回路に適用することができる。
1,2a…LUT生成回路、2-1~2-M,2a-1~2a-M…分散演算回路、3,3a…LUTラッチ回路、20m…2項分散演算回路、21m…2項分散演算結果合算回路、22m…補助乗算回路22、200m…LUT索引回路、202,206,207,211…符号反転回路、203m,208m,212m…倍数演算回路、204,209,213…合算回路、205m…実部演算用LUT索引回路、210m…虚部演算用LUT索引回路。

Claims (7)

  1. N個(Nは2以上の整数)のデータx[m,n](n=1,・・・,N)の組をM組(Mは2以上の整数)含むデータセットX[m](m=1,・・・,M)と、N個の係数c[n]とを入力とし、M個の積和演算の値y[m]を計算して出力する演算回路において、
    前記係数c[n]を2個ずつに組み分けしたときの組毎に計算した値を出力するLUT生成回路と、
    前記データセットX[m]のうちN個のデータx[m,n]の各々に係数c[n]を乗じて合算した結果である前記積和演算の値y[m]を、前記M組の各組毎に並列に計算して出力するM個の分散演算回路とを備え、
    各分散演算回路は、
    自回路に対応するN個のデータx[m,n]を2個ずつに組み分けした各値と前記係数c[n]を2個ずつに組み分けした各値と前記LUT生成回路によって計算された値とに基づいて、前記N個のデータx[m,n]の各々に前記係数c[n]の各々を乗じて合算した2項積和演算の値を、前記2個ずつに組み分けした各組毎に並列に計算して出力する複数の2項分散演算回路と、
    前記複数の2項分散演算回路によって計算された値を合算した結果を前記積和演算の値y[m]として出力する2項分散演算結果合算回路とから構成され
    前記LUT生成回路は、前記係数c[n]を2個ずつに組み分けした値c[2×n’-1]とc[2×n’](n’=1,・・・,N’)の和c[2×n’-1]+c[2×n’]を値d[n’]としてN’個(N’はN/2以下で最大の整数)の組毎に計算し、
    各分散演算回路は、前記データセットX[m]と前記LUT生成回路から出力された係数c[n]および前記LUT生成回路によって計算された値d[n’]とを入力とし、データセットX[m]のうち自回路に対応するN個のデータx[m,n]の各々に係数c[n]を乗じて合算した結果である前記積和演算の値y[m]を出力することを特徴とする演算回路。
  2. 請求項1の演算回路において、
    前記LUT生成回路と前記M個の分散演算回路との間に設けられ、前記係数c[n]と前記LUT生成回路によって計算された値とをクロックに同期して保持し、保持した値を前記M個の分散演算回路に出力するLUTラッチ回路をさらに備えることを特徴とする演算回路。
  3. 請求項1または2記載の演算回路において、
    各分散演算回路は、
    前記Nが奇数の場合にc[N]×x[m,N]を計算した結果を出力する補助乗算回路をさらに備え、
    前記2項分散演算結果合算回路は、前記Nが奇数の場合に、前記複数の2項分散演算回路によって計算された値と前記補助乗算回路によって計算された値とを合算した結果を前記積和演算の値y[m]として出力することを特徴とする演算回路。
  4. 請求項1乃至のいずれか1項に記載の演算回路において、
    前記2項分散演算回路は、
    前記N個のデータx[m,n]のうち同一組の2個の値のビット位置毎に設けられ、値0と、前記係数c[n]のうち同一組の2個の値と、この係数c[n]の2個の値から前記LUT生成回路によって計算された値とからなる要素値の中から、前記N個のデータx[m,n]のうち同一組の2個の値を構成する同一ビット位置の2個の値に対応する1個の要素値をビット位置毎に取得する複数の索引回路と、
    前記複数の索引回路によって取得された要素値を、それぞれ2(l-1)倍(lはビット位置の番号)することをビット位置毎に行う複数の倍数演算回路と、
    前記複数の倍数演算回路によって計算された値を合算した結果を前記2項積和演算の値として出力する合算回路とから構成されることを特徴とする演算回路。
  5. M個(Mは2以上の整数)の各々が実部値x_real[m]と虚部値x_imag[m](m=1,・・・,M)とに分かれる、M個の複素数X[m](m=1,・・・,M)と、実部値c_realと虚部値c_imagとに分かれる複素数係数Cとを入力とし、実部の積和演算の結果と虚部の積和演算の結果とからなるM個の複素数値Y[m]を計算して出力する演算回路において、
    前記複素数係数Cの実部値c_realと虚部値c_imagの差の値d_subと、実部値c_realと虚部値c_imagの和の値d_addとを計算するLUT生成回路と、
    前記複数X[m]のうち自回路に対応するデータの各々に前記複素数係数Cを乗じて合算した結果である前記複素数値Y[m]を、前記M個の各々について並列に計算して出力するM個の分散演算回路とを備え、
    各分散演算回路は、前記複素数X[m]と前記複素数係数Cの実部値c_realおよび虚部値c_imagと前記LUT生成回路によって計算された値d_subおよびd_addとを入力とし、前記実部の積和演算c_real×x_real[m]-c_imag×x_imag[m]の結果であるy_real[m]と、前記虚部の積和演算c_imag×x_real[m]+c_real×x_imag[m]の結果であるy_imag[m]とを、前記M個の各々について並列に計算して出力することを特徴とする演算回路。
  6. 請求項の演算回路において、
    前記LUT生成回路と前記M個の分散演算回路との間に設けられ、前記複素数係数Cの実部値c_realおよび虚部値c_imagと前記LUT生成回路によって計算された値d_subおよびd_addとをクロックに同期して保持し、保持した値を前記M個の分散演算回路に出力するLUTラッチ回路をさらに備えることを特徴とする演算回路。
  7. 請求項または記載の演算回路において、
    前記分散演算回路は、
    前記複素数X[m]の実部値x_real[m]および虚部値x_imag[m]のビット位置毎に設けられ、値0、c_real、-c_imag、d_subからなる要素値の中から、前記実部値x_real[m]および前記虚部値x_imag[m]のうち自回路に対応するビット位置の2個の値に対応する1個の要素値をビット位置毎に取得する複数の第1の索引回路と、
    前記複数の第1の索引回路によって取得された要素値を、それぞれ2(l-1)倍(lはビット位置の番号)することをビット位置毎に行う複数の第1の倍数演算回路と、
    前記複数の第1の倍数演算回路によって計算された値を合算した結果を前記実部の積和演算の値y_real[m]として出力する第1の合算回路と、
    前記複素数X[m]の実部値x_real[m]および虚部値x_imag[m]のビット位置毎に設けられ、値0、c_imag、c_real、d_addからなる要素値の中から、前記実部値x_real[m]および前記虚部値x_imag[m]のうち自回路に対応するビット位置の2個の値に対応する1個の要素値をビット位置毎に取得する複数の第2の索引回路と、
    前記複数の第2の索引回路によって取得された要素値を、それぞれ2(l-1)倍することをビット位置毎に行う複数の第2の倍数演算回路と、
    前記複数の第2の倍数演算回路によって計算された値を合算した結果を前記虚部の積和演算の値y_imag[m]として出力する第2の合算回路とから構成されることを特徴とする演算回路。
JP2018000451A 2018-01-05 2018-01-05 演算回路 Active JP6995629B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2018000451A JP6995629B2 (ja) 2018-01-05 2018-01-05 演算回路
US16/959,968 US11360741B2 (en) 2018-01-05 2018-12-18 Arithmetic circuit
PCT/JP2018/046495 WO2019135354A1 (ja) 2018-01-05 2018-12-18 演算回路
CN201880085302.XA CN111615700B (zh) 2018-01-05 2018-12-18 运算电路
US17/643,507 US20220100472A1 (en) 2018-01-05 2021-12-09 Arithmetic circuit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018000451A JP6995629B2 (ja) 2018-01-05 2018-01-05 演算回路

Publications (3)

Publication Number Publication Date
JP2019121171A JP2019121171A (ja) 2019-07-22
JP2019121171A5 JP2019121171A5 (ja) 2021-02-04
JP6995629B2 true JP6995629B2 (ja) 2022-01-14

Family

ID=67144123

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018000451A Active JP6995629B2 (ja) 2018-01-05 2018-01-05 演算回路

Country Status (4)

Country Link
US (2) US11360741B2 (ja)
JP (1) JP6995629B2 (ja)
CN (1) CN111615700B (ja)
WO (1) WO2019135354A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6863907B2 (ja) * 2018-01-05 2021-04-21 日本電信電話株式会社 演算回路

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004171263A (ja) 2002-11-20 2004-06-17 Sharp Corp 演算装置
JP2004265346A (ja) 2003-03-04 2004-09-24 Sony Corp 離散コサイン変換装置および逆離散コサイン変換装置
US20050201457A1 (en) 2004-03-10 2005-09-15 Allred Daniel J. Distributed arithmetic adaptive filter and method
JP2012169926A (ja) 2011-02-15 2012-09-06 Fujitsu Ltd Crc演算回路

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226002A (en) * 1991-06-28 1993-07-06 Industrial Technology Research Institute Matrix multiplier circuit
JP3473647B2 (ja) * 1994-12-28 2003-12-08 Necインフロンティア株式会社 エコーサプレッサ回路
JPH0981541A (ja) * 1995-09-12 1997-03-28 Matsushita Electric Ind Co Ltd 累算器
TW302578B (en) * 1996-04-10 1997-04-11 United Microelectronics Corp The digital filter bank structure and its application method
JP2002503002A (ja) * 1998-02-05 2002-01-29 インテリックス アクティーゼルスカブ N−タプル又はramベースのニューラルネットワーク分類システム及び方法
JP3139466B2 (ja) * 1998-08-28 2001-02-26 日本電気株式会社 乗算器及び積和演算器
JP2000132539A (ja) * 1998-10-28 2000-05-12 Matsushita Electric Ind Co Ltd 演算装置
US6477203B1 (en) * 1998-10-30 2002-11-05 Agilent Technologies, Inc. Signal processing distributed arithmetic architecture
US6989843B2 (en) * 2000-06-29 2006-01-24 Sun Microsystems, Inc. Graphics system with an improved filtering adder tree
JP3820144B2 (ja) * 2001-12-12 2006-09-13 シャープ株式会社 信号評価装置および信号評価方法
US7007052B2 (en) * 2001-10-30 2006-02-28 Texas Instruments Incorporated Efficient real-time computation
JP4129618B2 (ja) * 2002-05-22 2008-08-06 日本電気株式会社 演算装置及び方法
US6982662B2 (en) * 2003-03-06 2006-01-03 Texas Instruments Incorporated Method and apparatus for efficient conversion of signals using look-up table
JP4086868B2 (ja) * 2005-09-06 2008-05-14 Necエレクトロニクス株式会社 表示装置、コントローラドライバ、近似演算補正回路、及び表示パネルの駆動方法
US8593483B2 (en) * 2009-10-20 2013-11-26 Apple Inc. Temporal filtering techniques for image signal processing
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
US20130185345A1 (en) * 2012-01-16 2013-07-18 Designart Networks Ltd Algebraic processor
CN102681815B (zh) * 2012-05-11 2016-03-16 深圳市清友能源技术有限公司 用加法器树状结构的有符号乘累加算法的方法
KR101551641B1 (ko) * 2015-04-02 2015-09-08 한석진 비선형 데이터의 평균 계산 장치
US9489482B1 (en) * 2015-06-15 2016-11-08 International Business Machines Corporation Reliability-optimized selective voltage binning
KR102359265B1 (ko) * 2015-09-18 2022-02-07 삼성전자주식회사 프로세싱 장치 및 프로세싱 장치에서 연산을 수행하는 방법
JP6863907B2 (ja) * 2018-01-05 2021-04-21 日本電信電話株式会社 演算回路

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004171263A (ja) 2002-11-20 2004-06-17 Sharp Corp 演算装置
JP2004265346A (ja) 2003-03-04 2004-09-24 Sony Corp 離散コサイン変換装置および逆離散コサイン変換装置
US20050201457A1 (en) 2004-03-10 2005-09-15 Allred Daniel J. Distributed arithmetic adaptive filter and method
JP2012169926A (ja) 2011-02-15 2012-09-06 Fujitsu Ltd Crc演算回路

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
易 茹,外3名,"遅延デジタルフィルタの分散型積和演算回路を用いたFPGA実装の検討",第2回電気学会東京支部栃木支所・群馬支所合同研究発表会,日本,電気学会東京支部栃木支所・群馬支所,2012年02月29日,第18-20頁,第25-26頁,[検索日 2019.03.19]インターネット:<URL:https://kobaweb.ei.st.gunma-u.ac.jp/news/pdf/2011/ETT-11-07ekijo.pdf>

Also Published As

Publication number Publication date
WO2019135354A1 (ja) 2019-07-11
US20210064342A1 (en) 2021-03-04
JP2019121171A (ja) 2019-07-22
CN111615700A (zh) 2020-09-01
US20220100472A1 (en) 2022-03-31
CN111615700B (zh) 2023-12-08
US11360741B2 (en) 2022-06-14

Similar Documents

Publication Publication Date Title
JP3584053B2 (ja) 複合オペランド内の多ビット要素を選択するためのマスク
US4635292A (en) Image processor
Chervyakov et al. An approximate method for comparing modular numbers and its application to the division of numbers in residue number systems
US5255216A (en) Reduced hardware look up table multiplier
US9785407B2 (en) Data processing apparatus having combined divide-square root circuitry
Taylor Compatible hardware for division and square root
Mu et al. Scalable and conflict-free NTT hardware accelerator design: Methodology, proof, and implementation
JP6995629B2 (ja) 演算回路
US4293922A (en) Device for multiplying binary numbers
Balajishanmugam High-performance computing based on residue number system: a review
US3290493A (en) Truncated parallel multiplication
EP0474246A2 (en) Image signal processor
US20040083255A1 (en) Apparatus and method for performing operations implemented by iterative execution of a recurrence equation
US20220334799A1 (en) Method of Performing Hardware Efficient Unbiased Rounding of a Number
JP3660075B2 (ja) 除算装置
RU2559771C2 (ru) Устройство для основного деления модулярных чисел
CN111630509B (zh) 执行积和运算的运算电路
Shawl et al. Implementation of Area and Power efficient components of a MAC unit for DSP Processors
JP4223819B2 (ja) べき乗剰余演算装置及びそのプログラム
RU2804380C1 (ru) Конвейерный вычислитель
JP4850884B2 (ja) べき乗剰余演算器
Hernandez et al. A combined VLSI architecture for nonlinear image processing filters
JP7078129B2 (ja) 演算処理装置及び演算処理装置の制御方法
US11132296B1 (en) Linear interpolator of tabulated functions
JP2803442B2 (ja) 開平装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20180105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201218

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210907

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211101

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211214

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211215

R150 Certificate of patent or registration of utility model

Ref document number: 6995629

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350