基于FPGA DDR3设计之总结简介

2 篇文章 0 订阅
1 篇文章 0 订阅

基于FPGA DDR3设计之总结简介

平台:vivado 2017.4

FPGA芯片:XC7K325T-FFG900

DDR3芯片:SCB13H4G160AF

1、DDR3的特点

        概念:有一种动态随机存储器SDRAM(Synchronous DRAM)即同步动态随机存取存储器。同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写,DDR,DDR2以及DDR3就属于SDRAM的一类。SDRAM从发展到现在已经经历了五代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,第五代,DDR4 SDRAM。

  1. 突发长度(Burst Length,BL):由于DDR3的预取为8bit,所以突发传输周期(Burst Length,BL)也固定为8,而对于DDR2和早期的DDR架构系统,BL=4也是常用的,DDR3为此增加了一个4bit Burst Chop(突发突变)模式,即由一个BL=4的读取操作加上一个BL=4的写入操作来合成一个BL=8的数据突发传输,届时可通过A12地址线来控制这一突发模式。而且需要指出的是,任何突发中断操作都将在DDR3内存中予以禁止,且不予支持,取而代之的是更灵活的突发传输控制(如4bit顺序突发)。
  2. 寻址时序(Timing):就像DDR2从DDR转变而来后延迟周期数增加一样,DDR3的CL周期也将比DDR2有所提高。DDR2的CL范围一般在2~5之间,而DDR3则在5~11之间,且附加延迟(AL)的设计也有所变化。DDR2时AL的范围是0~4,而DDR3时AL有三种选项,分别是0、CL-1和CL-2。另外,DDR3还新增加了一个时序参数-写入延迟(CWD),这一参数将根据具体的工作频率而定。
  3. DDR3新增的重置(Reset)功能:在Reset期间,DDR3内存将关闭内在的大部分功能,所有数据接收与发送器都将关闭,所有内部的程序装置将复位,DLL(延迟锁相环路)与时钟电路将停止工作,而且不理睬数据总线上的任何动静。
  4. DDR3新增ZQ校准功能:ZQ也是一个新增的脚,在这个引脚上接有一个240欧姆的低公差参考电阻。这个引脚通过一个命令集,通过片上校准引擎(On-Die Calibration Engine,ODCE)来自动校验数据输出驱动器导通电阻与ODT的终结电阻值。当系统发出这一指令后,将用相应的时钟周期(在加电与初始化之后用512个时钟周期,在退出自刷新操作后用256个时钟周期、在其他情况下用64个时钟周期)对导通电阻和ODT电阻进行重新校准。
  5. 参考电压分成两个:在DDR3系统中,对于内存系统工作非常重要的参考电压信号VREF将分为两个信号,即为命令与地址信号服务的VREFCA和为数据总线服务的VREFDQ,这将有效地提高系统数据总线的信噪等级
  6. 点对点连接(Point-to-Point,P2P):为了提高系统性能而进行的改动,在DDR3系统中,一个内存控制器只与一个内存通道打交道,而且这个内存通道只能有一个插槽,因此,内存控制器与DDR3内存模组之间是点对点(P2P)的关系(单物理Bank的模组),或者是点对双点(Point-to-two-Point,P22P)的关系(双物理Bank的模组),从而大大地减轻了地址/命令/控制与数据总线的负载。
  7. 逻辑Bank数量:DDR3很可能将从2Gb容量起步,因此起始的逻辑Bank就是8个,另外还为未来的16个逻辑Bank做好了准备。
  8. 封装(Packages):8bit芯片采用78球FBGA封装,16bit芯片采用96球FBGA封装,而DDR2则有60/68/84球FBGA封装三种规格。并且DDR3必须是绿色封装,不能含有任何有害物质。
  9. 降低功耗DDR3内存在达到高带宽的同时,其功耗反而可以降低,其核心工作电压从DDR2的1.8V降至1.5V

2、DDR3传输速率

        Double Data Rate技术使数据外传速度提升了一倍,而芯片内部数据数据传输速度的提升则是通过Prefetch(预读取)技术实现的。所谓Prefetch简单的说就是在一个内核时钟周期同时寻址多个存储单元并将这些数据以并行的方式统一传输到IO Buffer中,之后以更高的外传速度将IO Buffer中的数据传输出去。在16位的内存芯片中一次将2个16bit数据从内核传输到外部MUX单元,之后分别在Clock信号的上、下沿分两次将这2 x 16bit数据传输给北桥或其他内存控制器,整个过程经历的时间恰好为一个内核时钟周期。

        DDR3每次Prefetch 8倍的数据,其芯片Clock频率为内核频率的4倍,即JEDEC标准(JESD79-3)规定的400MHz至800MHz,再加上在Clock信号上、下跳变沿同时传输数据,DDR3的数据传输速率便达到了800MT/s到1600MT/s。

