P6 寄存器 & 内存-Registers and RAM
具备记忆存储功能的电路
锁存器
固定存储1的电路:
![](https://img.haomeiwen.com/i1440447/fa09b3e044311ff2.png)
用一个或门即可实现固定存储1,在输出端添加一根线返回到原输入端B,这样当或门输出1之后,无论A输入端如何改变,电路会一直持续输出1。
固定存储0的电路:
![](https://img.haomeiwen.com/i1440447/5cccee236998e513.png)
用一个与门即可实现固定存储0,在输出端添加一根线返回到原输入端B,这样当与门输出0之后,无论A输入端如何改变,电路会一直持续输出0。
AND - OR锁存器:两个数据输入端的1位锁存器
![](https://img.haomeiwen.com/i1440447/b71269838c735280.png)
两个固定存储0和1的电路相结合即为具备存储0和1的电路。
当设置端 = 1时,固定存储1;当复位端 = 1时,固定存储0。如果设置端 = 复位端 = 0,电路会输出最后放入的内容。
门锁:单个数据输入端的1位锁存器
![](https://img.haomeiwen.com/i1440447/f6e42d1221ce72d6.png)
允许写入线是负责打开或关闭存储功能的输入端。
当允许输入线端 = 0时,无论数据输入端 = 0或1,电路的输出端恒为上一步存储的结果(若无上一步存储,则输出默认为0)。因此可以通过控制允许输入端打开存储功能与否,从而实现长期或短期存储数据输入端所提供的数值(一个字节)。
寄存器
一位字节的存储电路已经实现,但是现实需要的数据存储至少要求4位字节,8位字节等,因此通过利用多个锁存器并行组合成的电路形成的元件,就是寄存器。
位宽:寄存器存储的每一个数字的位数。
![](https://img.haomeiwen.com/i1440447/cc2f6a2bce4d2d9a.png)
利用8个单字节锁存器即可实现8位寄存器,同时将8条启用写入线替代为1条总启用写入线。
也就是说,64位寄存器需要129条线,256位寄存器需要513条线,这样的话就太烧钱了!!!矩阵应运而生!!!
矩阵:
![](https://img.haomeiwen.com/i1440447/e15ef2d937803de8.png)
当要启用某个锁存器时,就打开相应的行线和列线。如何实现呢?
![](https://img.haomeiwen.com/i1440447/1e4f5a18b2ae8a90.png)
对于一个m * n的矩阵如果我们单纯设置相对独立的m条行线和n条列线作为允许写入线,是不可以实现打开或关闭指定锁存器的功能的,因为,当第k行线或第k列线为1时,第k行或第k列所有锁存器都会打开。因此需要做点改动:
![](https://img.haomeiwen.com/i1440447/c08830afeefe1735.png)
如图,对于两条行和列的允许写入线设置一个与门,当两者都为1时,指定的锁存器才会打开允许写入的功能(未打开的锁存器则自动忽略数据)。
当然,我们也可以用同样的办法设置允许读取线来读取数据。
对于256位寄存器,如今只需要1条数据线,1条允许写入线,1条允许读取线,16条行线,16条列线,即35条线!
多路复用器
交叉点的标志:寄存器通过矩阵打开指定锁存器存放数据,而指定位置其实也是一种数据,也就是地址。
一个寄存器需要两个多路复用器充当行,列的两个地址标识。(比如存放8位数据的256位寄存器,最多有16行或列,16 = 2^4,因此这里的多路复用器采用4位即可,eg:12行8列 = 1100 1000)
![](https://img.haomeiwen.com/i1440447/f5c9e53a5f1d9850.png)
8位数字内存(1位数字8个字节)
其实就是8个类似256位寄存器并排组成的内存。
![](https://img.haomeiwen.com/i1440447/a733d8e683f41509.png)
![](https://img.haomeiwen.com/i1440447/5d767395933411c7.png)
含有256个地址,每个地址能读或写一个8位值。