Loading

DDR行为 为什么要有RAS\CAS\PRECHARGE

引言

在查阅DDR手册时我们会看到几个关键参数,tRAS(Row Address strobe) tCAS(Column Address Strobe) tPRE(Precharge) ,往往这些数值看上去很抽象,但是如果理解DRAM读写操作的行为就能更好地理解这些数值。下文就是从存储器原理上进行解释,能看懂这些底层行为对于理解DDR时序是十分有利的。

本人的一个感悟就是网络资源丰富一定程度上能帮助理解相关知识,但是这些知识不具备体系,因此理解存在片面或是晦涩难懂,可能学会了也只是硬记下来。

本文参考书籍:Computer Architecture a Quantitative Approach 6th

正文

首先给出一个DDR原理图帮助阐述:

RAS指代CPU给出的激活bank和对应Row的指令 ,这时候DDR将对应Row,也就是上图中那一纵排里面的数据取出来放到一个buffer里面存着,对应上图中左边那一小纵排。实际上这个操作就是把DDR对应的DRAM中的电荷释放出来存到对应的buffer里面,因为DRAM实际上是一个MOS管中浮栅存放电荷来存储数据,所以这个操作把Row里面的DRAM掏空了。后续CPU再给CAS指令从buffer选定这个Row里面到底要取哪些数据,选定对应的Column。这个说法很容易令初学者混淆,Row Column给人的感觉是二维阵列,但实际上Colume是这个Row里面进一步细分的一个量程。

所以为什么要Precharge?就是给DRAM充电,把数据恢复回去,不然下次读什么数据呢。

理解充放电这个原理后就可类推,假设一个操作访问完Bank1(假设一个有8bankDDR3)的Row1,要再去访问Bank1里面的Row2,就需要一个Precharge的操作把Row1的数据恢复回去,并把Row2的数据读到对应的buffer上,这些操作是可以overlap的,也就是可以并行实现以减小延时。如果继续访问Bank1Row1就可以省去这个操作,因为反正数据在buffer里面。或者一个操作访问完Bank1要再去访问Bank2,那么也需要一个完整的RAS-CAS-PRE等操作。

当然DRAM本身需要刷新,因为MOS管里的电容会不断泄露出来(当然没有核泄漏那么恐怖啦),这种易失特性会导致数据丢失。针对一个Bank需要间断进行数据的重新写入,漏出来的电荷重新给他填上,大概是64ms一次。

好啦,现在你已经了解了DDR的行为了,现在就来设计一个DDR6吧!:)

posted @ 2022-11-29 14:21  月光小猪(已长膘)  阅读(2118)  评论(0编辑  收藏  举报