收藏,学习!!
原文地址:http://www.cnblogs.com/embedded-linux/p/4993069.html
一. DDR2介绍
DDR2由JEDEC(电子设备工程联合委员会)开发的新生代内存技术标准。该标准定义了DDR2封装、寻址及操作、电气等所有特性。
DDR相关技术对比
|
DDR |
DDR2 |
DDR3 |
电压,VDD |
2,5V |
1,8V |
1,5V |
I/O接口 |
SSTL_25 |
SSTL_18 |
SSTL_15 |
数据传输率 |
200~400 |
400~800 |
800~2000 |
容量标准 |
64M~1G |
256M~4G |
512M~8G |
CL值 |
1,5/2/2,5/3 |
3/4/5/6 |
5/6/7/8 |
预读取(Bit) |
2 |
4 |
8 |
Bank数量 |
2/4 |
4/8 |
8/16 |
突发长度 |
2/4/8 |
4/8 |
8 |
封装形式 |
TSOP |
FBGA |
FBGA |
针脚数(Pin) |
184 |
240 |
240 |
二. DDR2信号
时钟信号CK、CK#、CKE
片选芯片CS#
片内终结信号ODT
命令输入信号RAS#、CAS#、WE#
数据掩码DM
地址信号BA0-BA2、A0-A15
数据信号DQ
数据索引信号DQS、DQS#
电源信号等
注:DDR比SDRAM多一个CLK#时钟信号,该信号与标准时钟信号CLK相位相差180。,从而形成差分时钟。与SDRAM只能在时钟的上升沿进行数据传输不同,DDR在CLK的上升沿和下降沿都可以传输数据,这样,在相同的系统时钟下,DDR的数据传输速率就是SDRAM的两倍。
需要注意的是,CLK#并不作为第二个触发时钟,而是用于校准触发时钟。这是因为DDR在CLK的双沿触发数据传输,使得传输周期缩短一半,因此必须保证传输周期的稳定以确保数据的正确传输。基于这一要求,必须对CLK的上下沿间距进行精确的控制。但由于温度波动、电阻性能改变等原因,CLK上下沿间距可能会发生变化,此时CLK#可以起到校准的作用。
三. DDR2采用的新技术
OCD(off-chip driver):离线驱动调整,DDR II通过OCD可以提高信号的完整性。DDRII通过调整上拉/下拉的电阻值使两者电压相等。使用OCD通过减少DQ-DQS的倾斜来提高信号的完整性;通过控制电压来提高信号品质。
ODT(on-die terminal):内建核心的终结电阻器。DDR2根据自己的特点内建合适的终结电阻,可以保证最佳信号波形,达到最佳的信号质量。
Post CAS:前置CAS,为提高DDR2内存的利用效率而设定。在Post CAS操作中,CAS信号(读写/命令)能够被插到RAS信号后面的一个时钟周期,CAS命令可以在附加延迟(Additive Latency)后面保持有效。原来的tRCD(RAS到CAS延迟)被AL(Additive Latency)所取代,AL可以在0,1,2,3,4中进行设置。由于CAS信号放在了RAS信号后面一个时钟周期,因此ACT(行选择)和CAS信号永远也不会产生碰撞冲突。
四. DDR2构造
DDR2内部的存储单元按bank进行管理,根据容量大小一般分为4或8个bank。每个bank中又分为行和列,bank的位宽就是整个芯片的位宽。
五. DDR2工作方式
DDR2工作时每个bank只允许打开1行,即只允许对打开的行进行读写操作,如果要对同一bank中的其他行进行读写操作,则必须先用预充电(precharge)命令关闭已经打开的行,再用激活(active)命令打开需要进行读写操作的行。发送激活命令时要同时给出bank地址和行地址,选定需要打开的行,等待一定时间间隔后再给出列地址。DDR2的行列地址线是复用的,通过列地址选通信号CAS可以区分行地址与列地址。
DDR2采用突发方式进行数据传输,即对同一行中相邻的存储单元连续进行数据传输,连续传输所涉及的存储单元(列)的数量就是突发长度(Burst Lengths)。工作时只要给出起始地址和突发长度,DDR2就会依次自动对后面相应数量的列进行读写操作。DDR2支持的突发长度为4或8。
DDR2采用电容存储数据信息,电容的漏电造成数据丢失,必须要定时刷新才不会丢失。为了保存内部数据,DDR2每隔一定的时间就要对每一行进行刷新。根据DDR2的JEDEC标准,最多每隔7.8us就要刷新一次,用来保持DDR2内部数据的正确性。DDR2有两种刷新模式:自刷新(self-refresh)和自动刷新(auto-refresh)。自刷新通常工作于所有bank都处于空闲的状态,功耗低,但是进入自刷新模式和退出自刷新模式都要经过复杂的时序步骤来完成,控制复杂。自动刷新模式由定时器产生刷新命令,易于控制,因此一般选择自动刷新模式。
DDR2的工作频率很高,因此数据窗口很窄,为了能准确采集数据,DDR2使用差分信号DQS、DQS_N来采集数据。写操作中,DQS信号由控制器发出,DQS信号与数据窗口中央对齐;读操作中DQS信号由DDR2存储器发出,DQS信号与数据窗口边沿对齐,控制器接收到DQS信号后,要将DQS信号与数据窗I:1相位偏移90°,使DQS信号与数据窗口中央对齐。DQS信号对相位要求很严格,在实际使用中,考虑连线延迟、管脚延迟等因素,在高频率下进行数据采集变得很困难,一般由专门的PHY(Physical Layer Interface)来完成。
上电后控制器首先执行的是初始化过程,然后才是读写操作。在读写过程中,会遇到刷新请求,刷新的优先权要高于读写操作。如果刷新操作与读写操作冲突,则控制器会先通知用户停止发送读写命令,并等待现有的读写操作完成,然后进行刷新操作。
执行读写操作时,控制器会先根据映射的行地址来判断操作所需要的行是否已经激活,如果已经激活,则直接发送列地址;如果没激活且在不同的bank中,则先发送激活命令再发送列地址和读写命令;如果没激活且在相同的bank中,则先要发送预充电命令关闭已经打开的行,然后依次发送激活命令和读写命令。
如果执行读操作,则在读命令发出后,要等待读数据传回,根据DQS信号来接收读数据,将双速率的64bit数据转换成单速率的128 bit数据送给用户端口(CPU)。
读命令
当DDR2 SDRAM的bank被打开之后,就可以对该bank进行读写访问操作。当控制器给出读命令的同时,要给出访问目标的列地址,并设定自动预充电是否有效。如果自动预充电有效,当读操作结束时自动执行预充电并关闭该bank。
从DDR2 SDRAM接受读命令到给出到有效读数据之间的延时,称为读延迟(Read Latency,即RL)。读延迟被定义为AL和CL的和,即RL=AL+CL。AL和CL的值可以分别通过MR和EMR来设定。
DQS/DQSn是由DDR2 SDRAM驱动的,伴随数据输出的选通脉冲信号。如下图所示,当即将输出数据时,DQS信号被设为低——DQSn信号是DQS信号的反,这就是所谓的前同步信号(preamble);当输出数据即将结束时,即一次读访问的最后一个有效数据时,DQS信号为低,这就是所谓的后同步信号(postamble)。
写命令
与读命令相似,写命令也只能在目标地址所在的bank被打开后才能进行;同样,在给出写命令的同时要给出地址和自动刷新命令。写命令与写数据之间的延迟称为写延迟(Write Latency,WL),定义为读延迟减去1,即WL=RL-1。
写操作也有前同步信号和后同步信号,与读操作的相比,在长度上有所不同。读操作的前同步信号是1个时钟宽度,后同步信号是0.5个时钟宽度;写操作的前后同步信号的宽度都是在0.5到1个时钟宽度之间。在DQS和数据DQ的同步问题上,读写操作也各不相同。读操作的数据信号DQ和数据选通信号DQS是同步的;写操作的数据信号DQ和数据选通信号DQS的相位相差90度,这是为了数据在写入内存时,数据眼图中央部分的可靠信号可以被内存模块截获。
预充电命令(Precharge)
预充电有两种发起方式,一是通过由控制器通过命令总线的预充电命令发起;二是通过与读写命令一起的自动预充电命令发起。预充电命令可以选择一个特定bank或所有bank的处于打开状态的行进行关闭,当然,由于DDR2 SDRAM的bank结构的原因,每个bank最多只能有1个行处于打开状态。
如果是由命令总线的预充电命令发起的,那么地址线上的第10位信号(A10)的输入将决定是关闭全部bank的行还是单一bank的行。当A10为高时,bank地址将被忽略,所有的bank都将被关闭;当A10信号为低时,bank地址将指定被关闭的bank。如果预充电命令是自动预充电的话,在读写命令发出时,A10表示是否要在完成读写操作之后进行预充电。为保证存储单元内数据的信号强度,DDR2 SDRAM要求平均间隔tREFI,最大间隔9×tREFI,进行一次刷新操作。通常,常温使用状态下tREFI 为7.8us;当工作温度高于85℃时,tREFI为3.9us。
空操作命令NOP
空操作命令,顾名思义,就是没有实际的特殊功能的操作。NOP是DDR2 SDRAM处于空闲或者等待的状态时,为了避免命令总线上出现不定的动作而设定的,它不会对DDR2 SDRAM当前的状态及动作产生任何影响。
六. 地址映射
用户端发送的是线性地址,而不同类型DDR2存储器所规定的行列地址及bank地址所占用的位宽不相同,因此要将输入的线性地址根据所使用的DDR2存储器进行地址映射,将最终发送给DDR2的各类地址分离出来,供状态机(DDR2)使用。
七. timing
CL :CAS(READ) latency,列选择到数据输出的时间。
tRAS:ACTIVE-to-PRECHARGE command
tRC:ACTIVE-to-ACTIVE command period(同bank)。
tRRD:ACTIVE bank a to ACTIVE bank b command(异bank)。
tRCD:ACTIVE-to-READ or WRITE delay,行选择(RAS)到列选择(CAS)延迟。
tRP:PRECHARGE command period,预充电命令的执行时间。
参考: