《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > 一种DDR SDRAM控制器的设计
一种DDR SDRAM控制器的设计
来源:微型机与应用2013年第8期
金新强1, 白雪飞1, 张 璠2
(1. 中国科学技术大学 电子科学与技术系, 安徽 合肥230027; 2. 中国科学技术大学 信息
摘要: 在介绍DDR SDRAM控制器设计关键技术的基础上,讨论了一种DDR SDRAM控制器的设计方法。通过一种优化的地址映射策略提高了突发访问效率,采用0.18 ?滋m CMOS工艺流片实现。所设计的DDR SDRAM控制器芯片在PCB板级测试中达到预期设计要求。
Abstract:
Key words :

摘 要: 在介绍DDR SDRAM控制器设计关键技术的基础上,讨论了一种DDR SDRAM控制器的设计方法。通过一种优化的地址映射策略提高了突发访问效率,采用0.18 μm CMOS工艺流片实现。所设计的DDR SDRAM控制器芯片在PCB板级测试中达到预期设计要求。
关键词: DDR SDRAM;控制器;突发访问;地址映射

     双倍数据速率同步动态随机存储器DDR SDRAM (Double Data Rate SDRAM) 以其大容量、高速率和良好的兼容性在通用计算机系统和嵌入式系统领域得到了广泛应用,越来越多的片上系统(SoC)中集成了DDR SDRAM控制器。
    DDR SDRAM是电子设备工程联合委员会JEDEC制定的内存技术标准[1],采用差分时钟技术,具有两倍数据预读取,在时钟的上升沿和下降沿各传输一次数据,数据传输速率为系统时钟的两倍,从而大大提高了数据传输速率。
1 DDR SDRAM控制器的关键技术
    本文设计的DDR SDRAM控制器支持以下操作: 空操作(Nop)、激活操作(Active)、突发写(Burst Write)、突发读(Burst Read)、自动刷新(Auto Refresh)、预充电(Precharge)、模式寄存器配置(Mode Register Set)等。所有的操作命令都通过信号线ras_n、cas_n和we_n共同控制[2]。DDR SDRAM控制器状态转换图如图1所示。

    初始化完成之后,控制器通过ras_n、cas_n和we_n发送Bank激活命令,然后片选和Bank寻址,同时地址线发送行地址选通行。等待tRCD后,发送突发读写命令,同时地址线发送起始列地址,其中A10为带自动预充电使能位,如果自动预充电使能位有效,则在突发传输结束后自动预充电,否则不进行自动预充电。预充电用来关闭某个打开的行或者所有打开的行。被预充电的行可以在tRP之后重新被访问[3]。
    刷新操作分为两种:自动刷新(Auto Refresh)与自刷新(Self Refresh)。自动刷新命令用来周期性地刷新DDR SDRAM,以保持其内部的数据不丢失。由于刷新是基于行进行的,64 ms之后再次对同一行进行刷新,如此周而复始进行循环刷新。自刷新主要用于休眠模式低功耗状态下的数据保存,在发出自刷新命令时,将时钟使能cke 置于无效状态进入自刷新模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作[4]。
2 DDR SDRAM控制器的设计
    DDR SDRAM控制器的功能包括:初始化DDR SDRAM,简化DDR SDRAM复杂的读写时序,在DDR SDRAM接口的时钟双边沿触发数据和时钟单边沿触发数据之间转换,产生周期性的刷新命令来维持DDR SDRAM内的数据不丢失。本文设计的DDR SDRAM控制器包含以下几个模块:控制模块、刷新模块、初始化模块、命令产生模块、数据通路模块和地址映射模块。DDR SDRAM控制器的结构框图如图2所示。
2.1 控制模块
    控制模块寄存从主机系统发来的命令并解码,发送解码过的NOP(空操作)、ACTIVE(激活)、WRITE(突发写)、READ(突发读)、PRE(预充电)命令给命令产生模块,发送解码过的REF(自动刷新)给刷新模块,发送解码过的INIT(初始化)命令给初始化模块,而LOAD_REG1和LOAD_REG2命令则在解码后发送给地址映射模块。
2.2 刷新模块
    刷新模块用于生成周期性的自动刷新命令请求给命令产生模块。刷新模块包含一个16 bit的刷新计数器和控制电路,刷新计数器是一个16 bit的减法计数器,发送LOAD_REG2命令时,在地址映射模块中通过ADDR的相应位加载到寄存器REG2中,然后通过信号PER[15:0]发送给刷新计数器。PER[15:0]中是一个16 bit的数值,表示控制器发出相邻两个自动刷新命令之间的时间间隔,即刷新周期。刷新计数器向下计数,当计数到0时,刷新请求信号REF_REQ被置为有效并保持直到命令产生模块响应刷新请求为止。之后,刷新计数器重新载入刷新周期PER[15:0],开始新一轮的计数。
2.3 初始化模块
    初始化模块采用初始化状态机实现DDR SDRAM的初始化过程,初始化操作按照DDR SDRAM初始化的步骤进行。采用一个由100 MHz系统时钟控制的16 bit初始化计数器来控制初始化状态机中各个状态的执行时间,首先等待200 ?滋s,设置初始化计数器为20 000(200 μs=20 000×1/100 MHz),然后将cke置高,同时初始化状态机进入了NOP(空操作)状态,发送PRE(预充电)命令预充电所有Bank;经过tRP的预充电时间后发出两次MRS(模式寄存器配置)命令分别设置模式寄存器和扩展模式寄存器,等待tMRD的时间后发送PRE(预充电)对所有Bank进行预充电;经过tRP的时间后至少发送两次REF(自动刷新)命令进行自动刷新,之后发送MRS(模式寄存器配置)命令对模式寄存器进行配置,至此完成初始化过程。
2.4 命令产生模块
    命令产生模块包含命令仲裁逻辑和命令解码逻辑。命令仲裁逻辑用来仲裁控制模块发送的解码后的命令、初始化模块发送的初始化过程所需要的命令以及刷新模块发送的刷新请求。刷新模块发来的刷新请求具有最高优先级,其次是初始化模块发送的命令请求,控制模块发送的命令具有最低优先级。如果在初始化模块或者控制模块发送的命令执行过程中接收到自动刷新命令,则这个自动刷新命令保持不被执行直到初始化模块或者控制模块发送的命令操作结束。
    命令解码逻辑将经过命令仲裁逻辑仲裁后的命令解码成DDR SDRAM能识别的操作命令。发送这些操作命令时,时钟使能信号cke置为高电平,片选信号cs_n置为低电平有效,具体的操作命令由信号线cas_n、ras_n和we_n来共同解码。
2.5 数据通路模块
    数据通路模块为DDR SDRAM突发读写操作提供数据接口的时钟域和位宽转换。读数据通路中,从DDR SDRAM发送的数据信号dq[7:0]的采样时钟为200 MHz,经过二级寄存器后分为两路数据进入100 MHz时钟域,一路在时钟的上升沿采样,一路在时钟的下降沿采样,再经过一级寄存后同步经过数据选择器,调整数据顺序,最后经过两级缓存输出给dataout[15:0]。
    写数据通路中,输入数据datain[15:0]和数据屏蔽输入信号dm[1:0]的采样时钟为100 MHz,先后经过两级缓存寄存器和数据选择器将一倍时钟域的数据转换到二倍时钟域,再经过两级缓存输出到数据输出信号dq[7:0]和数据屏蔽输出信号dqm。
2.6 地址映射模块及地址映射的优化
    控制器对DDR SDRAM的访问寻址传统上采用顺序的地址映射方式,即Bank地址、行地址、列地址分别从高地址到低地址排列[5]。由于DDR SRAM的数据存储具有很强的局部性,主机系统对DDR SDRAM的连续突发访问通常集中在相近的一块存储区域,当采用顺序的地址映射方式时,先访问某个Bank的一行,然后访问该Bank中的下一行,就需要预充电关闭当前行并激活下一行,才能突发访问下一行,因此内存访问效率很低。
    DDR SDRAM可以同时激活多个Bank,将连续的访存操作映射到不同的Bank中,避免对同一Bank突发访问而出现行冲突,利用多个Bank提供的行缓冲区来提高访存性能。基于这种思想,本设计采用行地址、Bank地址、列地址分别从高地址到低地址排列的映射方式,如图3所示。当访问下一行时,由于该行在新的Bank中,不需要将原来的行关闭,只需要激活新的行;当再次访问上一行时,因为该行仍然处于激活状态,只需要直接发送突发读写命令。

 将DDR SDRAM中已经激活可以直接访问的最大存储区域称为激活区,激活区越大,DDR SDRAM的局部性突发访问的效率越高。假设Bank地址为b bit,列地址为c bit,数据线为d bit,则优化前采用顺序地址映射方式的激活区大小为d×2c(bit), 优化后的激活区达到d×2b+c(bit),从而大大提高了突发访问的效率。
3 设计实现结果
    本设计经过逻辑综合和布局布线之后,采用0.18 μm CMOS工艺流片。在PCB板上,使用Altera 公司Stratix II 系列FPGA发出测试激励给DDR SDRAM控制器,连接Micron公司型号为MT46V64M8的512 Mbit的DDR SDRAM内存芯片,对DDR SDRAM控制器芯片进行测试。
   DDR SDRAM控制器测试工作时钟达到200 MHz,使用FPGA内置逻辑分析仪SignalTap II截取突发写数据,如图4所示。命令信号cmd[2:0]输入0x2,表示突发写命令,地址信号addr[25:0]为0x0000000,0x0000002,0x0000004,0x0000006,0x0000008,0x000000A,0x000000C,0x000000E,0x0000010,0x0000012,0x0000014依次递增。此时突发写入的数据信号datain[15:0]依次为0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A。

  使用FPGA内置逻辑分析仪SignalTap II截取突发读数据,如图5所示。命令信号cmd[2:0]输入0x1,表示突发读命令,地址信号addr[25:0]为0x0000000,0x0000002,0x0000004,0x0000006,0x0000008,0x000000A,0x000000C,0x000000E,0x0000010,0x0000012,0x0000014依次递增。 addr[25:0]信号经过地址映射后输出sa[12:0]和ba[1:0]给DDR SDRAM,经过tRCD和CL的延时后,突发读出的数据信号dataout[15:0]依次为0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A。

    本文给出了一种DDR SDRAM控制器芯片的设计方法,采用一种优化的地址映射策略提高了突发访问的效率,且流片实现后测试其功能良好,工作频率达到200 MHz,支持的DDR SDRAM数据信号位宽为8 bit,连续突发读写数据传输速率为1.6 Gb/s,能满足系统带宽要求。
参考文献
[1] JEDEC Standard. DDR SDRAM specification[DB/OL].(2005-xx-xx)[2013-01-13].http://www.jedec.org.
[2] Micron Technology Inc. DDR SDRAM MT46V64M8 datasheet [DB/OL].(2002-xx-xx)[2013-01-13]. http://www.micron.com.
[3] Elpida Memory Inc. How to use DDR SDRAM[DB/OL].(2007-xx-xx)[2013-01-13].http://www.elpida.com.
[4] Micron Technology Inc.General DDR SDRAM functionality[DB/OL].(2001-xx-xx)[2013-01-13].http://www.micron.com.
[5] 韦喜波.DDR SDRAM 控制器的设计与验证[D].哈尔滨:哈尔滨工业大学,2009.

此内容为AET网站原创,未经授权禁止转载。