乘法器——booth编码

    博主最近在学习加法器、乘法器、IEEE的浮点数标准,做为数字IC的基础。当看到booth编码的乘法器时,对booth编码不是很理解,而后在网上找各类理解,终于豁然开朗。现将一个很好的解释分享给你们,但愿能对你们有所帮助。算法

    首先,看看这几个公式:学习

    能够证实的是,这三个公式是相等的,一个有符号的二进制数的补码用公式1来表示,能够等价地写成公式2和公式3。编码

    布斯编码能够减小部分积的数目(即减小乘数中1的个数),用来计算有符号乘法,提升乘法运算的速度。spa

    

    如上图所示为二进制乘法的过程,也是符合咱们正常计算时的逻辑,咱们假设有一个8位乘数(Multiplier),它的二进制值为0111_1110,它将产生6行非零的部分积,由于它有6个非零值(即1)。若是咱们利用公式2将这个二进制值改成1000_00-10,其中低四位中的-1表示负1,能够证实两个值是相等的。能够这样简单理解,那就是如今原值得末尾加辅助位0,变为0111_1110_0,而后利用低位减去高位,即获得1000_00-10。这样一变换能够减小0的数目,从而减小加的次数,咱们只需相加两个部分积,可是终的加法器必须也能执行减法。这种形式的变换称为booth encoding(即booth编码),它保证了在每两个连续位中最多只有一个是1或-1。部分积数目的减小意味着相加次数的减小,从而加快了运算速度(并减小了面积)。从形式上来讲,这一变换至关于把乘数变换成一个四进制形式。3d

    最常常使用的是改进的booth编码。乘数按三位一组进行划分,相互重叠一位。其实就是把公式1重写为公式3。每一组按下表编码,并造成一个部分积。blog

    再考虑前面说起的8位二进制数0111_1110。从msb到lsb,能够把它分为三位一组首尾重叠的四组:01(1),11(1),11(1),10(0),末尾补了一个辅助位0。根据上表编码获得:10(2),00(0),00(0),-10(-2),或者表示为1000_000-10,这与前面获得结果是同样的。这时,乘2就是移位。因此布斯算法仅涉及加法,减法和移位操做。
    这样一来就很容易理解了。
相关文章
相关标签/搜索