寄存器和内存
前言
前边已经聊完了计算机的基础,计算单元,只有计算,没有数据显然是不行的,要完成程序类的工作,还需要一个可以储存东西的地方,现在要完成下一步了,就是计算机的寄存器和内存。
一、寄存器
对于寄存器,我们可以先理解的一点是,需要它记住一些数据,也就是它会保持一个输出。
1.锁存器
这里先拿一个OR门做尝试,将OR门的输出做一个反馈,将反馈作为其中一个输入。
在这种电路下,如果输入A曾经输入过1,那么由于受到反馈的影响,该电路将永远保持1,但问题是这是一个永久保持的电路,再也不可能变回0.
那再用一个AND门试试。
结果就是这是一个可以记录0值的电路,也是永久保持的。
这里其实已经完成了值的记录,但问题是,它们似乎只能记录一次。
我们现在有了可以记录1和可以记录0的两种电路,再思考一下。
试试把这两种结合一下。
这是一个很精妙的电路,当设置输入为1时,输出为1,且当复位为1时,输出会变成0.
“它记住了它的最后一个值!”
它还有一个名字,叫做锁存器。
此时就可以对这个电路做进一步的抽象了。
在允许写入为1时,门锁打开,数据输入,允许写入为0时,不论输入多少,输出不变。
2. 8位寄存器
单个的这样的一个锁存器只能存1bit,没有什么大用。
呐,这就来了,把这样的八个排列在一起,这样的一组锁存器就叫做寄存器!
这里把允许输入串联在一条线上,需要写入时,将允许写入设为1,写完后,再将允许写入设为0,这样就存起了8位数据。
3. 高位寄存器
如果数据只有很少的位,那么上述的将锁存器并排放置已经足够用了,但事实是我们的数据往往需要更多位。
比如64位,那我们需要64根数据线,64根连接到输出端,64根连接到输入端,再使用一根允许读入线,只花了129根线就完成了这个电路。
那如果256位呢,如果依然这样用的话,我们似乎需要256+256+1,也就是513根线,成本压力开始上来了。
线性的并排放置似乎满足不了我们的需求。
那就试试矩阵。
这次我们再看看需要多少根线,显然,比之前的方式少了很多。
只有当行线和列线同时为1时,才能对某个确定的锁存器进行操作,同时需要一条数据线来进行数据传输,一条允许写入线以及一条允许读取线,写入和读取当然要进行分开!
二 内存
在实际使用时,我们使用一个多路复用来处理行,也就是4位的二进制来计算行,另外一个多路复用来处理列。
再往上进行一次抽象。
现在拥有一个256位的内存,它通过8位地址来寻找需要进行修改或者读入的锁存器。
通过数据线来进行写入或者读取。
通过允许写入/允许读取线来判断操作状态。
但是每一次的写入或者读取只有一位,这似乎不太符合我们的需求,比较常用的是八位,也就是一个字符。
所以尝试一下,把八个这样的内存横置。
这样每一次读取或者是写入,就可以进行一个8位数据的读取/写入。
这样就完成了一个可寻址的内存,可以写入/读取256字节的数据。
再往上进行一次抽象。
每一个8位的行列数据就可以获得一个8位的内存数据。
这里看到了一个新词,RAM(Random Access Memory),可读取随机寄存器,我们在上边就完成了一个256位的RAM。
三 题外内容
这样的一个小方块,是12864位。
这样的一个方块,是4个小方块,也就是412864位
这里一共有32个方格,也就是32412864
这样的一个芯片,大概有一百万位。
这样的一块内存,有8个芯片,也就是大概有800万位。
也就是1MB!
好像很大,又好像很小。
从最底层的逻辑门,到锁存器,再到这样的一个内存,百万数量级的复杂的一块内存,却只有1MB,真是令人唏嘘。
总结
知识离我感觉越来越近了,这一趟学习让我感觉自己跨越了这漫长的工业旅程,以及充分的体会到这些科技结晶的珍贵。