DDR3基础知识

DDR3基础简介

DDR3 SDRAM(double-data-rate 3 synchronous dynamic RAM)即第三代双倍数据速率同步动态随机存储器

  • 同步:指DDR3数据的读取写入是按时钟同步
  • 动态:指DDR3中的数据掉电无法保存,且需要周期性的刷新,才能保持数据
  • 随机存取:可以随机操作任一地址的数据
  • 双倍数据速率:时钟的上升沿和下降沿都发生数据传输

关键技术

Prefetch 预取

DRAM内部存储单元的核心频率提高比较困难且成本较高,引入 prefetch 来保障数据传输速率的增长。本质上是并串转换,通过并行方式提前取得数据再串行输出,从而提升数据传输速率。

在DDR3中采用8-bit prefetch或8-n prefetch(n代表芯片位宽),从而使实际数据传输速率为核心频率的8倍。

芯片位宽的另一种说法是配置模式(Configuration),在DDR3时代,一般有x4,x8,x16
当DDR3 为x8 Configuration时,一个Cell的容量为8x8bits,即8个字节。换一句话说,在指定bank、row地址和col地址之后,可以往该地址内写入(或读取)8 Bytes。

http://blog.chinaaet.com/justlxy/p/5100052027​blog.chinaaet.com/justlxy/p/5100052027

Burst 突发传输

Burst(突发)是指在同一行中相邻的存储单元连续进行数据传输的方式。

Burst Lengths(突发长度,简称BL)指连续传输所涉及到存储单元(列)的数量就是突发长度。

在DDR3 SDRAM时代,内部配置采用了8n prefetch(预取)来实现高速读写。这也导致了DDR3的Burst Length一般都是8。当然也有Bursth ength为4的设置(BC4),是指另外4笔数据是不被传输的或者被认为无效。

示例:MT41K256M16xx-125

以MT41K256M16 为例,其命名规则如下:

时钟频率与带宽

关于DDR的时钟频率相关参数主要有如下三种:

  • core freq: 核心频率,用于DDR内部cell(存储单元)的时钟
  • clock freq:时钟频率,用于DDR的IO buffer的时钟,同时也是IO接口时钟,是通过核心频率倍频4倍得到
  • data bus/rate:数据速率,单根数据线的数据传送次数

他们之间的关系如下:

从 part number 中的 speed 选项可知,-125 所支持的最小时钟周期 tCK = 1.25ns,对应芯片支持的最大 IO 时钟频率为 800MHz。

不同速度等级对应的时间参数如下:

表中 data rate 为单数据线的数据速率,DDR为双边沿传输,因此 -125 对应 1600 MT/s(Mega Transfers/s),有时也对应称此内存为 DDR3-1600

那么这片16位数据线内存的带宽为:

1600MT/s∗16bit=25600Mbit/s=3200MB/s

在实际应用确定DDR3工作频率时,除了DDR3本身时钟速率的限制,我们还需要考虑控制器所能支持的输出频率。例如,MT41K256M16是支持1.35V(DDR3L)和1.5V(DDR3)两个电平标准,当我们用 Xilinx K7的FF封装FPGA芯片作为控制器时,参考 DS182 手册查看支持的最高速率:

采用不同bank类型以及电压均对支持的最大速率有影响

地址及容量计算

所对应的功能框图如下:

MT41J256M16拥有18根地址线和16跟数据线:

端口类型描述
BA[2:0]I地址线:Bank地址选择,模式寄存器选择
A[14:0]I地址线:复用行列地址线
DQ[15:0]I/O数据线
在DDR4往后,开始有BANK GROUP概念,BANK被划分为两组BANK GROUP,由BG0进行控制,此时BA变为两位。并且地址线A中拥有1位专用于区分行地址和列地址。可参考: https://blog.csdn.net/u012489236/article/details/107730731

从DDR的命名中可以知道:MT41J256M16 是一片 256M*16 bit = 4 Gb 容量的内存。4Gb 这个系列根据颗粒大小的参数区别如下:

DDR3的内部是由8个逻辑 bank 组成,如下所示

