Stratix 10 FPGA DDR4 选型

前言

DDR3 和 DDR4 的区别

什么是 DDR4 SDRAM Bank Groups?

DDR4 SDRAM 中使用的 bank group 功能是从 GDDR5 图形存储器中借来的。为了理解对 bank group 的需求,必须理解 DDR SDRAM 预取(prefetch)的概念。预取是描述每次使用 DDR 内存执行列命令时获取多少个数据字的术语。由于 DRAM 的核心比接口慢得多,因此可以通过并行访问信息,然后将其序列化到接口来弥补差异。例如, DDR3 预取 8 个字,这意味着每次执行读或写作时,SDRAM 都会对 8 个数据字执行,并在两个 clock edges 的四个 clock cycles 内突发输出或输入,总共连续执行 8 次操作。从根本上说,可以认为 DDR3 的预取为 8,接口频率比 DRAM 内核频率快 8 倍。

预取的缺点是它有效地决定了 SDRAM 的最小突发长度。例如,在 DDR3 的预取为 8 的情况下,很难获得 4 个字的有效突发长度。bank group 功能允许设计人员保持较小的 prefetch,同时提高性能,就像 prefetch 更大一样。

由于 DRAM 的内核速度在代与代之间没有显著变化,因此预取随着每一代 DDR 的增加而增加,以便在 SDRAM 接口上提供更高的速度。然而,继续使用 DDR4 将需要 DDR4 采用 16 的预取。由于必须包含所有电路,此更改将使 DRAM 更大。这会使 DRAM 过于昂贵,因此设计人员无需预取 16 个,从而节省了成本。更重要的是,16 个字的预取与当今计算机中常见的 64 字节缓存行大小不匹配。在使用 64 字节高速缓存行的典型计算环境中,使用 64 位或 72 位接口时,预取 8 和突发长度 8 是更好的匹配。缓存行大小和突发长度的任何此类不一致都会对嵌入式系统的性能产生负面影响。

DDR4 的预取和性能

要了解 prefetch 如何影响性能,了解 SDRAM 随时间的变化会很有帮助。图1显示了与最大列周期(the maximum column cycle)相比,每一代 SDRAM 的最大数据速率(the maximum data rate)。图 1 显示,内核非常慢,随时间变化很小,而接口速度随时间显著增加。SDRAM 的内核并没有随着时间的推移而变得更快,这主要是因为更小的工艺所带来的任何好处都被更大的 SDRAM 所抵消,因为它的容量更大。
在这里插入图片描述

当引入原始 SDR (单数据速率) SDRAM 时,不需要预取。每次执行列循环时,它都会访问一个数据字,该数据被从 SDRAM 中输出。现在,虽然 SDRAM 实际上确实有一种叫做 2N 规则的东西,它可以容纳 2 的预取,但 2N 被视为规范的限制性部分,所有最终成为商用设备的 SDRAM 器件都有 1 的预取。然而,一旦引入 DDR SDRAM,内核就无法再跟上 SDRAM 所需的带宽。这是引脚上的最大数据速率与内部列周期之间分离的开始,如图 2 所示。
在这里插入图片描述

这种分离随着时间的推移而加剧。随着 DDR2 的预取为 4 和 DDR3 的预取为 8,差距变得更大。DDR4 仍在使用 8 的预取,但引入了 bank group 的概念,以避免更大的预取的负面影响。

图 3 显示了预取如何通过四代 SDRAM 演变,从 SDR SDRAM 到 DDR3 SDRAM。对于任何单列操作(例如,读取或写入),一次访问的字数由内存数组的数量以及将这些字传出或进入 SDRAM 内核所需的大约周期时间 (MHz) 表示。

顶行显示 SDR SDRAM。回到 90 年代中期,内存阵列速度与 I/O 速度相匹配。很快,引入了 2 的预取或 DDR 的 2N 预取(也适用于 LPDDR),以实现比 SDRAM 内核更高的数据速率。所示的 multiplexer 可以访问这两个字,然后它们在 clock 的一个 rising edge 和一个 falling edge 的接口上被多路复用。这种模式一直延续到 DDR3/LPDDR3 的 8N 预取。
在这里插入图片描述

DDR4 和 Bank Groups