名称

核心频率

核心时钟周期

Clock管脚时钟频率

数据传输速率

对应内存条名称

内存条峰值比特率

DDR3-800

100MHz

10ns

400MHz

800MT/s

PC3-6400

6400MB/s

DDR3-1066

133MHz

7.5ns

533MHz

1066MT/s

PC3-8500

8533MB/s

DDR3-1333

166MHz

6ns

667MHz

1333MT/s

PC3-10600

10667MB/s

DDR3-1600

200MHz

5ns

800MHz

1600MT/s

PC3-12800

12800MB/s

3、DDR3的工作原理

        DDR3的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格,如下图所示。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)就是逻辑 Bank(Logical Bank,下面简称Bank,与之对应的还有一种叫做物理BANK)。

        DDR3内部的BANK可以看做是一个NxN的一个阵列,B代表Bank编号,C代表列地址编号,R代表行地址编号。如果寻址命令是B1、R2、C6,就能确定地址是图中红格的位置。目前DDR3内存芯片基本上都是8个Bank设计,也就是说一共有8个这样的“表格”。寻址的流程也就是先指定Bank地址,再指定行地址,然后指定列地址最终确定寻址单元。

        对DDR3系统而言,还存在物理Bank的概念,这是对内存子系统的一个相关术语,并不针对内存芯片。内存为了保证CPU正常工作,必须一次传输完CPU 在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,这个位宽就称为物理Bank(Physical Bank,有的资料称之为Rank)的位宽。目前这个位宽基本为64bit。

        在实际工作中,逻辑Bank地址与相应的行地址是同时发出的,此时这个命令称之为“行激活”(Row Active)。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址。根据相关的标准,从行有效到读/写命令发出之间的间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲),我们可以理解为行选通周期。tRCD是DDR的一个重要时序参数,广义的tRCD以核心时钟周期(tCK,Clock Time)数为单位,比如tRCD=3,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定。以DDR3-800为例,通过上一节的学习可知,DDR3-800的数据传输频率(等效频率)为800MHz,由于DDR3的预取(Prefetch)位宽为8位,所以核心频率为100MHz(800MHz/8),核心时钟的周期为10ns,如果tRCD=3,则表示延时为30ns。

 

        上图是tRCD=3的时序图,NOP=Not Operation,表示无操作,灰色区域表示Don’t Care。

        接下来,相关的列地址被选中以后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的I/O接口之间还需要一定的时间(数据触发本身就有延时,而且还需要进行,以时钟周期数表示。比如DDR3-800的有效频率(传输数据频率)为800MHz,由于DDR3的预取数位宽为8,所以核心频率为100MHz800MHz/8,核心周期为10ns,如果CL=2,那么就意味着列地址脉冲选通潜伏期为20ns。CL只针对读取操作有效

        由于芯片体积的原因,存储单元中的电容容量很小,所以信号要经过放大来保证其有效的识别性,这个放大/驱动工作由Sense Amplifier(读出放大器)负责,一个存储体对应一个Sense Amplifier通道。但它要有一个准备时间才能保证信号的发送强度(事前还要进行电压比较以进行逻辑电平的判断),因此从数据I/O上有数据到数据输出之前的一个时钟上升沿开始,数据即已传向Sense Amplifier,也就是说此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出,这段时间我们称之为tAC(Access Time from CLK,时钟触发后的访问时间)。

        Sense Amplifier在DDR结构中扮演的角色如下所示,主要是扮演的读出放大器的角色;

        tAC和CAS的示意图如下图所示

        目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个Cache Line(即CPU内Cache的存储单位)的容量为准,一般为64字节。而现有的Rank位宽为8字节(64bit),那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。

        在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一组数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。下图是CAS=2,BL=4时的时序图,

 

        突发连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输。

        谈到了突发长度时。如果BL=4,那么也就是说一次就传送4×64bit的数据。但是,如果其中的第二组数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。DQM由北桥控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM 信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于 16bit位宽芯片,则需要两个DQM引脚。

        在数据读取完之后,为了腾出读出放大器以供同一Bank内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行。还是以上面那个Bank示意图为例。当前寻址的存储单元是B1、R2、C6。如果接下来的寻址命令是B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务。但如果地址命令是B1、R4、C4,由于是同一Bank的不同行,那么就必须要先把R2关闭,才能对R4寻址。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(Row Precharge command Period,行预充电有效周期),单位也是时钟周期数。

整个充电的步骤如下图所示

         在不同Bank间读写也是这样,先把原来数据写回,再激活新的Bank/Row。

数据选取脉冲(DQS)

        DQS 是DDR中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由北桥发来的DQS信号,读取时,则由芯片生成DQS向北桥发送。完全可以说,它就是数据的同步信号。

        在读取时,DQS与数据信号同时生成(也是在CK与CK#的交叉点)。而DDR内存中的CL也就是从CAS发出到DQS生成的间隔,DQS生成时,芯片内部的预取已经完毕了,由于预取的原因,实际的数据传出可能会提前于DQS发生(数据提前于DQS传出)。由于是并行传输,DDR内存对tAC也有一定的要求,对于DDR266,tAC的允许范围是±0.75ns,对于DDR333,则是±0.7ns,有关它们的时序图示见前文,其中CL里包含了一段DQS 的导入期。

        DQS 在读取时与数据同步传输,那么接收时也是以DQS的上下沿为准吗?不,如果以DQS的上下沿区分数据周期的危险很大。由于芯片有预取的操作,所以输出时的同步很难控制,只能限制在一定的时间范围内,数据在各I/O端口的出现时间可能有快有慢,会与DQS有一定的间隔,这也就是为什么要有一个tAC规定的原因。而在接收方,一切必须保证同步接收,不能有tAC之类的偏差。这样在写入时,芯片不再自己生成DQS,而以发送方传来的DQS为基准,并相应延后一定的时间,在DQS的中部为数据周期的选取分割点(在读取时分割点就是上下沿),从这里分隔开两个传输周期。这样做的好处是,由于各数据信号都会有一个逻辑电平保持周期,即使发送时不同步,在DQS上下沿时都处于保持周期中,此时数据接收触发的准确性无疑是最高的。

DDR的写时序的时序图如下图所示

DDR的读时序的时序图如图所示

        由上面的时序图可知,在写时序中,有效数据DQ的正中间正好对应DQS的跳边沿,而在读时序中,有效数据的正中间对应着DQS信号的正中间。

4、ODT技术

        ODT(On-Die Termination),是从DDR2 SDRAM时代开始新增的功能。其允许用户通过读写DDR2/3内部的MR1寄存器,来控制DDR3 SDRAM中各个信号内部终端电阻的连接或者断开。在DDR3 SDRAM中,ODT功能主要应用于:

  1. DQ, DQS, DQS# and DM for X4 configuration
  2. DQ, DQS, DQS#, DM, TDQS and TDQS# for X8 configuration
  3. DQU, DQL, DQSU, DQSU#, DQSL, DQSL#, DMU and DML for X16 configuration

        ODT(On-Die Termination)技术的目的是通过使DDR SDRAM控制器能够独立的打开或者关断DDR内部的终端电阻来提高存储器通道的信号完整性,在DLL关闭模式,ODT功能被禁用

        一个DDR通道,通常会挂接多个Rank,这些Rank的数据线、地址线等等都是共用;数据信号也就依次传递到每个Rank,到达线路末端的时候,波形会有反射,从而影响到原始信号;因此需要加上终端电阻,吸收余波。之前的DDR,终端电阻做在板子上,但是因为种种原因,效果不是太好,到了DDR2,把终端电阻做到了DDR颗粒内部,也就称为On Die Termination,Die上的终端电阻,Die是硅片的意思,这里也就是DDR颗粒。

ODT技术具体的内部结构图如下:

等效结构如下图所示

        ODT终端电阻的电阻值RTT可通过模式寄存器MR1的A9,A6,A2来进行设置,设置的真值表为:

总的来说,ODT技术有以下三个优点:

  1. 去掉了主板上的终结电阻器等电器元件,这样会大大降低主板的制造成本,并且也使主板的设计更加简洁。
  2. 由于ODT技术可以迅速的开启和关闭空闲的内存芯片,在很大程度上减少了内存闲置时的功率消耗。
  3. 芯片内部终结电阻也要比主板的终端电阻具有更好的信号完整性。这也使得进一步提高DDR2内存的工作频率成为可能。

5、总结

        本文大致介绍了DDR3的一些基本信息,总结下来主要有以下几个关键信息是值得关注的。

  1. DDR核心频率,工作频率以及有效频率的关系
  2. DDR采用的预取(Prefetch)技术
  3. DDR的Burst Length(BL)的概念
  4. DDR对一行操作完毕以后如果下一次的操作在不同的行,那么需要有一个预充电(Precharge)的过程
  5. 数据掩码(DQM)技术的作用是用来屏蔽不想接收的数据
  6. 数据选通信号(DQS)与有效数据的关系
  7. ODT(On-Die Termination)技术可以提高DDR信号完整性
  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值