计算机组成原理--同步减法器

  在上一篇博文(计算机组成原理--真正的减法器-CSDN博客)中,给出了 “级联式” 减法器的电路图。

  “级联式” 减法器的各级减法运算,是从低位到高位逐位进行的。这种方法虽然完全符合人类的算法,但是,也带来了速度低的缺点。而且,相减的位数越多,速度就越低。

  为了提高减法器的工作速度,也可以仿照 “同步加法器” 的设计思路,把 “逐位进行” 的算法,改为 “同步借位” 的算法。那么,各个位的差,就会在同一步调下产生。

  对于一个全减器,输入信号有三个(A、B、Ci),输出信号有两个(Co、S)。它们之间的逻辑关系式如下:
   Co = /AB + /ACi + BCi  = /A (B + Ci) + BCi
   S  = A ⊕ B ⊕ Ci

  与全加器的关系式相比较,可看出:
   全减器的借位 Co,与全加器的进位 Co 不同,变量 A 是取反的。
   而两者的 S,是相同的,变量 A 都是原变量。

  在前面,做而论道已经给出了同步进位的加法器电路。可否对其做简单的改造就使其成为减法器呢?答案是:不容易。

  在加法器电路的输入部分,使用了两个逻辑门:Ai + Bi、AiBi。以此再分别求出 Co 和 S。 

  但是在全减器中,仅在 Co 才对变量 A 有不同的处理,而在 S 中,又要求 A 是相同的。所以,这就不容易对全加器进行简单的改造,来设计全减器了。


  为了借用加法器的设计思路,所以,还是先讨论 “同步进位” 加法器的设计方案。为了简化起见,下面仅用两位加法器来说明问题。两位加法器的功能是:
    C2S2S1 = A2A1 + B2B1 + C0。

  如果用 “同步进位” 的算法,各个输出分别是:
    S1 = A1 ⊕ B1 ⊕ C0
    C1 =
A1B1 + A1C0 + B1C0 (C1 并不输出,只用来代入 S2、C2)

    S2 = A2 ⊕ B2 ⊕ C1

    C2 = A2B2 + A2C1 + B2C1
       = A2B2 + (A2 + B2) C1

       = A2B2 + (A2 + B2) (A1B1 + A1C0 + B1C0)
       = A2B2 + A2A1B1 + A2A1C0 + A2B1C0 + A1B2B1 + A1B2C0 + B2B1C0

  此时的 C2,是 “基本与或式”。可利用摩根定律,等效转换成 “与非与非式”,如下所示。

  按照这些逻辑表达式,即可设计出 “同步进位” 的两位加法电路。下图是用 PROTEUS 软件进行仿真实验的截图。

  两位加法器的功能是:C2S2S1 = A2A1 + B2B1 + C0。利用图中左上角的拨动开关,可以输入数据。下方的三个 LED 就会输出运算结果。你可随意输入不同的数据进行验证。

  按照图中所示,A2A1 = 11、B2B2 = 11、C0 = 1。本加法器的运算结果是:111。符合加法器的功能要求。  


  将前面的加法器改造成减法器,就很容易了。只要把产生 C2、C1 的 A2、A1 做一次反相即可。那么,“同步借位” 减法器的 C2 逻辑表达式,即如下所示。

  按照这些逻辑表达式,即可设计出 “同步借位” 的两位减法电路。如果用一个异或门代替反相器,则可以设计出 “可控的加减法电路”。下图是用 PROTEUS 软件进行仿真实验的截图。

  在上图中,A2A1 都是经过异或门再送到 “同步进位” 电路的,因此,就可以由一位二进制数控制 A2A1 反相与否。当选择开关 SW1 拨到右边,异或门就会对 A2A1 进行反相。此时,本电路的功能就是 “同步借位” 减法器。输入输出的逻辑关系就是:C2S2S1 = A2A1-B2B1-C0。

  图中的 A2A1 = 00、B2B1 = 01、C0 = 0。减法运算结果应该是-1。而 C2S2S1 = 111,正是-1 的补码。符合减法运算的规则。

  这种加/减电路,即具有快速进/借位的功能,控制又极为方便。缺点则是:随着运算位数的增多,电路就会大幅度提高复杂程度。当然,如果用集成块搭建电路,是比较困难的,但是,如果由集成电路厂家把电路集成到芯片内部,这缺点就不明显了。

  在 8086/8088  CPU 中,运算器是一个 “数字逻辑运算单元”,英文简称是 ALU。ALU 的功能有很多了,其中就包含了:加法运算、减法运算

  由于在 CPU 中,早就具备了减法运算功能,所以,就可以直接用二进制数来相减了,而不必先转换到补码再相加。因此,在《计算机组成原理》中,喋喋不休的讲 “用补码相加来做减法”,借此来设计除法电路,纯粹就是误导了。

--本文完--

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值