具体实施方式
参照图1,示出了根据本发明的一个优选实施例的电路100的方框图。电路100可以被实现为乘法器电路。在一个例子中,该电路可以是标准带符号数字(CSD)的系数乘法器。电路100一般包含块(或电路)102、块(或电路)104以及块(或电路)106。块102可以被实现为地址生成器。块104可以被实现为复用器(multiplexer)块(或部分)。块106可以被实现为加法器部分。在一个例子中,块106可以被实现为乘积/项加法器电路。
复用器部分104一般包含多个子复用器110a-110n以及查找表112。复用器110a-110n的具体个数可以变化以满足特定实现的设计标准。加法器电路106一般包含多个舍入器(rounder)块(或电路)120a-120n、多个转换器块(或电路)122a-122n、加法器电路124和查找表126。
乘法器电路100可以包含部分由复用器110a-110n的所选输入(例如MUXSEL)生成的系数组。在一个实现中,系数可以用标准带符号数字(CSD)表示。每个系数可以具有一个或多个项。系数一般存储在查找表112中。该系数与提供给复用器110a-110n的操作数OP相乘。操作数OP的移位值(例如如输入(OP,1)、(OP,2)、(OP,n-2)等所示)被提供给复用器110a-110n的各个输入。操作数OP的移位版本可以是操作数OP的算术移位的版本,其在图1中一般被示出具有前缀“arth sft”。操作数OP的每个移位值可以通过选择信号MUXSEL来选择。复用器110a-110n的每个提供通常等于操作数OP和系数的一个项相乘的乘积。在电路106将所有的乘积加在一起后,最终的乘积被提供作为输出信号(例如MUL)。系数被表示为多个2的乘幂分之一的数的和和/或差。一般来说,对于小于或等于1的系数,可以使用下列等式EQ1来计算系数:
其中,“符号”为+或-,“z”为0或1,而“M”是用于表示例如1/2M的系数的数,这是在某个实现中表示系数所需的理想的最小项。
例如,具有3个项的系数(例如系数0.929688)可以被表示为1-1/16-1/128(即1/20-1/24-1/27)。而系数0.263672可以被表示为1/4+1/64-1/512(即1/22+1/26-1/29)。通过使用这样的系统,可以通过使用小的数量的移位器和加法器来完成乘法操作。每个系数具有的2的乘幂分之一的项越多,则电路100能够实现的精度越高,但是这是建立在更高的门数的开销上的。2的乘幂分之一的项的个数依赖于特定设计实现能够容忍的误差。电路100允许在精度和门数之间的折衷。
在上面的例子中的系数根据下列表1可以被存储在查找表112和126中。
表1
|
系数1=0.9296881/20-1/24-1/27 |
系数2=0.2636721/22+1/26-1/29 |
符号0=>+1=>- |
项 |
符号0=>+1=>- |
项 |
1/2N |
N=0 |
0 |
1 |
0 |
0 |
N=1 |
0 |
0 |
0 |
0 |
N=2 |
0 |
0 |
0 |
1 |
N=3 |
0 |
0 |
0 |
0 |
N=4 | 1 | 1 | 0 | 0 |
N=5 |
0 |
0 |
0 |
0 |
N=6 | 0 | 0 | 0 | 1 |
N=7 | 1 | 1 | 0 | 0 |
N=8 |
0 |
0 |
0 |
0 |
N=9 |
0 |
0 |
1 |
1 |
N=10 |
0 |
0 |
0 |
0 |
在这样的例子中,可以使用的最后项是1/2
10(例如,其中M=10)。在“项”列中的‘1’指示需要特定的2的乘幂分之一的项。在“符号”列中的‘1’指示使用了负数值。而在“符号”列中的‘0’指示使用了正数值。
选择信号MUXSEL一般用于生成一个乘积,该乘积等于操作数和系数的一个无符号项相乘。一般根据该系数的一个特定的2的乘幂分之一的项来选择操作数的特定的移位值。例如,在其中系数的项是1/4的情况下(例如1/22),则通过选择将操作数OP算术移位2位,乘积等于操作数乘以1/4(例如1/4*OP)。选择信号MUXSEL可以被提供给复用器110a-110n的每个的选择输入。选择信号MUXSEL可以被实现为多-位信号(multi-bit signal)。控制信号(例如SIGN)一般被提供给转换器122a-122n的每个的控制输入。信号SIGN可以被实现为多-位信号。用于生成信号MUXSEL和信号SIGN的值可以从表1中提取。对于上述系数,查找表112和126可以由下面的表2来表示:
表2
|
(表112)MUXSEL[11:0] |
(表126)SIGN[2:0] |
系数1 |
0000_0100_0111 |
011 |
系数2 |
0010_0110_1001 |
001 |
在这样的例子中,使用了三个2的乘幂分之一的数(也可以使用零)。在这样的例子中,可以实现三个复用器110a-110n。然而,实现的复用器110a-110n的具体个数可以变化以满足特定实现的设计标准。生成的项信号COMP1-COMP3的个数依赖于特定设计能够容忍的误差。一般来说,在乘法器电路100中的并行项信号COMP1-COMP3越多,则精度越高。
电路100的操作是操作数和系数相乘。在图1的情况中,系数可以不必是固定的,并且其可以根据在特定时间使用的特定系数而被加载数值。到复用器110a-110n的一个输入可以是操作数OP[k:0]。到复用器110a-110n的其它输入可以是算数右移位(例如arth sft(OP,1)),其中操作数OP[k:0]被右移N位,其中k大于等于N,并且N是一个整数。操作数的符号(即最高有效位)被扩充(extended)。
一般来说,K是最高有效位的指数。例如,如果操作数具有13位(OP[12:0],则K=12。M是表示系数所需的最小项的指数。例如如果最小项是1/2^9,则M等于9。在表1中,M=10。在表3的例子中,M=8。其独立于操作数的尺寸。N是在项中使用的指数和整数。其范围在该发明中为从0到M。
复用器110a-110n的每个可以向加法器部分106的不同的舍入器120a-120n提供移位值输出(例如,SFT1、SFT2、SFT3)。舍入器120a-120n可以操作无符号项。舍入器向每个移位值加入1/2k(例如通过向每个移位值加1,其中k是操作数OP的MSB的指数)。在多个算术移位后(例如,在1和M之间),一个负数可以全部由‘1’组成,这将得到-1(而不是非常小的负数)。得到全部‘1’所需的移位的特定次数可以变化。在某些情况下,3次移位可能是足够的。在其它的情况下,需要10次或更多次移位。舍入器向该数加入1/2k并且将全部为‘1’的数转换为0。
依赖于来自查找表126的SIGN的控制信号,舍入器120a-120n的输出上的值可以被转换器电路122a-122n反转(例如求反)。对全部的项信号COMP1、COMP2、COMP3求和以产生输出信号MUL。
当系数的值未知时可以使用电路100。根据在某些时间使用的系数,查找表112和126可以被加载数值。可以通过根据特定的设计规范(例如达到特定的容忍度)来添加分支或去掉分支来容易地修改产生最终乘积所添加的项的个数(例如复用器110a-110n,舍入器120a-120n等)。当每个时钟周期提供操作数OP[k:0]时可以使用电路100。结果在多个门延迟后可用并且结果可以在下一个时钟周期中使用。
参照图2,示出了具有可以使用多时钟周期优化的乘法器的电路100′的实现的图。当在操作数OP[k:0]为有效之后的下一时钟周期中不需要乘法结果时,或者当可能使用更快的时钟来执行乘法时,这样的实现可以被简化并且可以实现较低的门数。
在一个例子中,仅仅实现一个复用器110′、一个舍入器120′以及一个符号模块122′可能是足够的。到复用器110′的输入表示操作数OP[k:0]、操作数OP[k:0]的算术右移位和零。在这样的实现中,每个系数的项每次和操作数OP[k:0]相乘并且将乘积相加。当全部的乘积相加之后,最终乘积在输出MUL上可用。
根据来自查找表112′的选择信号MUXSEL,复用器110′的输出可以是操作数OP和一个或多个特定的无符号项的乘积。电路104′提供可以由电路106′舍入和求反的移位值信号(例如SFT)以生成项信号(例如COMP)。项信号COMP随后在下一个时钟沿之后被加入到总和。可以将加法器块140实现为计数器142、门144、复用器146、比较器148、加法器150和一个或多个触发器(或寄存器)152。门144可以被用于向复用器146提供选择信号。计数器142从0计数到C-1,其中C是用于表示特定系数的项的个数。在每个乘法的开始,计数器142为零并且复用器146的输出为零,使用加法器150将其加入到项信号COMP。寄存器152存储临时总和。在下一个时钟周期中,临时总和下一个项信号COMP相加。当计数器提供C-1时,比较器148提供被维持以复位计数器142的输出信号(例如CNTRST)。在C个周期后,最终乘积被提供作为乘法器输出MUL(例如寄存器152的输出)。
可以容易地修改为产生最终乘积所添加的项的个数来满足特定设计规范。这种修改可以通过改变加法器块140和查找表112′和126′的尺寸(即,类似于向一般实现添加分支或从一般实现去掉分支)来完成。
参照图3,示出了本发明的另一个例子。当系数固定时,可以实现优化以便减少门数。可以通过将项分组成互斥组来完成优化。由于CSD乘法器100″包含复用器110a″-110n″,其中每个复用器110a-110n提供系数(最终乘积)的无符号项,可以期望减少复用器110a″-110n″的每个的输入的个数。可以通过对复用器110a″-110n″之一使用尽可能多的‘移位N位’的输入并且在其它复用器110a″-110n″中不使用这些‘移位N位’的输入来实现优化。在一个优化实现中,所支持的‘移位N位’的输入被划分成不重复的组。组的个数可以根据每个系数的项的个数来确定。例如,在优化实现的情况中,如果每个系数具有两个2的乘幂分之一的项,并且M为7(例如1/27是用来表示该系数所需的最小项),则存在2个组和支持8个(即,N=0到N=7)算术移位输入。在这种情况下,每个组包含4个算术移位输入。
在优化较差的实现中,在一个以上的组中可能存在一个或多个算术移位输入的重复。优化或优化较差的实现依赖于系数本身。在某些情况下,有可能比其它情况更多地优化电路100″。然而,即使在优化较差的实现中(例如对某些输入的重复),总门数仍然低于电路100的实现。
图3说明了具有下面15个系数的例子,其中每个系数最多具有两个2的乘幂分之一的项,其中M为8:
C1=-1/25-1/27 |
C6=-1/28 |
C11=1/20-1/26 |
C2=-1/24-1/28 |
C7=1/23+1/25 |
C12=1/20 |
C3=-1/23+1/25 |
C8=1/21-1/23 |
C13=1/20-1/23 |
C4=-1/23+1/27 |
C9=1/21+1/23 |
C14=1/21+1/24 |
C5=-1/23+1/25 |
C10=1/20-1/23 |
C15=1/22-1/25 |
系数可以排列成如下面表3所示的表:
表3
|
系数 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
移位1/2n |
N=0 | | | | | | | | | |
1 |
1 |
1 |
1 | | |
N=1 | | | | | | | |
1 |
1 | | | | |
1 | |
N=2 | | | | | | | | | | | | | | |
1 |
N=3 | | |
-1 |
-1 |
-1 | |
1 |
-1 |
1 |
-1 | | |
-1 | | |
N=4 | |
-1 | | | | | | | | | | | |
1 | |
N=5 |
-1 | |
1 | |
1 | |
1 | | | | | | | |
-1 |
N=6 | | | | | | | | | | |
-1 | | | | |
N=7 |
-1 | | |
1 | | | | | | | | | | | |
N=8 | |
-1 | | | |
-1 | | | | | | | | | |
表3包含以CSD格式表示的15个系数。由于每个系数可以由至多两个2的乘幂分之一的项来表示,因此需要两个组。可以使用各种技术来将系数划分为互斥组。下面的流程说明了如何划分两个组的系数,但是该流程对于两个组以上也能够容易地实现:
1.选择一行并且将该行中的所有项标记为‘组A’。
2.对于所选行中的每个‘1’或‘-1’,将相同列中的其它项标记为‘组B’。
3.对于每个被标记为‘组B’的项,将相同行中的全部项也标记为‘组B’。
4.对于被标记为‘组B’的行中的每个‘1’或‘-1’,将相同列中的其它项都标记为‘组A’。
5.对于被标记为‘组A’的每个项,将相同行中的全部项也都标记为‘组A’。
6.对于被标记为‘组A’的行中的每个‘1’或‘-1’,将相同列中的其它项标记为‘组B’。
7.重复步骤3-6直到全部的行都被标记为‘组A’或是‘组B’或是两者为止。
8.如果一行被标记为‘组A’和‘组B’,则特定项在两个复用器中都被用作输入。
9.如果系数仅有一个项,则在另一个分支中应当提供零。将零而不是该项放置在另一个组中。
遵循这样的流程,表3中的项可以被如下划分:组1可以包含移位0、1、5、7、8。组2可以包含移位2、3、4、6、7和零。注意在这种分组中,‘移位7’存在于两个组中,而所有其它的‘移位N’的输入只存在于一个组中。
通过使用优化和将项划分为互斥组,每个复用器110a″-110n″的输入的个数和电路100相比减少了。查找表112″和126″更小并且可以使用更低的门数来实现。
下面的表4示出了查找表112″的一个例子:
表4
地址 |
MUXSEL[5:3] |
MUXSEL[2:0] |
0 |
100 |
010 |
1 |
010 |
100 |
2 |
001 |
010 |
3 |
001 |
011 |
4 |
001 |
010 |
5 |
101 |
100 |
6 |
001 |
010 |
7 |
001 |
001 |
8 |
001 |
001 |
9 |
001 |
000 |
a |
011 |
000 |
b |
101 |
000 |
c |
001 |
000 |
d |
010 |
001 |
e |
000 |
010 |
下面的表5说明了查找表126″的一个例子:
表5
地址 |
SIGN[1] |
SIGN[0] |
0 |
1 |
1 |
1 |
1 |
1 |
2 |
1 |
0 |
3 |
1 |
0 |
4 |
1 |
0 |
5 |
0 |
1 |
6 |
0 |
0 |
7 |
1 |
0 |
8 |
0 |
0 |
9 |
1 |
0 |
a |
1 |
0 |
b |
0 |
0 |
c |
1 |
0 |
d |
0 |
0 |
e |
0 |
1 |
图1-3中的例子可以用来减少实现乘法器所需的门数。可以添加项或者减少项来改变乘法器的精度。系数可以是可编程的或固定的。当系数是已知(或固定)的时,将2的乘幂分之一的项分组为互斥组可以显著地减少乘法器的门数。
本发明可以提供如下的舍入:
对于操作数OP[7:0]=10110001(其中K为7),舍入器如所示向该数加1:
10110001(舍入器的输入)+1
10110010(舍入器的输出)
一般来说,本发明可以用于加1/2^K,由于最高有效位具有1/2^0的权重,并且LSB当被表示为二进制数的分数时具有1/2^K的权重。MSB的指数N为0并且LSB的指数N为K。
在一个例子中,本发明可以在数字滤波器,诸如CDMA2000移动通信系统中的发射机或接收机滤波器中使用。然而,本发明可以被容易地归纳到其它的数字滤波器或应用。
本发明的各种信号一般是“通(on)”(例如数字HIGH,或1)或是“断(off)”(例如数字LOW,或0)。然而,可以相应调整(反转)信号的“通”(例如被维持(asserted))或是“断”(例如未被维持(de-asserted))状态的特定极性来满足特定实现的设计标准。此外,可以添加反相器来改变信号的特定极性。
虽然参照其优选实施例具体示出和说明了本发明,本领域的技术人员应当理解在不脱离本发明的主旨和范围的情况下可以进行各种形式和细节上的改变。