叨叨游戏网
您的当前位置:首页高速SDRAM 控制器的嵌入式设计

高速SDRAM 控制器的嵌入式设计

来源:叨叨游戏网
计 算 机 工 程 第 36 卷 第16期 Vol.36 No.16 Computer Engineering · · 工程应用技术与实现 文章编号:1000—3428(2010)16—0216—03文献标识码:A 2010年8月August2010中图分类号:TP333高速SDRAM控制器的嵌入式设计 邓耀华1,2,刘桂雄1,吴黎明2 (1. 华南理工大学机械与汽车工程学院,广州 5103;2. 广东工业大学信息工程学院,广州 510006) 摘 要:为适应高数据吞吐速率的应用场合,在分析同步动态随机存储器(SDRAM)控制器工作原理的基础上,研究支持高数据处理效率可连续读写操作的存储控制算法。利用现场可编程门阵列设计SDRAM嵌入式存储控制器,采用CMD命令形式,根据猝发长度分配连续读写延时,通过数据通道控制与读写操作协同工作提高数据处理效率。测试结果表明,该控制器运行频率高于100 MHz,数据处理效率大于95%,适用于视频采集数据缓存及大型LED显示控制中。 关键词:同步动态随机存储器;现场可编程门阵列;连续读写指令 Embedded Design of High-speed SDRAM Controller DENG Yao-hua1,2, LIU Gui-xiong1, WU Li-ming2 (1. School of Mechanical and Automotive Engineering, South China University of Technology, Guangzhou 5103; 2. School of Information Engineering, Guangdong University of Technology, Guangzhou 510006) 【Abstract】To meet the demands of application situation of mass data throughput, this paper researches memorizing control algorithm which supports high treatment efficiency and data continuous read/write operation, and uses Field Programmable Gate Array(FPGA) to design SDRAM embedded control algorithm. The controller uses CMD order mode, assigns time-delay of continuous read/write based on burst length, enhances the data processing efficiency by team working between data channel control and read/write operation. Testing results show that running frequency of this controller is higher than 100 MHz, data processing efficiency is above 95%, and it applies to data buffer of video acquisition and large size display control of LED. 【Key words】Synchronous Dynamic Random Access Memory(SDRAM); Field Programmable Gate Array(FPGA); continuous read/write instruction 1 概述 同步动态随机存储器(Synchronous Dynamic Random Access Memory, SDRAM)常被作为数据采集场合的数据缓存使用。SDRAM内嵌同步控制逻辑电路以支持猝发方式进行的连续读写,能够达到比其他传统异步DRAM快数倍的存取速度。由于SDRAM的操作比较复杂,因此需要设计一个的控制器使其正常工作[1]。现有存储控制的研究主要是数据显示、高速采集的数据缓存等方面[2]。 本文在已有应用基础上,提出一种连续读写控制实现算法,通过设计连续读写有限状态机和控制时序,实现各种猝发长度和页模式下的读写操作控制,同时介绍由现场可编程门阵列(Field Programmable Gate Array, FPGA)设计的SDRAM控制器[3]。 2 存储控制器体系结构与接口划分 SDRAM芯片的外部控制是通过行选通信号nRAS、列选通信号nCAS、写有效信号nWE和时钟有效信号CKE的组合实现的[4]。下文根据SDRAM接口设计的逻辑进行SDRAM存储控制器设计。 2.1 体系结构设计 控制器的设计运用自顶向下的方法,采用CMD命令,控制器包括:命令解释模块,刷新控制模块,命令仲裁模块,命令响应模块,数据通道模块。存储控制器的体系结构如 图1所示。 — —216

图1 控制器体系结构 基金项目:粤港关键领域重点突破基金资助项目(20080102-5) 作者简介:邓耀华(1978-),男,博士研究生,主研方向:嵌入式 系统;刘桂雄,教授、博士、博士生导师;吴黎明,教授、硕士 收稿日期:2010-02-24 E-mail:dengyaohua@21cn.com

