宝安商城网站建设哪家效益快,中国十大品牌策划公司,wordpress 煎蛋网插件,吉林省建设信息网平台“Make everything as simple as possible, but no simpler.” – Albert Einstein 文中提到的所有实现都可以参考#xff1a;nand2tetris_sol#xff0c;但是最好还是自己学习课程实现一遍#xff0c;理解更深刻。
之前的文章里我们介绍了 Register、PC、RAM 和 ALU#… “Make everything as simple as possible, but no simpler.” – Albert Einstein 文中提到的所有实现都可以参考nand2tetris_sol但是最好还是自己学习课程实现一遍理解更深刻。
之前的文章里我们介绍了 Register、PC、RAM 和 ALU这节课我们来介绍如何把这些芯片组合起来成一个 CPU 和一个能运行上篇文章介绍的汇编语言的电脑 —— Hacker。
我们来看一看 Hacker 的架构。 总线
上图里的各个模块通过总线连接起来什么是总线呢看下图 总线就是把数据、地址、程序在各个模块之间传递的“公交车”buses总线的英文太形象了01010101 就是车上的“人”。
Fetch-Excute Cycle
那么 CPU 干了什么事呢就是不断执行 fetch-excute cycle 的循环fetch 阶段去获取指令excute 阶段去执行指令。比如现代电脑的开机打开开机键后执行 fetch 阶段获取操作系统程序的地址然后 excute 第一行指令后再去 fetch 第二行指令如此往复直到开机成功。
上篇文章我们知道 A 指令可以同时访问 RAM[A] 和 ROM[A]把指令和数据放在不同的 Memory 里那么我们可不可以把他们放在同一个 Memory 里然后根据需要把 RAM[A] 解释成数据或者指令。当然可以第一种是空间换时间的方法Harvard architecture第二种是时间换空间的方法所以这两种方法的优缺点很明显。我们来看看这两种不同的 Fetch-Excute Cycle 课程里选择了 single cycletwo-memory machine 这种实现接下来我们继续来看 Hacker 里各个模块的实现。 CPU CPU 的作用是读取指令执行指令读取数据写入数据。我们可以对应着看上面两张图「inM、outM、writeMbool、addressM」对应着「write、read、address(data memory)」「instruction、pc」对应着「insturction、address(instruction memory)」 reset 的作用就是相当于重启按钮。接下来我们来看看具体实现。 这里出现的都是之前文章里提到过的元器件接下来我们逐一解释这些元器件是如何实现上述的 CPU 的。图中“c”表示“控制位”控制位来自指令他们告诉各种芯片部件该做什么。
A 指令的实现很简单看下图 我们来看 C 指令的实现 和 A 指令一样C 指令的最高位决定第一个 Mux16 的输入 acccccc 用来决定的 cccccc ALU 的 zx nx zy ny f no 的引脚。a 来决定输入 ALU 的是 A 还是 M。
ddd 用来决定 ALU 的输出是否保存到相应的位置 jjj 用来决定执行哪一条指令 这里 jjj 可以通过 f(zr, ng) 来获得。PC 的输出就是下一条要执行指令的地址。这里一个可以执行汇编程序的 CPU 就实现了我只想说太优雅了
接下来我们把剩余的模块和 CPU 连接起来组成 Hacker。 Data Memory
这里用到了我们之前实现的 RAM16K屏幕是 RAM8K 连接着显示屏。为了简便Keyboard 和 Screen 都是内置的模块直接调用即可。 Instruction Memory
/** Read-Only memory (ROM),
acts as the Hack computer instruction memory. */
CHIP ROM32K {IN address[15];OUT out[16];BUILTIN ROM32K;
}
Instruction Memory 也是内置的模块和 RAM32K 的唯一区别就是 ROM32K 是只读的所以每次载入新程序相当于把之前的程序删除掉再载入新程序。就和单片机下载程序一样。
Hacker 到这里 Hacker 就实现完成了下篇文章会介绍如何实现汇编器。
缓存
最后解释下 Hacker 没有外接存储设备也没有多级缓存的原因。