13、P1 W2 U2.4 ALU 算术逻辑单元

作者: shazizm | 来源:发表于2019-07-30 12:31 被阅读0次

    视频:
    如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
    P1W2U2.4 - Arithmetic Logic Unit

    软件:
    全课程所需软件项目包官方下载:
    https://www.nand2tetris.org/software
    备了一份软件项目包放在CSDN了,版本2.6支持Mac、Linux、Windows:
    https://download.csdn.net/download/shazizm/11268147

    经过一周多的基础知识的学习和枯燥的坚持。今天终于有了猛料了。
    在下图看到熟悉的CPU了。
    今天就一探CPU的核心部分ALU(Arithmetic Logic Unit 算术逻辑单元)

    上图架构:1945年 冯诺依曼 提出的 计算机架构。对比我在第一篇文章里写到的“我的世界”里季文瀚搭建出的计算机,使用的是哈佛结构,而非更常见的冯·诺依曼结构。程序储存器和数据储存器分开放置。

    下图是 ALU 的示意图(只是示意,后面有详细的介绍),像其他逻辑门一样:
    左边2个输入,
    右边1个输出。
    上方1个 f 代表 也是输入。

    ALU由很多操作组成,例如:清零、置一、加、减、与、或、非、等等。

    那么 f 就是说,选择ALU中哪些操作,来对左边2个输入进行算术或逻辑运算。

    另外这里提到了一个取舍问题。因为有些操作是可以在软件部分处理的。
    那么哪些该用硬件实现,哪些该用软件间接实现。
    对应计算性能和架构复杂度就成了一个取舍的问题。


    取舍问题,我们就不考虑了,老师已经选好了

    下图 是这次老师为“HACK”小电脑,特别定制准备的“HACK”ALU,也是学生要去实现的作业。

    下图右侧可以看出老师设计了18 种 操作。

    如下图:

    x、y: 两个输入操作数 (16位的补码表示的二进制,方便负数加法和溢出,参考:P1 W2 U2.3 负数 与 减法

    out:输出结果 (16位二进制)

    zx 、nx、 zy、 ny、 f、 、no:功能位(不同的基础功能组合,可以得出不同的运算。这很像Mux里的sel)

    zr、ng:输出控制位(一会儿解释)


    可以大概对应理解 x、y 送进来的就是 “数据”。zx、nx、zy、ny、f、no 送进来的就是“程序”。

    下图给出了
    zx、nx、zy、ny、f、no
    out
    真值表


    已知上图,求...

    关于 ALU 和 真值表。是怎么回事。老师用了 硬件模拟器 举了两个例子:算术运算(减),逻辑运算(与)。

    算术运算:20 - 30 = ?

    000111 对应上图真值表 就是 选了 y - x 这种操作。
    设值 y - x = 20 - 30 = -10。


    如图显示 20-30 的操作,该如何设置,并 运算出 结果

    逻辑运算:11110 & 10100 (“&”表示 与运算)

    找到 x&y 对应真值表为 000000

    点击运算按钮 核对结果


    x与y

    大概了解了ALU的输入输出端口和使用。我最疑惑的就是这6个功能位。
    那么接下来就来一探究竟吧。

    休息下,打开黑盒

    下图先说 6个功能位:

    对X预处理操作
    zx(Zero X): 如果 zx = 1 那么 x = 00000... (全部清零)
    nx(Negate X) : 如果 nx = 1 那么 x = !x (全部取反)

    注意1:如果 zx、nx = 0 那么就对输入的 x 不进行任何操作。
    注意2:这个操作是有顺序的从左往右,如果 zx=1 nx=1,那么先 清零,在取反,也就是实现了 全置1的目的了。

    对Y预处理操作(同理X)
    zy(Zero Y): 如果 zy = 1 那么 y = 00000... (清零)
    ny(Negate Y) : 如果 ny = 1 那么 y = !y (取反)

    算术加、逻辑与
    f (Function):如果 f =1 那么 out = x+y ,否则 f = 0 那么 out = x&y

    后处理 out
    no (Negate Out) :如果 no =1 那么 out = !out (取反)

    从6个控制位的英文名,可以猜出对应的功能

    那么这6个控制真的能对应实现 之前给出的18种运算吗?

    如下图举例: !x
    假设 x = 1100 , y = 1011。6位控制 = 001101

    按照上图讲的,可以自己推一遍。

    神奇真香,x确实取反了

    再举例:y - x
    假设 x = 0010(2),y = 0111 (7)。6位控制 = 000111

    神奇真香

    2个输出控制位:
    如果 out 的 十进制 等于 0,那么zr = 1,否则 zr = 0
    如果 out 的 十进制 小于 0,那么ng = 1,否则 ng = 0

    这里并没有过多解释,它俩会在之后的整体架构设计中扮演重要的角色。


    zr、 ng 下次讲解

    最后,回顾ALU的18种运算,除了x+y和x-y。

    其它都是逻辑运算。而这些逻辑门如何实现,之前课程已经完成了。(如果你做完作业了)

    而x-y 又可以 表示成 x+(-y)。所以只用一个Adder加法器(我们也在这周重点突破实现了) 又解决了所有 算术运算的问题。

    老师提供的ALU的设计,简单,优雅。当然,工业上用ALU肯定比这个复杂多了。

    但做为启发思考

    方便理解

    在此

    才更是可贵!

    大道至简 Simplicity is the ultimate sophistication

    相关文章

      网友评论

        本文标题:13、P1 W2 U2.4 ALU 算术逻辑单元

        本文链接:https://www.haomeiwen.com/subject/qdggrctx.html