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需要多么多么多的小存储器)