每个bank类似于一个表格,通过指定行与列来确定具体的存储单元。DDR3通过分时复用的方式,将有限的地址线能够寻址更大的容量。

对于DDR3还有物理 bank 概念(即 rank),rank 针对于系统而非内存本身。内存为了保证CPU正常工作,必须一次传输完CPU在一个传输周期内所需总线位宽的数据。目前这个位宽通常为64 bit,如果DDR3有128 bit地址线,则为2个rank。

关于容量的计算

在1个bank中,有15位行地址与10位列地址,数据宽度为16位(每个存储单元为16bit)。

  • 行地址容量为:2^15 = 32K
  • 列地址容量为:2^10 = 1K
  • 每个bank的地址总容量为:32K * 1K = 32 M,即 configuration 中对应的 32 Meg
  • DDR总地址容量为:32M * 8 = 256 M,即名称中的 256 Meg
  • 每行的存储容量为:1K * 16 bit = 16 Kbit = 2 KB,称为 page size

我们对应功能框图中的一个bank容量标识:

(行地址)(列地址)(数据宽度预取)32768(行地址)∗128(列地址/8)∗128(数据宽度∗8 bit预取)

列地址/8与突发传输有关,对于DDR3一般突发长度为8(对应8-bit prefetch),每次传输8列的数据,因此列地址只需要原来的八分之一。

从功能框图也可以看到,列地址寻址范围为 2^7,只有7bit用于了列地址译码:

列地址的低三位 A[2:0]以及 A[3] 被用作 burst 读写中地址顺序的规定:

比如一次Burst Read的时候如果CA[2:0]=3’b001表示低三位从地址1开始读取, - CA3=0的时候按顺序读取1,2,3,0,5,6,7,4,
  • CA3=1的时候为交错读取1,0,3,2,5,4,7,6。

对于Prefetch而言,正好是8N Prefetch,对于Burst而言对应BL8。BC4其实也是一次BL8的操作,只是丢弃了后一半的数据。

引脚说明

为了更好的认识,可以将DDR3的数字引脚按照功能分类为:控制组,地址组和数据组三类

控制组

所有带#信号均为低电平有效

名称功能描述
CK,CK#差分时钟输入所有控制和地址输入信号在CK上升沿和CK#的下降沿交叉处被采样,输出数据选通(DQs,DQS#)参考与CK和CK#的交叉点。
CKE时钟使能内部时钟使能信号
CS#片选CS#为低时DDR芯片使能,CS#的参考值是VREFCA
RAS#行地址行地址标识信号,其参考值是VREFCA
CAS#列地址列地址标识信号,其参考值是VREFCA
WE#读写低电平表示写,高电平表示读操作,其参考值是VREFCA
RESET#复位参考值是 VSS
ODT片上终端使能在正常操作使能时,ODT仅对:DQ[7:0]、DQS、DQS#和DM引脚有效。如果通过LOADMODE命令禁止,ODT输入被忽略。ODT的参考值是VREFCA。
ZQ#外部校准输出驱动校准的外部参考,这个引脚应该连接240欧姆电阻到VSSQ。

CS#,RAS#,CAS#和WE#可以构成命令组,它们将在时钟的上升沿被采用,在DDR手册中可以查看对应的真值表

地址组

名称功能描述
A[14:0]地址总线为 ACTIVATE命令提供行地址
为 READ/WRTE 命令提供列地址和自动预充电位(A10),以便从某个Bank的内存阵列里选出一个位置。
LOAD MODE命令期间,地址输入提供一个操作码。地址输入的参考值是 VREFCA
BA[2:0]bank选通确定要操作的Bank,参考值是VREFCA

数据组

名称功能描述
DQ数据总线双向总线
DQS,DQS#数据选通用于数据同步:
读时是输出,边缘与读出的数据对齐
写时是输入,中心与写数据对齐。
TDQS,TDQS#数据选通功能与DQS相同,只是当两种不同的DIMM混合应用在同一个系统时,DQS的负载就会不同,这样会造成信号完整性问题,TDQS就是为了解决这个问题的。
当TDQS使能时,DM必须禁止,TDQS和TDDS提供终端电阻。
DM数据屏蔽DM是写数据的输入屏蔽信号,在写期间,当DM信号被采样为高时,输入数据被屏蔽。
虽然DM仅作为输入脚,但是DM负载被设计成与DQ和DQS脚负载相匹配。DM的参考值是 VREFCA。
注意: DQS与DM共用一个物理引脚,所以DM可选作为TDQS。

