DDRSDRAM技术专题.doc_第1页
DDRSDRAM技术专题.doc_第2页
DDRSDRAM技术专题.doc_第3页
DDRSDRAM技术专题.doc_第4页
DDRSDRAM技术专题.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DDR SDRAM技术专题DDRSDRAM是“双倍数据速率同步动态随机访问存储器”double date rate synchronous dynamic random access memory的缩写,是一种低成本、高容量的存储器,在计算机、消费类电子、通信等领域中一些要求高容量存储空间的场合有着广泛的应用。本技术专题试图以从事DDRSDRAM使用及其控制器设计的电子工程师的角度对DDRSDRAM进行较为详细的讨论。我们希望本技术专题能够为广大电子设计工程师提供有益的参考。1. DDR SDRAM概述SDRAM是同步动态随机访问存储器的缩写,是一种低成本、高容量的存储器。它在计算机、消费类电子、通信等领域中一些要求高容量存储空间的场合有着广泛的应用。传统的SDRAM采用一种单倍数据速率(SDR)的结构执行访问操作,它在每个时钟周期的上升沿传输数据,因此SDRSDRAM的带宽等于其时钟其频率乘以其数据总线宽度 w=f*bus。例如,如果SDRSDRAM的操作频率为100MHz,其数据总线宽度为16位,则其总线带宽为100MHzx16bit=1600Mbit/S,也就是1.6Gbps。而对带宽的需求是无休止的!为了增加总线带宽,如果使用传统的方法,我们要么增加数据总线宽度,要么提高其操作频率。那么,有没有可能在既不增加数据总线宽度也不提高工作频率的条件下增加总线带宽呢?为适应这种需求,DDRSDRAM出现了!DDRSDRAM使用一种双倍数据速率的结构来获得高性能的操作。双倍数据速率结构本质上是一种2n预取结构,在输入/输出管脚上,每个时钟周期可以传输两个字。对于一次DDRSDRAM的访问操作(写操作、读操作),在芯片的内部,一个时钟周期执行一个位宽为2n的数据传输,而在DDRSDRAM器件的管脚上则每半个时钟周期执行一次n位的数据传输。因此,DDRSDRAM的总线带宽为:工作频率数据总线宽度2可见,在相同的数据总线宽度和工作频率下,DDRSDRAM的总线带宽比SDRSDRAM的总线带宽提高了一倍。概括起来,DDRSDRAM具有如下特点: 双倍数据速率结构,每个时钟周期完成两次数据传输; 双向的数据选通信号(DQS)伴随数据一起传输。在接收侧,它用来捕获数据; 在读操作过程中,DQS与数据沿对齐,在写操作过程中,DQS与数据中央对齐; 差分的时钟输入(CK与/CK); DLL将DQ和DQS的跃变与CK的跃变对齐; 在每个CK的上升沿接收命令字;数据和数据掩码参考于DQS的上升沿和下降沿; 内部的四个BANK可以并发操作; 写数据时支持数据掩码(DM); 支持的突发长度:2、4、或8; CAS潜伏期:2或2.5,DDR400还包括CL=3 为每一次突发访问提供了AUTOPRECHARGE选项; 自动刷新与自刷新模式; 2.5V(SSTL_2兼容)I/O; 对于DDR200、DDR266、DDR333:VDDQ为+2.5V0.2V;对于DDR400:+VDDQ为2.60.1V; 对于DDR200、DDR266、DDR333:VDD为+3.3V0.3V或+2.5V0.2V;对于DDR400:+VDDQ为2.60.1V;2. DDR SDRAM与SDR SDRAM的功能比较在对DDRSDRAM进行详细描述之前,我们首先对DDRSDRAM与SDRSDRAM的功能作一个简要的对比。下表列出了它们之间在外部接口上的一些不同之处:SDRSDRAM与DDRSDRAM的内部存储核本质上是相同的。它们都具有相同的寻址和命令控制接口;都具有4个BANK的存储阵列;都具有相同的刷新要求。它们之间基本的不同点在于数据接口。SDRSDRAM的数据接口是一个系统同步的设计,它仅仅在时钟的上升沿捕获数据。它的内、外部数据总线具有相同的宽度,当数据穿越I/O缓冲器时被顺序地锁存到内部存储阵列。SDRSDRAM还支持一个DQM信号,它在写操作过程中作为数据掩码使用;在读操作过程中作为输出使能使用。DDRSDRAM的数据接口是一个源同步的设计,数据在每个时钟周期被捕获两次,并伴随一个双向的数据选通信号。DDRSDRAM采用了一种2n预取结构,它的内部数据总线宽度是外部数据总线宽度的两倍。这就使得内部存储单元以成对的方式向I/O缓冲器传递数据。DDRSDRAM在读操作时没有输出使能信号,但它支持一个BURSTTERMINATE命令来快速中止正在执行的READ命令。在WRITE操作过程中,DM信号被用来屏蔽无效的写数据。DDRSDRAM的命令总线包括时钟使能、芯片选择、行地址、列地址、BANK地址、以及写使能信号。DDRSDRAM采用一对差分时钟(CK和CK#)进行工作,DDRSDRAM的命令信号(地址和控制信号)使用CK的上升沿锁存。与SDRSDRAM不同,DDRSDRAM采用一个双向的数据选通信号(DQS)伴随着数据一起传输。DQS信号在DDRSDRAM的读访问操作中由DDRSDRAM输出并与数据总线沿对齐,而在写访问操作中由DDRSDRAM控制器输出,并与数据总线中央对齐。DDRSDRAM的输入数据使用DQS的上升沿和下降沿进行锁存,而其输出数据则以DQS的上升沿和下降沿作为参考时钟。在CK的上升沿和下降沿进行锁存?接下来,我们首先对DDRSDRAM的功能作一个简要的描述,然后我们会对DDRSDRAM的一些基本概念以及各种操作进行详细的描述。3. DDR SDRAM功能描述DDRSDRAM是一种高速CMOS动态随机访问存储器,它在内部被配制成4个BANK的DRAM,外部数据具有X4位、X8位、X16位三种宽度。DDRSDRAM具有如下的容量: 64Mb(即67,108,864位):16MX4(4MX4X4banks)、8MX8(2MX8X4banks)、4MX16(1MX16X4banks); 128Mb(即134,217,728位):32MX4(4MX4X4banks)、16MX8(2MX8X4banks)、8MX16(1MX16X4banks); 256Mb(即268,435,456位):64MX4(4MX4X4banks)、32MX8(2MX8X4banks)、16MX16(1MX16X4banks); 512Mb(即536,870,912位):128MX4(4MX4X4banks)、64MX8(2MX8X4banks)、32MX16(1MX16X4banks); 1Gb(即1,073,741,824位):256MX4(4MX4X4banks)、128MX8(2MX8X4banks)、64MX16(1MX16X4banks);DDRSDRAM中每一个BANK中的存储单元被组织成正方阵列,由若干行和若干列组成,这些存储单元通过行和列的地址译码器来寻址。对于任何一个单元的读操作,整个行均被读出,然后重新写回(刷新)。对于任何一个单元的写操作,整个行均被读出,然后改变其中一个单元的值,最后将整个行写回。DDRSDRAM的功能框图如下图所示。DDRSDRAM的接口信号描述如下表所示:对DDRSDRAM不同容量、不同数据宽度的寻址信号如下图所示:DDRSDRAM在上电后必须由一个初始化操作来配置DDRSDRAM的模式寄存器,模式寄存器的设置决定了DDRSDRAM的工作模式。 为了减少IO引脚的数量,DDRSDRAM的行地址和列地址复用相同的地址引脚。因此,在访问DDRSDRAM的时候,要先由ACTIVE命令来激活需要访问的BANK、并锁存行地址(BA0、BA1用来选择BANK;A0A13用来选择行),然后才能发布READ或WRITE命令。对应于READ或WRITE命令的地址信号用来选择突发访问的起始列地址。 DDRSDRAM使用双倍数据速率结构来获得高速操作。双倍数据速率结构本质上是一个2n预取结构,在I/O管脚上,它每个时钟周期传输两个数据字,也就是每半个时钟周期传输一个数据字。而对应DDRSDRAM内部的DRAM核,则每个时钟周期执行2n位宽度的数据传输。在没有数据传输的时候,DQ、DQS、DM可以处于悬浮态。对DDRSDRAM的读访问和写访问都是面向突发的,访问操作从一个选定的位置开始,以可编程的顺序持续几个可编程数目的位置。 DDRSDRAM的存储单元由电容组成,我们知道,电容总是趋向于释放电荷,因此DDRSDRAM还需要周期性的刷新操作,只有这样才能保证其存储的数据不会丢失。DDRSDRAM的生产厂商规定,DDRSDRAM的每一行都必须在64ms以内刷新一次。 在以后的章节中,我们会对DDRSDRAM的初始化、模式寄存器定义、DDRSDRAM操作的一些基本概念、命令描述和操作进行详细的描述。4. DDR SDRAM的初始化DDRSDRAM是一种易失性存储器器件,也就是说,当器件掉电后,存储在DDRSDRAM中的所有内容及其配置信息将会丢失。DDRSDRAM每次上电后,必须按一定的顺序来初始化其内部状态机并配置用户定义的操作参数,否则会引起不可预料的操作结果。在本节中,我们会对DDRSDRAM的初始化顺序进行详细描述(有关模式寄存器的具体含义我们会在下一节中详细描述)。我们首先讨论DDRSDAM的上电顺序。DDRSDRAM的上电必须满足下列之一的条件: VDD和VDDQ从同一个电源转换器提供,并且 VTT被限制成1.35V,并且 VREF设置成VDDQ/2。或者: VDDQ在VDD之后或与VDD一起提供,并满足VDDQVDD+0.3V,并且 VTT在VDDQ之后或与VDDQ一起提供,并满足VTTVDDQ+0.3V,并且 VREF在VDDQ之后或与VDDQ一起提供,并满足VREFVDDQ+0.3V。上述的两个条件中,至少有一个必须被满足。DDRSDRAM每次上电后,必须按下列顺序进行初始化。1. 将时钟使能信号(CKE)驱动成LVCMOS低电平LVCMOS低电平?SSTL_2电平?。CKE是一个SSTL_2电平的输入信号,但在施加了VDD电源后可以检测一个LVCMOS低电平。在上电过程中将CKE保持为LVCMOS低电平,能够阻止DDRSDRAM接收不期望的命令,并能够保证DQ和DQS输出在正常操作之前保持为高阻状态;2. 在为DDRSDRAM提供了稳定的电源供应并将CKE保持为低后,我们就可以为DDRSDRAM提供一个稳定的时钟;3. 在向DDRSDRAM发布命令之前,必须等待至少200us;4. 为了初始化DDRSDRAM的内部逻辑,将CKE置为SSTL_2逻辑高并在命令总线上发布一个NOP命令或一个DESELECT命令。注意,此时CKE输入从LVCMOS输入转变为SSTL_2输入并保持为SSTL_2输入;5. 发布一个PRECHARGEALL命令;6. 在至少tRP的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tRP时间后才能发布其它命令);7. 使用LMR命令编程扩展模式寄存器。此时,必须配置DLL(将E0设置为0以便使能DLL)和I/O驱动强度(将E1设置为1提供标准驱动,或者将E1设置为0来提供缩减驱动强度),所有其它的位必须设置成0;8. 在至少tMRD的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tMRD时间后才能发布其它命令);9. 使用LMR命令将DDRSDRAM的模式寄存器设置为期望的操作模式。注意,除了M0到M7之外的所有其它MR位必须被设置成0。在这一步骤还执行一个DLL复位。只要DLL被复位,那么需要至少等待200个时钟周期才能发布可执行命令(例如READ命令);10. 在至少tMRD的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tMRD时间后才能发布其它命令);11. 发布一个PRECHARGEALL命令并将A10设置成逻辑高电平,这一命令将所有BANK置入空闲态;12. 在至少tRP的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tRP时间后才能发布其它命令);13. 发布一个AUTOREFRESH命令。注意,作为DDRSDRAM初始化的一部分,必须发布两个AUTOREFRESH命令:在本步骤时发布一个,在第15步时再发布一个;14. 在至少tRFC的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tRRF时间后才能发布其它命令);15. 发布第二个AUTOREFRESH命令;16. 在至少tRFC的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tRRF时间后才能发布其它命令);17. 发布一个LMR命令来清除DLL位(将M8设置为0);18. 在至少tMRD的时间内为DDRSDRAM发布NOP或DESELECT命令(也就是说至少tMRD时间后才能发布其它命令);至此,DDRSDRAM的初始化过程就结束了,此后,我们可以发布任何有效的命令。注意:从第9步的DLL复位到任何后续命令之间至少需要200个时钟周期。上述的初始化过程可以用下面的简化流程图表示:DDRSDRAM初始化的时序图如下图所示:在上面所描述的初始化操作中,一个很重要的命令就是加载模式寄存器命令,在接下来的一节中我们会对DDRSRAM的模式寄存器进行详细的描述。5. DDR SDRAM的模式寄存器在DDRSDRAM的初始化过程中,我们必须配置DDRSDRAM的操作参数。操作参数是通过DDRSRAM的两个内部寄存器进行配置的,这两个内部寄存器分别为:模式寄存器(ModeRegister,MD)和扩展模式寄存器(ExtendedModeRegister,EMR)。在上一节所提到的LMR(加载模式寄存器)命令就是用来编程这两个寄存器。在发布LMR命令的时候需要与DDRSRAM的BANK地址(BA1:0)和行地址(A13:0)配合使用。其中BA1:0用来选择MR或EMR;A13:0用来提供写入的配置码,A13:0的最低有效位对应模式寄存器的最低有效位。其时序图如图5-1所示:模式寄存器DDRSDRAM模式寄存器的定义如图5-2所示:模式寄存器用来定义DDRSDAM的特定操作模式,包括突发长度、突发类型、CAS时延、以及复位DLL等。在发布LMR命令来编程模式寄存器时BA1:0必须设置为2B00来选择模式寄存器,所加载的配置参数会一直保持(M8位除外,它是自清除的)直到模式寄存器被重新编程或DDRSDRAM掉电。模式寄存器只有在所有BANK都处于空闲状态并且所有突发传输都已经结束的情况下才能够被加载,而且在发布完该命令后必须等待一个特定的时间才能执行后续操作,否则会引起不可预料的操作结果。模式寄存器的M8位用来复位DDRSDRAM内部的DLL,当改位置位后会复位DLL,并且它是一个自清除的位,也就是说当DLL复位完成后改位会自动清除成0。模式寄存器的M2:0用来指定突发长度、M3用来指定突发类型(顺序或交错的)、M6:4用来指定CAS时延、M13:7用来指定操作模式(M12在256Mb及以上的器件中使用、M13在1Gb容量的器件中使用)。有关突发长度、突发类型、CAS时延的详细描述我们将会在下一节中给出。扩展模式寄存器DDRSDRAM扩展模式寄存器的定义如图5-3所示:扩展模式寄存器用来控制DDRSDRAMDLL的使能/关闭以及输出驱动强度的选择。在发布LMR命令来编程扩展模式寄存器时BA1:0必须设置为2B01来选择扩展模式寄存器,所加载的配置参数会一直保持直到扩展模式寄存器被重新编程或DDRSDRAM掉电。扩展模式寄存器只有在所有BANK都处于空闲状态并且所有突发传输都已经结束的情况下才能够被加载,而且在发布完该命令后必须等待一个特定的时间才能执行后续操作,否则会引起不可预料的操作结果。 DLL的使能与关闭:DLL的使能/关闭通过E0位来控制。在正常操作模式下,DLL必须被使能。每次DLL被使能后必须紧跟一个DLL的复位操作(通过编程模式寄存器),并且必须在200个时钟周期后才能发布其它可执行命令(读或写等); 输出驱动强度选择:DDRSDRAM所有输出的正常驱动强度是SSTL_2,某些器件制造商可能会支持一个较弱的驱动强度来驱动更轻的负载或者在点到点环境中使用。扩展模式寄存器的E1位用来选择驱动强度,在使用时注意具体器件的数据手册。接下来我们首先对DDRSDRAM使用中的一些基本概念、术语进行详细描述。SDRAM操作小结前几天在21IC上看到有一个家伙问SDRAM的问题,什么地址线连接啊,操作啊,看完后,只能轻叹一声,菜鸟啊,估计SDRAM从来没使用过,只会使用普通的一些存储器的家伙。回想一下自己这3年来做过的系统,用了各种各样的存储器,想想是不是要小结一下,以至纪念我的技术岁月,因为以后打算开始混日子了。1,SDRAM的地址线在我们一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址线,然后可以算出寻址空间,比如有11根地址线,那寻址空间就是2的11次方减1。但是SDRAM是分列地址和行地址的,行、列地址线是复用的,所以有时候我们看到说寻址空间有多大多大,但是看看地址线怎么就那么几根啊,呵呵。SDRAM一般还有2根BANK的线,分成4个BANK,在有的处理器的SDRAM控制模块中,这两根线可能映射到地址线的某两根去。一般芯片常按照以下方式写芯片的配置,比如4Megx4x16,那这个芯片就是256Mbits。其中16指数据线是16根,中间一个4是只分4个BANK,每个BANK是4Meg。2,SDRAM的初始化SDRAM上电后使用前必须要经过一段初始化操作才可以使用。这个操作过程是标准的过程。这个过程如下A:prechargeB:auto-refreshC:LoadModeRegisterD:NormalRead/Write在上电后输入初始化命令之前,最少要100us延迟(这个其实很容易满足,呵呵)。在输入precharge命令后,因为必须是对所有BANK进行Precharge,所以A10这个管脚要设置成高,因此在Precharge后面要做一个读的操作,这个操作最主要的是在SDRAM的寻址空间里设置的地址必须是A10是高的。在输入Auto-refresh命令后,一般要跟几句空操作或者读什么之类的,反正要达到延迟的目的,以使得SDRAM有时间来完成refresh。之后就是要设置SDRAM的模式寄存器,这个寄存器里一般设置了burst长度,CAS,burst类型,操作模式,还有是设置SDRAM是工作在单个读写操作还是burst操作下。而这个寄存器的设置也是通过地址线来设置的,所以在发出LoadModeRegister命令后要做一个操作可是使得在SDRAM的地址线上出线的值就是你要设置的值。这里很有必要提醒的一下的是,这个操作是8位的操作,切记切记。设置完模式寄存器后就进入正常操作模式。实际上具体的操作要跟选用的处理器的SDRAM控制模块相结合来设置。对于这些初始化命令比较直观的理解就是拿逻辑分析仪来分析。在这里需要提醒一下CAS这个参数很重要。还有SDRAM必须要刷新的,因此刷新频率可以按照手册算出来的,但是设置的高一点也是可以的。常常SDRAM都有工作频率,但是也可以工作在低一点的频率上,比如PC133的,你工作到100也是可以的,设置基本不需要修改。3,其他我们有时候看到有的原理图上数据线有倒过来接的,其实这个无所谓的,反过接,写进去的就是反的,但是读出又反了一下,反反两次正好没反。延伸一下到DDR,其实DDR就是SDRAM外面加了一个乌龟壳。因此初始化是一样的。当然DDR一是多了一个把时钟频率反相的时钟,因此有2个相位差180度的时钟。这两个一般都是用同一个时钟源产生,一致性会比较好。还有多了2个DQS,这个也是一个时序要求,一般CPU的控制模块都有设置好了。如果你使用的CPU不含有控制模块,那用FPGA去做一个控制模块的话,那就要好好研究时序了。在有些处理器的控制模块中,由于EMI的设置,地址线映射关系复杂,因此推算会比较麻烦,一般如果没有什么映射的话,还是很容易操作的。DDR SDRAM在嵌入式系统中的应用 引言 很多嵌入式系统,特别是应用于图像处理与高速数据采集等场合的嵌入式系统,都需要高速缓存大量的数据。DDR(Double Data Rate,双数据速率)SDRAM由于其速度快、容量大,而且价格便宜,因此能够很好地满足上述场合对大量数据缓存的需求。但DDR SDRAM的接口不能直接与现今的微处理器和DSP的存储器接口相连,需要在其间插入控制器实现微处理器或DSP对存储器的控制。 随着密度与性能的不断提升,现场可编程门阵列(FPGA)已被广泛应用于各种嵌入式系统中。而且,现在很多的FPGAs都提供了针对DDR SDRAM的接口特性:其输入输出引脚都与SSTL电气特性兼容,内部提供了DDR触发器、锁相环等硬件资源。使用这些特性,可以更加容易地设计性能可靠的高速DDR SDRAM存储器控制器。 1 DDR SDRAM 在嵌入式系统中的应用图1是DDR SDRAM在高速信号源系统中的应用实例。 在该系统中,由FPGA的完成各模块之间的接口控制。FPGA接收从前端传送过来的高速数字信号,并将其存储在DDR SDRAM中;DSP通过FPGA读取DDR中的数据,处理后再送回到DDR SDRAM,最后由FPGA负责将数据分两路输出。 该系统对存储器的要求是能够高速地存储大量的数据,DDR SDRAM正好能满足这一要求,此时,FPGA是否能对DDR SDRAM进行有效控制就成为影响系统性能的关键。最后的试验结果表明,FPGA是能够胜任这一任务的。 2 DDR SDRAM的工作方式 在DDR SDRAM能够被存取数据之前,需要先对其初始化。该初始化流程是预先定义好的。不正确的操作将导致无法预料的结果。初始化的过程中将设置DDR SDRAM的普通模式寄存器和扩展模式寄存器,用来制定DDR SDRAM的工作方式,这些设置包括突发长度、突发类型、CAS潜伏期和工作模式以及扩展模式寄存器中的对DDR SDRAM内部DLL的使能与输出驱动能力的的设置。模式寄存器可以被再编程,这时需要DDR SDRAM的各个区(bank)处于空闲状态,从而改变存储器的工作模式。如果操作正确,对模式寄存器的再编程不会改变存储器内存储的数据。 初始化完全之后,DDR SDRAM便进入正常的工作状态,此时便可对存储器进行读写和刷新。DDR SDRAM在一对差分时钟(CLK与CLKn;CLK的上升沿与CLKn的下降沿的交点被认为是CLK的上升沿)的控制下工作。命令(地址和控制信号)在每个时钟(CLK)的上升沿被触发。随着数据一起传送的还包括一个双向的数据选通信号,接收方通过该信号来接收数据。DQS作为选通信号在读周期中由DDR SDRAM来产生,写周期中由存储器控制器来产生。该选通信号与数据相关,其作为类似于一个独立的时钟,因此也需要满足相应的时序要求。读周期中,DQS与数据是边沿对齐的;写周期中,DQS与数据是中心对齐的。存储器输入的数据在DQS的两个沿都触发,输出的数据也是以DQS的两个沿作为参考,同时还要以时钟CLK的两个沿作为参考。不单单以CK边沿为参考么?因此,由于接口在时钟的两个沿的触发下工作。其数据宽度(n)是存储器数据宽度(2n)的一半。图2描述了DDR SDRAM的工作方式。 对DDR SDRAM的读和写操作是基于突发的:从一个选定的地址单元开始,连续存取设置好长度的地址单元。该长度就是所谓的突发长度。DDR SDRAM提供的可编程的读或写的突发长度为2,4或8。数据的存取以一个激活命令(ACTIVE command,RAS_n low)开始,接着便是读(CAS_n low)或写(CAS_n low and WE_n low)命令。与激活命令一起被触发的地址位用来选择将要存取的区(bank)和页(或行);与读或写命令一起触发的地址位用来选择突发存取的起始列单元。使用控制器读取DDR SDRAM的仿真波形示意图如图2所示。读命令被触发后,数据将在1.53个时钟周期之后触发在数据总线上。这个延迟就是所谓的CAS潜伏期(CL, CAS latency),即从DRAM内核读出数据到数据出现在数据总线上所需要的时间 。CAS潜伏期的大小与SDRAM的速度和存储器的时钟频率有关。 当要存取一个不同行的地址单元时,需要通过一个预充电(PRECHARGE)操作关闭当前行。自动刷新(AUTOREFRESH)命令用来周期性地刷新DDR SDRAM,以保持其内部的数据不丢失。 3 DDR SDRAM控制器的设计 DDR SDRAM控制器的功能就是初始化DDR SDRAM;将DDR SDRAM复杂的读写时序转化为用户方简单的读写时序,以及将DDR SDRAM接口的双时钟沿数据转换为用户方的单时钟沿数据,使用户像操作普通的RAM一样控制DDR SDRAM;同时,控制器还要产生周期性的刷新命令来维持DDR SDRAM内的数据而不需要用户的干预。 3.1 DDR SDRAM控制器的控制流程 DDR SDRAM提供了多种命令,整个控制状态机非常复杂。但很多应用场合中,并不需要用到所有的命令我们需要实现哪些命令呢?,因此为了简化设计,但同时又兼顾尽可能多的应用场合,在控制器的设计中制定了如下几种功能:DDR SDRAM的初始化、可变长度的突发读写,自动刷新功能,预充电以及模式寄存器的重置(reload)。图3是控制器整个状态转移图。 系统上电后,DDR SDRAM处于空闲状态(Idle),在对存储器进行读写操作之前,需要先对其进行初始化。初始化的过程中,将设置突发长度,突发类型,CAS潜伏期等参数。DDR SDRAM的初始化有一个固定的步骤,错误的操作将导致DDR SDRAM进入不确定状态。在控制器中使用了一个专门的初始化状态机来对DDR SDRAM进行初始化。 初始化完之后便可对DDR SDRAM进行读、写或其他操作。在执行读(写)命令之前,先要激活(Active)将要读(写)的行,之后便可对该行进行突发读(写),在控制器的设计中,所有的读写命令都是不带预充电的,因此,某一行被激活之后将一直处于激活状态,直到用户发送突发终止命令,此时控制器将自动产生一个预充电命令来关闭当前行。这样,某一行被激活之后用户便可进行连续的突发读(写)操作,从而节省了每次突发读写所需要的激活时间,提高了系统的数据吞吐率。 控制器同时提供了一个自动刷新(auto refresh)计数器,每隔一定的时间间隔(即DDR SDRAM的刷新周期,根据所使用的存储器而定,可在控制器中设定),便会产生一个刷新请求,如果此时DDR SDRAM处于空闲状态,控制器便会发生一个自动刷新命令来对DDR SDRAM进行刷新;如果此时DDR SDRAM正在进行读(写)操作,控制器将会等到当前的读(写)操作完全之后再发送新命令。在刷新过程中,用户如果有读(写)请求,控制器将在当前的刷新周期完成之后再响应用户的请求。 正常的操作过程中,当DDR SDRAM处于空闲状态时,用户还可以根据实际的需要来重置存储器的控制寄存器,重新设定存储器的突发长度、突发类型、CAS潜伏期等参数。 3.2 控制器数据通道的结构 图4是DDR SDRAM控制器数据通道的结构图。图4中完整的显示了控制器读和写数据通道上DQ与DQS的结构关系。前面提到过,Cyclone系列FPGA没有带DDR触发器的输入输出单元什么结构才是DDR触发器输入输出单元?是不是在时钟的两个边沿都对D触发器进行触发来得到类似的双倍速率的结构?如图中所示的两个D触发器,第一个是用clk_90,第二个是用clk,这样的话,输入的数据对于每一个时钟来说都只是保持了半个周期,从而达到一个时钟周期传送两次数据的目的?,但完全可以用靠近输入输出引脚处的逻辑资源来实现DDR触发器,而

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论