DDR 存储器中的纠错码 (ECC)

介绍

双倍数据速率同步动态随机存取存储器(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 功能允许系统在出现可纠正的错误时继续运行,同时记录不可纠正的错误详细信息以供将来调试。

ECC 作为内存 RAS 功能

内存子系统中使用的最流行的RAS方案之一是纠错码(ECC)存储器。通过为实际数据生成ECC SECDED(单位纠错和双比特错误检测)代码并将其存储在额外的DRAM存储中,DDR控制器可以纠正单位错误并检测从DRAM接收的数据上的双比特错误。

ECC 生成和检查顺序如下:

  • ECC 代码由控制器根据实际 WR(写入)数据生成。存储器存储 WR 数据和 ECC 代码。
  • 在 RD (READ) 操作期间,控制器从内存中读取数据和相应的 ECC 代码。控制器从接收到的数据重新生成 ECC 代码,并将其与接收到的 ECC 代码进行比较。
  • 如果存在匹配项,则未发生任何错误。如果存在不匹配,ECC SECDED 机制允许控制器纠正任何单位错误并检测双比特错误。

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

根据ECC代码的实际存储情况,ECC方案可以有两种类型:边带ECC或内联ECC。在边带 ECC 中,ECC 代码存储在单独的 DRAM 上,而在内联 ECC 中,代码与实际数据存储在相同的 DRAM 上。

由于 DDR5 和 LPDDR5 支持比其前代产品高得多的数据速率,因此它们支持额外的 ECC 功能,以增强内存子系统的稳健性。DDR5 中的片上 ECC 和 LPDDR5 中的 Link-ECC 是进一步增强内存子系统 RAS 功能的两种此类 RAS 方案。

ECC的不同方案

边带式 ECC

边带 ECC 方案通常在使用标准 DDR 存储器(如 DDR4 和 DDR5)的应用中实现。顾名思义,ECC 代码作为边带数据与实际数据一起发送到内存。例如,对于 64 位数据宽度,ECC 存储使用 8 个额外的位。因此,当今企业级服务器和数据中心常用的DDR4 ECC DIMM的宽度为72位。这些 DIMM 具有两个额外的 x4 DRAM 或单个 x8 DRAM,用于额外的 8 位 ECC 存储。因此,在边带ECC中,控制器写入和读取ECC代码以及实际数据。此 ECC 方案不需要额外的 WR 或 RD 开销命令。图 2 描述了边带 ECC 的 WR 和 RD 操作流程。当接收到的数据没有错误时,与内联 ECC 相比,边带 ECC 的延迟损失最小。

图 2:使用边带 ECC 的 WR 和 RD 操作流程

内联式电芯

内联 ECC 方案通常在使用 LPDDR 存储器的应用中实现。由于 LPDDR DRAM 具有固定通道宽度(LPDDR16/5/4X 通道为 4 位),因此边带 ECC 成为具有这些存储器的昂贵解决方案。例如,对于 16 位数据宽度,需要为 16 位或 7 位 ECC 码字的边带 ECC 分配一个额外的 8 位 LPDDR 通道。此外,7 位或 8 位 ECC 码字仅部分填充 16 位附加通道,导致存储效率低下,还会给地址命令通道增加额外负载,从而可能限制性能。因此,内联ECC成为LPDDR存储器的更好解决方案。

内联 ECC 中的控制器不需要额外的通道进行 ECC 存储,而是将 ECC 代码存储在存储实际数据的同一 DRAM 通道中。因此,内存通道的整体数据宽度与实际数据宽度相同。

在内联 ECC 中,对 16 位通道内存进行分区,以便将内存的专用部分分配给 ECC 代码存储。当 ECC 代码未与 WR 和 RD 数据一起发送时,控制器会为 ECC 代码生成单独的开销 WR 和 RD 命令。因此,实际数据的每个 WR 和 RD 命令都分别伴随着 ECC 数据的开销 WR 和 RD 命令。高性能控制器通过将多个连续地址的 ECC 数据打包在一个开销 ECC WR 命令中来减少此类开销 ECC 命令的损失。类似地,控制器在一个开销 ECC RD 命令中从内存中读取多个连续地址的 ECC 数据,并且可以将读出的 ECC 数据应用于来自连续地址的实际数据。因此,流量模式的顺序越大,由于此类 ECC 开销命令而导致的延迟损失就越少。图 3 描述了使用内联 ECC 的 WR 和 RD 操作流程。

图 3:使用内联 ECC 的 WR 和 RD 操作流程

片上 ECC

随着每一代 DDR 的出现,DRAM 容量增加是很常见的。DRAM供应商通常会缩小工艺技术,以实现更高的速度和更好的生产规模经济。随着更高的容量和速度以及更小的工艺技术,DRAM内存阵列上出现单位错误的可能性增加。为了进一步增强内存通道,DDR5 DRAM具有仅用于ECC存储的额外存储。片上 ECC 是一项高级 RAS 功能,DDR5 系统可以实现更高的速度。对于每 128 位数据,DDR5 DRAM 有 8 位额外的 ECC 存储。

DRAM 在内部计算 WR 数据的 ECC,并将 ECC 代码存储在额外的存储中。在读取操作中,DRAM读出实际数据和ECC代码,并且可以纠正任何读取数据位上的任何单位错误。因此,片上 ECC 可针对 DDR5 内存阵列内的单位错误提供进一步的保护。由于该方案不能针对DDR通道上发生的错误提供任何保护,因此片上ECC与边带ECC结合使用,以增强内存子系统上的端到端RAS。图 4 描述了采用片上 ECC 的 WR 和 RD 操作流程。

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

链接-ECC

链路 ECC 方案是一项 LPDDR5 功能,可针对 LPDDR5 链路或通道上的单位错误提供保护。内存控制器计算 WR 数据的 ECC,并将特定位上的 ECC 与数据一起发送。DRAM 根据接收的数据生成 ECC,将其与接收的 ECC 数据进行检查,并纠正任何单位错误。对于读取操作,控制器和 DRAM 的角色是相反的。请注意,链路 ECC 不提供任何针对内存阵列上单位错误的保护。但是,内联 ECC 与链路 ECC 相结合,通过提供针对单位错误的端到端保护,增强了 LPDDR5 通道的稳健性。图 5 描述了使用 LINK-ECC 的 WR 和 RD 操作流程。

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

结论

广泛使用的内存 RAS 功能之一是纠错码 (ECC) 方案。使用标准 DDR 存储器的应用通常实现边带 ECC,而使用 LPDDR 存储器的应用实现内联 ECC。随着 DDR5 和 LPDDR5 通道的更高速度和明显的 SI 效应,现在甚至分别以片上和链路 ECC 的形式在 DDR5 和 LPDDR5 DRAM 上支持 ECC。Synopsys 的 DesignWare® DDR5/4 和 LPDDR5/4 IP 解决方案提供高级 RAS 功能,包括本文重点介绍的所有 ECC 方案。

  • 31
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值