资讯详情

DDR4设计概述以及分析仿真案例

DRAM (动态随机访问存储器)对设计师特别有吸引力,因为它为各种计算机和嵌入式系统的存储系统设计提供了广泛的性能。本文总结阐述DRAM 概念,介绍SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM、DDR5 SDRAM、LPDDR、GDDR。

DRAM

DRAM与其他内存类型相比,其优点之一是它可以IC(集成电路)实现每个内存单元的电路较少。DRAM 存储单元基于存储在电容器上的电荷。典型的DRAM 单元使用一个或三个电容器FET(场效应晶体管)制作。典型的SRAM (静态随机访问内存)内存单元采取六个FET 当设备减少相同尺寸时,每个设备都减少了IC 内存单元数量。与DRAM 相比,SRAM 更容易使用,接口更容易,数据访问时间更快。

DRAM核心结构由多个内存单元组成,分为由行和列组成的两维阵列(见图1)。访问内存单元需要两个步骤。首先找到行的地址,然后在选定行中找到特定列的地址。换句话说,首先DRAM IC 内部读取整行,然后选择列出的地址DRAM IC I/O(输入/ 输出)针脚读取或写入该行哪一列。

DRAM读取是破坏性的,也就是说,读取操作会破坏内存单元行中的数据。因此,在读写操作结束时,必须将行数据写回同一行。这个操作叫预充电,是行上的最后一个操作。在访问新行之前,必须完成这个操作。这个操作叫关闭打开。

分析计算机内存访问后,表明内存访问中最常用的类型是读取顺序的内存地址。这是合理的,因为读取计算机指令通常比读取或写入数据更常用。此外,在发生到指令分支或跳到子例程之前,大多数指令都是按内存顺序读取的。

图1. DRAMs 内存单元分为由行和列组成的两维阵列

DRAM一行称为内存页面,一旦打开,您可以访问多个顺序或不同的列地址。这提高了内存访问速度,减少了内存延迟,因为在访问同一内存页面中的内存单元时,不需要重新发送行地址DRAM.因此,行地址是计算机的高级地址,列地址是低级地址。由于行地址和列地址在不同的时间发送,行地址和列地址被重复使用相同的时间DRAM 针脚上,以减少封装针脚的数量、成本和尺寸。一般来说,由于使用的功率与列数有关,行地址的尺寸大于列地址。

早期的RAM有控制信号,比如RAS# (行地址选择低有效)和CAS# (列地址选择低有效),选择执行线和列寻址操作。DRAM 控制信号包括用于选择写入或读取操作的控制信号WE# (低有效写启动)DRAM的CS#(芯片选择低效)和OE#

(输出启动低有效)。DRAM具有异步控制信号和各种定时规范,涵盖其顺序和时间关系DRAM 工作模式。

早期的DRAM读取周期有四个步骤。第一步,RAS# 地址低于地址总线。第二步,CAS# 与地址总线上的列地址较低。第三步,OE#变低,读取数据出现DQ 数据针脚。在DQ 当针脚提供数据时,第一步和第三步的时间称为延迟。最后一步是RAS#, CAS# 和OE# 变高(不活动),等待内部预充电操作在破坏性读取后恢复行数据。内存周期时间从第一步开始到最后一步结束。上述信号的信号定期与边缘顺序有关,是异步的。这些早期DRAM没有同步时钟操作。

DRAM 必须刷新内存单元,以避免数据内容丢失。在丢失电荷之前,需要刷新电容器。内存控制器负责刷新内存,刷新时间指标因不同而不同DRAM内存不同。内存控制器只对行地址进行处理RAS# 循环,刷新。在仅RAS# 循环结束时,只进行预充电操作,恢复RAS# 循环中寻址的行数据。一般来说,内存控制器有一个行计数器,其顺序只生成RAS# 刷新周期所需的所有行地址。

有两种刷新策略(见图2)。第一个策略内存控制器在刷新周期的紧急情况下刷新所有行,然后将内存控制返回处理器进行正常操作。在达到最大刷新时间之前,下一个刷新操作将发生紧急情况。第二个刷新策略是内存控制器使用正常处理器的内存操作来扫描刷新周期。这种刷新方法在最大刷新时间内周期。

图2. DRAM 刷新实现方案包括分布式刷新和突发刷新。

早期的DRAM 进化和实现DRAM IC 刷新计数器,处理顺序生成的行地址。在DRAM IC 内部,刷新计数器是控制内存阵列行地址的复用器输入。另一个复用器从外部地址输入针脚的行地址。内部刷新计数器不需要内存控制器中的外部刷新计数器电路。部分DRAM 在RAS# 支持一个周期前CAS#,用内部生成的行地址开始刷新周期。

SDRAM

接口到同步处理器时,DRAM 异步操作带来了许多设计挑战。

SDRAM (同步DRAM)是为把DRAM操作同步到计算机系统的其机系统的其他部分CE# (芯片启动活动低),RAS#、CAS#和WE#边缘转换顺序定义所有内存操作模式。

SDRAM增加了时钟信号和内存命令的概念。内存命令的类型取决于SDRAM 时钟时钟CE#, RAS#,CAS# 和WE# 信号状态。产品资料根据CE#, RAS#,CAS# 和WE# 以表格形式描述内存命令的信号状态。

例如,Activate (激活)命令方向SDRAM发送一行地址,打开一行内存(页面)。然后是一个Deselect (反选)命令序列在对列地址发送Read 或Write 命令前满足定期要求。一旦使用Activate如果命令打开内存行(页面),可以在内存行(页面)上运行多个行(页面)Read和Write命令。要求Precharge(预充电)命令,关闭银行,然后打开另一行。

表1. DDR SDRAM 数据速度和时钟速度。

DDR SDRAM

两个数据位(见表1)通过提高时钟速率、突发数据和每个时钟周期传输,DDR (双数据速率) SDRAM 提高内存数据的速率性能。DDR SDRAM 多个内存位置突或一个写入命令中突发多个内存位置。读取内存操作必须发送一个Activate 命令,后面跟着一个Read 命令。由两个、四个或八个内存位置组成的突发事件应对每个时钟周期中两个内存位置的数据速率。因此,从两个连续的时钟周期中读取四个内存位置,或将四个内存位置写入两个连续的时钟周期。

DDR SDRAM 有多个内存条提供多个单独扫描的内存访问,以提高内存带宽。内存条是一个内存阵列,两个内存条是两个内存阵列,四个内存条是四个内存阵列,等等(见图3)。四个内存条需要两个用于内存条地址的位置(BA0 和BA1)。

图3. DDR SDRAM多个内存条提高了访问灵活性,提高了性能

例如,有四个内存条DDR SDRAM工作方法如下。首先,Activate命令在第一个内存条中打开一行。第二个Activate命令在第二个内存条中打开一行。现在,可以把Read 或Write 任命令的任何组合发送到打开行的第一个或第二个内存条。在内存条上Read 和Write 操作结束时,Precharge 命令关闭行,内存条对Activate 命令准备就绪,可以打开新行。

注意,DDR SDRAM所需的功率与打开行的内存条数量有关。打开线路越多,所需功率越高,线路尺寸越大,所需功率越高。因此,对于低功率应用程序,每个内存条只应打开一行,而不是多个内存条。

当内存条的地址位连接到内存系统中的低级地址位时,支持连续内存条中的连续内存单词的分离扫描。当内存条的地址位连接到内存系统中的高级地址时,连续内存单词位于同一内存条中。

DDR2 SDRAM

DDR2 SDRAM 较DDR SDRAM 有许多改进。DDR2SDRAM时钟速率较高,从而提高了内存数据速率(见表2)。随着时钟速率的提高,信号完整性对可靠运行内存变得越来越重要。随着时钟速率的提高,电路板上的信号轨迹变成了传输线,更重要的是在信号线末端进行合理的布局和端接。

地址、时钟和命令信号的端接相对简单,因为它们是单向的,端接在电路板上。数据信号和数据选择是双向的。内存控制器中心在写入操作中驱动这些信号,DDR2 SDRAM驱动这些信号进行读取操作。多个DDR2 SDRAM 连接到相同的数据信号和数据选择,进一步提高了复杂性。多个DDR2 SDRAM 内存系统可以位于相同的位置DIMM它也可以位于不同的内存系统中DIMM上。因此,数据和数据选择驱动器和接收器的变化取决于读取/ 哪个是写入操作和访问?DDR2 SDRAM。

表2. DDR2 SDRAM 数据速度和时钟速度。

通过提供ODT (芯片内端接)并提供ODT 实现片内端接并可使用信号DDR2 SDRAM 扩展模式寄存器对片接值编程(75) 欧姆、150 欧姆等),DDR2SDRAM 提高信号完整性。

内存控制器中心控制片内端接尺寸和操作DDR2SDRAM DIMM 位置与内存操作类型(读取或写入)有关。通过为数据有效窗口创建更大的眼图,提高电压余量,提高转换率,降低过冲压和过冲压ISI (码间干扰),ODT操作提高了信号完整性。

DDR2 SDRAM 在1.8V 上操作降低了内存系统的功率,即DDR SDRAM 的2.5V 功率的72%.在某些实现方案中,行中的列数已经下降,当激活行读取或写入时,功率降低。

降低工作电压的另一个优点是降低逻辑电压摆幅。当转换速率相同时,电压摆幅下降会提高逻辑转换速度,支持时钟速度更快。此外,数据选择可以编程成差分信号。使用差分数据选择通信号降低噪声、串扰、动态功耗和EMI (电磁干扰)提高了噪声余量。差异或单端数据选通操作配置DDR2 SDRAM 扩展模式寄存器。

DDR2 SDRAM 引入的一个新功能是额外的延迟,它使内存控制器中心在那里Activate命令发送后,更快更灵活Read 和Write 命令。这通过使用优化了内存吞吐量DDR2 SDRAM扩展模式寄存器对附加时延编程来配置。DDR2 SDRAM使用八个内存条,改进1Gb和2GbDDR2 SDRAM 数据带宽。通过隔行扫描不同的内存条操作,八个内存条提高了访问大型内存DDR2 SDRAM的灵活性。另外,对于大型内存,DDR2 SDRM支持最多八个内存条的突发长度。

DDR3 SDRAM

DDR3 SDRAM 是一种性能演进版本,增强了SDRAM技术,它从800 Mb/s开始,这是大多数DDR2 SDRAM支持的最高数据速率。DDR3 SDRAM支持六档数据速率和时钟速度(参见表3)。

DDR3-1066 SDRAM的能耗低于DDR2-800 SDRAM,因为DDR3 SDRAM 的工作电压是1.5 V,是DDR2SDRAM 的83%,DDR2 SDRAM 的工作电压是1.8 伏。此外,DDR3 SDRAM数据DQ驱动器的阻抗是34欧姆,DDR2 SDRAM 的阻抗较低,是18 欧姆。

表3. DDR3 SDRAM 数据速率和时钟速度。

DDR3 SDRAM 将从512 Mb 内存开始,将来将发展到8 Gb 内存。与DDR2 SDRAM 一样,DDR3 SDRAM 数据输出配置包括x4、x8 和x16.DDR3 SDRAM 有8 个内存条,DDR2 SDRAM 则有4 个或8 个内存条,具体视内存大小而定。

DDR2 和DDR3 SDRAM 都有4 个模式寄存器。DDR2 定义了前两个模式寄存器,另两个模式寄存器则预留给将来使用。DDR3使用全部4个模式寄存器。一个重要差异是DDR2 模式寄存器规定了读出操作的CAS 时延,写入时延则是1减去模式寄存器读出时延设置。DDR3模式寄存器对CAS 读出时延和写入时延的设置是唯一的。

