Skip to content
On this page

RAM


软件版本硬件版本更新内容
linux 5.8.18arm64

1. 概述

在一个系统中同时存在静态 RAM(SRAM也叫同步RAM)和动态 RAM (DRAM)。前者要快得多并提供相同的功能。静态RAM的性能远远好于动态RAM,但由SRAM的生产和使用成本比DRAM高得多。

TIP

目前SRAM仅仅使用在CPU缓存上,所以CPU的价格和缓存的大小存在一定的关系, 平时所说的内存都是指DRAM

2. 静态RAM

每个static ram 都是通过6个晶体管来构成,从,6个晶体管形成交叉偶合反相器,它们有两个稳定的状态分别是0和1,只要是上电,状态就是稳定的。当需要读取状态值是就需要拉高WL信号线,这个可以读取的值,当需要设置值时,先设置好的值,再拉高WL,由于外部驱动能力比内部晶体管的能力强,就会覆盖原来的状态。

静态RAM具有如下特点:

  • 每个RAM单元需要6个晶体管,也可以是4个
  • 维持RAM单元的值需要持续通过持续共电
  • 一但字访问线WL升高,单元状态几乎可以立即读取
  • 单元状态持续稳定不需要周期性的刷新

3. 动态RAM

就其结构而言,动态RAM比静态RAM简单得多。它只包含一个晶体管和一个电容器。这种复杂性的巨大差异意味着它的功能与静态RAM截然不同。 动态RAM单元将其状态保存在电容器C中。晶体管M用于保护对状态的访问。要读取单元格的状态,请升高访问线AL;这会导致电流在数据线DL上流动或不流动,具体取决于电容器中的电荷。为了写入单元,数据线DL被适当设置,然后AL升高足够长的时间以对电容器充电或放电。

当读取一个内存单元会使用其上的电容放电,这样读取操作不能多次进行,需要重新充电后才能再次读取。为提高内存的容量也就是内存单元的数量,单个内存单元的电容存放的电子应越少越好,也就是电容器的容量越小,单位体积集成的内存单元才会越多。另外虽然电容的电阻可以达到几万欧姆,但电容耗散也只需要很短的时间,也称为电子泄漏问题。

这种泄漏是DRAM单元必须不断刷新的原因。现在对于大多数DRAM芯片来说,这种刷新必须每64毫秒发生一次。在刷新周期期间,无法访问内存。对于某些工作负载,此开销可能会停止高达50%的内存访问。

微小电荷导致的第二个问题是从电池中读取的信息不能直接使用。数据线必须连接到一个读出放大器,该放大器可以在整个电荷范围内区分存储的0或1。

第三个问题是电容器的充电和放电不是瞬时的。读出放大器接收到的信号应该是逐渐变化,因此必须使用关于单元输出何时可用的保守估计。电容充放电曲线如下所示: 与静态RAM的访问线拉高数据立即可用不同,动态RAM必须要等待充放电的时间,这严重限制了DRAM的速度。

但是动态RAM相比静态也正在优点如下:

  • 价格便宜
  • 尺寸小,因为只需要一个电容器
  • SRAM需要专用的来供电,DRAM不需要
  • DRAM结构简单规整,便于封装

3.1 访问动态RAM

动态RAM访问的存在下面介绍的两种方法,目前我们大量使用是阵列法。

3.1.1 独立访问

独立访问的意思就是从地址解码器到每个内存单元都一根选择线,如下图所示如果地址线有2根,那么就会根选择线,如是查一个1G容量的内存,那么就需要30根地址线和根选择,这很明显不合理,30根线的解码器很占用空间,而且30根地址线的信号同步也很困难,这种方式只能小容量的内存是可行的,但对大容量内存不适合。

3.1.2 阵列法访问

通过多路复用器将地址分两部分传输,分成两部分传输可以节省芯片的引脚,在RAS有效时传输Row地址,当CAS传输Cow地址,a0到a3线的信息在撤锁前必须保证一直有效。

3.1.2 阵列法访问细节

3.1.2.1 访问影响因素

从上面的介绍可以看出影响DRAM的访问的因素有如下:

  • 多路复用造成需要CAS和RAS来指示分两部分传输地址
  • 电容的充放电是需要一定的时间,所以需要等待产生稳定的信号
  • DRAM单元由于电子泄漏需要刷新

访问还分为同步和异步,但是我们通常使用的是同步,所以这里只聊同步。所谓的同步访问就是基于同一个时钟源来工作,时钟源是由内存控制器来提供,时钟源的频率决定的前端总线也就是FSB的速率,一般有800MHz1066MHz1333MHz等。

3.1.2.1 访问步骤

TIP

所有信号都在时钟的上升沿读取。

步骤1 RAS信号设置拉低,低地平有效,开始传输Row地址,设置行地址会导致 RAM 芯片开始锁存寻址的行。

步骤2 行地址锁存之后,开始拉低,开始传输Col地址,设置列地址会导致 RAM 芯片开始锁存寻址的列。

TIP

上面两步之间会有一个 的Delay)

步骤3 开始传输数据,这里可以连续传输2、4、8个数据,而且后续可以在不重新发送行地址的情况再次发送列地址,从而实现连接的内存读取。

TIP

上面两步之间会有一个 (CAS Latency)

另外还一个时间如下图所示,也就是Row Precharge时间 在图中,数据传输开始的时候,可以通过抵低来开始充电,这个可以理解为数据信号放大。以上图为列,在这个图中,传输数据用了2个周期,而刷新使用了3个周期,那么下一次发送行地址需要延迟一个周期才能开始。

另外如果是SDRAM,还在一个限制,那就是在拉低之后发送完行地址之后,需要等待才能再次拉低进行预充电操作,这个时间通学很长大约是的两到三倍,如果是是8个周期,那么下一次行发送还需要再延迟一个周期。

再有一个很重要的时间就是刷新引起的停顿,这个停顿时间影响很大。

3.2 动态RAM种类

最早的一类就是SDRAM,也就是Sync DRAM,它只在时钟的上升沿来取数,后来出现了DDR内存,这个类型的内存是在时钟双边沿取数,所以是Double DRAM,简写为DDR,后面再发展就是在DDR1的其实提高时钟频率从而提高内存的访问速度,也就是后面的DDR2、DDR4等等。


提示

欢迎评论、探讨,如果发现错误请指正。转载请注明出处! 探索者


Released under the MIT License.