计算机基础系列 —— 从 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,以及相应的汇编器(将指令转变为机器码)。

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿姆姆姆姆姆姆姆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值