本发明涉及一种用于数字信号处理的运算电路,更具体地,涉及一种用于执行乘积和运算的运算电路。
背景技术:
数字信号处理中的主要运算是乘积和运算,用于将数字信号数据乘以系数并将乘积加起来。已知分布式运算作为有效地执行该乘积和运算的方法(参见非专利文献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)是一常数,使用上述分布式运算的运算电路将基于系数c[n](n=1,...,n)计算的值和由诸如rom(只读存储器)的存储电路所形成的查找表(以下称为lut)1001的地址存储在每个地址的存储区域中。当输入数据x[n](n=1,...,n)时,通过基于数据x[n](n=1,...,n)搜索存储在lut1001中的值并将来自lut1001的读出值相加,运算电路可以获得与乘积和运算相同的结果。如上所述,使用分布式运算的乘积和运算电路不需要具有复杂电路配置的乘法电路。
如图12所示,图10所示的lut1001包括具有2n个地址的存储区域。基于系数c[n](n=1,...,n)计算的值被预存储在每个地址的存储区域中。更具体地,存储在地址a中的值lut[a]是在通过用二进制表示法表示地址a所获得的每个位为a[n](n=1,...,n,a=∑n=1,...,n(2n-1×a[n]))时的值∑n=1,...,n(c[n]×a[n])。
当输入数据x[n](n=1,...,n)的每个位x[n][l](l=1,...,l,l是x[n]的位宽,x[n]=∑l=1,...,l(x[n][l]×2l-1)并且数据有效性信号有效时,图10所示的移位寄存器1000-xr[n](n=1,...,n)加载数据x[n]的每个位x[n][l],并且每当此后输入时钟脉冲,则移位寄存器1000-xr[n]从msb(最高有效位)到lsb(最低有效位)依次输出各个位。
将参照图13说明移位寄存器1000-xr[n]的操作。首先,当输入数据x[n]时,选择器x[n,2]至s[n,l]根据表示“有效”的数据有效性信号来选择数据x[n]的位x[n][2]至x[n][l]的值。然后,通过使用紧接其后所输入的时钟脉冲(第一时钟脉冲)作为触发,触发器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][1]作为数据x[n]的lsb,并且触发器xr[n,l]加载x[n][l]作为数据x[n]的msb。
此后,当数据有效性信号取表示“无效”的值时,选择器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],而当输入下一时钟脉冲时,触发器xr[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]所保持的值。因此,a[n]的值为紧接在从数据有效性信号变为有效的定时的第t个(t=1,...,l)时钟脉冲输入之后的x[n][l-t+1]。
当输入上述读出地址a时,lut1001输出存储在读出地址a的存储区域中的值lut[a]。图12所示,lut[a]的值是∑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保持的累加值加倍的加倍电路1003的输出值被输入到加法电路1004。加法电路1004将lut1001和加倍电路1003的输出值相加,并且将结果作为相加值y输出。
每当时钟脉冲被输入时,累加值寄存器1002将相加值y保持为更新的累加值。注意,当数据有效性信号变为有效时,由累加值寄存器1002保持的值被重置为0,因此初始值(当第一时钟脉冲被输入时的值)为0。
用于将由累加值寄存器1002保持的累加值加倍的加倍电路1003由将由二进制数表示的累加值向左移位1位的线来实现,因此对累加值加倍的处理不需要逻辑门。因此,在图10所示的乘积和运算电路中不使用乘法电路。
将说明图10所示的乘积和运算电路输出乘积和运算结果的过程。首先,当第一时钟脉冲紧接在数据有效性信号变为有效之后输入时,由于累加值寄存器1002中保持的累加值为0,所以加法电路1004输出lut1001的输出值作为加法值y。即,紧接在第一时钟脉冲输入之后的加法值y是∑n=1,...,n(c[n]×x[n][l])。
然后,当输入从数据有效性信号变为有效的定时的第二时钟脉冲时,加法电路1004输出通过将lut1001的输出值和加倍电路1003的输出值相加所获得的值作为相加值y。lut1001的输出值为∑n=1,...,n(c[n]×x[n][l-1]),并且保持在累加值寄存器1002中的累加值为∑n=1,...,n(c[n]×x[n][l],因为它是紧接在第一时钟脉冲输入之后的相加值。因此,紧接在第二时钟脉冲被输入之后的相加值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)中的∑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]是二进制补码。即,当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以便仅紧接在输入第一时钟脉冲之后的操作中,执行减法而不是加法,即,以便相对于lut1001的输出值反转符号。然而,在第二脉冲时钟被输入之后,对通过将累加值加倍所获得的值进行加法,并且没有变化。
如上所述,使用分布式运算的乘积和运算电路可以由用于将输入值逐位移位的(l×n)个触发器、用于选择是否将输入值加载到触发器的选择器、形成lut的存储电路、用于通过使用时钟脉冲作为触发来加载并保持累加值的累加值寄存器(数量与累加值的位宽相等的触发器)和一个加法电路(在处理带符号的输入数据时的加法/符合反转电路)实现。这消除了对任何复杂的乘法电路的需要,并且使得可以通过使用相对简单的电路来实现乘积和运算电路。
使用上述分布式运算的常规乘积和运算电路不需要乘法电路,但是在输入数据x[n]之后,需要针对数据x[n]的每个位的位置搜索存储在lut中的值。即,需要重复搜索存储在lut中的值与数据x[n]的位宽l相等的次数。这就带来了吞吐量低的问题(从给定的数据输入到下一数据输入变为可行的定时的时间较长)。
另外,当将图10所示的使用存储电路作为lut的乘积和运算电路应用于系数c[n]的值不是固定的而是变化的乘积和运算时,需要重新计算保持在lut中的值,在系数c[n]的值变化的定时处将重新计算的结果写入lut(通过逐个访问所有地址写入计算结果的处理)。由于在更新lut时必须中断乘积和运算,因此当系数c[n]变化时频繁发生的lut更新会降低吞吐量。
当通过使用数量与数据x[n]的位宽l相等的复制的lut对lut搜索进行并行化来提高使用分布式运算的乘积和运算的速度时,或者当通过使用分布式运算对乘积和运算电路进行并行化来提高吞吐量时,因此即使lut所保持的值相同,也对lut执行不同的搜索操作,因此每个乘积和运算电路必须包括用于lut的存储电路。结果是冗余电路,其中存在存储相同值的大量存储元件,并且电路规模无用地增加。
另外,通过处理实部和虚部的相乘和对相乘结果的相加/相减作为乘积和运算,还可以将采用分布式运算的乘积和运算电路用于复数之间的相乘,这在数字信号处理中经常执行。然而,一些存储值需要两个相同的lut,即,用于计算实部的lut和用于计算虚部的lut。这导致冗余电路,其中存在两个存储相同值的存储元件,并且浪费了电路规模的增大。
相关技术文献
非专利文献
非专利文献1:ruyi,takenoritateiwa,kojiasami,haruokobayashi,"implementationconsiderationoflinear-phasedelaydigitalfilterusingdistributedarithmeticonfpga",the2ndieej,tokyobranch,tochigibranch/gunmabranch,jointforum,2012。
技术实现要素:
本发明要解决的技术问题
为了解决上述问题而做出本发明,并且本发明的目的是提供一种能够减小电路规模和功耗并提高运算吞吐量的运算电路。
解决问题的方案
本发明是一种运算电路,接收包含m(m为不小于2的整数)组的n(n为2或更大的整数)个数据x[m,n](n=1,...,n)和n个系数c[n]在内的数据集x[m](m=1,...,m),并且计算并输出乘积和运算的m个值y[m],所述运算电路包括:lut生成电路,被配置为当所述n个系数c[n]被两两配对时,输出针对每对计算的值;以及m个分布式运算电路,被配置为对于m组中的每一组并行计算和输出所述乘积和运算的值y[m],所述乘积和运算的值y[m]是将所述数据集x[m]的n个数据x[m,n]乘以所述n个系数c[n]且对乘积求和的结果,其中,所述分布式运算电路中的每一个包括:多个二项式分布运算电路,被配置为基于通过将与电路相对应的n个数据x[m,n]进行两两配对所获得的值、通过将所述n个系数c[n]进行两两配对所获得的值和通过所述lut生成电路计算的值来针对所述对中的每对并行计算并输出二项式乘积和运算的值,所述二项式乘积和运算将两个数据x[m,n]乘以两个系数c[n]并对乘积求和;以及二项式分布运算结果求和电路,被配置为输出对由所述多个二项式分布运算电路计算的值求和的结果作为所述乘积和运算的值y[m]。
此外,本发明是一种运算电路,其接收m(m为2或更大的整数)个复数x[m](m=1,...,m)以及复数系数c,所述复数x[m]中的每一个均被划分为实部值x_real[m]和虚部值x_imag[m](m=1,...,m),所述复数系数c被划分为实部值c_real和虚部值c_imag,并且所述运算电路计算并输出m个复数值y[m],所述m个复数值y[m]包含实部乘积和运算的结果和虚部乘积和运算的结果,所述运算电路包括:lut生成电路,被配置为计算所述复数系数c的实部值c_real和虚部值c_imag之间的差的值d_sub、以及所述实部值c_real和所述虚部值c_imag之和的值d_add;以及m个分布式运算电路,被配置为对m个中的每一个并行计算并输出所述复数值y[m],所述复数值y[m]是将所述复数x[m]的与电路对应的每个数据乘以所述复数系数c且将积求和的结果,其中,所述分布式运算电路中的每一个接收所述复数x[m]、所述复数系数c的实部值c_real和虚部值c_imag、以及由所述lut生成电路计算的值d_sub和值d_add,并且针对m中的每一个,并行计算并输出实部的乘积和运算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]。
本发明的效果
本发明的运算电路可以通过对所有位的位置执行并行处理而不是在移位目标位的位置的同时重复lut搜索来提高针对数据的每个位的位置对lut执行搜索的分布式运算的吞吐量。
而且,本发明的运算电路在lut中不使用存储电路。因此,即使将本发明应用于系数c[n]或复数系数c随时间而变化的乘积和运算,lut的地址也不会逐个更新,而是所有地址可以同时被更新。因此,即使由于系数c[n]或复数系数c的变化而发生频繁的lut更新时,吞吐量也不会降低。
另外,本发明的运算电路不通过将一个lut复制到多个存储电路来提高处理速度,而是使用常规lut生成电路作为用于生成lut的元素值的电路,并且仅将分布式运算电路并行化作为用于搜索lut的电路。由于这可以消除冗余电路(保持相同值的电路副本),因此电路规模不会增加。
如上所述,本发明可以解决采用分布式运算的常规乘积和运算电路的问题,即,吞吐量低于使用乘法电路的乘积和运算电路的问题、以及因为保持相同值的电路被并行化而增加电路规模的问题。另外,由于分布式运算消除了对乘法电路的需要,因此本发明能够抑制乘法期间的开关功率。这使得可以大大减小电路规模和功耗。
附图说明
图1是示出根据本发明的第一实施例的运算电路的布置的框图;
图2是示出根据本发明的第一实施例的分布式运算电路的布置的框图;
图3是示出根据本发明的第一实施例的二项式分布运算电路的布置的框图;
图4是用于说明本发明的第一实施例的lut标引电路的操作的视图;
图5是示出根据本发明的第二实施例的运算电路的布置的框图;
图6是示出根据本发明的第三实施例的运算电路的布置的框图;
图7是示出根据本发明的第三实施例的分布式运算电路的布置的框图;
图8是用于说明本发明的第三实施例的实部计算lut标引电路和虚部计算lut标引电路的操作的视图;
图9是示出根据本发明的第四实施例的运算电路的布置的框图;
图10是示出常规乘积和运算电路的配置示例的框图;
图11是用于说明常规乘积和运算电路的操作的时序图;
图12是用于说明常规乘积和运算电路的查找表的视图;并且
图13是示出常规乘积和运算电路的移位寄存器的配置示例的框图。
具体实施方式
[第一实施例]
在下文中将参考附图说明本发明的实施例。图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](m=1,...,n)。注意,数据x[m,n](m=1,...,m,n=1,...,n)是可以取负值的有符号的数值(由二补码的二进制数所表示的数值)。
图1所示的运算电路针对上述输入来计算乘积和运算的m个值y[m](m=1,...,m),并输出值y[m]。从运算电路输出的乘积和运算的每个值y[m](m=1,...,m)是经过以下处理所获得的值,即,等于∑n=1,...,n(c[n]×x[m,n])的值:通过将形成数据集x[m](m=1,...,m)的n个数据x[m,n](n=1,...,n)中的每一个数据乘以系数c[n],并对乘积求和。
图1所示的运算电路包括一个lut生成电路1和m(m是2或更大的整数)个分布式运算电路2-1至2-m。
lut生成电路1接收n个系数c[n](n=1,...,n)作为乘积和运算的系数,并且根据通过将n个系数c[n](n=1,...,n)两两成对所获得的成对的值来计算要用作分布式运算lut的元素的值。然后,lut生成电路1将计算的值与系数c[n]一起分配给分布式运算电路2-1至2-m。
将系数c[n](n=1,...,n)配对的方法必须与以下方法相同:基于在分布式运算电路2-m(m=1,...,m)中执行的分布式运算,将二项式乘积和运算的计算c[p]×x[m,p]+c[q]×x[m,q]中的c[p]和c[q]的配对(p和q中的每一个是1到n范围内的整数,并且p≠q)。
在该实施例中,将说明对系数c[n]进行配对的方法,使得具有连续序数的奇数值与紧接的偶数值成对。因此,在该实施例的配对中,c[2×n'-1]和c[2×n'](n'=1,...,n',n'是n/2或更小的最大整数)属于同一对,如c[1]和c[2]、c[3]和c[4]、...。当n为偶数时,n'的值为n/2,而当n为奇数时,n'的值为(n-1)/2。
注意,本发明不限于这种配对方法,并且系数c[n]的配对方法仅需要与基于在分布式运算电路2-m(m=1,...,m)中执行的分布式运算的二项式乘积和运算中的配对方法相同。
lut生成电路1计算通过将系数c[n](n=1,...,n)配对所获得的值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,...,m)的数据集x[m]、从lut生成电路1分配的系数c[n](n=1,...,n')和由lut生成电路1计算的值d[n'](n'=1,...,n'),并且输出通过将数据集x[m]的与电路相对应的n个数据x[m,n]中的每一个数据乘以系数c[n]并将积求和所获得的值,即,输出等于∑n=1,...,n(c[n]×x[m,n]的值y[m]。
图2示出了分布式运算电路2-m(m=1,...,m)的布置。每个分布式运算电路2-m包括n′个二项式分布运算电路20m-n′(n′=1,...,n′)和二项式分布运算结果求和电路21m。
图2所示的分布式运算电路2-m以与lut生成电路1对系数c[n](n=1,...,n)所执行的配对相同的方式,对输入的数据集x[m]的与电路相对应的n个数据x[m,n]进行配对。
本实施例的lut生成电路1将系数c[n](n=1,...,n)配对,使得具有连续序数的奇数的值与紧接的偶数的值配对。因此,x[m,2×n'-1]和x[m,2×n'](n'=1,...,n',n'是最大整数n/2或更小)同样在通过每个分布式运算电路2-m对n个数据x[m,n]执行的配对中配对。
每个二项式分布运算电路20m-n'(n'=1,...,n')接收与电路相对应的一对数据x[m,2×n'-1]和x[m,2×n']、系数c[n](n=1,...,n)中的与电路相对应的一对系数c[2×n'-1]和c[2×n']和由lut生成电路1计算的值d[n']。
二项式分布运算电路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']。
二项式分布运算结果求和电路21m将从二项式分布运算电路20m-n'所输出的值y'[m,n']求和——即,计算∑n'=1,...,n'(y'[m,n']),并将结果输出为y[m]。
注意,以上对分布式运算电路2-m的说明是n是偶数的情况。当n为奇数时,如图2所示,添加了辅助乘法电路22m,其计算c[n]×x[m,n]并将结果输出为y'[m,n'+1]。
另外,当n是奇数时,二项式分布运算结果求和电路21m对从二项式分布运算电路20m-n′(n′=1,...,n′)所输出的值y′[m,n′](n′=1,...,n′)和从辅助乘法电路22m所输出的值y′[m,n′+1]求和,并将结果输出为y[m]。
图3示出了二项式分布运算电路20m-n′(m=1,...,m,n′=1,...,n′)的布置。令l为给定数据x[m,n](m=1,...,m,n=1,...,n)之一的位宽,x[m,2×n'-1][l](l=1,...,l)是作为二项式分布运算电路20m-n'的输入的数据x[m,2×n'-1]的每一位x[m,2×n'][l](l=1,...,l)是x[m,2×n']的每一位。
图3所示的二项式分布运算电路20m-n'包括l个lut标引电路200m-n'-l(选择电路),符号反相电路202,l个倍数计算电路203m-n'-l以及求和电路204。
二项式分布运算电路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的四个元素之一,并且获得所选元素值作为lut#m-n'-l。
图4示出了位x[m,2×n'-1][l]和x[m,2×n']的每个值与lut的所选元素值lut#m-n′-1之间的关系。位x[m,2×n'-1][l]和x[m,2×n']的每个值与元素值lut#m-n'-l之间的关系与每个地址与对应于该地址的存储值之间的关系相同,如图12对于n=2(二项式乘积和运算)所示。
即,图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所示的二项式分布运算电路20m-n′中,倍数计算电路203m-n′-1将由lut标引电路200m-n′-1为每个位的位置l(l=1,...,l)选择的lut的元素值lut#mn′-1乘以2(l-1)。
求和电路204将由l个倍数计算电路203m-n’-l计算的值的求和结果输出作为y’[m,n’],即,乘积和运算c[2×n'-1]×x[m,2×n'-1]+c[2n']×x[m,2×n']的结果。
然而,在l=l的位的位置(数据的msb位置)中,符号反转电路202将所选元素值lut#m-n'-l的符号反转,并且倍数计算电路203m-n'-l将结果乘以2(l-1)。
在图10所示的常规乘积和运算电路中,通过执行以下处理,可以通过l个输入的时钟脉冲来获得乘积和运算的结果:当输入第l时钟脉冲时,位的位置l中的lut输出值被添加到通过将累加值加倍所获得的值中。
另一方面,在图3所示的二项式分布运算电路20m-n’中,与图10所示的lut1001、累加值寄存器1002、加倍电路1003和加法电路1004等效的处理同时对所有位的位置l(l=1,...,l)执行。这使得可以立即获得乘积和运算的结果,而无需l个输入的时钟脉冲。
注意,在本实施例中,所选元素值lut#m-n'-l的符号在msb的位的位置l中反转。这是因为,数据x[m,n](m=1,...,m,n=1,...,n)是可以取负值的有符号的数值(由二补码的二进制数所表示的数值)。如果数据x[m,n]是限制为0或更大的无符号数值,则如在其他位的位置中,倍数计算电路203m-n'-l可以将元素值lut#m-n'-l直接乘以2(l-1),即使在msb的位的位置l中也是如此。
还要注意,通过将由二进制数表示的元素值lut#m-n'-l向左移位(1-1)位,可以实现将上述位的位置l中的所选元素值lut#m-n'-l乘以2(l-1)的处理。因此,可以通过简单的电路来实现l个倍数计算电路203m-n′-1,而不使用任何乘法电路。
从本实施例的运算电路所输出的m个数值y[m](m=1,...,m)是与乘积和运算的结果∑n=1,...,n(c[n]×x[m,n])相同的值,通过该乘积和运算,形成每个数据集x[m](m=1,...,m)的n个数据x[m,n](n=1,...,n)中的每一个数据乘以n个系数c[n],并对乘积求和。
图10所示的乘积和运算电路实现了n项式乘积和运算,其包括将n个数据和n个系数的数值相乘并对通过分布式运算的积求和。
另一方面,本实施例的运算电路将n项式乘积和运算划分为n'个二项式乘积和运算,通过并行运算来实现每个二项式乘积和运算,并对结果求和,从而获得相同的结果作为n项式乘积和运算。以下将说明通过上述布置之间的差异所获得的效果。
图10所示的乘积和运算电路需要一个包括2n个元素的lut1001,以便通过分布式运算来实现n项式乘积和运算。具有2n个地址的存储电路用作lut1001。在由存储电路所实现的lut1001中,每位存储元件的面积小于由触发器和逻辑门所实现的lut电路的面积。另外,由存储电路所实现的lut电路可以有效地实现以下处理:(通过使用高速低功耗小面积的电路)从在大量地址中的每一个中存储的值中读出指定的一个地址中所存储的值。当通过使用存储电路而不是使用触发器和逻辑门来实现包括图10所示的许多元件的lut1001时,该特征提高了处理速度并且减小了功耗和面积。
然而,在图10所示的乘积和运算电路中,必须针对数据的每个位的位置读取lut1001的存储电路,因此通过数量与数据的位宽相等的存储访问来限制吞吐量。作为减轻该吞吐量限制的措施,存在一种方法:使用数量与数据的位宽相等的存储电路,并将一个lut1001复制到这些存储电路,从而可以同时针对所有位的位置搜索lut。然而,该方法需要大量的存储电路,因此增加了电路面积。
本实施例的运算电路将n项式乘积和运算划分为n'(=n/2)个二项式乘积和运算(binominalproduct-sumarithmetics),从而大大减少了要保持在lut(lut生成电路1和lut标引电路200m-n′-1)中的数值的数量。即使当通过使用触发器和逻辑门而不是存储电路来形成lut时,这种布置也不会引起电路规模的问题。
即,当通过使用一个lut1001通过分布式运算来执行n项式乘积和运算时,lut1001必须保持2n-1个数值(尽管地址数是2n,但是要保持的数值数是2n-1,因为0放置在这些地址之一中,并且不需要在该地址中保持任何数值)。
另一方面,本实施例将n项式乘积和运算划分为n'(=n/2)项乘积和运算,因此使用n'(=n/2)个lut(lut生成电路1和lut标引电路200m-n'-l)用于保持3(=22-1)个数值。因此,仅需要保持(n×1.5)个数值。
例如,当n=8时,可以将要保持的数值的数量从255减少到12,因此即使在不使用存储电路作为lut(lut生成电路1和lut标引电路200m-n'-1)的情况下,也可以获得不会引起电路规模问题的布置。注意,当将n项式乘积和运算划分为二项式乘积和运算时,必须添加用于对n′(=n/2)个二项式乘积和运算结果求和的二项式分布运算结果求和电路21m。然而,二项式分布运算结果求和电路21m的电路规模比形成lut1001的存储电路的电路规模小得多,因此不会出现问题。
如上所述,本实施例的运算电路可以通过将n项式乘积和运算划分为二项式乘积和运算来大大减少要保持在lut(lut生成电路1和lut标引电路200m-n′-1)中的元素值的数量。另外,本实施例的运算电路可以大大减小lut标引电路200m-n′-1的总规模。以下通过与将n项式乘积和运算划分为三项式乘积和运算的情况进行比较来说明。
将n项式乘积和运算划分为二项式乘积和运算时,需要n/2lut标引电路200m-n'-l作为4:1选择器。当将n项式乘积和运算划分为三项式乘积和运算时,需要n/3lut标引电路作为8:1选择器。4:1选择器可以由三个2:1选择器形成,以及8:1选择器可以由七个2:1选择器形成。因此,当将n项式乘积和运算划分为二项式乘积和运算时,(n×1.5)2:1选择器是必需的,以及将n项式乘积和运算划分为三项式乘积和运算时,(n×7/3)2:1选择器是必要的。
此外,当将n项式乘积和运算划分为二项式乘积和运算时,lut的元素值包括两个系数c[2×n'-1]和c[2×n']的总值d[n']。因此,lut的元素值的位宽是系数c[2×n'-1]和c[2×n']+1位的位宽。
另一方面,当将n项式乘积和运算划分为三项式乘积和运算时,lut的元素值包括三个系数的总值,因此lut的元素值的位宽是系数+2位的位宽。因此,用于lut标引电路中的2:1选择器的数量和2:1选择器的位宽度在将n项式乘积和运算划分为三项式乘积和运算时变得比当将n项式乘积和运算划分为二项式乘积和运算时的上述2:1选择器的数量和2:1选择器的位宽度大。因此,本实施例的运算电路通过将n项式乘积和运算划分为二项式乘积和运算,有效地减小了lut标引电路200m-n′-1的总规模。
在本实施例的运算电路中,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'-1),即,lut生成电路1分配lut的元素值,并且已接收到分布式元素值的二项式分布运算电路20m-n'选择这些元素值之一。因此,当将该实施例应用于系数c[n]随时间而变化的乘积和运算时,系数c[n]的变化可以立即反映在lut上。
另一方面,当如图10所示的乘积和运算电路那样在lut1001中使用存储电路时,需要逐一访问存储电路的地址并重写存储值的处理,因此乘积和运算被中断,直到对所有地址完全执行重写处理为止。如上所述,即使由于系数c[n]的变化而发生频繁的lut更新时,本实施例的运算电路也不会降低吞吐量。
[第二实施例]
下文将说明本发明的第二实施例。图5是示出根据第二实施例的运算电路的布置的框图。在图5中,与图1相同的附图标记表示相同的部分。与第一实施例中公开的运算电路相比,第二实施例公开了一种在不增加电路规模和功耗的情况下提高吞吐量的布置。
类似于图1所示的运算电路,图5所示的运算电路接收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)是可以取负值的有符号的数值(由二补码的二进制数所表示的数值)。
类似于图1所示的运算电路,图5所示的运算电路针对上述输入来计算并输出乘积和运算的m个值y[m](m=1,...,m)。从运算电路所输出的每个乘积和运算值y[m](m=1,...,m)是与将形成数据集x[m](m=1,...,m)的n个数据x[m,n]中的每一个数据乘以系数c[n]且对乘积求和的结果相等——即,与∑n=1,...,n(c[n]×x[m,n])相等——的值。
图5所示的运算电路包括一个lut生成电路1、一个lut锁存电路3和m(m是2或更大的整数)个分布式运算电路2-1至2-m。
lut生成电路1接收n个系数c[n](n=1,...,n)作为乘积和运算的系数,根据在n个系数c[n]被两两配对时n个系数c[n]中的每一对的值来计算要用作分布式运算lut的元素的值d[n′](n′=1,...,n',n'是等于或小于n/2的最大整数),并将计算的值d[n']与系数c[n]一起输出到lut锁存电路3。计算d[n’](n’=1,...,n’)的方法与在第一实施例中说明的方法相同。
lut锁存电路3接收系数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]的方法与第一实施例中说明的方法相同。
图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的总时间,即(td_lut+td)限制了包括运算电路在内的系统的时钟频率的上限。
另一方面,在图5所示的运算电路中,生成时间td_lut和分布式运算时间td中的每一个均限制包括运算电路在内的系统的时钟频率的上限。
即,采用图1所示的运算电路的系统的时钟频率的上限为1/(td_lut+td),而采用图5所示的运算电路的系统的时钟频率的上限为1/td_lut和1/td中较小的一个。更具体地,图5所示的运算电路比图1所示的运算电路快速地工作。
通常,通过采用流水线配置,可以提高处理在一个方向上流动的电路的速度(吞吐量)。然而,由于使用了大量的触发器,因此电路规模和功耗增加。
在该实施例中,在流水线配置中引起问题的触发器是在电路中使用的触发器,其保持系数c[n](n=1,...,n)和值d[n'](n'=1,...,n')与lut锁存电路3中的时钟同步。
流水线配置的功耗和电路规模几乎与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位大得多,因此可以将触发器的数量视为几乎与(n+n')成比例。
然而,如在第一实施例中所说明的,在第一实施例和第二实施例中,减少了lut(lut生成电路1和lut标引电路200m-n'-1)的元件数量,从而lut不需要通过使用存储电路来形成。
在图10所示的乘积和运算电路中,通过使用一个lut1001,利用分布式运算来执行n项式乘积和运算,因此lut1001的元素数量为2n-1。在本实施例和第一实施例的运算电路中,通过将n项式乘积和运算划分为n/2个二项式乘积和运算,元件数被减少到(n×1.5)。例如,当n=8时,元件数量可以从255减少到12。如上所述,与基于图10所示的乘积和运算电路形成流水线配置的情况相比,本实施例可以大大减少在形成流水线配置时要增加的触发器的数量,因此可以在不增加电路规模和功耗的情况下提高吞吐量。
另外,当将流水线配置用于通过将乘法电路和加法电路组合而没有使用分布式运算所形成的一般乘积和运算电路时,可以采用将触发器插入在乘法电路与加法电路之间的布置。由于要在乘法电路和加法电路之间插入的触发器的数量与并行乘积和运算的数量m成比例,所以触发器的规模与整个运算电路之比很高。因此,通过采用流水线配置所增加的电路规模和功耗带来了问题。然而,在本实施例的运算电路中,形成流水线配置时要插入的触发器的数量与并行运算的数量m不成比例地增加,而仅需要与lut元件的很小数量成比例的数量。
如上所述,在常规乘积和运算电路中,当形成流水线配置时,电路规模和功耗大大增加。然而,如本实施例所示,当通过划分lut生成电路1和m个并行分布式运算电路2-m(m=1,...,m)而形成流水线配置时,本实施例的运算电路能够提高吞吐量,而不会增加电路规模和功耗。
[第三实施例]
下文将说明本发明的第三实施例。图6是示出根据本发明的第三实施例的运算电路的布置的框图。图6所示的运算电路接收m(m是2或更大的整数)个复数x[m](m=1,...,m)以及复数系数c,每个复数x[m]被划分为实部值x_real[m]和虚部值x_imag[m](m=1,...,m),复数系数c被划分为实部值c_real和虚部值c_imag。注意,数据x[m,n](m=1,...,m,n=1,...,n)是可以取负值的有符号的数值(由二的补码二进制数表示的数值)。
根据上述输入,图6所示的运算电路获得并输出m个复数值y[m](m=1,...,m),每个复数值y[m]被划分为读取部值y_real[m]和通过分布式运算的虚部值y_imag[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]。
图6所示的运算电路包括一个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,并将值d_sub和d_add与实部值c_real和虚部值c_imag一起输出到分布式运算电路2a-1至2a-m。
每个分布式运算电路2a-m(m=1,...,m)接收复数x[m](m=1,...,m)以及从lut生成电路1a分配的实部值c_real、虚部值c_imag和值dsub和值dadd,并且对于m个中的每一个并行计算并输出复__数值y[m](m=1,...,m),该复数值y[m]通过将复数x[m]中的与电路相对应的数据乘以复数系数c并将该积求和来获得。
分布式运算电路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]。此外,分布式运算电路2a-m使用虚部计算lut通过分布式运算来获得虚部乘积和运算c_imag×x_real[m]+c_real×x_imag[m]的结果,并且将结果输出为y_imag[m]。
图7示出了分布式运算电路2a-m(m=1,...,m)的布置。令l为通过二进制数表达的任意数据x_real[m](m=1,...,m)和x_imag[m](m=1,...,m)之一的位宽,x_real[m][l](l=1,...,l)是要输入到分布式运算电路2a-m的数据x_real[m]的每一位,并且x_imag[m][l](l=1,...,l)是x_imag[m]的每一位。
图7所示的分布式运算电路2a-m包括l个实部计算lut标引电路205m-1(用于实部计算的选择电路)、符号反转电路206和207、l个倍数计算电路208m-1、求和电路209、l个虚部计算lut标引电路210m-1(由于虚部计算的选择电路)、符号反转电路211、l个倍数计算电路212m-1和求和电路213。
分布式运算电路2a-m包括针对数据x_real[m]和x_imag[m]的每个位的位置l(l=1,...,l)所形成的实部计算lut标引电路205m-1和虚部计算lut标引电路210m-1。
实部计算lut标引电路205m-1基于数据x_real[m]和x_imag[m]中的与电路相对应的位的位置l中的位x_real[m][l]和x_imag[m][l],获得实部计算lut的四个元素值——即0、c_real、-c_imag和d_sub——之一。
虚部计算lut标引电路210m-1基于数据x_real[m]和x_imag[m]中的与电路相对应的位的位置l中的位x_real[m][l]和x_imag[m][l],获得虚部计算lut的四个元素值——即0、c_imag、c_real和d_add——之一。
图8示出了位x_real[m][l]和x_imag[m][l]的值、实部计算lut的所选元素值和虚部计算lut的所选元素值之间的关系。在n=2(二项式乘积和运算)的情况下,位x_real[m][l]和x_imag[m][l]的值与实部计算lut和虚部计算lut的元素值之间的关系与地址和对应于图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中,倍数计算电路208m-1将由实部计算lut标引电路205m-1针对每个位的位置l(l=1,...,l)所选的实部计算lut的元素值乘以2(l-1)。
同样地,倍数计算电路212m-1将由虚部计算lut标引电路210m-1为每个位的位置l(l=1,...,l)所选的虚部计算lut的元素值乘以2(l-1)。
加法电路209将由l个倍数计算电路208m-1计算的值求和,并且求和电路213对由l个倍数计算电路212m-1计算的值求和。
注意,对于l=实部值的l(数据的msb位置)的位的位置,符号反转电路207将由实部计算lut标引电路205m-l所选的元素值的符号反转,然后倍数计算电路208m-l将元素值乘以2(l-1)。类似地,对于l=虚部值的l的位的位置,符号反转电路211将由虚部计算lut标引电路210m-l所选的元素值的符号反转,然后倍数计算电路212m-l将元素值乘以2(l-1)。
如上所述,由求和电路209对所有位的位置执行的求和的结果作为y_real[m]输出为要由本实施例的运算电路输出的复数值y[m]的实部值。另外,将求和电路213所执行的求和的结果作为y_imag[m]输出为复数值y[m]的虚部值。
在图7所示的分布式运算电路2a-m中,如图3所示的第一实施例的电路中,同时对所有位的位置l(l=1,...,l)执行与图10所示的lut1001、累加值寄存器1002、加倍电路1003和加法电路1004等效的处理。因此,无需输入l时钟脉冲就可以立即获得乘积和运算的结果。
注意,在本实施例中,对于msb的位的位置l,将由实部计算lut标引电路205m-l所选的元素值的符号反转,并将由虚部计算lut标引电路210m-l所选的元素值的符号反转。执行该符号反转,因为数据x[m,n](m=1,...,m,n=1,...,n)是可以取负值的有符号的数值(由二的补码的二进制数所表示的数值)。
当x_real[m]和x_imag[m]是限制为0或更大的无符号数值时,可以由倍数计算电路208m-l将实部计算lut标引电路205m-l所选的元素值乘以2(l-1),并且对于也像其他位的位置一样的msb的位的位置l,由倍数计算电路212m-l将由虚部计算lut标引电路210m-l所选的元素值可以乘以2(l-1)。
另外,通过将由二进制数表示的元素值向左移位(l-1)位,可以实现以下处理:对于上述位的位置l,将由实部计算lut标引电路205m-1和虚部计算lut标引电路210m-1所选的元素值乘以2(l-1)。因此,可以通过简单的电路来实现l个多个计算电路208m-1和l个多个计算电路212m-1,而无需使用任何乘法电路。
从本实施例的运算电路所输出的m个复数值y[m](m=1,...,m)与将复数x[m](m=1,...,m)乘以复数系数c且对乘积求和的乘积和运算的结果(c×x[m])相同。
在第一实施例中,通过将n项式乘积和运算划分为n'(=n/2)二项式乘积和运算,在lut(lut生成电路1和lut标引电路200m-n'-l)中保持的数值数量大大减少。
另一方面,在该实施例中,复数之间的乘法采用二项式乘积和运算的形式。因此,可以通过使用仅具有四个元素值的lut(lut生成电路1a、实部计算lut标引电路205m-1和虚部计算lut标引电路210m-1)来执行分布式运算。
本实施例使用与复数之间的乘法有关的上述特征,并且用于获得数值的每个lut不是存储电路(该数值是通过将复数的数据乘以系数所获得的结果的实部和虚部的数值),而是预先生成lut的元素值的电路、和通过使用诸如选择器的逻辑门来选择元素值的电路。利用这种布置,可以获得与第一实施例相同的效果。
即,当每个lut是如在常规系统中的存储电路时,通过复制lut所获得的多个存储电路必须用于数据的每个位的位置或用于每个乘积和运算电路,以便通过用于同时对数据的所有位的位置搜索lut的并行化、或者通过m个复数数据x[m](m=1,...,m)乘以复数系数c的复数乘法电路的并行化来增加吞吐量。
本实施例的运算电路不使用lut中的存储电路,因此可以划分为用于预先生成/保持lut的每个元素值的电路(lut生成电路1a)、和用于选择lut的每个元素值的电路(实部计算lut标引电路205m-1和虚部计算lut标引电路210m-1)。因此,不对lut生成电路1a执行并行化,而仅对实部计算lut标引电路205m-1和虚部计算lut标引电路210m-1进行并行化。这使得可以防止形成冗余电路,即,用于保持lut的每个元素值的电路的并行化(复制),并且可以抑制由并行化引起的电路规模的增加。
注意,当本实施例的运算电路应用于复数的乘法时,作为实部计算lut和虚部计算lut的元素值的共同元素的c_real的生成和分布被通用化,而不是分别地生成并分配实部计算lut和虚部计算lut的元素值被通用化。此外,由于实部计算lut具有-c_imag作为元素,因此作为虚部计算lut的元素值的c_imag的符号通过实部计算lut标引电路205m-1的符号反转电路206而被反转,从而减少用于分配的电路中的线路数。当与通过完全分离实部计算lut和虚部计算lut来执行生成和分配的布置相比,如上所述的通用化和符号反转可以减小电路规模和功耗。
[第四实施例]
下文将说明本发明的第四实施例。图9是示出根据本发明的第四实施例的运算电路的布置的框图。在图9中,与图6相同的附图标记表示相同的部分。本实施例公开了一种与第三实施例中公开的运算电路相比、在不增加电路规模和功耗的情况下、提高了吞吐量的布置。
像图6所示的运算电路一样,图9所示的运算电路接收m(m是2或更大的整数)个复数x[m](m=1,...,m)以及复数系数c,每个复数x[m]被划分为实部值x_real[m]和虚部值x_imag[m](m=1,...,m),复数系数c被划分为实部值c_real和虚部值c_imag。注意,数据x[m,n](m=1,...,m,n=1,...,n)是可以取负值的有符号的数值(由二补码的二进制数表示的数值)。
像图6所示的运算电路一样,图9所示的运算电路从上述输入获得并输出m个复数值y[m](m=1,...,m),每个复数值y[m]被划分为读取部值y_real[m]和通过分布式运算的虚部值y_imag[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所示的运算电路包括lut生成电路1a、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,并将值d_sub和d_add与实部值c_real和虚部值c_imag一起输出到lut锁存电路3a。
lut锁存电路3a从lut生成电路1a接收输出的c_real、c_imag、d_sub和d_add,每当输入时钟脉冲时锁存c_real、c_imag、d_sub和d_add的值,并保持该值直到输入下一时钟脉冲。lut锁存电路3可以由触发器来实现,其与时钟同步地保持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的整数)接收复数x[m](m=1,...,m)以及从lut锁存电路3所分配的实部值c_real、虚部值c_imag和值d_sub和d_add,并对于m中的每一个并行计算并输出通过将复数x[m]的与电路对应的数据乘以复数系数c然后对乘积求和所获得的复数值y[m](m=1,...,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]。此外,分布式运算电路2a-m使用虚部计算lut通过分布式运算来获得虚部乘积和运算c_imag×x_real[m]+c_real×x_imag[m]的结果,并且将结果输出为y_imag[m]。分布式运算电路2a-m的配置与第三实施例中说明的相同。
图9所示的运算电路与图6所示的运算电路的不同之处在于,将lut锁存电路3a插入在lut生成电路1a与分布式运算电路2a-1至2a-m之间。即,将lut生成电路1a和m个并行分布式运算电路2a-m(m=1...,m)流水线化。
在图6所示的运算电路中,lut生成电路1a从复数系数c计算dsub和dadd的处理时间是生成时间tdlut,并且分布式运算电路___2a-m生成y_real[m]和y_imag[m]的处理时间是分布式运算时间td。生成时间td_lut和分布式运算时间td的总时间,即(td_lut+td)限制了包括运算电路在内的系统的时钟频率的上限。
另一方面,在图9所示的运算电路中,生成时间td_lut和分布式运算时间td中的每一个均限制包括运算电路在内的系统的时钟频率的上限。
即,采用图6所示的运算电路的系统的时钟频率的上限为1/(td_lut+td),而采用图9所示的运算电路的系统的时钟频率的上限为1/td_lut和1/td中较小的一个。更具体地,图9所示的运算电路比图6所示的运算电路快速地工作。
通常,通过采用流水线配置,可以提高处理在一个方向上流动的电路的速度(吞吐量)。然而,由于使用了大量的触发器,因此电路规模和功耗增加。
在该实施例中,在流水线配置中引起问题的触发器仅是在以下电路中使用的触发器:该电路与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)而形成流水线配置时,本实施例的运算电路能够提高吞吐量,而不会增加电路规模和功耗。
注意,可以通过例如fpga(现场可编程门阵列)来实现在第一实施例至第四实施例中说明的每个运算电路。
工业实用性
本发明可应用于运算电路。
参考数字和符号的说明
1、2a...lut生成电路,2-1至2-m、2a-1至2a-m...分布式运算电路,3、3a...lut锁存电路,20m...二项式分布运算电路,21m...二项式分布运算结果求和电路,22m...辅助乘法电路,200m...lut标引电路,202、206、207、211...符号反转电路,203m、208m、212m...倍数计算电路,204、209、213...求和电路,205m...实部计算lut索引电路,210m...虚部计算lut索引电路。