DDR3 SDRAM使用8n预取架构,在4个时钟周期中传送8 个数据字。DDR2 SDRAM 使用4n 预取架构,在2个时钟周期中传送4 个数据字。

DDR3 SDRAM 模式寄存器可以编程为支持飞行突变,这会把传送8个数据字缩短到传送4个数据字,这在读出或写入命令期间把地址行12 设为低来实现。飞行突变在概念上与DDR2 和DDR3 SDRAM 中地址行10 的读出和写入自动预充电功能类似。

值得一提的另一个DDR3 SDRAM属性是差分的数据选通信号DQS,DDR2 SDRAM数据通信号则可以由模式寄存器编程为单端或差分。DDR3 SDRAM 还有一个新引脚,这个引脚为活动低异步RESET# 引脚,通过把SDRAM 置于已知状态,而不管当前状态如何,改善系统稳定性。DDR3 SDRAM 使用的FBGA 封装类型与DDR2 SDRAM 相同。

DDR3 DIMM为DIMM上的命令、时钟和地址提供了端接。采用DDR2 DIMM的内存系统端接主板上的命令、时钟和地址。DIMM上的DDR3 DIMM端接支持飞行拓扑,SDRAM 上的每个命令、时钟和地址引脚都连接到一条轨迹上,然后这条轨迹终结在DIMM的轨迹端。这改善了信号完整性,其运行速度要快于DDR2 DIMM树型结构。

飞行拓扑为内存控制器引入了新的DDR3 SDRAM写入电平功能,考虑了写入过程中时钟CK和数据选通信号DQS 之间的定时偏移。DDR3 DIMM 的主要不同于DDR2 DIMM,防止把错误的DIMM 插入主板中。

DDR4 SDRAM

DDR4 SDRAM(Double Data Rate Fourth SDRAM):DDR4提供比DDR3/ DDR2更低的供电电压1.2V以及更高的带宽,DDR4的传输速率目前可达2133~3200MT/s。DDR4 新增了4 个Bank Group 数据组的设计,各个Bank Group具备独立启动操作读、写等动作特性,Bank Group 数据组可套用多任务的观念来想象,亦可解释为DDR4 在同一频率工作周期内,至多可以处理4 笔数据,效率明显好过于DDR3。 另外DDR4增加了DBI(Data Bus Inversion)、CRC(Cyclic Redundancy Check)、CA parity等功能,让DDR4内存在更快速与更省电的同时亦能够增强信号的完整性、改善数据传输及储存的可靠性。

DDR5 SDRAM

作为DDR4内存的继任者,DDR5内存在性能上自然要高出DDR4一大截。从美光公布的文件来看,DDR5内存将从8GB容量起步,最高可达单条32GB,I/O带宽能达到3.2-6.4Gbps,同时电压1.1V,内存带宽将为DDR4内存的两倍。

此外,美光还在芯片论坛上表示DDR5内存将从3200Mhz起步,主流内存频率可达6400Mhz。

同时,美光还表示他们将在2018年成功流片DDR5内存样品,并将在2019年实现正式量产。

据业内人士估计,DDR5内存的普及应该会在2020年来临,所以想要跳过DDR4内存的朋友还要等待一段时间。

GDDR 和LPDDR

其它DDR变种,如GDDR (图形DDR)和LPDDR (低功率DDR),在业内的地位也在不断提高。

GDDR是一种图形卡专用存储技术,目前规定的变种有四个:GDDR2、GDDR3、GDDR4 和GDDR5.GDDR的技术与传统DDR SDRAM 非常类似,但功率要求不同。其降低了功率要求,以简化冷却,提供更高性能的存储器模块。GDDR也是为更好地处理处理图形要求设计的。

简短总结:

SDRAM:为同步动态随机存取内存,SDRAM是为了与CPU的计时同步化所设计,这使得内存控制器能够掌握准备所要求的数据所需的准确时钟周期,因此CPU从此不需要延后下一次的数据存取。举例而言,PC66 SDRAM以66 MT/s的传输速率运作;PC100 SDRAM以100 MT/s的传输速率运作;PC133 SDRAM以133 MT/s的传输速率运作,以此类推。

DDR SDRAM(Double Data Rate SDRAM):为双通道同步动态随机存取内存,是新一代的SDRAM技术。别于SDR(Single Data Rate)单一周期内只能读写1次,DDR的双倍数据传输率指的就是单一周期内可读取或写入2次。在核心频率不变的情况下,传输效率为SDR SDRAM的2倍。第一代DDR内存Prefetch为2bit,是SDR的2倍,运作时I/O会预取2bit的资料。举例而言,此时DDR内存的传输速率约为266~400 MT/s不等,像是DDR 266、DDR 400都是这个时期的产品。

DDR2 SDRAM(Double Data Rate Two SDRAM):为双通道两次同步动态随机存取内存。DDR2内存Prefetch又再度提升至4 bit(DDR的两倍),DDR2的I/O频率是DDR的2倍,也就是266、333、400MHz。举例:核心频率同样有133~200MHz的颗粒,I/O频率提升的影响下,此时的DDR2传输速率约为533~800 MT/s不等,也就是常见的DDR2 533、DDR2 800等内存规格。

DDR3 SDRAM(Double Data Rate Three SDRAM):为双通道三次同步动态随机存取内存。DDR3内存Prefetch提升至8 bit,即每次会存取8 bits为一组的数据。DDR3传输速率介于 800~1600 MT/s之间。此外,DDR3 的规格要求将电压控制在1.5V,较DDR2的1.8V更为省电。DDR3也新增ASR(Automatic Self-Refresh)、SRT(Self-Refresh Temperature)等两种功能,让内存在休眠时也能够随着温度变化去控制对内存颗粒的充电频率,以确保系统数据的完整性。

