这篇文章上次修改于 2002 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

今天我们来实现一个最简单内存。

由于在计算机中除了逻辑电路之外没有别的东西,我们要存储也需要用逻辑电路来实现,接下来我们先去实现一个简单的寄存器。

寄存器

寄存器又分为两种一种只能存 1 ,一种只能存 0

能存 1

能存 0

能存 1 和 0 的逻辑电路有了,我们就可以存储全部状态了,我们发现寄存器只能能够存一种状态并且无法清除保存的状态。

锁存器

这次好了,设置端通电 1 就存起来了,想存 0 就给恢复端通电,这样我们就简单实现了一个能存储一个 bit 的电路。但是我们还会发现一个问题就是存 1、0 的状态需要两个线分别去处理,这样就会有很多不便。我们继续往下看来解决这个问题。

门锁

门锁符号

这样一来我们就可以用一根线控制锁存器的状态,并且添加了允许写入的线来控制切入权限。这样一来存一个 bit 的电路我们就完成了。下面我们来组合一下。

8位寄存器

这个电路就是我们使用 8 个门锁组合成的存储单位,这样我们就可以存储一个字节(Byte)了,但是我们还会发现一些问题就是,如果内存这样设计的话,是不是要浪费很多线材,你可以简单计算一下,这样一个简单的寄存器需要使用多少线材。

门锁矩阵

看到这个比较懵逼的图了没有,我们使用矩阵的方式来组合门锁,这个地方我省略的一些格子,理论上应该是 16 *16 也就是存储 256 bit 的一个矩阵,这样一来我们会节省很多线材。我们接下来看看每个格子里都是什么?

说句题外话这个地方为什么我们选择是 16 * 16 的矩阵来讲解?

  1. 我们只讲简单的实现原理
  2. 我们使用 8bit 的数据来表示 X、Y 的坐标,那么 X、Y 最大值就是 11111111,X:1111 Y:1111 换算成 10进制 就是 X:15 Y:15,从 0 - 15 也就是 16 个。

放大单个格子

我们来分析一下这个电路的优劣势?

优势

  1. 我们只需要把所有格子的 输入/输出线,允许读取线,允许写入线 都连起来、这样只需要给相应的位置就能做到对不同格子的读取或写入了。
  2. 我们给相应的 X、Y 轴通电,然后给允许写入线通电,在 输入/输出 端口传入相应的状态,就会存起来
  3. 我们给相应的 X、Y 轴通电,然后给允许读取线通电,在 输入/输出 端口就会传出相应的状态
  4. 如果 X、Y 只有一个有电,那么第一个 AND 门就已经断开了,没有办法对格子读取或写入,正是有第一个 AND 门的存在会减少很多错误,这样一来只有确定坐标才能进行访问或读取。

劣势

  1. 不能多个位置同时读写了,不然就会位置乱掉

继续看我们怎么规避掉的。

简易内存块

这个图就是把我们上面的门锁矩阵进行封装而成的内存块。

内存

然后我们再把 8 个内存块组合起来,这样我们就可以继续存 1Byte 的数据了。

写入数据

  1. 首先我们给一个地址
  2. 给允许写入端通电
  3. 在数据端口放入数据,这样我们就可以在同一个地址,同时存入 8bit 的数据了。

读取数据

  1. 首先我们给一个地址
  2. 给允许读取端通电
  3. 在数据端口就能得到 8bit 的数据了。

到此我们就完成了一个简单的内存。

小结

看到这个大家心中有没有解开一个疑惑。
为什么计算机的基础单位是 1Byte(8bit)?
这是因为计算机的基础硬件就是这么设计的,这个标准被广泛应用后。出新的就会导致不兼容,而引发问题,如果要改变这是一个浩大的工程,1byte 为最小单位也没有什么太大的弊端,所以就成为计算机的标准而流传下来。