寄存器和内存 - 计算机组成原理(五)

上一章我们降到了算术逻辑单元,是计算机计算的基本单元,但如果计算出来的结果没有地方保存,就会丢失掉,计算也就没有了意义,所以这一章节主要讲解计算机的是如何存储数据的

存储的分类

存储有两大类,一类是存储只在计算机的运行时保存数据,他们读写速度快,但是如果掉电了数据就会消失,这类存储叫做Random Acess Memory ,简称RAM

相反的,另外一种内存读写速度不如RAM,但是它可以在掉电的情况下存储数据,叫做ROM

本章节将从1bit的存储开始讲解,再慢慢扩大,做出我们的内存模块,后面的章节我们就可以将存储和ALU结合起来做出一个简单的CPU

1bit存储器 - 门锁

首先我们要思考什么是存储,我们要保证一个电路,其输出在写入之后,如果没有被允许再次写入的话,它的输出不能被改变,即每次读出的数据都是一直的。

我们来看一个电路,这个电路可以看出只要B出现了1,无论A如何改变,OUTPUT始终是1

相反的如果将,中间的或门改成与门,只要B为0,无论A输入什么值,OUPUT始终是0

这两个电路可以分别看作一种存储,第一个电路能够存储1,只要保证B输入不变,OUTPUT能够一直保存在1这个状态,而第二个电路存储了0, 而我们的目标是一个能够灵活存储0或者1的电路,我们可以将上面的两个电路相结合,会出现如下情况

如果SET=1, RESET=0, OUTPUT会保存一个1

如果RESET=1, 那么就会使OUTPUT始终为0

如果SET= 0, RESET= 0, OUTPUT 将会保持上一次输入的值

此时,上一次输入的值就会被保持住, 我们把它叫做锁存,它锁住了一位信息

为了更加简单的描述输入输出,我们希望只用一个输入线表示输入的信息,0或者1, 一个输入线来使能写入,一个输出线输出当前保存的值,这时候只要加上一些门电路就可以实现

DATAINPUT 用于输入数据, WRITEENABLE为写使能,为1的时候才允许写入,为0则允许写入

此时这个门电路有点复杂了,我们再次使用抽象的方法,将它抽象层一个层次,我们叫他门锁(Gated Latch)

寄存器

有了上一个章节讲的门锁,我们可以将数个门锁组合组合在一起就形成了一个寄存器, 寄存器可以存储一个数字,这个寄存器由多少个门锁组成,就叫做寄存器的位宽,它代表着这个寄存器有多少位,早期计算机都是8位寄存器,到如今基本上都是64位寄存器了

我们可以将所有门锁的允许写入线都由一条线连接起来,就形成了一个8位寄存器

内存

8位寄存器比较简单,但是如果是64位寄存器的话,我们就需要64个写入线,加64个读取线,加1条使能线,一共129条线这就太复杂了。

解决方法是将门锁排列成一个矩阵,如果要读写某一个bit就将对应行列的使能线置1

我们要使在这个行列上只有对应的门锁能够写使能,而其他门锁都不被修改,就需要使用与门,放大来个这个逻辑,使用了这个与门的电路,只有这个行列的写使能都为1,门锁才会被使能写入,而其他的门锁是不被允许写入任何数据的

同样的,对于数据读取我们也用一个允许数据读取线来控制,只有在这个行列被选中后,才允许数据的读取,其他门锁的数据都是无法读出数值的。

所以对于一个256bit的存储器来说,我们只需要1条数据线,一条允许数据读取线,一条允许数据写入线, 和16+16条矩阵的控制线,一共35条线就解决了

此时,我们需要一种方法来定位某一个门锁,来控制读取或者写入,比如说第12行,第8列的门锁

12用二进制是1100, 8用二进制是1000, 合起来我们用11001000来表示第12行,第8列的门锁,这就是该存储的地址

为了将一个地址,转化成我们需要操作的门锁的位置,我们需要一个东西叫做多路复用器(MultiPlexer), 它的作用就是将地址转化成某一个行列的门锁的使能

这里开始就有点复杂了,所以我们再次提升一级抽象,抽象出一个256-bit的内存

它需要一个8位的地址输入,找到对应的门锁,一个数据线写入数据,一个允许写入线和一个允许读取线。

显然256bit还是不够的,我们需要扩大其规模

我们将8个256bit的内存并排放,并且将他们的地址线,使能线和输入DATA都连接在一起, 这样可以看到每次可以输入一个8bit的数据, 而这8个256bit的内存的同一个地址,保存着这个数据的每一个bit,这样就可以存储256Bytes的数据了

此时我们再次将它抽象,变成一个可以按照地址存储的8bit位宽的256字节内存大小的内存

它有8bit的数据输入,8bit的地址输入,以及读写的使能线,这就是一个最简单的内存,下一章我们会用这个内存做一个CPU

现实中的内存

这是一个现实中的内存条,可以看到是由8块芯片组成,如果将其中一块放大可以看到32个内存方块

再将其中一个方块放大,可以看到4个小块

再将其中一个小块放大可以看到一个矩阵,这个内存是128x64的矩阵

每个放个4个矩阵则有 4x128x64 = 32768位存储

而有32个方块就有 32x32768 = 1048576,大约100w 位

而一个内存条有8块芯片,所以它大概可以存储800wbit,也就是1MB大小,这在今天已经算是一个非常小的内存了,我们只需要不断向上叠加矩阵,层层嵌套,像俄罗斯套娃这样就可以做出更大的内存了

上一章:

算术逻辑单元-计算机组成原理(四)icon-default.png?t=N7T8https://blog.csdn.net/pietian1157/article/details/138034421?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22138034421%22%2C%22source%22%3A%22pietian1157%22%7D

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacen.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值