问题变成了:这如何应用于 DDR4 及其 8N 预取?如果 DDR4 遵循图 3 所示的趋势,DDR4 的预取将为 16,但我们已经看到这是不可取的。DDR4 通过引入 bank group 的概念来避免这个问题。对于 bank group,在一个 bank group 中执行 8 的预取,而另一个 8 的预取可以在另一个独立的 bank group 中执行。bank group 是单独的实体,因此它们允许在一个 bank group 内完成列循环,但该列循环不会影响另一个 bank group 中发生的情况。实际上,DDR4 SDRAM 可以对其内部 bank group 进行时分多路复用,以隐藏内部 SDRAM 内核周期时间比接口上 8 次突发所需的时间更长的事实。图 4 显示了此过程如何寻找具有两个 bank group 的 x16 DDR4 SDRAM,这通常用于嵌入式应用。
在这里插入图片描述

新的 Bank Group 规范

bank group 的引入带来了 DDR4 的新规格。两个关键规格是 tCCD_S 和 tCCD_L。“CCD” 代表列侧的 “列到列延迟” 或 “命令到命令延迟”。“_S” 代表 “短”,“_L” 代表 “长”。

当在一个具有 8N 预取的 bank group 中启动命令时,必须允许预取完成,这需要该组的整个 cycle time 才能完成。从一个 bank group 移动到另一个 bank group 对这些规范没有任何依赖性。使用 tCCD_S 规范就是这种情况,它在四个 clock cycles 中以类似于 DDR3 的方式不受限制。

然而,这里有一个大问题。在同一个 bank group 中从一个命令转到另一个命令时,需要注意 DDR4 的新 tCCD_L 规范,该规范通常大于四个时钟周期。这种情况会影响您的设计性能,这在嵌入式应用中尤为重要。图 5 突出显示了 tCCD_S 和 tCCD_L 之间的区别。
在这里插入图片描述

新的 tCCD 规范,大影响

如图 6 所示,使用 DDR4 在不同的 bank groups 之间移动需要四个 clock cycles 的延迟。4 个 clock cycles 匹配 burst length 8。因为 4 个 clock cycles 是 8 个 clock edges,包括 rising 和 down,所以 burst length 为 8 会在该 4 clock 周期内非常有效地在每个 clock edge 上输出数据或接收数据。在这种情况下,不会浪费总线带宽。一个命令可以跟随另一个命令,而不会在未传输数据的总线上浪费任何周期。
在这里插入图片描述

但是,当保持在从 1,600 Mbps 开始的同一 bank group 中时,tCCD_L 规范需要四个以上的 clocks。1,600 Mbps 和 1,866 Mbps 需要 5 个时钟,而 2,133 Mbps 需要 6 个时钟。图 6 中表格下方的时序图显示,在不同的 bank groups 之间切换 access point 之间可以有四个 clock cycles。保持在同一 bank group 中,例如 2,133 Mbps,需要在 column 命令之间有六个 clock cycles。但是,只需要 4 个 clock cycles 来传输数据。两个 clock cycle,或 33% 的 bus bandwidth 变得不可用。

调度流量以高效使用 Bank Group

图 7 中的时序图显示了 DDR4 的 bank group 在 1600 Mbps 示例中的影响。tCCD_L long 规范为 5 意味着同一 bank group 内的 column 命令之间需要 5 个 clock cycle。突出显示的区域显示最终结果: 当使用了 5 个 clock cycles 时,浪费了一个 clock cycle,没有任何数据进出 device。在更高的数据速率下,这成为一个更大的问题,tCCD_L 变成 6 或 7 个,甚至 8 个 clock cycles。在 8 个的情况下,尝试保持在同一 bank group 中实际上会浪费一半的带宽。
在这里插入图片描述

参考资料:
DDR4 Bank Groups in Embedded System Applications
JEDEC DDR4 规范文档

Micron 8Gb DDR4 规格书详解

Micron 8Gb DDR4 SDRAM 规格书

Micron 8Gb DDR4 编码规则

在这里插入图片描述

Configuration

Micron 8Gb DDR4 有三种配置:2 Gig x 4,1 Gig x 8,512 Meg x 16。其中,2 Gig,1 Gig,512 Meg 是指地址空间大小。x 4,x 8,x 16 是指数据位宽(DQ 位宽)。

DDR4 寻址原理

以 2 Gig x 4 颗粒为例,下图为其功能框图。
在这里插入图片描述

地址线为 A[16:0],BA[1:0],BG[1:0]。

BG 位宽为 2,即这颗 DDR4 芯片有 4 个 Bank Group;BA 位宽为2,即每个 Bank Group 有 4 个 Bank。

为了提升 DDR4 的实际容量,采用了分时复用技术。

如下图所示,Row addressing(行地址)为 128K(2^17 = 131,072),Column addressing(列地址)为 1K(2^10 = 1,024)。