为能将存储设备的容量增大,通过地址译码的方式将多个存储设备级联,见图2。级联对应的SDRAM芯片有各自的控制信号,SDRAM控制器根据不同的地址区间自动选中这个区间对应的SDRAM芯片进行相应操作,同时保证每一时刻只有一个存储设备在工作。 图2 SDRAM级联 2.2 外部接口规划 根据设计要求将SDRAM控制器接口设计为:控制器与系统接口,控制器与SDRAM芯片接口,具体描述如下: (1)控制器与系统接口 SDRAM操作较复杂,内部要满足的时间参数较多,需要采用大量的握手信号进行对控制信号的应答。如果将操作命令与数据命令合在一起,用户对SDRAM的控制则会变得不易理解,为了使操作灵活,采用将操作命令与数据命令分开的策略。命令流包含SDRAM芯片的各种命令信号,数据命令流包括在读写操作时SDRAM控制器对系统发出的数据请求信号或数据有效信号以及两者间的数据信号。通过将操作命令与数据命令分开的方式,用户可以地进行操作控制与数据控制,使用户SDRAM的控制变得简单。 (2)控制器与SDRAM接口 控制器与SDRAM接口与SDRAM控制器的系统接口类似,这里将SDRAM控制器与SDRAM芯片的操作控制流与数据控制流分开,是为了便于SDRAM控制器内部程序的编写,方便控制器的升级与维护。在控制器与SDRAM接口中地址接口有BANK地址和行列地址。控制系统接口与SDRAM接口如表1所示。 表1 控制系统接口与SDRAM接口 控制系统接口 SDRAM接口 接口信号 信号说明 接口信号 信号说明 接口信号 信号说明 CLK 时钟信号 W_ACK 写应答 CS_N 片选信号 RESET_N 复位信号 R_ACK 读应答 CKE 时钟有效 CMD 操作命令 D_REQ 数据请求 SDR_CON 组合控制 ADDR 操作地址 D_VALID 数据有效 BA BANK地址 DM 数据掩码 DATAIN 输入通道 SA 行列复用地址CMDACK 非读/写应答 DATAOUT 输出通道 DQM 数据掩码 - - - - DQ 双向数据通道3 存储控制器功能算法设计与仿真 读写指令是SDRAM控制器使用最频繁的指令,读写方式及读写延时直接关系到数据效率的提高。 3.1 支持高数据效率的连续读写操作 常规SDRAM控制器的读写操作是在读写操作前由控制器执行一条激活指令,将所要存取的行打开,然后执行读写操作,读写操作完成后由控制器自动执行一条预充电命令将当前所打开的行关闭[5]。若在SDRAM控制器中每次读写操作都要插入预充电与激活命令,则会造成时序的浪费,数据效率将变得很低。为了解决该问题,将SDRAM的读写指令分带预充电与激活的读写和不带预充电的读写2种指令,同时在FPGA中设计有限状态机对2种指令进行有效控制。 图3为读写控制状态机,初次读写与换行连续读写的读写命令是一样的,都会由控制器自动插入一个预充电命令跟激活命令。不同的是,初次读写时其他指令的状态是未知的,可

能在响应读写命令的时间会比较长,且其时间是根据正在执行的指令状况而定的。换行连续读写的间隔时间是一致的,数据中断时间固定。同样,同行不连续读写与同行连续读写所用的读写命令是一样的。不同的是,同行不连续读写在每次读写完成后不是马上进行下一次的读写操作,而是执行一定时间的空操作,造成中间数据的中断,但其执行下一次读写操作时同样不用再插入预充电与激活命令。当上次执行操作与当前所要执行的操作不是同行读写操作时,译码生成带预充电和激活操作的读/写指令。这种指令在执行前先插入预充电命令,将上次操作所打开的行关闭,插入一个激活命令,再将当前要存取的行打开,最后才执行读/写操作,此时会造成3个系统时钟周期的浪费。 图3 读写状态机 当上次执行的操作与当前所要执行的操作是同一行中的读写指令时,译码生成不带预充电和激活的读写指令。由于当前所要存取的行已经在上次操作时打开,因此这种指令不用控制器插入预充电和激活操作,直接执行读写操作即可。这样可以实现读写数据的连续而不中断,数据效率可以接近100%。 根据上述内容设计读写操作代码,限于篇幅,只给出确定内部预充电到激活时间内设置执行激活操作的标志位的实现算法,其中,pch_shift和act_shift分别为预充电操作的移位执行寄存器和激活操作的移位执行寄存器。 always @ (posedge clk or negedge reset_n) begin if(reset_n==0) begin pch_shift≤0; do_act≤0; end else begin 设置读写预充电开始到激活进行的延时 if((do_readp==1)∣(do_writep==1)) begin pch_shift≤4’b1 000; do_act≤0; end else 执行延时,延时完成时执行激活操作 begin do_act≤pch_shift[0]; pch_shift[2:0]≤pch_shift[3:1]; pch_shift[3]≤0; end end end —217—

