DDR通识概览

发布时间 2023-09-09 09:57:23作者: 大浪淘沙、

来自的整理原文:
https://www.systemverilog.io/design/ddr4-basics/

这个是属于早期的整理,首先随意浏览下,然后打开spec好好阅读,以spec为准。
对于blog而言,一方面是说明的不够详细,另一方面是正确性有待考究,毕竟缺少评审。而正确的内容,往往在spec上。

接口

image

Symbol Type Function
RESET_n Input
CS_n Input
CKE Input Clock Enable.
CK_t/CK_c Input Differential clock inputs. All address & control signals are sampled at the crossing of posedge of CK_t & negedge of CK_c.
DQ/DQS Inout Data Bus & Data Strobe. This is how data is written in and read out. The strobe is essentially a data valid flag.
RAS_n/A16
CAS_n/A15
WE_n/A14
Input These are dual function inputs.** When ACT_n & CS_n are LOW**, these are interpreted as Row Address Bits. When ACT_n is HIGH, these are interpreted as command pins to indicate READ, WRITE or other commands.
ACT_n Input Activate command input
BG0-1
BA0-1
Input Bank Group, Bank Address
A0-13 Input Address inputs

拓扑

4个group、4个bank,行,列,确定要写入的位置。一般是转换为PA得到ddr的实际地址。
对于每个bank,内有单元,控制bank的访问:Memory Arrays、Row Decoder、Column Decoder、Sense Amplifiers。Row的部分是Word Line,该部分会激活数据读出,从MEMORY ARRAY的数据被送入到Sense AMPS,使用COLUMN DECODER,对数据进行读出。COLUMN DECODER的部分是Bit Line。
image
column 的宽度是4、8、或16bit,因此是划分为了x4、x8、x16。DQ数据总线的宽度和column的宽度相同。x16只有两个GROUP,而x4或x8是使用的4个GROUP。
GROUP、BANK、ROW、COLUMN层级依次递减。当ROW选中,读取数据更像是放电,COLUMN上拿到了数据。放电导致了电的减少,甚至消失,称为动态的。
image

大小

DRAM的大小和规格是固定的。以8G和16G两种,16G为例:
对于x4的形式:4个group,每个group中4个bank。然后row的宽度18位,218,column的宽度10位,210,而每个colomn是x4的,4个bit,因此:
2+10+18+2+2=34,1G*2^4,16G。
对于其它的类似。
Page Size,是当row被激活,数据送入到Sense Amps中的数据bit宽度。(这个宽度呢,是不是和cacheline的宽度是有关的,cacheline宽度一般是512位的,64byte)
对于Column的宽度是10,如果是x4的分类,则4kbit,为512B。
image

级联

深度级联

最高的逻辑单元,用于增加内存容量。有:Single-Rank, Dual-Rank or Quad-Rank。
地址和数据是共享的,但是片选的分开的。
image

宽度级联

片选信号是同一个,但是数据总线DQ是分开的。
image

读写过程

● 对DDR4 SDRAM的读写操作是面向突发的。它从选定的位置开始(由用户提供的地址指定),并持续8个突发长度或4个“截断”突发长度。
● 读和写操作分为两个步骤。它首先是ACTIVATE命令(对于一个时钟周期,ACT_n和CS_n被设置为LOW),然后是RD或WR命令。
● 与ACTIVATE命令同时注册的地址位用于选择要激活的BankGroup、Bank and Row。( BG0-BG1 ; BA0-BA1 ; A0-A17 ),称为RAS - Row Address Strobe.(行地址选通)
● 与读或写命令同时注册的地址位用于为突发操作选择起始列位置。称为CAS - Column Address Strobe.(列地址选通)
● 每个BANK只有一套Sense放大器。在对同一BANK中的不同行进行读/写操作之前,必须使用PRECHARGE命令去激活当前打开的行。PRECHARGE相当于关闭当前文件柜中的文件抽屉,它使Sense放大器中的数据被写回到行中。
● 可以使用RDA(Read with Auto-Precharge)和WRA(Write with Auto-Precharge)命令,而不是发出显式的PRECHARGE命令来deactivate 一个行。这些命令告诉DRAM一旦读或写操作完成,就自动deactivate/precharge 一个行。由于列地址只使用地址位A0-A9,因此在CAS过程中A10作为未使用的位被重载以表示自动预充电。

命令编码

A10的位置指示是否RDA或者WRA操作。ACT_n指示是否为命令,还是原始地址。CAS使能的情况下,WE控制读写。
image

读取

image

写入

A16, A15和A14并不是唯一具有双重功能的地址位。自动预充电命令通过A10发出,如果在模式寄存器中启用,则通过A12选择BurstChop4 (BC4)或BurstLength8 (BL8)模式。
image

子系统

除了以上内容,还需要A DDR PHY、A DDR Controller。
DRAM子系统由存储器、PHY层和控制器组成。控制器负责VA到PA的转换,控制器和PHY通过DFI interface连接。PHY控制DRAM。
image

DDR初始化,训练和校准

DDR上电后一系列动作和状态转换有关。
image

初始化

image
初始化过程包括4个不同的阶段。上电和初始化、ZQ校准、Vref DQ校准、读/写训练(又称记忆训练或初始校准)。
● 给DRAM上电
● 取消assert RESET并激活可时钟CKE
● 启用时钟CK_t/CK_c
● 发出MRS命令并加载模式寄存器
● 执行ZQ校准
● 将DRAM调入IDLE状态

ZQ校准

ZQ校准与数据引脚[DQ]有关。要理解ZQ校准是做什么的以及为什么需要它,我们需要首先看一下每个DQ引脚后面的电路。记住,DQ引脚是双向的。它负责在读时发送数据,在写时接收数据。
image

DQ引脚的内部是有一些并联的电阻。其实是一个电阻大于240欧,其它并联用于调节到240欧的位置。由于DDR电阻受到温度影响,因此需要调节。在ZQ pin的位置处,有一个240欧的不受温度影响的基准电阻。当Step1发生ZQCL校准信号,则通过Step2的ZQ Pin 基准电阻,得出DQ引脚电阻需要的校准值,通过调整并联电阻,从而得到240欧的准确值。

image

Vref DQ校准

在DDR3中,Vdd/2被用作电压参考来决定[DQ]信号是0还是1。再看看图8的左边,接收器本质上是一个分压器电路。但在DDR4中,接收器上没有分压器电路。相反,它有一个内部电压参考,它用来决定数据线上的信号[DQ]是0还是1。这个参考电压被称为VrefDQ。VrefDQ可以使用模式寄存器MR6来设置,它需要在VrefDQ校准阶段由内存控制器正确设置。

image

读写训练

初始化过程已经完成,dram处于IDLE状态,但内存仍然不能操作。控制器和PHY必须执行几个更重要的步骤,才能可靠地向DRAM写入或从DRAM读取数据。这个重要的阶段被称为读/写训练(或记忆训练或初始校准)
the controller (or PHY)执行:
● 运行算法来对齐DRAM上的时钟[CK]和数据选通[DQS]
● 运行算法并计算出正确的DRAM读写延迟
● 将数据eyes设为读取中心
● 当信号完整性差,数据无法可靠读写时,上报错误
内存上的时钟、命令和地址线[A、CK、CKE、WE、CSn]使用一种称为飞经路由拓扑的技术进行连接。这是因为内存上的所有dram都共享相同的地址线,为了实现更好的信号完整性和高速,需要飞程路由。

image

执行一个WRITE操作,在初始化期间,您通过编程DRAM的一个模式寄存器(CWL是DRAM输入的列地址和数据之间的时间延迟)来告诉DRAM CAS写延迟是多少,并且您必须始终遵循这个计时参数。内存控制器需要考虑到板跟踪延迟和飞越路由延迟,并使用它们之间的正确倾斜启动地址和数据,以便地址和数据到达内存时具有CWL延迟。
如果您将CAS写延迟编程为9,一旦ASIC/uP启动列地址,它将需要在不同的时间启动不同的数据位,以便它们都以9的CWL到达DRAMs。由于DIMM上的每个DRAM位于不同的距离,当一个READ发出时,DIMM上的每个DRAM将在不同的时间看到READ命令,随后每个DRAM的数据在不同的时间到达ASIC/处理器。在初始校准中,ASIC/处理器计算出来自每个dram的延迟,并相应地训练其内部电路,以便在正确的时刻锁住来自各个dram的数据。
读/写训练,控制器/PHY ip通常提供许多算法。最常见的是:

  1. Write Leveling
  2. MPR Pattern Write
  3. Read Centering
  4. Write Centering

