DDR内存接口的设计与实现

2007-06-22 13:13:24来源: 微计算机信息

1.引言

在当今的电子系统设计中内存被使用的越来越多,用来存放数据和程序。并且对内存的要求越来越高,要求内存读写速度尽可能的快,容量尽可能的大。面对这种趋势,设计实现大容量高速读写的内存显得尤为重要。

本文结合笔者承担的T比特路由器项目,对其中的大容量高速DDR内存接口的设计实现进行了详细阐述。本文第2节对与DDR内存相关的知识做了简单的介绍,从总体上对DDR内存有个认识;第3节阐述了DDR内存接口模块的整体设计;第4节对整个设计中的关键设计地址产生逻辑进行了详细阐述;最后总结全文。

2.DDR内存相关知识介绍

DDR SDRAM是双数据率同步动态随机存储器的缩写。它能够在一个时钟周期内传送两次数据,也就是说数据速率是时钟频率的两倍,可以达到很高的数据读写速度。此外它通过对地址线的分时复用,可以做到很大的容量。比如我们设计实现的DDR内存时钟频率可达到150MHz,数据速率为300MHz,容量达到1M x 72bit。

DDR内存为了更精确的同步使用若干对差分时钟;它还有一个独特的数据脉冲信号(DQS)。DDR内存就是根据DQS来分割一个时钟周期内的两次数据。更需要注意的是:DDR内存没有一个信号是发送读或写的明确命令的,而是通过芯片的可写状态来达到读/写的目的。具体为:片选信号(CS),行地址有效信号(RAS),列地址有效信号(CAS),写允许信号(WE)。它们都是低电平有效,它们的不同组合构成了对DDR内存的不同命令。比如CS,CAS有效,RAS无效,WE无效,表示从现在地址线指示的存储单元处读出一个数据放到数据线上;再如CS,CAS有效,RAS无效,WE有效,表示将数据线上的数据写入现在地址线指示的存储单元处。

DDR内存可以支持突发读写,并能根据不同的需要选择不同的突发长度(BL);位宽也可以选择,并能利用掩码技术灵活的选择每次读写的有效数据宽度(以8bit为单位);此外由于DDR内存读写时需要先激活(Active)将要读写的存储单元行,然后再读写,但DDR内存任何时候只能有一存储行是打开的(处于激活态),因此在需要读写不同存储行时,要先关闭前已打开的存储行,才能打开现在将要读写的存储单元行,这一操作被称为预充电(precharge)。另外由于DDR内存是动态存储器,需要对存储体进行周期性的刷新(refresh)。

从上面的介绍中可以看出DDR内存的性能虽然好,但接口控制很复杂。为了快速实现DDR内存接口,缩短设计周期,我们使用已经成熟的商业化内存控制器 IP 核对DDR内存进行控制。我们使用的是Altera公司的DDR Controller IP核,版本为2.2.0,使用的开发工具为Quartus II 4.1,使用VHDL语言进行描述。

3.独立内存接口模块整体设计

为了将内存接口模块设计成相对独立的模块,也为了调整不同模块之间的时钟相位差,使数据稳定输入输出,我们给DDR内存接口模块前端增加了一个入口FIFO,出口增加了一个出口FIFO。我们的功能需求是根据出口FIFO的状态确定是否将数据送往DDR内存条中进行缓存,并且设计中必须充分考虑DDR内存条存储器带宽的利用效率,设计成批量读写的模式,减少读写切换工作的开销。该内存模块具体完成以下功能:

1)使用DDR控制器IP核完成对DDR内存的初始化配置,产生读写命令和其他各种控制信号;
2)根据出口FIFO状态产生对DDR内存接口的读写请求;
3)并且整个系统对数据的缓存处理应该公平,不能有系统差别,也就是说要保证在任何情况下读出的数据都是有效的数据,写入的数据不覆盖DDR中的原有效数据;DDR内存接口模块主要功能由DDR控制器IP核完成,对DDR内存进行初始化配置,产生读写命令和其他各种控制信号。DDR控制器有两个接口:DDR-interface和local-interface。DDR-interface直接与DDR内存条相连,不需要干预。local-interface就是根据不同需要输入不同信号,可以增加自己的逻辑。我们需要设计的逻辑就是产生读写请求信号和对应的地址信息送给DDR控制器,DDR控制器把这些请求转换为对DDR内存的数据读写。因此DDR内存接口模块的重点是对地址产生逻辑的设计。我们的内存模块设计框图详见图1。

 

