1、DDR3 的控制时钟是一个差分时钟,是由一个有源差分晶振电路产生的,优点是速度翻倍、电压更低、抗噪更强等等。
2、DDR3 芯片位宽是指一次能够传输的数据量,等同于数据线的条数,这里为 16 Bits(CPU芯片位宽为 64 Bits)。
3、两片 DDR3 组合而成并联工作,与 32bits 的系统总线宽度相对应,每一片 DDR3 对应不同的 Physical Bank。
4、每一个 Physical Bank 对应不同的 Logic Bank,可以想象成一个表格,然后表格里有行 Row 和列 Column。
5、对于 16 Rows、10 Columns、8 L-Banks 的 SDRAM Device,512M*8bits 的格式的 DDR3 容量计算公式如下:
一个 Logic Bank 的总单元数:2^16*2^10 = 2^26 = 2^6M = 64M
一片芯片的总单元数:64M*8L-Banks = 512M
一片芯片的容量:512M*8bits = 512MB
八片芯片的总的字节数:512MB*8 = 4GB
6、在实际工作中,Bank 地址与对应的 Row 地址是同时发出的,该命令称为“行激活”(Row Active),之后,Column 地址与读写操作也是同时发出的,该命令称为“读/写命令”。
从行激活到读/写命令发出之间的时间间隔被定义为 tRCD,即 RAS to CAS Delay(RAS 就是行地址选通,CAS 就是列地址选通)。tRCD 是 DDR 的一个重要的时序参数,广义的 tRCD 以时钟周期数为单位,比如 tRCD = 3,就代表延迟 3 个时钟周期数。
接下来,列地址被选中之后,就会触发数据传输,但是,从存储单元中输出到内存芯片的 I/O 接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是 CL(CAS Latency,CAS 潜伏期)。CL 的数值与 tRCD 一样,以时钟周期数表示。
目前内存的读写基本上都是连续的,因为与 CPU 交换的数据量是以一个 Cache Line(即 CPU 内 Cache 的存储单位)的容量为准,一般为 64 Bytes,而现有的 Rank 位宽为 8 Bytes(64 Bits),那么就要一次连续传输 8 次,即突发传输。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不需要控制器连续地提供列地址(还有低功耗的效果哟)。这样,除了第一笔数据的传输需要若干个周期外(主要是之前的延迟,一般的是 tRCD + CL),其后每个数据的传输只需一个周期的即可获得。只要控制好两段突发读取命令的间隔周期(与 BL 相同)即可做到连续的突发传输。
如果 BL = 4,也就是说一次就传送 4×64 Bits 的数据,但是,第二笔数据是不需要的,怎么办呢?还传输吗?是的!还传输!但是我们会在输出端将其屏蔽掉,为了屏蔽不需要的数据,引入了数据掩码(Data I/O Mask,简称 DQM)技术。通过 DQM,内存可以控制 I/O 端口取消哪些输出或输入的数据。
在数据读取完之后,内存芯片将进行预充电的操作来关闭当前工作行。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是 tRP(Row Precharge Command Period,行预充电有效周期),单位也是时钟周期数。
数据选取脉冲(DQS)是 DDR 中的一个重要的功能,主要用来在一个时钟周期内准确的区分出每个传输周期,便于接收方准确接收数据。每一颗芯片都有一个 DQS 信号线,它是双向的,在写入时它用来传送由北桥发来的 DQS 信号,读取时,则由芯片生成 DQS 向北桥发送。完全可以说,它就是数据的同步信号。
在读取时,DQS 与数据信号同时生成(也是在 CK 与 CK# 的交叉点),而 DDR 内存中的 CL 也就是从 CAS 发出到 DQS 生成的间隔,DQS 生成时,芯片内部的预取已经完毕了,由于预取的原因,实际的数据传出可能会提前于 DQS 发生(数据提前于 DQS 传出)。
7、芯片初始化:
充电、刷新、模式寄存器MRS的设置。
片选/L-Bank选、行地址。
列地址、读写命令。
8、常见的命令:
9、信号的表示与作用:
数据 DQ [31:0]:数据输入输出,双向数据。
行地址选通 RAS
列地址选通 CAS
写允许 WE
数据选取脉冲 DQS [3:0]:差分信号。读时输出,写时输入。用于同步数据信号;
地址线 A [14:0]:地址输入。
L-Bank 地址线 BA [2:0]:定义了 ACTIVATE、READ、WRITE、PRECHARGE 命令是对哪一个 Bank 操作的,定义在 LOAD MMODE 命令期间哪个模式(MR0、MR1、MR2)被装载等等。
片内终结 ODT:高电平使能、低电平禁止片内终端电阻。让信号在电路的终端被吸收掉。
差分时钟 CLK_P/CLK_N:所有控制信号和地址信号在 CLK_P 的上升沿和 CLK_N 的下降沿交叉处被采样,数据选取脉冲参考为 CK 和 CK# 的交叉点。
时钟有效 CKE:高电平使能、低电平禁止内部电路和 DRAM 上的时钟。
片选 CS:低电平使能、高电平禁止命令译码。
数据掩码 DM [3:0]:数据输入屏蔽。