《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 业界动态 > 基于DDR SDRAM的高速数据采集系统的设计

基于DDR SDRAM的高速数据采集系统的设计

2009-06-23
作者:方庆山1,林春方2

    摘 要:采用DDR SDRAM作为被采集数据的存储体,研究了DDR SDRAM在高速数据采集系统中的应用,分析了DDR SDRAM的工作模式,给出了一种基于DDR SDRAM的高速数据采集系统的设计框图,研究了高速、大容量存储体的设计方案。结合高速数据采集系统的设计要求,重点研究了一种DDR SDRAM控制器的FPGA实现方法,简要介绍了控制器设计中各个模块的功能,最后给出了读/写控制模块对DDR SDRAM的读操作仿真时序图。
    关键词:数据采集; DDR SDRAM; 工作模式; 控制器

 

    实现数据的高速大容量存储是数据采集系统中的一项关键技术。很多数据采集系统,特别是应用于图像采集处理等领域的高速数据采集系统,都需要高速缓存大量的数据。DDR SDRAM由于速度快、容量大、价格便宜,能够很好地满足上述场合对大量数据缓存的需求。双倍速率同步动态随机存储器DDR SDRAM(Double Data Rate SDRAM),是在SDRAM的基础上发展而来的,能够在时钟上升沿和下降沿各传输一次数据,可以在与SDRAM相同的总线时钟频率下达到更高的数据传输率。
1 DDR SDRAM在高速数据采集系统中的应用
    目前,数据采集与处理的重点在于高速、高精度、高存储深度的数据采集系统的研究。由于A/D转换芯片及高性能FPGA芯片的出现,使得高速、高精度的数据处理得以实现,因而大批量、高存储深度的数据处理成为当前要解决的主要问题。图1所示为一种基于CPCI总线的高速数据采集系统结构框图[1]

 


    外部信号首先经过模拟信号调理通道达到A/D芯片的输入要求,再通过A/D芯片将模拟信号转换成数字信号送入FPGA进行处理。当处理器发出“写命令”时,将数字信号在FIFO内部进行缓存再送入DDR SDRAM进行存储。考虑到写入FIFO的时钟速率大于读取FIFO的时钟速率会导致从A/D采样过来的信号不能完整地存储,可采用数据分流的方式予以解决。即把采入FPGA的数据流分成2路数据流,分别存入相应的FIFO内,再分别读出送到DDR SDRAM存储,在存储过程中通过DDR SDRAM的控制模块和FPGA内部自带的IP核的配合完成。当处理器发出“读命令”时,在控制模块的控制下将DDR SDRAM内部数据读回FPGA内部,再次通过FIFO进行缓存,然后送回处理器处理。在整个数据处理过程中,关键是对DDR SDRAM的存储进行有效的控制,以保证有足够的数据可进行分析处理,从而重现信号特征。
2 DDR SDRAM的工作模式
    DDR SDRAM 支持的常用命令有7 种:空操作(NOP)、激活操作(Active)、突发读(BurstRead)、突发写(BurstWrite)、自动刷新(Autorefresh)、预充电(Precharge)以及模式寄存器配置(Mode Register Set)。所有的操作命令都是通过信号线RAS_N、CAS_N、WE_N 共同控制来实现的。在对DDR SDRAM 进行存取数据操作之前,首先要对其初始化,即设置DDR SDRAM的普通模式寄存器和扩展模式寄存器,确定DDR SDRAM 的工作方式。这些设置包括突发长度、突发类型、CAS潜伏期和工作模式,以及扩展模式寄存器中对DDR SDRAM 内部延迟锁定回路(DLL)的使能与输出驱动能力的设置[2]
    初始化完成之后,DDR SDRAM 便进入正常的工作状态,此时可对存储器进行读写和刷新。所谓DDR的双倍速率结构,即在数据随路时钟的上升沿和下升沿各发送一次数据,这样在一个时钟周期内可完成双倍速率的数据传输。图2是“写模式”下的工作时序图。对DDR SDRAM进行写操作时,首先通过外部控制模块(FPGA)对DDR送写命令和操作地址,然后第1个正确的数据将在数据选取脉冲DQS的上升沿进行存储,接下来的数据将在DQS的连续时钟沿上进行存储,根据DDR SDRAM的时序要求在“写模式”下,写命令和随路时钟的第1个上升沿要有一个固定的时间间隔tDQSS

 


    对DDR SDRAM 的读操作和写操作是基于突发的,DDR SDRAM 提供的可编程读/写的突发长度为2、4 或8。数据的存取以一个激活命令(Active)开始,接着便是读(BurstRead)或写(Burst Write)命令。与激活命令一起被触发的地址位用来选择将要存取的区和页(或行),与读/写命令一起被触发的地址位用来选择突发存取的起始列单元。读命令被触发后,数据将在1.5~3 个时钟周期之后出现在数据总线上,这个延迟就是所谓的CAS 潜伏期。CAS 潜伏期的大小与SDRAM 的速度和存储器的时钟频率有关。当要存取一个不同行的地址单元时,需要通过一个预充电(Precharge)操作关闭当前行。自动刷新(Autorefresh)命令用来周期性地刷新DDR SDRAM,以保持其内部的数据不丢失[3]
