DRAM工作原理及时序分析2014年11月02日⁄裸机程序⁄共3224字⁄字号小中大⁄暂无评论⁄阅读132次下一节准备将代码重定位到DDRSDRAM,所以本节先对一些基础知识进行学习一下。DDR出身自SDRAM,严格的说应该叫DDRSDRAM,DDRSDRAM是DoubleDataRateSDRAM的缩写,是双倍速率同步动态随机存储器的意思,所以,有很大一部分,两者是一样的,理解SDRAM,然后再来理解DDR。在SDRAM上的改进,效果应该更好一些,本文参考大神TekkamanNinja的博客中介绍的,并加入了一些自己的讲解。先上一张SDRAM的结构图,如下图所示SDRAM结构图下面上一张简易的SDRAM工作流程图SDRAM的内部是一个存储阵列,阵列就如同表格一样,将数据“填”进去。在数据读写时和表格的检索原理一样,先指定一个行(ROW),在指定一个列(COL),我们就可以准确的找到所需要的单元格,这就是内存芯片寻址的基本原理。这个单元格(存储阵列)就叫做逻辑BANK(简称L-Bank)。SDRAM是多Bank结构,例如在一个具有两个Bank的SDRAM的模组中,其中一个Bank在进行预充电期间,另一个Bank却马上可以被读取,这样当进行一次读取后,又马上去读取已经预充电Bank的数据时,就无需等待而是可以直接读取了,这也就大大提高了存储器的访问速度。为了实现这个功能,SDRAM需要增加对多个Bank的管理,实现控制其中的Bank进行预充电。在一个具有2个以上Bank的SDRAM中,一般会多一根叫做BAn的引脚,用来实现在多个Bank之间的选择。另外它们的行、列地址线共用,由行地址选通((CAS)、列地址选通(RAS)信号分时控制。SDRAM简易工作流程图图中用红色标明的就是我们需要找的几个主要时间,现在开始看图说话1、芯片初始化SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时都要先对这个控制逻辑核心进行初始化。2、行有效初始化完成后,要想对一个L-Bank中的阵列进行寻址,首先就要确定行(Row),使之处于活动状态(Active),然后再确定列。简单点理解就先传行地址过来。3、列读写行地址确定之后,就要对列地址进行寻址了。读写的信号和列地址是同时发过来的,读写的操作取决于WE#引脚,当他使能则为写,否则为读。在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAStoCASDelay(RAS至CAS延迟),大家也可以理解为行选通周期,简单点理解就是说,在发完行地址后,再发列地址和读写信号时,需要延迟一下,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。广义的tRCD以时钟周期(tCK,ClockTime)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100SDRAM,tRCD=2,代表1000/100*2=20ns的延迟,下图是tRCD=3的时序图。SDRAM时序图tRCD说明4、数据输出(读)在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CASLatency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,ReadLatency),下图是CL=2的示意图。SDRAM时序图CL说明5、数据输入(写)数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,WriteRecoveryTime),这个操作也被称作写回(WriteBack)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多)6、突发长度--(BurstLengths)突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(BurstLengths,简称BL)。只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。7、预充电由于SDRAM的寻址具体独占性,所以在进行完读写操作后,如果要对同一个Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔被称为tRP(PrechargecommandPeriod,预充电有效周期)。和tRCD、CL一样,tRP的单位也是时钟周期数,具体值视时钟频率而定。8、刷新之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。刷新操作与预充电中重写的操作一样,都是用S-AMP先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有L-Bank预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不是一定是相同的。比如我有四片,刷新是我依次刷新四片内存中的某个地址,然后再刷下一个;而预充电的工作行地址可以不同。那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096RefreshCycles/64ms或8192RefreshCycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。刷新操作分为两种:自动刷新(AutoRefresh,简称AR)与自刷新(SelfRefresh,简称SR)。SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR(SuspendtoRAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。