对二求补器的电路解析

431 阅读1分钟

对二求补器

对二求补器即对二进制求补器

传统的对负数求补方式为 按位取反,使用加法模块加1 这种电路比较笨重,因为用到了先行进位加法器 CLA

无需 CLA 的求补电路图:

5E96B3F22BECB7874BE2CC3B87164F2D

求补方式

给定二进制序列 anan-1······a0 从最右端 a0 开始向左遍历,找到 第一个 '1' 对应二进制序列的 ai ,将an ~ ai+1 按位取反即可得到补码

如:1010,第三位后不变,第一、二位取反,得到 0110 (注该数为负数,隐含符号位 1)

电路图说明

输入 E 代表是否要求补,即该数为正数还是负数,E 为 1 代表求补,E 为 0 代表不求补

C--1 恒为 0,用于寻找 第一个 '1' 在哪

寻找第一个1的方式(Ci = ai + Ci-1):

  • 如果 ai 不是 第一个1,ai 为 0,Ci-1 必然为 0,传给后一个位 ai+1 的 Ci 为 ai + Ci-1 是 0
  • 如果 ai 是 第一个1,ai 为 1,Ci-1 必然为 0,传给后一个位 ai+1 的 Ci 为 ai + Ci-1 是 1
  • 对于 第一个1 ai 前的 anan-1······ai+1 ,它们接受的 C值 与传出的 C值 都为 1

取反方式(ai* = ai ⊕ (E · Ci-1) ):

  • 当 E 为 0 时, E · Ci-1 必为 0,ai ⊕ (E · Ci-1) 必为 ai ,原样输出

  • 当 E 为 1 时, E · Ci-1 必为 Ci-1

    • 当 Ci-1 为 0,原样输出
    • 当 Ci-1 为 1,取反输出

    而在上面我们已经讨论过 Ci-1 的取值 对于 第一个1 以及它后面的数,C值均为 0 (原样输出) 对于 第一个1 以及它前面的数,C值均为 1 (取反输出)