供滤波器中系数应用的多端口寄存器堆 本发明涉及有限脉冲响应(FIR)滤波器,更具体地涉及应用时间复用乘法器的、每个乘法器具有多个系数的自适应FIR滤波器。
先有技术的有限脉冲响应(FIR)滤波器中使用了固定延时线,用于使系数重复循环。此类延时线的实现应用了一系列的边沿触发式触发器。结果,在工作中先有技术的延时线消耗的功率比之所希望的要大。
在转让于同一受让人、作为临时申请的共同未决的美国专利申请序号NO.08/937665中,使用了多端口寄存器堆来实现系数存储,在滤波器工作所必需的系数上提供出延时。多端口寄存器堆通常是一个小存储器,例如存储容量为4个字,具有至少一个读出端口和一个写入端口。写入多端口寄存器堆的数据可以以任何所需的次序从其中读出。多端口寄存器堆可以有附加的输出端口,从那里也可以以任何所需的次序从其中读出所存储的数据,其次序与任何别的端口上的次序是不相关的。至于相乘系数,每个多端口寄存器堆将数据从一个输出端口馈送至FIR滤波器有关电路级的乘-加部分上。至于自适应滤滤器,由每个多端口寄存器堆将另一个输出端来的数据馈送至供该系数使用的更新单元上。应当指出,这些输出端口可以是相同的,而如果不是这样,则供给它们的数据可以是相同的。关于系数的应用,并不需要象共同未决的专利申请中所述地使多端口寄存器堆工作于通透模式。
当FIE滤波器为具有可更新的系数的自适应滤波器时,必需有一个更新单元来计算新的系数值。这样一种更新单元结合进或关联于一个上溢/下溢检测和/或饱和单元,它用来防止滤波器中毁灭性的误码,当发生上溢或下溢时这种误码可能发生。这种误码之所以会发生,是因为应用二进制数目实施运算中常规技术之特性的缘故。例如,当应用2的补码形式表示的两个大的正数值相加时,结果会呈现为一个负数值,这显然是错误的。一个上溢/下溢检测和/或饱和单元防止了这种问题,方法是依据其具体情况给出下列之一作为输出:a)标志符,指明是否已发生上溢或下溢;b)代表最大正值或负值的一个值,它能表示为一个饱和值;或者c)计算的实际结果。该上溢/下溢检测和/或饱和单元位于系数更新电路的关键通路中,也即位于确定最大速度的通路中,更新可在这个速度上实施。因此,可以实施的上溢/下溢检测和/或饱和处理的速度限制了更新处理的速度。
已经认识到,在自适应FIR滤波器中存储系数,可以应用改进的多端口寄存器堆。按照本发明的原理,对先有的共同未决的专利申请中多端口寄存器堆的改进,借助于在这里引入计算能力,例如对系数值或其导数执行计算的能力,或者是对其上进行的操作进行控制的能力。按照本发明的一个方面,多端口寄存器堆在这里引入一个上溢/下溢检测和/或饱和单元。按照本发明的另一个方面,多端口寄存器堆在这里引入一个专门的编码器,例如所谓的“Booth”编码器,它用来加速乘法处理。按照本发明的再一个方面,多端口寄存器堆在这里引入一个变换器,例如2的补码变换为符号-量值码的变换器,用以改变系数的表示法。按照本发明的一个方面,在多端口寄存器堆中执行的全部计算是在滤波或者系数更新的关键通路之外实施的。应用这样改进的多端口寄存器堆的优点在于,比之先有的共同未决的专利申请,可以使自适应FIR滤波器的构成做到,工作得较快些,且功耗较低些。
图1示出按照本发明之原理地一个示例性多端口寄存器堆,它可以应用来存储有限脉冲响应(FIR)滤波器中的系数;
图2示出图1中多端口寄存器堆的一个简化图,包括一个系数更新单元和一个系数时钟;
图3示出一个定时图,应用于图1中所示的多端口寄存器堆的简化图的工作;
图4示出供图1中多端口寄存器堆内应用的一个上溢/下溢检测和/或饱和单元的实施例。
图1示出按照本发明之原理的一个示例性多端口寄存器堆,它可以应用来存储有限脉冲响应(FIR)滤波器电路级中的系数。多端口寄存器堆通常是一个小存储器,例如存储容量为4个字,具有至少一个读出端口和一个写入端口。写入多端口寄存器堆的数据可以以任何所需的次序从其中读出。多端口寄存器堆可以有附加的输出端口,从那里也可以以任何所需的次序读出其中存储的数据,其次序与任何别的输出端口上的读出次序是不相关的。
更具体地,图1示出多端口寄存器堆101,它包括:具有存储单元103-1至103-H的存储单元103,计算单元105,以及具有锁存器107-1至107-K的锁存器107。
尽管随滤波器设计者的意愿可以任意地选择,但多端口寄存器堆内存储单元的数目H通常是一个小数目,例如是4。在诸如应用于宽带访问的调制解调器中,可见到处理的信号所具有的样值速率是在系统内最快时钟频率的量级之内,相比于其它的FIR滤波器实施方法,小数值的H可以使FIR滤波器的实施更高效。
包括有N条数据线的数据通过写入端口W写入多端口寄存器堆101。对于写入端口W上出现的数据,写入存储单元103中的具体哪一个存储单元,由写入地址端口WA予以规定。
数据从多端口寄存器堆101中的读出可经由任一个读出端口R,包括读出端口R
1至R
K。读出端口R
1至R
K之每一个中包括有相应数目的数据线M
1至M
K。需要时,可以从多端口寄存器堆101中读出所存储值的低一些精确度的值。从存储单元103的特定单元中读出的数据可呈现于读出端口R
1至R
K之任一个上,具体由一个地址来规定,它以数号之类加给读出地址端口RA
1至RA
K中相应的一个上。并不需要读出使能信号来使一个输出呈现于读出端口R
1至R
K中的任一个上。简单地给出合适的读出地址就足以产生出相应的输出。通常,写入地址WA和读出地址RA
1至RA
K有着相同的地址线号码L。
数据何时和是否写入多端口寄存器堆101,取决于写入使能信号WE的值。WE为第一值时数据可写入多端口寄存器堆101,WE为第一值的互补值时数据不写入多端口寄存器堆101。
在同一时间上可以向多端口寄存器堆101写入和从中读出数据。更具体地,在同一时间上,可以对存储单元103中特定的同一个单元进行写入和读出。因此,在向存储单元103中一个特定的单元写入第一值的同时,就从这同一个特定的存储单元上可以读出一个不同的值,供给读出端口R
1至R
K中的一个或几个上。
锁存器107为常规电平敏感的锁存器,诸如1992年Addison Wesley出版的N.Weste和K.Eshraghian所著Principles of CMOS VLSIDesign(CMOS VLSI设计原理)第二版第19-21页上叙述的,在这里全面地提出来作为参考。因此,存储单元103之任一个可以起主锁存器的作用,而锁存器107之任一个可以起从锁存器的作用,计算单元105插入于它们之间。
图2示出多端口寄存器堆101的简化图,只示出了两个存储单元103,仅具有单一个读出端口和单一个写入端口。并示出了时钟信号(CLK),它用来控制存储单元103、锁存器107和系数更新单元109之间的工作和数据传输。图2中,存储单元103为正电平敏感的,锁存器107为负电平敏感的。总起来,它们组成一个负边沿触发式触发器。
按照本发明之原理,计算单元105至少采用一个系数值,并对它实施某种形式的变换,或者不加改变地通过该系数值。计算单元105插入于存储单元103与锁存器107之间,因而计算单元105可以:a)从存储单元103上接收系数值;b)将其输出供给至锁存器107之一个或几个上。
按照本发明的一个方面,在多端口寄存器堆内执行的全部计算是在滤波或系数更新的关键通路之外实现的。计算单元105位于滤波和系数更新的关键通路之外,因为它执行其功能是在所谓的“静寂时间”内进行的,静寂时间处在主锁存器(它是当前在这里于存储单元103中被选址到的)包含所存储的信息与从锁存器(在这里为锁存器107)锁存由主锁存器来的信息的时间之间。之所以能做到这一点,是因为供给至读出地址端口RA
1至RA
K的读出地址信号早于供给至锁存器107的时钟信号。
图3示出图2中所示多端口寄存器堆101简化图之工作的定时图。应当指出,信号CLK、RA和WA均加到多端口寄存器堆101上,才产生出输出信号。加到多端口寄存器堆101上的读出地址信号RA比写入地址信号WA早半个周期。信号RA在信号CLK每一正跳变边沿之后的很短时间内发生变化,对信号RA起响应,数据自存储单元103中给出,在信号CLK的负边沿到来之前由计算单元105予以处理。应当指出,所谓很短时间内是意味着有足够的时间供计算单元105完成其所需要的计算。
在信号CLK的负边沿上,锁存器107将计算单元105供给出作为输出的已处理数据予以锁存。这个数据随后可作为多端口寄存器堆101的输出供应用。这个数据供给到更新单元109上,并供给到滤波器的乘法器(未示出)上,而滤波器是由应用着的多端口寄存器堆101来实现的。在下一个正跳变边沿的很短时间内,信号RA发生变化,从存储单元103之一中读出另一个系数。与此同时,在前一个负边沿时锁存了的输出数据仍然可从锁存器107中取出应用。在下一个信号CLK的负边沿上,由更新单元109供给出作为输出的已更新数据写回进存储单元103中由WA规定的一个单元内,这个变化只是在信号CLK负边沿之后的很短时间内发生的。
本发明的一个实施例中,计算单元105是一个上溢/下溢检测和/或饱和单元。图4示出一个示例性实施例,其中,计算单元105起上溢/下溢检测和/或饱和单元211的作用。上溢/下溢检测和/或饱和单元211中包括上溢/下溢检测单元501和它所连接的饱和检测单元601。
上溢/下溢检测单元501例如能够以通常的、周知的方式工作,诸如确定出接收到的具有G比特精度的数值输入能否以Y比特精度来代表,这里Y值小于G值。如果接收到的输入是具有G比特精度的一个数值,而该输入能够以Y比特的精度来表示,则可判定不发生下溢或上溢。所以,所以输入数字的值由上溢/下溢检测和/或饱和单元的输出给出,但只采用Y比特的精度。另一种情况下,如果该数字的量值对于只以Y比特的精度来表示显得过大,则判定已发生了下溢或上溢。当发生上溢或下溢时,使相应的标志符置位,并作为一个输出供给出。发生的是上溢还是下溢的判定,借助于确定输入是否大于由Y比特精度所能表示的最大值,或者是否小于由Y比特精度所能表示的最小值。
饱和检测单元601例如可以以通常的、周知的方式工作。例如,饱和检测单元601接收一个Y比特精度的数字作为输入,并接收上溢标志符和下溢标志符的数值。如果上溢标志符置位,则饱和检测单元601给出由Y比特精度所能表示的最大值作为输出。如果下溢标志符置位,则饱和检测单元601给出由Y比特精度所能表示的最小值作为输出。如果上溢标志符和下溢标志符都不置位,则饱和检测单元601将输入值作为输出,但只采用Y比特的精度。
上溢/下溢检测和/或饱和单元211的最终工作是这样的,它接收一个具有G比特精度的数字输入,给出的输出为:a)当G能够以Y比特精度表示而Y小于G时,输出是以Y比特精度表示的G的实际值;b)当该数字的量值只以Y比特精度来表示显得量值过大时,输出是以Y比特精度可表示的最大值和最小值。作为输出给出的是最大值还是最小值,取决于输入是否大于由Y比特精度所能表示的最大值,或者是否小于由Y比特精度所能表示的的最小值。
按照本发明的一个方面,上溢标志符和/或下溢标志符可以自计算单元105给出作为输出,它们甚至可以作为来自多端口寄存器堆101的输出向外面供给。如果上溢标志符和/或下溢标志符的值自多端口寄存器堆101上向外面给出,则必须使锁存器107能够增大,以便也能够传送这种信息。
本发明的另一个实施例中,计算单元105是一个数据变换器。例如,计算单元105可以是一个专门的编码器,譬如是所谓的“Booth”编码器,它应用来加速乘法处理。Booth编码器说明于1992年AddisonWesley出版的、由N.Weste和K.Eshraghian所著Principles of CMOSVLSI Design第二版的547-554页中,在此处全面地引入作为参考。应当指出,Booth编码器在这里称为Booth记录器。
本发明的另一个示例性实施例中,多端口寄存器堆在此引入一个变换器,用以改变系数的表示法,例如是将2的补码变换成符号-量值码的变换器。
应当指出,计算单元105可以实施多种功能,而这些功能可以在不同的系数上实行,或是实质上在同一时间内进行,或是顺序地在静寂时间内进行、直至计算完成。所实施的功能也可以在逐个时钟周期上改变。
上面所述仅仅示例说明了本发明的原理。因之,本技术领域内的熟练人员知道,可设想出各种安排,尽管它们未明显地在此叙述到或者加以示明,但都实施了本发明,并包括在它的精神实质和范畴之内。