3.2 读写操作延时分配策略 读写指令是存储控制中最常用的指令,读写指令的延时直接关系数据效率的提高。工作中读写指令不能和非读写指令分配的最大延时时间一致,必须根据读写操作的猝发长度分配延时时间。在连读连写时,将读写操作的延时设为最小,使延时时间与读写一次猝发的时钟周期一致。只有分配的读写指令延时时间与读写指令完成时间一致,才会使数据效率达到最高[6]。 3.3 数据通道与读写操作协制 在写操作时,控制数据由用户系统经控制器流向SDRAM芯片,在读操作时,数据由SDRAM芯片经控制器流向用户系统。数据控制与读写控制是分开的,受到猝发长度影响,不同情况会有不同延时。两者合理控制是保证数据存储可靠性,提高数据存取的效率的保证。为了实现该目标,通过一个“oe”信号对数据通道进行控制,“oe”信号控制 如下: if(sc_pm==0) begin if(((do_rw_pch==1)∣(do_rw_npch==1)&(rw_flag==0)) 根据猝发长度设置oe长度 begin if(sc_bl==1) 猝发长度为1,移0位 oe_shift≤0; else if(sc_bl==2) 猝发长度为2,移1位 oe_shift≤1; else if(sc_bl==4) 猝发长度为4,移3位 oe_shift≤7; else if(sc_bl==8) 猝发长度为8,移7位 oe_shift≤127; oel≤1; end else 输出数据通道控制oe信号 begin oe_shift[5:0]≤oe_shift[6:1]; oe_shift[6]≤0; oe1≤oe_shift[0]; oe≤oe1 end end 3.4 控制器功能仿真 利用Modelsim软件进行功能仿真。观察以下2种仿真波形,分析设计功能是否实现。 (1)8长度连续猝发写仿真。猝发长度为8的连续写操作的波形如图4所示。由图4可以看出,除了初次写操作要插入预充电与激活操作外,连续写操作就不用这2个额外操作,这样就实现了数据的连续。每一次猝发写都要提供猝发的初始地址,图4的地址addr端口数值变化跟该原则完全相符。每当一个写请求应答信号到来后的下一个时钟上升沿时,地址信号会改变一次,从而将下一笔数据写在不同地址上。这点与设计预期完全相符,说明设计正确。 —218

— 图4 8长度连续猝发写波形 (2)自动刷新对连续猝发的影响仿真。在连续猝发写过程中,遇到自动刷新操作的波形如图5所示。在连续猝发写操作时,当遇到自动刷新请求时控制器插入自动刷新操作。由于自动刷新操作将当前写操作中断,因此再继续写过程要先进行预充电与激活操作。由于控制器插入了自动刷新、预充电和激活操作,占用了16个时钟周期,因此写操作数据被中断了16个时钟周期,这与刷新请求优先级比读写操作优先级高的设计预期相符,说明设计正确。自动刷新操作对连续猝发读操作及其他猝发长度的连续猝发写操作的影响是相同的。 图5 自动刷新对连续猝发写影响的波形 4 结束语 采用ProASIC3 FPGA设计SDRAM控制器,其最高时钟频率达到1.177 MHz;IGLOO系列FPGA芯片上的控制器时钟频率为105.574 MHz。本文设计的存储控制器数据宽度可通过改变参数宏的方式快速改变,灵活适应不同位宽的SDRAM芯片。 参考文献 [1] 王 斌, 熊志辉, 陈立栋. 具有时间隐藏特性的数据块读写

SDRAM控制器[J]. 计算机工程, 2009, 35(4): 244-246.

[2] Wang Xiaohui, Zhao Yiqiang, Xie Xiaodong. Design and

Implementation of an Efficient SDRAM Controller for HDTV Decoder[J]. High Technology Letters, 2007, 13(4): 402-406. [3] 石振明, 王 成, 陈蜀宇. 基于FPGA的DDR SDRAM控制器设

计[J]. 微处理机, 2008, 6(12): 22-24.

[4] 潘光荣, 王 沁, 齐 悦. 面向逻辑设计的SDRAM控制器性

能度量模型[J]. 计算机应用研究, 2009, 26(9): 3432-3435.

[5] 王立欣, 刘双宝, 刘 雷. 基于CPLD的SDRAM控制器[J].

电子器件, 2004, 27(4): 676-679.

[6] 于银涛, 赵 昕, 乔丽萍. SDRAM存储器的交错机制及其应 用[J]. 计算机工程与设计, 2008, 29(21): 5468-5472.

编辑 陆燕菲

因篇幅问题不能全部显示,请点此查看更多更全内容