06|寄存器和内存
从上节讲到的算术逻辑单元完毕之后,这一节我们将介绍到一个比较重要的就是:寄存器和内存
重点是Memory(存储/内存 良中含义)
其中介绍到的点如下所示:
- 存1位(Gated Latch 锁存器)
- 存8位(Register 寄存器)
- 16*16的矩阵存储256位 数据选择器/多路复用(Multiplexer)解码8位地址,定位到单个锁存器
- 4位代表行,4位代表列
- 组合256位内存+多路复用
- 可寻址的256字节 内存 1980年代的内存 1M大小
- 8各模块,那个模块有32个小方块,每个方块有四个小块,每个小块对应的是128位*64位
01|Memory
上文中讲到的算术逻辑单元,其中的算术单元和逻辑单元的组成,但是如果只是计算的话,就直接扔掉之后的意义并不大!
对应的我们需要将结果存储起来,以便之后的使用,可能会有多个连续操作,这个时候就不得不介绍到计算机中比较重要的部分,Memory了,也就是所谓的内存!
如果说你玩过长时间的对局或者扫雷之类的游戏等等,如果遇上天气不好,打雷之类的导致突然断电,你就会因为失去存档或者进度而感到失落! 明明快结束了或者快赢了的时候,突然一下子什么都没了,电脑也关机了!
那么你又是否想到过,为什么断电会导致扫雷或者主机游戏进度的丢失呢?
其实如果说你认真学习过计算机科学的话(比如现在的我正在温习),你可能心里有了答案,这是因为电脑是用的是随机存取存储器/内存(Random Access Memory)
对应的特性如下所示:
- 只能够在有电的情况下存储东西!
你此时也可能好奇,那么只有随机存储,有没有对应的永久性存储吗? 对的,是有的,有一种存储/内存叫做持久性存储,就是将对应的内容持久化到存储设备上? 譬如说:U盘,硬盘,存储卡 都是常见的存储设备/介质!
之后我会针对持久性存储,讲讲我对他的学习和理解!
做只能够存储1位的电路,之后再扩大做出我们的内存模块,瑕疵和ALU结合起来,做出CPU(中央处理器).但是至今的电路都是单向的,总是向前流动的,比如说之前说到的 8位波动进位加法器 也可以做回向电路,把输出连回输入,使用对应的OR门可以做到!
A------
or----|-----OUTPUT
B------ |
| |
| |
|----------|
其实就是这样一个结构,输如0和0对应的输出也就为0,但是如果说对应的A为1,对应的 1 or 0,对应的结果输出回到B也就是为1了,对应的1 or 1也就是为1 这个电路能够存储1,是永久的,但是无法从 1变回0这是问题所在!
A------
and----|-----OUTPUT
B------ |
| |
| |
|----------|
对应的该电路如果输入1and1的话输出的结果为1,但是如果说有一个为0,那么对应的结果就为0!
现在结合两个电路图就可以很好地理解,组成了or-and电路,次是为了做出有用的存储/内存,我们可以将电路结合起来!
对应的AND-OR锁存器!
对应的有两个输入:
- 设置: 输出变为1
- 复位: 输出变为0
如果说设置和复位都是0的话,就会输出最后放入的内容! 对应的可以存住1位的信息! 这叫锁存,对应的锁定了一个值!对应的写入和取出都是比较好理解的,输入数据和输出数据 现在这种办法还是不错的,但是我们希望只有一根输入线,,将它设置为0或者1来存储值,对应的还需要一根线来启用内存,启用时允许写入没启用的时候就锁定!
我们不关心单独的逻辑门,并且提升抽象,把对应的锁放入到盒子中去,该盒子能够存储一个bit,我们讲讲组件!
A-----
Value Lock ----- output
B-----
对应的不管输入的值是什么,譬如说A,0或者1只有当B启用的时候这把锁打开才能够锁住对应的值! 输出的永远都是Value Lock的值!
如果说只是这样的话,其实也没有多大的作用毕竟1bit能干的事情不多!
02|寄存器
如果说我们放置8个锁存器的话,对应的可以存8位信息,比如说8bit数字! 一组这样的叫做寄存器! 寄存器能够存一个数字,该数字有多少位,就叫做位宽 早期电脑启用8位寄存器,然后是16位再是32位寄存器! 如今计算机大多数用64位宽的寄存器!
如果说需要使用寄存器,写入寄存器,需要启用里面的所有锁存器,可以用一根线连接所有的允许输入线,并且设置为1,将8条数据线发数据,然后将允许写入先设置为0 对应的8位的值就存储起来了!
对应的使用很少的位,并排的放置,也勉强够用了! 64位寄存器64根数据线,64根连到输出线! 但是我们只需要一根线启用所有锁存器,但是加起来也有129根了!
如果说是256位的话,对应的需要513根线!
为了更好地解决其实最好的办法就是使用矩阵,矩阵中,并不并列排放锁存器,而是做成网格的形式,存储256位,我们用1616网格的锁存器,16行16列*,启用锁存器就需要打开对应的行和列线! 对应的交叉处,锁存器的允许写入线和所有的其他线路,都是保持关闭的,使用and门的情况下可能会好很多,比如:
只有行和列线都是为1的时候,and门才会输出为1,我们可以选择单个锁存器,这种行列排列法,再用一根允许写入线连接所有的锁存器!
为了让锁存器变成允许写入,行列和允许写入线都必须为1才行! 每次只有一个锁存器才会这样! 代表我们可以只用一根数据线来连接所有的锁存器传输数据!
对于256位的存储,我们只需要35根线,1条数据线,1条允许写入线和1条允许读取线,对应的还有排列为1616的线!做矩阵*
我们需要指定一种方法来标识对应的地址:例如说一个交叉路口,可以用对应的坐标表示,但是坐标的表示形式是我们需要考虑的问题!
例如说12列8行! 统一使用二进制表示
12列:1100
8行:1000
对应的组合表示则为:11001000 之后就可以将地址转换成为行和列! 我们就需要使用到 多路复用器
因为有16行,我们就需要使用到16个多路复用器,输入4位数字,会把那根线连接到对应的输出线,如果输入0000会选择第一列,对应的8bit代表 列+行 我们可以当成整体看待,与此同时我们还需要允许写入和允许读取的线,对应的还需要一根数据线用作读/写操作!
但是对应的256位的内存还是能做的东西不多,我们可以扩大规模对应的将她们并排存放,想寄存器一样,一行8个,可以存8位数字,对应的8位也叫一个字节byte,为了存储一个8位数字,我们同事给8个256位内存一样的地址! 每个地址存储1位! 意味着总共能存储256byte字节,我们不深究内部,对应的看做整体可寻址内存! 我们由256个地址,每个地址能够读或者写8位值!