图1 DDR内存接口模块设计框图

4.内存读写地址产生逻辑的FPGA设计实现

根据本模块的功能需求,在出口FIFO的状态为忙时,要将数据送往DDR内存条缓存,当出口FIFO的状态为非忙时,要将数据从DDR内存条读出送到出口FIFO。并且设计必须充分考虑DDR内存条存储器带宽的利用效率,设计成批量读写的模式,减少读写切换工作的开销。出口FIFO的状态能由门限信号th1和th2反映出来,从而根据th1和th2反馈控制地址产生逻辑。

此外还要注意数据的次序,要保证对数据的公平处理,不能对数据造成系统差别,因此整个DDR内存逻辑上是一个循环队列。还要保证:DDR内存满时,不应再写DDR内存;DDR内存空时,不应再读DDR内存。DDR内存的空满对地址产生逻辑也有重要影响。

从上面分析中看出:对地址产生逻辑有影响的信号是出口FIFO的状态指示信号th1和th2,DDR内存的空满信号;输出信号为对DDR内存的读请求rd_req和写请求wr_req,地址addr。规定:th1=1表示出口FIFO几乎空,出口FIFO状态为非忙,可以对DDR内存发出读请求,直到th2=1为止;th2=1表示出口FIFO几乎满,出口FIFO状态为忙,可以对DDR内存发出写请求,直到th1=1为止。

DDR内存的空满由读写地址的比较得出,并且要提前几个时钟周期置出。非空标志由这样的地址比较得出:rdaddr/= wraddr-2 and rdaddr/= wraddr-1 and rdaddr/=wraddra;非满标志由这样的地址比较得出:wraddr+2/=rdaddr and wraddr+3/=rdaddr and rdaddr/= wraddr+1。
读请求rd_req产生条件是: ①DDR内存非空,DDR内存满且th2=0;
②DDR内存非空,DDR内存非满且th1=1至th2=1。
写请求wr_req产生条件是:①DDR内存非满,DDR内存空;
②DDR内存非满,DDR内存非空且th2=1至th1=1。

DDR内存模块的地址产生逻辑使用VHDL语言在Quartus II 4.1上实现,最后编程例化到Altera公司的Stratix GX系列FPGA中物理实现。具体仿真波形详见图2。


图 2 DDR内存模块地址产生程序的信号仿真波形

仿真说明:输入时钟为150M,复位信号高有效,ready为DDR控制器准备好信号,th1=1表示出口FIFO几乎空,在DDR内存非空时,应该读DDR内存;th2=1表示出口FIFO几乎满,在DDR内存非满时,应该写DDR内存;输出数据为读请求信号rdreq,写请求信号wrreq,输出地址信号ddraddr(为仿真方便,仿真时的地址位宽设定为5bit)。

通过仿真从Quartus II 4.1的报告中可以看到如此设计的时钟可以最高达到162.92MHz,符合设计要求的150MHz。其它功能要求也能满足。

5.结束语

本文根据电子系统对高速大容量内存的需要,使用成熟商业化DDR控制器IP核来设计独立的DDR内存接口模块,不仅能从控制的细节中解脱出来,专注于系统的关键功能设计,并且能够获得更高的性能,完全满足我们的功能性能需要。经测试该设计性能稳定,整个工作流程简单实用,符合设计要求。

参考文献
1 stratix_GX_datasheet. Altera公司,2003
2 Double Data Rate(DDR)SDRAM Handbook.Micron公司,2004
3边计年,薛宏熙.用VHDL设计电子线路.北京:清华大学出版社,2000

关键字:容量  周期  动态  时钟

编辑: 引用地址:http://www.eeworld.com.cn/designarticles/others/200706/14298.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
容量
周期
动态
时钟

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved