经过继电器实现串行8位全加器——计算机科学导论课有感而做

  历史上,冯·诺依曼最终选择了二进制做为计算机的底层数制。二进制0和1映射到物理电路只有两种状态,这两种状态能够方便地用电路通断、晶体管导通或截止、电平高低等等来表示,极大地简化了实现数值表示和运算的物理方法。spa

  具体简化到什么程度?为了能有一个形象的感知,咱们不妨本身动手实验:只使用原始的电磁式继电器,实现一个8位全加器模型。设计

 

1、全加器组合逻辑code

  咱们首先考虑半加器的实现。显然,当两个1 bit二进制操做数数A,B进行加法运算时,本位结果至关于A  B。接下来考虑进位结果的生成。根据进位制,当且仅当A,B同时为1时,进位1。因而咱们得出表达式:blog

  sum = A  B
  carry = A * B

  对于每一位i,加入来自上一位的进位Ci-1,便获得全加器。因而第i位结果至关于Ai ⊕ Bi ⊕ Ci-1。考虑每一位的进位,根据进位制,当且仅当Ai,Bi,Ci-1中至少两个操做数同时为1时,进位1。因而全加器表达式以下:it

    Sum(i) = Ai  Bi  Ci-1
    Carry(i) = Ai * Bi + Ai * Ci + Bi * Ci

  化简,获得表达式:class

    Sum(i) = (Ai  Bi)  Ci-1 
 Carry(i) = Ai * Bi + Ci-1 * (Ai  Bi )

  经过观察易得,硬件上,每一位至少须要5个双端口门电路来实现。基础

 

2、继电器实现软件

  其实,上个世纪工程师利用继电器实现控制逻辑是比较常见的事情。硬件

  在本文中,咱们须要首先实现与、或、异或三种门电路。经过观察不难发现,三种门电路实现以下(注意这里并无考虑门电路端口的传输延迟一致性问题):二进制

  因而根据上一节得出的表达式,得出单位全加器的电路以下:

 

  将8个单位全加器串联起来,便获得一个串行8位全加器。这里只是简单地把第一位的进位输入复位。在微处理中,经常支持addc指令,将上次结果的进位输出做为本次的进位输入。通过若干addc指令后,能够完成长数值的加法。

  采用Protues电路仿真软件验证咱们所设计的电路,结果以下,其中左侧两排电平信号源为全加器的输入,而右侧一排电平指示器为全加器的输出。

 

      其中,对于有符号运算,操做数均以补码表示。

 

3、问题总结

  首先,因为串行全加器的结构所致,输出将出现毛刺。同时在继电器实现的或门中,两个端口的传输延迟不一致,这会加重电路输出的毛刺。

  所以,读出结果时,应待输出信号稳定后再读取。

  因为输出从暂稳态到稳态所经历的时间很是短,做为演示模型使用时,可忽略不计。

 

4、心得

  回首当年部分采用十进制的ENIAC,和后来真正采用二进制的EDSAC,计算机真正走向了成熟的商业应用。这其中任何领域的进步都离不开基础科学的进步,而基础科学研究的迷人之处也在于:任何一个看起来质朴的结论,均可能引起深入的改变。

 

2018 11.1

相关文章
相关标签/搜索