数字电路之乘法器(四)

目录

布斯乘法器(booth)

基2乘法器 radix-2

基4乘法器 radix-4


布斯乘法器(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

数字电路之乘法器(四)_第1张图片

例如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,并产生一个进位。

数字电路之乘法器(四)_第2张图片数字电路之乘法器(四)_第3张图片

接下来介绍基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张图片

看如下一个无符号数例子,通过基4布斯编码将16bits数转成9bits

如果将上面的数当成有符号数,通过基4布斯编码,将16bits数转成8bits

你可能感兴趣的:(数字电路设计,verilog,乘法器)