SDRAM是Synchronous Dynamic Random Access Memory(同步动态随机存储器)的简称,它将CPU和RAM通过一个相同的时钟锁在一起,使得RAM和CPU能够共享一个钟周期,以相同的速度同步工作,从而解决了CPU和RAM之间的速度不匹配问题,避免了在系统总线对异步DRAM进行操作时同步所需的额外等待时间,可加快数据的传输速度。


SDRAM工作过程:


启动初始化:


1、同时启动设备核心电源VDD和设备I/O电源VDDQ。声明并维持CKE引脚为高电平(CKE引脚为Clock Enable,时钟使能信号,高电平表示启动内部时钟信号)。


2、等到VDD和VDDQ稳定后并且CKE设为高电平,应用稳定时钟。


3、等待200μs执行空操作命令。


4、precharge:预充电命令。SDRAM执行一条预充电命令后,要执行一条空操作命令,这两个操作会使所有的存储单元进行一次预充电,从而使所有阵列中的器件处于待机状态。引脚A10(=AP  Auto Precharge)可以对预充电的模式进行选择,当A10=LOW时,给单个bank pre-charge,bank由BA0和BA1引脚进行选择;当A10=HIGH时,给所有的bank进行precharge。


5、auto-refresh:自刷新命令。SDRAM要执行两条自刷新命令,每一条刷新命令之后,都需要执行一条空操作命令。这些操作会使SDRAM内部的刷新及计数器进入正常运行状态,以便为SDRAM模式寄存器编程做好准备。


6、load mode register:设置模式寄存器。Mode Register一般被用于定义SDRAM运行的模式,寄存器里一般设置了burst长度,CAS,burst类型,操作模式,还有是设置SDRAM是工作在单个读写操作还是burst操作下。 Mode Register通过LOAD MODE REGISTER命令进行编程,这组信息将会一直保存在Mode Register中直到内存掉电之后才会消失。而这个寄存器的设置也是通过地址线来设置的,所以在发出Load Mode Register命令后要做一个操作是使得在SDRAM的地址线上的值就是你要设置的值。注意!这个操作是8位的操作。Mode Register中的M0-M2是用来定义突发长度(burst length)的,M3定义突发类型(sequential或者interleaved),M4-M6定义CAS延迟,M7和M8定义运行模式,M9定义写入突发模式(write burst mode),M10和 M11目前保留。Mode Register必须在所有的bank都处于idle状态下才能被载入,在所有初始化工组都进行完毕之前,控制器必须等待一定的时间。在初始化过程中发生了任何非法的操作都可能导致初始化失败从而导致整个计算机系统不能启动。


设置完模式寄存器之后就进入了正常读写操作模式。


SDRAM的基本读写操作


      SDRAM的基本读操作需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD(SDRAM的RAS到CAS的延迟指标)时间后,发出读命令字。CL(CAS延迟值)个工作时钟后,读出数据依次出现在数据总线上。在读操作的最后,要向SDRAM发出预充电(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHAREG命令后,相隔tRP时间,才可再次访问该行)后,可以开始下一次的读、写操作。SDRAM的读操作只有突发模式(Burst Mode),突发长度为1、2、4、8可选。


      SDRAM的基本写操作也需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD的时间后,发出写命令字。写命令可以立即写入,需写入数据依次送到DQ(数据线)上。在最后一个数据写入后延迟tWR时间。发出预充电命令,关闭已经激活的页。等待tRP时间后,可以展开下一次操作。写操作可以有突发写和非突发写两种。突发长度同读操作。


SDRAM寻址方式:


      由SDRAM的存储结构可以知道,存储器是由bank、column和row三维构成,即如果要读取某个地址的存储数据,要知道它所在的bank和bank上的行号和列号才能真正确定地址。


地址线分时复用:SDRAM的行地址线和列地址线是分时复用的,即地址要分两次送出,先送出行地址,再送出列地址。这样,可以大幅度减少地址线的数目。提高器件的性能。但寻址过程也会因此而变得复杂。实际上,现在的SDRAM一般都以BANK(存储块)为组织,将存储器分成很多独立的小块。由BANK地址线BA控制BANK间的选择,行地址线和列地址线贯穿所有的BANK,每个BANK的数据的宽度和整个存储器的宽度相同,这样,可以降低字线和位线的长度。从而加快数据的存储速度。同时,BA还可以使未被选中的BANK工作于低功耗的模式下,从而降低器件的功耗。


