👉个人主页:highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
参考资料:《镁光SDRAM数据手册》、《PC SDRAM specification》
从前面的命令真值表看到,auto refresh自动刷新的表示symbol为CBR,这什么意思?这个缩写和刷新貌似没什么关系?这一节我们来一探究竟。
DRAM要不断进行刷新(Refresh)才能保留住数据,刷新操作与预充电中重写的操作一样,都是用S-AMP先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有L-Bank预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不是一定是相同的。
刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作,大家还记得之前文章提到的SDRAM芯片框图吧,芯片有一个refresh counter来进行刷新时的bank地址和行地址计数,这里再贴一下框图,如下图红色框:
对于AR,SDRAM通过内部行地址生成器(也称刷新计数器)来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说CAS在RAS之前有效。所以,AR又称CBR(CAS Before RAS,列提前于行定位)式刷新。在发出AUTO REFRESH命令之前,必须对所有激活的存储体进行预充电。那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(工业和商业级是64ms,车规级是16ms),也就是说每一行刷新的循环周期是64ms,这个64ms称为刷新周期tREF。这样刷新速度就是:64ms/行数量。刷新命令一次对一行有效,发送刷新命令的间隔可以是用整个刷新周期平均分配,即4096 行时为15.625μs(64ms/4096),8192行时就为7.8125μs(64ms/8192);也可以每64ms按颗粒支持的间隔连续发出8192个自动刷新命令,此间隔称为自动刷新周期tRFC,这个时间也可以理解为刷新一行需要的最短时间,大约是9个时钟周期(PC133标准)。在这9个时钟期间内,所有针对该行工作指令只能等待而无法执行。64ms 之后则再次对同一行进行刷新,如此周而复始进行循环刷新。如下图:
由于刷新涉及到所有 L-Bank,因此在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期,之后就可进入正常的工作状态,我们来计算一下,刷新一行需要66ns,总共8192行,全部刷新完需要66ns * 8192=0.540672ms,那在64ms的刷新周期中,还有63.459328ms可以用来做其他操作。显然,刷新操作肯定会对 SDRAM 的性能造成影响,但这没办法,这是DRAM相对于SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。如下是自动刷新的操作图:
SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是 STR(Suspend to RAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入SR模式,此时不再需要外部系统时钟就可以进行刷新动作。只有在存储阵列处于idle状态时才能进入自刷新,也就是说进自刷新前需要先预充电。在SR期间,CKE需保持为低,此时所有外部信号都是无效的(无需外部提供刷新指令)。若要退出自刷新,首先需要在CKE拉高之前恢复稳定的外部时钟CLK,然后拉高CKE,再发出至少两个时钟周期的NOP命令,让正在进行的内部刷新操作继续完成,这段时间称为退出自刷新到下一次行激活的时间间隔tXSR。注意,退出自刷新后需要继续按规定时间周期发送自动刷新命令以维持DRAM存储数据。进自刷新与退出自刷新的操作图如下: