复数对数运算alu的制作方法

文档序号:6655968阅读:753来源:国知局
专利名称:复数对数运算alu的制作方法
技术领域
本发明总体上涉及计算和数字信号处理,更具体地涉及算术逻辑单元(ALU)中的流水线化(pipelined)对数运算。
背景技术
ALU传统上用于实现对实数和/或复数的诸如加法、减法、乘法、除法等的各种运算功能。常规系统使用定点或浮点数ALU。还已知利用具有受限精度的实对数的ALU。例如,参见“Digital filtering using logarithmicarithmetic”(N.G.Kingsbury and P.J.W.Rayner,Electron.Lett.(Jan.28,1971),Vol.7,No.2,pp.56-58)。“Arithmetic on the European LogarithmicMicroprocessor”(J.N.Coleman,E.I.Chester,C.I.Softley and J.Kadlec,(July2000)IEEE Trans.Comput.,Vol.49,No.7,pp.702-715)提供了针对实数的高精度(32位)对数单元的另一示例。
定点编程给编程人员造成了特别是在乘法或除法运算之后脑力确定十进制小数点的位置的负担。例如,假设FIR过滤器涉及利用加权因子-0.607、1.035、-0.607……对信号采样的加权加法,所述加权因子必须被指定到千分之一的精度。在定点运算中,例如,必需用1035表示1.035。结果,信号采样与该数值相乘将结果的字长扩展了10位。为了按相同的存储器字长存储该结果,那么,必需丢弃10位;然而,是应当丢弃MSB(最高有效位)还是应当丢弃LSB(最低有效位),还是应当放弃每个中的一些,取决于信号数据谱(signal data spectrum),而这必须通过利用现实数据的仿真来确定。这使得对正确编程的验证变得费力了。
引入了浮点处理器,以通过借助于与每个存储的数值的“尾数”部分相关联的“指数”部分,自动确定小数点,来克服脑力确定小数点的不便。IEEE标准浮点格式是
SEEEEEEEE.MMMMMMMMMMMMMMMMMMMMMMM其中,S是值的符号(0=+,1=-),EEEEEEEE是8位指数,而MMM…MM是23位尾数。对于IEEE标准浮点格式,尾数的第24个最高有效位总是1(除了真零之外),由此被省略了。在IEEE格式中,尾数的实际值因而是1.MMMMMMMMMMMMMMMMMMMMMMM例如,底数为2的对数数值-1.40625×10-2=-1.8×2-7,可以按IEEE标准格式表示为1 01111000.11001100110011001100110。
而且,零指数是01111111,由此数值+1.0可以写为0 01111111.00000000000000000000000表示真零需要负无穷大指数,这是不实用的,因此,通过把全零位模式(all zeros bit pattern)解释成真零而非2-127,来生成人工零。
为了将两个浮点数相乘,利用定点24×24位乘法器(其是具有适度高复杂性和延迟的逻辑)将被抑制的MSB 1归位后(replaced)的尾数相乘,同时将指数相加,并减去偏移量127中的一个。接着,必须将相乘后的48位结果截取成24位,并且在向左对齐(left-justification)之后删除最高有效位1。由此,与针对定点数的乘法相比,针对浮点数的乘法甚至更复杂。
为了将两个浮点数相加,首先,必须将它们的指数相减,以了解它们的小数点是否对准。如果小数点没有对准,则选择较小的数右移等于指数差的多个二进制位置,以在将尾数相加之前对准小数点,从而将隐含的1归位。为了快速执行移位,可以使用桶形移位器(barrel shifter),其在结构和复杂性上类似于定点乘法器。在相加更具体地说在相减之后,必须把前面的零左移出尾数,而使指数递增。因而,在浮点运算中,加法和减法也是复杂的运算。
在纯线性格式下,针对定点数的加法和减法是简单的,但乘法、除法、平方以及平方根更复杂。乘法器被构造成一系列“移位和条件相加”电路,这些“移位和条件相加”电路固有地具有大量逻辑延迟。快速处理器可以使用流水线(pipelining)来克服这种延迟,但是这通常使编程复杂化了。由此,最小化快速处理器中的流水线延迟是有意义的。
应当注意到,浮点数表示是对数与线性表示之间的混合。指数是数值的以2为底数的对数的整数部分,而尾数是线性小数部分。因为对于线性表示来说乘法是复杂的,而对于对数表示来说加法是复杂的,所以这说明了为什么对于混合浮点表示来说,两者都是复杂的。为了克服这一问题,一些已知的系统,如在上面引述的系统,已经使用了纯对数表示。这解决了确定小数点的问题并简化了乘法,仅剩下加法是复杂的。在现有技术中,利用查寻表来执行对数加法。然而,表的大小局限性把这种解决方案限于受限的字长,例如限于0-24位的范围。在上述对Coleman的引用中,利用需要乘法器的插值技术,以合理大小的查寻表实现了32位精度。这样,Coleman处理仍包括与乘法有关的复杂性。
虽然现有技术描述了用于实现实数对数运算的各种方法和装置,但是现有技术没有提供针对复数运算的查寻表解决方案,而复数运算在无线电信号处理中是有用的。而且,现有技术没有提供具有共用的实数和复数处理能力的ALU。因为无线电信号处理通常既需要复数处理能力又需要实数处理能力,所以在具有大小和/或功率问题的无线通信装置中,同时实现实数和复数对数运算的单个ALU将是有益的。

发明内容
本发明涉及对按对数格式表示的实数和/或复数执行算术运算的算术逻辑单元(ALU)。利用对数数值表示简化了乘法和除法运算,但是使得加法和减法更困难了。然而,可以利用如下所讨论的已知算法简化两个输入运算数的和或差的对数。在下面的讨论中,假定a>b,并且c=a+b。可以表示C=logq(c)=logq(a+b)=A+logq(1+q-r)(1)其中,q是对数的底数,r=A-B,A=logq(a),而B=logq(b)。公式(1)表示的运算(在此称为对数加法(logadd))允许仅利用加法和减法运算来计算a和b的和的对数,其中,利用查寻表来确定logq(1+q-r)的值。
在一个示范实施例中,本发明提供了一种用于对按对数极坐标(logpolar)格式表示的复数型输入运算数执行对数运算的ALU。例如,A=logq(a)=(R1,θ1)而B=logq(b)=(R2,θ2),其中,R和θ分别表示对数幅值(logmagnitude)和相角,这在下面将进一步讨论。根据该实施例,ALU包括存储器和处理器。存储器存储为确定按对数极坐标格式表示的复数的对数而使用的查寻表,而处理器利用存储的查寻表生成按对数极坐标格式表示的复数型输入运算数的输出对数。
在另一示范实施例中,本发明提供了一种用于对按对数格式表示的实数和复数执行对数运算的ALU。根据该实施例的示范ALU也包括存储器和处理器。存储器存储两个查寻表,一个查寻表用于确定实数的对数,而另一个查寻表用于确定复数的对数。处理器包括共用处理器,该共用处理器利用针对实数型输入运算数的实数查寻表和针对复数型输入运算数的复数查寻表,基于按对数格式表示的输入运算数来生成输出对数。
在任何情况下,根据本发明的一个示范实施例,处理器可以包括蝶式电路,该蝶式电路被设置成,同时生成针对对数加法运算和对数减法(logsub)运算的输出对数。根据另一示范实施例,处理器可以包括查寻控制器和输出累加器,其中,查寻控制器基于查寻表计算一个或更多个部分输出(partial output)。所述部分输出可以在一次或更多次迭代期间确定,或者可以在流水线的一个或更多个阶段期间确定。输出累加器基于所述部分输出生成输出对数。


图1例示了针对实数的IEEE浮点格式与真对数格式之间的标绘图比较。
图2例示了针对实数的IEEE浮点格式与真对数格式之间的图表比较。
图3例示了线性插值器的框图。
图4例示了真F函数与指数近似之间的标绘图比较。
图5A和5B分别例示了针对对数极坐标表示法和笛卡儿坐标表示的量化区。
图6例示了用于同时执行对数加法运算和对数减法运算的一个示范ALU的框图。
图7例示了利用图6中的ALU来实现16点FFT。
图8例示了根据本发明的示范ALU的框图。
图9例示了用于图8的ALU的示范查寻控制器的框图。
图10例示了根据本发明的示范ALU的附加细节。
图11A-11C例示了相对于实数的针对复数的不同分配。
具体实施例方式
本发明提供了一种用于对采用对数格式的复数和/或实数执行对数运算的ALU。在一个实施例中,ALU利用一个或更多个查寻表对按对数极坐标格式表示的复数执行对数运算。在另一实施例中,ALU分别利用至少一个复数查寻表和至少一个实数查寻表,对按对数格式表示的复数和实数执行对数运算。为了更好地理解本发明的细节和有益效果,下面,首先提供有关数值表示、常规插值、迭代对数运算、高精度迭代对数加法、高精度迭代对数减法以及指数近似的细节。
数值表示在ALU中实现的对数运算通常需要特定的数值格式。如上所述,常规处理器可以按定点二进制格式或浮点格式来格式化实数或复数。如上所述,定点格式是纯线性格式。因此,针对定点数值的加法和减法是简单的,而乘法则更复杂。浮点数值是对数表示与线性表示之间的混合。因此,加法、减法、乘法以及除法在浮点格式中都是复杂的。为了克服与这些格式有关的一些困难,可以与合适的算法一起使用纯对数格式,来解决与对数格式有关的加法和减法问题。下面提供了与可以适用于本发明的纯对数格式有关的附加细节。
采用纯对数格式的实数可以简写为(S8.23),从而表示为S xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxx
可以使用两个这种实数作为一种表示复数的方式。然而,如下进一步所述,对数极坐标格式可能是更有利的表示复数的方式。
用于对数的底数可任意选择。然而,存在选择一个底数胜过选择另一个底数的优点。例如选择底数2具有许多优点。首先,如公式(2)所示,32位纯对数格式看上去基本上与(S8.23)IEEE浮点表示相同。
纯对数Sxx…xx.xx…xx(-1)s×2-xx...xx..xx...xxIEEESEE…EE.MM…MM(-1)s×(1+0.MM…MM)×2-EE...EE(2)针对底数2的对数的整数部分和在IEEE格式中一样可以偏移127,使得数值1.0按任一格式都表示为0 01111111.00000000000000000000000另选的是,可以使用128的偏移量,在此情况下1.0表示为0 10000000.00000000000000000000000利用127或128作为优选偏移量是实现上的事。
和采用IEEE浮点格式一样,可以把全零模式定义为人工真零。事实上,如果使用相同指数偏移量(127),则对于例如4、2、1、0.5等作为2的幂的所有数值来说,这种纯对数格式与IEEE格式一致,并且每个的尾数部分仅在2的幂之间稍微不同,如图1所示。
对于纯对数格式,最大可表示值是0 11111111.11111111111111111111111对于底数为2,其表示大致256减去偏移量127后的对数,即,表示大致2129或6.81×1038的数值。
最小可表示值是0 00000000.00000000000000000000000对于底数为2,其表示等于-127的对数,其是5.88×10-39。如果需要,则该全零格式可以和IEEE情况中一样得以保留,以表示人工真零。在这种情况下,最小可表示数值是0 00000000.00000000000000000000001其是等于大致-127的底数为2的对数,其仍对应于大约5.88×10-39。
具有在1到2之间的值的IEEE尾数的量化精度,是LSB值2-23,即2-23到2-24(0.6到1.2×10-7)之间的精度。按底数为2的对数格式表示数值x的精度是按对数形式的常数2-23,其给出了dx/x=loge(2)×2-23或0.83×10-7,这稍微好于IEEE量化精度的平均水平。
在另一实现中,可以使用针对其它底数(如底数为e)的对数。对于底数为e来说,那么,实数可以存储为由以下表示的32位的符号加对数幅值格式S xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxx或缩写为(S7.24)。由于底数较大(e=2.718),所以小数点左边的较少的位数就足以给出充分的动态范围,而为达到相等或更好的精度在小数点右边需要一个附加位,这在下面将进一步讨论。
对数幅值部分可以是带符号的定点量,其中最左边的位是符号位,不要将该符号位与所表示的数值的符号S相混淆。另选的是,对数幅值部分可以偏移+64(或+63),使得位模式0 1000000.000000000000000000000000表示零对数(数值=1.0)。在后一情况下,最大可表示数值具有底数为e的对数0 1111111.111111111111111111111111其大致是128减去偏移量64,即,e64或6.24×1027,而倒数表示最小可表示数。公式(3)表示底数为e的对数表示的量化精度。
dxx=2-24=0.6×10-7---(3)]]>图2对IEEE浮点格式(具有+127的偏移量)与底数e格式(具有+64的偏移量)以及底数2格式(具有+127的偏移量)进行了比较。
选择底数实际上等同于在固定字长内确定动态范围与精度之间的折衷,并且等同于按小于一个整数位的步长移动小数点。选择底数2或4或(通常为22N,其中,N是正整数或负整数)等同于把小数点移动正N位位置或负N位位置,同时给出相同的性能。然而,选择底数8不等同于把小数点移动整数个位置,因为它将对数除以3。换句话说,选择对数底数在数学上等同于改变二进制小数点的右边与左边之间的位的划分,这将改变精度与动态范围之间的折衷。然而,小数点可以仅按步移位,而底数可以连续改变。在带符号的对数幅值的情况下,(这相对于无符号的127偏移量对数幅值),通过将符号位称为对数幅值的符号而将该符号位与数值的符号(S位)区分开来。为进一步澄清此问题,考虑以10为底数的对数,log10(3)=0.4771,而log10(1/3)=-0.4771。因而,为了用对数表示+3的值,数值及其对数的符号都是+,这可以写成++0.4771。下表例示了这一记法。

