3.2.1 SRAM和DRAM
00:00
各位同学大家好,在上个小节中我们认识了存储芯片的基本原理,如何存储二进制的0和1,如何根据一个地址来访问某一个存储字,这是上一小节学习的内容。在这个小节当中我们会介绍两种特定类型的存储芯片,一种叫SRAM(Static Random Access Memory),一种叫DRAM(Dynamic Random Access Memory)。之前我们提到过RAM这个缩写,它指的是随机访问存储器。意思就是说当我们指定某一个存储单元的地址的时候,这个存储单元的读取速度并不会因为存储单元的物理位置而改变。
00:36
好,这个小节当中我们要介绍的DRAM,这个D指的是dynamic,就是动态的意思,然后SRAM的S指的是static,就是静态的意思。DRAM这种存储芯片通常会被用于制造主存,而SRAM会被用于制造cache,也就是高速缓冲存储器。考试当中通常会把这两种存储芯片进行对比和考察,考察它们的一些特性的一个区别。所以这个小节当中我们首先会从这两种存储芯片它们的存储元件的不同的物理特性来介绍为什么这两种芯片会呈现出各种各样的特性差异。那还有两个比较高频的考点,就是DRAM这种存储芯片的刷新操作如何实现,还有DRAM这种存储芯片的地址复用技术。
01:24
好,那首先我们进入第一个话题,那上个小节当中我们介绍的这种存储芯片其实就是DRAM芯片,也就可以被用于制作主存。那这一小节我们要学习的SRAM芯片和上一小节学习的这种DRAM芯片的一个核心区别就是存储元件不一样。我们的DRAM芯片是用栅极电容,用这种电容的充放电来存储和读取信息的,而SRAM芯片是用双稳态触发器来存储信息。好,来看一下这两种存储元存储元件的一个区别。
02:00
上小节中我们说过,如果我们给这个字选择线加一个5伏的高电平电压,那么就会使这个MOS管导通,此时如果数据线上面同样也加了一个5伏的高电平,也就是给了一个二进制的1,那么这个5伏的高电平电压会加到这个电容的上面这一块金属板上,上面是5伏,而下面这块金属由于它是0伏,它是接地的,那当这个电容的两块金属板产生这种压差的时候,就会导致正电荷在上面这块板子这儿聚集,然后负电荷在下面这块板子这聚集,这是我们高中学过的知识,这样的话就完成了二进制1的一个存储。
02:42
还有一种情况就是我们会从数据线这儿输入一个二进制的0,也就是一个低电平信号。此时由于电容的两块金属板之间没有电压差,所以电容不会存储电荷。因此如果存储的是二进制1,那么电容里边就会存储电荷,如果存储的是二进制0,那么电容里边就不会存储电荷。那这也就意味着当我们读出这个电容里边存储的二进制信息的时候,如果此时这个电容里面存的是一,也就是说这个电容里面存储了一些电荷,那么当这个字选择线接了高电平,MOS管被接通之后,这些电荷就会顺着这条线从这个数据线这儿输出。也就是说,如果是二进制的1,那么数据线这儿可以检测到一个电流信号,而如果说这个电容本来存储的是二进制的0,也就是它没有存储电荷,那么当这个MOS管被接通的时候,数据线这边也不会检测到电流的流出。好,所以用这样的方式我们就可以区别出我们读出到底是1还是0。
03:47
好,这是我们上一小节学习的DRAM这种芯片的一个存储元,它是用栅极电容来存储二进制0和1的。好,再来看SRAM芯片,SRAM芯片的存储元就是这个图里面画的这种所谓的双稳态触发器。触发器相关的知识我们是在数字电路那门课里学习的,这地方我们只做一个简要的了解,这个双稳态触发器当中总共包含了六个MOS管,我们分别用M1、M2,然后一直到M6来标注,总共是六个。那为什么它叫双稳态的触发器呢?因为这种触发器这个存储元它可以呈现出两种稳定的状态。第一种稳态就是A这个点是高电平,B这个点是低电平。那么当呈现出这种状态的时候,我们规定这种状态对应二进制的1。而如果说A是低电平而B是高电平,那么我们就规定这种状态对应二进制的0。好,所以用这个触发器的两种稳定的状态,我们就可以记录此时存储的是二进制的一还是零。
04:56
好,另一个方面大家会注意到,对于左边这种存储元来说,我们读出数据的数据线只有一根。而右边这种双稳态触发器,我们需要有两根数据线来读出0或者1的状态。对于双稳态触发器来说,如果原本它里边存储的是一个二进制的1,那么当我们给这个字选择线接通之后,也就是给了一个5伏的高电平电压之后,右边这条线BLX这条线它会输出一个低电平信号。而如果说里边原本存储的是二进制的0,那么会由BL左边这条线输出一个低电平信号,而右边这条线不会输出任何的电信号。好,所以我们根据左边还是右边这两条线,哪条线输出了低电平信号,我们就可以判断这个触发器里边原本存储的是二进制的0还是1了。好,这是读出0或者读出1的一个原理。
05:53
好,如果我们要写入一个二进制的0或者1也很简单。以二进制的0为例,我们要写入二进制的0的时候,只需要给左边这条线加一个低电平,然后给右边这条线加一个高电平,这样的话就可以使得这个触发器变为A低B高这样的一个状态,而这个状态对应的就是二进制的0。那要写入二进制的1也是类似的原理。好,这是用双稳态触发器来读和写二进制0和1的一个基本原理,想要了解触发器具体原理的同学,可以去学习数字电路数电那门课。
06:33
好,现在我们了解了这两种存储元的基本原理之后,来看一下它们有什么区别。首先来看读出数据的时候,对于这种栅极电容来说,我们刚才说过,如果它存储的是一个二进制的1,那么就意味着这个电容上面会存储一些电荷。而我们接通MOS管把这个二进制的1读出的过程,其实就意味着我们需要把这些电容里边存储的这些电荷给释放掉,就是要给电容放电。那么这个电容放电之后,是不是就会导致它所表示的信息由1变为了0,因此当我们读出这种栅极电容里边存储的信息之后,其实这个栅极电容里边存储的信息是被我们破坏掉的,也就是我们在本章第一节当中提到过的破坏性读出,里边的信息会被损坏,由一变为零。好,那如何解决这个问题呢?我们需要进行重写的操作,又可以称为再生,也就是需要要给这个电容重新进行一次充电。好,这是电容的物理特性导致的破坏性读出。
07:40
好,再来看右边这种。如果我们采用双稳态触发器的话,既然它叫稳态两种稳定的状态,那么就意味着当我们读出数据之后,这个触发器的状态依然是保持稳定的。也就是说对于右边这种存储元的读操作是非破坏性的读出,我们不需要进行重写的操作。好,既然左边需要重写,右边不需要重写,那显然应该是左边的读写速度会更慢,对吧?右边肯定要更快,因为省了一个步骤。好,所以这是这两种存储元件导致的一些特性上的区别。
08:15
好,再看另一个方面,我们左边这种存储元,由于它里边只需要一个电容和一个MOS管,而右边这种存储元总共需要六个MOS管。那显然我们制造左边这种存储元,它的制造成本肯定要更低一些,右边这种肯定要更贵一些。除了成本之外,如果说一块芯片它的面积固定不变,那么在固定大小的一块芯片上,左边这种存储元它的集成度肯定要更高,对吧?因为这种存储元体积肯定要更小,可以更密集的集成在芯片上。而右边这种存储元它的逻辑元件更多,所以体积也会更大,因此它的集成度也会更低。好,再一个方面,右边这种电路很复杂,左边这个电路很简单,所以左边这种电路它的功耗会更低,右边这个功耗会比较大。两种存储元的特性区别也造成了DRAM芯片和SRAM芯片的一个区别。所以我们把这两个芯片的特性再进行一个对比。
09:16
SRAM也就是静态RAM芯片,它是由触发器来存储这个信息的,说的更详细一点,应该是双稳态的触发器,触发器可以有两种稳定的状态,而DRAM是由电容栅极电容来存储二进制的0或者1的。由于采用了栅极电容,因此对DRAM的信息读出是破坏性的读出,而SRAM的读出是非破坏性的读出。那既然读操作会破坏原有的数据,因此在读操作完成之后,DRAM芯片需要进行一个重写的操作,给电容重新充电。也正是因为这个原因,所以DRAM的读写速度要比SRAM要更慢一些,SRAM的读写速度要更快,因此SRAM这种存储芯片通常会被用来制作Cache,也就是高速缓存。因为高速缓存对于速度的要求要更高,cache要尽可能的匹配CPU的运算速度。而DRAM由于它的存储成本低,也就是造价更便宜,因此它通常会被用于制造主存。
10:21
由于两种芯片的存储元件它们的复杂度不一样,因此存储元件复杂度更高的SRAM芯片,它的集成度一般会更低,而存储元体积更小,复杂度更低的这个DRAM芯片,它的集成度通常会更高。好,另外一点之前我们没有提到的是,不管是SRAM还是DRAM这两种芯片都属于易失性的存储器,也就是断电之后信息会消失。刚开始学习的同学容易把存储器的易失性和破坏性读出,这两个概念会比较容易混淆。大家可以暂停消化一下,对比一下这两个概念的区别。好,最后SRAM芯片是不需要刷新的,DRAM芯片需要刷新。
11:05
好,那什么是刷新呢?我们之前没有提过刷新这个概念。来看一下,由于DRAM芯片采用了这种栅极电容来存储电荷,而高中的时候其实我们学到过,电容里边虽然可以存储电荷,但是这个电荷有可能会慢慢的流失,也就是说如果我们不管它的话,那么这个电容里边存储的这些电荷过一段时间之后就会消失,这样的话就会导致电容里边存储的信息,二进制信息同样会出现误差,由1又变为了0。好,通常存储器里采用的这种电容,它的电荷只能维持2毫秒的时间,即便我们不断电,在2毫秒之后,这电容里边存储的电荷信息也会消失。
11:50
而双稳态触发器就比较好,只要我们给这个触发器不断的供电,就比如说一直供一个5伏的电,就是从这根线(VDD)进行供电,无论过多久,只要不断电,这个触发器的状态就不会发生改变,也就是保存的0和1是不会消失的。好,那左边这种情况如何解决呢?这就是我们刚才说到的所谓的刷新的一个概念,由于电容里的电荷只能存储2毫秒,因此在2毫秒之内我们必须给这个电容刷新一次,也就是给电容充电。
12:26
好,那这就引出了我们的下一个话题,我们应该如何给DRAM芯片进行刷新工作?首先第一个最核心的问题,多久刷新一次?这个我们刚才探讨过,由于电容最多只能保持2毫秒的电荷,所以我们必须在2毫秒之内给电容重新充电,重新刷新。第二个问题,我们每次需要刷新多少个存储单元呢?注意这儿,我们说的是存储单元,每个存储单元会由多个存储元构成。那我们每一次刷新存储单元的个数应该是以行为单位来计算的,每次刷新一行,那接下来我们来解释一下什么叫一行存储单元。
13:05
在上一小节我们给出的存储器模型当中,当我们给出了N位的地址之后,这个译码器会把这N位地址把它转换成其中某一条选通线的一个高电平信号。好,所以按照之前的这种方案,如果我们的地址位数总共有N位,那么是不是就意味着我们译码器这个输出端应该会有2的N次方这么多根选通线。那我们可以算一下,如果说有20位的地址,那么选通线的数量就应该是2的20次方,也就是一兆这么多根选通线。一个译码器的输出端,我们需要给它接一兆根选通线,一兆根选通线大概有100万这样的一个数量级。所以给译码器的这边接100万根线,那这个在工程上的难度也是比较高的。
13:55
好,那如何解决这个问题呢?我们其实可以把这些存储单元从一维的排列变成二维的排列,也就是把它们变成一个存储单元构成的矩阵。原本的N位地址会被我们拆分成行地址和列地址,来分别送给行地址译码器和列地址译码器。那用这种策略的话,每一个译码器只需要处理二分之N位的地址信息,也就只需要处理一半的地址信息。
14:27
如果用之前那个例子来看的话,原本这个译码器它需要处理20位的地址信息,20位的地址信息会对应一兆个选通线,现在我们把这20位的地址信息分别拆分,把它拆成两半,一半是行地址,一半是列地址。这样的话每个译码器的选通线就只需要2的10次方这么多根,也就是1K根。1K根就是1024根,那1024根选通线在工程上是很容易实现的。好,所以这就是为什么要把一维排列的这个存储单元,把它们变成二维排列。当然现在随着存储器的发展,存储容量越来越大,现在存储器甚至还会有三维的排列,当然原理都是类似。
15:13
好,现在我们给右边这个图进行一个简单的连线,我们来看一下如何根据一个地址来选中某一个存储单元。如果说此时要访问的地址是全0,地址总共有8位。那么按照左边这种策略,译码器的输入端输入全0,那么它的第0根选通线会被选通,也就是会选中0号存储单元。
15:36
好,现在采用右边这种策略,这个地址会被分为前半部分和后半部分。前半部分作为行地址送给行地址译码器,而后半部分作为列地址送给列地址译码器。那四个全0的地址会导致含地址译码器的第0根选通线被选通,同样的四个全0送给列地址译码器会导致它的第0根选通线被选通。那一个存储单元只有行和列这两个选通信号都是选通的时候才可以对它进行读和写,所以这样的话就完成了通过行地址和列地址来选中一个存储单元这样的一个操作。
16:15
好,再次强调采用右边这种策略,我们可以让每一个译码器它的选通线的数量变得更少。对于八位地址的情况,采用左边这种策略,这个译码器的选通线应该是要有2的8次方,也就是256根,而如果采用右边这种策略,每一个译码器只需要有16根选通线就可以,总共只需要有32根选通线。好,所以这就解决了之前提出的疑问,为什么我们要用行列地址呢?因为我们可以减少选通线的数量,可以使电路变得更简单和清晰。
16:49
好,现在我们已经知道了什么叫一行存储单元,只要我们给出一个行地址,那么行地址译码器就会选中一整行的这个存储单元。而我们每一次的刷新操作就会刷新一整行。那怎么刷新呢?会有一个专门的刷新电路来支持,刷新电路会直接读出一整行的存储单元的信息,然后重新写入,也就是重新给电容充电。由于我们刷新一整行,其实本质上就是做了一次读操作,所以它的耗时和我们的一个读写周期的耗时差不多。好,所以这是进行一次刷新所需要的时间,每次可以刷新一整行的存储单元。
17:31
那接下来问题又来了,我们应该什么时候进行刷新呢?假设我们DRAM芯片里边有128行128列的存储单元,并且每一个读写周期是0.5微秒,那么可以算一下电容可以坚持的最长的时间是2毫秒这么多,那么两毫秒应该是对应4000个读写周期,当然有的地方读写周期也称为存取周期,或者存储周期都是一个意思。好,我们总共有128行需要刷新,每刷新一行都需要0.5微秒的时间。
18:06
第一种可以采取的策略就是每一次进行读写之后,读写完了之后都会选择一行进行刷新,也就是说我们一次读或者写本来只需要0.5微秒的时间,但是在每一次的读写之后,我们都会刷新一行。这样的话就会导致存取周期的时间翻倍,每隔一微秒才可以进行下一次的读写。这种刷新方式我们把它称为分散刷新,每次花0.5微秒完成正常读写之后都会刷新一行,也就是说我们2毫秒的时间内总共会有2000次刷新操作,这2000次的刷新操作足够在两微秒内给128行的存储单元,每一行都刷新很多很多次。
18:51
好,另一种思路我们可以给两微秒这个刷新周期快到的时候,我们集中的安排一段时间,把128行存储单元全部进行刷新。两微秒可以分为4000个读写周期。如果采用这种策略的话,我们会用前边的3872个周期进行正常的读写,然后最后会留出128个读写周期来分别刷新这128行,这种刷新方式我们把它称为集中刷新。
19:22
此时系统的存取周期或者说读写周期同样是0.5微秒。因为连续两次的读或者写中间只需要间隔0.5微秒就可以。但是会有最后的这段时间,这整段时间是专门用于刷新的,在这段时间内CPU无法对存储器进行读或者写,所以集中刷新的这段时间我们把它称为死时间或者叫死区。好,所以这种集中刷新的方式也不太科学。
19:50
好,接下来看第三种思路,每一个刷新周期内我们只需要保证每行都刷新一次就可以,不难想到我们可以把每一行的刷新分散到不同的时间段,2毫秒之内总共需要128次刷新。也就是说每隔15.6微秒我们必须保证刷新其中的某一行,所以也就是说每15.6微秒当中会有0.5微秒的时间是死时间,在刷新的这段时间内,CPU同样不能对存储器进行读或者写。这种刷新策略我们把它称为异步刷新,我们把死时间进行了一个分散。
20:29
在实际应用当中,我们可以利用CPU不需要访问存储器的这段时间进行刷新。比如说如果CPU取得了一条指令,对这些指令进行译码的阶段我们就可以进行刷新操作。好,这是异步刷新。
20:45
关于DRAM的这三种刷新策略也经常在选择题当中进行考察,有的题目会明确的告诉你刷新周期应该是多长,如果题目没有明确的告知,那么我们通常会默认刷新周期是两毫秒这样的长度。好,那现在我们就解决了之前留下的这个问题,什么叫做存储器的刷新?为什么SRAM不需要刷新?为什么DRAM需要刷新?本质原因还是在于它们的存储元件的特性是不一样的。
21:15
好,接下来看最后这一项的对比,送行地址和列地址SRAM是同时送的,而DRAM是分两次送的。这又出现了一个新的坑,之前我们已经知道了什么叫行地址,什么叫列地址,同时送出行列地址的意思是说,行地址和列地址这两段的地址信息同时会丢给行地址译码器和列地址译码器,这是同时送,显然如果采用这种策略,那么我们的地址有多少位,我们就需要设计多少根的地址线。DRAM这种存储芯片,通常它的存储容量会比较大有可能需要32位地址,也就意味着我们需要有32根地址线。当然地址线的数量还有可能更多。
22:05
为了让我们的地址线所对应的这些电路变得更简单,DRAM里边通常会采用所谓的地址线复用技术。很简单,本来我们需要有N位地址线来同时传送行和列地址,但是采用地址线复用技术之后,我们可以把行地址和列地址通过前后两次分别进行传输。也就是说我们只需要采用二分之N条地址线就可以。
22:32
第一次我们先把行地址送到行地址缓冲器里边,第二次我们把列地址送到列地址缓冲器里边,然后接下来在控制电路的控制之下,行地址和列地址再送给这两个译码器进行译码的处理。好,所以这就是所谓的地址线复用技术,我们会把行地址和列地址分两次进行传送,这样的话我们就可以让地址线的数量减半。那地址线减半是不是就意味着存储芯片的这个引脚的数目也可以更少?原本需要N个引脚来接收N位地址,现在只需要二分之N个引脚就可以,先接收行地址,再接收列地址。
23:15
好,这样我们就解释清楚了最后一个问题,什么叫做分两次送行地址和列地址?SRAM我们可以同时送的原因就是SRAM的集成度低,存储容量更小,那么SRAM芯片它所对应的行列地址的这个地址位数也会比较少,所以对于SRAM这种容量比较小的芯片,通常我们同时把行列地址给送过去就可以了。
23:40
好,大家做题的时候也需要注意,如果题目考察的是让你说出DRAM芯片它的引脚的数量的话,那么你需要想到DRAM芯片它的地址线是采用了复用技术,也就是和地址所对应的引脚数目应该是要减半的,这一点比较容易出错。好,另外再补充两个点,之前我们提到DRAM的这个刷新操作是由存储器独立完成的,并不需要CPU的介入,不需要CPU控制。好,再一点需要补充的是,DRAM芯片现在其实已经过时了,目前的这些主存通常是采用SDRAM,那现在大家买电脑都应该听过DDR3、DDR4这些东西,那DDR3和DDR4其实他们都属于SDRAM。好,所以对于这个名词大家也需要有点印象。好的,以上就是这个小节的全部内容,大家可以再结合这张表来吸收消化一下。