计算机基础系列 —— CPU

news2024/11/17 21:38:35

“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 cycle,two-memory machine 这种实现,接下来我们继续来看 Hacker 里各个模块的实现。

CPU

CPU 的作用是读取指令,执行指令,读取数据,写入数据。我们可以对应着看上面两张图,「inM、outM、writeM(bool)、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 没有外接存储设备,也没有多级缓存的原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯】tarjan算法

一.概述 Tarjan 算法是基于DFS的算法,用于求解图的连通性问题。 Tarjan 算法可以在线性时间内求出: 无向图: 割点与桥双连通分量 有向图: 强连通分量必经点与必经边 1.割点: 若从图中删除节点 x 以及所有与 x 关联的…

【学习】软件科技成果鉴定测试有何作用

软件科技成果鉴定测试是针对软件进行项目申报、科技成果鉴定等相关目的进行的测试。软件测试报告可作为项目申报、科技成果鉴定等工作的依据之一。软件类科技成果鉴定测试从软件文档、功能性、使用技术等方面对软件系统进行符合性测试。其测试结果证明软件的质量是否符合技术合…

机器学习笔记(2)—单变量线性回归

单变量线性回归 单变量线性回归(Linear Regression with One Variable)1.1 模型表示1.2 代价函数1.3 代价函数的直观理解1.4 梯度下降1.5 梯度下降的直观理解1.6 梯度下降的线性回归 单变量线性回归(Linear Regression with One Variable) ps:...今天很倒霉 一名小女孩悄悄地碎…

PTA金字塔游戏

幼儿园里真热闹,老师带着孩子们做一个名叫金字塔的游戏,游戏规则如下: 首先,老师把孩子们按身高从高到矮排列,选出最高的做队长,当金字塔的塔顶,之后在其余小朋友里选出两个最高的,…

JUC:打断正常线程、睡眠线程、park线程的interrupt状态、二阶段终止模式

文章目录 打断标记两阶段终止注意打断park线程 打断标记 睡眠中的线程被打断时,会抛出异常,把打断标记置为false,而不是变为true,wait和join也是。 打断 sleep,wait,join 的线程 这几个方法都会让线程进入…

如何使用Docker安装部署Cronsun?

前言 Cronsun是一款开源的分布式任务调度系统,主要用于在*nix服务器集群中管理和调度周期性任务。相比于传统的Linux crontab 工具,Cronsun提供了一个集中化的Web界面,使得在多台服务器上的定时任务更容易管理和监控,并且具备任务…

大话设计模式——8.原型模式(Prototype Pattern)

1.介绍 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。属于创建型模式。 UML图: 1)浅拷贝: 指创建一个新的对象,然后将原始对象的字段值复制到新对象中。如果字段是基本类型,直接复制…

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

Java毕业设计-基于springboot开发的校园志愿者管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能3、志愿者功能 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的校园志愿者管理系统…

“AI程序员”Devin大杀四方后,人类程序员开始了他们的反击......

“首个AI程序员”Devin发布后,大有要替代人类程序员的意味。 在当时发布之初,Devin展示了AI自主处理各种程序任务的案例。其中Devin生成“生命游戏”的演示是最让我震惊的。 所谓“生命游戏”,是由英国数学家约翰何顿康威(John …

CPU设计实战-外设接口介绍与测试

GPIO 内置寄存器,BASE地址由外设所在设备接口处决定,这样就可以确定每个寄存器的地址; 要使用输出先要使能,要用中断也先要使能; 测试实验-数码管驱动 数码管与GPIO的输出接口连接 编写汇编语言 1.使能输出端口 2…

游戏 AI 反作弊|基于时序行为数据的自瞄外挂检测方案,附方案详情!

游戏AI反作弊,上次跟大家分享了基于时序行为数据的透视外挂检测方案,本次跟大家分享 基于时序行为数据的自瞄外挂检测方案,大家记得点赞收藏! 游戏 AI 反作弊|内附解决方案详情!-CSDN博客 基于时序行为数据的自瞄外挂检…

【正点原子Linux连载】第二十二章 Linux INPUT子系统实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第二十…

DNS协议 是什么?说说DNS 完整的查询过程?

一、是什么 DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器 简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址 IP 地址&#…

【数据分享】1929-2023年全球站点的逐日平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

笔记本作为其他主机显示屏(HDMI采集器)

前言: 我打算打笔记本作为显示屏来用,连上工控机,这不是贼方便吗 操作: 一、必需品 HDMI采集器一个 可以去绿联买一个,便宜的就行,我的大概就长这样 win10下载 PotPlayer 软件 下载链接:h…

考了PMP证后工资大概是多少 ?

PMP自1999年引入国内以来,大家对这个证书的了解并不深,每年考试的人数也不多。但随着越来越多的企业认可PMP认证,目前考证的人数不断增加,几乎所有与项目管理相关的人都知道这个证书的重要性。这个证书在招聘要求中出现频率较高&a…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…

【Codesys】-扫描添加失败,手动添加第三方模块,真·DC模式的高速计数模块

欧姆龙耦合器(NX-ECC201)和高速计数模块(NX-EC0132)单独使用。扫描设备添加到Codesys中,会报错,无法自动添加。需要手动添加。内容方法如下。如遇到其他第三方耦合器解决方式也同下面一样。记录一下&#x…

三位数组合-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第42讲。 三位数组合&#…