新闻中心

EEPW首页>EDA/PCB>设计应用> 基于FPGA的高速SDRAM控制器的视频应用

基于FPGA的高速SDRAM控制器的视频应用

作者: 时间:2009-09-15 来源:网络 收藏

刷新命令是对内的数据完成再生的操作,因为采用电容存储数据,而电容存在漏电的现象,因此需要隔一段时间对电容作一次刷新(即重新充电),一般来说要求64ms内将的所有行都刷一遍。SDRAM有两种刷新命令:自动刷新和自刷新。自刷新是在芯片处于低功耗状态下时才使用的方式,芯片内部自动完成刷新操作。自动刷新是发起的刷新操作,它必须在SDRAM没有激活行时才能进行刷新操作,而且需要占用一定的时间(大约 60~70ns)。可以根据需要选择在何时刷新,即定时刷新,或集中刷新。定时刷新是隔一段时间就刷新一次;集中刷新是在某一段空闲时间内连续刷新若干次。这个只要保证在64 ms内将所有的行都刷一遍即可,具体的刷新方式可以根据自己的应用需要来设计。

本文引用地址://m.amcfsurvey.com/article/191928.htm

2 SDRAM的设计
2.1 SDRAM控制器的设计思路
SDRAM芯片完成一次读写操作由三个命令组成:激活、读/写、预冲。读写数据的突发长度往往是有限制的,在SDRAM芯片本身提供的突发长度最大只能达到一行的容量(256,即全页突发模式)。这样当一次读写突发长度结束后,如果需要发起下一次读写,就需要发预冲命令结束这一行,然后发激活命令开启下一行。这样才能开始写下一次数据。因此,如果想要连续的数据读写,就必须想办法节省激活和预冲命令。
激活命令通过切换Bank操作来完成。SDRAM有4个独立的bank,每一个bank可以同时允许有一行激活,彼此并不会相互干扰。这样的话,在同一时刻最多可以有4个行处于激活状态。这就为节约激活时间提供了解决方案:在突发读写一个bank下的某一行时,可以在突发长度结束之前提前激活另一个 bank下的某一行。这样当这个突发长度结束时就可以直接读写另一bank中被激活的行。预冲可以采用自动预冲方式来完成,不需要额外的预冲命令。
通过上述两种操作方式可以完全实现超长突发长度的数据读写,本设计将SDRAM设置成突发长度为8,突发长度结束后采用自动预冲方式完成此行的预冲操作,具体设想如下:
在写SDRAM时,先激活Bank0的第一行;发出带自动预冲模式的写操作;数据开始写入这一行内;一段时间后(在突发长度结束之前)将Bank1的第一行激活;在Bank0的写突发长度结束的同时,发出写Bank1的命令,这样接下来的数据就写入Bank1的第一行中;而由于在写SDRAM的Bank0 时设置成自动预冲模式,所以SDRAM会在Bank0的写操作结束后自动预冲,经过tRP(预冲时间)后,这一Bank自动回到idle状态。同样 Bank1处于写突发长度时将Bank2的第一行激活,在Bank1的写突发长度结束的同时发出写Bank2的命令……如此四个bank轮流工作,将数据均匀地分配到4个bank中。
对于这种超长的数据突发读写,完成一次读写操作所花费的时间比较多,例如读写时钟是108MHz时,一次突发长度是1280的写操作所花费的时间是11. 6 μs,即在这段时间内SDRAM的数据总线是不能被中断的。因此采用集中刷新是最好的解决办法。在突发读写结束后,会有一段比较长的空闲期(具体时间长度根据视频数据的视频中行消隐数据个数和读写时钟决定),在这段时问内可以集中连续发出多个刷新命令,只需要保证在64ms内总的刷新次数达到了要求即可。
2.2 SDRAM控制器的实现
本设计中将SDRAM控制器分成4个子模块:sdr_master主控模块、sdr_ctrl命令模块、sdr_sig译码模块、sdr_data数据通路模块,见图2。sdr_master主控模块根据外部的读写请求向sdr_ctrl命令模块提供各种读写控制信号;sdr_ctrl命令模块内部的控制状态机会依此发出各种SDRAM读写控制命令;sdr_sig译码模块会把sdr_ctrl输出的控制命令译码成符合SDRAM接口的信号。此SDRAM 控制器的设计,最复杂的部分在于如何设计SDRAM的工作时序,即SDRAM何时激活,何时读/写,何时预冲,何时刷新。这些控制除了满足SDRAM的工作特性外,还要满足设计要求。因此,鉴于SDRAM控制的复杂性,一般都采用状态机来控制。本设计中sdr_ctrl命令模块包括两个状态机:初始化状态机完成SDRAM的初始化;控制状态机完成SDRAM的正常工作控制。下面分别详述这两个状态机的设计。

初始化状态机的结构见图3。系统在上电(复位)后,处于i NOP状态;当等待了100 μs后,状态跳转到i PRE,发出预冲命令;接着跳转到i tRP等待;经过tRP时间后,状态跳转到i_AR1,发第一次刷新命令,然后在i_tRFC1等待tRFC时间后发第二次刷新命令,再等待tRFC;接下来转到状态i MRS,发装载模式字命令,然后等待tMRD时间后初始化完成,进入i_ready状态。至此初始化完成,SDRAM芯片就可以正常工作了。

控制状态机的状态跳变见图4。此状态机是为了满足超长数据的连读或连写而特殊设计的。上电后处于c_idle状态,当初始化完成后,控制状态机才能开始正常工作。当外部要求进行读写操作时,会正式地启动状态机。此时状态机跳变到c_ACT状态,使SDRAM控制器发出激活命令;接下来两个状态 c_tRCD1、c_tRCD2是激活等待时间tRCD;然后状态机根据外部是读请求还是写请求,来决定下一个状态是发读命令还是写命令。下面以写数据为例进行说明,读数据的工作过程是一样的。



评论


相关推荐

技术专区

关闭