CODE学习笔记四——锁存器、选择器、译码器与RAM

继续笔记三,这回确确实实会搭建出一个RAM(存储器)了
首先要注意一点:RAM存储的方式是寻址,寻址之后会讲,重点是一个数据存储在多个存储器中,每个小存储器仅存一位。
也就是说
一个八位存储器无法完整的存储一个八位数据!!!
换句话说
八位存储器位与位间可能并没有关系。

锁存器(latch)的问题

这里写图片描述
上篇笔记最后得到的一个锁存器说起来还是太过简易,有两个问题

  • 写入要求八个bit一起写入
  • 输出要求八个bit一起输出

可是若是位与位间没有关系,我想选择其中一个位输出要怎么办?
这就是选择器(管输出)与译码器(管输入)的功能了。

8-1选择器(8-Line-to-1-Line-Data Selector)

选择器顾名思义,通过组合,三个开关就可以表示八种选择,这就是选择器所要实现的目标。
封装后的部件

功能表如下

S2 S1 S0 输出
0 0 0 D0
0 0 1 D1
0 1 0 D2
0 1 1 D3
1 0 0 D4
1 0 1 D5
1 1 0 D6
1 1 1 D7

电路图

3-8译码器(3-to-8 Decoder)

与选择器很像,同样是三个开关控制八个数据的输入

逻辑表如下

S2 S1 S0 O7 O6 O5 O4 O3 O2 O1 O0
0 0 0 0 0 0 0 0 0 0 Data
0 0 1 0 0 0 0 0 0 Data 0
0 1 0 0 0 0 0 0 Data 0 0
0 1 1 0 0 0 0 Data 0 0 0
1 0 0 0 0 0 Data 0 0 0 0
1 0 1 0 0 Data 0 0 0 0 0
1 1 0 0 Data 0 0 0 0 0 0
1 1 1 Data 0 0 0 0 0 0 0

译码器、选择器与锁存器的组合

译码器与锁存器组合并不简单,相比于选择器,我们还要处理W操作端的问题,下图看上去简单,还是需要好好观察该组合的巧妙设计的啦~(写操作端和数据输入端可以对调,我觉得对调后更便于之后集成的理解,不知为何书中并没有这样做,当然封装后电路的功能是相同的)

再进一步封装

对这就是RAM(Random Access Memory)随机访问存储器

RAM实际容量 = 存储容量*位宽

上述过程我们得到了一个8*1的RAM,姑且把8称作RAM阵列的存储容量,1称作RAM的位宽

拓展RAM的存储容量

与选择器,译码器集成

封装

拓展RAM的位宽

通过电路上的并联我们可以得到

8*2的RAM,一个地址存放两个bit的数据

通过类似的方式可以组成8*3、8*4的RAM阵列

RAM阵列

事实上不难发现,RAM的存储容量=2^地址输入端个数,通过以上的两种方式我们可以得到这样的阵列:存储容量为1024,位宽为8的RAM阵列,可以存储8192bit的信息

也可以得到这样的阵列
(1K等于1024bit,可以想象一下这样一个RAM需要多么多么多的小存储器)

猜你喜欢

转载自blog.csdn.net/weixin_37868901/article/details/82587590