1 功能概述
位处理单元(Bit Manipulation unit,BMU)总体结构如图1所示。可以看出,BMU主要由取指电路、移位数据处理电路、移位选择处理电路、桶形移位电路和输出电路等几部分组成。BMU的输入数据是36位的BMUi,经过处理后输出36位的数据BMUo作为DSP的一次运算结果。
本文设计的BMU是36位的,主要功能包括逻辑/算术移位、取指、归一化等,以下是对控制信号及相关功能较为详细的描述。
逻辑/算术左移 相应的控制信号是in arithshf,inleftshf,in_shift。将36位数据左移,低位补0;
逻辑右移 控制信号同上,他执行的是低32位数据右移,同时高位补0;
算术右移 控制信号如上,36位数据右移,高位由原最高位填充;
取指 控制信号是in_exp,取36位数据的指数,也即冗余的符号位的个数;
归一化 控制信号是in_norm,将输入数据进行归一化,得到去除冗余符号位后的结果。
指数提取的目的是进行类似于定点到浮点的数据转换。一个定点数可以用一个包含尾数和指数的浮点数来表示,这样可以提高
数据的表示范围,同时使得定点DSP具有某种浮点运算的能力。取指的结果相当于浮点数的指数,而归一化的结果可以看成浮点数的尾数。这使得定点DSP能在不增加浮点算法开销的情况下获得某些浮点DSP的能力。
2 单元电路设计
2.1 桶形移位器的设计
移位和归一化操作都需要用到桶形移位器,因此桶形移位器是BMU的核心单元。通常,桶形移位器可以实现逻辑左移、右移,算术左移、右移等,一般为了减少晶体管和连线的数目以节省面积,通常只实现左移或右移中的一种。本文中只采用左移操作来实现桶形移位。设36位移位数据为BMUi,36位移位选择信号为shfsel,当shfsel[i]为1时,桶形移位器的输入数据(即经过移位数据处理后得到的数据)左移i位。
下面是实现右移的原理:
BMUi从高位到低位依次是BMUi[35],BMUi[34],…,BMUi[1],BMUi[0],BMUi重复排列两次构成72位数据BMUi[35],BMUi[34],…,BMUi[1],BMUi[0],BMUi[35],BMUi[34],…,BMUi[1],BMUi[0],将72位数据经过移位(左移)后的高36位作为桶形移位器的输出。当要求桶形移位器实现右移shfnum位时,只要将该72位数据左移(36-shfnum)位即可实现。当然在实现移位操作时,必须对72位数据的高36位(右移时)或低36位(左移时)进行处理,这个处理过程在移位数据处理电路中将会介绍。同时由于36位的shfsel最多只能选择左移35位(shfsel[35]=1时),所以72位桶形移位器的输入数据的中间2位可以合并成1位,成为71位输入数据(此时实现右移操作时应该将71位数据左移35-shfnum位)。
移位的实现主要通过移位开关网络来实现。移位网络(以8位移位数据为例,则移位器的输入数据需要处理成15位)的结构如图2所示,他是一个NMOS传输管阵列,行数等于数据字长,列数等于最大的移位数。这个移位器结构的主要优点是数据信号至多只经过一个传输管,移位的传输延时理论上是一个常数,并且与移位位数及移位器大小无关,同时结构比较规整,利于后端版图实现。但是NMOS传输管在传输高电平时有一个阈值电压损耗,降低了电路的噪声容限,因此需要在输出端增加电平提升电路。
2.2 取指电路的设计
指数(exp)指的是冗余符号位的个数,他对于二进制补码数的归一化是十分重要的,归一化是将原二进制补码左移exp位(也就是将冗余的符号位移出),例如对于二进制补码00001100,他冗余的符号位个数是3,所以exp=3,归一化就是将00001100左移3位的过程,即变成01100000。对于本文设计的BMU,符号位是BMui[31],如果高5位不完全相同,则exp为负值。表1列举了几个数据的例子。
指数的提取过程分成两步:
(1)找出从BMUi[34]到BMUi[0]第一个与BMUi[35]不同的位i。
(2)对i进行编码,得到指数值。
第一步可以通过BMUi[35]与BMUi[34-i](i=0,1,…,33,34)异或来实现,找出第一个与BMUi[35]相异的位。同时本级产生的移位选择信号必须能够屏蔽下一级的移位选择信号信号。设BMUi[34-i]位与.BMUi[35]异或的结果记为XOR[i](i=0,1,2,…,33,34),前一级产生的屏蔽信号为C[i-1],这样第i位(i=0,1,2,…,33,34)的移位选择信号可以表示成XOR[i]和C[i-1]的函数,指数选择信号的最高位exp sel[35]可以表示成C[34]的反信号,这表示如果前35位屏蔽信号都为0,则屏蔽信号C[34]无效,此时exp sel[35]=1;如果前35位已经有一个为1,则说明36位二进制位中存在与BMUi[35]相异的位,此时屏蔽信号C[34]有效,exp-sel[35]被屏蔽。综上所述,得到第i级的指数选择信号exp-sel[i]和提供给下一级的屏蔽信号C[i]如下式所示,设计电路如图3所示。
由图3可以看出,屏蔽信号最多将会经过30几级传输门,是取指电路的关键路径,经过30几级的传输门后,信号驱动能力较弱,延时较大,不符合高性能DSP的要求。可以考虑将这最长路径打断,提高速度。类似与超前进位加法器的进位传递,将屏蔽信号链打断,每4位提供一个超前屏蔽信号,用来屏蔽下一级的移位选择信号,这样隔断了最长路径,提高了驱动能力,进而提高取指电路的工作速度。
指数选择信号产生后,只要经过相应的编码就可以得到相关的指数值(二进制补码),编码表如表2所示。
2.3 移位选择处理
移位选择处理是根据移位数目shfnum和指数exp来产生移位选择信号shfsel。移位选择处理过程主要是根据输入控制信号(in norm,in shift,in leftshf)以及移位数目shfnum和指数exp产生两种信号:最终左移信号left和最终左移数目leftnum。经过分析,left和leftnum都可以写成输入控制信号、指数exp和移位数目shfnum的逻辑表达式。进一步分析表明,可以用6 b(因为最终的移位选择信号是36位,至少需用6位来表示)的加法器来产生leftnum。最终移位信号left以及加法器的被加数addA、加数addB和进位c[i]的逻辑表达式(下式)。将leftnum进行译码后就可以得到移位选择信号shfsel。
2.4 移位数据处理
该处理过程主要是产生桶形移位器的71位输入数据D[70:0],将71位数据位分成两部分,一部分叫原数据位(36位,放
置经过处理的输入数据),另一部分叫扩展数据位(35位,放置考虑了逻辑右移等的扩展位)。由桶形移位器的原理可以知道,当最终左移信号有效(即left=1)时,D[70:35]为原数据位,由原36位输入数据填充,低35位D[34:0]为扩展数据位,用0来填充。而当最终左移信号无效(即left=0)时,此时需分两种情况考虑:
(1)如果是算术移位,则D[35:0]为原数据位,由原36位输入数据填充,而D[70:36]是扩展数据位,由符号位扩展形成;
(2)如果是逻辑移位,此时是将原36位数据的低32位右移,高位补0,鉴于此,需要将原36位数据的高4位清零后赋给原数据位D[35:0],高35位(即D[70:36])由0扩展形成。
由上述分析,移位数据处理电路可以分成3部分设计:原36位输入数据的高4位处理电路,扩展数据位电路,数据选择电路。分别设计这3部分电路如图4所示。
3 电路模拟
电路模拟工作在Sun Fire V880 Solaris系统环境下完成,模拟采用CSMC.5单阱CMOS工艺模型,环境温度25℃,工作电压为5 V。电路模拟采用VCS+NanoSim混合仿真的方法进行,由VerilogHDL提供激励给BMU的网表。模拟结果如图5所示:当bmui=0x1478f73时,exp=6,bmui=0x105fb31b4时,归一化后bmuo=417ecc6d,当bmui=0x603a09b12,shfnum=7左移时bmuo=ld04d8900。这表明BMU功能符合设计目标,同时测得BMU的最大延时是8.78 ns,即极限工作频率是114 MHz。NanoSim自动生成的状态记录文档指出本文设计的BMU共使用了4 527个晶体管。
4 结 语
本文设计了用于定点DSP的位处理单元电路,他有效地实现了逻辑/算术移位、取指、归一化等操作,解决了利用定点DSP进行浮点运算的问题。该BMU包括桶形移位器、取指电路、移位数据处理电路和移位选择处理电路等几部分。在设汁取指电路时,借鉴超前进位加法器中超前进位的概念.采用了超前屏蔽,将最长路径打断,提高了电路的工作速度。另外,该BMU仅包含4 527个晶体管,资源消耗较少,在5 V工作电压下,电路速度达到114 MHz,完全符合高性能DSP的要求。