35、P1 W5 U5.4 小电脑(待完善)

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

    视频:
    如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
    P1W5U5.4 - The Hack Computer

    整个Part1课程到此,基本上就是硬件的大组装前(做作业前)的最后的讲解了。
    老师在本节将把整个小电脑里的三个重要(CPU、RAM、ROM)部分再从整体的功能角度说明了一下。
    本节涉及三部分分别做什么?我们如何制作它们(基本就是结合硬件接口回顾复习)。

    本节重点1、2、3

    第一部分:CPU

    前一节U5.3 中央处理器已经用了一节课对其本身详细讲解过了

    这里从CPU的输入输出接口说起,如下图:

    CPU接口示意

    CPU 不同 instruction 的情况分析

    instruction //指令分3种情况
    
    1、涉及 D 寄存器的 instruction :D = D - A

    D寄存器 和 A寄存器 都在CPU里。
    操作的时候直接取,不多说。

    2、涉及 A 寄存器的 instruction :@A

    那么就把 这个16位的A指令里的左边15位存在 A寄存器。(最右边1位用来区分A指令 和 C指令)

    3、涉及 M 寄存器的 instruction :M = M+1

    这种涉及M寄存器的指令,这里M在 “=” 的左右,涉及的接口是不一样的。

    如果M在 “ = ” 右侧,表示需要读M寄存器,要考虑 CPU 另一个输入接口

    inM
    

    如果M在 “ = ” 左侧,表示要把指令的运算结果存回M寄存器,要考虑的CPU 另3个输出接口

    outM      //写什么数据
    writeM     //要不要写    PS:不写也可以丢弃
    addressM     //写回哪个M寄存器
    

    M寄存器 实际上指的是memory(RAM)里的某一个寄存器。
    哪一个呢?所以需要一个@A的指令来利用它的第二个副作用来指定。

    回顾 U4.3
    例如:@21

    1.把 A寄存器 设置成 21
    2.同时有一个副作用的效果, RAM的21号寄存器,通过addressM?就被对应到 M寄存器上了。假如下一步指令里有对M寄存器的读写,就是对RAM[21]号寄存器的读写。

    例如:要把RAM[100]设置成-1的两条汇编指令就如下:

    @100
    M = -1
    
    复习D、A、M寄存器,回顾第4周的课程

    4、涉及跳转的 instruction

    老师通过 跳转指令,来讲几个操作,和对应的硬件接口

    先回顾一下

    reset
    

    reset = 0 时,程序正常运行,也就是PC指向的指令执行完了,(自动PC+1)然后顺序执行下一条指令。
    reset = 1时,那么PC直接设置成0,就回到第一条指令重头开始执行。

    回到一般正常情况,当reset = 0时(没人去捅电脑重启键时)

    来看下图 D = D-1;JEQ 这条命令

    回顾 U4.3
    jump 有8种比较跳转情况。把 D-1 的结果 和 0 比。

    JGT:comp大于0跳?
    JEQ:comp等于0跳?
    JGE:comp大于等于0跳?
    JLT:comp小于0跳?
    JNE: comp不等于0跳?
    JLE:comp小于等于0跳?
    JMP:无条件跳?

    以上满足条件的 都跳到 M[A]。

    如果 D-1 等于 0 那么就跳转到 A寄存器里存的地址指定的 M。
    如下图也就是M[100]

    回顾reset、PC、jump指令

    这些指令的规则都是由CPU硬件架构决定的。

    接下来来说存储。

    第二部分:Data Memory

    (RAM = RAM16 + RAM8 + Register)

    如下图
    数据区 RAM(16k个“16位寄存器”)回顾U3.3,实现就是第三周作业RAM16
    屏幕映射区(8k个“16位寄存器”)回顾U4.5,实现就是第三周作业RAM8
    键盘映射区(1个“16位寄存器”)回顾U4.5,实现就是第三周作业16-bit Register

    临时存储的数据区、屏幕映射区、键盘映射区

    1、数据区

    通过 address 选择一个 “寄存器”,再通过 in 或者 out 来存取16位二进制数据。

    需要注意就是 怎么 把“外层”Memory(RAM)的in、address、out 和 “内层”的 RAM16的in、address、out结合。

    2、屏幕映射区

    关于屏幕映射的原理,有点复杂。。。回顾U4.5

    这里对于硬件设计来说,其实就是对RAM8的操作,课程并没有真正做一个屏幕出来,而是软件模拟的一个显示屏,实时扫描RAM8,然后把RAM8里存的每一位对应到屏幕上的每一个像素。

    映射方式。假如屏幕也拿硬件实现,该如何做呢? 屏幕映射区 8K,会被模拟出来的显示器不断扫描,对应显示

    3、键盘映射区

    就是一个 16位寄存器

    它和显示映射区一样,也有一种映射关系。
    通过Scan-code来把按键 和 0101xxxx对应起来。

    Scan-code 老师设计的,回顾U4.5。有表格参考。

    例如下图 上↑箭头键 对应Scan-code码就是 131,二进制就是图中左边16位。

    电脑会一直扫描这一寄存器,无按键寄存器值为0,有按键就寄存器里就是对应的二进制码。

    另外放到整个Data memory 里,键盘寄存器地址在 24576。

    映射关系:Scan-code。假如键盘也用硬件实现,又改如何实现呢?

    最后,三块RAM16、RAM8、1Register 的地址怎么搞到一起呢,留在作业里解决吧

    回顾U4.8
    之前U4.6也提到了,有两个“别名”,方便使用:
    SCREEN = 16384
    KBD = 24576
    回顾U3.3
    单个RAM寻址操作

    三、Program memory

    (ROM32)

    关于程序存储器ROM,老师先讨论了如何将我们写的代码烧写到ROM芯片里,其次探讨了怎么实现ROM。(其实两件事都没做。。。)

    现实里,我们的确需要一些额外的软硬件来帮助烧写程序到ROM里。然后把含有不同程序的ROM插到HACK小电脑上,就可以了。但我们的HACK小电脑就是虚拟存在的。。。所以这条路就不考虑了。

    这里我们还是用老师提供的 CPU硬件模拟器,简单的打开程序,就自动帮咱们模拟完成这 “烧写” 和 “插入” HACK系统的物理步骤。

    老师介绍的这种存“程序”的memory,一般一次烧录完程序就不能改了,所以Program memory是ROM存储器。
    有点像小时候玩的插卡游戏机,插上不同的卡(ROM)就可以运行不同的游戏(程序已经提前烧写在ROM里)。

    这里有个CPU硬件模拟器(老师提前做好的一个CPU模拟器)里加载汇编程序的演示视频 ,从16:50 到22:40

    但是我们如何设计这个ROM呢

    它和RAM很像,就是没有input,因为只读不写。
    还记得CPU上的PC永远指向 下一条指令,所以图中address其实就是对应CPU的一个输出pc,ROM的out应该就是对应CPU的一个输入instruction(本文第一张图)。

    ROM32K,作业里貌似没有这个

    最后


    CPU
    data memory
    program memory
    屏幕
    键盘

    都过了一遍。具体内容也都在前面课程见过了。

    下一节课U5.5 将提供一些做CPU作业时的一些建议和提示。

    最最后,跟着老师再惊叹一下它的“大道至简”。由简单的一个逻辑单元Nand便可以组成的如此复杂系统。

    爱默生 Emerson 1803-1882

    相关文章

      网友评论

        本文标题:35、P1 W5 U5.4 小电脑(待完善)

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