Booth编码以及运算实例

使用booth编码,可以极大的减少在数字电路中,部分积的计算个数。

Booth编码原则:

0 0 编码 0

0 1 编码 +1

1 0 编码 -1
1 1 编码 0

从上述编码原则中可以看出来,对于连续的1,可以变成0,而连续的1前后的0,可以分别变成1 -1,或者 -1 1,这样,就变成递增一位后(也就是变成两个数的加减)的加减,这就是减少运算的由来的原因。

如果还不理解,可以通俗的解释,不一定准确,就是说 8*7,因为7有很多个1,即0111,我们可以通过某种方式,将0111变成 (+1)00(-1),也是四位,四个bit,这样,需要连续的3个1,就变成了两个数的加减法,即首位的+1和末尾的-1,试想,当中间的1很多时候,依然是变成两个数的加减法,这样会大大减少运算量​。

编码时,现在待编码的后面补0,如下​:

例子:求 0111的booth编码

  0 1 1 1    0(最后的0是补的)
            

  根据编码规则,最后两位是 1 0(0是刚补的那个),因此编码为 -1,该 -1对应在 原编码 0111的bit0的1上,​然后依次类推。

下面给出了 两个数直接相乘以及利用booth相乘的运算过程,大家体会一下,可以看出,明显减少中间乘积项​。

运算实例中,也给出了 两个正数,一正一负相乘的过程,当有负数的时候,不论是直接相乘还是利用booth相乘,中间部分积不再是简单的直接相乘,而是要根据最终结果到底是正还是负,来判断,如果是负数,则要填写负数的补码,并且最终还要扩充符号位​。

Booth编码以及运算实例_第1张图片

Booth编码以及运算实例_第2张图片

你可能感兴趣的:(verilog)