则其地址空间大小为 = BG 数 x BA 数 x 行地址 x 列地址 = 4 x 4 x 131,072 × 1,024 = 2,147,483,648b = 2Gb。

颗粒容量 = 地址空间大小 x 数据位宽(DQ 位宽)= 2Gb x 4 = 8Gb。

Page size = 2^COLBITS x ORG/8,其中 COLBITS 为列地址位数,ORG 为 DQ 的位数。以8Gb(2 Gig x 4)颗粒为例,则 Page size 为:2^10 x 4 / 8 = 512B。

在这里插入图片描述

Speed Grade

在这里插入图片描述

内存的频率

内存有三种不同的频率指标,它们分别是核心频率(存储器主频)、时钟频率(I/O 总线主频)和有效数据传输频率。

核心频率:为内存 Cell 阵列(Memory Cell Array,即内部电容)的刷新频率,它是内存的真实运行频率;

时钟频率:I/O Buffer(输入/输出缓冲)的传输频率;

有效数据传输频率:指数据传送的频率(即等效频率)。

正确的频率可以参考维基百科给出的表格,如下所示:
在这里插入图片描述

MT/s 与 MHz:更好的内存速度衡量指标

什么是 MHz?

MHz 是 megahertz 的简写形式,代表每秒一百万个周期或一百万赫兹(106 Hz)。此频率衡量单位来自国际单位制,在计算领域用于代表数据在组件内和组件之间移动的速度。

当 SDRAM(同步动态随机存取内存)于 20 世纪 90 年代末推出时,数据传输速度的衡量方式与主板时钟一致,其中数据传输发生在时钟周期的上升沿。衡量 SDRAM 内存的性能时,100MHz 代表每个时钟周期 100 x 106 次数据传输。

在本世纪初,DDR(双倍数据速率)SDRAM 内存上市。此内存技术让每个时钟周期的数据传输量增加一倍,其中传输发生在时钟周期的上升沿和下降沿。

不过,衡量单位没有变化。对于 100MHz 的时钟速率,DDR 让有效数据速率增加一倍,达到每个时钟周期 2 亿次数据传输。更准确的新衡量指标迟迟未出现。

什么是 MT/s?

MT/秒是每秒百万次传输的简写,可以更准确地衡量计算领域 DDR SDRAM 内存的有效数据速率(速度)。MT/秒是每秒百万次传输的简写。

SDRAM
时钟:100MHz
传输速率:100MT/秒
带宽:800MB/秒

DDR SDRAM
时钟:100MHz
传输速率:200MT/秒
带宽:1600MB/秒

在这里插入图片描述

所以,数据传输率是 I/O 总线主频的两倍。

为什么 DDR4 的核心频率与 I/O 总线频率的比例是 1:4 呢?

DDR PHY Interface 协议 规定 DFI clock 与 DFI PHY clock 的频率比(Frequency Ratio)可以是 1:1,1:2,或者是 1:4。

协议 4.0 版本 4.9.1节中描述了多倍速率的 DFI clock 和 DFI PHY clock 的频率比,如下图所示:
在这里插入图片描述

DFI 时钟和 DFI PHY 时钟必须相位对齐,并且彼此的频率比为 1:2 或 1:4。

这里的 DFI 时钟即 DDR 的核心频率,DFI PHY 时钟即 DDR 的 I/O 总线频率。

Altera 官方评估工具 External Memory Interface (EMIF) Spec Estimator 中的 Clock rate of user logic 选项可以筛选 FPGA 器件支持的频率比。如下图所示。
在这里插入图片描述

一般推荐使用 1:4 的频率比,这样的话 DFI clock 的频率可以小一点,这个时钟频率就是 FPGA DDR 控制器用户接口的逻辑时钟速率,小一点的话有利于时序收敛。

更多关于 DFI 时钟和 DFI PHY 时钟的介绍,可以去阅读知乎博主 LogicJitterGibbs 的文章:DDR 学习时间 (Part C - 3):DFI 协议功能 - DFI PHY 与 DFI 时钟频率比。描述的非常详细。

带宽

有效数据传输速率是指一根数据线上的最大传输速率,所以带宽计算公式如下:

带宽 = DDR 有效数据传输速率 x DQ位宽

例:选用 4 个 x16 Chip(有效数据传输速率 1600 MT/s),总带宽 = 1600 x 16 x 2 = 51200 Mbit/s = 6400 MB/s = 6.4GB/s

Altera FPGA EMIF 规格

