完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
DDR3 1. DDR3概述DDR3内存控制器主要用于以JESD79-3C标准做SDRAM设备的外部存储接口。支持的内存类型有DDR1 SDRAM,SDRSDRAM, SBSRAM。DDR3内存控制器SDRAM可以用于程序和数据的存储。 DDR3特征: 1) 支持JEDEC标准的JESD79-3C的设备 2) 33位的地址,使得其拥有8G的地址访问空间 3) 支持16/32/64位数据总线宽度 4) CAS延迟:5,6,7,8,9,11 5) 1,2,,4,,8个bank 6) 8G地址空间通过两个片选选择 7) 页大小:256,512,1024,2048字 8) SDRAM复位或者重新配置后会自动初始化 9) 自我刷新模式 10) 优先刷新模式 11) 可编程SDRAM的速度刷新和backlog计数 12) 可编程SDRAM时间参数 13) 大小端模式 14) SDRAM数据总线有ECC校验 15) 支持两个类型的延迟机制 2. DDR3外设特性2.1. 时钟接口有两个时钟给DDR3控制器,一个时钟是DDR3控制器的工作时钟,一个是给DDR3的I/O接口。DDR3控制器的时钟不可超过DSP的1/2,I/O接口的时钟是DDR3的内存时钟。 2.2. 信号描述DDR3控制器信号如图1所示,其主要信号有: 1) 支持最大数据总线宽度为64位 2) 拥有33位的地址总线宽度 3) 两个不同的输出时钟都是来自于内部时钟源 4) 命令信号:行和列地址选通信号,写使能选通信号,数据选通信号,和数据掩码。 5) 两个片选信号和两个时钟使能信号 表1表示DDR3的信号描述 图1 DDR3信号图 表1 DDR3信号以及描述 2.3. 命令描述DDR3内存控制器支持的DDR3 SDRAM命令如表2所示。 表2 DDR3 SDRAM 命令 2.3.1. 模式寄存器的设置(MRS/EMRS)DDR3 SDRAM包含模式寄存器和扩展模式寄存器,用来配置DDR3的内存操作。这些寄存器设置控制类型,访问长度,CAS延迟,DLL是否使能。当MRS和EMRS命令发出时触发时会更改上述配置寄存器,而此命令的产生在DDR3初始化和外部SDRAM空闲状态下。当MRS或者EMRS命令执行时,选择模式寄存器会写入DDRBA[1:0]信号线上的值,数据信号DDRA[12:0]上的值也被加载到寄存器中,而DDRA[15:13]和DDRBA[2]保留。 2.3.2. 刷新模式DDR3内存控制器根据REF(刷新)命令去刷新DDR3 SDRAM设备。PREA命令后会自动产生一个REF命令,以确保选中所有的没有活动化的CE空间和BANK地址。 在PREA命令后,DDR3内存控制器会根据SDRAM刷新控制寄存器(SDRFC)中的配置速率(PERRESH_RATE)开始执行数据刷新。一般的,在一个刷新命令会按规律每隔一个时间间隔tREFI去刷新。 2.3.3. 激活命令ACtiVE命令用于打开(激活)指定bank中的一行做后续操作的入口地址。DDRBA[2:0]选择指定的bank,地址线DDRA[15:0]上的地址选择指定行。在一个PRECHARGE命令来之前这一行会一直作为入口操作地址。想要激活不同的行必须得有一个PRECHARGE命令。当执行一个ACT命令之后会延迟一个tRCD的时间,然后DDR3内存控制器才会进行一个读或写。 2.3.4. 不活化状态(Deactivation)欲充电命令(PRECHARGE)用于使打开的指定bank中的行关闭(不活化状态)。欲充电命令(PRECHARGE)发出一段时间后(tRP),在随后的行激活命令使得bank有效。若是自动预充电(PRECHAGE)情况下,当一个读或者写命令命令给一个不同的bank时,不会中断当前bank的数据传输,并且不会违反其它时间参数。如果没有打开的行(bank在空闲状态)或者之前打开的行正在预充电的过程中,PRE命令也是允许的。在执行PREA命令时,DDRA[10]会被拉高,以确保所以的bank处于不活化状态(Deactivation)。 2.3.5. 读命令图2所示为DDR3内存控制器从DDR3 SDRAM中执行一个读操作。读命令初始化一个读操作在一个激活了的行上。列地址在地址线DDRA[15:0]上,bank地址在DDRBA[2:0]上。 DDR3内存控制器执行一个操作长度是8,执行一个可编程CAS延时可以是5,6,7,8,8,10,11。图2所示为5个时钟周期的CAS延时。读延时可以通过DDR PHY控制器1寄存器来配置。因为默认执行一个操作长度是8,所以DDR3内存控制器在每一次读命令会返回8个字(words)的数据。 图2 DDR3 读命令 2.3.6. 写命令若是ACT命令后激活指定的bank中的行,随后操作的写命令优先级高。在WRT命令后会有一个写延时。写延时时间与CAS延时减去1相等。所有的写操作长度都是8。 图3 表示DDR3内存控制器的写时序。如果传输过程中少于8个字(words),根据相应的执行结果和命令有以下可能: 1) 标记出额外的数据使用DDRDQM输出 2) 终止写操作和开始新的一个写操作 图3 写操作时序 2.4. 地址映射DDR3内存控制器通过两个片选去选择外部的连续的DDR3 SDRAM。DDR3内存控制器接收DDR3内存访问请求通过一个33位逻辑地址。控制寄存器使用逻辑地址和片选产生DDR3 SDRAM的行/页,列,bank地址。bank和列地址使用IBANK和PAGESIZE区域(fields)的位来决定。片选pin使用EBANK区域(fields)来决定,如图4所示。 图4 BANK地址配置寄存器 SDRAM配置寄存器(SDCFG)的IBANK_POS决定了有多少banks能够给DDR3控制器交错使用。当IBANK_POS = 0时,源地址的增量超越了页的边界时,DDR3控制器会访问到下一个bank的相同页。 当访问完了一个设备上的所有banks的时候,会访问下一个DDR3设备的所有banks。其DDR3 SDRAM访问如图5所示。IBANK_POS = 0时,打开所有的SDRAM空间供访问,ROWSIZE参数不会用作DDR3控制器的计数,如图5所士。 图5 IBANK_POS = 0访问图 例如,如果IBANK = 3,PAGESIZE = 3,EBANK = 1,这个地址映射一个64为的SDRAMs其结果如图6所说,63位,N=3。 图6 地址映射例子 2.5. DDR3内存控制器接口为了使得数据能够有效的将数据源从DSP搬运外部DDR3 SDRAM中,DDR3内存控制器使用了一个命令FIFO,一个写数据FIFO,一个写状态FIFO,一个读命令FIFO,两个读数据FIFO完成命令与数据的调度。图7描述了每一个FIFO的作用。图8为DDR3控制器FIFO的图解。在DDR3内存控制器中,命令,写数据,读书节都是并行执行的。外设总线用来写和读数据从外部内存中,也同样包括外部内存映射寄存器(MMR)的数据。 图7 FIFO描述 图8 DDR3 FIFO图解 2.5.1. 仲裁DDR3内存控制器的命令重排和调度使得数据在最大吞吐量时也能有效的传输。通过打开和关闭DDR3 SDRAM的行来实现最大效率的使用数据,地址和命令总线。命令的重排顺序在命令FIFO中。 DDR3内存控制器检查在命令FIFO中存储的所有命令然后实现外部内存的使用。DDR3重排命令的规则基于以下规则: 1) 如果读命令与先前的写命令操作的是一个不同的块地址(2048个字节),读优先级等于或大于写优先级。 2) 如果读命令与先前的血命令操作的是同一块地址(2048个字节),那么DDR3控制器会阻塞读命令。 也可能存在一个正在等待的读或写: 1) 在所有等待读命令中,DDR3控制器会将所有读命令相应的SDRAM的读取BANK打开。 2) 在所有等待写命令中,DDR3控制器会将所有写命令相应的SDRAM的读取BANK打开。 由于上述重新排序的结果,可能存在一些正在进行的读和写操作使得相应的bank打开。最高优先级的读取是从等待读取命令中选择的,最高优先级写入也是从等待写入命令中选择的。如果两个或多个命令具有最高优先级,则是排序在前的命令被选中。因此,可能存在最终的读取和最终的写入命令。 DDR3控制器支持命令的交错,以实现最大效率。换句话说, 控制器在执行一个命令时能够切换到执行另一个更高优先级的命令,完成优先级高的命令后在切换回第一个命令执行。 除了读写,DDR3控制器还需要打开和关闭SDRAMBANK,以及维护一个SDRAM的刷新计数。SDRAM命令的优先级等级如下: 1) SDRAM刷新请求(最高优先级) 2) 读取请求在没有更高优先级的写命令时(根据上面命令重新排序所得) 3) 写请求 4) SDRAM激活命令 5) SDRAM不活化命令 6) SDRAM省电请求 7) SDRAM自刷新请求(最低优先级) 2.5.2. 饥饿命令(Command Starvation) 根据2.5.1的命令重排序和优先级安排,DDR3内存控制器的操作如下: 1) 连续的高优先级命令可以阻塞较低的优先级命令 2) 在打开指定bank的行中连续的执行SDRAM命令时会阻塞相同bank下的其他行中需要执行的SDRAM命令。 为了避免连续的阻塞效果,在最早命令的延时计数期满时,最早的命令的优先级会立刻由于其他所有的命令。这个最早命令延迟计数(PR_OLD_COUNT)在延迟配置寄存器中进行配置。另外的,命令访问也会分为不同的两类,每一类分配不同的延时计数。 最高优先级的命令是硬件复位和软件复位。如果复位发生,那么DDR3会放弃当前执行的命令直接进入复位操作,这种情况下,FIFO中的命令和数据全部丢失。启动序列也开始了,SDRAM刷新控制寄存器(SDRFC)中的INITREF_DIS会被设置为0。 2.5.3. 竞争条件多主设备向DDR3中写入数据的时候可能存在竞争。例如,主设备A通过DDR3的内存缓存区传递一个软件消息,写操作完成以后没有等待写完成指示时主设备B尝试读取软件消息,这时候读到的数据是之前的数据,因此接收到的数据是错误的消息。为了确保在主设备B读取操作之前主设备A已经写完了数据,主设备A必须等待写操作完成,并且通知主设备B数据已经可以读了。例如,EDMA传输控制器必须等待数据传输完成,让数据传输完成事件作为信号去触发DSP读取DDR3中的数据。 如果主设备A没有等待写操作完成的指示时,必须执行以下方式: 1) 执行写请求 2) 对DDR3内存控制器模块ID和修订寄存器执行一个虚拟写入。 3) 对DDR3内存控制器模块ID和修订寄存器执行一个虚拟读取。 4) 向主B表明,在步骤3完成读后,数据已准备好读取。其中步骤3中的读完成确保了前面的写操作完成了。 2.5.4. 服务类型命令FIFO中的命令可以映射到两类服务:1和2。可以根据优先级或主ID来完成对特定类服务的命令的映射。基于优先级的映射可以通过设置优先级映射寄存器来完成。基于主ID的映射可以通过设置住ID或者主ID掩码服务映射寄存器来完成。 可以为每个服务类设置三个住ID和掩码值。结合掩码,每一个类服务最多可以有144个主ID可以映射。例如,一个 0xFF的主ID值以及0x3的掩码值将把所有的主ID从0xF8映射到0xFF 特定类的服务。默认情况下,所有命令都将映射到服务2的类。 每个服务类都有一个相关的延迟计数器。这个计数器的值可以通过延迟配置寄存器来配置。当一个命令的延迟计数器到期时,即达到为命令所属的类服务条件,该命令将是下一个执行的命令。如果有多个命令的演示计数器到期了,那么最高优先级的命令先执行。 2.6. 刷新DDR3控制器使用两个计数器来调度自动刷新命令: 1) 一个13位的自减间隔刷新计数器 2) 一个4位待办刷新计数器 间隔刷新计数器在复位时会在REFRESH_RATE中加载刷新数值。间隔计数器每一个循环会自减一次,直到减为0,然后又加载REFRESH_RATE中的值进行计数。 待办刷新计数器会记录自动刷新命令的数量。每当间隔计数器重新加载数值的时候,待办刷新计数器会增加一次(直到达到他的最大值15)。DDR3执行一个自动刷新命令的时候待办刷新计数器会减1次(直到减为0)。紧接着刷新命令后,DDR3内存控制器会等待T_RFC个周期,这个值有SDRAM的3个时间寄存器来配置。 若待办刷新寄存器中的值在有效范围内,有三个等级的事件让DDR3控制器执行一个自动刷新操作,三情况如下所示: 1) 刷新5等级为待办刷新寄存器大于0,表示有待办刷新操作,如果DDR3控制器不繁忙,而且没有一个SDRAM BANK是打开的,应该执行一个自动刷新周期 2) 刷新释放等级为刷新寄存器大于4,表示待办刷新优先级高,如果DDR3控制器不繁忙,即使SDRAM BANK是打开的,也要执行一个自动刷新周期 3) 刷新必要等级为刷新寄存器大于7,表示待办刷新必要刷新,在服务中没有新的内存访问请求的情况下执行一个自动刷新周期 在完成刷新释放等级的刷新操作后DDR3控制器开始新的内存访问服务。如果命令FIFO中有任何命令的延时计数期满,DDRE3控制器不会等待刷新等级到达释放等级就会执行一个刷新操作并推出刷新状态。 2.7. 自刷新模式DDR3控制器支持低功耗自刷新模式。控制器保持DDRCKE低状态来维护自刷新状态。在自刷新中,内存保持有效的数据消耗最小的功率。自动刷新模式是通过在电源管理控制寄存器中的LO_MODE编程来设置的。自刷新模式会在一下条件下发生: 1) LP_MODE被设置为2 2) 一个内存操作请求发生 3) PMCTL寄存器的SR_TIM被清0 在内存访问和自刷新命令被发送到DDR3内存控制器的情况下,控制器总是优先考虑内存访问。如果复位操作在内存访问和刷新命令发送到DDR3内存控制器的队列中,那么自我刷新可能不会进入。在初始化复位之前,用户必须确保所有的内存操作都完成了,并且自刷新已经写入了STATUS寄存器。 2.8. 复位注意事项DDR3控制器可以通过硬件复位和软件复位。硬件复位会重置状态机,FIFOS,和内部寄存器。软件复位只会复位状态机和FIFOS。软件复位不会复位除中断寄存器以外的寄存器。当复位执行时任何寄存器的访问不会执行。设备复位与DDR3内存控制器重新设置之间的关系如图9所示。 图9 复位与设备重置关系 2.9. 周转时间图10表示DDR3内存控制器在数据总线上的各种连续访问的周转时间。 图10 周转时间 2.10. DDR3内存控制器初始化DDR3 SDRAM初始化是通过DDR3控制器中的内存映射寄存器配置和Bootcfg的特定序列实现的。软件配置步骤主要是配置MRS和EMRS寄存器。这些寄存器配置了访问类型,访问长度,CAS延迟。 在下面条件下,DDR3内存控制器执行初始化操作: 1) 在硬件复位或者软件复位之后自动执行 2) SDRAM配置寄存器的(SDCFG)写操作之后 在完成初始化操作时,DDR3内存控制器执行一个自动刷新周期, 将DDR3内存控制器放在一个空闲状态,所有的BANK都被禁用。 如果SDRAM配置寄存器中的SDRAM_TYPE的值等于3以及SDRAM刷新寄存器中的INITREF_DIS设置为0时,那么退出复位。 2.11. 双BANK支持设备使用了芯片选择(DCE0和DCE0 DCE1),每个芯片选择允许访问两个SDRAM中的一个。使能双BANK访问: 1) 设置DDR3_CONFIG_12寄存器中的use_rank0_delays为1。通过“PHY”的逻辑使用一组最优的均衡值来访问这两个BANK。 2) 设置SDCFG寄存器中的EBANK位为1.这样是的控制器使用两个片选,一个片选对应一个BANK。 2.12. 中断支持DDR3内存控制器会生成一个错误中断。请检查中断的部分关于ECC错误中断如何被路由的详细信息。中断的来源可以在中断状态寄存器中找到。 2.13. EDMA事件支持DDR3内存控制器是DMA的一个从设备,英寸不会产生EDMA事件,数据的读写请求可以在EDMA控制器主设备中直接进行操作。 2.14. 仿真在仿真期间,DDR3内存控制器将保持完全的功能,以允许模拟访问外部内存。 3. 使用DDR3内存控制器3.1. 连接DDR3内存控制器到DDR3 SDRAM图11,图12,图13表示三种内存拓扑图。 图11 2个16MB*16*8BANK(4Gb) 图12 1个8MB*16*8BANK(1Gb) 图13 2个16MB*8*8BANK(2Gb) 3.2. 配置DDR3内存控制器寄存器以满足DDR3 SDRAM的规格DDR3内存控制器对DDR3的访问具有很高的可编程性,为DDR3内存控制器提供了与各种DDR3设备交互的灵活性。配置SDRAM配置寄存器(SDCFG),SDRAM刷新控制寄存器(SDRFC),SDRAM时间1寄存器(SDTIM1),SDRAM时间2寄存器(SDTIM2)和时间3寄存器(SDTIM3)等寄存器值来完成整个内存控制器的设置。 作为一个示例,下面的部分将描述如何配置每个寄存器来访问两个 1 Gb,16位宽的DDR3 SDRAM设备。参数如下(假定DDR3内存控制器时钟(DDR3CLKOUT)的频率被设置为 666.5MHz): 1) 最大数据率:1333MHz 2) 每个BANK值:8 3) 页大小:1024words 4) CAS延迟:9 3.2.1. 配置SDRAM配置寄存器(SDCFG)SDRAM配置寄存器(SDCFG)包含有DDR3内存控制器匹配数据总线宽带的配置,CAS延迟,访问BANK数量,和访问页大小等参数。其描述如图14所示。 图14 SDRAM配置寄存器 3.2.2. 配置SDRAM刷新控制寄存器(SDRFC)SDRAM刷新控制寄存器(SDRFC)配置DDR3内存控制器以满足所访问DDR3设备的刷新要求。SDRFC也允许DDR3内存控制器进入或者离开自刷新。SDRFC中的REFRESH_RATE字段定义所接DDR3设备的刷新周期。它的计算公式为: REFRESH_RATE =DDR3CLKOUT frequency × memory refresh period 根据DDR3 JEDEC标准,复位后DDRCKE pin必须保持低电平时间为500us在启动设备初始化之前。设备刷新配置如图15所示。 图15 刷新时间 在初始化期间的500us下的刷新速率计算应该除以一个16,其计算公式如下: REFRESH_RATE =(666.5 MHz × 500 µs)/16 = 515Ch 初始化以后,刷新速率的额计算公式如下: REFRESH_RATE =666.5 MHz × 7.8 µs = 1450h SDRFC的配置结果如图16所示。 图16 SDRFC配置结果 3.2.3. 配置SDRAM时间寄存器(SDTIM1,SDTIM2,SDTIM3,SDTIM4)SDRAM计时1寄存器(SDTIM1),SDRAM计时2寄存器(SDTIM2),SDRAM计时3寄存器 (SDTIM3),SDRAM计时4寄存器(SDTIM4)配置DDR3内存控制器来满足所连DDR3设备的时间参数。在SDTIM1,SDTIM2,SDTIM3,SDTIM4分别对应了DDR3数据手册中的规定。图17,图18,图19表示寄存器的名字和对应数据手册参数的名字和数值。这些表还提供了计算寄存器字段值并显示结果的公式。每一个方程都包含一个-1,因为寄存器域是根据DDR3时钟周期-1。编程时间值的目的是用DRAM时钟来计算它们,循环和四舍五入到下一个最高的整数值。 图 17 SDTIM配置表 1 图18 SDTIM配置表2 图19 SDTIM3配置表3 3.2.4. 配置Leveling寄存器所有的Leveling使能可以通过RDWR_LVL_RMP_CTRL寄存器中的1到31位决定,所有的Leveling出发可以通过RDWR_LVL_CTRL寄存器中的1到32位决定。 3.2.5. 配置读延迟都延迟可以在DDR PHY控制器1中的[4:0]配置,读延迟配置范围为:CAS latency +1 to CASlatency +7;寄存器中配置的值应该是要求值- 1。
|
|
相关推荐
|
|
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
3237 浏览 0 评论
790 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
3670 浏览 0 评论
4431 浏览 1 评论
1371 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:38 , Processed in 0.703306 second(s), Total 40, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号