32位算术逻辑运算单元alu设计_依据基本原理构建现代计算机(二)—— ALU

v2-1c3c16f82b8855bcc9d4b0a545832dec_1440w.jpg?source=172ae18b

学习 依据基本原理构建现代计算机 系列课程笔记。

1 bit 可以表示 0 或者 1。我们怎么使用 bit 表达更复杂的东西,从而开始构建一个现代计算机?

二进制

2 to 10

v2-b37dd4c9a890a76d4939aef24ccae418_b.jpg

10 to 2

v2-fdbee76bc97128d5681275db2fca043a_b.jpg

Binary Addition

  1. overflow

计算机所能表示的数字是有限的,所以当计算得到的结果大于计算机所能表示的数字,就会发生“溢出”,溢出的结果会被计算机丢掉,因为没有放置溢出数字的 bit。

v2-40521f40a7e98a50621c0813c9e31f7f_b.jpg

2. 加法器(Adder)

v2-808de2b85ed5fcd0bf3ee7702403da0c_b.jpg

2.1 半加器

v2-2a13ffe365d58373edaf8deb9ed5e96f_b.jpg

v2-3b5ace9911a062c156fc6477b40d64f9_b.jpg

2.2 全加器

v2-4d1b72dc5f0f4287e2748045473ce755_b.jpg

2.3 加法器

v2-11b2eb40ccdd387c457a61d432bd9dcf_b.jpg

Negative Numbers

我们已经实现了加法器,下面我们来看如何表示负数,直观来看,可以有 Sign bit 用来表示符号位,但是这种方式并不可行,因为 0 和 -0 两种表示方式都是 0,用哪种方式表示 0 呢?不确定会带来混乱,表达上也不优雅。

v2-fa557da112bcdff72bf88dc03a3ff2b3_b.jpg

所以我们用下面的方式表示负数,来解决上述问题。

v2-1713d930d1cb910729dc757509c607db_b.jpg

v2-c0863eab61fcabfd849feaa96a63e04f_b.jpg

我们已经知道了负数是如何表示的,那么我们是否需要为负数之间的加法,设计一个专门的负数加法器呢?答案是不用的,我们用原有的加法器,不用做任何更改,就可以进行负数之间的加法。

v2-3aafceb3425275b20e29806bfdb74808_b.jpg

上图显示,我们确实不用重新设计加法器,那么为什么呢?其实原因很简单。考虑 -x1, -x2, 两个负数相加的结果是 -(x1+x2)。用二进制表示是,因为我们不考虑溢出,所以下面等式成立,我们也就不需要设计新的负数加法器。

v2-37bb34462db0d6e1ae4e6ee834aed7ae_b.jpg

我们现在可以表示 -x,从而可以表示减法,y + (-x) = y - x。

算术逻辑单元(ALU -- Arithmetic Logic Unit)

当代计算机架构鼻祖之一,冯诺伊曼架构。我们可以看出 ALU 在其中扮演了重要角色。

v2-05321d6fdc301a86f18d0306d7592ef0_b.jpg

ALU Chip 入参有 3个,两个 input 作为 另一个输入 f 的参数,ALU 内部调用 f,并输出 f 的结果。如果我们在硬件未实现一些 f ,那么后面就需要用软件实现,这是一种在硬件和软件间权衡的考虑。

v2-4a350d12dfacaed3771ce542fef40140_b.jpg

v2-cc0c08d735e3b1ccd2085db832db2dce_b.jpg

v2-45a8e4e851de93e7907cd1f065fa74fd_b.jpg

喜欢下面这张图。

v2-8c8489ba32498ea7e4b0724e604f8077_b.jpg

v2-3dee45b920782c389e4aadc510273d78_b.jpg

v2-e7977e3c01f0b6074e35df60c127f244_b.jpg

v2-05cc97bab8e7711a16bd56ce64ef21f3_b.jpg

v2-b8782a186d7acc9eb14754fe2b77d081_b.jpg

v2-44fc4fe88813029c0c452da0dd37dfa1_b.jpg

v2-7d9d66286df477ac08671f7f9ca469f4_b.jpg

v2-e0f529a3ec9e05a97268f234a69425b8_b.jpg

上图 MSB 即最高有效位。

v2-3f160a93ccf91605d9f4b9fd9825f632_b.jpg

Q&A:

  1. 如何用两个半加器实现全加器?
  2. ALU 的 control bits 是怎么设计出来的?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值