前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DDR 学习时间 (Part B - 1):DRAM 刷新

DDR 学习时间 (Part B - 1):DRAM 刷新

作者头像
AsicWonder
发布2024-01-08 20:19:24
6770
发布2024-01-08 20:19:24
举报

Refresh,刷新是 DRAM 的一项重要特性,又被称为动态刷新(Dynamic refresh),而 Dynamic 就是 DRAM 中的 'D' 所代表的意思。DRAM 刷新与其结构息息相关。

DRAM 基本结构

我们知道 DRAM 使用电容 充电/未充电 两个状态来分别表示二进制的 1/0 符号。

拿小学数学题中的常客——水池来打比方,电容是一个水池,晶体管是这个水池的阀门。

小明是一个记忆只有 7 秒的熊孩子,数字他统共就认识两个:0 和 1。每次需要记下一个数字时,如果是 1 小明就用水装满池子( 1'b1 ),如果是 0 就把水全部放走( 1‘b0 )。非常不爱惜水资源,大家不要学他。

单个 DRAM 基本单元由一个电容和一个晶体管构成,称为 1-T 结构,请注意图中右边出现的第二个电容 CBL 并不是有意制造在存储单元中的,它其实是控制线 BL 的寄生电容。

相较于由 6 个或者更多晶体管组成的 SRAM, DRAM 具有结构简单的优点。简单的结构能够降低制造难度和提高良率,说中文就是:更便宜!

但是,命运馈赠的礼物,都早已在暗中标好了价格,DRAM 也不例外。单个电容和晶体管的简单结构有一个棘手的问题:漏电流。

不紧的阀门:漏电流

小明的记忆水池工作的关键在于有一个紧密不漏水的阀门。如果水池阀门漏水,那么小明面对一个干涸水池的时候,他是懵逼的:到底是本来没水( 1‘b0 ),还是本来有水但是全流光了( 1'b1 )?

不幸的是, DRAM 中的晶体管就是一个漏水的阀门。

由于制作工艺的影响,或者说这个世界上原本就不存在完美的晶体管,能够一丝不苟地实现开关功能,保证关断时没有电流流过。这些在关断时流过的电流称为漏电流,leakage current。

在没有任何 DRAM 操作的情况下,漏电流也会导致电容上的电荷随着时间流失。当电荷数量低于阈值时,DRAM 将无法正确地读取所存储的 1/0 数据。此时,数据就被没了(corrupt the data)。

DRAM 刷新

为了防止数据被破坏,为了使 DRAM 这一更廉价的存储介质可以得到普及,DRAM 设计中加入了动态刷新机制。

DRAM 刷新过程中,首先读取原本的数据,将电容的电平与参考电平进行比较,判断数据的 1/0 值后,再将原数据写回。写回的过程中将电容完全充满电荷(如果数据为 1),好比进行了一次充电操作。

DRAM 刷新每间隔一段时间进行一次,对随时间流失的电荷进行补充。

间隔的时间不能太长,间隔太长可能导致刷新时数据电平已经无法辨认。但间隔的时间也不能太短,因为充电期间不能进行正常的读写,过于频繁的刷新会导致 DRAM 的吞吐性能下降。

一般来说,间隔时间的下限由 DRAM 本身的属性决定,比如 DRAM 的容量密度、运行频率等。而间隔时间上限则由性能吞吐的需求决定。

DRAM 刷新命令

DRAM 刷新由控制器 (MC) 和 DRAM 颗粒内部电路共同实现。MC 以发送刷新命令的方式通知 DRAM 颗粒进行刷新;DRAM 颗粒内部电路则负责进行刷新操作。这里我们重点来看 MC 侧的刷新命令发送部分。

刷新命令,Refresh Command,DRAM 命令代号为 REF。表示 REF 的 DRAM bus 信号真值表为:

如果你是第一次看到这张经典的 DRAM 命令真值表,那正好借此机会介绍一番:

H、L 标识的信号在该 DRAM 命令中必须为高或者低电平; X,V 标识的信号在该命令中都不起任何作用,可以为任何值。区别在于 V 表示信号可以为高电平或者低电平。X 更近一步,信号还可以为悬空值(float)。 用 OP Code 等具体名称标识的信号是命令的一部分,它们的值用于表示命令的某个字段的值;

比如发送 REF 命令时,CS_n 必须为低电平,ACT_n 信号必须为高电平。而 Ax 地址信号可以为高,也可以为低电平。

DRAM 刷新时序参数

REF 不是一个持久性(persistent)命令,需要间隔一个平均周期循环发送,这个周期称为 tREFI。tREFI 与 DRAM 容量密度和工作温度有关。

REF 命令发出后,DRAM 内部电路会对所有存储单元进行刷新,这需要一些时间,称为 tRFC, Refresh Cycle Time。在此期间不能向 DRAM 发出任何有效命令。tRFC 与 DRAM 容量密度和工作频率有关。

tREFI 和 tRFC 是 REF 命令唯二的时序参数,可以用以下的时序图表示:

图中,REF 命令与其他有效命令(VALID 表示)的最小间隔为 tRFC,两个 REF 命令之间的最小间隔也需要大于 tRFC,这段时间用于等待刷新操作完成。

两个 REF 命令之间的间隔一般等于 tREFI,但为什么图中标出的最大间隔为 9*tREFI ?这是因为 DDR 支持超前/延后刷新命令这一机制。

超前/延后刷新命令

一般而言,REF 命令两两之间保持着相同的车距,等周期间隔 tREFI。但是正如前文所提到的,在大吞吐量的场景中,频繁的刷新命令会降低吞吐效率。

超前/延后刷新命令机制可以在不改变刷新命令总数的情况下,拉开 REF 命令之间的间距,从而提高密集 DRAM 读写期间的效率。

最多可以抽取 8 个 REF 命令,提前或者延后进行,因此两个 REF 命令之间的最大间隔为 9 tREFI。

refresh 相关timing参数

  • 1、tREFW(refresh window):所有的DRAM device都有一个retention time(记忆时间),超过这个时间数据会有误,一般是32/64ms,这个时间窗口内必须把所有row都refresh一次;
  • 2、tREFC(refresh command):执行一个refresh command需要的时间;
  • 3、tREFI(refresh interval):发送两个refresh命令的间隔时间;

一句话总结:在tREFW内,必须把所有bank 中row都refresh一遍,这样才能保住DRAM中数据的准确性,可以将这个任务分成多个时间段完成,例如间隔tREFI发送一次refresh command;特殊情况下,例如DRAM此时正在进行读写操作,两个refresh命令之间可以间隔9x tREFI(或者5x tREFI)发送refresh command。

那么有个疑问,bank中怎么知道每次refresh哪些row?DRAM自己完成的,不需要控制器参与,bank会有一个计数器。例如现在有20个row,计数器值可以是0,1,2,3,4。每次refresh command到达DRAM,计数器会加1。

计数器为0时,refresh row0、row4、 row9 、row14。计数器为1时,refresh row1、 row5 、row10 、row15。依次内推

那么如何控制发送呢?IP产商一般提供两种解决方案,silicon时使用AR(auto-refresh)

1、Auto-refresh,控制器可以自动发送refresh命令

2、software command,软件通过寄存器配置发送

那么每次发送AR时,refresh多少个row呢?例如:DDR3中tREFI=7.8us、tREFW=64ms,AR的次数就是64ms/7.8us=8205

refresh timing

device为2Gb时,tREFC在不断变小;DDR4 2x中tREFI也变小了。

device为2Gb时,为什么tREFC在不断变小。针对4Gb X8 device,总共有65536个row

在2x mode时,tREFI=3.9us,refresh的次数就是64ms/3.9us=16410,所以每次refresh row的个数是【65536/16410】=4;

在1x mode时,tREFI=7.9us,refresh的次数就是64ms/7.9us=8205 , 所以每次refresh row的个数是【65536/8205】=8;

因为每次refresh的row的个数变少了,所以tREFC(refresh command)在2x mode值更小

same bank refresh

DDR5引入的一个概念,Micro实验数据表明,采用same bank refresh模式,DRAM性能可以提高6%~10%。

每个bank group中可以有一个bank refresh,其他bank可以进行正常的读写;例如,图中蓝色部分bank可以正常进行读写,红色部分bank处于refresh;

same bank refresh

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DRAM 基本结构
  • DRAM 刷新
  • DRAM 刷新命令
  • DRAM 刷新时序参数
  • 超前/延后刷新命令
  • refresh 相关timing参数
  • same bank refresh
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档