可以使用官方工具来评估 FPGA 外部存储器接口(EMIF)规格。外部存储器接口规格估计器:一个参数化工具,允许您查找和比较英特尔 FPGA 中支持的外部存储器接口的性能。您将能够根据目标规格过滤到特定性能,并比较 FPGA 的性能。

External Memory Interface (EMIF) Spec Estimator

界面如下图所示:
在这里插入图片描述

下面是各个选项的介绍:

Device Family

此选项用来筛选所使用的 FPGA 器件系列

Temperature & Speed Grade

此选项用来筛选所使用的 FPGA 器件的温度和速度等级:

Temperature
Commercial(C)
Automotive(A)
Extended(E)
Industrial(I)
Military(M)

Speed Grade
0
1
2
3
4
5
6
7
8
3L
2L
4L
8L
9L
3YY
2/2X

下图为 Stratix 10 系列 FPGA 的命名规则:
在这里插入图片描述

Interface Type

此选项用来筛选所使用的外部存储器接口类型:

Hard Controller + Hard PHY
Soft Controller + Hard PHY
Hard PHY-only
HPS

Memory Standard

此选项用来筛选所使用的外部存储器类型

Clock rate of user logic

此选项用来筛选 DFI clock 与 DFI PHY clock 的频率比:

Full Rate
Half Rate
Quarter Rate

Memory Format & Topologies

此选项用来筛选内存模组类型:

Memory Topology
Component(直接焊接的内存芯片,常用于嵌入式设计)
LRDIMM(Load - Reduced DIMM,定位于服务器与 AI 训练平台市场)
Ping Pong PHY(乒乓 PHY 允许两个内存接口通过时间复用共享地址和命令总线。)
RDIMM(Registered DIMM,定位于工作站与服务器市场)
SODIMM(Small Outline DIMM,定位于笔记本市场)
UDIMM (Unbuffered DIMM,定位于桌面市场)
Intel® Optane DCPMM(英特尔® 傲腾™ 持久内存)

Depth Expansion Modules
1 DPC (DIMM Per Channel) 1R (Rank)
1 DPC (DIMM Per Channel) 2R (Rank)
2 DPC (DIMM Per Channel) 1R (Rank)
2 DPC (DIMM Per Channel) 2R (Rank)
1 DPC (DIMM Per Channel) 4R (Rank)
1 DPC (DIMM Per Channel) 8R (Rank)
Multirank
1 DPC (DIMM Per Channel)
2 DPC (DIMM Per Channel)

Depth Expansion Components
1 Chip Select
2 Chip Selects
4 Chip Selects

Channel,Rank 和 Chip

一个 SOC 或者 PC 上的 DRAM 都是有很多颗 DRAM Single Chip 组成的。这么多颗 DRAM Single Chip 又组成了不同的层级。

典型的 DRAM 层次结构如下所示:

  1. Channel (CH)
  2. Dual Inline Memory Module (DIMM)
  3. Rank (RA)
  4. Chip (CS)
  5. Bank Group (BG)
  6. Bank (BA)
  7. Row Address (RA)
  8. Column Address (CA)

在这里插入图片描述

其中 Channel -> DIMM -> Rank -> Chip 是 DDR 颗粒(就是单颗 DDR,对应上图中黑色方块)之外的层级,Bank Group -> Bank -> Row -> Col 是 DDR 颗粒内部的层级。

特定 DRAM 产品可能不包含上面列出的一个或多个层次结构。例如,DIMM 常见于台式机和服务器中,而不是嵌入式设备中;在 DDR4 中引入了 Bank Group(BG);通道(CH)在 LPDDR4 等中引入。

由于电气限制,只有少数 Channel 和 DIMM 可以连接到总线。

Rank 可以增加 DIMM 上的整体容量,并且每个 Rank 都有多个 Chip。Chip 会增加数据传输带宽,并且可以在同一个 DRAM 访问中启用多个 Chip。
在这里插入图片描述

多个 Bank Group 和 Bank 提供内存访问并行性。提供这些请求是为了让我们可以同时处理不同的请求。每个 DRAM 请求可能需要很长时间才能完成,跨不同请求交错 Bank Groups / Bank 可以隐藏较长的 DRAM 延迟并提高 DRAM 吞吐量。

为了最大化密度,Bank 中的 Array 被放大,即由 Row Addresses 索引的 Row 很宽。每个 Array 都向外部提供单个 output pin,因此 Column Addresses 为 Row 内的 bit 位置编制索引。

