3.2主存储器的基本组成

一、引子

这一小节,

我们首先学习使用半导体元器存储0和1的基本原理。

然后通过半导体元器件组合,可以构成存储芯片。因为存储芯片里面存储了很多个字的数据,所以存储芯片必须提供一个寻址的功能。

最后再探讨不同的寻址方式如何实现。
在这里插入图片描述

二、半导体元件

现在来看一下组成主存储器的基本半导体元件及它的基本原理。

1.基本半导体元件

在第一章,我们学习过,一个存储器,可以分为存储体、MAR(地址寄存器)、MDR(数据寄存器)。这三个部分,会在“时序控制逻辑”的控制下,相互配合着工作。如下:

在这里插入图片描述存储体就是用来存放实际的二进制数0和1的,一个存储体由多个存储单元构成,每个存储单元又由多个存储元构成,也就是存储元件。用存储元件,就可以存放二进制数0或1。

在这里插入图片描述
这里涉及到两个半导体元器件,下面的部分是电容,上面是MOS管。

(1)MOS管

MOS管可以理解为一种用电控制的开关。输入电压达到某个阈值时,MOS管就可以接通。
①如果在左端加上一个高电压,比如达到了5V阈值,那么这个MOS管就可以导电。
在这里插入图片描述

②如果不给左端加电压,或者电压达不到阈值的要求,那么这个MOS管就是一个绝缘体,不导电。(可以看见图中虚线)
在这里插入图片描述
MOS管是**半导体 **,既不是导体也不是绝缘体。在给了一定电压条件之后,这个绝缘体可以变为导体;但如果给的电压条件不满足,它又不是导体。

(2)电容

电容在高中就学过了。一个电容由两个金属板还有中间的绝缘体构成。可以看见,下方的金属板是接地的,那么这里的电压就是0V。

如果现在给上面的金属板加一个大于0V的电压,比如加一个5V的高电压。由于上下的金属板产生了电压差,所以电容里面的电荷就会开始移动。就是给电容充电。
在这里插入图片描述
当输入5V电压之后,电容里面就会保存一定的电荷。

如果在上面金属板输入的是低电平信号,比如0V或者1V,下方还是接地(0V)。由于上下金属板的电压差非常小,所以这种情况下,电容不会充电。

所以,可以根据电容是否保存了电荷两种状态的信息来对应二进制的0和1。

给电容充电就是写数据的过程;给电容放电就是读数据的过程。

2.读写二进制数

(1)读出二进制

①二进制1

假设现在电容上保存了一些电荷,规定,当它保存了一些电荷,就对应二进制的1。

那么该如何读取二进制的比特位呢?

只要给MOS管左端加上高电平信号,比如5V。也可以理解为输入了二进制的1。
在这里插入图片描述
当MOS管左端的电压达到一定阈值之后,这个MOS管就可以接通。
由于MOS管现在接通了,所以电容里面保存的电荷就可以顺着导线往外流。
在这里插入图片描述
当我们在右端检测到有输出电流的时候(如下图)
在这里插入图片描述

就意味着它输出了二进制的1。
在这里插入图片描述

②二进制0

如果此时电容里面没有保存电荷,比如下面的状态,表示二进制的0。

在这里插入图片描述
当MOS管接通的时候,在右端并不能检测到电荷的流出。
在这里插入图片描述因此,就可以判断,电容里面保存的是二进制的0。

(2)写入二进制

假设现在想让电容保存二进制1,那么可以在右端加入一个5V的高电平电压。

同样在MOS管也加一个5V的高电平(假设5V是阈值),让MOS管接通。如下:
在这里插入图片描述
那么电容上面的金属板电压就是5V。又由于下方接地,所以下方金属板电压是0V。只要电容金属板两端有电压差,就会导致电容里面的电荷开始移动。所以电容就会存储一些电荷。也就是存储了二进制的1。
在这里插入图片描述

再让MOS管断开,这样电容里面的电荷就跑不出去了。

3.存储体

如果将多个存储元进行科学合理地连接,那么就可以一次性读出或者写入多个二进制数据。

比如上边的一排二进制存储元,存储的二进制信息分别是:10100011,上面的红线,连接了每个存储元的MOS管(如下图)。
在这里插入图片描述

如果给红色的线加一个5V的高电平,就意味着所有存储元的MOS管都接通了。

当MOS管接通之后,电容里面存储的电荷就可以顺着灰色的线,然后从绿线导出。

