DDR工作原理和行为特性
DDR工作原理和行为特性
第1章 ddr行为介绍
DDR的全称为Double Data Rate SDRAM(双倍速率的SDRAM),就是我们平时说的内存颗粒,也就是内存芯片。 时钟的上升沿和下降沿都可以传输数据。
1.1 ddr的内部结构
一个典型的ddr内部结构如图 图 1.1 所示。
ddr内部包含多个bank,每个bank通过解析row和column确定存储单元格。 ddr地址中可以解析出以上信息。
一个bank中一次只允许激活一个row。激活新的row,需要使用PRECHARGE命令关闭旧的row, 再使用ACTIVE命令选中bank,激活新的row。
bank和bank之间是互相独立的,允许多个bank被打开。
1.2 ddr的基本命令
图 1.2 包含了ddr的基本命令。
ddr refresh的原因:ddr的存储器件是电容,由于漏电流的存在,长时间不操作,电容里的电荷会逐渐流失。 所以需要每隔一段时间进行刷新,也就是充电。
1.3 ddr的突发
ddr存在突发行为,图 1.3 展示了ddr的突发长度。
ddr的读写操作通常都是burst操作,长度一般为4或者8。
突发长度为4时,存在两种模式:
- sequential顺序模式:以0、1、2、3为起点,顺序递增,4为wrap边界。
- interleave交错模式:以0、1、2、3为起点,顺序递减,4为wrap边界。
突发长度为8时,存在两种模式:
- sequential顺序模式:以0、1、2、3、4、5、6、7为起点,顺序递增,每4个地址为一组突发,4为wrap边界。
- interleave交错模式:以0、1、2、3、4、5、6、7为起点,顺序递增和递减交替进行,每4个地址为一组突发,4为wrap边界。
Note: 每4个地址的初始地址为4,则不进行wrap处理。 后一部分地址的初始地址可以按前一部分未wrap的地址确定,且总是递增的。
burst不可以跨row和bank。
1.4 ddr读
ddr单bank读事务
图 1.4 展示了ddr的一个读事务。
ddr读事务描述:
- 先发送一个act指令;
- 过几个周期之后,发送一个read指令;
- 再过一个周期之后,会输出一些数据,
- 如果突发长度为4,则2个周期中dq输出4个数据。
- 如果突发长度为8,则4个周期中dq输出8个数据。
- 如果需要更换row,需要先发送precharge指令关掉先前的row。
Note:指令之间的空闲周期可以从ddr的datasheet中得知。
随着时钟频率的上升,read latency是增加的。
ddr单bank事务
图 1.5 展示了ddr的一个写事务。
ddr写事务流程和ddr读事务流程类似。
ddr多bank交错访问
Bank Interleave
ddr单个bank row读写效率是很低的,可以通过同时多bank交错读写提升访问效率。如图 图 1.5 所示。
2.1 cache的读行为
存在3种读行为:
- hit:CPU想要读取的数据在cache中,可以直接从cache中读取。
- miss:CPU想要读取的数据不在cache中,需要从内存中读取,读取之后的行为有两种:
- Read Through:从内存中读取的数据,不缓存到cache。
- Read allocate:从内存中读取的数据,同时缓存到cache。
2.2 cache写事务
@startuml
group 读
group hit
CPU <- Cache:Read
end
group miss
group Read Through
CPU <- mem: Read
end
group Read Allocate
CPU <- mem: Read
Cache <- mem: Read
end
end
end
group 写
group hit
group Write through
CPU -> Cache:Write
CPU -> mem:Write
end
group Write Allocate
CPU -> Cache :Write
Cache -> mem : Flush
end
end
group miss
group Write back
CPU -> Cache: load
Cache --> mem : Write Through
Cache --> mem : Write Back
end
group Write no Allocate
CPU -> mem: Write
end
end
end
@enduml
2.3 cache的flush和invalidate
每个cache line都有两个flag:
- valid:cache line 是否有有效数据。
- dirty:cache line 的数据是否与内存中的数据一致。
cache数据一致性操作:
- clean:
- 操作:检查
dirty
flag,如果是dirty,则把cache line 的数据写到内存中,并清除 dirty, cache line仍然是valid状态。 - 应用场景:cache数据被cpu更新;某个模块需要读取这条数据,需要先clean,与其他数据保持一致。再让需求模块读取。
- 操作:检查
- invalid:
- 操作:清除
valid
flag,cache line中的数据直接丢掉,不写入mem。 - 应用场景:某个模块修改了终端的地址,cpu需要invalid缓存中该地址的数据,强制下次读取从内存获取数据。
- 操作:清除
- flush:
- 操作:对cache line先clean,再invalid。
- 应用场景: 应用数据的大幅度切换。
2.4 cache硬件原理
Cache line:Cache的最小操作单元。