DRAM 芯片被描述为 xN,其中 N 是指输出引脚的数量。xN DRAM 芯片的 Bank 内部有 N 个内存 Array。

下图显示了一个由 8 个 x8 DRAM 芯片组成的 Rank,因此 Rank 的数据总线宽度为 64 位。
在这里插入图片描述

这两篇博文对 DDR4LPDDR5 的物理结构有很好的解释,这两篇博文都是推荐阅读的文章。

下面来总结一下:

什么是 Chip ?

即单个内存芯片颗粒,前面小节所述的 Micron 8Gb DDR4 规格书即单个 Chip 的规格书。数据总线宽度为 4,8,16 位,对应 x 4,x 8,x 16 的数据位宽(DQ 位宽)。

什么是 Rank ?

Rank 是由 x4,x8 或 x16 Chip 组成的 64 位接口(在支持 ECC 的 DIMM 上为 64 + 8 = 72 位宽)。

16 个 x4 Chip 组成一个 Rank(如果支持 ECC,则为 18 个),单个 Rank 容量为 8Gb x 16 = 128Gb。
8 个 x8 Chip 组成一个 Rank(如果支持 ECC,则为 9 个),单个 Rank 容量为 8Gb x 8 = 64Gb。
4 个 x16 Chip 组成一个 Rank(x16 Chip 不支持 ECC),单个 Rank 容量为 8Gb x 4 = 32Gb。

x4 Chip 主要用来搭建大容量内存条。但因为每个 Rank 都需要 16 个 Chip,所以信号完整性要求高,一般用在服务器领域。

x8 Chip 是出货量最大的,最通用的配置,一般消费市场大部分就是这种配置。

x16 Chip 因为只需要 4 个颗粒,应用于嵌入式或者 PCB 空间受限的场合,消费品市场见于低端产品。

什么是 DIMM ?

DIMM(dual inline memory module)是主板上的一个内存插槽。一个 DIMM 上可以有一个 Rank 或两个 Rank 的 DRAM。取决于它的配置。

什么是 Channel ?

一个主板上可能有多个 DIMM 插槽,用来插多根内存。这些槽位分成两组或多组,组内共享物理信号线。这样的一组数据信号线、对应几个槽位(内存条)称为一个 Channel(通道)。简单理解就是 DDRC(DDR 控制器),一个 Channel 对应一个 DDRC。CPU 外核或北桥有两个内存控制器,每个控制器控制一个内存通道。内存带宽增加一倍。(理论上)

如下图所示:2 DPC(2 DIMM Per Channel):每个通道 2 个 DIMM 插槽。T-Type 走线。DIMM 插槽从左往右编号分别为 A1,A2,B1,B2。
在这里插入图片描述

  • 单条:单根内存为什么要插 A2 插槽?
    A1 插槽:
    在同一个通道内,因为 T-Type 布线,如果只插在 A1 的插槽,空出的 A2 插槽会有信号反射,A2 的信号又反射回 A1,造成信号干扰,影响性能的发挥。
    A2 插槽:
    信号传输速率快,无信号反射干扰,充分发挥内存的性能,特别是超频的潜力。
    B1 或 B2 插槽:
    距离 CPU 太遥远,信号传输相对较慢。这也是优先选择 A2 而不是 B2 插槽的原因,理论上与 CPU 的物理距离越近,信号传输则越快越稳定,损耗也会越小。
  • 双条:双根内存为什么优先插 A2 和 B2 插槽?
    A2 和 B2 为两条不同通道的插槽,独立完成信号传输,互不干扰。

总结:如下图所示,8 个 Chip 组成一个 Rank,2 个 Rank 组成一个 DIMM,两个 DIMM 组成一个 Channel。
在这里插入图片描述

ECC

内存子系统中较常用的一种 RAS 方案是纠错码(ECC)内存。DDR 控制器通过为实际数据生成 ECC SECDED(单位纠错和双位检错)数据并存储到附加 DRAM 存储器中,可以对 DRAM 发送的数据进行单位纠错和双位检错。

ECC 生成和校验顺序如下:

  • ECC 数据由控制器根据实际的 WR(写入)数据生成。内存同时存储写命令的数据和 ECC 数据。
  • 在 RD(读取)操作期间,控制器从内存读取数据和相应的 ECC 数据。控制器利用接收到的数据重新生成 ECC 数据,并将其与接收到的 ECC 数据进行比较。
  • 如果两者匹配,则不会发生错误。如果不匹配,ECC SECDED 机制允许控制器纠正任何单 bit 错误并检测双 bit 错误。

