DDR 内存的本质是数据的存储器,首先回到数据的存储上,数据在最底层的表现是地址。为了给每个数据进行存放并且在需要的时候读取这个数据,需要对数据在哪这个抽象的概念进行表述,我们科技树发展过程中把数据在哪用地址表示。一个数据单元表示一个地址,通常一个数据单元是一个字节(8Bit)、二个字节等。
一:DDR数据最底层的结构抽象
这里数据表现的最小单元是一个数据储存单元
上图假设是一个DDR储存芯片内的储存数据的结构。有4行6列一共24个储存单元,每个储存单元里面有4X6=16个小方格。这里一个小方格代表数据的最小物理储存形式bit。所以上图的一个储存单元是16bit。
这个时候计算这个DDR储存芯片的容量为 24X16=320 bit。如果一个芯片内面有6个这样的储存块那么内存条容量就是320X6=1920bit。
这个储存块叫做BANK。其实就是像三明治一样叠起来。
到这里我们会计算DDR 的容量:
行数 X 列数 X 储存单元bit数 X BANK数
二:数据的交互
数据必须进行交互,也就是读写,首先需要解决的是储存单元在哪,数据如何传输。
储存单元在哪:地址 ,行、列、BANK 决定存储单元在哪,通常就是地址线
数据的传输: 往一个储存单元写数据,数据线位宽和储存单元大小一致,一次就写一个储存单元,数据线
三:DDR 框图
说了这么多终于要接触到真正的器件了。
1.储存单元
memory arry 就是储存单元上图表示的是32678行 ,128列,每个储存单元有128个bit,有0~7 一共8个BANK。
列32768 为2^15 为32K
行 128为2^7为 128
容量为 32768128128*8(行、列、单元、BANK)=4,294,967,296=4Gb
18位的地址线可以看到是行列共用。其中行ROW有15位 32768行,列地址是10位中的7位 128列
2.读写换成,预取
32768X128X128其中最后一个128表示一个存储单元的位宽所以DDR内部的数据位宽是128位。显然我们一般的应用很少用到128Bit的位宽,一般是8bit、16bit所以两种位宽是无法进行直接通信的需要一个缓冲区域,这个就是内部FIFO。也就是说当DDR外部需要16bit数据的时候内部其实已经一口气拿了128bit数据(一次操作就是按照位宽来),称为预取8(128/16).
显然DDR储存单元一次操作需要外部8次操作才跟的上,两边的时钟频率是需要成倍数关系的,DDR一个时钟操作两次。
所以8/2=4,所以DDR内部操作一次,外部需要4次。因此FIFO右边的clk是FIFO左边clk的4倍。
3,OTD
有时候用到菊花链或者其他方式取连接多个DDR,在信号上为了减少反射会增加终端电阻,ODT用来控制电阻导通。这部分了解即可。
4.速度等级
speed -125为例表示CK=1.25ns 对应的频率为800MHz,DDR是一个周期上升沿下降沿都执行动作所以其数据周期是800X2=1600
所以-125 表示的是DDR3-1600M的数据速度
如果对外的数据线有16根就是16bit的数据位宽所以 -125的DDR3数据带宽为1600M x 16bit
5.引脚 (略为枯燥的部分)
1:A [X:X] 地址信号,用于选择具体的内存单元
2:BA , BANK
3:CK ,CK# 差分时钟输入
4:CKE 时钟使能
5 : CS# 片选
6:DM,数据掩蔽 MASK
7: ODT ,终端电阻控制
7 RAS#、CAS#、WE# ,命令控制
8:RESET# 复位
9:DQ,输入输出
10: DQS 数据选通,用于数据对齐