3 DDR SDRAM 控制器的设计
    DDR SDRAM控制器的功能是初始化DDR SDRAM;简化DDR SDRAM复杂的读/写时序;将DDR SDRAM接口的双时钟沿数据转换为单时钟沿数据;产生周期性的刷新命令来维持DDR SDRAM内的数据不丢失。DDR SDRAM提供了多种命令,整个控制状态机非常复杂。但很多应用场合中,并不需要用到所有的命令,为了简化设计,同时兼顾尽可能多的应用场合,在控制器的设计中实现了如下几种功能:DDR SDRAM初始化、可变长度突发读/写、自动刷新功能、预充电以及模式寄存器的重置。图3为控制器整个状态转换图[4]

 


    根据图3的状态转换关系,DDR SDRAM控制器包含以下几个模块:时钟生成模块、初始化模块、刷新模块、读/写控制模块以及地址生成模块。图4给出了控制器的结构框图。

 


    时钟模块用来产生工作时钟提供给整个DDR SDRAM控制器以及外部的存储芯片;初始化模块完成DDR SDRAM初始化过程所需的各项操作,配置相应的寄存器,使得在初始化完成后,DDR SDRAM能工作在所期望的模式;刷新模块用来计数,定时向读/写控制模块发送自动刷新请求;读/写控制模块用来控制数据在FIFO之内读/写,并完成激活、刷新、预充电等命令;地址生成模块用来提供各种操作所需的地址信息[5]
    该控制器针对16?bit宽512 Mb的DDR SDRAM设计,在Altera公司的Quartus II4.2环境中采用CycloneII系列的EP2C35来实现,总共使用了729个逻辑单元,占FPGA可编程逻辑资源的12%,此外还使用了1个锁相环(PLL)。设计中,在Quartus II4.2环境中分别对以上各个组成模块设计,并进行了最后的时序仿真验证,使其满足设计的要求。图5给出了读/写控制模块设计时的读操作仿真时序图。

 


    其中clk是时钟信号,reset_all是复位信号,init_end是初始化完成标志,ext_ref_cnte是输出,表示使能外部的刷新模块,ref_req是外部刷新请求,rd_req是外部读请求,cmd是响应操作的命令代码,rd_wr表示当前的状态为读还是写,fifo_wr_en是FIFO的写使能,表明读操作的数据可以写入到FIFO中。
    基于DDR SDRAM的高速数据采集系统在应用中有很大的实际意义,它提高了系统的可靠性和数据的存储深度,在一定程度上有效地减小了电路的尺寸。DDR SDRAM已经被应用于视频采集、内存设计等多个领域,其关键技术是时序控制模块的设计。
    本文给出了一种通过FPGA实现对DDR SDRAM控制的方法。设计中采用Altera公司的Cyclone系列FPGA,并充分利用片内提供的锁相环、DDR触发器以及DQS延迟链等硬件资源,占用的逻辑资源少。该设计可以很容易地移植到Altera公司的其他系列FPGA上,经过适当的修改还可以用来控制64位宽的DIMM型的DDR SDRAM,因此可以更好地应用在需求高速度、大容量存储器的场合中。

参考文献
[1] 吴健军,初建朋,赖宗声. 基于FPGA的DDR SDRAM控制器的实现[J]. 微计算机信息,2006,22(1-2):164-165.
[2] 李莺. DDR SDRAM控制器的设计及FPGA实现[J]. 攀枝花学院学报,2007,24(6):33-37.
[3] 郑佳,李永亮,李娜. 基于FPGA的DDR控制器的实现[J]. 无线电工程,2007,37(10):27-29.
[4] 刘瑰,朱鸿宇. 通用DDR SDRAM控制器的设计 [J]. 微型机与应用,2004(8):23-24.
[5] 薛林.高速PCI数据采集卡的设计与实现[D] . 南京:南京理工大学,2006.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。