新闻中心

EEPW首页 > 网络与存储 > 设计应用 > DDR SDRAM在嵌入式系统中的应用

DDR SDRAM在嵌入式系统中的应用

——
作者:模式识别与智能控制研究所 胡为 时间:2007-01-26来源:《单片机与嵌入式系统应用》收藏


引言

本文引用地址:http://www.eepw.com.cn/article/20848.htm

很多嵌入式系统,特别是应用于图像处理与高速数据采集等场合的嵌入式系统,都需要高速缓存大量的数据。ddr(double data rate,双数据速率)sdram由于其速度快、容量大,而且价格便宜,因此能够很好地满足上述场合对大量数据缓存的需求。但ddr sdram的接口不能直接与现今的微处理器和dsp的接口相连,需要在其间插入控制器实现微处理器或dsp对的控制。

随着密度与性能的不断提升,现场可编程门阵列(fpga)已被广泛应用于各种嵌入式系统中。而且,现在很多的fpgas都提供了针对ddr sdram的接口特性:其输入输出引脚都与sstl-ⅱ电气特性兼容,内部提供了ddr触发器、锁相环等硬件资源。使用这些特性,可以更加容易地设计性能可靠的高速ddr sdram控制器。

1 ddr sdram 在嵌入式系统中的应用

图1是ddr sdram在高速信号源系统中的应用实例。

在该系统中,由fpga的完成各模块之间的接口控制。fpga接收从前端传送过来的高速数字信号,并将其存储在ddr sdram中;dsp通过fpga读取ddr中的数据,处理后再送回到ddr sdram,最后由fpga负责将数据分两路输出。

该系统对存储器的要求是能够高速地存储大量的数据,ddr sdram正好能满足这一要求,此时,fpga是否能对ddr sdram进行有效控制就成为影响系统性能的关键。最后的试验结果表明,fpga是能够胜任这一任务的。

2 ddr sdram的工作方式

在ddr sdram能够被存取数据之前,需要先对其初始化。该初始化流程是预先定义好的。不正确的操作将导致无法预料的结果。初始化的过程中将设置ddr sdram的普通模式寄存器和扩展模式寄存器,用来制定ddr sdram的工作方式,这些设置包括突发长度、突发类型、cas潜伏期和工作模式以及扩展模式寄存器中的对ddr sdram内部dll的使能与输出驱动能力的的设置。模式寄存器可以被再编程,这时需要ddr sdram的各个区(bank)处于空闲状态,从而改变存储器的工作模式。如果操作正确,对模式寄存器的再编程不会改变存储器内存储的数据。

初始化完全之后,ddr sdram便进入正常的工作状态,此时便可对存储器进行读写和刷新。ddr sdram在一对差分时钟(clk与clkn;clk的上升沿与clkn的下降沿的交点被认为是clk的上升沿)的控制下工作。命令(地址和控制信号)在每个时钟(clk)的上升沿被触发。随着数据一起传送的还包括一个双向的数据选通信号,接收方通过该信号来接收数据。dqs作为选通信号在读周期中由ddr sdram来产生,写周期中由存储器控制器来产生。该选通信号与数据相关,其作为类似于一个独立的时钟,因此也需要满足相应的时序要求。读周期中,dqs与数据是边沿对齐的;写周期中,dqs与数据是中心对齐的。存储器输入的数据在dqs的两个沿都触发,输出的数据也是以dqs的两个沿作为参考,同时还要以时钟clk的两个沿作为参考。因此,由于接口在时钟的两个沿的触发下工作。其数据宽度(n)是存储器数据宽度(2n)的一半。图2描述了ddr sdram的工作方式。

对ddr sdram的读和写操作是基于突发的:从一个选定的地址单元开始,连续存取设置好长度的地址单元。该长度就是所谓的突发长度。ddr sdram提供的可编程的读或写的突发长度为2,4或8。数据的存取以一个激活命令(active command,ras_n low)开始,接着便是读(cas_n low)或写(cas_n low and we_n low)命令。与激活命令一起被触发的地址位用来选择将要存取的区(bank)和页(或行);与读或写命令一起触发的地址位用来选择突发存取的起始列单元。使用控制器读取ddr sdram的仿真波形示意图如图2所示。读命令被触发后,数据将在1.5-3个时钟周围之后出发在数据总线上。这个延迟就是所谓的cas潜伏期(cas latency),即从dram内核读出数据到数据出现在数据总线上所需要的时间 。cas潜伏期的到小与sdram的速度和存储器的时钟频率有关。

当要存取一个不同行的地址单元时,需要通过一个预充电(precharge)操作关闭当前行。自动刷新(auto-refresh)命令用来周期性地刷新ddr sdram,以保持其内部的数据不丢失。

3 ddr sdram控制器的设计

ddr sdram控制器的功能就是初始化ddr sdram;将ddr sdram复杂的读写时序转化为用户方简单的读写时序,以及将ddr sdram接口的双时钟沿数据转换为用户方的单时钟沿数据,使用户像操作普通的ram一样控制ddr sdram;同时,控制器还要产生周期性的刷新命令来维持ddr sdram内的数据而不需要用户的干预。

3.1 ddr sdram控制器的控制流程

