DDR3基本概念4 - 预充电和刷新,以及Lattice DDR3 SDRAM controller实战注意事项

Prechage:需要precharge的原因,关闭当前行,打开新行时,要求新的bit line充电到VDD/2。具体原理参见:https://blog.csdn.net/tbzj_2000/article/details/88042986 DDR3基本概念1 - 存储单元结构和原理

Refresh:存储单元的电容,最大保持电平时间为64ms(温度小于85度),或32ms(温度大于85度)。完成一次刷新的时间,为110ns到 70200ns之间。参考DDR3 规范的命令真值表,分成refresh和self-refresh两种命令。
refrech用于在正常的读写命令间插入刷新命令。而self-refrech用于DDR空闲时,用于自刷新。两种命令执行时,DDR都不再可读写,直至命令完成或模式终止。DDR3规范规定,DDR memory 有一个深度为8的refresh queue,可接收最多8个refresh命令。

Lattice DDR3控制器应用实战

I)refresh

在Lattice IP core的DDR3 SDRAM controller v3.1的配置窗口的setting页面有一个Auto Refresh Control栏,有两项配置。
  1)配置1:Auto Refresh Burst Count
    1~8可配置。
    说明:
    a)参照DDR3 的JESD79-3F-DDR3 标准文档的“4.15 refresh command”一节,提到“A maximum of 8 Refresh commands can be postponed during operation of the DDR3 SDRAM”。为了满足标准中的该规定,所有的DDR3内存颗粒,最多可接收8个连续的Refresh命令。
    b)注意此中的“Auto”和DDR3 的“Self Refresh”命令的区别。Lattice 的DDR控制器使用了一个“Precharge all banks”命令({CS#, RAS#, CAS#,WE#}=4'b0010;A10=1),加上几个refresh命令({CS#, RAS#, CAS#,WE#}=4'b0001)来构建一个Auto Refresh Burst命令。busrt个数就是用“Auto Refresh Burst Count”来设定的。

  2)配置2:External Auto Refresh Port
   若使能了该选项,则Auto refresh需要通过DDR 控制器的ext_auto_ref端口来使能。使能后,在完成一次auto refresh之后,DDR控制器返回给用户一个ext_auto_ref_ack信号。
   若未使能,则DDR控制器会自动发起auto refresh命令。对于用户来说:
   - 通过侦测cmd_rdy信号是否被拉低多个系统时钟sclk周期以上来判断是否暂停对DDR的读或写
   - 由于auto refresh时无法执行DDR的读和写,要求外部有足够的FIFO可缓存对DDR的读和写数据、命令等

未使能external auto refresh port做refresh时,会出现各种问题,例如:
   用户发起一次burst写后,还未结束前DDR控制器就启动了auto refresh。由于该操作是自动启动的,用户只有在检测到cmd_rdy信号为低多个周期以上时才知道auto refresh已启动,此时burst写已执行了一部分,若撤销,涉及fifo读使能、读指针以及已读出数据的保存等诸多问题。而且判断cmd_rdy多个周期以上为低作为auto refresh是否已启动会误判,因为其他的操作忙时也会拉低cmd_rdy信号,因此不使用“External Auto Refresh Port”的方法没有太大的实用意义。

    故需使能External Auto Refresh Port,从而可由用户来控制启动auto refresh, 而且可根据ack反馈信号来重新启动DDR读写操作,有效避免了已启动读写命令被中断的情况发生。

    另外在产生auto refresh时间的前后一段时间,设定一个期间,使得在实际发出auto refresh前,已发出的DDR读写操作已完成。

II)precharge
  相对来说precharge较容易处理。不需要复杂的逻辑控制、缓存资源。
  1)在Auto refresh burst命令执行时,发起了“precharge all banks”命令,建议采用每访问完一个bank的一行,则切换至下一个bank的另一行。通过这种方式就不需要在每行结束时,发起一次read or write with precharge命令。
  2)采取1)中存储策略后,可以看到每次的行切换(其实也是bank切换),只需要发起一次ACT命令(即更新bank地址和行地址),不需要precharge命令。

你可能感兴趣的:(芯片设计,DDR,3,从基本原理到实战)