DRAM的结构及特点
现代DRAM内存系统主要由内存控制器和内存芯片组成,DRAM芯片是一个由块(Bank),行(Row),列(Column) 组成的三维结构。
Bank: 一个二维的存储矩阵,包含Row和Column,单个Bank有若干行若干列,一行一般存储着连续的几KB的数据。
Rank: 一个Rank由一组Bank组成(一般来说1个Rank包含8个Bank),同一个Rank里面的Bank能同时访问,称为Bank级并行性(Bank Level Parallelism BLP)
Channel: DRAM一般由若干个独立的内存通道(Channel)组成,每个通道包含若干个Rank。
Cell: 行和列对应的存储单元
访问DRAM Bank的地址包括行地址和列地址,由DRAM控制器上的行地址选通脉冲RAS(Row Address Strobe)和列地址选通脉冲CAS(Column Address Strobe)来选择行地址和列地址,处理器的访存请求会被映射到DRAM Bank上,然后在Bank内分别以行访问和列访问选中二维存储矩阵中的一个单元(Cell),然后就可以进行读写数据了。
在现代DRAM结构中,每一个Bank都包含一个行缓冲(Row Buffer),Bank的Row Buffer是整个访存操作过程中的核心部件,只有将数据读入到行缓冲才能进行读写操作。访存时,先通过行地址确定Bank中的一行,然后将选中的行的所有内容缓存到Bank的Row Buffer里,最后通过列译码器译出列地址在Row Buffer中的某一列,读取cell里面存储的内容。Row Buffer对Bank中的数据起到了缓存的作用,如果下一次访存操作的行地址与上一次一样,那么直接通过列地址从Row Buffer中读取数据(局部性原理),这样的操作加快了访存速度,降低了访存延迟。
内存访问时在Bank上的流程
可以分为4个阶段,分别为译码、Bank读写、Bank数据缓存、数据传输。4个阶段所涉及的硬件资源是不同的,分别对应于地址总线和命令总线,内存Bank,行缓冲和数据总线,因此4个阶段可以形成一条流水线。
译码: 命令发出后经命令总线和地址总线传动到译码器中,译码器进行译码操作,获得行地址和列地址,以及即将访问的Bank。
读写Bank: 将数据从Bank读取到Row Buffer里,或者将Row Buffer里的数据写会到Bank里。
Bank数据缓存: 缓存同一Rank内同时工作的Bank行,充分利用Bank级并行性。
数据传输: 将DRAM中的数据通过数据总线传输给LLC。
DRAM的操作
行激活: 读取目标行的数据到Row Buffer中,只有当数据读取到行缓冲中才能被使用,且此时行缓冲必须处于空闲状态。
列访问: 对行缓冲中的目标行的各列数据进行读写操作。
预充电: 将行缓冲的数据写回Bank,并清空行缓冲,使其处于空闲状态,等待新的行读到行缓冲中。