一、功能介绍
1.1 ODT
ODT是On Die Termination的缩写,又叫片内端接,顾名思义,就是将端接电阻放在了芯片内部,这个功能只有在DDR2以上的数据信号才有,其他信号无此宠幸!所谓的终结(端接),就是让信号被电路的终端吸收掉,而不会在电路上形成反射,造成对后面信号的影响有了这个功能,原本需要在PCB板上加串阻的数据信号就不用再额外添加端接了,因为芯片内部可以打开这个ODT端接功能,而且端接还可调。当数据读操作的时候,主控(FPGA或CPU)读取Memory颗粒的数据,此时主控为接收端,可以根据需要选择是否打开ODT;当数据写操作的时候,主控(FPGA或CPU)将数据写入到Memory颗粒,此时颗粒为接收端,也可以根据需要选择是否打开ODT,这种操作可以在寄存器内部实现控制。(参考高速先生:https://mp.weixin.qq.com/s/ZhN5G_ECgz6gkiEGkGEk-A)
1.2 CK/CKN
差分时钟是DDR的一个重要且必要的设计,但大家对CK#(CKN)的作用认识很少,很多人理解为第二个触发时钟,其实它的真实作用是起到触发时钟校准的作用。
由于数据是在CK的上下沿触发,造成传输周期缩短了一半,因此必须要保证传输周期的稳定以确保数据的正确传输,这就要求CK的上下沿间距要有精确的控制。但因为温度、电阻性能的改变等原因,CK上下沿间距可能发生变化,此时与其反相的CK#(CKN)就起到纠正的作用(CK上升快下降慢,CK#则是上升慢下降快),如下图一所示。
1.3 数据选取脉冲(DQS)
Data Stroe(DQS):就像时钟信号一样,DQS也是DDR中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗8bit DRAM芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由主控芯片发来的DQS信号,读取时,则由DRAM芯片生成DQS向主控发送。完全可以说,它就是数据的同步信号。
在读取时,DQS与数据信号同时生成(也是在CK与CK#的交叉点)。而DDR内存中的CL也就是从CAS发出到DQS生成的间隔,数据真正出现在数据I/O总线上相对于DQS触发的时间间隔被称为tAC。实际上,DQS生成时,芯片内部的预取已经完毕了,由于预取的原因,实际的数据传出可能会提前于DQS发生(数据提前于DQS传出)。由于是并行传输,DDR内存对tAC也有一定的要求,对于DDR266,tAC的允许范围是±0.75ns,对于DDR333,则是±0.7ns,其中CL里包含了一段DQS的导入期。
DQS 在读取时与数据同步传输,那么接收时也是以DQS的上下沿为准吗?不,如果以DQS的上下沿区分数据周期的危险很大。由于芯片有预取的操作,所以输出时的同步很难控制,只能限制在一定的时间范围内,数据在各I/O端口的出现时间可能有快有慢,会与DQS有一定的间隔,这也就是为什么要有一个tAC规定的原因。而在接收方,一切必须保证同步接收,不能有tAC之类的偏差。这样在写入时,DRAM芯片不再自己生成DQS,而以发送方传来的DQS为基准,并相应延后一定的时间,在DQS的中部为数据周期的选取分割点(在读取时分割点就是上下沿),从这里分隔开两个传输周期。这样做的好处是,由于各数据信号都会有一个逻辑电平保持周期,即使发送时不同步,在DQS上下沿时都处于保持周期中,此时数据接收触发的准确性无疑是最高的,如下图二所示。
1.4 数据掩码技术(DQM)
不是DDR所特有的,但对于DDR来说也是比较重要的技术,所以一并介绍下。
为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。
DQM由主控芯片控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个64bit位宽的数据中有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM 信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于16bit位宽芯片,则需要两个DQM引脚。SDRAM 官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即生效,如下图三和四分别显示读取和写入时突发周期的第二笔数据被取消。
所以DQM信号的作用就是对于突发写入,如果其中有不想存入的数据,就可以运用DQM信号进行屏蔽。DQM信号和数据信号同时发出,接收方在DQS的上升与下降沿来判断DQM的状态,如果DQM为高电平,那么之前从DQS中部选取的数据就被屏蔽了。
有人可能会觉得,DQM是输入信号,意味着DRAM芯片不能发出DQM信号给主控芯片作为屏蔽读取数据的参考。其实,该读哪个数据也是由主控芯片决定的,所以DRAM芯片也无需参与主控芯片的工作,哪个数据是有用的就留给主控芯片自己去选择。
1.5 VREFCA & VREFDQ
对于内存系统工作非常重要的参考电压信号VREF,在DDR3系统中将VREF分为两个信号。一个是为命令与地址信号服务的VREFCA,另一个是为数据总线服务的VREFDQ,它将有效的提高系统数据总线的信噪等级
1.6 ZQ校准
ZQ也是一个新增的引脚,在这个引脚上接有一个240欧姆的低公差参考电阻。这个引脚通过一个命令集,通过片上校准引擎(ODCE,On-Die Calibration Engine)来自动校验数据输出驱动器导通电阻与ODT的终结电阻值。当系统发出这一指令之后,将用相应的时钟周期(在加电与初始化之后用512个时钟周期,在退出自刷新操作后用256时钟周期、在其他情况下用64个时钟周期)对导通电阻和ODT电阻进行重新校准。
1.7 片外驱动调校OCD(Off-Chip Driver)
OCD是在DDR-II开始加入的新功能,而且这个功能是可选的,有的资料上面又叫离线驱动调整。OCD的主要作用在于调整I/O接口端的电压,来补偿上拉与下拉电阻值,从而调整DQS与DQ之间的同步确保信号的完整与可靠性。调校期间,分别测试DQS高电平和DQ高电平,以及DQS低电平和DQ高电平的同步情况。如果不满足要求,则通过设定突发长度的地址线来传送上拉/下拉电阻等级(加一档或减一档),直到测试合格才退出OCD操作,通过OCD操作来减少DQ、DQS的倾斜从而提高信号的完整性及控制电压来提高信号品质。
1.8 CAS和RAS
CAS:列地址选通
RAS:行地址选通
1.9 容量计算
上图为X8data的单颗DDR3架构图,行(Row)地址线复用14根,列(Column)地址线复用10根,Bank数量为8个,IO Buffer通过8组数位线(DQ0-DQ7)来完成对外的通信,故此单颗DDR3芯片的容量为2的14次方乘2的10次方乘8乘8,结果为1Gbit,因为1B包含8bit,1GB/8=128MB。
如果我们要做成容量为1GB的内存条则需要8颗这样的DDR3内存芯片,每颗芯片含8根数位线(DQ0-DQ7)则总数宽为64bit,这样正好用了一个Rank。
假果还用128MB的DDR3芯片去做2GB内存条,结果就会有所不同。我们最好选用4根数位线(DQ0-DQ3),数量是16颗,这样也是用了一个Rank。
二、关键技术
2.1 Write leveling功能与Fly_by拓扑
Write leveling功能和Fly_by拓扑密不可分。Fly_by拓扑主要应用于时钟、地址、命令和控制信号,该拓扑可以有效的减少stub的数量和他们的长度,但是却会导致时钟和Strobe信号在每个芯片上的飞行时间偏移,这使得控制器(FPGA或者CPU)很难保持tDQSS、tDSS 和tDSH这些参数满足时序规格。因此write leveling应运而生,这也是为什么在DDR3里面使用fly_by结构后数据组可以不用和时钟信号去绕等长的原因,数据信号组与组之间也不用去绕等长,而在DDR2里面数据组还是需要和时钟有较宽松的等长要求的。DDR3控制器调用Write leveling功能时,需要DDR3 SDRAM颗粒的反馈来调整DQS与CK之间的相位关系,具体方式如下图一所示。
Write leveling 是一个完全自动的过程。控制器(CPU或FPGA)不停的发送不同时延的DQS 信号,DDR3 SDRAM 颗粒在DQS-DQS#的上升沿采样CK 的状态,并通过DQ 线反馈给DDR3 控制器。控制器端反复的调整DQS-DQS#的延时,直到控制器端检测到DQ 线上0 到1 的跳变(说明tDQSS参数得到了满足),控制器就锁住此时的延时值,此时便完成了一个Write leveling过程;同时在Leveling 过程中,DQS-DQS#从控制器端输出,所以在DDR3 SDRAM 侧必须进行端接;同理,DQ 线由DDR3 SDRAM颗粒侧输出,在控制器端必须进行端接;
需要注意的是,并不是所有的DDR3控制器都支持write leveling功能,所以也意味着不能使用Fly_by拓扑结构,通常这样的主控芯片会有类似以下的描述:
2.2 DBI功能与POD电平
DBI的全称是Data Bus Inversion数据总线反转/倒置,它与POD电平密不可分,它们也是DDR4区别于DDR3的主要技术突破。
POD电平的全称是Pseudo Open-Drain 伪漏极开路,其与DDR3对比简单的示例电路如下图二所示。
从中可以看到,当驱动端的上拉电路导通,电路处于高电平时(也即传输的是“1”),此时两端电势差均等,相当于回路上没有电流流过,但数据“1”还是照样被传输,这样的设计减少了功率消耗。
正是由于POD电平的这一特性,DDR4设计了DBI功能。当一个字节里的“0”比特位多于“1”时,可以使能DBI,将整个字节的“0”和“1”反转,这样“1”比“0”多,相比原(反转前)传输信号更省功耗
2.3 DDR系列对比
三、电压及时序
3.1 VREF Tolerances
看图说话,一般Vref电源表现为如图所示的Vref(t),Vref(DC)就是Vref(t)的平均电压,也就是我们仿真中用到的Vref参考电压,对于这个压值,也有一定要求,就是VDD/2±1%VDD。在此基础之上,还要求Vref(t)偏离Vref(DC)不能超过±1%VDD,所以关于容限的要求,有两个点 :VREF(AC noise)的容限为±2%VDD,VREF(DC )为±1%VDD。
对于Vref对于信号的影响,重点是两个方面:一是时序方面,影响setuptime、holdtime的测量以及derating取值,会造成时序错乱或者DDR运行不到额定频率等很多结果。二是电平判断方面,可能会造成高低电平误判。因为Vref偏移VDD/2,影响的不仅仅只是Vref(DC)会有偏移,还会对VIH(AC)、VIH(DC)、VIL(AC)和VIL(DC)造成影响。因为这些参数的取值都和Vref(DC)有着密切的联系。
以DDR2为例,电气标准为SSTL_18,VREF和VTT为900mV。 VREF+AC noise=936mV,VREF-AC noise=864mV,VREF+DC error=918mV,VREF-DC error=882mV。 VREF的电压噪声或偏差会导致潜在的时钟误差,抖动和内存总线错误判定。例如如果VREF噪声较大或者偏离VDDQ/2较多,接收端的会检测到不期望的逻 辑电平,输入信号斜率将会变大,抓取数据点改变。还有可能影响接收端的 DRAM时序。
3.2 差分信号电压
对于做为差分线的CK信号和DQS信号而言,判定的要求又分为单根和差分模式,单根模式的判定标准和地址数据线基本一致,如下图三所示。它的判定标准只有VSEH和VSEL。实际这两个值对应的就是VIH.AC和VIL.AC。
差分模式如图所示,数据见表格
而且同时对两个单根的交点也有一定的要求,如下图五所示,两个单根的交点位置要在VSEH(最高点)和VSEL(最低点)之间,否则的话差分模式下,正半周期和负半周期可能会有比较大的一个比例差异。
四、关键时间参数
4.1 传输速率与时钟频率
DDR3-800/DR3-1600:后缀数字的单位是MT/S,指每秒传输多少个数据(Mega-transfer per second),和时钟频率是两个不同的概念。
DDR(dual data rate)是双边沿传输数据。因此MT/S是时钟频率的两倍,即DDR3-800的始终频率是400KMHz,DDR3-1600的始终频率是800KMHz,
4.2 tRCD
首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。
DDR3的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)就是逻辑 Bank(Logical Bank,下面简称Bank)。
DDR3内部Bank示意图,这是一个NXN的阵列,B代表Bank地址编号,C代表列地址编号,R代表行地址编号。
如果寻址命令是B1、R2、C6,就能确定地址是图中红格的位置
目前DDR3内存芯片基本上都是8个Bank设计,也就是说一共有8个这样的“表格”。
寻址的流程也就是先指定Bank地址,再指定行地址,然后指列地址最终的确寻址单元。
tRCD 全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。 DDR 的寻址流程是先指定 BANK 地址,然后在指定行地址,最后指定列地址确定最终要寻址的单元。 BANK 地址和行地址是同时发出的,这个命令叫做“行激活” (Row Active)。行激活以后就发送列地址和具体的操作命令(读还是写),这两个是同时发出的,因此一般也用“读/写命令”表示列寻址。在行有效(行激活)到读写命令发出的这段时间间隔叫做 tRCD
4.3 CL参数
相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的 I/O 接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的 CL(CAS Latency,列地址脉冲选通潜伏期)。CL 的数值与 tRCD 一样,以时钟周期数表示。如 DDR3-800,时钟频率为 100MHz,时钟周期为 10ns,如果 CL=2 就意味着 20ns 的潜伏期。不过CL只是针对读取操作。
4.4 AL参数
在 DDR 的发展中,提出了一个前置 CAS 的概念,目的是为了解决 DDR 中的指令冲突,它允许 CAS 信号紧随着 RAS 发送,相当于将 DDR 中的 CAS 前置了。但是读/写操作并没有因此提前,依旧要保证足够的延迟/潜伏期,为此引入了 AL(Additive Latency),单位也是时钟周期数。 AL+CL 组成了 RL(Read Latency),从 DDR2 开始还引入了写潜伏期 WL(Write Latency),WL 表示写命令发出以后到第一笔数据写入的潜伏期。
4.5 tRC 参数
tRC 是两个 ACTIVE 命令,或者 ACTIVE 命令到 REFRESH 命令之间的周期, DDR3L 数据手册会给出这个值,比如 NT5CC256M16EP-EK 的 tRC 值为 47.91ns
4.6 tRAS 参数
tRAS 是 ACTIVE 命令到 PRECHARGE 命令之间的最小时间, DDR3L 的数据手册同样也会给出此参数, NT5CC256M16EP-EK 的 tRAS 值为 34ns
4.7 tRP
在数据读取完之后,为了腾出读出放大器以供同一Bank内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行。还是以上面那个Bank示意图为例。当前寻址的存储单元是B1、R2、C6。如果接下来的寻址命令是B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务。但如果地址命令是B1、R4、C4,由于是同一Bank的不同行,那么就必须要先把R2关闭,才能对R4寻址。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(Row Precharge command Period,行预充电有效周期),单位也是时钟周期数。
五、PCB设计
5.1 布局
https://mp.weixin.qq.com/s/N7XG6JhwAG9p5L99PHPPNw
5.2 布线
参考自:https://mp.weixin.qq.com/s/dyB7wCgJ0DvnMeV0TUz84g
DDR的不限拓扑结果主要有T型和Fly-by,如下图所示:、
主要的布线步骤大致为:
第一步,确定拓补结构(仅在多片DDR芯片时有用)
第二步,元器件摆放
第三步,设置串联匹配电阻的仿真模型
第四步,设置线宽与线距
第五步,走线
第六步,设置等长规则
第七步,绕等长
第一步,确定拓补结构(仅在多片DDR芯片时有用)
首先要确定DDR的拓补结构,一句话,DDR1/2采用星形结构,DDR3采用菊花链结构。
拓补结构只影响地址线的走线方式,不影响数据线。
星形拓补就是地址线走到两片DDR中间再向两片DDR分别走线,菊花链就是用地址线把两片DDR“串起来”,就像羊肉串
第二步,元器件摆放
确定了DDR的拓补结构,就可以进行元器件的摆放,有以下几个原则需要遵守:
原则一,考虑拓补结构,仔细查看CPU地址线的位置,使得地址线有利于相应的拓补结构
原则二,地址线上的匹配电阻靠近CPU
原则三,数据线上的匹配电阻靠近DDR
原则四,将DDR芯片摆放并旋转,使得DDR数据线尽量短,也就是,DDR芯片的数据引脚靠近CPU
原则五,如果有VTT端接电阻,将其摆放在地址线可以走到的最远的位置。一般来说,DDR2不需要VTT端接电阻,只有少数CPU需要;DDR3都需要VTT端接电阻。
原则六,DDR芯片的去耦电容放在靠近DDR芯片相应的引脚
以下是DDR2的元器件摆放示意图(未包括去耦电容),可以很容易看出,地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。
以下是DDR3元器件摆放示意图,请注意,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓补。地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。同样地,数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。同时,可以看到,去耦电容放置在了很靠近DDR3相应电源引脚的地方。
第三步,设置串联匹配电阻的仿真模型
摆放完元器件,建议设置串联匹配电阻的仿真模型,这样对于后续的布线规则的设置是有好处的。
第四步,设置线宽与线距
-
DDR走线线宽与阻抗控制密切相关,经常可以看到很多同行做阻抗控制。对于纯数字电路,完全有条件针对高速线做单端阻抗控制;但对于混合电路,包含高速数字电路与射频电路,射频电路比数字电路要重要的多,必须对射频信号做50欧姆阻抗控制,同时射频走线不可能太细,否则会引起较大的损耗,所以在混合电路中,本人往往舍弃数字电路的阻抗控制。到目前为止,本人设计的混合电路产品中,最高规格的DDR是DDR2-800,未作阻抗控制,工作一切正常。
-
DDR的供电走线,建议8mil以上,在Allegro可以针对一类线进行物理参数的同意设定,我本人喜欢建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件,如下图。
PWR-10MIL
- 线距部分主要考虑两方面,一是线-线间距,建议采用2W原则,即线间距是2倍线宽,3W很难满足;二是线-Shape间距,同样建议采用2W原则。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件,如下图。
DDR-2W
- 还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距,小线宽的区域规则,
第五步,走线
走线就需要注意的内容比较多,这里只做少许说明。
所有走线尽量短
走线不能有锐角
尽量少打过孔
保证所有走线有完整的参考面,地平面或这电源平面都可以,对于交变信号,地与电源平面是等电位的
尽量避免过孔将参考面打破,不过这在实际中很难做到
走完地址线和数据后,务必将DDR芯片的电源脚,接地脚,去耦电容的电源脚,接地脚全部走完,否则在后面绕等长时会很麻烦的
第六步,设置等长规则
对于数据线,DDR1/2与DDR3的规则是一致的:每个BYTE与各自的DQS,DQM等长,即DQ0:7与DQS0,DQM。等长,DQ8:15与DQS1,DQM1等长,以此类推。
地址线方面的等长,要特别注意,DDR1/2与DDR是很不一样的。对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长,对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。
第七步,绕等长
完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。
在这一步,我认为只有一点规则需要注意:尽量采用3倍线宽,45度角绕等长
5.3 DDR走线分类
1、为满足DDR3时序,需要将DDR3信号分组走线。数据线每八根一组,外加相应的DQS和DQM(如:DQ0-DQ7,DQS0,DQS0#,DQM0分为一组,依次类推),走线必须同组,一组线之间不能有其他信号线,且保证同层,换层次数一致,长度误差控制在±10mil内;地址线、控制线、时钟线分为一组,长度误差控制在±25mil内,如果速率很高的话,等长规则可以控严格点。
GROUP0:
DQ0-DQ7,DQM0,DQS0P/DQS0N;
GROUP1:
DQ8-DQ15,DQM1,DQS1P/DQS1N;
2、而对于控制线、地址线、时钟线 分组如下:
GROUP2:Address ADDR0-ADDR14 共15根地址线;
GROUP3:Clock CLK、CLKN差分对;
GROUP4:Control 包括WE、CAS、RAS、CS0、CS1、ODT0、ODT1、BA0、BA1、BA2等;
5.4 注意事项
而对于FLY-BY的拓扑结构 ,要注意以下几点:
1. 间距 组内按3H(说明:H指的是到主参考平面的高度,中心间距3H,)原则;组间间距要5H以上;CLK和ADD/CMD等的间距按5H设计;
2.尽量同组同层完成走线且有完整参考平面(GND/power);
3.各个DDR颗粒间的走线,尽量用COPY,长度误差在20mil以内(推荐5mil);若因结构限制,最大不能超过100mil;
4. 时钟线推荐带状线布线以(GND/POWER为参考平面); 时钟要紧耦合设计,对内等长控制在5MIL以内;源端和终端匹配的走线,长度不要太长(推荐300 mil以内)
5.终端(上拉)电阻要放在最后一个DDR颗粒(末端),且走线长度小于500mil;
6.在有多个负载时,为了减少串扰和加大负载容性补偿,到第一个颗粒(主干道)的走线阻抗可以比到后面的走线阻抗偏小点,5-8欧姆左右。
7.Add/Com/Ctrl/Clk网络从控制器到第一个DDR颗粒的走线长度不要超过6000mil,到最后一个DDR颗粒不要超过12000mil。
8.在多个考虑表底贴时分支的节点走线长度小于200mil且尽量等长.
9.滤波电容一个引脚放置一个,如DDR在顶层,电容可放置在顶层,电源的走向:电源-电容-过孔-DDR3引脚
参考资料:
https://blog.csdn.net/wshini7316/article/details/8508836?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
https://blog.csdn.net/monkea123/article/details/103281127