那我们只需要检测绿色的线有没有产生电流,来判断每条线对应的是二进制的0还是1。

如果有电流,就是二进制的1;如果没有电流,就是二进制的0。(如下 图)
在这里插入图片描述
所以,根据这样的方式,就可以读出一整行的存储元(一行就是一个存储单元)所存储的二进制比特信息。也就是存储字。

多个存储单元就构成了存储体,也叫存储矩阵。
在这里插入图片描述
一次可以读出的二进制位就是一个存储字,这个例子的存储字长就应该是8bit(一行有8个存储元)。
如果现在有16个存储元构成一行,这就意味着存储字长变成了16bit。

那么现在就能理解,在第一章说过的,存储器每次读或者写的单位都是读或者写一个存储字。因为同属于同一个存储字的存储元件,它们的MOS管的左端都是接着同一根线(图中红线)。如果接通了这根线,那么一行所有的存储元都同时接通。也就能同时读出或写入啦。

三、存储芯片的基本原理

刚才的存储体只包含了两个存储单元。

那么接下来我们要探讨,如何根据地址来决定要读或者写的是哪个存储字。

1.译码器

这就涉及到译码器的使用。
我们给出n位二进制地址之后,这n位二进制地址会对应2^n个存储单元。

所以译码器会根据地址寄存器MAR给出的这n位地址,把它转换成某一条选通线的高电平信号。

比如此时CPU给MAR送过来的地址是:000

在这里插入图片描述

000翻译成十进制是000。

所以译码器会给第0根字选线一个高电平输出。这样的话,第一个存储字对应的存储元件都会被选通。就可以读出每一位二进制数据了。
在这里插入图片描述
总之,每一位地址,会对应译码器的一条输出线。

这个例子,总共有2^3=8个地址。因此译码器的输出端总共会有8条线。

经过译码器的处理,一个地址信号会被转换成译码器的某一条输出线的高电平信号。

当红色的字选择线被接通之后,我们就可以通过数据线(图中绿线)把每一位的二进制信息传送到MDR中。
在这里插入图片描述

然后CPU会通过数据总线从MDR中取走一整个数据。数据总线的宽度应该和和存储字长是相同的。
对这个例子来说,存储体的总容量等与
在这里插入图片描述

2.控制电路

接下来,我们继续完善存储芯片的构成。

需要增加一个控制电路。用于控制译码器、MAR、MDR。
在这里插入图片描述
比如,CPU通过地址总线把地址送到MAR中。由于我们使用的是电信号来传送这些二进制数据,而电信号难免会有不稳定的情况。

所以,在MAR中的电信号稳定之前,MAR中的地址信息是不能送到译码器当中的。

(这就是控制电路的一个作用,只有当MAR稳定之后,控制电路才会打开译码器的开关,然后让译码器翻译地址,给出相应的输出信号)

同样,当数据输出时也是一样,只有当输出的电信号稳定之后,控制电路才会认为此时的输出是正确的。所以,控制电路也会控制MDR在什么时候给数据总线送出数据。
在这里插入图片描述

3.对外线路

另外,存储芯片还需要对外提供一些线路。

①片选线
头上划线表示该信号低电平有效
片选线又叫CS(Chip Select)芯片选择信号或CE(Chip Enable)芯片使能信号

如果给出的芯片选择信号是一个低电平的时候,就说明这个芯片的总开关是被我们接通的。

②读控制线

当我们需要读出数据的时候,就要给读控制线OE一个低电平信号,表示此时要进行读操作。

③写控制线

当写控制线WE的信号是低电平的时候,表示此时芯片正在进行写操作。(就是将MDR里面保存的数据输入到各个电容当中)
在这里插入图片描述

读控制线和写控制线可以分为两根,还可以将它们合二为一。

用一根线WE来表示究竟是写还是读。(低电平写,高电平读)

🚗注意

头上划线表示该信号低电平有效。

需要注意题目中是两根读写线,还是一根读写线。这两种方式对外暴露的引脚数目是不一样的!

4.整合

那么,现在我们就可以给出存储芯片的完整构造。(如下图)

将内部细节去掉,再将其封装之后,就是之前学到的图,看一下对比图:

在这里插入图片描述
整体来看,存储芯片由这样的三个部件构成。

①存储矩阵就是一个一个的存储元。

②译码驱动电路实际上是译码器(上面介绍过)和驱动器(将电信号进行放大)

