首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用 。这部分的讲述运用DDR3的简化时序图 。
DDR3的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格 。和表格的检索原理一样,先指定一个行(Row),再指定一个列(),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理 。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)就是逻辑 Bank(,下面简称Bank) 。
DDR3内部Bank示意图,这是一个NXN的阵列,B代表Bank地址编号,C代表列地址编号,R代表行地址编号 。
如果寻址命令是B1、R2、C6,就能确定地址是图中红格的位置
目前DDR3内存芯片基本上都是8个Bank设计,也就是说一共有8个这样的“表格” 。
寻址的流程也就是先指定Bank地址,再指定行地址,然后指列地址最终的确寻址单元 。
目前DDR3系统而言,还存在物理Bank的概念,这是对内存子系统的一个相关术语,并不针对内存芯片 。内存为了保证CPU正常工作,必须一次传输完CPU 在一个传输周期内所需要的数据 。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位) 。控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,这个位宽就称为物理Bank(,有的资料称之为Rank)的位宽 。目前这个位宽基本为64bit 。
在实际工作中,Bank地址与相应的行地址是同时发出的,此时这个命令称之为“行激活”() 。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址 。根据相关的标准,从行有效到读/写命令发出之间的间隔被定义为tRCD,即(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲),我们可以理解为行选通周期 。tRCD是DDR的一个重要时序参数,广义的tRCD以时钟周期(tCK,)数为单位,比如tRCD=3,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,DDR3-800,tRCD=3,代表30ns的延迟 。
图中显示的是tRCD=3
接下来,相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的I/O接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的CL(,列地址脉冲选通潜伏期) 。CL的数值与tRCD一样,以时钟周期数表示 。如DDR3-800,时钟频率为,时钟周期为10ns,如果CL=2就意味着20ns的潜伏期 。不过CL只是针对读取操作 。
由于芯片体积的原因,存储单元中的电容容量很小,所以信号要经过放大来保证其有效的识别性,这个放大/驱动工作由S-AMP负责,一个存储体对应一个S- AMP通道 。但它要有一个准备时间才能保证信号的发送强度(事前还要进行电压比较以进行逻辑电平的判断),因此从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据即已传向S-AMP,也就是说此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出,这段时间我们称之为 tAC(,时钟触发后的访问时间) 。
图中标准CL=2,tAC=1
目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个(即CPU内Cache的存储单位)的容量为准,一般为64字节 。而现有的Rank位宽为8字节(64bit),那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念 。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(,简称BL) 。
- 制作大容量IMG文件或任意调整IMG文件大小的方法
- [转帖]linux下的CPU、内存、IO、网络的压力测试
- 涨点神器!超越Adam!谷歌提出Lion炼丹优化器,内存更小、效率更高!
- 128和256内存手机到底差距在哪
- 树懒大小一般是多少
- linux性能优化-内存原理
- freeswitch APR库内存池
- ARM32内存空间分配
- linux中给R分配内存,Linux内存超分配Overcommit深入理解
- 雷达编程实战之Firmware内存优化