SDRAM刷新过程:


      由于SDRAM是利用其内部的电容来存储数据,所以需要不断进行刷新(Refresh)才能保留住数据。刷新操作有固定的周期,以行为单位进行刷新,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。与所有L-Bank预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不是一定是相同的。存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。刷新命令一次对一行有效,发送间隔也是随总行数而变化。


      刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。


      对于AR,SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说CAS在RAS之前有效。所以,AR又称CBR(CAS Before RAS,列提前于行定位)式刷新。由于刷新涉及到所有L-Bank,因此在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期(PC133标准),之后就可进入正常的工作状态,也就是说在这9个时钟期间内,所有工作指令只能等待而无法执行。64ms之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对SDRAM的性能造成影响,也是DRAM相对于SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。
      SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR(Suspend to RAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。


 


引脚功能说明:


/RAS :Row Address Strobe.行地址脉冲选通器,使行地址有效。低电平有效。


/CAS:Column Address Strobe  列地址脉冲选通器,使列地址有效。低电平有效。


CLK,/CLK:时钟信号输入引脚。


CKE:Clock Enable  当这个引脚处于低电平期间,提供给所有bank预充电和刷新的操作。高电平时有效。


/CS:芯片选择(Chip Select),当/CS为高电平时所有命令被掩盖,无效。在芯片工作时/CS处于低电平状态。


/WE:写入信号(Write Enable)。DQ0-DQ15:数据输入输出接口。


BA0,BA1:Bank地址输入信号引脚,BA0和BA1信号决定了由激活哪一个bank,进行读写或者预充电操作;BA0和BA1也用于定义Mode寄存器中的相关命令数据。


A0-A12:地址输入引脚。行地址线为:A0-A12,列地址线为:A0-A9,分时复用。其中A10(=AP)在预充电命令中决定预充电模式。


DQ0-DQ31:双向数据输入输出总线。


DM0-DM3:输入数据掩码。DM是在写入数据时的输入数据掩码,当DM为高电平时写入数据过程中,输入数据将会被屏蔽。其中DM0-3分别控制不同的输入数据线部分:DM0->DQ0-DQ7;   DM1->DQ8-DQ15;    DM2->DQ16-DQ23;    DM3->DQ24-DQ31。


DQS0-DQS3:数据闸,DQS是源同步时钟,在接收端使用DQS来读出相应的数据DQ,上升沿和下降沿都有效。读操作时,DQS信号的边沿在时序上与DQ的信号边沿处对齐,而写操作时,DQS信号的边沿在时序上与DQ信号的中心处对齐。如下图所示:


点击看大图


其中DQS0-3控制输入数据线DQ0-31的不同部分:


DQS0->DQ0-DQ7;       DQS1->DQ8-DQ15;         DQS2->DQ16-DQ23;        DQS3->DQ24-DQ31。


VDD:核心逻辑电路(core logic)和输入缓存供电引脚。提供标准值1.8V电压。


VDDQ:I/O供电引脚。单独给输出缓存提高经过噪声滤波的电源。


VSS:接地引脚。


VSSQ:I/O接地引脚。


NC:空引脚。


工作流程示意图:


点击看大图


说明:


1、A0-A12和BA0、BA1作为地址信号输入地址寄存器中,由于行地址和列地址是分时复用的,在CLK高电平时宽tCH内,先读入A0-A12的行地址数据,在CLK低电平时宽tCL内读入列地址数据A0-A9。先通过BA0、BA1信号选择bank,然后选择行地址,同时刷新电路对将要进行操作的行进行刷新,刷新行地址与从地址寄存器中输入的行地址共用row address mux,如上图所示。


2、SDRAM最小存储单元为64bit的问题:


      内存系统为了能够保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位),在本次设计中处理器的数据位宽为32位。但是由于这款SDRAM采用的是双时钟工作模式,时钟信号CLK和/CLK都是由CPU的时钟周期得到,SDRAM在CLK和/CLK的高电平时宽内均能进行读写操作,相当于在一个CPU时钟周期内进行了两次数据传输,因此一个时钟周期内的数据量为64bit,这个就是SDRAM最小存储单元为64位的原因。


3、关于基本读写操作中的突发模式(brust mode)问题和数据掩码技术(即DM0-DM3的作用):


     SDRAM的读操作只有突发模式(Burst Mode),突发长度为1、2、4、8可选,而写操作可以有突发写和非突发写两种。


首先介绍突发长度的概念:


突发长度:突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度( Burst Lengths,简称BL)。


      如果每一次对一个存储地址的读/写操作,都进行一次存储单元寻址,若要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。虽然由于读/写延迟相同可以让数据的传输在I/O端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期 (主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得,这样可以大大节省时间。在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4×64bit的数据。但是,如果其中的第二笔数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽,即上图中的IO Gating DQM Mask Logic。由DM0-DM3引脚的定义可知,DM0-3分别控制着输出数据总线的四个部分,选择需屏蔽的数据,具体控制DM信号输入的芯片部分如下所示:


点击看大图


常见术语解释:


tRP:(Precharge command Period,预充电有效周期)tRP的单位也是时钟周期数,具体值视时钟频率而定。


Row Address Latch:行地址门闩线路 。


Column Address Latch:列地址门闩线路 。


tACmax:Access Time  存取时间,RAM 完成一次数据存取所用的平均时间(以纳秒为单位)。存取时间等于地址设置时间加延迟时间(初始化数据请求的时间和访问准备时间)。


tCH:clock high-level width 时钟周期高电平时宽,大概等于0.45-0.55个时钟周期。


tCL:clock low-level width  时钟周期低电平时宽,大概等于0.45-0.55个时钟周期。


tRCD:SDRAM的RAS到CAS的延迟指标。