驱动器:译码器会输出某一条线路的高电平信号,这一条线会连接很多存储元,需要控制这些存储元的开和关。为了让译码器输出的高电平信号稳定有效,所以通常会在译码器后面接上一个驱动器,用来保证译码器输出的电信号是稳定可靠的。所以驱动器其实就是把电信号进行放大的一个部件。

③读写电路包括图中说的红线和绿线还有控制电路。

另外,存储芯片需要接收来自外界的地址信息,这个地址信息,通常是CPU通过地址总线传过来的。还需要数据线进行数据的传输。还要通过片选线的电信号来确定此时这块芯片是否可用。

读写控制线可能有一条,也可能有两条。

❓ 大家可能还会疑惑片选线有什么作用。

来看一个实际的内存条,中间一块一块的黑色的芯片就是存储芯片。
在这里插入图片描述
比如这一块内存条上的存储芯片的存储容量都是1GB,它总共有8块存储芯片,那么就可以存储8GB的数据。

如果你要读取的数据,刚好存放在这一块存储芯片当中:

在这里插入图片描述
当我们提供了一个读写的地址之后,只能让这一块存储芯片工作,其他的存储芯片不能工作。这就是片选线的作用。如果只想读取这一块存储芯片指定地址的内容,那么就需要让这块存储芯片的片选线信号有效。(也就是CS信号给一个低电平),而其他芯片的片选线信号都是高电平信号。这样就可以保证,此次读取的就是指定芯片的数据。

补充一个知识,这里的每一块存储芯片都会对外暴露出一个一个的金属针脚(或者叫金属引脚)。如下:(每根线都会对应一个金属引脚)
在这里插入图片描述
这些金属引脚就是用来接收地址信号、数据信号或者片选线信号、读写信号的。

所以,会经常遇见这样的题目:告诉你一块存储芯片的某一些参数信息,让你判断这一块存储芯片的引脚数目至少应该是多少。

这种类型的题目,就是让你判断地址线(或数据线)有多少根,每根地址线(或数据线)会对应一个金属引脚。片选线也会对应一个金属引脚。还有读写控制线(用来表示此时进行的是读操作还是写操作),至少对应一个金属引脚(读写控制线分为两根就是两个金属引脚)。另外,还有供电引脚、接地引脚等。

📚补充

如果告诉你一个存储芯片有n位地址,那么就意味着地址线需要有n条。n位地址又会对应2^n个存储单元

知道了存储单元的数量,再乘以每个存储字长,就可以得出芯片的总容量。

之前,我们都是用多少个字节,或者多少个bit来描述一个芯片的容量。

还有一种描述方式,比如一块存储芯片是一块88位的,第一个8表示有8个存储单元,第二个8表示每个存储单元包含8位信息(也就是存储字长是8位)。
在这里插入图片描述
8K
8位:有8K(2^13)个存储单元,存储字长是8位。所以这个芯片有13位地址,每一位地址对应一个存储元,一行有8个存储元。

5.寻址

接下来,我们进一步探讨关于寻址的问题。
在这里插入图片描述
图示里面,一个小方格表示一个字节(8bit)的信息,一行表示一个存储字。
那么这块存储芯片的存储字长是4个字节,假设容量是1k(2^10)个字节,所以有256个字(1024/4=256)。(也就是有256行)
现代计算机中,通常是按照字节编址的(每个字节对应一个地址)。

这个存储矩阵中一共有1k个字节,就对应1k个地址。(每一个字节对应一个地址),但是现代存储器,通常也支持按字寻址、按半字寻址、按双字寻址。如下:
在这里插入图片描述
①还是来看一下按字节编址。

1K个单元,对应地址线就是10根(2^10=1K)。

那么地址就是10个0到10个1:(就是0~1023的范围)

现在将地址画在图里面:
在这里插入图片描述
②按字寻址

如果现在想要按字寻址,由于一个字占4个字节。因此会把连续的字节地址合并,看作一整个字。
当我们指明要读的是第几个字的时候,只需要把字地址进行算数左移两位,如下:
在这里插入图片描述
这样就可以把字地址转化成与之对应的字节地址。(比如字地址是1,对应字节地址是4)如下:在这里插入图片描述
比如,现在要读的是1号字。(第二行的字)如下:

那么将1进行算数左移两位,001变成了100,转化为十进制就是4。

这样就得到了这个字(1)起始字节的地址(4)。

字是一行,字节是一小块。

四、总结回顾

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值