寄存器与内存


首先从1位的存储电路开始,之后再扩大为内存模块。

一、一位存储电路

1.1 或门的回向电路

逻辑门和ALU的博客中提到的电路都是单向的——总是向前流动,但也可以做回向电路,把输入连回输出。
在这里插入图片描述
首先两个输入都设为0,所以电路输出为0;
如果将A变为1,所以输出1,一转眼的功夫,输出回到B,或门看到两个输入都是1,1或上1仍然是1,所以输出不变。如果将A变成0,或门依然输出1,现在我们有个电路能记录1然而有个问题:这是永久的!无论怎么试,都没法从1变回0。
在这里插入图片描述
CMOS或门输入电平大于3.3V为逻辑1。
CMOS是由NMOS和PMOS组成的,mos管是一种电压控制电流的元器件,不同于三极管的电流控制电流元器件,所以在输入端加入电阻并不会在输入时存在有分压的可能性(没有构成闭合回路),这里加入R1电阻的主要目的是,或门的输出与输入相连接,当输入与输出的电压不同时,保护输入电源(电路中不允许电位不同的电源直连)。

顺带说一下,由于mos管是一种电压控制电流的元器件,所以mos管的功耗较低,目前市面上的移动终端的主控芯片均采用mos管进行设计。

1.2 与门的回向电路

在这里插入图片描述
开始时,A和B都设1,输出1,如果之后A设为0,由于是AND门,输出会变成0,这个电路能记录0,和之前那个相反。就像之前,无论A设什么值,电路始终输出0。

1.3 AND-OR锁存器

为了解决这个问题,我们将两个电路组合起来,形成一个叫做“AND-OR锁存器”。
在这里插入图片描述
“设置”输入1,“复位”为0时,输出变成1;
“设置”输入1,“复位”为1时,输出变成0;
当输出为0时,将“设置”输入0,“复位”为0,此时输出为0;
当输出为1时,将“设置”输入0,“复位”为0,此时输出为1;
如果“设置”和“复位”都是0,电路会输出最后放入的内容,也就是说,它存住了1位的信息
这叫“锁存”,因为它“锁定”了一个值,放入数据的动作叫“写入”,拿出数据的动作叫“读取”。

1.4 门锁Gated Latch

麻烦的是,用两条线“设置”和“复位”来输入,有点难理解,为了更容易用,我们希望只有一条输入线,将它输入0或1来储存值,还需要一根线来启用内存,启用时允许写入,没启用时就“锁定”,这条线叫“允许写入线”。加上一些额外逻辑门,可以做出这个电路。
在这里插入图片描述
允许写入线为1,表示允许写入。
当允许写入线为1时,数据输入为0,则数据输出为0;
当允许写入线为1时,数据输入为1,则数据输出为1;
当允许写入线为0时,无论数据输入为0或1,则数据输出不变;

“门锁”,因为门可以打开和关上。我们不想关心单独的逻辑门,所以我们提升一层抽象,把“门锁”放到盒子里—这个盒子能存一个bit,这就是锁存器
在这里插入图片描述

二、寄存器

2.1 8位寄存器

如果我们并排放8个锁存器,可以存8位信息,比如一个8bit数字。一组这样的锁存器叫“寄存器”,寄存器能存一个数字,这个数字有多少位,叫“位宽”。
早期电脑用8位寄存器,然后是16位,32位,如今许多计算机都有64位宽的寄存器。
写入寄存器前,要先启用里面所有锁存器,我们可以用一根线连接所有“允许写入线”,把它设为1,然后用8条数据线发数据,然后将“允许写入线”设回0,现在8位的值就存起来了。
在这里插入图片描述
D:数据输入
E:启用写入线
Q:数据输出

2.2 16×16门锁矩阵

如果只是很少的位(bits),把锁存器并排放置,也勉强够用了。64位寄存器要64根数据线,64根连到输出端,1根线启用写入线,加起来共129根。如果存256位要513条线。为了合理使用引脚资源,引入矩阵解决方案。

在矩阵中,我们不并列排放锁存器,而是做成网格,存256位,我们用16×16网格的锁存器,有16行16列,要启用某个锁存器,就打开相应的行线和列线。
在这里插入图片描述
单个网格放大:
在这里插入图片描述
通过行线列线以及允许读出线/允许写入线可判断是对哪个锁存器进行读写操作。每次只有一个锁存器会这样,代表我们可以只用一根“数据线”连所有锁存器来传数据。
这种行/列排列法,用一根“允许写入线/允许读出线”连所有锁存器。
所以对于256位的存储,需要1条数据线,1条允许写入线,1条允许读出线还有16行16列的线用于选择锁存器,总共35条线。

如何唯一指定交叉路口?
由于最多16行,用4位就可以表示,比如12行8列的寄存器
行地址:12用二进制表示为1100
列地址:8用二进制表示为1000
12行8列可以写成11001000,为了将地址转成行和列,我们需要多路复用器。多路复用器有不同大小,因为有16行,我们需要1到16多路复用器。
在这里插入图片描述
输入一个4位数字,它会把那根线,连到相应的输出线。如果输入0000,它会选择第一列,如果输入0001,会选择下一列,依此类推。一个多路复用器处理行,另一个多路复用器处理列。

那么把256位内存当成一个整体好了,又提升了一层抽象。
它输入一个8位地址:4位代表列,4位代表行。我们还需要“允许写入线”和“允许读取线”,最后还需要一条数据线,用于读/写数据。在这里插入图片描述

三、内存

把256位内存并排放置,就像寄存器一样,一行8个,可以存一个8位数字,8位也叫一个字节(byte)。为了存一个8位数字,同时给8个256位内存一样的地址,每个地址存8位,意味着这里总共能存256个字节(byte)。
在这里插入图片描述
为了简单,我们不管内部,不看作是一堆独立的存储模块和电路。而是看成一个整体的可寻址内存。我们有256个地址,每个地址能读或写一个8位值。

四、总结

现代计算机内存扩展到上兆字节(MB)和千兆字节(GB)的方式,做法是相同的,都是不断把内存打包到更大规模,因此需要更多的地址线。内存的一个重要特性是:可以随时访问任何位置。因此叫“随机存取存储器”,简称RAM。
这里用锁存器做了一块SRAM(静态随机存取存储器),还有其他类型的RAM,比如DRAM,闪存和NVRAM,它们在功能上与SRAM相似,但用不同的电路存单个位,比如用不同的逻辑门,电容器,电荷捕获或忆阻器,但根本上,这些技术都是矩阵层层嵌套,来储存大量信息。
计算机中很多事情,底层其实都很简单,让人难以理解的,是一层层精妙的抽象,像一个越来越小的俄罗斯套娃。

五、参考资料

[1]: 计算机科学速成课

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值