DDR4 SDRAM(Double Data Rate Fourth SDRAM):DDR4提供比DDR3/DDR2更低的供电电压1.2V以及更高的带宽,DDR4的传输速率目前可达2133~3200 MT/s。DDR4 新增了4个Bank Group 数据组的设计,各个Bank Group具备独立启动操作读、写等动作特性,Bank Group 数据组可套用多任务的观念来想象,亦可解释为DDR4 在同一频率工作周期内,至多可以处理4 笔数据,效率明显好过于DDR3。 另外DDR4增加了DBI(Data Bus Inversion)、CRC(Cyclic Redundancy Check)、CA parity等功能,让DDR4内存在更快速与更省电的同时亦能够增强信号的完整性、改善数据传输及储存的可靠性。

DDR4关键技术和方法分析

1.1

DDR4与DDR3 不同之处

相对于DDR3, DDR4首先在外表上就有一些变化,比如DDR4将内存下部设计为中间稍微突出,边缘变矮的形状,在中央的高点和两端的低点以平滑曲线过渡,这样的设计可以保证金手指和内存插槽有足够的接触面从而确保内存稳定,另外,DDR4内存的金手指设计也有明显变化,金手指中间的防呆缺口也比DDR3更加靠近中央。当然,DDR4最重要的使命还是提高频率和带宽,总体来说,DDR4具有更高的性能,更好的稳定性和更低的功耗,那么从SI的角度出发,主要有下面几点, 下面章节对主要的几个不同点进行说明。

表1 DDR3和DDR4差异

DDR4与DDR3内存差异二:外型

卡槽差异

DDR4 模组上的卡槽与 DDR3 模组卡槽的位置不同。两者的卡槽都位于插入侧,但 DDR4 卡槽的位置稍有差异,以便防止将模组安装到不兼容的主板或平台中。

请注意 DDR3 与 DDR4 模组之间的细微差别

增加厚度

为了容纳更多信号层,DDR4 模组比 DDR3 稍厚。

DDR4金手指变化较大

大家注意上图,宇瞻DDR4内存金手指变的弯曲了,并没有沿着直线设计,这究竟是为什么呢?一直一来,平直的内存金手指插入内存插槽后,受到的摩擦力较大,因此内存存在难以拔出和难以插入的情况,为了解决这个问题,DDR4将内存下部设计为中间稍突出、边缘收矮的形状。在中央的高点和两端的低点以平滑曲线过渡。这样的设计既可以保证DDR4内存的金手指和内存插槽触点有足够的接触面,信号传输确保信号稳定的同时,让中间凸起的部分和内存插槽产生足够的摩擦力稳定内存。

接口位置同时也发生了改变,金手指中间的“缺口”位置相比DDR3更为靠近中央。在金手指触点数量方面,普通DDR4内存有284个,而DDR3则是240个,每一个触点的间距从1mm缩减到0.85mm。

曲线边

DDR4 模组提供曲线边以方便插入和缓解内存安装期间对 PCB 的压力。

仔细看,是一个曲面

1.2

POD 和SSTL的比较

POD作为DDR4新的驱动标准,最大的区别在于接收端的终端电压等于VDDQ,而DDR3所采用的SSTL接收端的终端电压为VDDQ/2。这样做可以降低寄生引脚电容和I/O终端功耗,并且即使在VDD电压降低的情况下也能稳定工作。其等效电路如图1(DDR4), 图2(DDR3)。