这种 ECC 方案提供端到端的保护,以防止可能在控制器和内存之间的内存子系统中发生的单 bit 错误。

基于 ECC 的实际存储,ECC 方案可能有两种类型:side-band ECC 或 inline ECC。在 side-band ECC 中,ECC 数据存储在单独的 DRAM 上;在 inline ECC 中,ECC 数据与实际数据一起存储在同一个 DRAM 上。

DDR5 和 LPDDR5 支持的数据速率远高于其前代产品,因此它们支持更多 ECC 功能,以增强内存子系统的稳定性。DDR5 中的 On-die ECC 和 LPDDR5 中的 Link ECC 就是两种此类 RAS 方案,可进一步增强内存子系统 RAS 功能。

Side-band ECC

side-band ECC 方案通常在应用中使用标准 DDR 内存(如 DDR4 和 DDR5)实现。顾名思义,ECC 数据作为边带数据连同实际数据发送到内存。例如,对于 64 位数据宽度,增加 8 位用于 ECC 存储。因此,当今企业级服务器和数据中心常用的 DDR4 ECC DIMM 具有 72 位宽。这些 DIMM 有两个额外的 x4 DRAM 或一个 x8 DRAM,用于额外的 8 位 ECC 存储。因而在 side-band ECC 中,控制器会同时读写 ECC 数据和实际数据。此 ECC 方案不需要额外的 WR 或 RD 开销命令。如果接收的数据没有错误,side-band ECC 与 inline ECC 相比,延时损失更小。

Inline ECC

Inline ECC 方案通常在使用 LPDDR 内存的应用中实现。LPDDR DRAM 具有固定信道宽度(LPDDR5/4/4X 信道宽度为 16 位),因此 side-band ECC 对于此类内存而言是一种昂贵的解决方案。例如,对于 16 位数据宽度,需要为 7 位或 8 位 ECC 位宽的 inline ECC 额外分配 16 位 LPDDR 信道。此外,7 或 8 位 ECC 数据字段仅部分填充了 16 位额外的通路,导致存储效率低下,还给地址命令信道带来额外负载,可能会对性能有所影响。因此,inline ECC 成为更适合用作 LPDDR 内存的解决方案。

Inline ECC 中的控制器不需要额外的信道来存储 ECC,而是将 ECC 数据存储在存储实际数据的同一 DRAM 信道中。因此,内存信道的总体数据宽度与实际数据宽度相同。

在 inline ECC 中,16 位信道内存被分区,使得内存的专用部分被分配给 ECC 数据存储。当 ECC 数据未与读写数据一起发送时,控制器为 ECC 数据生成单独的开销 WR 和 RD 命令。因此,实际数据的每条 WR 和 RD 命令都伴有一条 ECC 数据的开销 WR 和 RD 命令。高性能控制器通过在一条 ECC WR 命令中封装几个连续地址的 ECC 数据,以此来降低此类 ECC 命令的损失。同样,控制器在一条 ECC RD 命令中读取内存发出的若干连续地址的 ECC 数据,并且可以将读出的 ECC 数据,应用于该连续地址产生的实际数据。因此,流量模式越有序,此类 ECC 开销命令造成的延迟损失越小。

On-die ECC

每一代 DDR 的发展,DRAM 容量通常都会增加。DRAM 供应商通常也会缩小工艺技术,以实现更高的速度和更经济的量产。面对更高的容量和速度以及更小的工艺技术,DRAM 内存阵列出现单位错误的可能性会增加。为进一步改善内存信道,DDR5 DRAM 配备额外的存储器,只用于 ECC 存储。On-die ECC 是一种高级 RAS 功能,可获得 DDR5 系统的支持以实现更高的速度。DDR5 DRAM 为每 128 位数据额外设置 8 位的 ECC 存储空间。

DRAM 内部计算 WR 数据的 ECC,并将 ECC 数据存储在额外的存储器中。在读取操作中,DRAM 读出实际数据以及 ECC 数据,并且可以纠正任何读数据位上的任何单位错误。因此,on-die ECC 进一步保护 DDR5 内存阵列免于产生单位错误。由于此方案无法针对 DDR 信道上发生的错误提供任何保护,所以 on-die ECC 会与 side-band ECC 结合使用,以增强内存子系统上的端到端 RAS。

Link ECC

Link-ECC 方案是一种 LPDDR5 功能,可保护 LPDDR5 链路或信道免受单位错误的影响。内存控制器计算 WR 数据的 ECC,并在特定位