Self-Refresh时序关键参数解析:tRAS、tRP、tRC、tRFC

好,咱们进入正题。Self-Refresh 能不能稳定工作,说白了就看你那几个时序参数设没设对。不少人做低功耗设计时,总盯着电流降了多少,时序却放水了。结果一进 Self-Refresh 就丢数据,或者退出来时直接挂掉。嗯,这章咱们就把最核心的几个参数拆开揉碎讲清楚。

tRAS:行激活时间,别急着关门

tRAS 的全称是 Row Address Strobe Active Time。意思是从你打开一行,到你能关闭它之间的最短时间。

  • 太长:页面一直开着,漏电大。
  • 太短:存储单元还没完全恢复,数据就没了。

我个人习惯是把 tRAS 看成“充电时间”。你打开一行,每个 bit 的电容都需要时间充满。没充满就关,读取时电压抖动一下,直接翻车。我记得有一次查数据丢失问题,最后定位到就是因为 tRAS 设小了 2ns,量产中出现偶发失效。

实用建议:JEDEC 标准里一般会给范围,别踩下限。我自己的规矩是:在工艺角最差条件下,加 1~2ns 余量。

tRP:预充电时间,别急着开门

tRP 是行预充电时间。关闭当前行之后,要等一会才能打开下一行。

为什么呢?因为预充电本质上是把位线电压拉平,再次回归到参考电平 Vref/2。如果 tRP 不够,位线还没均衡好,下一行打开后读出来就是错的。

你想想看,DRAM 之所以叫动态,就是因为它天然需要保持一个稳定的参考。tRP 太短,参考电平乱飘,后续所有操作都受影响。我曾经历过一次回调,发现 controller 把 tRP 设成了 spec 下限,结果在高温 85°C 下频繁出错。改了参数就恢复了。

参数 我叫它 主要影响 容易犯的错
tRAS 充电时间 数据保持完整 设太小,低温没事,高温翻车
tRP 均衡时间 下一行读取正确 贴下限,高温噪声引入错误
tRC 行周期 刷新速率 忽略 tRC = tRAS + tRP 约束
tRFC 刷新循环 Self-Refresh 周期最短间隔 设太小,刷不过来丢数据
注意:tRP 和 tRAS 有叠加关系。很多 datasheet 会写 tRAS(min) + tRP(min) ≤ tRC。设值时要同时约束,不能只看单个参数。

tRC:行周期时间,锁死刷新节拍

tRC 就是同一行两次有效操作之间的最短间隔。说白了,一行刚被预充完,你不能立刻激活它。

tRC = tRAS + tRP。

这个公式不是约等于,是下限。你可以设更长,但不能设更短。不少新手只看 tRAS 和 tRP 各自满足规范,忽略了它们的和必须 ≤ tRC。我就遇到过一个设计,内部状态机把 tRC 写死成 55ns,tRAS 35ns + tRP 25ns = 60ns,直接违约。后来靠 ECO 改了控制器才救回来。

核心理解:tRC 是 Refresh 和 Self-Refresh 的“脉搏”。它决定了你能多快地完成一次刷新操作。对于 Self-Refresh,tRC 直接决定了最小刷新间隔。

tRFC:刷新循环时间,Self-Refresh 的呼吸节奏

tRFC 是刷新一本行(多个 Bank 并发刷新)所需的最短时间。它是所有参数里最影响 Self-Refresh 功耗的。

为什么?因为 Self-Refresh 期间,DRAM 内部的刷新定时器会自动触发刷新。每次触发,都要用掉 tRFC 这么长的时间。期间部分电路是工作的,不省电。tRFC 越大,每次刷新占用的时间越长,平均功耗就越高。

我习惯把 tRFC 看成“刷新肚子里的消化时间”。你得给它完整的时间把整批行刷完,中间不能插入任何读写或别的刷新操作。

  • 设小:刷不完,电荷漏光,数据丢失。
  • 设大:功耗浪费,刷新间隔拉长,容易触发 TDie 温度升高。

我记得有一次做低功耗 IoT 芯片,产品要求 Self-Refresh 电流低于几十微安。我花了大量精力优化刷新间隔和 tRFC 取值,在工艺角、温度循环下反复验证。最终靠动态调整 tRFC(低温用大间隔,高温用小间隔)通关了。

经验之谈:tRFC 在不同的密度和温度等级下取值差别很大。2Gb LPDDR 和 8Gb DDR5 的 tRFC 能差好几倍。读 datasheet 时,务必看清是 tRFC1(AB 模式)还是 tRFC2(通常用于低速)。选错就直接翻车。

我的避坑清单

归纳一下,我在这几个参数上踩过的坑,或者见过的同行翻车案例:

  1. tRAS 踩下限:常温验证全过,高温箱一跑过不了。加 2ns 回来就稳定。
  2. tRP 忽略温度效应:位线均衡时间在低温下勉强够,高温时噪声耦合变大,参考电平漂移。留够余量。
  3. tRC 和 tRAS+tRP 没对齐:这是最隐蔽的时序违约点。后仿真都不会报错,但真正操作时状态机能走到你不期望的组合。
  4. tRFC 没分温度等级:同一芯片在 -40°C 和 85°C 需要的刷新间隔差别很大。固定一个值,要么浪费功耗,要么丢数据。
  5. Self-Refresh 入口出口时序没管好:退出 Self-Refresh 时,需要保证最近一次刷新完整做完,才允许开始新操作。否则就打破了 tRFC 的完整性。

参数关系图

下面这张图,我把四个参数的时序关系画出来了。你可以看到从激活开始,到预充完成,再到下一次激活,以及中间穿插的刷新循环。

Self-Refresh 时序关键参数关系 tRAS / tRP / tRC / tRFC 时序关系 ACT tRAS PRE tRP ACT tRC = tRAS + tRP REF REF REF tRFC tRFC 图解说明: ● ACT → PRE:tRAS 保证充电完整 ● PRE → 下一次 ACT:tRP 保证位线均衡 ● 两次 ACT 之间:tRC = tRAS + tRP 不能打破 ● REF 之间:tRFC 保证刷新的完整性,不可插入其他操作

实际项目中,我建议在验证 Self-Refresh 时序时,不要只对着 spec 表格静态检查。最好做一个 UVM 验证用例,动态注入最坏情况:比如刚进入 Self-Refresh 立刻退出的边界,或者在温度跳变过程中刷新间隔被压缩的瞬间。那种 bug 仿真跑 1000 次未必抓到一次,但芯片回来一用就暴露。

一句话总结:tRAS 管充电,tRP 管均衡,tRC 是总周期,tRFC 管刷新消化。四者环环相扣,任何一个设错,Self-Refresh 都不安全。