在通信系统中,经常会遇到多个数进行累加的情况。一般情况下,在更好的掌控时序的目标下,我们会选择用基于CSA结构的Wallace tree进行加法树压缩。基本上,参加运算的数都是有符号数,在这种情况下,不论进行累加的方法是选用Wallace tree也好,还是普通的两两相加也好,都会遇到相加过程中符号位扩展的问题,该问题不仅让设计很繁琐且易出错,而且带符号的移位也增加了加法器的位宽,增加了设计的总资源。那么可不可以在运算的过程中把有符号数也看成是无符号数,让其遵循跟无符号数做Wallace tree压缩或者普通的两两相加一样的规则呢?答案是肯定的。
一个M+1比特的有符号数的表示方法为:
其中ai表示A的二进制表示时的第i位。
则当N个同样位宽都为M+1比特的有符号数相加时.
其中ki表示为每个进行累加时的操作数的符号位,一共有N个,所以i从1到N。a1i表示为第一个操作数的非符号位,a2i表示为第二个操作数的非符号位,。。。。一直到第N个aNi,i从0到M-1。由上式可知,右边的连加可以作为无符号数处理,同样,我们可以处理等号右边的第一个算式,这个算式就是符号位。
在这种情况下,符号位的相加就可以拆分成两个部分,其中N*2M 是定值,ki上加一上划线代表ki的取反。因此符号位的累加结果可以提前知道,拆解成两部分,一部分是定值,一部分是每个有符号操作数的符号位取反的累加再移M位,然后就可以跟各操作数的非符号位一起进行累加运算,同时该运算遵循无符号位的加法树原则,节省了运算过程中进行带符号位扩展的资源。