DDR操作

命令模式

其中V表示逻辑电平H或L。

DES & NOP

DES(取消选择)和NOP(无操作)命令比较类似:

  • DES防止DRAM执行新命令
  • NOP防止不需要的命令在空闲或等待期间执行

对于已经进行的操作两者都不会影响

ZQCL & ZQCS

ZQCL(ZQ校准长)和ZQCS(ZQ校准短)都用于校准,区别在于:

  • ZQCL用于上电初始化和复位序列期间执行初始校准,校准完成后会更新RON和ODT值。
  • ZQCS用于执行定期校准来解决电压和温度的小变化,在64个时钟周期内完成校准

ACT

ACT(启用)用于打开(或激活)特定bank中的行以便后续访问。在此期间该行将保持打开(或活动)直到该bank发出PRECHARGE命令。打开同一bank中不同行之前必须执行PRECHARGE命令。

PRE & PREA

PRECHARGE(预充电) 命令⽤于取消激活特定 bank 中的打开或全部 bank。bank 在发出预充电命令的 tRP 时间后可以继续访问后续行。

bank 在预充电后处于空闲状态,在任意读操作之前必须激活(ACT)bank或发出写命令(WR)。

RD

READ命令用于启动对话行的突发读取访问。

  • 输⼊ A[2:0] 以及突发顺序表选择起始列地址
  • 输⼊ A[10] 上的值决定是否使⽤⾃动预充电。如果选择了⾃动预充电,则正在访问的行将在 READ 突发结束时进行预充电,否则该行将保持打开状态以供后续访问。
  • 输入 A[12] 上的值(如果模式寄存器启用)决定使用BC4(0)或BL8(1)

WR

WRITE 命令⽤于启动对活动行的突发写⼊访问。

  • 输入 BA[2:0] 值决定选择 bank,地址 A 的作用与 RD 相似
  • 出现在 DQ 上的输⼊数据被写⼊受 DM 输⼊影响,如果给定的 DM 信号为低电平,数据将被写入内存,反之数据将被忽略。

REF

REFRESH(刷新) 命令在 DRAM 正常运行期间使⽤,与地址位无关,平均间隔为7.8us。最多可以将⼋个 REFRESH 命令发布到任何 给定的 DRAM。

SRE & SRX

SELF REFRESH(自刷新) 命令⽤于在 DRAM 中保留数据,DRAM ⽆需外部时钟即可保留数据。

write leveling

为了更好的信号完整性,DDR3 SDRAM 内存模块对命令、地址、控制信号和时钟采⽤了 fly-by 拓扑。Fly-by拓扑能有效减少stub的长度,但是较长的走线带来了CK-CK#与DQS-DQS#间的时延(由于CK-CK#的飞行时间,其到达每个DDR3颗粒的时间不同,而DQS-DQS#通常为点到点拓扑)。

write leveling(写均衡)通过 DRAM 提供的简单反馈功能调整或消除 DRAM 上的 DQS 选通脉冲(DQS、DQS#)与 CK 的关系。

Wrtie leveling 是一个完全自动的过程。CPU 不停的发送不同时延的DQS 信号,DDR3 SDRAM 颗粒在DQS-DQS#的上升沿采样CK 的状态,并通过DQ 线反馈给DDR3 控制器。控制器端反复的调整DQS-DQS#的延时,直到控制器端检测到DQ 线上0 到1 的跳变(说明tDQSS参数得到了满足)。控制器就lock 住此时的delay value。此时便完成了一个Wrtie leveling过程。

Leveling 过程中,DQS-DQS#从控制器端输出,所以在DDR3 SDRAM 侧必须进行端接;同理,DQ 线由DDR3 SDRAM 颗粒侧输出,在控制器端必须进行端接;

系统状态机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值