• 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 

  • 相关阅读:
    剑指Offer:面试题17——合并两个排序的链表
    剑指Offer:面试题16——反转链表(java实现)
    剑指Offer:面试题15——链表中倒数第k个结点(java实现)
    Timer和TimerTask 定时器和定时任务
    Spring-WebSocket 教程
    单点登录原理与简单实现
    Python机器学习:泰坦尼克号获救预测一
    转 smarty学习笔记电子版整理
    转 nodejs socket.io初探
    html5新增的属性和废除的属性
  • 原文地址:https://www.cnblogs.com/aslmer/p/5893525.html
Copyright © 2020-2023  润新知