为了确保所有对数表示都是正的,可以使用偏移表示。例如,如果是按数量比选定数值(例如0.0001)大多少倍的对数来代替表示该数量,则3的表示是log10(3/0.0001)=4.4771,而1/3的表示是log10(0.3333/0.0001)=3.5229。由于偏移,导致两者现在都是正的。0.0001的表示是log(0.0001/0.0001)=0。那么,全零位模式表示最小可能量0.0001。
传统的对数表需要存储针对0.0000到0.9999之间的对数的10000个数值以查寻反对数,和针对相同精度的用于获得对数的类似量。可以使用对数恒等式来缩减查寻表的大小。例如,log10(3)=0.4771,log10(2)=0.3010。据此,可以立即推导出log10(6)=log10(2×3)=log10(3)+log10(2)=0.4771+0.3010=0.7781。
还可以立即推导出log10(1.5)=log10(3/2)=log10(3)-log10(2)=0.4771-0.3010=0.1761然而,不能通过对给定数值0.4771和0.3010的任何简单运算立即推导出log10(5)=log10(2+3)=0.6990。
更不明显的是,可以怎样根据3和2的对数推导出log10(1)=log10(3-2)=0。
为了解决该问题,可以使用基于对数加法函数Fa的查寻表。例如,可以通过将log10(3)和log10(2)中的较大者(即,0.4771)与它们之差的函数Fa[log10(3)-log10(2)]=Fa(0.1761)相加,来获得(2+3)的对数,其中,对于底数10来说Fa(x)=log10(1+10-x) (4)类似地,可以通过从log10(3)和log10(2)中的较大者减去函数Fs(0.1761),来获得3-2的对数,其中,对于底数10来说,Fs(x)是Fs(x)=log10(1-10-x) (5)然而,用于Fa(x)和Fs(x)的查寻表仍需要针对各函数存储至少10000个数值。
插值法可以利用插值,来缩减要在查寻表中存储的值的数量。为便于下面的讨论,下面更详细地考察插值。为简化阐述而使用底数e。然而,应当理解,同样可用其它底数。
为了利用受限数量个由x0表示的表列值来计算函数Fa(x)=loge(1+e-x),函数F(x)关于表列值点x0的Taylor/McClaurin展开式给出F(x)=F(X0)+(x-x0)F′(x0)+0.5(x-x0)2F″(x0)…,(6)其中,′表示一阶导数,″表示二阶导数等。基于该展开式,可以利用Taylor/McClaurin展开式的益处把loge(c)=loge(a+b)计算为loge(a)+Fa(x),其中,x=loge(a)-loge(b),并且其中,在表中提供了针对x0的值。
为了针对32位底数e的情况使用简单线性插值,对于第24个二进制位置来说,例如,小于2-25,必须忽略涉及二阶导数F″的二阶项。对Fa(x)=loge(1+e-x)求导得出Fa'(x)=-e-x1+e-x---(7)]]>Fa'(x)=e-x(1+e-x)2]]>当x=0时,Fa″(x)的峰值在0.25处。因而,当(x-x0)<2-11时,二阶项小于2-25。为了满足该需求,最高有效位按下列格式(5.11)寻址表列值点x0,即xxxxx.xxxxxxxxxxx以便使余数dx=x-x0具有下面的形式O.00000000000xxxxxxxxxxxxx,由此小于2-11。这样,dx是13位量,而x0是16位量。
线性插值项Fa′(x0)的精度也一定是2-25阶的。冈为Fa′(x0)乘以小于2-11的dx,所以Fa′(x0)的精度一定是2-14。可以在针对Fa(x0)的表中提供LSB的附加结合项(extra couple),以帮助减小舍入误差,这表明需要5字节(40位)宽的查寻表以存储针对每个x0值的F和F′。
因此,表列值包括216=65536个26位的Fa值和相同数目的对应的14位Fa′值。另外,需要14×13位乘法器以形成dx·Fa′。这种乘法器固有地执行13位移位运算和加法运算,由此包括大约13个逻辑延迟。利用布斯算法可以在一定程度上降低乘法器的复杂性和延迟,然而,可能使用常规乘法器作为基准(benchmark)。
图3例示了实现上述线性插值的常规ALU的示范框图。图3的ALU利用减法器10、加法器20、Fa/Fa′查寻表30、乘法器40以及减法器50来估算值C=loge(A+B)。当在该示例中使用时,A=loge(a),而B=loge(b)。因为可能需要针对减法进行后向插值以避免如下所述的奇点,所以图3例示了从XM起的插值,XM是比x的最高有效16位部分多一位的x0的值。针对Fa的查寻表30包含Fa在XM+l处的值,因此,所包含的Fa′的值可以是区间中值处的值,即,在XM+0.5处计算的Fa′的值。乘法器40将14位Fa′(XM)值乘以x的最低有效13位的13位2的补码 而且,乘法器40被设置成,使得结果是Fa′(XM)和 的27位乘积。
27位乘积的LSB可以作为针对减法器50的借位输入,并且从26位Fa′(XM)值减去剩余的26位,以生成针对26位的插值,接着在输出加法器20中将该插值与A和B中的较大者相加,根据进位“1”把结果C上舍入为对数幅值的31位。
因此,基于线性插值的实用32位对数加法器包括大约65536×40=2.62兆位的查寻表30和13×14位乘法器40。这些组件消耗了很大的硅面积,并且就逻辑延迟而言没有速度优势。然而,为了利用插值法解决减法或复数算术运算,针对字长的基本调整和乘法器配置是必需的。
例如,为了利用插值实现减法,根据减法函数公式确定函数值,减法函数公式表示为Fs(x)=loge(1-e-x)(8)Fs(x)的Taylor/McClaurin展开式包括一阶导数FS'(x)=e-x1-e-x---(9)]]>当x趋于0时,其趋于无穷大。针对从该奇点起的距离运算,可以根据下面的公式(10),从比x=loge(A)-loge(B)(当A>B时)的实际值大一个LSB的表列值起对函数进行后向插值Fs(x)=Fs(x0)-(x0-x)Fs′(x0) (10)这是针对图3中的对数加法例示的实现。接着,当x的至少最高有效位是零时,x0是值较大的一个LSB,正好避免了奇点。
利用与针对加法相同的16/13位分割,x0的最小值是2-11,那么Fs′的大小约为2048个值。然而,Fs′的值比其对数加法相对运算数(counterpart)长12位,由此,这把用于形成dx·Fs′的乘法器的大小增大为13×26位的装置。
根据上述,因此在ALU实现插值中限制了实数加法和实数减法以及针对复数运算之间的协同作用(synergy)。因而,查寻表和乘法都需要执行插值,这使得为在硬件逻辑中实现不希望地复杂了传统插值法。
迭代对数运算作为针对上述插值处理和为缩减存储需求的另选例,可以使用迭代方案。迭代方案使用两个相对较小的查寻表,来基于表列函数利用迭代处理计算对数输出。为了例示迭代方案,提供了一个十进制示例,以例示怎样可以根据log10(3)=0.4771和log10(2)=0.3010来推导出log10(5)=log10(3+2)和log10(1)=log10(3-2)。
对数加法函数表(在此也称为Fa表)存储针对底数10并且针对按0.1的步长在0.0到4.9之间变化的x值基于公式(4)的50个值。另一个表(在此称为修正表或G表),存储针对按0.001的步长在0.001到0.099之间变化的y值基于以下公式的99个值G(y)=-log10(1-10-y) (11)下面例示了利用这两个查寻表的针对上述log(5)=log(3+2)示例的双表迭代处理。虽然下面是根据底数10进行描述的,但本领域技术人员应当理解,可以使用任何底数。针对使用不同于底数10的底数的实施例,应当理解,虽然公式(4)和(11)分别针对底数10的计算定义了函数表和修正表,但是,公式(12)通用地定义了针对任何底数q的函数表和修正表。
Fa(x)=logq(1+q-x)G(y)=-logq(1-q-y) (12)对于对数加法处理来说,首先,把自变量x=A-B=log10(3)-log10(2)=0.1761上舍入至最近的十分位0.2。根据具有50个值的Fa表,我们找到Fa(0.2)=0.2124。将0.2124与0.4771相加,结果针对log10(2+3)的第一近似为0.6895。将x从0.1761舍入至0.2造成的误差值为0.0239。该误差决不会大于0.099,因此,使用99个值的修正查寻表G(y)。对于修正值y=0.0239,上舍入至0.024,G表提供修正值1.2695。合并G(y)=1.2695与根据第一查寻表的值Fa(0.2)=(0.2124)和x的原始值(0.1761),生成针对Fa的新自变量为x′=1.658。本领域技术人员应当理解,在这种情况下限定x的撇号不表示求导。
当上舍入至最近的十分位时,x′=1.7。Fa(1.7)=0.0086,其在与针对log10(2+3)的第一近似0.6895相加时,给出第二近似0.6981。在把1.658上舍入至1.7时的误差是0.042。在G表中查寻y=0.042,给出值1.035,其在与先前的Fa值0.0086和与x′=1.658相加时导致一新的x值,x″=2.7016。在把x″上舍入至2.8之后,使用Fa表生成Fa(2.8)=0.0007。将0.0007与第二近似(0.6981)相加,给出第三且最终的近似0.6988,其被认为足够接近实际值0.6990,达到在利用仅具有50个值的Fa查寻表和仅具有100个值的G查寻表时所期望的精度。如果需要,可以进行进一步的迭代,以稍微提高精度。然而,对于加法来说,通常不需要多于三次的迭代。另选的是,如果把最大迭代次数预设为3,则可以把Fa的针对最后一次迭代的自变量下舍入至最近十分位为2.7,而非总是上舍入。Fa(2.7)=0.0009,其在与针对log10(3+2)的第二近似数0.6981相加时,给出期望的结果log10(5)=log10(3+2)=0.6990。
双表迭代处理包括为避免乘法而接受3步处理和查寻表大小的100倍缩减。在硬件实现中,针对三次迭代所需的逻辑延迟的总次数事实上可以小于通过乘法器的重复加/移位结构的逻辑延迟的次数。在任何情况下,上述查寻表大小的缩减在硅面积和/或精度具有头等重要性时都是有用的。
可以类似地计算log10(3-2)的值。起始近似数是较大数的对数,即0.4771。用于减法的Fs表按0.1的步长存储值Fs(x)=log10(1-10-x)(针对底数10) (13)Fs(x)=logq(1-q-x)(针对一般底数q)G表保持原样。将log10(3)与log10(2)之差0.1761上舍入至最近的十分位0.2。在减法函数表中查寻0.2生成Fs(0.2)=-0.4329。将-0.4329与起始近似数0.4771相加,生成针对log10(1)的第一近似数0.0442。
和针对加法一样,将0.1761上舍入至0.2的误差是0.0239。以0.024寻址按前述限定的G表,返回值1.2695。将1.2695与先前的Fs自变量x=0.1761和先前的Fs表查寻值-0.4329相加,生成新的Fs表自变量x′=1.0127。将x′上舍入至最近的十分位1.1,并再次利用Fs表生成Fs(1.1)=-0.0359。将-0.0359与第一近似数(0.0442)相加,给出针对log10(1)的第二近似数0.0083。将1.0127上舍入至1.1的误差是0.0873。利用值0.087寻址G表给出G(0.087)=0.7410。当与先前未舍入的Fs表自变量1.0127和Fs表查寻值-0.0359相加时,生成新的Fs表自变量x″=1.7178。将x″上舍入至1.8,导致Fs(1.8)=-0.0069,将其与第二近似数0.0083相加,获得针对log10(1)的第三近似数0.0014。将1.7178上舍入至1.8的误差是0.0822。以0.082寻址G表,返回值0.7643。将其与先前的Fs表自变量1.7178和先前的Fs表查寻值-0.0069相加,生成新的Fs表自变量x=2.4752。将2.4752上舍入至2.5,生成函数值Fs(2.5)=-0.0014。将-0.0014与第三近似数(0.0014)相加,给出正如期望的log10(1)=log10(3-2)=0。因为Fs的自变量针对每次迭代都增大,导致修正越来越小,所以该算法收敛。
上述针对减法的处理除使用了F表的减法形式(version)之外,其余与针对加法的处理相同。然而,加法和减法都使用同一G表。而且,减法与加法相比需要多一次迭代,以提供良好的精度;这是因为,由于在减法的情况下与Fs值相加时的增量是负的,所以Fs的自变量对于每次迭代,尤其是对于第一次迭代,略微减缓地上升。
高精度对数加法通常,针对更一般化的底数为q的对数要解决的对数加法问题可以通过下列步骤给出假设A=logq(a)而B=logq(b),其中,a和b是正数,而q是底数。
目标寻找C=logq(c),其中,c=a+b。
因而,C=logq(a+b)=logq(qA+qB),设A为A和B中的较大者。
那么,C=logq(qA(1+q-(A-B)))=A+logq(1+q-(A-B))=A+logq(1+q-r),其中,r=A-B,并且是正的。
因而,问题被简化成计算具有单一变量r的函数logq(1+q-r)。
如果r具有受限字长,则可以通过函数查寻表获得函数值。例如,对于16位的r值,函数查寻表必须存储65536个字。而且,如果在底数q=e=2.718的情况下,r>9,则函数的值不同于零而小于2-13,这暗示仅需要考虑r的最大为15的4位整数部分以及12位小数部分。那么,对于r>9来说,函数值对于小数点之后的12个二进制位置都是0,因此,仅对于高达9的r值需要查寻表,从而给出9×4096=36864个存储器字。
因为在r=0时函数的最大值是loge(2)=0.69,所以仅需要存储12位小数部分,由此,存储器需求仅为36864个12位字,而不是65536个16位字。在底数2的情况下,对于r>13来说,函数对于12个二进制位置都是0,由此,也仅需要考虑r的4位整数部分。如果把一位用于符号,则对数幅值部分仅15位长,例如4.11格式或5.10格式,相应地可以调整上述演算。
然而,为了获得比16位高得多的精度,例如利用32位的字长,用于函数的直接查寻表太大了。例如,为了给出与IEEE 32位浮点标准相当的精度和动态范围,针对底数e的情况,A和B应当各具有7位整数部分、24位小数部分以及一个符号位。现在,r的值在函数对于24位精度是0之前必须大于25loge(2)=17.32,这可由r的5位正整数部分表示。因而,必须把格式5.24的潜在的29位r值视为函数Fa的自变量。针对0到18之间的值,r的直接查寻需要18×224或302兆个24位字的查寻表大小。实质上,所有针对对数运算的研究都关注于缩减这些表大小,最终目的是为了使64位字长实用。在此描述的几种技术使该技术朝这一目标推进了。
为了根据单个大表(这对于使用r的所有位作为地址的对数加法函数Fa的直接查寻是需要的)缩减查寻表的大小,本发明的一种实现包括将r分别分成最高有效(MS)部分rM和最低有效(LS)部分rL。如下所述,所述MS部分和LS部分分别寻址两个小很多的表F和G。MS部分表示输入值的“上舍入”形式,而LS部分表示上舍入形式与原始全自变量值之差。
设rM是r(r<32)的最高有效14位,而rL是r的最低有效15位,如公式(14)所示。
rM=xxxxx.xxxxxxxxxrL=00000.000000000xxxxxxxxxxxxxxx (14)为简化起见,可以把rM和rL的长度简写表示为(5.9)和(15)。通过对本方法的显见的修改,同样可以使用将r分成最高有效位部分和最低有效位部分的其它划分,而对于下面进一步讨论的优选特定划分的一些考虑,涉及针对其它字长(例如,16位)或针对复数运算再用相同的F表和G表的能力。
设rM+是rM增大rL的最大可能值后的值(即,00000.000000000111111111111111)。应当认识到,这只是其最低有效15位设置成1的原始r值。在一些实现中,rM可以另选地增大0.000000001,即,rM+=xxxxx.xxxxxxxxx+00000.000000001(15)设rL的补码值表示为rL-=rM+-r---(16)]]>那么,取决于使用了针对rM的上述两个另选增大中的哪一个,这是rL的补码或2补码,即,rL-=00000.000000000111111111111111-00000.000000000xxxxxxxxxxxxxxx(rL的补码),或者rL-=00000.000000001000000000000000-00000.000000000xxxxxxxxxxxxxxx(rL的2补码)。那么,下面针对底数e的结果为loge(1+e-r)=loge(1+e-rM+-e-rM++e-r)]]>=loge((1+e-rM+)(1+(e-r-e-rM+)(1+e-rM+)))]]>=loge(1+e-rM+)+loge(1+e-r')---(17)]]>其中,r'=r+loge(1+e-rM+)=loge(1-e-rL-).]]>类似展开loge(1+e-r′),则有loge(1+e-r')=loge(1+e-rM'+)+loge(1+e-r')---(18)]]>其中,r'=r'+loge(1+e-rM'+)-loge(1-e-rL'-).]]>针对结论的迭代表明,希望的答案包括下列函数等的和loge(1+e-rM+)]]>loge(1+e-rM'+)]]>loge(1+e-rM'+)---(19)]]>这些函数仅取决于它们相应的r自变量的最高有效14位,而最高有效14位可以从仅有16384个字的查寻表获得。
对于公式(17)到(19),用来限定表示的r值的撇号不表示导数。代替的是,通过向前一值累加刚从对数加法函数查寻表(Fa)获得的值,并且根据r的最低有效15位添加一通过修正查寻表(即,G表,因为rL-是15位值,所以其具有32768个字)给出的值(即,值loge(1-e-rL'+),]]>来导出r值的序列r、r′、r″等。
尽管根据rM+和rL-计算存储的值,但是可以分别根据rM和rL直接寻址函数查寻表和修正查寻表。分别调用这些查寻表函数Fa和G,并且注意修正值总是高负的,在G表中可以存储正修正值。将该正修正值与先前的r自变量相加,代替存储负值并减去它。而且,可以从存储的值减去G表的最小修正值或至少其整数部分,以缩减存储的位数,并且只要从表中拉出(pulled)一值就添加到后面。对于底数2来说,值8适合于最小修正值,并且甚至在一些实现中不需要添加到后面。那么,迭代是1、将输出累加器值C初始化为A和B中的较大者。
2、如果A是较大者,则将r初始化成A-B,或者如果B是较大者,则将r初始化成B-A。
3、将r分成rM和rL。
4、查寻分别按rM和rL寻址的Fa(rM+)和G(rL-)。
5、累加Fa与C,并累加Fa+G与r。
6、如果r<停止阈值(STOP_THRESHOLD)(下面进一步讨论),则从步骤3起重复。
本领域技术人员应当理解,可以使用多个逻辑门,以利用逻辑b6.OR.(b5.AND.(b4.OR.b3.OR.b2))(32位集、或具有8、4或2位集中的一个的16位集)来检测大于18的r-值,其中,位索引指示小数点左边的位的位置。函数G(rL-)=loge(1-e-rL-)]]>的值总是约大于6.24,因此,迭代总是在3个循环或更少循环后终止。对于底数2来说,修正值按比例增大,从而同样对于底数2来说,在至多3个循环后r总是超过25。一般来说,3个循环典型地满足任何底数。
高精度双表对数减法如果与A和B相关联的符号S表示a和b具有相同符号,则可以使用前述对数加法算法,在此称为“对数加法(logadd)”。否则,需要对数减法算法,在此称为“对数减法(logsub)”。下表显示了何时使用相应的算法

当使用对数加法算法时,结果的符号总是与较大的对数幅值相关联的符号。
如果首先颠倒与第二自变量相关联的符号,则对于对数减法同样如此。当希望是减法时,可以在向对数运算单元的输入施加第二自变量时,进行第二自变量的符号的颠倒。“对数减法”算法如下导出假设给出A=log(|a|),而B=log(|b|)。希望找到C=log(c),其中,c=|a|-|b|。设A是A和B中的较大者。为清楚起见,去掉绝对值符号(||),并且假定现在a和b都是正的,从而有C=loge(a-b)=loge(eA-eB) (20)如同对数加法的情况一样,仅出于例示的目的,在该示例中使用了底数e,因此这不构成限制。
因为假定A大于B,所以C=loge(eA(1-e-(A-B)))=A+loge(1-e-(A-B)) (21)=A+loge(1-e-r)其中,r=A-B,并且是正的。因而,问题简化成计算具有单一变量r的函数loge(1-e-r)。设rM、rL、rM+以及rL-如前述定义。那么,针对底数e
loge(1-e-r)=loge(1-e-rM++e-rM+-e-r)]]>=loge((1-e-rM+)(1-(e-r-e-rM+)(1-e-rM+)))]]>=loge(1-e-rM+)+loge(1-e-r')---(22)]]>其中,r'=r+loge(1-e-rM+)-loge(1-e-rL-).]]>展开loge(1-e-r′)同样导致loge(1-e-r')=loge(1-e-rM'+)+loge(1-e-r')---(23)]]>其中,r'=r'+loge(1-e-rM'+)-loge(1-e-rL'-),]]>等。针对结论的迭代表明loge(1-e-rM+)]]>loge(1-e-rM'+)]]>loge(1-e-rM'+)---(24)]]>等等,它们仅取决于相对应的全字长r值的最高有效14位,这可以由仅具有16384个字的查寻表给出。
如同对数加法的情况一样,尽管存储值是根据rM+以及rL-计算的,但是,针对对数减法的查寻表可以被构成为按rM和rL直接寻址。而且,如同对数加法的情况一样,为修饰指示的r值而使用的撇号不表示导数。
如前所述分别调用这些查寻表Fa和G(G是用于对数加法算法的同一查寻表)并存储G的正值,将生成对数减法运算所需的Fs表和G表。因为1-e-r总是小于1,所以Fs总是负的,由此,可以存储并且减去而非加上正幅值。另一方法存储其负符号位被除去的负值,当进行减法时,通过附加最高有效位“1”,在查寻表外替换该负符号位。在加法与减法之间优选选择导致逻辑的简化和查寻表值的最大协同的那一个,如下面进一步所述。在任何情况下,下列步骤概述了“对数减法”处理1、初始化输出累加器值,使C=A和B中的较大者。
2、如果A是较大者,则将r初始化成A-B,或者如果B是较大者,则将r初始化成B-A。
3、将r分成rM和rL。
4、分别按rM和rL寻址,查寻Fs(rM+)和G(rL-)。
5、累加Fs与C,并累加Fs+G与r。
6、如果r<停止阈值(下面讨论),则从步骤3起重复。
对于对数加法算法和对数减法算法来说,选择停止阈值,以使来自又一次迭代的任何贡献都小于LSB的一半。这对于小数点之后具有24个二进制位置的底数e出现在17.32(可以使用18)处,或者对于小数点之后具有23个二进制位置的底数2出现在24处。原则上,可以设立小于底数2的底数,其给出停止阈值31,这样就将使用在可根据r的选定MSB寻址的整个地址空间上定义的F函数。另选的是,可以设立大于底数e的底数,其给出具有相同性质的停止阈值15。然而,底数2的实际优点看来大于利用针对F表的全地址空间的任何优点。一般来说,对于底数2,停止阈值仅比小数点之后的对数表示的二进制位置的数目大1或2。
如上面给出的十进制示例所示,如果是下舍入为寻址F表而使用的最终自变量例如rM+,而不是上舍入rM,则改进了有限次迭代之后的精度。如果双表迭代处理总是执行固定次数的迭代,或者如果该处理以其它方式识别最终迭代,则可以在最终迭代时下舍入F的自变量。例如可以通过r在停止阈值的特定范围(对于底数e来说是~6,或者对于底数2来说是~8)内(表示限制下一迭代超过停止阈值),来识别最终迭代。当使用该方法时,如果对于最终迭代rL的最左位为零,则可以将针对F表的地址减1。在要描述的流水线实现中,仅针对下舍入自变量来计算最终F表内容。
对数减法算法与对数加法算法之间的唯一差别是使用了查寻表Fs而非Fa。因为两者都具有16384字的大小,所以它们可以合并成用F(rM,操作码)表示的具有用于选择+或-形式的附加地址位的单个函数F表,其中附加自变量“操作码”是具有值0或1以表示是应用对数加法算法还是应用对数减法算法的附加地址位。另选的是,因为外围逻辑(即,输入累加器和输出累加器以及加法器/减法器)与相应的查寻表相比较小,
所以对于复制外围逻辑以形成独立的加法器和减法器来说,花费较小。下面考虑的又一种可能性是使用函数Fa与-Fs之间的相似性。
指数近似如上所述,rM+可以包括按rL(0.00000000011111111111111)的最大可能值增大的rM,或者可以包括按0.000000001增大的rM。选择rM的增量是0.0000000001111111…1而非0.000000001的优点是,在迭代算法期间可以按rL的补码寻址G表,或者直接在rM=0的情况下可以按rL(未经补码运算)寻址G表以获得F的值,因而,使得单次迭代就可以满足减去两个几乎相等的值的其它困难情况。与形成2的补码相比,使补码值和非补码值可用更简单且更快,因为不需要传送进位。
对于对数加法来说,Fa表的值可以定义如下Fa(XM)=log2(1+2-(XM+d))---(25)]]>其中,d表示递增量,其优选为XL的最大可能值,即,全部为1。该函数可以构成为按XM寻址的查寻表。对于减法来说,Fs表的值可以定义如下Fs(XM)=-log2(1-2-(XM+d))---(26)]]>对于XM的较大值来说,并且对于32位运算和在16与24之间的自变量范围来说,Fa(XM)=Fs(XM),两者都可以由下式充分近似E=2-XM1·(2-0.XM2loge(2))---(27)]]>其中,XM1是XM的整数部分(小数点左边的位),而XM2是小数部分,即,小数点右边的位。括号中的函数可以按小的指数查寻表存储。右移位器可以实现整数部分,从而仅小数位需要寻址指数函数,这缩小了表大小。
图4例示了指数近似(E)与真函数值(Fa,Fs)之间的相似性。当自变量在16到24之间的范围内变化时,E基本上等于Fa和Fs。而且,图4还例示了又一近似
E2=2-2(XM+d)2loge(2)---(28)]]>如何也充分近似了指数近似与真函数值之间的差dFa=E-Fa和dFs=Fs-E。因此,对于在8到16的范围中的XM来说,可以使用按长度小于或等于8位的小修正值E2修正后的指数近似E,如从图4可见。当需要二进制小数点之后具有24个位置时,该结果长度为17位。
因为E曲线下的面积大约近似于实现指数近似所需的硅面积,所以图4还例示了实现用于对数加法运算和对数减法运算的函数表所需的近似硅面积。利用底数为2的对数刻度作为垂直刻度,意味着高度表示二进制值的字长。水平刻度表示这种值的数值。因此,曲线下的面积表示存储曲线值所需的ROM的位数。然而,指数函数E是周期性的,除了针对每个增量1的右移位之外,其值是重复的。因而,仅需要存储按小数部分XM2寻址的一个周期,并将该结果按XM1给出的多个位置移位。因此,指数函数E需要非常小的表。而且,因为修正值dF或E2与原始的Fa和Fs函数相比,在它们的曲线下明显具有更小的面积,所以利用指数近似E并存储修正dF和E2需要更小的表大小,由此与存储Fa和Fs相比,需要更小的硅面积。
公式(29)给出针对最低有效位的G函数如下G(XL)=-log2(1-2-(d-XL))---(29)]]>其中,当d全部为1时,(d-XL)等于XL的补码。G(XL)的最小值取决于31位对数幅值在XM与XL之间的划分。如果XM具有5.8的形式,则XL具有0.00000000xxxxxxxxxxxxxxx的形式并且小于2-8。当XL=0时,那么,G的最小值是8.5。对于XM具有形式(5.7)来说,G的最小值=7.5,而对于XM具有格式(5.9)来说,G的最小值=9.5。因为X的值每个周期至少增大G的值,所以只要三个G值平均大于8,X在三个周期内就将超过24。在下面,出于例示的目的,保持32位运算的假定。当G的最小值是8.5时,可以从存储值中减去基值(base value)8。
针对复数的对数运算上述各种不同处理通常适用于针对实数的对数运算。然而,无线电通信信号可以利用实数表示和复数表示。例如,针对实数和复数信号处理的典型应用包括无线电信号处理。在无线电系统中,在天线处接收的信号包含无线电噪声,并且可以由一系列复数采样表示。通常希望的是,利用相对于噪声最弱的可能信号来再现信息,以使范围最大化。因此,从天线聚集的采样的复数表示不需要高精度数字化,因为采用比期望的噪声电平好很多的量化精度不太有用。然而,在处理复数噪声信号以再现信息并修正错误之后,希望去除噪声;此刻,所得信息可能需要更高精度的表示。例如,可以按一系列实数采样来表示语音,但是因为处理的原始天线信号提高了语音的信噪比的保真度,所以可能需要更高精度的数字表示。
因此,提供对于实数的高精度运算和对于复数的较低精度运算的信号处理器,在诸如蜂窝电话和蜂窝系统的无线电应用中是受关注的。这种处理器可以包括用于程序存储的存储器、用于存储正被处理的实数型数据和复数型数据的数据存储器、实数和复数算术/逻辑单元(ALU),以及可以包括模数转换器和数模转换器的输入和输出装置。数据存储器存储ALU设计所针对的相同字长的字;合乎逻辑的是,针对实数和复数使用相同的字长,以使它们可以存储在同一存储器中。然而,本发明不需要这样。
典型的是,对于语音处理来说16位字足够了。因此,所关注的是,确定16位复数表示是否提供足够的动态范围,用于表示天线接收的噪声信号。这由欧洲L.M.爱立信公司及其分支机构美国爱立信-通用电气在1988-1997年期间制造并销售的第一代数字蜂窝电话中被证明确实如此,所述第一代数字蜂窝电话使用了包括8位对数幅值和7位相位的15-16位对数极坐标表示。这些产品还利用了根据组合实现的美国专利5048059、5148373以及5070303把无线电信号直接数字化成复数对数极坐标形式,通过引用将所述美国专利并入于此。
至于实数,对于振幅的对数来说可以使用任何底数。如果使用底数e,则对数幅值表示以奈培为单位的瞬时信号电平。如本领域所知,1奈培约等于8.686分贝(dB),因此,采用格式xxxx.xxxx的8位对数幅值表示在0到15又15/16奈培(~139dB)范围内变化的信号电平。
量化误差是一奈培或0.27dB的最低有效位或+/-1/32的一半,其是约3.2%的百分比误差。理论上,该误差均匀分布在+/-3.2%之间,并且具有峰值1/3(即,大约1%)的RMS值。由此,量化噪声为信号电平的1/100,即,比信号电平低40dB,并且如果使用了过采样,即,按大于信号带宽的每秒每Hz1个采样的奈奎斯特速率来采样,则量化噪声可以更小。
对数极坐标表示的优点在于,该量化精度在信号电平的整个范围内都保持恒定。总动态范围为139dB下的-40dB的量化噪声被视为远胜任于大多数无线电信号应用。
图5A例示了与图5B的笛卡儿坐标表示相对照,怎样利用对数极坐标表示把复平面分割成单位区域。在对数极坐标图的中央的白“洞”是信号电平小于0000.0000奈培的位置,而外圆是最高信号电平1111.1111奈培。如果选择下限0000.0000比无线电噪声电平低10dB,则这确保将足以表示噪声漂移,并且数值表示不会过度地劣化噪声的统计特性。因而,外圆又表示比噪声高129dB的信号电平,这甚至不可能被最强的信号超过。
用来表示相角的有限位数也会造成量化误差和噪声。来自相位量化的噪声贡献的RMS值为以弧度为单位的最小相位位值的1/12。如果使用8位来表示相位,则最小相位位具有2π/256弧度的值,由此,量化噪声相对于信号电平是2π/(12*256)=0.002或-53.8dB。这小于-40dB的对数幅值量化噪声。
对振幅多分配1位而对相位少分配1位的位分配,使对数幅值量化约为-46dB,而相位量化噪声为-47.8dB。由此,当使用16位字长时,暗示用于对数幅值的对数极坐标格式是xxxx.xxxxx,而用于相位的对数极坐标格式是0.xxxxxxx(模数2π)。
如果使用底数为2的对数来表示对数幅值,则格式为xxxx.xxxxx的量化噪声将减小loge(2)或3.18dB到-49dB。动态范围从16奈培或139dB减小16×6dB=96dB,这仍是充分的。
对数极坐标数可以存储为对数幅值在前,即,{xxxx.xxxxx;0.xxxxxxx}={log(r);θ},或者存储为相位在前,即,{0.xxxxxxx;xxxx.xxxxx}={θ;log(r)}。可能有用的是,把相位考虑为实数的1位“相位”或符号的扩展,以在复数情况下表示正好两个角度0度和180度以外的角度,由此,“相位在前”格式提供了用于描绘此的逻辑格式。在复数运算中,在加法与减法之间可能几乎没有区别,因为合并相差0度(即,加)或180度(即,减)的数正好是在要考虑的相对相位角的整个范围内的两个点处。
利用对数极坐标格式,通过对数幅值部分的定点加法(考虑下溢或上溢)和忽略上溢(因为角度被计算为模2π)的相位部分的定点加法,来获得两个复数的乘积。当二进制相位字量化级在0-2π的范围内均匀分隔时,根据相位计算需要,依据二进制加法的翻转(rollover)精确地对应于模2π运算。同样,通过定点减法获得两个对数极坐标复数的商。
考虑针对16位对数实数形式(logreal)运算和16位对数极坐标运算使用同一ALU。可以认识到,在相加或相减中的唯一差别在于,针对对数极坐标情况,不允许把来自对数幅值部分的加法或减法的任何进位或借位传送到加法器或减法器的相位部分中,如果使用对数幅值在前格式,也是如此。
为了例示可以怎样实现对按对数极坐标格式表示的复数的对数运算,考虑如下。设公式(30)以底数为e的对数极坐标格式Z1和Z2表示两个笛卡儿坐标复数z1和z2。
Z1=(R1,θ1)=loge(z1)Z2=(R2,θ2)=loge(z2) (30)为了确定Z3=loge(z3)(其中,z3=z1+z2),可以执行与针对实数的上述过程相似的过程。首先,注意到Z3=loge(Z1+Z2)=loge(eZ1+eZ2)---(31)]]>假定Z1比Z2具有更大的对数幅值(R1),并且应用与上述相似的逻辑,则Z3可以表示为
Z3=loge(eZ1(1+e-(Z1-Z2)))]]>=Z1+loge(1+e-(Z1-Z2))]]>=Z1+loge(1+e-Z)---(32)]]>其中,Z=Z1-Z2,具有正实数部分R1-R2,因为R1>R2,这确保幅值e-Z<1。因而,给出Z1和Z2来计算Z3的问题被简化成,计算具有对数极坐标复变量Z=(R+jθ)的函数loge(1+e-Z),其中,R=R1-R2,并且θ=θ1-θ2。尽管上述示例使用底数e,但本领域技术人员应当理解可以使用任何底数。
当R>6时,较小的值的加法或减法不会影响第5个二进制位置,并且结果是较大的值。因此,对于R仅需要考虑二进制小数点左边的3位。
可以根据各种手段来计算函数loge(1+e-Z)。例如,可以使用单个表、单个迭代处理。尽管适用于低精度数和高精度数,但对于高精度数所需的单个查寻表的大小可能禁止变大。查寻表可以具有最优结构。例如,对于16位对数极坐标运算来说,可能有用的是,成对存储其θ分量相差π的地址的值,从而给出16384×32位的ROM,或者如果利用共轭对称性,则给出一半大小的ROM。那么,在一个周期内可以同时进行同一对输入值的复数对数加法和复数对数减法。
在一个周期内同时进行一对值的加和减被称为蝶式运算(Butterflyoperation),并且典型地在蝶式电路中执行。图6例示了包括低精度复数型蝶式电路100的示范ALU。蝶式电路100包括幅值累加器102、相位累加器104、选择器106、查寻表108、和合并器110,以及差合并器112。当R1大于R2时,对数幅值累加器102计算由R=R1-R2表示的对数幅值差,而相位累加器104计算由θ=θ1-θ2表示的相角差。另选的是,当R2大于R1时,对数幅值累加器102计算由R=R2-R1表示的对数幅值差,而相位累加器104计算由θ=θ2-θ1表示的相角差。幅值累加器102和相位累加器104把计算出的差输出给查寻表108。
查寻表108包括针对所有角度的复数的对数值。对数幅值差和相位差寻址查寻表108,以提供两个对数极坐标值F(Z)和F(Z+π)。如果需要,通过始终利用正角自变量,而在原始角地址是负的时共轭输出F(Z)值,可以将该表大小减半。
幅值累加器102还基于R1和R2中的较大者,控制选择器106,以选择Z1或Z2作为ZL。选择器106把ZL提供给和合并器110以及差合并器112。合并器110、112把ZL与两个查寻表输出F(Z)和(F(Z+π)相加,以生成与两个输入复数相关联的和输出对数以及差输出对数,由此在一次运算中执行复数蝶式运算。
对于执行诸如正交频分复用(OFDM)信号解码的各种信号处理运算所需的快速傅立叶变换(FFT)来说,蝶式运算通常是有用的。对于底数为2的FFT运算来说,通常按2π/2N的倍数修改相角,其中,2N是FFT的大小。在对数极坐标格式中,已知为旋移(twiddle)的这些相位旋转运算是不重要的,而仅涉及把量(像0.0001000)的倍数添加至相位部分。因为在蝶式电路100中容易修改相角,所以通过把按对数极坐标格式表示的复数施加至蝶式电路100可以执行非常高效的蝶式和旋移运算,使其对于FFT来说非常有利。只要FFT是底数为2的并且N小于或等于θ的字长,在旋移运算中就不会发生舍入。对于底数2以外的FFT来说,可以设计特殊的对数极坐标格式,其中,利用与FFT的底数相同的根表示θ。通过恰当地修改查寻表可以在这种装置中使用在此描述的算法。
图7例示了利用多个复数型蝶式电路100(例如图6中示出的复数型蝶式电路)实现示范的16点FFT。蝶式电路100合并成对的值,在16元素阵列中分开的选定的8个。接着,在选定的和输出以及差输出的角度部分中修改它们,以实现已知为旋移的复数型旋转。按例示的位模式的模2π加法修改角度。当使用如图所示的7位角度部分时,模2π加法是简单的模128加法。为在每个机器周期完全、并行处理和计算完整的FFT,也可以利用蝶式电路100的8×4=32个副本来实现这种FFT。另选的是,可以利用单列共8个蝶式电路100连续地实现这种FFT,以依次执行四列计算中的每一个。而且,单个蝶式电路100可以重复使用32次,以执行FFT。这些选项取决于速度与大小或成本之间的希望的折衷。
当信号可以出现在超过60dB动态范围的任何地方时,通过考虑把信号表示到比方说1%精度的问题,可以实现与复数值的笛卡儿坐标表示相比的对数极坐标量化的优点。这可以出现在接收器中,用于不向接收器提供有关期望信号电平的告警的突发模式发送。如果最小信号电平约为1,则把笛卡儿坐标部分表示到1%精度需要最少约1/64(即,二进制小数点右边的6位)的步长。然而,表示超过60dB范围的信号需要表示信号比这大1000倍,这需要在二进制小数点左边附加10位。因而,实数部分和虚数部分都需要具有格式S10.6,使得总数达34位。然而,如上所述,按对数极坐标格式,仅利用16位就可以实现相同的量化精度和动态范围。
如果与可以适应合理大小的单一查寻表相比需要更高的精度,则前述用于实数的双表迭代方法可能适于复数。填充在高精度实数格式的32位字长内的复数格式例如按相位在前格式例示为(0.xxxxxxxxxxxxxxx;xxxxx.xxxxxxxxxxxx)或简写为(0.15;5.12)。选择相位的位数比针对对数幅值的二进制小数点右边的位数多2或3位,对于相位和幅度将给出类似的量化误差。15位相位的最低有效位具有值2π×2-15=6.28×2-15。在R=log(r)的第12个二进制位置处的变化给出d(log(r))=dr/r=2-12=8×2-15。
因而,log(r)的最低有效位是径向上的位移,其略大于切向上的θ(theta)的一个最低有效位的位移。利用底数2,把log(r)的最低有效位减小loge(2)=0.69到5.54×2-15,这略小于θ的最低有效位。如果重要,则利用在2与e之间的特殊底数eπ/4=2.19328,可实现精确相等的径向和切向量化。然而,底数2具有实现优点,并且是优选的。例如,利用底数2,格式5.12的对数幅值表示信号电平在32×6=192dB动态范围内变化,这是16位格式的范围的两倍。而且,对于所有信号电平来说,量化噪声比信号电平低80dB以上。对于在正常应用中的无线电信号处理来说,这是足够大的,并且对于希望确保量化效果可忽略时的仿真来说,或者对于诸如在大的多余信号与小的需要信号之间具有极大差的接口注销(cancellation)的临界应用来说,可能是有用的。
当对数相加或对数相减两个对数极坐标值时,如果在它们的对数幅值中的差很大以至于log(r)或θ的最低有效位不受影响,则该结果是具有更大对数幅值的值。因此,如果R1和R2是两个对数极坐标值Z1和Z2的对数幅值,并且R是R1与R2之间的差,且总是正的,则当R大于13loge(2)=9.011时,函数loge(1+e-z)=loge(1+e-(R+jθ))对于12个二进制位置都是0。
因而,在针对32位对数极坐标格式的底数e的情况下,仅需要考虑0到9之间的对数幅值R的差的值。类似地,针对底数2的情况,仅需要考虑作为复数对数加法/减法函数的自变量的位于0到13之间的对数幅值差的值。因而,二进制小数点左边的4位足以表示R,使R具有形式4.12。
因为,针对负θ的复数对数加法/减法函数是针对正θ的复数对数加法/减法函数的共轭,所以θ限于0到恰小于π的范围,由此具有0.0xxxxxxxxxxxxxx的形式,具有仅14个可变位。在导致本发明的研究期间,通过排除针对角度差的特定值=0.10000000000…,主要解决了复数迭代的收敛问题。该值精确等于对数幅值的实数相减,结果的角度是两个输入自变量角度中的一个,并且是通过利用针对实数运算的Fs函数最佳执行的。
针对复数的迭代处理,至于实数,首先包括把要合并的两个自变量Z1和Z2的差Z=(θ,R)=Z1-Z2分成最高有效部分和最低有效部分。如上所述,Z的值实际上仅需要30个可变位。例如,设ZM是θ的14个可变位中的最高有效7位和16位R中的最高有效8位,即,按相位在前的表示法ZM=(0.0xxxxxxx;xxxx.xxxx)。
那么,ZL是R的剩余最低有效8位和θ的剩余最低有效7位,格式为ZL=(0.00000000xxxxxxx;0000.0000xxxxxxxx)。接着,定义ZM+=ZM+dz,其中,dz具有实部0.0001或0.000011111111,和虚部0或0.111111111111111,即,比2π少1个LSB。接着,定义ZL-为ZM-Z。对于dz的前一选择来说,ZL-是ZL的可变位的2补码,而对于dZ的后一选择来说,其是这些位的补码。因为与2补码相比,更容易形成补码,所以dZ的实部和虚部的后一选择是优选的。那么,loge(1+e-Z)=loge(1+e-ZM+-e-ZM++e-Z)]]>=loge(1+e-ZM+)+loge(1+e-Z')---(33)]]>其中Z'=Z+loge(1+e-ZM+)-loge(1+e-ZL-)---(34)]]>函数loge(1-e-ZM+)]]>仅取决于R的8个最高有效位和θ的7个最高有效位,由此,可以预计算并存储在通过ZM直接寻址的32768字表中。因而,在处理期间不需要形成ZM+。
函数-loge(1-e-ZL-)]]>仅取决于R的7个LSB和θ的8个LSB,并且还可以预计算并存储为32768字查寻表,用于复数运算的G函数。当希望的结果是具有较大对数幅值的原始自变量Z1或Z2以及具有自变量ZM、Z′M、Z″M等的F函数连续值的和时,后者仅需要计算连续值Z′、Z″、Z等。研究表明,对于要达到收敛的复数对数加法和对数减法迭代来说,可能需要多达6次迭代。糟糕的情况是Z1和Z2的角度分开近180度,并且它们的幅值几乎相等。通过把运算处理为实数减法,来如上所述处理精确分开180度的角度的情况。
为了采用同一F表满足实数运算和复数运算,可以设置两个附加地址位,以选择针对实数加法的表、针对实数减法的表,以及针对复数加法/减法的表。可以用F(rm,操作码)来表示函数,其中,对于复数情况来说,rM是自变量的15位中的14位,而第15位是2位操作码的一部分。由此,分配两位操作码如下表所示

