目录
布斯乘法器(booth)
在设计乘法器时,我们希望面积更小,延时更小。布斯编码可以使延时更小。方法是减少累加的次数。
基-n是什么意思?对于kbits数据,通过某种编码仍然转成kbits,那么编码后的数可称为基2数,该编码叫做基2编码。
对于kbits数据,通过某种编码仍然转成k/2bits,那么编码后的数可称为基4数,该编码叫做基4编码。
对于kbits数据,通过某种编码仍然转成k/3bits,那么编码后的数可称为基8数,该编码叫做基8编码。
基2乘法器 radix-2
看下面这个公式
例如无符号数 1111 = 15 = 2^3 + 2^ 2 + 2 ^ 1 + 2 ^ 0 = 2 ^ 4 - 2 ^ 0 = 16 - 1 = 15
例如无符号数 1110 = 14 = 2^3 + 2^ 2 + 2 ^ 1 = 2 ^ 4 - 2 ^ 1 = 16 - 2 = 14
booth编码可以缩短带有一连串1的数的计算
对于任意的二进制数,可以通过如下对应关系进行二进制编码。要得到yi,需要同时判断xi和xi-1。例如判断y0,需要同时判断x0及其后一个数x-1,因为没有x-1,所以用0补。
需要注意的是:如果是无符号数,kbits数据布斯编码后为k+1bits
如果是有符号数,kbits数据布斯编码后为kbits
例如4bit无符号 1111 通过布斯编码后得到5bit 1000-1
例如4bit无符号 0111 通过布斯编码后得到5bit 0100-1
例如4bit有符号 1111 通过布斯编码后得到4bit 000-1
例如4bit有符号 0111 通过布斯编码后得到4bit 100-1
布斯编码每一位都有可能是0,-1,1,因此没有有符号或者无符号之分。
基2布斯编码器实际上不会减小乘法器面积或者延时,只是为了能够理解基4乘法器
基4乘法器 radix-4
在介绍基4布斯乘法器之前,先看下另一种基4乘法器。
我们将任意二进制数两两编组,那么可能会得到 0,1,2,3。对于原来的4*4乘法器,本需要4次加法,现在只需要2次加法,大大减少了延时。对于编组后的值,0*a, 1*a,2*a(通过移位)都容易得到。3*a可以通过4*a-1*a来得到,本轮加法直接加-1*a,并产生一个进位。因此稍微改进下,将任意二进制数两两编码,得到0,1,2,-1。在设计乘法器时,如果检测到-1,那么产生一个进位。
还有一种情况也会产生进位,那就是上一轮编码产生了一个进位,当前轮编码为3*a,怎么办呢?发现3*a + 1*a = 4*a,那么本轮加法可以直接加0*a,并产生一个进位。
接下来介绍基4布斯乘法器。该原理就是将[0,3]转成[-2,2]。0-3是4个数,-2-2是5个数,怎么对应?答案是参考前一个数,也就是说总共参考3bits。基4布斯编码表如下。先用xi+1与xi产生yi+1,xi与xi-1产生yi,再用yi+1与yi产生zi/2。
-2*a,-1*a,0*a,1*a, 2*a都可以通过移位来实现。
看如下一个无符号数例子,通过基4布斯编码将16bits数转成9bits
如果将上面的数当成有符号数,通过基4布斯编码,将16bits数转成8bits