WO2019135354A1 - 演算回路 - Google Patents

演算回路 Download PDF

Info

Publication number
WO2019135354A1
WO2019135354A1 PCT/JP2018/046495 JP2018046495W WO2019135354A1 WO 2019135354 A1 WO2019135354 A1 WO 2019135354A1 JP 2018046495 W JP2018046495 W JP 2018046495W WO 2019135354 A1 WO2019135354 A1 WO 2019135354A1
Authority
WO
WIPO (PCT)
Prior art keywords
circuit
value
real
lut
values
Prior art date
Application number
PCT/JP2018/046495
Other languages
English (en)
French (fr)
Inventor
健治 川合
亮 粟田
和人 武井
公昭 飯塚
Original Assignee
Nttエレクトロニクス株式会社
日本電信電話株式会社
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エレクトロニクス株式会社, 日本電信電話株式会社 filed Critical Nttエレクトロニクス株式会社
Priority to CN201880085302.XA priority Critical patent/CN111615700B/zh
Priority to US16/959,968 priority patent/US11360741B2/en
Publication of WO2019135354A1 publication Critical patent/WO2019135354A1/ja
Priority to US17/643,507 priority patent/US20220100472A1/en

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

Definitions

  • the present invention relates to an arithmetic circuit in digital signal processing, and more particularly to an arithmetic circuit that performs product-sum operation.
  • the main operation in digital signal processing is a product-sum operation in which data of digital signals is multiplied by coefficients and summed.
  • Distributed arithmetic is known as a method for efficiently performing product-sum operations (see Non-Patent Document 1).
  • FIG. 10 shows a configuration example of a product-sum operation circuit adopting distributed operation
  • FIG. 11 shows a timing chart of the operation of the product-sum operation circuit of FIG.
  • the coefficient is added to each data x [n]
  • It is an arithmetic circuit that performs a product-sum operation in which multiplication is performed by multiplying c [n], that is, n n 1, ..., N (c [n] x x [n]).
  • LUT 1001 Look-Up Table, hereinafter referred to as LUT
  • LUT 1001 Only Memory
  • the LUT 1001 of FIG. 10 includes memory areas of 2 N addresses.
  • MSB Most Significant Bit
  • LSB east Significant Bit
  • each selector s [n, 2] to s [n, L] receives each bit x [n] of data x [n] according to a data valid signal indicating validity when data x [n] is input.
  • n Select a value from [2] to x [n] [L].
  • flip-flop xr [n, 1] takes in the value of the bit x [n] [1]
  • the flip-flop xr [n, 2 ] To xr [n, L] take in the values of bits x [n] [2] to x [n] [L] output from the selectors s [n, 2] to s [n, L], respectively. Therefore, flip-flop xr [n, 1] takes in x [n] [1] which is the LSB of data x [n], and flip-flop xr [n, L] takes x [] which is the MSB of data x [n]. n] Import [L].
  • each selector s [n, 2] to s [n, L] is processed by the flip-flops xr [n, 1] to xr [n, L- of the previous stage. Select the value output from 1]. Therefore, for each input of a clock pulse, flip-flops xr [n, 2] to xr [n, L] are held by flip-flops xr [n, 1] to xr [n, L-1] of the previous stage. It becomes the operation of taking in the value.
  • the LUT 1001 When the read address a is input, the LUT 1001 outputs the value LUT [a] stored in the memory area of the read address a.
  • the output value of the LUT 1001 and the output value of the doubling circuit 1003 that doubles the accumulated value held by the accumulated value register 1002 are input to the addition circuit 1004.
  • the addition circuit 1004 adds the output value of the LUT 1001 and the output value of the doubling circuit 1003 and outputs the result as an addition value y.
  • the accumulated value register 1002 holds the added value y as the updated accumulated value for each input of the clock pulse. Note that the value held by the accumulated value register 1002 is reset to 0 when the data valid signal becomes valid, so its initial value (the value at the time when the first clock pulse is input) is 0. .
  • the doubling circuit 1003 that doubles the accumulated value held by the accumulated value register 1002 can be realized by a wiring that shifts the accumulated value expressed in binary to the left by one bit, processing for doubling the accumulated value is performed. Does not require logic gates. Therefore, no multiplication circuit is used in the product-sum operation circuit of FIG.
  • the adder circuit 1004 outputs 0 to the LUT 1001 because the cumulative value held in the cumulative value register 1002 is 0.
  • the addition circuit 1004 sets a value obtained by adding the output value of the LUT 1001 and the output value of the doubling circuit 1003 as an addition value y by the input of the second clock pulse from the time when the data valid signal becomes valid.
  • the product-sum operation circuit adopting the distributed operation includes (L ⁇ N) flip flops for shifting the input value one bit at a time, and a selector for selecting whether the input value is taken into the flip flop or shifted.
  • the conventional product-sum operation circuit adopting the above dispersion operation does not require a multiplication circuit, but after input of the data x [n], the value stored in the LUT for each bit position of the data x [n] Since it is necessary to repeat the search of the value stored in the LUT as many times as the bit width L of the data x [n], the throughput is low (from the data input to the next data input becomes possible). Time was long).
  • the present invention has been made to solve the above-described problems, and an object of the present invention is to provide an arithmetic circuit capable of reducing the circuit size and power consumption and improving the throughput of the arithmetic operation.
  • M is an integer of 2 or more
  • N is an integer of 2 or more
  • a LUT generation circuit configured to output a value calculated for each set of the N coefficients c [n] divided into two each, and N of the data set X [m]
  • the value y [m] of the product-sum operation which is the result of multiplying each of the N coefficients c [n] by each of the data x [m, n] of the above, and summing, is calculated in parallel for each of the M sets.
  • each distributed arithmetic circuit divides N data x [m, n] corresponding to its own circuit into two The two data x [m, n] based on the value obtained by dividing the N coefficients c [n] into two each and the value calculated by the LUT generation circuit.
  • a plurality of binomies configured to calculate in parallel and output the value of the binomial product-sum operation obtained by multiplying and summing these coefficients c [n] respectively, for each of the two groups
  • a dispersion operation circuit and a binomial dispersion operation result summing circuit configured to output a result obtained by adding up values calculated by the plurality of binomial dispersion operation circuits as the value y [m] of the product-sum operation It is characterized by being configured.
  • the complex number coefficient C is applied to each of data corresponding to the self circuit among the complex number X [m], and the LUT generation circuit configured to calculate the value d_add of the sum of the real part value c_real and the imaginary part value c_imag
  • the complex value Y [m] which is the result of multiplication and addition, is And M distributed
  • the arithmetic circuit of the present invention does not repeat the LUT search while shifting the target bit position in the distributed operation of searching the LUT for each bit position of data, but performs parallel processing on all bit positions. Throughput can be improved. Further, since the arithmetic circuit of the present invention does not use the memory circuit for the LUT, the present invention is applied to product-sum operations in which the coefficient c [n] or the complex coefficient C fluctuates with the passage of time. Since updating can be performed simultaneously for all addresses instead of updating the addresses one by one in the LUT, throughput can be increased even if frequent updating of the LUT caused by fluctuation of the coefficient c [n] or the complex coefficient C occurs. It does not decline.
  • the arithmetic circuit of the present invention does not speed up by copying one LUT to a plurality of memory circuits, but commonizes circuits that generate LUT element values as a LUT generation circuit, and searches for the LUT.
  • a redundant circuit a copy of a circuit holding the same value
  • the circuit scale does not increase.
  • the problem that throughput is low when compared with the product-sum operation circuit using the multiplication circuit which the product-sum operation circuit adopting the conventional distributed operation has, and a circuit that holds the same value Can be solved in parallel to increase the circuit scale.
  • the multiplication operation becomes unnecessary due to the distributed operation, the switching power during multiplication can be suppressed, so that the circuit size and the power consumption can be significantly reduced.
  • FIG. 1 is a block diagram showing the configuration of an arithmetic circuit according to a first embodiment of the present invention.
  • FIG. 2 is a block diagram showing the configuration of the distributed arithmetic circuit according to the first embodiment of the present invention.
  • FIG. 3 is a block diagram showing the configuration of a two-term distributed arithmetic circuit according to the first embodiment of the present invention.
  • FIG. 4 is a diagram for explaining the operation of the LUT index circuit in the first embodiment of the present invention.
  • FIG. 5 is a block diagram showing the configuration of an arithmetic circuit according to a second embodiment of the present invention.
  • FIG. 6 is a block diagram showing the configuration of an arithmetic circuit according to a third embodiment of the present invention.
  • FIG. 1 is a block diagram showing the configuration of an arithmetic circuit according to a first embodiment of the present invention.
  • FIG. 2 is a block diagram showing the configuration of the distributed arithmetic circuit according to the first embodiment of the present invention.
  • FIG. 7 is a block diagram showing the configuration of a distributed arithmetic circuit according to a third example of the present invention.
  • FIG. 8 is a diagram for explaining the operations of the real part calculation LUT index circuit and the imaginary part calculation LUT index circuit in the third embodiment of the present invention.
  • FIG. 9 is a block diagram showing the configuration of an arithmetic circuit according to the fourth embodiment of the present invention.
  • FIG. 10 is a block diagram showing a configuration example of a conventional product-sum operation circuit.
  • FIG. 11 is a timing chart for explaining the operation of the conventional product-sum operation circuit.
  • FIG. 12 is a diagram for explaining a look-up table of a conventional product-sum operation circuit.
  • FIG. 13 is a block diagram showing a configuration example of a shift register of a conventional product-sum operation circuit.
  • FIG. 1 is a block diagram showing the configuration of an arithmetic circuit according to a first embodiment of the present invention.
  • the figure is
  • the arithmetic circuit of FIG. 1 includes one LUT generation circuit 1 and M (M is an integer of 2 or more) distributed arithmetic circuits 2-1 to 2-M.
  • the binomial distributed arithmetic circuit 20m-n ' forms a LUT in which the values 0, c [2 ⁇ n'-1], c [2 ⁇ n'], d [n '] are the numerical values of the respective elements, and
  • the result of product-sum operation c [2 ⁇ n′-1] ⁇ x [m, 2 ⁇ n′ ⁇ 1] + c [2 n ′] ⁇ x [m, 2 ⁇ n ′] is calculated by dispersion operation using LUT. Acquire and output as y '[m, n'].
  • the above description of the dispersion operation circuit 2-m is the case where N is an even number, and in the case where N is an odd number, c [N] ⁇ x [m, N] is calculated as shown in FIG.
  • An auxiliary multiplication circuit 22m is added which outputs the result as y '[m, N' + 1].
  • the binomial distributed arithmetic circuit 20m-n 'shown in FIG. 3 includes L LUT index circuits 200m-n'-l (selection circuits), a sign inverting circuit 202, and L multiple arithmetic circuits 203m-n'. 1 and a summing circuit 204.
  • the LUT index circuit 200m-n'-l is a bit x [m, x at the bit position l corresponding to its own circuit among the data x [m, 2 ⁇ n'-1] and x [m, 2 ⁇ n '].
  • One of four elements of the LUT is selected based on 2 ⁇ n′-1] [l] and x [m, 2 ⁇ n ′] [l], and the selected element value is Obtain as n'-l.
  • each value of bits x [m, 2 ⁇ n′ ⁇ 1] [l] and x [m, 2 ⁇ n ′] [l] and the element value LUT # m of the LUT selected at that time are shown.
  • the relationship with n'-l is shown.
  • the relationship between the addresses and the stored values corresponding to the respective addresses shown in FIG. 12 in the case of (a two-term product-sum operation) is the same.
  • the address a [0] in FIG. 12 corresponds to the bit x [m, 2 ⁇ n′-1] [l] in FIG. 4 and the address a [1] in FIG. 12 corresponds to the bit x [m, 12 corresponds to 2 ⁇ n ′] [l], c [0] in FIG. 12 corresponds to c [2 ⁇ n′-1] in FIG. 4, and c [1] in FIG. 12 corresponds to c [2 in FIG. Corresponds to x n '].
  • the element value of the LUT selected for each bit position l (l 1,..., L) by the LUT index circuit 200m-n'-l in the binary term distributed arithmetic circuit 20m-n 'shown in FIG.
  • the LUT # m n'-l is multiplied by 2 (l-1) by the multiple operation circuit 203 m n'-l, respectively.
  • the summing circuit 204 sums the result of summing the values calculated by the L multiple arithmetic circuits 203m-n'-l and calculates the product-sum operation c [2 x n'-1] x x [m, 2 x n'- 1] It outputs as y '[m, n'] which is a result of + c [2n '] x x [m, 2 x n'].
  • L clock pulses are processed by summing the LUT output value for bit position 1 with the value obtained by doubling the accumulated value by the l-th clock pulse input. It was possible to obtain the result of the product-sum operation by the input.
  • the sign inversion of the selected element value LUT # m-n'-L is performed at the bit position L of the MSB.
  • the element value LUT # m-n'-L is also applied to the bit position L of the MSB as in the other bit positions. It may be multiplied by 2 (L-1) by the multiple operation circuit 203m-n'-L as it is.
  • the process of multiplying the selected element value LUT # m n'-l by 2 (l-1) for the bit position l described above is the element value LUT # m n'-l expressed in binary notation. Can be realized by shifting (l-1) bits to the left. Therefore, it is not necessary to use a multiplication circuit for the L multiple operation circuits 203m-n'-l, which can be realized by a simple circuit.
  • the product-sum operation circuit of FIG. 10 realizes the multiplication of N numerical values of data and N coefficients and the product-sum operation of N terms, which is the summation thereof, by distributed arithmetic.
  • the arithmetic circuit of this embodiment divides the product-sum operation of N terms into the product-sum operation of N 'two terms and realizes the product-sum operations of each two terms by parallel operations. By summing the results, the same result as the product-sum operation of N terms is obtained. The effect due to the difference in the above configuration will be described below.
  • the product-sum operation circuit of FIG. 10 requires one LUT 1001 having 2 N elements in order to realize an N-term product-sum operation by distributed operation.
  • a memory circuit having 2 N addresses is used for the LUT 1001 .
  • the LUT 1001 implemented by the memory circuit generally has a smaller storage element area per bit compared to the LUT circuit implemented by the flip flop and the logic gate, and is stored in each of a large number of addresses.
  • the processing of reading out the value stored in one address designated from the above value can be efficiently realized (in a circuit of high speed, low power consumption and small area). Due to this feature, implementing the LUT 1001 of FIG. 10 having a large number of elements with a memory circuit is faster and consumes less power and has a smaller area than implementing it with flip-flops or logic gates.
  • N ′ N / 2
  • LUT generation circuit 1 and LUT index circuit 200 m-n ′ The number of numerical values to be held in -l) is greatly reduced, and the circuit size does not pose a problem even when the LUT is formed by flip-flops or logic gates instead of memory circuits.
  • the number of numerical values to be held can be reduced from 255 to 12 and therefore the circuit without using a memory circuit for LUT (LUT generation circuit 1 and LUT index circuit 200 m-n'-l) It can be configured such that the size is not a problem.
  • LUT generation circuit 1 and LUT index circuit 200 m-n'-l LUT generation circuit 1 and LUT index circuit 200 m-n'-l
  • it is necessary to add a binomial dispersion operation result summing circuit 21m for summing N '( N / 2) binomial product-sum operation results by dividing an N-term product-sum operation into a binomial product-sum operation
  • the circuit scale of the binomial distributed operation result summing circuit 21m is sufficiently small, which does not cause a problem.
  • the N-term product-sum operation is divided into the two-term product-sum operation to be held in the LUT (LUT generation circuit 1 and LUT index circuit 200 m-n'-l).
  • the number of element values can be significantly reduced, but also the total scale of the LUT index circuit 200m-n'-l can be significantly reduced, as compared to the case of division into three-term product-sum operations. Indicated by.
  • N / 2 pieces of LUT index circuits 200 m-n'-l which are 4: 1 selectors are required.
  • N / 3 LUT lookup circuits, which are 8: 1 selectors are required.
  • the 4: 1 selector can be composed of three 2: 1 selectors
  • the 8: 1 selector can be composed of seven 2: 1 selectors. Therefore, in the case of dividing an N-term product-sum operation into a binomial product-sum operation, in the case of dividing into a 3-term product-sum operation, while (N ⁇ 1.5) 2: 1 selectors are required. Will require (N ⁇ 7/3) 2: 1 selectors.
  • the bit width of the element value of the LUT is 1 bit width of the coefficients c [2 ⁇ n′ ⁇ 1] and c [2 ⁇ n ′].
  • the bit value of the element value of the LUT is a coefficient because the element value of the LUT includes the sum of three coefficients. Bit width of +2 bits. For this reason, the number of 2: 1 selectors used in the LUT index circuit and the bit width of the 2: 1 selector are more for three-term product-sum operations than when N-term product-sum operations are divided into two-term product-sum operations. The division is larger. As described above, the arithmetic circuit of this embodiment has an effect of reducing the total size of the LUT index circuit 200m-n'-l by dividing the N-term product-sum operation into the binomial product-sum operation.
  • the LUT (LUT generation circuit 1 and LUT index circuit 200 m-n'-l) is not a memory circuit, but a circuit that generates element values in advance and a logic gate such as a selector. And the circuit to be selected. If the LUT is a memory circuit as in the prior art, when attempting to increase throughput by parallelization in which the LUT is searched simultaneously for all bit positions of data, or parallelization of the product-sum operation circuit itself, every bit position of data For each product-sum operation circuit, it is necessary to provide a plurality of memory circuits in which the LUT is copied.
  • a memory circuit is not used for the LUT, so a circuit (LUT generation circuit 1) that generates and holds each element value of the LUT in advance and a circuit (LUT index circuit 200m that selects the element value) It can be divided into -n'-l), and only the LUT index circuit 200m-n'-l is parallelized without parallelizing the LUT generation circuit 1.
  • This makes it possible to prevent redundant circuit configuration, that is, parallelization (copying) of a circuit that holds each element value of the LUT, and it is possible to suppress an increase in circuit scale accompanying parallelization.
  • the calculation result can not be obtained until input of the same number of clock pulses as the bit width of the input data is completed. Therefore, the time required from the data input time to the output of the result is a time proportional to the bit width of the input data.
  • the throughput is compared with the product-sum operation circuit of FIG. 10 which requires the calculation time proportional to the bit width. Can be improved.
  • the arithmetic circuit of this embodiment distributes each element value of the LUT from the LUT generation circuit 1 to the LUT (LUT generation circuit 1 and LUT index circuit 200 m-n'-l) without using a memory circuit. Is selected from among the element values in the distributed binomial computation circuit 20m-n '. Therefore, when the present embodiment is applied to a product-sum operation in which the coefficient c [n] fluctuates with the passage of time, the change of the coefficient c [n] can be immediately reflected in the LUT.
  • FIG. 5 is a block diagram showing the configuration of an arithmetic circuit according to a second embodiment of the present invention.
  • the same reference numerals as in FIG. 1 denote the same parts in FIG.
  • This embodiment shows a configuration for improving the throughput of the arithmetic circuit shown in the first embodiment without increasing the circuit size and the power consumption.
  • the figure is
  • the arithmetic circuit of FIG. 5 includes one LUT generation circuit 1, one LUT latch circuit 3, and M (M is an integer of 2 or more) distributed arithmetic circuits 2-1 to 2-M. .
  • the value d [n ′] is output to the LUT latch circuit 3 together with the coefficient c [n].
  • the LUT latch circuit 3 can be realized by a flip flop that holds the value of each bit of the coefficient c [n] and the value d [n '] in synchronization with the clock.
  • the method of calculating the value y [m] is the same as the method described in the first embodiment.
  • the upper limit of the clock frequency of the system including the arithmetic circuit is restricted by the total time with the dispersion operation time Td which is the processing time to generate the numerical value y [m] corresponding to ⁇ , that is, (Td_LUT + Td).
  • Td the processing time to generate the numerical value y [m] corresponding to ⁇
  • Td_LUT the generation time
  • the upper limit of the clock frequency of a system employing the arithmetic circuit of FIG. 1 is 1 / (Td_LUT + Td)
  • the upper limit of the clock frequency of a system employing the arithmetic circuit of FIG. 5 is 1 / Td_LUT.
  • 1 / Td whichever is smaller. That is, the arithmetic circuit of FIG. 5 operates faster than the arithmetic circuit of FIG.
  • the LUT (LUT generation circuit 1 and LUT index circuit 200 m-n ') are configured so that the memory circuit does not have to configure the LUT.
  • the number of elements in -l) has been reduced.
  • the number of elements of the LUT 1001 is 2 N ⁇ 1, because the N-term product-sum operation is subjected to dispersion operation using one LUT 1001, but this embodiment or the first embodiment
  • the number of elements is reduced to (N ⁇ 1.5) by dividing the N-term product-sum operation into N / 2 two-term product-sum operations.
  • N 8
  • the number of elements can be reduced from 255 to 12.
  • the number of flip-flops to be added with the pipeline configuration can be significantly reduced as compared with the case where the pipeline configuration is based on the product-sum operation circuit of FIG. Throughput can be improved without increasing circuit size and power consumption.
  • the circuit size and power consumption increase significantly with the pipeline configuration, but as described in this embodiment, the distributed operation circuit in M parallel with the LUT generation circuit 1
  • the arithmetic circuit of this embodiment can improve the throughput without increasing the circuit size and power consumption.
  • FIG. 6 is a block diagram showing the configuration of an arithmetic circuit according to a third embodiment of the present invention.
  • the figure is
  • Each of the M complex number values Y [m] corresponds to (C ⁇ X [m]). That is, the real part value y_real [m] corresponds to c_real x x real [m]-c imag x x imag [m].
  • the imaginary part value y_imag [m] corresponds to c_imag ⁇ x_real [m] + c_real ⁇ x_imag [m].
  • the arithmetic circuit of FIG. 6 includes one LUT generation circuit 1a and M (M is an integer of 2 or more) dispersion arithmetic circuits 2a-1 to 2a-M.
  • the LUT generation circuit 1a receives the real part value c_real and the imaginary part value c_imag of the complex number coefficient C, and the value d_sub corresponding to the difference c_real-c_imag between the real part value c_real and the imaginary part value c_imag and the real part value c_real
  • the value d_add corresponding to the sum c_real + c_imag of the imaginary part value c_imag is calculated, and the real part value c_real and the imaginary part value c_imag are output to the dispersion arithmetic circuits 2a-1 to 2a-M together with the values d_sub and d_add.
  • the dispersion calculation circuit 2a-m is for real part calculation LUT having the value 0, c_real, -c_imag, d_sub as the numerical value of each element, and imaginary part calculation using the value 0, c_imag, c_real, d_add as the numerical value of each element Configure LUT and obtain the result of product-sum operation of real part c_real x x real [m]-c _ imag x x imag [m] by dispersion operation using LUT for real part calculation and output as y_real [m]
  • the result of product-sum operation of imaginary part c_imag ⁇ x_real [m] + c_real ⁇ x_imag [m] is acquired by dispersion operation using LUT for imaginary part operation, and is output as y_imag [m].
  • the distributed arithmetic circuit 2a-m shown in FIG. 7 includes L real part operation LUT index circuits 205m-l (real part operation selection circuits), sign inverting circuits 206 and 207, and L multiple operation circuits. 208m-1, addition circuit 209, L LUT lookup circuits for imaginary part calculation 210m-1 (imaginary part selection circuit), sign inverting circuit 211, L multiple arithmetic circuits 212m-1 It comprises the summing circuit 213.
  • the real part operation LUT index circuit 205m-l is a bit x_real [m] [l], x_imag [m] [l] in the bit position l corresponding to its own circuit among the data x_real [m] and x_imag [m]. Then, one of the four element values of the real part operation LUT, that is, the value 0, c_real, -c_imag, and d_sub is acquired based on
  • the LUT indexing circuit 210m-1 for imaginary part calculation is the bit x_real [m] [l], x_imag [m] [l] at the bit position l corresponding to its own circuit among the data x_real [m] and x_imag [m].
  • c_imag, c_real, and d_add is acquired.
  • FIG. 8 shows the relationship between the values of the bits x_real [m] [l] and x_imag [m] [l] and the element values of the real part calculation LUT and the imaginary part calculation LUT selected at that time.
  • N 2 (product of two terms The relationship between the address and the stored value corresponding to each address shown in FIG. 12 in the case of the sum operation) is the same.
  • the address a [0] in FIG. 12 corresponds to the bit x_real [m] [l] in the present embodiment
  • the address a [1] in FIG. 12 corresponds to the bit x_imag [m] [l] in the present embodiment.
  • the coefficient c [0] in FIG. 12 corresponds to c_real in the present embodiment
  • the coefficient c [1] in FIG. 12 corresponds to -c_imag in the present embodiment.
  • the coefficient c [0] in FIG. 12 corresponds to c_imag in this embodiment
  • the coefficient c [1] in FIG. 12 corresponds to c_real in this embodiment. It corresponds.
  • Elements of the real part calculation LUT selected for each bit position l (l 1,..., L) by the real part calculation LUT index circuit 205m-l in the distributed calculation circuit 2a-m shown in FIG.
  • the values are respectively multiplied by 2 (l-1) by the multiple operation circuit 208m-l.
  • the summing circuit 209 sums the values calculated by the L multiple operation circuits 208m-l, and the summing circuit 213 adds the values calculated by the L multiple operation circuits 212m-l.
  • the sign inversion circuit 207 performs sign inversion on the element value selected by the real part calculation LUT index circuit 205m-L. After that, it is multiplied by 2 (L-1) by the multiple operation circuit 208m-L.
  • the sign inverting circuit 211 performs sign inversion on the element value selected by the imaginary part operation LUT index circuit 210m-L, multiple operation is performed. It is multiplied by 2 (L-1) by the circuit 212m-L.
  • the result of the summation performed by the summing circuit 209 for all bit positions is output as y_real [m] which is the real part value of the complex value Y [m] to be output by the arithmetic circuit of this embodiment. Ru. Further, the result of the addition performed by the addition circuit 213 is output as y_imag [m] which is an imaginary part value of the complex value Y [m].
  • the sign inversion of the element value selected by the real part calculation LUT index circuit 205m-L and the element selected by the imaginary part calculation LUT index circuit 210m-L The sign is inverted.
  • the LUT index circuit 205m for real part computation is also applied to the bit position L of the MSB as in the other bit positions.
  • the element value selected by L is multiplied by 2 (L-1) by the multiple operation circuit 208m-L as it is, and the element value selected by the LUT index circuit 210m-L for imaginary part operation is directly multiplied by the multiple operation circuit 212m-L 2 (L-1) times should be multiplied.
  • processing for multiplying the element value selected by the real part operation LUT index circuit 205m-1 and the imaginary part operation LUT index circuit 210m-1 by 2 (l-1) is a binary number. It can be realized by shifting the element value expressed by ⁇ to the left by (l ⁇ 1) bits. Therefore, it is not necessary to use a multiplication circuit for the L multiple operation circuits 208m-1 and the L multiple operation circuits 212m-1 and can be realized by a simple circuit.
  • an LUT (LUT (LUT) of only four element values without division into N-term product-sum operation and binomial product-sum operation Distributed operation can be performed using the generation circuit 1a, the real part calculation LUT index circuit 205m-1 and the imaginary part calculation LUT index circuit 210m-1.
  • the present embodiment utilizes the above-described feature regarding multiplication between complex numbers, and each LUT for obtaining each value of real part and imaginary part of the result of multiplying complex data by coefficients is not a memory circuit, The circuit for generating the element value of the LUT in advance and the circuit for selecting the element value using a logic gate such as a selector. With such a configuration, the same effect as that of the first embodiment can be obtained.
  • a circuit (LUT generation circuit 1a) for generating and holding each element value of LUT in advance and a circuit for selecting each element value of LUT (actually It can be divided into a part operation LUT index circuit 205m-1 and an imaginary part operation LUT index circuit 210m-1), and the real part operation LUT index circuit 205m-1 and the real part operation LUT index circuit 205m-1 without parallelizing the LUT generation circuit 1a.
  • Only the LUT indexing circuit 210m-1 for imaginary part calculation is parallelized. This makes it possible to prevent redundant circuit configuration, that is, parallelization (copying) of a circuit that holds each element value of the LUT, and it is possible to suppress an increase in circuit scale accompanying parallelization.
  • the arithmetic circuit of this embodiment does not divide the LUTs for real part calculation and imaginary part calculation and generate and distribute the element values of each LUT, but does not Of the element values of the calculation LUT and the imaginary part calculation LUT, generation / distribution is made common for c_real which is a common element.
  • c_imag which is an element value of the imaginary part calculation LUT
  • -c_imag is included in the elements of the real part calculation LUT
  • only c_imag is added by the sign inverting circuit 206 on the real part operation LUT index circuit 205m-l side. By reversing the sign, the number of wires in the circuit used for distribution is reduced.
  • the circuit size and power consumption can be reduced as compared with the configuration in which the real part calculation LUT and the imaginary part calculation LUT are generated and distributed completely independently.
  • FIG. 9 is a block diagram showing the configuration of an arithmetic circuit according to a fourth embodiment of the present invention.
  • the same reference numerals as in FIG. 6 denote the same parts in FIG.
  • This embodiment shows a configuration for improving the throughput of the arithmetic circuit shown in the third embodiment without increasing the circuit size and power consumption.
  • Each of the M complex number values Y [m] corresponds to (C ⁇ X [m]). That is, the real part value y_real [m] corresponds to c_real x x real [m]-c imag x x imag [m].
  • the imaginary part value y_imag [m] corresponds to c_imag ⁇ x_real [m] + c_real ⁇ x_imag [m].
  • the arithmetic circuit shown in FIG. 9 includes one LUT generation circuit 1a, one LUT latch circuit 3a, and M (M is an integer of 2 or more) distributed arithmetic circuits 2a-1 to 2a-M. .
  • the LUT generation circuit 1a receives the real part value c_real and the imaginary part value c_imag of the complex number coefficient C, and the value d_sub corresponding to the difference c_real-c_imag between the real part value c_real and the imaginary part value c_imag and the real part value c_real A value d_add corresponding to the sum c_real + c_imag of the imaginary part value c_imag is calculated, and the values d_sub and d_add are output to the LUT latch circuit 3a together with the real part value c_real and the imaginary part value c_imag.
  • the LUT latch circuit 3a receives c_real, c_imag, d_sub, and d_add output from the LUT generation circuit 1a, latches each value of c_real, c_imag, d_sub, and d_add for each clock pulse input, and then performs the next clock. It is a circuit that holds up to the input of a pulse.
  • the LUT latch circuit 3a can be realized by a flip flop that holds the value of each bit of each value of c_real, c_imag, d_sub, and d_add in synchronization with a clock. Then, the LUT latch circuit 3a outputs the held c_real, c_imag, d_sub and d_add to each of the dispersion calculation circuits 2a-1 to 2a-M.
  • the real part value c_real and the imaginary part value c_imag distributed from L and the values d_sub and d_add are input, and the complex coefficient C is multiplied by each of the data corresponding to its own circuit among the complex numbers X [m], and the result is added.
  • the dispersion calculation circuit 2a-m is for real part calculation LUT having the value 0, c_real, -c_imag, d_sub as the numerical value of each element, and imaginary part calculation using the value 0, c_imag, c_real, d_add as the numerical value of each element Configure LUT and obtain the result of product-sum operation of real part c_real x x real [m]-c _ imag x x imag [m] by dispersion operation using LUT for real part calculation and output as y_real [m]
  • the result of product-sum operation of imaginary part c_imag ⁇ x_real [m] + c_real ⁇ x_imag [m] is acquired by dispersion operation using LUT for imaginary part operation, and is output as y_imag [m].
  • the configuration of the distributed arithmetic circuit 2a-m is as described in the third embodiment.
  • generation time Td_LUT which is a processing time for calculating d_sub and d_add from complex coefficient C in LUT generation circuit 1a, and y_real [m] and y_imag [m] in dispersion arithmetic circuit 2a-m.
  • the upper limit of the clock frequency of the system including the arithmetic circuit is restricted by the total time with the distributed operation time Td, which is the processing time to generate H, that is, (Td_LUT + Td).
  • the upper limit of the clock frequency of the system including the operation circuit is restricted by the generation time Td_LUT and the dispersion operation time Td.
  • the upper limit of the clock frequency of a system employing the arithmetic circuit of FIG. 6 is 1 / (Td_LUT + Td)
  • the upper limit of the clock frequency of a system employing the arithmetic circuit of FIG. 9 is 1 / Td_LUT. And 1 / Td, whichever is smaller. That is, the arithmetic circuit of FIG. 9 operates faster than the arithmetic circuit of FIG.
  • flip-flops to be an issue in the pipeline configuration are only flip-flops used in a circuit that holds c_real, c_imag, d_sub, and d_add in synchronization with a clock in the LUT latch circuit 3a.
  • the circuit size and power consumption increase significantly with the pipeline configuration, but as described in the present embodiment, the distributed arithmetic circuit 2a-in parallel with the LUT generation circuit 1a and M parallel
  • the arithmetic circuit of this embodiment can improve the throughput without increasing the circuit size and power consumption. Equipped with
  • the arithmetic circuits described in the first to fourth embodiments can be realized by, for example, an FPGA (Field Programmable Gate Array).
  • FPGA Field Programmable Gate Array
  • the present invention can be applied to arithmetic circuits.

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)

Abstract

演算回路は、係数c[n](n=1,・・・,N)を2個ずつ組み分けしたときの組毎に計算した値を出力するLUT生成回路(1)と、データx[m,n]の組をM組含むデータセットX[m](m=1,・・・,M)のうちデータx[m,n]に係数c[n]をそれぞれ乗じて合算した積和演算の値y[m]を、M組の組毎に並列に計算する分散演算回路(2-m)を備える。分散演算回路(2-m)は、自回路に対応するN個のデータx[m,n]を2個ずつに組み分けした値と係数c[n]を2個ずつに組み分けした値とLUT生成回路(1)によって計算された値に基づいて2項積和演算の値を、2個ずつ組み分けした各組毎に並列に計算する複数の2項分散演算回路と、2項分散演算回路によって計算された値を合算してy[m]として出力する2項分散演算結果合算回路から構成される。

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]を計算して出力する演算回路において、前記N個の係数c[n]を2個ずつに組み分けしたときの組毎に計算した値を出力するように構成されたLUT生成回路と、前記データセットX[m]のうちN個のデータx[m,n]に前記N個の係数c[n]をそれぞれ乗じて合算した結果である前記積和演算の値y[m]を、前記M組の各組毎に並列に計算して出力するように構成されたM個の分散演算回路とを備え、各分散演算回路は、自回路に対応するN個のデータx[m,n]を2個ずつに組み分けした値と前記N個の係数c[n]を2個ずつに組み分けした値と前記LUT生成回路によって計算された値とに基づいて、前記2個のデータx[m,n]に前記2個の係数c[n]をそれぞれ乗じて合算した2項積和演算の値を、前記2個ずつに組み分けした各組毎に並列に計算して出力するように構成された複数の2項分散演算回路と、前記複数の2項分散演算回路によって計算された値を合算した結果を前記積和演算の値y[m]として出力するように構成された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個の各々について並列に計算して出力することを特徴とするものである。
 本発明の演算回路は、データのビット位置毎に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によって2(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によって2(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によって2(L-1)倍すればよい。
 また、上記のビット位置lについて、選択された要素値LUT#m-n’-lを2(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によって2(l-1)倍される。
 同様に、虚部演算用LUT索引回路210m-lによってビット位置l(l=1,・・・,L)毎に選択された虚部演算用LUTの要素値は、それぞれ倍数演算回路212m-lによって2(l-1)倍される。
 合算回路209は、L個の倍数演算回路208m-lによって計算された値を合算し、合算回路213は、L個の倍数演算回路212m-lによって計算された値を合算する。
 ただし、実部値のl=Lのビット位置(データのMSB位置)については、実部演算用LUT索引回路205m-Lによって選択された要素値に対して符号反転回路207によって符号反転が行われた後に、倍数演算回路208m-Lによって2(L-1)倍される。同様に、虚部値のl=Lのビット位置については、虚部演算用LUT索引回路210m-Lによって選択された要素値に対して符号反転回路211によって符号反転が行われた後に、倍数演算回路212m-Lによって2(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によって2(L-1)倍し、虚部演算用LUT索引回路210m-Lによって選択された要素値をそのまま倍数演算回路212m-Lによって2(L-1)倍すればよい。
 また、上記のビット位置lについて、実部演算用LUT索引回路205m-l、虚部演算用LUT索引回路210m-lによって選択された要素値を2(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(Field Programmable Gate Array)によって実現することができる。
 本発明は、演算回路に適用することができる。
 1,2a…LUT生成回路、2-1~2-M,2a-1~2a-M…分散演算回路、3,3a…LUTラッチ回路、20m…2項分散演算回路、21m…2項分散演算結果合算回路、22m…補助乗算回路、200m…LUT索引回路、202,206,207,211…符号反転回路、203m,208m,212m…倍数演算回路、204,209,213…合算回路、205m…実部演算用LUT索引回路、210m…虚部演算用LUT索引回路。

Claims (8)

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

Priority Applications (3)

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

Applications Claiming Priority (2)

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

Related Child Applications (2)

Application Number Title Priority Date Filing Date
US16/959,968 A-371-Of-International US11360741B2 (en) 2018-01-05 2018-12-18 Arithmetic circuit
US17/643,507 Division US20220100472A1 (en) 2018-01-05 2021-12-09 Arithmetic circuit

Publications (1)

Publication Number Publication Date
WO2019135354A1 true WO2019135354A1 (ja) 2019-07-11

Family

ID=67144123

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2018/046495 WO2019135354A1 (ja) 2018-01-05 2018-12-18 演算回路

Country Status (4)

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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2803254C1 (ru) * 2022-12-14 2023-09-11 Федеральное государственное бюджетное военное образовательное учреждение высшего образования "Черноморское высшее военно-морское ордена Красной Звезды училище имени П.С. Нахимова" Министерства обороны Российской Федерации (г. Севастополь) Вероятностное устройство вычисления дисперсии

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
AU756987B2 (en) * 1998-02-05 2003-01-30 Intellix A/S N-tuple or ram based neural network classification system and method
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
YI, RU ET AL.: "Implementation Consideration of Linear-Phase Delay Digital Filter Using Distributed Arithmetic on FPGA", JOINT RESEARCH PRESENTATION OF TOCHIGI AND GUNMA BRANCHES OF THE INSTITUTE OF ELECTRICAL ENGINEERS OF JAPAN, 29 February 2012 (2012-02-29), pages 18 - 20 , 25-26, XP055619872, Retrieved from the Internet <URL:https://kobaweb.ei.st.gunma-u.ac.jp/news/pdf/2011/ETT-11-07ekijo.pdf> [retrieved on 20190319] *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2803254C1 (ru) * 2022-12-14 2023-09-11 Федеральное государственное бюджетное военное образовательное учреждение высшего образования "Черноморское высшее военно-морское ордена Красной Звезды училище имени П.С. Нахимова" Министерства обороны Российской Федерации (г. Севастополь) Вероятностное устройство вычисления дисперсии

Also Published As

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

Similar Documents

Publication Publication Date Title
JP2622896B2 (ja) 除算装置
US5255216A (en) Reduced hardware look up table multiplier
US5798955A (en) High-speed division and square root calculation unit
Vassiliadis et al. A general proof for overlapped multiple-bit scanning multiplications
US20040153490A1 (en) Logic circuit and method for carry and sum generation and method of designing such a logic circuit
US20220100472A1 (en) Arithmetic circuit
CN110858137A (zh) 除以整数常数的浮点除法
JP3003467B2 (ja) 演算装置
US20040083255A1 (en) Apparatus and method for performing operations implemented by iterative execution of a recurrence equation
CN109379191B (zh) 一种基于椭圆曲线基点的点乘运算电路和方法
US5493522A (en) Fast arithmetic modulo divider
JPH05158659A (ja) 乗算器
CN111630509B (zh) 执行积和运算的运算电路
Afsheh et al. An improved reverse converter for moduli set (2 n− 1, 2n, 2 n+ 1)
RU2559771C2 (ru) Устройство для основного деления модулярных чисел
JPH1139289A (ja) 演算回路
Shawl et al. Implementation of Area and Power efficient components of a MAC unit for DSP Processors
JPH056263A (ja) 加算器およびその加算器を用いた絶対値演算回路
JP2019121171A5 (ja)
Myjak et al. Pipelined multipliers for reconfigurable hardware
Zhabin et al. Methods of on-line computation acceleration in systems with direct connection between units
RU2786204C1 (ru) Цифровое сглаживающее устройство
RU2744815C1 (ru) Устройство для перевода чисел из системы остаточных классов и расширения оснований
Huai et al. Efficient architecture for long integer modular multiplication over Solinas prime
ASHER et al. Adaptive booth algorithm for three-integers multiplication for reconfigurable mesh

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 18898668

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 18898668

Country of ref document: EP

Kind code of ref document: A1