同样,函数loge(1-e-ZL-)]]>仅取决于ZL的15位,因此,可以预计算并存储到查寻表中,以直接按ZL-寻址。对于用于实数运算的G表来说,其在大小和函数上平等,并且可以通过引入“操作码”自变量(其针对实数为0,针对复数为1)在65536字查寻表中与实数G表合并,以选择恰当的一半32768字。
通过把复数型输入分成最高有效部分和最低有效部分,为利用双表迭代处理来执行有关实数的对数运算而使用的相同原理也可以应用于按对数格式表示的复数。另外,通过把复数型输入分成最高有效部分和最低有效部分,在待决的美国专利申请第号(代理案卷号4015-5287)中描述的多级流水线可以应用至按对数极坐标格式表示的复数。该待决申请通过引用并入于此。在该待决申请的流水线中,ALU存储查寻表的针对流水线的各级的选定部分。流水线的至少一级利用按对数极坐标格式表示的级输入来执行查寻表的选定部分,以生成与该级相关联的部分输出。通过合并该部分输出,多级流水线生成对数输出。
当θ=π时,可以看出,运算等同于实数减法。针对这种情况的结果仅取决于R,对此在单步(one-shot)运算中可以使用特殊查寻表。另选的是,可以使用针对实数减法的现有查寻表。这可以通过利用R的14位0xxxx.xxxxxxxxx执行实数减法算法来进行,以寻址要成为RL的初始值的展开有12位零的F表的FS部分和R的剩余三位。然后,在与降低的复数精度相对应的输出寄存器中,除了仅累加精度的希望位之外,还执行实数迭代,并且使用与R>18相比更早的终止标准。例如,R>9可以满足。
用于实数和复数对数运算的共用ALU实数和复数可以用于表示在单一系统内的各种信号。同样,常规处理器可以包括多个独立ALU,一个用于执行复数对数算法,而另一个用于执行实数对数算法。然而,两个独立ALU占用相当大的硅空间。而且,在某些情况下,有抑制性的是这种ALU可能需要大查寻表。因此,利用如下单一ALU是有益的,所述单一ALU能够利用合理大小的查寻表来执行实数和复数对数算法图8例示了用于执行实数和复数对数算法的一示例性ALU200。ALU200包括输入累加器210、查寻控制器220,以及输出累加器230。一般来说,输入累加器210计算两个实数或复数输入之间的差,而查寻控制器220和输出累加器230基于所述输入利用实数查寻表或复数查寻表,基于输入累加器210的实数或复数输出集中生成输出对数。
将要加入或减去的以对数格式表示的两个实数或复数A和B连续提交给输入累加器210。当选通脉冲第一次出现时,ALU 200把第一个数A加载到输入累加器210和输出累加器230中。接着将第二个数B(其具有角度部分θ或针对减法而改变180度的关联符号)提交给输入累加器210。
当选通脉冲第二次出现时,输入累加器210执行A-B。如果存在表示B的对数幅值大于A的对数幅值的下溢,则输入累加器210存储并输出值X=B-A,并且向输出累加器230发送借位脉冲。该借位脉冲使输出累加器230加载B来重写A,所述B包括其关联的修改或未修改符号(或在复数情况下的角度)在内。然而,如果不存在下溢,则输入累加器存储并输出值X=A-B。由此,输出累计器230保持A和B中的较大者,同时输入累加器210保持|A-B|。在前述针对实数的公式中,量X等于量r,而在前述针对复数的公式中,量X等于量Z。
基于X,查寻控制器220确定两个输出,部分输出L和修正输出Y。查寻控制器220将部分输出L连同ADD脉冲一起输出到输出累加器230,使得部分输出L与输出累加器230的现有内容累加。查寻控制器230将修正输出Y连同ADD脉冲一起输出到输出累加器230,使得Y与输入累加器210的现有内容累加,由此生成新的值X。重复该循环,直到Y满足或超出预定值为止。一旦Y满足或超出预定值,就停止循环,查寻控制器220生成如下READY信号,该READY信号表示所希望的回答可从输出累加器230获得作为输出C,接着,ALU 200的状态返回初始状态,在初始状态,等待新的一对输入值A和B。
图9提供了针对实数或复数对数算法运算的一个示例性查寻控制器220的附加细节。查寻控制器220包括F表222、G表224、合并器226,以及序列器228。F表222和G表224都包括用于确定复数的对数的复数查寻表和/或用于确定实数的对数的实数查寻表。虽然图9所例示的F表222和G表224包括复数和实数查寻表两者,但是,本领域技术人员应当理解,F表222和G表224也可仅包括复数和实数查寻表之一。
当把第一个32位对数量A施加至累加器210和230时,向序列器228施加起始脉冲。序列器228向输入累加器210提供加载1脉冲,而向输出累加器230提供加载2脉冲,使它们存储该32位A量。当把第二个32位对数量B施加至累加器210、230时,向序列器228施加第二选通脉冲。
序列器228向输入累加器210提供累加脉冲。如果输入累加器210输出“借位”脉冲,该“借位”脉冲表示B的对数幅值大于A的对数幅值,则序列器228向输出累加器230输出另一加载2脉冲,使其把包括数值B的符号或相位的B值存储在输出累加器230中,以重写A。对于实数来说,具有较大对数幅值的值的符号变为结果C的符号。输入累加器210输出对数幅值之间的差X的值,其中,如果A大于B,则X=A-B,或者如果B大于A,则X=B-A,所以,X总是正的。把X的最高有效位XM施加至F查寻表222,而把X的最低有效位XL施加至G查寻表224。
对于实数来说,将输入累加器210的符号逻辑部分与数值A和B的符号进行XOR,以确定是应当使用查寻表222的Fa部分(相同符号暗示加)还是应当使用Fs部分(不同符号暗示减)。由此,符号的XOR形成针对F表222的附加地址位。
如果在输入累加器210中的值X没有超出停止阈值,则不向序列器228提供停止脉冲,并且序列器随后通过将累加脉冲发送到输入累加器210和输出累加器230,促使来自合并器226的值的累加F+G被输入到累加器210中,使得输出累加器230中累加部分输出L,和具有输入累加器210中的内容的修正输出的累加连续。
重复上述,直到输出累加器230指示其内容在值上满足或超出停止阈值为,通过向序列器228提供“停止”脉冲来停止,序列器228依据该“停止”脉冲生成“就绪”脉冲(该“就绪”脉冲表示输出累加器230中的值C是最终结果)并且本身返回起始状态。
在图9的装置中,查寻表222的Fs部分存储负值,该负值是在累加器210和230中适当地累加获得的,而不必分开表示进行的是对数加法还是对数减法。另外,为了节省存储所有Fs的符号位,当所有Fa值是正而所有Fs值是负时,可以从查寻表中省略Fs的符号位,并且可使用根据符号逻辑来提供的+/-位的值。对缺省符号位的Fs的真负值进行存储与求反值和存储正值不同,必须接着将其从输出累加器230和合并器226中减去。当考虑查寻表大小压缩时,应当看到,后者具有优势。在U.S.专利申请No.(代理案卷No.4015-5288)中进一步论述了查寻表大小压缩,通过引用将其合并于此。
可想到的在执行期间的其它变化,包括使合并器226的输出值Y成为负的F+G,以使其可从输入累加器210中减去,由此,消除在加命令与减命令之间区分输入累加器210的需要。因为负是补码加1,所以当存储全部缩减一个最低有效位的G表224值时,其可利用补码输出来完成。然而,优选的是,不这样修改G表224的值,以便G表224可以通用于其它情况。
图10示出了ALU 200中的复数运算的更多细节。对于复数值来说,输入累加器210包括两个独立部分,即R部210A和θ部210B。如果防止来自输入累加器的θ部210B的进位输出传送到R部210A中,则可把用于实数算法的同一输入累加器210用于复数算法,或者在θ第一位序的情况下反之亦然。
具有重大意义的是,寻址复数F表222的位部分来自θ并且部分来自R。如果θ占用在实数情况下由R的LSB占用的位置,则对于复数运算来说,必须改变输入累加器与F表222之间的连接。其对于G表224来说也是真。这是一小麻烦,其可利用一组选择器开关(未示出)来执行,该选择器开关与实数或复数运算无关地从输入累加器210选择恰当的位,以连接至G和F表的地址输入。还可想到一另选解决方案输入累加器210与F和G表之间针对实数和复数运算的连接可以保持相同,其需要交叉R和θ的位分配。由此,在此执行中,θ的最高有效位将与R的最低有效位交换位置,以使R和θ的最高有效位占用在实数情况下由R的最高有效位占用的位位置,而使R和θ的最低有效位占用在实数情况下由R的最低有效位占用的位位置。为了保持所连接的连接的R位使得形成R加法器226A,同样地保持所连接的θ位以形成独立的θ加法器226B,则与针对实数情况相比,针对复数来说,需要对三个加法器级的进位位进行重新路由。如果做到了这些,则避免了从实数到复数的连接交叉,又设置了输出累加器230和加法器226。这样还可确保F和G表的输出位可保持连接至加法器226和累加器230中的相同目的地。
上述刚描述的另选解决方案,对于θ=π时的复数情况来说,在希望使用实数减法表Fs时缺少实用性。在该情况下,希望R的所有位都连接至F表222的地址输入,并且所有输出位也都连接至累加器230和加法器226的R加法器部。在这种情况下,很难避免使用重新路由开关。如果θ=π的情况不需要迭代处理,即,在实数Fs表222中通过单一查寻进行处理,则避免了加法器位的重新路由。
针对复数θ=π的情况,在利用实数减法表的过程中讨论要处理的另一位对准是,R的到二进制小数点的左边的位数,与复数的实数(5位)相比少一位(4位)。另外,实数迭代使用例如按格式5.9的最高有效位寻址的F表222,而为了在不需要迭代的情况下处理针对复数的θ=π的情况,将需要利用按格式4.12的不同值R的整个16位来寻址F表222,其需要不同大小的表。
图11示出了针对实数和复数的不同可能位分配。图11A示出了针对实数对数值的1到32位的直接分配,其开始于位置1中的标记位S,后面是按格式8.23的31位对数幅值,并且示出了分隔成具有格式5.9的最高有效位XM和按格式0.14的最低有效位XL。下部示出了针对按格式5.12的对数幅值和按格式0.15的相角的位1-32的直接分配,并且将对数幅值分成按格式4.4的最高有效部分RM和最低有效8位RL,而将相位分成7位最高和7位最低有效部分,并单独示出了与π相对应的位。根据图11A,实数与复数之间的未对准数是显见的。例如,对数幅值的二进制小数点不在相同位置处,而且寻址F表222的位(针对实数的是XM而针对复数的是XM、θM)也不在相同的位置处。
图11B示出了其中二进制小数点分别对准实数和复数对数幅值的位分配。其仅关注于是否针对θ=π的复数情况尝试再使用实数Fs表222,和是否针对θ=0的复数情况尝试再使用实数Fa表222。然而,针对实数和复数的寻址F和G表的位仍旧不同。
图11C示出了针对实数和复数实现寻址F表222的相同位的位分配。针对实数算法,使15位地址在一起,连续设置符号位S和最高有效部分XM,以寻址Fa和G表,而在复数情况下,相同15位包括8位RM和7位θM。
同样地,由RL和θL组成的15位与XL的14位向交叠,其寻址G表224ROM。在实数情况下,由于其是复数表大小的一半,因此,当按实数寻址G表时,刚好忽略位数2。图11C还示出了最高有效和最低有效部分内的位序是任意的,但是在保持实数和复数运算之间不变化的重要性的前提下,可以选择位序以使得从一个加法器级到下一个的进位连接数最大化。
简化解决方案没有尝试把复数和实数F表222合并成一个大表,由此,在两种情况下必须使用相同地址位,但是必须使用针对实数和复数从输入累加器210选择的不同的,连接至恰当的地址位的独立表。另选的情况,可针对实数和复数使用多个独立地址解码器。另外,用于实数和复数的G表224可以是不同的表,或者至少不同的地址解码器。除了进一步考虑的θ=π的情况之外总大小保持大约与合并的表相同。θ=π的情况在对数幅值几乎相等,即,R几乎为零时才成为问题。因此,需要作为仅针对诸如0000.xxxxxxxxxxxx的R值的特殊情况来处理,即,在该情况中,不同R的最高有效4位为零。这仅需要4096字表,为了避免位线重新路由的复杂性以便能够使用实数Fs表222,这是值得的。给出查寻表占用硅芯片面积的最大比例,而且,相比而言,由累加器、加法器,以及其它外围逻辑占用的芯片面积较小,可以得出这样的结论,即,实数和复数的分开执行是逻辑的,所带来的益处是,因增加的处理速度导致处理器可以接着同时执行实数和复数运算。
当然,在不脱离本发明的实质特征的情况下,本发明可以采用除了在此具体阐述的方法之外的其它方法来执行。从任何角度都应将具体实施例看作例示性而非限制性的,并且旨在将落入所附权利要求的含义和等同范围内的所有改变都包含于此。
权利要求
1.一种用于计算输出对数的ALU,该ALU包括存储器,该储存器存储第一查寻表和第二查寻表,所述第一查寻表用于确定实数的对数,而所述第二查寻表用于确定复数的对数;和共用处理器,该共用处理器利用针对实数型输入运算数的所述第一查寻表和针对复数型输入运算数的所述第二查寻表,基于按对数格式表示的两个输入运算数生成输出对数。
2.根据权利要求1所述的ALU,其中,所述输出对数表示所述输入运算数之和的对数或所述输入运算数之差的对数。
3.根据权利要求1所述的ALU,其中,该ALU包括蝶式电路,所述蝶式电路被设置成,利用所述第一查寻表或所述第二查寻表同时生成所述输入运算数之差的对数和所述输入运算数之和的对数。
4.根据权利要求3所述的ALU,其中,所述蝶式电路包括第一合并器,该第一合并器用于合并选定的输入运算数与由所述第一查寻表或所述第二查寻表提供的差值,以生成所述输入运算数之差的对数;和第二合并器,该第二合并器用于合并所述选定的输入运算数与由所述第一查寻表或所述第二查寻表提供的和值,以生成所述输入运算数之和的对数。
5.根据权利要求1所述的ALU,其中,所述共用处理器包括查寻控制器,该查寻控制器被设置成,基于所述第一查寻表或所述第二查寻表来计算一个或更多个部分输出;和输出累加器,该输出累加器被设置成,基于所述部分输出来生成所述输出对数。
6.根据权利要求5所述的ALU,其中,用来生成所述输出对数的部分输出的数目是基于所述输出对数的希望精度的。
7.根据权利要求5所述的ALU,其中,所述共用处理器通过所述查寻控制器执行两次或更多次迭代,以确定所述输出对数,其中,每次迭代生成所述部分输出中的一个。
8.根据权利要求7所述的ALU,该ALU还包括输入累加器,该输入累加器被设置成,基于在前一迭代期间生成的所述部分输出来生成针对当前迭代的实数型输入或复数型输入。
9.根据权利要求7所述的ALU,其中,所述输出累加器基于选定的输入运算数和在每次迭代期间生成的所述部分输出来生成所述输出对数。
10.根据权利要求9所述的ALU,其中,所述共用处理器还包括选择电路,该选择电路被设置成,选择具有最大幅值的输入运算数。
11.根据权利要求5所述的ALU,其中,所述查寻控制器包括多级流水线,并且其中,所述多级流水线中的各级都生成所述部分输出中的一个。
12.根据权利要求11所述的ALU,其中,所述流水线中的各级都存储所述第一查寻表的选定部分和所述第二查寻表的选定部分。
13.根据权利要求12所述的ALU,其中,所述流水线中的至少一级利用实数级输入来执行所述第一查寻表的所述选定部分,或者利用复数级输入来执行所述第二查寻表的所述选定部分,从而生成所述部分输出中的一个。
14.根据权利要求1所述的ALU,其中,所述复数型输入运算数各包括幅值部分和相位部分。
15.根据权利要求14所述的ALU,该ALU还包括输入累加器,该输入累加器包括幅值累加器,该幅值累加器用于基于所述复数型输入运算数的幅值部分来生成复数型输入的幅值部分;和相位累加器,该相位累加器用于基于所述复数型输入运算数的相位部分来生成所述复数型输入的相位部分。
16.一种用于在ALU中计算输出对数的方法,该方法包括以下步骤第一查寻表存储步骤,该第一查寻表存储步骤存储用于确定实数的对数的第一查寻表;第二查寻表存储步骤,该第二查寻表存储步骤存储用于确定复数的对数的第二查寻表;以及输出对数生成步骤,该输出对数生成步骤利用针对实数型输入运算数的所述第一查寻表和针对复数型输入运算数的所述第二查寻表,在共用处理器中基于按对数格式表示的两个输入运算数生成输出对数。
17.根据权利要求16所述的方法,其中,所述输出对数生成步骤包括基于所述输入运算数之和或所述输入运算数之差生成所述输出对数的步骤。
18.根据权利要求16所述的方法,其中,所述输出对数生成步骤包括同时生成输出对数的步骤,该同时生成输出对数的步骤利用所述第一查寻表或所述第二查寻表,同时生成所述输入运算数之差的输出对数并生成所述输入运算数之和的输出对数。
19.根据权利要求18所述的方法,其中,所述同时生成输出对数的步骤包括以下步骤基于所述输入运算数之间的比较来选择输入运算数;合并选定的输入运算数与由所述第一查寻表或所述第二查寻表提供的差值,以生成所述输入运算数之差的输出对数;以及合并所述选定的输入运算数与由所述第一查寻表或所述第二查寻表提供的和值,以生成所述输入运算数之和的输出对数。
20.根据权利要求16所述的方法,其中,所述输出对数生成步骤包括以下步骤基于所述第一查寻表或所述第二查寻表来计算一个或更多个部分输出;和基于所述部分输出生成所述输出对数。
21.根据权利要求20所述的方法,该方法还包括迭代执行步骤,该迭代执行步骤执行两次或更多次迭代,以确定所述输出对数,其中,每次迭代生成所述部分输出中的一个。
22.根据权利要求21所述的方法,该方法还包括输入生成步骤,该输入生成步骤基于在前一迭代期间生成的部分输出来生成针对当前迭代的输入。
23.根据权利要求20所述的方法,其中,所述输出对数生成步骤包括基于在多级流水线中的各级中生成的部分输出来生成所述输出对数。
24.根据权利要求23所述的方法,该方法还包括选定部分存储步骤,该选定部分存储步骤针对所述多级流水线中的各级存储所述第一查寻表的选定部分和所述第二查寻表的选定部分。
25.根据权利要求24所述的方法,该方法还包括选定部分执行步骤,该选定部分执行步骤在所述流水线中的至少一级中,分别基于实数级输入或复数级输入来执行所述第一查寻表的所述选定部分或所述第二查寻表的所述选定部分,以生成所述部分输出中的一个。
26.根据权利要求16所述的方法,其中,所述复数型输入运算数各包括幅值部分和相位部分。
27.根据权利要求26所述的方法,该方法还包括以下步骤幅值部分生成步骤,该幅值部分生成步骤基于所述复数型输入运算数的幅值部分来生成复数型输入的幅值部分;和相位部分生成步骤,该相位部分生成步骤基于所述复数型输入运算数的相位部分来生成所述复数型输入的相位部分。
28.一种用于计算复数的输出对数的ALU,该ALU包括存储器,该储存器用于存储查寻表,该查寻表用于确定复数的对数和处理器,该处理器利用存储的查寻表,生成按对数极坐标格式表示的复数型输入运算数的算术合并的输出对数。
29.根据权利要求28所述的ALU,其中,所述处理器包括蝶式电路,该蝶式电路被设置成,基于所述查寻表同时计算所述复数型输入运算数之差的输出对数和所述复数型输入运算数之和的输出对数。
30.根据权利要求29所述的ALU,其中,所述蝶式电路包括第一合并器,该第一合并器用于合并选定的输入运算数与由所述查寻表提供的差值,以生成所述复数型输入运算数之差的输出对数;和第二合并器,该第二合并器用于合并所述选定的输入运算数与由所述查寻表提供的和值,以生成所述复数型输入运算数之和的输出对数。
31.根据权利要求28所述的ALU,其中,所述处理器包括查寻控制器,该查寻控制器被设置成,基于所述查寻表来计算一个或更多个部分输出;和输出累加器,该输出累加器被设置成,基于所述部分输出来生成所述输出对数。
32.根据权利要求31所述的ALU,其中,所述处理器通过所述查寻控制器执行两次或更多次迭代,以生成所述输出对数,其中,每次迭代生成所述部分输出中的一个。
33.根据权利要求32所述的ALU,该ALU还包括输入累加器,该输入累加器被设置成,基于在前一迭代期间生成的部分输出来生成针对当前迭代的复数型输入。
34.根据权利要求31所述的ALU,其中,所述查寻控制器包括多级流水线,并且其中,所述多级流水线中的各级都生成所述部分输出中的一个。
35.根据权利要求28所述的ALU,其中,所述复数型输入运算数包括幅值部分和相位部分。
36.根据权利要求35所述的ALU,该ALU还包括输入累加器,该输入累加器包括幅值累加器,该幅值累加器用于基于所述复数型输入运算数的幅值部分来生成复数型输入的幅值部分;和相位累加器,该相位累加器用于基于所述复数型输入运算数的相位部分来生成所述复数型输入的相位部分。
37.根据权利要求35所述的ALU,其中,所述相位部分包括所述复数型输入的最高有效部分,并且其中,所述幅值部分包括所述复数型输入的最低有效部分。
38.根据权利要求37所述的ALU,其中,所述查寻表包括幅值查寻表和相位查寻表。
39.根据权利要求38所述的ALU,其中,所述复数型输入的所述最高有效部分寻址所述相位查寻表,并且其中,所述复数型输入的最低有效部分寻址所述幅值查寻表。
40.一种计算复数的输出对数的方法,该方法包括以下步骤查寻表存储步骤,该查寻表存储步骤存储用于确定按对数极坐标格式表示的复数的对数的查寻表;和输出对数生成步骤,该输出对数生成步骤利用存储的查寻表,基于按对数极坐标格式表示的复数型输入运算数来生成输出对数。
41.根据权利要求40所述的方法,其中,所述输出对数生成步骤包括以下步骤基于所述查寻表,同时计算所述复数型输入运算数之差的输出对数和所述复数型输入运算数之和的输出对数。
42.根据权利要求40所述的方法,其中,所述输出对数生成步骤包括以下步骤基于所述查寻表计算一个或更多个部分输出;和基于所述部分输出生成所述输出对数。
43.根据权利要求42所述的方法,该方法还包括以下步骤执行两次或更多次迭代,以生成所述输出对数,其中,每次迭代生成所述部分输出中的一个。
44.根据权利要求43所述的方法,其中,所述输出对数生成步骤包括以下步骤执行多级流水线,以生成所述输出对数,其中,所述多级流水线中的各级都生成所述部分输出中的一个。
45.根据权利要求40所述的方法,该方法还包括以下步骤幅值部分生成步骤,该幅值部分生成步骤基于所述复数型输入运算数的幅值部分来生成复数型输入的幅值部分;和相位部分生成步骤,该相位部分生成步骤基于所述复数型输入运算数的相位部分来生成所述复数型输入的相位部分。
46.根据权利要求45所述的ALU,其中,所述相位部分包括所述复数型输入的最高有效部分,并且其中,所述幅值部分包括所述复数型输入的最低有效部分。
47.根据权利要求46所述的ALU,其中,所述查寻表包括幅值查寻表和相位查寻表。
48.根据权利要求47所述的ALU,该ALU还包括以下步骤利用所述复数型输入的所述最高有效部分寻址所述相位查寻表,而利用所述复数型输入的所述最低有效部分寻址所述幅值查寻表。
全文摘要
本发明涉及复数对数运算ALU,描述了用于对按对数格式表示的实数和/或复数执行对数运算的方法和装置。在一个示范实施例中,ALU对按对数极坐标格式表示的复数执行对数运算。根据该实施例,ALU中的存储器存储用来确定复数的对数的查寻表,而ALU中的处理器利用存储的查寻表,基于按对数极坐标格式表示的复数型输入运算数生成输出对数。在另一示范实施例中,ALU对按对数格式表示的实数和复数执行对数运算。在该实施例中,存储器存储两个查寻表,一个用于确定实数的对数,而另一个用于确定复数的对数,而处理器分别利用实数查寻表或复数查寻表,基于按对数格式表示的实数型输入运算数或复数型输入运算数,来生成输出对数。
文档编号G06F7/48GK1965292SQ200580018166
公开日2007年5月16日 申请日期2005年6月2日 优先权日2004年6月4日
发明者保罗·威尔金森·登特 申请人:Lm爱立信电话有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1