以上所有算法都由内存控制器执行,通常只需要通过寄存器启用/禁用每个算法,并在报告失败时采取措施。(算法的详细过程看链接)

定期校准

工作过程中,电压和温度可能会发生变化。为了保持信号的完整性和数据访问的可靠性,在初始化和读写训练期间训练的一些参数必须重新运行。内存控制器和PHY IPs通常提供以下两个周期校准过程。
Periodic ZQ
Periodic Read Centering

DDR时序参数

https://www.systemverilog.io/design/ddr4-timing-parameters-cheatsheet/

ACTIVATE时序

ACTIVATE命令用于在BANK中打开一行。
● 如果BANK属于同一个BANK组,它们的activate必须用tRRD_L分隔(row-to-row delay--long)
● 如果BANK属于不同的BANK组,它们的activate必须用tRRD_S分隔(row-to-row delay--short)
● 四个激活窗口或有时也称为第五个激活窗口,是一个时间限制。tFAW指定一个窗口,其中只能发出四个激活命令。因此,可以在tRRD_S之间连续发出ACTIVATE命令,但一旦您完成了4个激活,就不能再发出另一个激活命令,直到tFAW窗口过期。
image

image

REFRESH时序

为了确保存储在SDRAM中的数据不丢失,内存控制器必须以tREFI的平均间隔发出一个REFRESH命令。但是在应用REFRESH之前,SDRAM的所有bank必须被预充电并空闲最少tRP(min)时间。一旦发出了REFRESH命令,在下一个有效命令(DES命令除外)发出之前必须有一个tRFC(min)的延迟。
提到tREFI是REFRESH命令之间的“平均”间隔。这是因为您可以推出(或拉入)一定数量的刷新命令,并在以后进行弥补。这种模式被添加到DDR4中,以克服在更高密度时由于刷新锁定而导致的性能损失。可以延迟的刷新命令的数量取决于刷新模式(1x, 2x或4x),这可以在SDRAM的模式寄存器MR2中设置。
image
image
image

READ时序

频闪:Strobe,选通。
READ定时参数可以分为3类:
● Overall read timing
CL (CAS Latency):CAS是列地址选通,即列地址显示在行上。CL是内部READ命令与输出数据的第一个位可用性之间的延迟(以时钟周期为单位)。它在MR0模式寄存器中定义。SDRAM数据表通常具体说明CL需要为特定的操作频率设置什么。
AL (Additive Latency):通过AL,设备允许在ACTIVATE命令之后立即发出READ命令。该命令在设备内部发出之前一直保持到AL的时间。支持该特性是为了在设备中保持更高的带宽/速度。
RL (Read Latency):总的读延迟,定义为RL = CL + AL
tCCD_S & tCCD_L:对不同BANK组的BANK访问需要的时间延迟小于对同一BANK组内的BANK访问。对不同BANK组的BANK访问命令之间需要tCCD_S(或短)延迟,而对同一BANK组内的BANK访问命令之间需要tCCD_L(或长)延迟。

image
image

● Clock-to-Strobe relationship
tDQSCK (MIN/MAX):描述了相对于时钟CK_t, CK_c上升的数据频闪边缘的允许范围
tDQSCK:是上升频闪边缘相对于CK_t, CK_c的实际位置
tQSH:描述数据频闪的高脉宽
tQSL:描述数据频闪低脉冲宽度。
tDQSQ:这描述了相关DQ数据引脚的最新有效转换。从下图中,您将看到DQS转换到DQ数据眼左边缘的时间间隔。
tQH:是相关DQ引脚的最早无效转换。从下图中,您将看到DQS从高到DQ数据眼的右边缘的时间。
image
image

WRITE时序

image

Mode Register时序

sdram提供了许多特性、功能和设置,可以使用7模式寄存器进行编程。可以使用MRS(模式寄存器集)命令对这些寄存器进行编程。模式寄存器在初始化时设置,然后可以在正常操作期间随时更改。模式寄存器设置由两个时序参数控制。

tMRD:MRS命令周期时间。它是完成对模式寄存器的WRITE操作所需的时间,也是tMRD时序图中显示的两个MRS命令之间所需的最小时间。

image

tMOD:为从MRS命令到非MRS命令所需的最短时间(不包括DES)。

image

参阅:https://www.systemverilog.io/design/ddr4-timing-parameters-cheatsheet/