图1 POD ((Pseudo Open Drain)

图2 SSTL(Stub Series Terminated Logic)

可以看出,当DRAM在低电平的状态时,SSTL和POD都有电流流动

图3 DDR4

图4 DDR3

而当DRAM为高电平的状态时,SSTL继续有电流流动,而POD由于两端电压相等,所以没有电流流动。这也是DDR4更省电的原因

图5 DDR4

图6 DDR3

1.3 数据总线倒置 (DBI)

如上面描述,根据POD的特性,当数据为高电平时,没有电流流动,所以降低DDR4功耗的一个方法就是让高电平尽可能多,这就是DBI技术的核心。举例来说,如果在一组8-bit的信号中,有至少5-bit是低电平的话,那么对所有的信号进行反转,就有至少5-bit信号是高电平了。DBI信号变为低表示所有信号已经翻转过(DBI信号为高表示原数据没有翻转)。这种情况下,一组9根信号(8个DQ信号和1个DBI信号)中,至少有五个状态为高,从而有效降低功耗。

图7 DBI Example

1.4ODT控制

为了提升信号质量, 从DDR2开始将DQ, DM, DQS/DQS#的Termination电阻内置到Controller和DRAM中, 称之为ODT (On Die Termination)。Clock和ADD/CMD/CTRL信号仍需要使用外接的Termination电阻。

图8 On Die Termination

在DRAM中,On-Die Termination的等效电阻值通过Mode Register (MR)来设置,ODT的精度通过参考电阻RZQ来控制,DDR4的ODT支持240, 120, 80, 60, 48, 40, 34 欧姆。

和DDR3不同的是,DDR4的ODT有四种模式:Data termination disable, RTT_NOM,RTT_WR, 和 RTT_PARK。Controller可以通过读写命令以及ODT Pin来控制RTT状态,RTT_PARK是DDR4新加入的选项,它一般用在多Rank的DDR配置中,比如一个系统中有Rank0, Rank1以及Rank2, 当控制器向Rank0写数据时,Rank1和Rank2在同一时间内可以为高阻抗(Hi-Z)或比较弱的终端(240,120,80,etc.), RTT_Park就提供了一种更加灵活的终端方式,让Rank1和Rank2不用一直是高阻模式,从而可以让DRAM工作在更高的频率上。

一般来说,在Controller中可以通过BIOS调整寄存器来调节ODT的值,但是部分Controller厂商并不推荐这样做,以Intel为例,Intel给出的MRC Code中已经给出了最优化的ODT的值,理论上用户可以通过仿真等方法来得到其他ODT值并在BIOS中修改,但是由此带来的所有问题将有设计厂商来承担。下面表格是Intel提供的优化方案。

表2 DQ Write ODT Table for 3DPC

表3 DQ Read ODT Table for 3DPC

1.5 参考电压Vref

众所周知,DDR信号一般通过比较输入信号和另外一个参考信号(Vref)来决定信号为高或者低,然而在DDR4中,一个Vref却不见了,先来看看下面两种设计,可以看出来,在DDR4的设计中,VREFCA和DDR3相同,使用外置的分压电阻或者电源控制芯片来产生,然而VREFDQ在设计中却没有了,改为由芯片内部产生,这样既节省了设计费用,也增加了Routing空间。

图9 DDR3设计

图10 DDR4设计

DRAM内部VREFDQ通过寄存器(MR6)来调节,主要参数有Voltage range, step size, VREF step time, VREF full step time ,如下表所示。

表4 参考电压

每次开机的时候,DRAM Controller都会通过一系列的校准来调整DRMA端输入数据信号的VREFDQ,优化Timing和电压的Margin,也就是说,VREFDQ 不仅仅取决于VDD, 而且和传输线特性,接收端芯片特性都会有关系,所以每次Power Up的时候,VREFDQ的值都可能会有差异。

因为Vref的不同,Vih/Vil都会有差异,可以通过调整ODT来看Vref的区别,用一个仿真的例子来说明。对于DDR3,调整ODT波形会上下同步浮动,而调整DDR4 OOT的时候,波形只有一边移动。

图11 仿真拓扑

图12 DDR3仿真结果

图13 DDR4仿真结果

1.6 DDR4 Layout Routing新方法

在所有的Layout走线中,DDR无需质疑是最复杂的,不仅要考虑阻抗匹配,还要考虑长度匹配,而且数量众多的数据、地址线,不得不考虑串扰的影响。

DDR信号可分为时钟、数据、地址/命令、控制等四个信号组。各信号组介绍如下:

1.时钟组:

由于采用更高的时钟频率及双沿采样数据的方式,DDR采用差分时钟。差分时钟的走线要求如下:以地平面为参考,给整个时钟回路的走线提供一个完整的地平面,给回路电流提供一个低阻抗的路径。所有的DDR差分时钟信号都必须在关键平面上走线,尽量避免层到层的转换。线宽和差分间距需要参考DDR控制器的实施细则,信号线的单线阻抗应控制在50~60 Ω,差分阻抗控制在100~120 Ω。时钟信号到其他信号应保持在20mil*以上,防止对其他信号的干扰。蛇形走线的间距不应小于20mil。

2.数据组:

数据组包括DQ、DQS、DM。以低8位数据为例,该数据组包括:DQ[7..0]、DQS[0]、DM[0]数据组布线要求如下:以地平面为参考,给信号回路提供完整的地平面。特征阻抗控制在50~60 Ω。与其他非DDR信号间距至少隔离20 mil。

3.地址、命令组:

地址组包括ADD、BANK、RAS、CAS、WE。该组布线要求如下:保持完整的地和电源平面。特征阻抗控制在50~60 Ω。信号线宽参考具体设计实施细则。信号组与其他非DDR信号间距至少保持在20 mil以上。

4.控制组:

控制组包括CS、CKE。该组布线要求如下:需要有一个完整的地平面和电源平面作参考。为了防止串扰,本组内信号同样也不能和数据信号在同一个电阻排内。

二、DDR信号等长约束

由于DDR工作频率高,对信号等长有更严格的要求,实际的PCB设计中对所有信号都进行等长控制是不太现实的,也没有这个必要,根据DDR的实际工作方式,仅需要实现如下的等长约束,表1为一个PCB设计说明实例:

表1 DDR等长约束实例

电平标准

时钟频率

信号名称

备注

SSTL_CLASSI

150M

CLK_FPGA1_DDR_P

CLK_FPGA1_DDR_N

DDRII时钟。每对时钟差分信号等长要求:正负信号之间允许偏差10mil

SSTL_CLASSI

150M

FPGA1_DDR_DQ[31:0]

FPGA1_DDR_DQS[3:0]

FPGA1_DDR_DM[3:0]

数据组内等长要求公差+/-25mil。

各数据组以时钟线为准,公差+/-500mil。

SSTL_CLASSI

150M

FPGA1_DDR_A[12:0]

FPGA1_DDR_RAS*

FPGA1_DDR_CAS*

FPGA1_DDR_WE*

FPGA1_DDR_BANK[3:0]

地址命令线等长要求:

对于每片FPGA与DDR。

地址命令组与时钟信号等长公差+/-150mil。

根据表1所示,DDR的等长约束只需要四个参数。具体约束界面如图1、2所示。

其中差分时钟之间(CLK_P与CLK_N)等长不大于5mil。地址、控制组中每个信号都以时钟(本规则中为CLK_N)为基准,等长差范围设置为±150mil。

数据组内以DQ[0]为基准,等长控制在25mil以内。各数据组之间,以时钟线为基准,等长差范围设置为0-500mil。

DDR4数据速率提高以后,这些方面的影响变得更为严重,尤其是现在很多设计为了节省成本,PCB尺寸和层数都要求尽可能的变小,这样对阻抗和串扰的要求就变的更有挑战性,一般SI工程师和Layout工程师都会想各种办法来满足这些需求,很多时候也不得不妥协折衷,比如在做叠层设计的时候尽量让线宽变小,在BGA Breakout区域采用更细的线,等等。但这些方法只能对设计做微小的调整,其实很难从根本上解决问题。最近Intel研究发现的一种新方法很有意思,可以在一定程度上很好的平衡阻抗(线宽)和串扰(线间距)。在此整理出来供大家参考。

先来看一个实际的Layout例子,两根红线之间的走线采用锯齿形状。没错,这就是Intel新研究出来的新方法,官方名称为“Tabbed Routing”。

图14 DDR4 Tabbed Routing

Tabbed Routing主要的方法是在空间比较紧张的区域(一般为BGA区域和DIMM插槽区域),减小线宽,而增加凸起的小块(Tab),如下图所示。

图15 Tab routing方法

这种方法可以增加两根线之间的互容特性而保持其电感特性几乎不变,而增加的电容可以有效控制每一层的的阻抗,减小外层的远端串扰。仿真结果如下图所示。

图16 HFSS仿真结果

由仿真结果可以看出来,该方法对阻抗和远端串扰确实可以很好的平衡,当然,对于Tab的尺寸,需要根据实际PCB做详细的仿真设计,Intel也提供了一些Tool可以参考。有兴趣的读者,可以参阅更多资料

2DDR4 Simulation

2.1 Pre-Simulation with HyperLynx

如果Controller和DRAM都有IBIS模型,可以用HyperLynx对DDR4进行很方便的Simulation, 仿真方法和其他DDR相同,通过Pre-Simulation, 可以对整个系统的拓扑以及一些细节进行确定,比如Impedance(由Stackup以及线宽和线间距来确定),ODT值的选择,T型结构中Stub长度的控制,ADD/CMD/CTRL终端电阻的取值大小等等。

2.1.1 ADD/CMD/CTRL终端电阻取值

假设ADD电路如下,工作在2400MTs(Add/CMD为1.2Gbps),发送端为U16,采用Fly-By结构到五组DRAM芯片,每组DRAM采用T结构(实际Layout中,Top面一个DRAM芯片,Bottom面一个DRAM芯片),T型长度的Stub为77mil, 终端电阻为32欧姆,终端电压为0.6V。

图17 ADD仿真拓扑

由仿真结果可以看出来,T型结构两端因为完全对称,所以波形几乎一样,为了方便观察,只看其中一个波形,离Controller由近及远,DRAM分别为U5, U4, U3, U2, U1, 其眼图分别如下:

可以看出来,距离Controller越近的芯片,其波形越“乱”,但是上升沿却很快,而距离终端电阻越近的芯片,其波形越好,但是上升沿却变慢。那么如何才能得到最优化的波形呢,下面通过扫描终端电阻的值看看是否会提高信号质量,通过HyperLynx的Sweep功能,设置终端电阻阻值为27,33,39,45四个阻值。

图18 Sweep设置 图19 Sweep设置

U5(距离Controller最近)的眼图如下,依次对应终端电阻阻值为27,33,39,45欧姆:

U4的眼图如下,依次对应终端电阻阻值为27,33,39,45欧姆:

U3的眼图如下,依次对应终端电阻阻值为27,33,39,45欧姆:

U2的眼图如下,依次对应终端电阻阻值为27,33,39,45欧姆

U1的眼图如下,依次对应终端电阻阻值为27,33,39,45欧姆

从上面的波形可以看出来,对应每一个DRAM的第三张波形都是最好的,也就是说对应39欧姆的终端电阻可以得到最优化的波形。

2.1.2 Data信号Stub的长度

一般DDR4的设计中,Data信号都采用Pin to Pin的设计方式,但在某些设计中,由于PCB空间限制或者控制器限制,也有需要采用一拖二的设计(T型结构),在笔者所遇到的一个设计中,就遇到这种情况,综合考虑下面两种方案,如果采用T型拓扑结构,如图20所示,可以最大可能的节约PCB空间,但是如果DIMM0或者DIMM1只插一根的时候,另一边会有较长的Stub出现,对信号质量会有影响。如果采用菊花链结构,如图21所示,在只插DIMM0的情况下,同样会有Stub影响。而且这种拓扑结构需要DIMM0和DIMM1之间的信号线之间满足长度匹配,在DIMM0和DIMM1比较靠近的情况下,绕线会有一定难度。而如果增加DIMM0和DIMM1的距离,其Stub会变得更长,信号质量没有办法得到控制。从信号完整性方面考虑,两种方案均会存在Stub的影响,但是从Layout的角度来看,方案一有一定便利性,而且其Stub可以控制在500mil以内。所以最终选择方案一作为最终方案。当然,这种设计是以牺牲信号Margin作为代价的,信号速率会收到一定影响,在笔者的项目中,在只插一根内存的时候,信号速率最大只能跑到1866Mb/s.

图20 DDR4 T型结构

图21 DDR4菊花链结构

从仿真的角度出发,这种仿真需要考虑的因素很多,控制器模型,PCB模型,Connector模型,以及最后的内存条模型,而通常情况下,Connector模型和内存条模型很难拿到,而且有时候就算拿到,也是不同类型的模型,整体Channel仿真需要更多时间和精力来完成。

如果时间有限,需要对设计做快速评估,用HyperLynx做快速仿真也是可以参考的,在下面的例子中,假设一个Conntorller需要驱动两根DIMM或者两颗内存颗粒,系统工作在2400Mb/s, TL2和TL3的长度可以用来大概评估PCB Stub长度加上Connector长度加上内存条长度。(此处只是用来做大概评估,如果时间条件运行,强烈建议拿到各个部分精确模型做比较准确的仿真)。

从这个简单的仿真可以看出来,Stub对于信号质量的影响还是很明显的,特别对于一根内存槽悬空的状态下,上面的例子中,Stub达到1000 mil的时候,在只插一根内存的情况下,眼图已经非常糟糕,所以在实际设计中,需要在设计成本和信号速率之间进行均衡,取舍。在笔者所做的设计中,因为PCB空间限制,最终选择在单根内存的时候只跑到1866Mb/s。

图22 数据线仿真拓扑

在Stub长度为500mil的时候,两根内存都插和只插一根的眼图如下:

在Stub长度为1000mil的时候,两根内存都插和只插一根的眼图如下:

在用Intel的芯片作为DDR Controller做设计的时候,Intel所提供的SI Model可以提供一个比较完整的仿真,Intel所提供的Simulation Deck中,包含了DDR连接器,DIMM模型,如果能找到和实际项目匹配的模型,可以替换Deck中的模型,如果找不到模型,直接用Deck中所提供的模型也是非常有参考意义的。

2.2 Intel SISTAI仿真

Intel所提供的Memory Bit Error Rate Executable (MBERE) tool集成在其Intel SISTAI(Signal Integrity Support Tools for Advanced Interfaces)网站系统上面,SISTAI可以进行PCIE,SATA, USB,QPI等等高速信号的仿真,DDR4仿真模块为MBER, 其基本思想是先基于Hspice产生一个Step Response, 然后把仿真结果.TR0文件放进SISTAI系统进行计算,产生Worse Case的眼图,大致仿真流程如下:

2.2.1 DDR通道建模

Intel的仿真基于10根线模型,八根DQ线加上两根DQS线,可以用Intel提供的Causal-W Element Tool来产生W Element models, 也可以用ADS,Hspice等工具对传输线建模,对于Post-Layout来说,可以使用PowerSI, Siwave等软件提取DDR通道的S参数。注意这里的DQ和DQS的顺序必须和Intel提供的顺序相同,如图23所示。

图23 DDR数据线建模

2.2.2 Hspice仿真

Intel仿真模型还是比较详细,提供了各种模型以及各种不同情况下的Simulation Deck, 在实际仿真的时候,需要用实际设计的模型替换Deck中的参数,以S参数为例,假设提取了整个DDR通道的S参数,那么需要在pcakage的参数之后加入PCB通道模型,如下图第二个红框所示,之前的一些参数,可以删除或者加上*号来Block掉。

图24 Intel仿真模型

图25 Hspice编辑实例

Hspice仿真得到Step Response, 结果如下:

图26 Hspice仿真结果

2.2.3 SISTAI仿真

得到Tr0文件后,需要把Tro放到SISTAI系统中进行计算,操作流程如下:

图27 SISTAI仿真方法

点击Success可以得到仿真结果,比较遗憾的是,SISTAI只能看到眼宽,眼高等仿真数据,并不提供眼图的显示。

图28 SISTAI仿真结果

Intel的文件中也提供了Spec可以对仿真结果进行对比判断

表5 DQ Write Eye Target Minimums

表6 DQ Read Eye Target Minimums

3DDR4 RMT Margin测试Fail问题实例

3.1

设计情况

该设计采用Intel Haswell-EP CPU作为DDR4 Controller, 采用3DPC(DIMM Per Channel)的设计,如下图29所示。DDR4运行速率为1600Mb/s。

图29 DDR4设计拓扑

3.2 问题描述

主板做好后,需要对DDR4信号进行测试验证,但是对于内存条类的DDR4,测试点非常难找,测试结果也很不准确,所有选择只测试Memory Margin。在用Intel提供的Margin测试工具RMT进行测试的时候,测试了各种不同厂商的内存条,分别有Hynix 8G, Hynix 16G, Samsung 8G, Samsung 16G, Samsung 32G, Micron 8G, Micron 16G, 其中只有Micron 8G 结果显示RxVLow, RxVhigh的值小于14(Spec为大于等于14),其他内存条测试结果均满足Spec要求。

表6 RMT测试结果

3.3 Memory Margin Test

上面说了RMT测试Fail,但是RMT测试是什么呢?下面对Memory的一般测试做大概介绍。众所周知,实际PCB做好后,我们需要对其进行测试以验证信号完整性。 通常是采用示波器测试对DDR信号线在读写时的信号质量,但是这种测试存在很大的局限性,比如DDR信号到达每一个Component端的测点无法被点测到,测试点往往距离芯片pad还有一段距离,需要一些额外的测试设备,这样势必会影响准确性,另外,DDR信号读写分离一直都比较难处理,即使使用仪器厂商提供的专业测试软件,也往往看不到非常准确的波形,还有测试点只位于芯片外部, Memory Controller内部对信号Timing的调整无法被测到,所以在采用示波器测试波形之外, 还非常有必要进行Memory Margin测试。

图30 DDR4测试设备

图31 DDR4测试眼图

简单的Memory Margin的测试方法是, 在Controller和DRAM都使用外部VREF供电的条件下, 调节VREF的电压幅度, 同时运行Memory Stress Test软件(如: Golden Memory, MSTRESS 等等), 直到出现测试Fail的VREF值同默认VREF值间的差值, 记为VREF Margin。调节VREF并不会影响信号传输的波形, 因为VREF只是芯片接收端(Controller或DRAM)判断输入为0或1的判断依据。然而在DDR4时代,Vrefdq已经集成到芯片内部,我们无法对其进行调节。

这个时候一些专门的测试软件就比较方便,比如Intel就提供了RMT和EVTS做为DDR Margin测试。

图32 Margin测试原理

RMT(DDR Rank Margin Tool),其原理是修改设置, 让BIOS在开机时自动运行Training程序, 同时通过Debug Port输出Training的结果, 然后分析输出的打印信息, 从而得到Memory Margin。所得到的结果不仅仅包含VREF Margin, 还包含Write/Read Timing Margin, ADD/CMD Timing Margin…而EVTS是对RMT的一个补充,可以进行per-bit margin测试,如果Margin不佳,左右或上下不对称的时候,可以用EVTS 2D Margin来了解成因是否为眼图形状所致。

3.4 问题分析

3.4.1 Micron 8G 本体分析

因为其他内存条RMT测试都是PASS的,唯有Micron 8G的测试是Fail,第一点想到的就是DIMM本身问题,联系Micron FAE后,Micron怀疑是测试的内存条生产日期太老,版本变更会影响测试结果,然而拿到最新的样品后,测试结果仍然没有任何改善。

同时,用这些样品在Intel CRB(Custom reference board)上进行测试,却是可以PASS的。

由此可以判断,Micron 8G本身并不是Margin Fail的唯一因素,只能试图增加主板PCB Margin来改善RMT结果

3.4.2 通过Simulation来分析问题

从问题的描述来看,主板+大部分内存条测试PASS, 有问题的内存条+其他主板测试PASS, 看起来是遇到了最让人头疼的Worst Case+Worse Case的情况,这种情况下,单纯的从设计本身来看,各项设计指标都可以满足相关文档或者Design Guide,只能从细节入手,从一些细微的调整和优化来提高彼此的Margin, 就这个Case来说,Micron 8G的Module已经量产,在没有足够的证据之前,没有办法要求厂商来做任何修改,而主板正在设计阶段,看来只能想办法来优化提高主板Layout从而提高Margin了。

然而对于DDR来说,如上面所描述,各项设计指标都满足相关设计规则,仅仅通过经验猜测,改版,测试的方式来做,无疑毫无效率性和针对性而言,而通过仿真的方法,来做各种各样不同Case的仿真,找到对于提高Margin比较明显的改善点,然后修改Layout,就比较有针对性,也避免了多次改版所带来时间和费用上的浪费。

回到设计本身,如本文3.1节所描述,本设计采用一个通道三根内存的设计(一个Controller加三个DIMM),如图33所示,仔细分析测试结果,Marign最差的均为DIMM2(距离CPU最近的一个),做一个简单的理论分析,不管从CPU写数据到DIMM2或者从DIMM2读数据到CPU,无论DIMM1和DIMM0处于何种状态,L2和L3始终存在,对于DIMM2来说,相当于有一段Stub存在,而Stub会引起信号反射,从而导致Margin减小,哇,找到Root cause了哎,原来问题这么简单,快快改版做下一批PCB吧,可是,万一下一批还是不行怎么办?冷静一下,还是先做仿真验证一下吧。

图33 PCB Layout

冷静一下,再仔细分析,对比主板和Intel CRB的PCB设计,果然在这边存在差异,CRB板子L2和L3长度大概为398 mil, 而我们的主板L2和L3长度大概为462 mil, 确实有差异,既然这边的长度有差异,从前面我们的分析来看,仿真结果也肯定会有差异,我们来仿真看看,如前面所说,Intel SISTAI只能提供仿真数据,而无法显示波形,仿真结果整理如下图。

表7 Write仿真结果

表8 Read 仿真结果

从仿真结果可以看出来两点,第一,仿真数据最差的也是DIMM2,和实际测试结果吻合;第二,我们的主板仿真结果比Intel CRB的结果要差,和我们之前分析和猜测吻合。那么,缩小L2,L3的长度以后,仿真结果是不是会改善呢?由于PCB和Connector本身差异,我们的主板L2和L3最短只能缩小到410 mil左右,那么,PCB改善后的结果如何呢?仿真数据如下表。可以看出来,无论Write和Read, D2的结果都有了改善,可是为什么还是和Intel CRB差异很大呢?

表9 仿真结果对比

再来对比Layout,Trace走线已经找不出差异,之前没有关注过的叠层(Stackup)成为最大的差异点,CRB为8层板,而我们的主板为18层板,而且我们的主板DDR走线靠近TOP层,这么大的叠层差异直接导致了PTH Via孔所造成的Stub长度不同,同样,DIMM插槽的针脚长度差异也会造成Stub影响,CRB采用的DIMM插槽针脚长度为2.4 mm, 我们主板DIMM插槽针脚长度为3.2 mm, 没有找到相对应的DIMM插槽模型,只能采用删减或增加PCB叠层厚度来简单模拟DIMM插槽针脚长度,减小主板DIMM插槽针脚长度(采用Stackup变更来简单模拟) 到2.4 mm,仿真结果如下,已经非常接近CRB的结果了。这个仿真虽然不是非常准确,但是也是可以看出来Stub对信号质量的影响。

表10 最终仿真结果对比

按照分析结果,缩短L2,L3的长度,改为阵脚比较短的DIMM插槽(因为设计已经基本定型,只能进行小的改动,没有办法把DDR走线移动到靠近Bottom层的Layer),重新改版后,之前测试Fail的Margin提高了2~3 Step, 终于可以PASS了。

至此,对于此Case的分析和仿真基本结束,DIMM to DIMM之间的长度以及DIMM插槽针脚长度(以及PTH VIA Stub)所造成的Stub对于提高信号Margin有一定的贡献,所以在针对3DPC(DIMM per Channel)的设计,在设计初期,就应该尽可能减小DIMM TO DIMM的长度,对于板厚比较大的Case,尽可能把DDR走线靠近Bottom面,以减小Stub对信号质量的影响。

4小结

DDR的设计,仿真,测试,一直以来都是大部分设计者比较关心的地方,也是让大部分工程师比较头疼的问题,首先从理论理解来说,DDR包含了很多技术难点,比如接口电路,比如Timing, Driver Strength, ODT等等概念都需要理解。其次从Layout角度来看,DDR不像串行总线一样,只有几对差分线,问题很容易定位,而DDR一旦出现问题,如果定位问题,成为众多设计者感到棘手的问题,需要做大量的测试和实验。最后,从仿真角度来说,DDR的仿真也比串行总线的仿真复杂很多,需要考虑PCB,连接器,内存条,还要考虑各种参数的设置等等。

本文针对DDR设计中普遍存在的一些困惑,先是对DDR4的新技术和关键技术做了大概描述,然后介绍了DDR4目前的仿真方法,以及Intel对于DDR4的仿真Solution。最后通过一个Memory Margin的实际案例,介绍分析和解决问题的思路。

标签: 超级电容器能贮存电荷吗高性能8dq晶体管ddr4驱动电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台