草榴社区

DDR 内存中的纠错码 (ECC)

 新思科技高级技术营销经理 Vadhiraj Sankaranarayanan

介绍

双倍数据速率同步动态随机存取内存(DDR SDRAM 或简称 DRAM)技术如今已成为几乎所有应用的主内存,无论是在高性能计算 (HPC) ,还是在注重功耗、面积的移动应用中。这要归功于 DDR 的诸多优势,包括高密度、简单架构、低延迟和低功耗。作为规定内存标准的标准组织,JEDEC 定义并发展了四个 DRAM 类别,用于指导设计人员准确满足其内存要求:标准 DDR (DDR5/4/3/2)、移动 DDR (LPDDR5/4/3/2)、图形 DDR (GDDR3/4/5/6) 和高带宽 DRAM (HBM2/2E/3)。图 1 显示了典型的片上系统 (SoC) 中的内存子系统的结构图,该内存子系统包括 DDR 内存控制器、DDR PHY、DDR 信道和 DDR 内存。根据 JEDEC 的定义,DDR 信道由命令/地址和数据通道组成。以下显示的简化 DDR 内存可以代表上述四类中任何一类的 DRAM 内存组件。

图 1:SoC 中的内存子系统框图

内存子系统就像任何电子系统一样,也会因为设计故障/缺陷或任何一个部件中的电噪声而发生错误。这些错误分为硬错误(由设计故障引起)或软错误(由系统噪音引起或者由 alpha 射线引起的内存阵列位翻转,等)。顾名思义,硬错误是永久性的,软错误则是短暂性的。尽管从理论出发,大部分内存错误是由 DRAM(具有大型内存阵列,并且每生成一次标准都会为了缩小工艺节点而变得愈加密集)造成,但是执行从控制器到 DRAM 的端到端保护,对于整体内存子系统的稳定性是非常必要的。

为了在运行时处理这些内存错误,内存子系统必须具有先进的 RAS(可靠性、可用性和可维护性)功能,以在发生内存错误时进行修正,延长整个系统的正常运行时间。如果没有 RAS 功能,系统很可能会因为内存错误而崩溃。但是,RAS 功能允许系统在出现可纠正的错误时继续运行,同时记录不可纠正错误的详细信息,以便将来进行调试。

作为内存 RAS 功能的 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 功能。

ECC 方案

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 开销命令。图 2 描述了 side-band ECC 的 WR 和 RD 操作流程。如果接收的数据没有错误,side-band ECC 与 inline ECC 相比,延时损失更小。

图 2:side-band ECC 的 WR 和 RD 操作流程

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 开销命令造成的延迟损失越小。图 3 描述了 inline ECC 的 WR 和 RD 操作流程。

图 3:Inline ECC 的 WR 和 RD 操作流程

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。图 4 描述了 on-die ECC 的 WR 和 RD 操作流程。

图 4:片上 ECC 的 WR 和 RD 操作流程

Link ECC

Link-ECC 方案是一种 LPDDR5 功能,可保护 LPDDR5 链路或信道免受单位错误的影响。内存控制器计算 WR 数据的 ECC,并在特定位上发送 ECC 和数据。DRAM 基于接收到的数据生成 ECC,对照接收到的 ECC 数据进行校验,并纠正任何单位错误。控制器和 DRAM 在读取操作中的作用是相反的。请注意,link ECC 不针对内存阵列上的单位错误提供任何保护。然而,inline ECC 与 link ECC 相结合,通过提供端到端的单位错误防护,增强了 LPDDR5 信道的稳定性。图 5 描述了 link ECC 的 WR 和 RD 操作流程。

图 5:Link-ECC 的 WR 和 RD 操作流程

结语

纠错码 (ECC) 方案是一种获得广泛使用的内存 RAS 功能。使用标准 DDR 内存的应用通常实现 side-band ECC,而使用 LPDDR 内存的应用则实现 inline ECC。DDR5 和 LPDDR5 信道具有更高的速度,因此 SI 效应很明显,现在,甚至 DDR5 和 LPDDR5 DRAM 也分别支持 on-die ECC 和 link ECC。新思科技的 DesignWare? DDR5/4 和 LPDDR5/4 IP 解决方案提供先进的 RAS 功能,包括本文重点介绍的所有 ECC 方案。