参考视频:https://www.youtube.com/watch?v=fpnE6UAfbtU&feature=youtu.be

图片是从视频中截取的,版权问题归 CrashCourse 作者。这里仅仅做学习使用。
(The images were captured from the video. The copyright is reserved for the CrashCourse authors. Here is only for learning purposes.)

真的是觉得原视频里的图片太好了,很直观!

1 只存一个 bit 的电路

1.1 OR 门

当 A 和 B 均输入 0 的时候,输出将为 0。

当 A 输入为 1,B 输入为 0 的时候,输出为 1。
之后,1 回传到 B,

此时 A 和 B 输入都为 1,输出为 1。
这个时候,无论 A 为 0,还是为 1,输出将都为 1。
所以这一个电路可以存储 1。

1.2 AND 门

首先,A和B均输入1,则与操作后,输出为1。

接下来,将A输入0,B输入1,则输出为0。
0回传到B,则B输入为0,输出仍旧为0。

这个时候,无论A输入为0,还是为1,输出将都为0。
所以,这一个电路可以存储0。

1.3 AND-OR 锁存器

OR 门和 AND 门分别可以存储 1 和 0。将这两个门合并起来,就构成了下面的“AND-OR”锁存器。

如上图,当锁存器的SET位置输入为1,RESET位输入为0的时候,输出为1。

而锁存器的RESET位为1的时候,输出为0。(此时无论SET位为1还是0,输出都为0):

当锁存器的SET位和RESET位都为0的时候,电路会输出上一次存储的值(即上次输出为0,这次输出仍为0;上次输出为1,这次输出仍为1):

此时可以看到,电路存储了 1bit 的数据。

因此,它之所以叫做锁存器,就是因为存储了一个特定的值并保持了这个值。我们可以读取这个值(SET 和 RESET 位均为 0),也可以写入新的值(RESET 为 1 的时候写入 0;SET 为 1,RESET 为 0 的时候写入 1)。

1.4 门锁

为了让电路更容易使用,我们希望只有一条“输入线”,可以将它设置为 0 或 1 来存储值。

同时,还需要加一根“允许内存写入线”。启用的时候用允许写入,没启用的时候“锁定”。

此时的电路如下:

当“允许内存写入线”打开时(即置为 1),数据输入线为 1,数据输出为 1,而数据输入线为 0,数据输出为 0:

当“允许内存写入线”关闭时(即置为 0),此时无论数据输入线为 1 还是 0,均不能改变上一次的输出值:

上图状态相当于 AND-OR 锁存器中 SET 位和 RESET 位均为 0。

为了简化电路,将其进行封装。
则电路图为:

如上图,当“允许写入内存线”打开时,数据输入线输入为 1,则数据输出为 1;数据输入线输入为 0,则数据输出为 0。

如上图,当“允许写入内存线”关闭时,此时无论数据输入为 0 还是 1,数据会持续输出上一次的输出值(即值被存起来了)。

2 寄存器

我们并排 8 个锁存器,则可以存 8 位信息。8 位信息正好是 1 个字节的数据。

一组这样的锁存器就叫做“寄存器”!

其中,一个寄存器能够存储的 bit 位叫做“位宽”。

早期电脑用 8 位寄存器,现在的电脑可以用 32 位或 64 位寄存器。

2.1 线性排列锁存器

在写入寄存器之前,要启用里面所有的锁存器,可以用一根“允许写入内存线”连接所有的寄存器,然后将其设为 1(下图标1的线):

然后对于每个锁存器,输入 1 或者 0,便可以存储一个字节的数据:

对于 64 位寄存器来说,这样的电路,需要 64 根输入线,64 根输出线,1 根允许内存写入线,需要 129 根线!

而电脑肯定不是仅仅需要存储 1 个字节,而是很多很多个……

如何减少线的数量呢?
解决方式是使用矩阵。

2.2 矩阵排列锁存器

256 位寄存器(锁存器矩阵阵列):

电路图为:

当某个行和某个列选中的时候,就可以选中某个锁存器。
当行和列的“允许写入内存线”都为 1 的时候,AND 门后输出为 1,表示允许写入选中的锁存器。

使用这种矩阵的形式,(对于16×16的寄存器)只需要 35 根线:每行 16 根,每列 16 根用于选择锁存器,1 条“数据输出线”,1 条“允许写入线”,1 条“允许读取线”。
因此省去了很多线!

多路复用器

为了能够准确地选择到指定的锁存器,需要选择指定的行和指定的列。

可以使用多路复用器,一个多路复用器负责选择行,一个多路复用器负责选择列。

在上述的寄存器中,16行×16列的寄存器,需要一个4位的多路复用器选择行,一个4位的多路复用器选择列。例如,行选择器为0001表示选择第一行。

则,如上图,我们需要8个地址线(4个行选择,4个列选择),1条数据输入线,1条允许内存写入线,1条允许内存读入线。

3 内存条

对寄存器进行排列(不断对寄存器进行封装),就可以得到存储空间更大的内存。

0
Posted in 计算机基础知识

Leave a Comment:

电子邮件地址不会被公开。