SDRAM学习(一)之刷新心得

本篇博文共有两种刷新方式

SDRAM数据手册给出每隔64ms就要将所有行刷新一遍,

因此每隔64_000_000 ns/2^12=15625ns 就要刷新一次。(因为一个L-Bank的行是12位,所以一共有2^12行)。

假设我的时钟频率是100Mhz(一个周期是10ns),则只需要每隔1562个时钟周期刷新一次即可。

注意:这里最多隔 1562 个时钟周期就要保证至少刷新一次,言外之意,我可以隔小于1562的时钟周期就刷新一次,这样也是可以的,

因此,在设计刷新操作的时候可以利用这个特点。

1、例如在full-page模式下利用这个特点进行刷新设计,

SDRAM 初始化完成后,每隔一定的刷新时间就执行刷新操作,但是当刷新时间到了还不够,还必须处于IDLE状态时,才能执行刷新操作。

那么这个刷新时间要怎么计算呢?

刷新有可能出现的情况为

刷新时间到了,刚好处于 IDLE 状态,那么就立即执行刷新操作。

刷新可能出现最坏的结果为,刷新时间到了,但是此刻我没有处于 IDLE 状态,而是刚好处于读或写,这时我就需要等待直到IDLE状态时才执行刷新操作。

因此我们要保证的是  刷新时间+需要等待的时间<=1562.

这两个时间如何确定呢?

因为是全页模式的读写,则突发长度为2^8,需要256个时钟周期,

如果是读,则需要等待的时钟周期为 激活时间(tRCD)+ CAS Latency (tCL)+ 256 +预充电的时间(tRP)

如果是写,则需要等待的时钟周期为 激活时间(tRCD)+  256 +预充电的时间(tRP)

tRCD、tCL、tRP都可以从 datasheet 中获得,因此需要等待的时间就能算出来。

1562 - 需要等待的时间 = 刷新时间。

2、第二种刷新方式:刷新计数器计数到刷新时间1562时,设立一个刷新标志位 refresh_flag =1,当状态机在 IDLE 状态时且 refresh_flag =1则响应刷新操作。刷新计数器设立刷新标志位后立即又从零开始计数,不再等待。

第二种刷新方式更灵活一些。

转载请注明出处:http://www.cnblogs.com/aslmer/p/5893525.html 

原文地址:https://www.cnblogs.com/aslmer/p/5893525.html