zoukankan      html  css  js  c++  java
  • 【接口时序】8、DDR3驱动原理与FPGA实现(一、DDR的基本原理)

    一、 软件平台与硬件平台

      软件平台:

        1、操作系统:Windows-8.1

        2、开发套件:无

        3、仿真工具:无

      硬件平台:

        1、 FPGA型号:无

        2、 DDR3型号:无

    二、 存储器的分类

      存储器一般来说可以分为内部存储器(内存),外部存储器(外存),缓冲存储器(缓存)以及闪存这几个大类。内存也称为主存储器,位于系统主机板上,可以同CPU直接进行信息交换。其主要特点是:运行速度快,容量小。外存也称为辅助存储器,不能与CPU之间直接进行信息交换。其主要特点是:存取速度相对内存要慢得多,存储容量大。内存与外存本质区别是,一个是内部运行提供缓存和处理的功能,也可以理解为协同处理的通道;而外存主要是针对储存文件、图片、视频、文字等信息的载体,也可以理解为储存空间。缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。闪存(Flash Memory)是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器,数据删除不是以单个的字节为单位而是以固定的区块为单位(注意:NOR Flash 为字节存储。),区块大小一般为256KB到20MB。闪存是电子可擦除只读存储器(EEPROM)的变种,闪存与EEPROM不同的是,EEPROM能在字节水平上进行删除和重写而不是整个芯片擦写,而闪存的大部分芯片需要块擦除。由于其断电时仍能保存数据,闪存通常被用来保存设置信息,如在电脑的BIOS(基本程序)、PDA(个人数字助理)、数码相机中保存资料等。存储器的详细分类如下图所示:

     

      其中内存有多种不同的形式分别如下:

      RAM(Random Access Memory) 随机存储器。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。静态随机存储器SRAM(Static RAM)不需要刷新电路即能保存它内部存储的数据。除此以外,还有一种随机存储器SSRAM(Synchronous SRAM)即同步静态随机存取存储器。同步是指Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。对于SSRAM的所有访问都在时钟的上升/下降沿启动。地址、数据输入和其它控制信号均于时钟信号相关。这一点与异步SRAM不同,异步SRAM的访问独立于时钟,数据输入和输出都由地址的变化控制。 动态随机存储器DRAM(Dynamic RAM)则每隔一段时间,要刷新充电一次,否则内部的数据即会消失。综上所述,SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,且功耗较大。所以在主板上SRAM存储器要占用一部分面积。SRAM的速率高、性能好,它常应用于CPU与主存之间的高速缓存以及CPU内部的L1/L2或外部的L2高速缓存。

      有一种动态随机存储器SDRAM(Synchronous DRAM)即同步动态随机存取存储器。同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写,DDR,DDR2以及DDR3就属于SDRAM的一类。SDRAM从发展到现在已经经历了五代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,第五代,DDR4 SDRAM。第一代SDRAM采用单端(Single-Ended)时钟信号,第二代、第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。SDR SDRAM的时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如PC100,PC133则表明时钟信号为100MHz或133MHz,数据读写速率也为100MHz或133MHz。之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在前面加上一个数字表示其DDR代数的符号,PC= DDR,PC2=DDR2,PC3=DDR3。如PC-2700是DDR-333,其工作频率是333/2=166MHz,2700表示带宽为2.7GB/s。DDR的读写频率从DDR-200到DDR-400,DDR2从DDR2-400到DDR2-800,DDR3从DDR3-800到DDR3-1600。DDR各种规格与传输标准如下表所示:

    DDR规格

    传输标准

    核心频率

    传输速率

    数据传输带宽

    DDR200

    PC1600

    100MHz

    200MT/s

    1600MB/s

    DDR266

    PC2100

    133MHz

    266MT/s

    2100MB/s

    DDR333

    PC2700

    166MHz

    333MT/s

    2700MB/s

    DDR400

    PC3200

    200MHz

    400MT/s

    3200MB/s

    DDR433

    PC3500

    216MHz

    433MT/s

    3500MB/s

    DDR533

    PC4300

    266MHz

    533MT/s

    4300MB/s

      传输速率的单位是MT/s(Mega Transfer Per Second),即每秒传输的百万次数,由于DDR一次传输64-bit,相当于8个字节(Byte),所以数据传输带宽为传输速率乘以8。上表中的核心频率指的是DDR芯片内部进行逻辑处理的时钟频率;传输速率的频率叫做传输频率或者等效频率,为了方便起见,后文同一称为等效频率,等效频率在数值上与传输速率相等,最后还有一个时钟频率是DDR芯片时钟引脚的频率,它称作DDR的工作频率。这三个频率的关系如下:

      工作频率=等效频率/2。因为DDR是利用时钟的上升沿与下降沿均传输数据,所以DDR芯片的工作频率(时钟引脚的频率)为等效频率(传输频率)的一半

      核心频率=等效频率/DDR的预取数。对于DDR来说,预取数为2;对于DDR2来说,预取数为4;对于DDR3来说,预取数为8。

      标准的DDR SDRAM分为DDR 200,DDR 266,DDR 333以及DDR 400,其标准工作频率分别100MHz,133MHz,166MHz和200MHz,对应的内存传输带宽分别为1.6GB/s,2.12GB/s,2.66GB/s和3.2GB/s,非标准的(某些厂家生产的超频内存)还有DDR 433,DDR 500等等。值得特别注意的是,初学者常被DDR 266,PC 2100等字眼搞混淆,在这里要说明一下,DDR 266与PC 2100其实就是一回事,只是表述方法不同罢了。DDR 266是指的该内存的传输速率(实际工作频率为133MHz,由于一个周期的上升沿与下降沿均可以用来传输数据,所以等效于266MHz 的SDRAM),而PC 2100则是指其内存传输带宽(2100MB/s)。同理,PC 1600就是DDR 200,PC 2700就是DDR-333,PC 3200就是DDR 400。

      DDR2以及DDR3可以看作是DDR技术标准的一种升级和扩展:DDR的核心频率与工作频率(这里的时钟频率指的是DDR芯片的时钟管脚)相等,但数据频率为时钟频率的两倍,也就是说在一个时钟周期内必须传输两次数据。而DDR2采用“4 bit Prefetch(4位预取)”机制,核心频率为传输频率的1/4,这样即使核心频率还为200MHz,DDR2内存的数据传输频率也能达到800MHz,也就是所谓的DDR2-800。DDR3采用“8 bit Prefetch(8位预取)”机制,这样DRAM的核心频率只有传输频率的1/8,所以DDR3-800的核心频率只有100MHz,如果核心频率为200MHz,DDR3内存的数据频率能达到1600MHz,数据传输频率为DDR2的两倍。

    三、 DDR3介绍

      DDR3 SDRAM(Double-Data-Rate   Synchronous Dynamic Random Access Memory)是应用在计算机及电子产品领域的一种高带宽并行数据总线,它属于上文提到的SDRAM类。DDR3 在 DDR2的基础上继承发展而来,其数据传输速度为 DDR2 的两倍。同时,DDR3 标准可以使单颗内存芯片的容量更为扩大,达到 512Mb 至 8Gb,从而使采用 DDR3 芯片的内存条容量扩大到最高 16GB。此外,DDR3 的工作电压降低为 1.5V,比采用 1.8V 的 DDR2省电 30%左右。说到底,这些指标上的提升在技术上最大的支撑来自于芯片制造工艺的提升,90nm 甚至更先进的 45nm 制造工艺使得同样功能的 MOS 管可以制造的更小,从而带来更快、更密、更省电的技术提升。DDR3 现今是并行 SDRAM 家族中速度最快的成熟标准,JEDEC 标准规定的 DDR3 最高速度可达 1600MT/s(注,1MT/s 即为每秒钟一百万次传输)。 不仅如此, 内存厂商还可以生产速度高于 JEDEC 标准的 DDR3 产品,如速度为2000MT/s 的 DDR3 产品,甚至有报道称其最高速度可高达 2500MT/s。

      DDR3相较于DDR2而言主要有如下几个特点:

      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)功能:重置是DDR3新增的一项重要功能,并为此专门准备了一个引脚。DRAM业界很早以前就要求增加这一功能,如今终于在DDR3上实现了。这一引脚将使DDR3的初始化处理变得简单。当Reset命令有效时,DDR3内存将停止所有操作,并切换至最少量活动状态,以节约电力。 在Reset期间,DDR3内存将关闭内在的大部分功能,所有数据接收与发送器都将关闭,所有内部的程序装置将复位,DLL(延迟锁相环路)与时钟电路将停止工作,而且不理睬数据总线上的任何动静。这样一来,将使DDR3达到最节省电力的目的。

      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与DDR2的一个关键区别。在DDR3系统中,一个内存控制器只与一个内存通道打交道,而且这个内存通道只能有一个插槽,因此,内存控制器与DDR3内存模组之间是点对点(P2P)的关系(单物理Bank的模组),或者是点对双点(Point-to-two-Point,P22P)的关系(双物理Bank的模组),从而大大地减轻了地址/命令/控制与数据总线的负载。而在内存模组方面,与DDR2的类别相类似,也有标准DIMM(台式PC)、SO-DIMM/Micro-DIMM(笔记本电脑)、FB-DIMM2(服务器)之分,其中第二代FB-DIMM将采用规格更高的AMB2(高级内存缓冲器)。 面向64位构架的DDR3显然在频率和速度上拥有更多的优势,此外,由于DDR3所采用的根据温度自动自刷新、局部自刷新等其它一些功能,在功耗方面DDR3也要出色得多,因此,它可能首先受到移动设备的欢迎,就像最先迎接DDR2内存的不是台式机而是服务器一样。在CPU外频提升最迅速的PC台式机领域,DDR3未来也是一片光明。Intel所推出的新芯片-熊湖(Bear Lake),其将支持DDR3规格,而AMD也预计同时在K9平台上支持DDR2及DDR3两种规格。

      7.逻辑Bank数量:DDR2 SDRAM中有4Bank和8Bank的设计,目的就是为了应对未来大容量芯片的需求。而DDR3很可能将从2Gb容量起步,因此起始的逻辑Bank就是8个,另外还为未来的16个逻辑Bank做好了准备。

      8.封装(Packages):DDR3由于新增了一些功能,所以在引脚方面会有所增加,8bit芯片采用78球FBGA封装,16bit芯片采用96球FBGA封装,而DDR2则有60/68/84球FBGA封装三种规格。并且DDR3必须是绿色封装,不能含有任何有害物质。

      9.降低功耗:DDR3内存在达到高带宽的同时,其功耗反而可以降低,其核心工作电压从DDR2的1.8V降至1.5V,相关数据预测DDR3将比现时DDR2节省30%的功耗,当然发热量我们也不需要担心。就带宽和功耗之间作个平衡,对比现有的DDR2-800产品,DDR3-800、1066及1333的功耗比分别为0.72X、0.83X及0.95X,不但内存带宽大幅提升,功耗表现也比上代更好

      内存技术从SDR,DDR,DDR2,DDR3一路发展而来,传输速度以指数递增,除了晶圆制造工艺的提升因素之外,还因为采用了Double Data Rate以及Prefetch两项技术。实际上,无论是SDR还是DDR或DDR2、DDR3,内存芯片内部的核心时钟频率基本上是保持一致的,都是100MHz到200MHz(某些厂商生产的超频内存除外)。DDR即Double Data Rate技术使数据传输速度较SDR提升了一倍。如下图所示, SDR仅在时钟的上升沿传输数据,而DDR在时钟信号上、下沿同时传输数据。例如同为133MHz时钟,DDR却可以达到266Mb/s的数传速度

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

     

      发展到DDR2,芯片内核每次Prefetch  4倍的数据至IO Buffer中,为了进一步提高外传速度,芯片的内核时钟与外部接口时钟(即DDR芯片的Clock管脚时钟)不再是同一时钟,外部Clock时钟频率变为内核时钟的2倍。同理,DDR3每次Prefetch 8倍的数据,其芯片Clock频率为内核频率的4倍,即JEDEC标准(JESD79-3)规定的400MHz至800MHz,再加上在Clock信号上、下跳变沿同时传输数据,DDR3的数据传输速率便达到了800MT/s到1600MT/s。具体到内存条速度,我们以PC3-12800为例,其采用的DDR3-1600(上一小节已经提到过,PC3-12800和DDR3-1600其实是同一意思,只不过PC3-12800指的是DDR的传输带宽为12800MB/s,而DDR3-1600指的是传输频率为1600MHz)芯片核心频率为200MHz,经过Prefetch后在800MHz Clock信号工作频率的双边沿(Double Data Rate)作用下,使芯片的数据传输速率为1600 MT/s,内存条每次传输64比特或者说8字节数据,1600x8便得到12800MB/s的峰值比特率。

      下表列出了JEDEC标准(JESD79-3)规定的DDR3芯片以及内存条相关参数。需要说明的是,如前所述,并不是所有的内存产品都完全遵从JEDEC标准,有些厂家会生产速度更高速的DDR3芯片,一般情况下这些芯片是从芯片检测流程中筛选出来的频率动态范围更大的芯片,或者是可加压超频工作的芯片。

    名称

    核心频率

    核心时钟周期

    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


      注意:Clock管脚时钟频率就是上一小节提到的DDR的工作频率

      最后,在了解了DDR的上面基础知识的前提下,下表列出了不同DDR芯片的相关特性:

    SDRAM器件比较

    条目

    DDR3 SDRAM

    DDR2 SDRAM

    DDR SDRAM

    Clock管脚时钟频率(工作频率)

    400/533/667/800 MHz

    200/266/333/400 MHz

    100/133/166/200 MHz

    数据传输速率

    800/1066/1333/1600 MT/s

    400/533/667/800 MT/s

    200/266/333/400 MT/s

    预取(Prefetch)位宽

    8-bit

    4-bit

    2-bit

    输入时钟类型

    差分时钟

    差分时钟

    差分时钟

    突发长度(Burst Length)

    8, 4(突发突变)

    4,8

    2,4,8

    数据选通信号类型

    差分数据选通

    差分数据选通

    单端数据选通

    电源电压

    1.5V

    1.8V

    2.5V

    数据电平标准

    SSTL_15

    SSTL_18

    SSTL_2

    CAS Latency(CL)

    5,6,7,8,9时钟

    3,4,5时钟

    2,2.5,3时钟

    片内终端电阻(ODT)

    支持

    支持

    不支持

    芯片封装

    FBGA

    FBGA

    TSOP(II)/FBGA/LQFP

    四、 DDR3的工作原理

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

     

    BANK编号(B)

    列地址(C)

    0

    1

    2

    3

    4

    5

    6

    7

    (R)

    0

     

     

     

     

     

     

     

     

    1

     

     

     

     

     

     

     

     

    2

     

     

     

     

     

     

     

     

    3

     

     

     

     

     

     

     

     

    4

     

     

     

     

     

     

     

     

    5

     

     

     

     

     

     

     

     

    6

     

     

     

     

     

     

     

     

    7

     

     

     

     

     

     

     

     

      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接口之间还需要一定的时间(数据触发本身就有延时,而且还需要进行信号放大),这段时间就是列地址脉冲选通潜伏期(CAS Latency,CL),CL的数值与tRCD一样,以时钟周期数表示。比如DDR3-800的有效频率(传输数据频率)为800MHz,由于DDR3的预取数为8,所以核心频率为100MHz,核心周期为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信号的正中间。

      最后在简单说一说DDR中采用的ODT(On-Die Termination)技术。

      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内存的工作频率成为可能。

    五、 总结

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

      1、DDR核心频率,工作频率以及有效频率的关系

      2、DDR采用的预取(Prefetch)技术

      3、DDR的Burst Length(BL)的概念

      4、DDR对一行操作完毕以后如果下一次的操作在不同的行,那么需要有一个预充电(Precharge)的过程

      5、数据掩码(DQM)技术的作用是用来屏蔽不想接收的数据

      6、数据选通信号(DQS)与有效数据的关系

      7、ODT(On-Die Termination)技术可以提高DDR信号完整性

    六、 参考资料

      1、ODT技术:https://blog.csdn.net/weixin_38233274/article/details/81016870

      2、DDR3原理:http://www.360doc.com/content/17/0628/10/43885509_667136417.shtml

      3、DDR3原理:https://wenku.baidu.com/view/95574828d1f34693dbef3e39.html

      4、DDR3原理:https://wenku.baidu.com/view/0b1b0c795fbfc77da369b1b1.html

      5、DDR芯片原理:http://blog.chinaunix.net/uid-20671208-id-4470548.html

      6、DDR传输速率:https://wenku.baidu.com/view/342ed68f360cba1aa811dabf.html

      7、DDR三个频率关系:https://www.cnblogs.com/shengansong/archive/2012/09/01/2666213.html

      8、DDR3三个频率关系:https://electronics.stackexchange.com/questions/134555/why-all-ddrs-ddr-ddr2-ddr3-internal-clock-sets-to-20

     欢迎关注我的微信公众号:FPGA之禅

  • 相关阅读:
    进程、线程、线程安全理解
    查日志常用Linux命令
    Spring容器管理Bean的生命周期
    在Linux模拟浏览器访问下载文件
    在windows上安装mysql
    java判断ip和端口是否通信正常
    Mongodb开启慢查询
    golang 中奇怪的空切片
    关于 MySQL sql_log_bin
    MySQL read_only 与 super_read_only 之间的关系
  • 原文地址:https://www.cnblogs.com/liujinggang/p/9782796.html
Copyright © 2011-2022 走看看