ddr sdram提供了多种命令,整个控制状态机非常复杂。但很多应用场合中,并不需要用到所有的命令,因此为了简化设计,但同时又兼顾尽可能多的应用场合,在控制器的设计中制定了如下几种功能:ddr sdram的初始化、可变长度的突发读写,自动刷新功能,预充电以及模式寄存器的重置(reload)。图3是控制器整个状态转移图。

系统上电后,ddr sdram处于空闲状态(idle),在对存储器进行读写操作之前,需要先对其进行初始化。初始化的过程中,将设置突发长度,突发类型,cas潜伏期等参数。ddr sdram的初始化有一个固定的步骤,错误的操作将导致ddr sdram进入不确定状态。在控制器中使用了一个专门的初始化状态机来对ddr sdram进行初始化。

初始化完之后便可对ddr sdram进行读、写或其他操作。在执行读(写)命令之前,先要激活(active)将要读(写)的行,之后便可对该行进行突发读(写),在控制器的设计中,所有的读写命令都是不带预充电的,因此,某一行被激活之后将一直处于激活状态,直到用户发送突发终止命令,此时控制器将自动产生一个预充电命令来关闭当前行。这样,某一行被激活之后用户便可进行连续的突发读(写)操作,从而节省了每次突发读写所需要的激活时间,提高了系统的数据吞吐率。

控制器同时提供了一个自动刷新(auto refresh)计数器,每隔一定的时间间隔(即ddr sdra的刷新周期,根据所使用的存储器而定,可在控制器中设定),便会产生一个刷新请求,如果此时ddr sdram处于空闲状态,控制器便会发生一个自动刷新命令来对ddr sdram进行刷新;如果此时ddr sdram正在进行读(写)操作,控制器将会等到当前的读(写)操作完全之后再发送新命令。在刷新过程中,用户如果有读(写)请求,控制器将在当前的刷新周期完成之后再响应用户的请求。

正常的操作过程中,当ddr sdram处于空闲状态时,用户还可以根据实际的需要来重置存储器的控制寄存器,重新设定存储器的突发长度、突发类型、cas潜伏期等参数。

3.2 控制器数据通道的结构

图4是ddr sdram控制器数据通道的结构图。图4中完整的显示了控制器读和写数据通道上dq与dqs的结构关系。前面提到过,cyclone系列fpga没有带ddr触发器的输入输出单元,但完全可以用靠近输入输出引脚处的逻辑资源来实现ddr触发器,而且最后的结果表明,这种实现方式可以满足时序要求。

从图4中也可以看到,控制器内部有两个时钟,clk和clk_90,两者之间的相位差为90°。图中将面向存储器的时钟命名为clk。它是clk_90时钟的90°相位延迟后的信号。clk_90作为系统时钟来驱动整个fpga,clk时钟驱动存储器接口路。

3.2.1 dqs相位延迟电路

在读周期中,ddr sdram处输出的dq和dqs信号是边沿对齐的。为了使用dqs作为选通信号来捕获dq,dqs信号需要在fpga内部相对于dq信号作90°的相位延迟。但是这个延迟不能使用锁相环(pll)来完成,因为dqs信号不具有时钟的特性。因此,需要在dqs和数据时钟之间加一个延迟链(delay clain),如图4中所示。

前面提到过,cyclone系列fpga在其dqs输入引脚上有一个专用的延迟单元,用来使dqs相对于dq信号产生一个90°相移。因此,可以使用该硬核资源来完成对dqs的相移,而不必通过内部的逻辑来搭建这样一个延迟电路,从而可以获得更好的时序性能。

3.2.2 再同步

读周期中,从ddr sdram来的数据信号首先通过延迟后的dqs锁存到ddr触发器中。为了在fpga内部能够使用该数据,还要将其同步到fpga内部的时钟域上,这个过程称为再同步(resynchronization)。如图4所示,对于前一级dqs延迟后的信号锁存的数据再通过clk_90同步之后才送到内部数据总线上。

在写周期中,dqs与dq必须是中心对齐的(center align)。我们用clk_90时钟触发的ddr触发器产生dqs信号,因此,为了满足时序要求,从内部来的数据通过clk_90时钟锁存后再由clk触发的ddr触发器将其输出,从而保证dqs与dq是中心对齐的。

4 控制器的实现

该控制器针对16位宽512mb的ddr sdram设计,在altera公司的quartus ⅱ4.2环境中采用cyclone系列的fp1c6q240c6来实现,总共使用了729个逻辑单元,占fpga可编程逻辑资源的12%,此外还使用了1个锁相环(pll)。最后,在modelsim 5.8中对整个工程进行布局-布线后仿真(post-place&route simulation),采用的模型为micron公司的512mb的ddr sdram mt46v32m16的仿真模型,时钟为133mhz,图2是控制器读取ddr sdram的时序仿真波形。

5 结论

本文给出了一种通过fpga控制将ddr sdram应用在嵌入式系统中的方法。设计中采用altera公司性价比较高的cyclone系列fpga,并充分利用片内提供的锁相环、ddr触发器以及dqs延迟链等硬件资源,占用的逻辑资源少。该设计可以很容易地转移到altera公司其他系列的fpga上,经过适当的修改还可以用来控制64位宽的dimm型的ddr sdram,因此可以很好地应用在需求高速度、大容量存储器的场合中。



关键词: 存储器

评论


相关推荐

技术专区

关闭