美文网首页From Nand To Tetris 从与非门到俄罗斯方块
34、P1 W5 U5.3 中央处理器(待完善)

34、P1 W5 U5.3 中央处理器(待完善)

作者: shazizm | 来源:发表于2019-09-25 13:03 被阅读0次

    视频:
    如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
    P1W5U5.3 - Central Processing Unit

    第五周,前两节课 U5.1 和 U5.2 基本上大概描述了一下 总线 和 CPU 执行程序时的运行方式。

    这节课 U5.3,老师就提供了一种实现CPU的 逻辑单元组成图。

    老师在给出一种方案前,还是要再说说抽象概念。感叹了一下CPU的神奇与美丽,静态程序马上就可以被运行起来了,仔细想想是挺不可思议。

    CPU黑盒

    CPU黑盒,执行当前命令,准备下一条要执行的命令

    讲CPU的内部方案前,先说明一下黑盒对外的输入输出,主要就是和 数据存储和 程序存储 的交互。

    黑盒左侧三个输入

    16位data 要被当前命令处理的数据
    16位instruction 当前的命令
    还有1位输入之后再说 reset

    CPU 的 输入项

    黑盒右侧四个输出

    16位outM 要写回的数据(往data memory存的数据)
    1位writeM 是否写标识 (决定上面数据要不要写,也可以丢弃)
    15位addressM 要存哪 (如果决定写入,那么这个提供写入data memory里的地址)
    15位pc 下一条要执行的命令的地址(这个很重要,接下来会讲到)

    CPU 的 输出项

    打开黑盒

    老师提供了其中一种高效简洁的方案,如下图

    蓝色框的左右侧是上面提到的 输入和输出。

    蓝色框内部,一看都是我们之前学过的。
    (ALU 回顾 U2.4)
    (PC 回顾 U3.4)

    c 符号是控制位 control bits 不过这些从哪里来?老师故意不说清楚的,就是让学生在作业里自己搞明白...,命令里提取出来的?

    黑盒内部

    下面老师分三部分来讲解 CPU黑盒的内部

    黑盒第一部分

    19.png

    第一部分主要是 处理指令,放大如下

    首先如下图,看一个 指令@3001,回顾U4.3我们知道
    @3001 就是把 3001 存入A register

    (指令分 A指令 和 C指令,回顾U4.3)

    A register 还有可能存入 ALU 的数据输出 (上图的outM),有一个Mux16的c控制位决定。

    A register 根据之前 U4.3 的知识回顾,有三个功能。

    A命令有设置常数参与计算的功能。应该就是上图A register输出 走入ALU的箭头路线。

    A命令,还有自动选取M 寄存器 的功能。所以上图 A register输出 不加控制位,直接有一箭头走到 addressM

    A命令,还有可能参与跳转,所以上图再往下 A register输出 有一箭头走到了PC(回顾U4.3 实例练习3)

    @3001 的二进制数最左侧是0,代表是A指令

    黑盒第二部分

    在开始讲第二部分前,回顾一下C指令 (具体请看 U4.4)

    最左边一位为1,代表C-指令,然后依次往右两位没用到,但是惯例设成1。
    然后7位 蓝色0011111 代表 comp (决定选择哪些寄存器,参与什么运算)
    然后3位 绿色010 代表 dest(决定结果存在哪里)
    最后3位 红色111 代表 jump(决定运算结果与0进行那种判断,跳转位置需提前存在A寄存器)

    C指令,回顾第四周内容

    接下来讲解最黑盒内部复杂的部分-ALU

    ALU 回顾 U2.4

    放大如下图

    ALU 输入

    一个 D 寄存器
    一个 A寄存器或者M寄存器

    对进入的两个数,进行怎样的操作,由C指令上的 蓝色 数决定(不应该是7位吗?回顾U2.4 和 U4.4,为啥图里只有6位)

    命令中的蓝色位决(comp)定由谁(D、A、M寄存器)参与什么计算

    ALU 输出

    上面提到回顾U4.4时,ALU输出存在哪里由 下图绿色三位决定(dest)

    ALU 的输出会同时 送到 D、A、M寄存器,但是三个寄存器是不是要接受,就由dest决定了。

    这个看来图中c标志都是根据 指令里提取出来的

    注意上图里 ALU 还有两个 输出位,如下图所示

    一个说明 ALU的计算结果是否为 负
    一个说明 ALU的计算结果是否为 零

    这个和接下来黑盒第三部分PC,有关

    是负吗?是零吗?

    黑盒第三部分

    第三部分
    Reset:它就像计算机重启按钮,一按hack小电脑就从头开始执行程序
    (估计就是把PC地址设置成 instruction memory 的第一个位置。)

    PC:决定下一条指令的地址

    Reset、 PC

    下图左侧C指令里红色位(jjj)回顾U4.4

    如果
    jjj = 000,不跳转,下一步执行,PC自加1的位置
    jjj = 111,直接跳转,下一步执行,PC等于当前A存的位置
    有条件跳转,参考U4.4里的一个图表。

    这里具体几个细节如何实现老师让自己想

    这里老师给出一个大概判断顺序,如下图

    先判断 Reset
    再通过 当前指令的jump(jjj) 和 ALU 两个输出 控制位(是负?是零?)
    得出一个结果(load)
    在通过load来判断PC如何设置下一条指令的地址。

    原理讲清楚了,具体怎么实现还是自己想

    到此 HACK小电脑的 CPU 就算讲解完了。
    照理说,现在可以去写那个 HDL吧。
    老师说别急。
    因为CPU涉及到整个架构(存储啊,显示器,键盘)
    总之先听完下节课再动手。

    相关文章

      网友评论

        本文标题:34、P1 W5 U5.3 中央处理器(待完善)

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