计算机科学: 寄存器&内存

参考:

【十分钟速成课:计算机科学】6.寄存器&内存

要想聊寄存器Latch,首先要聊内存。什么是内存?

Memory,就是储存信息的东西。

我们都玩过单机游戏,如果突然关机,游戏结束但是没有存档,那么下次就必须从新再玩。

这是因为游戏储存进度而使用的内存是RAM,类似于人的短期记忆。

那么问题来了,我们如何储存信息?

我们知道对于计算机来说,信息就是1或者0

因此,我们只要控制每一个位置的信息是1,或是0不变,就能把信息保存下来。

现在来聊点实际的:

如何储存信息1? 

来看这个门:

 

这个门的输出永远是1,不论A的输入是什么。

同理,这个门的输出永远是0

 

 

 

我们可以结合这两个电路,得到  :

 

 我们通过置1或者置0的电路输入信号,让他的输出永远是1或者0。

 

它记住了一个信息!!! That‘s what we call Memory~

这叫做锁存,因为它锁住了一个值。

再优化一下:

 

 

这个电路由两个信号控制,enable 和 Input  如果enable了,就允许数据读入,否则无法读入数据。

接下来,把他抽象成一个黑盒就好了。这个盒子能够储存一个bit

我们可以并排8个latches 这就是一个八位寄存器。其中八个成为位宽

然而一个寄存器有三条线,Input  output enable ,对于一个128位宽的寄存器来说,

即使enable只用一根线来代替,那也是128*2+1 根线。

如何减少?

Matirx

我们把256个寄存器放入16 *16 的矩阵中:

 

 

其中,我们通过导通某行和某列交叉线的位置上寄存器的enable,而其他寄存器上的enable 关闭。

这可以通过与门实现。

 

 

 

 然后让数据在电路里流过,但是只有enable 打开的寄存器才能读入数据。

这样只需要35条线。

 

那么如何指定交叉位置?

比如说我想指定第12行,第8列的位置。

首先地址最多有6行,那么只需要用四位二进制数表示就好了。

12=1100

8=1000

那么,我们把12行8列对应的地址就可以表达为:11001000(就是12的二进制表示和8的二进制表示连接起来)

 

我们现在知道了如何将地址存储为二进制数了,

那么如何解读成第几行第几列呢、

here comes mutilplexer

现在我们把一个128位的寄存器抽象一下:“

 

 

 

他需要你输入一个储存的地址,和read enable write enable 还有data 

这样一个256位的 memory 也没啥用,我们需要更大的内存,所以把它叠起来。

 

 

posted @ 2020-12-10 21:41  彭张智写字的地方  阅读(205)  评论(0)    收藏  举报