计算机基础系列 —— 从 Nand 门、DFF 到 RAM

2024-03-24 04:04

本文主要是介绍计算机基础系列 —— 从 Nand 门、DFF 到 RAM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Memory: The faculty of the brain by which data or information is encoded, stored, and retrieved when needed.It is the retention of information over time for the purpose of influencing future action —— Wikipedia

文中提到的所有实现都可以参考:nand2tetris_sol,但是最好还是自己学习课程实现一遍,理解更深刻。

之前的文章里实现了组合逻辑单元和 ALU,我们有了计算的能力。

但是我们不能存储信息,只能处理 16bit 的数字,不能处理时序的信息(比如 x[t+1] = x[t])。有了处理时序信息的能力,我们才能构建强大的计算机,因为处理时序信息代表着我们可以把一个芯片的输出作为另一个芯片的输入,从而实现各种复杂的功能。所以我们需要时序逻辑单元 DFF(Data Flip-Flop),DFF 干了一件很简单的事情,就是实现了 x[t+1] = x[t]。

下图展示了组合逻辑单元和时序逻辑单元的区别,其中的时钟信号由电子振荡器提供。

有了 DFF 和之前的组合逻辑单元,我们就可以构建 Register 和 RAM 了。

下面的芯片图约定:三角形图标代表时钟信号输入。

Data Flip Flop

1-Bit 寄存器

16-bit 寄存器

课程里的寄存器是 16位的,现代电脑一般是 64 位的,为了简单,方便理解,课程选择了 16 位,但是原理上和 64 位没有区别。

Program Counter(程序计数器)

添加图片注释,不超过 140 字(可选)

顾名思义,PC 用来实现三件事情:

  1. (Reset)执行第一条指令 PC = 0

  2. (Next)执行下一条指令 PC++

  3. (Goto)执行第 n 条指令 PC = n

/*** A 16-bit counter with load and reset control bits.* if      (reset[t] == 1) out[t+1] = 0* else if (load[t] == 1)  out[t+1] = in[t]* else if (inc[t] == 1)   out[t+1] = out[t] + 1  (integer addition)* else                    out[t+1] = out[t]*/

RAM

上图中 n 和 k 存在 的关系,意思是 RAM8(8 个寄存器可以用 3 位地址寻址),其他寄存器同理。

上图可知,RAM 可以读取数据,也可以写入数据,是计算机的存储设备。

我们来看 RAM8 的实现:

通过 DMux 和 Mux,我们可以在 load = 0 时读取对应第 k 个寄存器的值,在 in = any value,load = 1 的时候把 value 写入第 k 个寄存器。

对于 RAM64 我们把上图中的 Register 替换成 RAM8 即可,RAM512、RAM4K、RAM16K 同理。

现在我们有了 Register、ALU、RAM,接下来我们可以构建一个简单的 CPU,在这之前我们会介绍汇编语言和指令集,之后我们会实现我们自己的 CPU,以及相应的汇编器(将指令转变为机器码)。

这篇关于计算机基础系列 —— 从 Nand 门、DFF 到 RAM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840405

相关文章

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin