中文 英语
知识中心
导航
知识中心

错误纠正码(ECC)

检测和纠正错误的方法。
受欢迎程度

描述

纠错码(Error correction code, ECC)是一种在读取或传输数据时检测和纠正由噪声引起的错误的方法。

ECC包含大量处理错误的数学方法。最常见的类型使用汉明码,它可以纠正一个错误并检测两个错误。这种“单错误纠正,双错误检测”方法通常缩写为SECDED。第二代ECC可以对整个设备进行校正,第三代则增加了内部ECC。

在内存中,ECC的主要目的是校正读取时可能随机出现的噪声。ECC块的强度(即大小和成本)取决于要校正和检测的比特数。

一般来说,方法的能力越强,计算成本就越高。如果在硬件上实现,这意味着更多的硅面积。如果在软件中完成,这意味着更多的CPU周期。

虽然噪声可以出现在任何地方,但ECC也可以纠正确定性错误,例如由故障单元引起的错误。这使得开发一种设计和测试策略成为可能,该策略利用一些ECC位作为处理故障电池的方式,而不是直接修复它们。例如,给定三位修正,可以选择使用其中两位来修复错误,一位用于运行时读取噪声。这就在修整采样量、修复能力、ECC的大小和强度以及要校正的噪声量之间创造了一些推拉空间。

ECC和DRAM

ECC如何应用于DRAM取决于内存芯片和控制器如何相互作用。主要有四种方法。

图3:四种DRAM ECC。(a)边带ECC,其中代码存储在与数据分开的存储芯片中。(b)直列ECC,其中每个芯片的内部存储器分为数据和代码。对于(a)和(b), ECC工作都在控制器中完成。(c)片内ECC,读取的数据在发送到控制器之前用ECC进行检查。就其本身而言,它不会捕获传输错误。(d)链路ECC,捕捉传输错误,但本身不检测阵列错误。(c)和(d)需要彼此结合或使用另一种技术以提供端到端覆盖。资料来源:Bryon Moyer/Semiconductor Engineering
四种DRAM ECC。(a)边带ECC,其中代码存储在与数据分开的存储芯片中。(b)直列ECC,其中每个芯片的内部存储器分为数据和代码。对于(a)和(b), ECC工作都在控制器中完成。(c)片内ECC,读取的数据在发送到控制器之前用ECC进行检查。就其本身而言,它不会捕获传输错误。(d)链路ECC,捕捉传输错误,但本身不检测阵列错误。(c)和(d)需要彼此结合或使用另一种技术以提供端到端覆盖。资料来源:Bryon Moyer/Semiconductor Engineering

最常见的方法是所谓的“边带”ECC。使用这种方法,DRAM上的每个内存芯片都被完全用于存储数据。额外的芯片被添加到DIMM中用于存储错误代码。这扩大了输入总线,因此数据和代码可以同时写入。控制器负责在写入数据时计算代码,并在接收到读值时验证代码。

虽然这适用于某些类型的DRAM,但LPDDR DRAM需要不同的解决方案,因为它使用16位总线。第一个问题是,如果增加边带内存,这将导致更大的总线。其次,代码通常是7位或8位,这使得16位内存结构的使用效率低下。这是通过使用相同的存储芯片来处理数据和代码。

这被称为“内联”ECC。控制器必须执行两组写入或读取操作——一组用于数据,另一组用于代码,这增加了每次访问的延迟。一些控制器可以将多个代码打包在一起以获得顺序数据,从而可以同时读取或写入多个代码。如果顺序数据访问是常见的,这将减少由代码引起的延迟。

在上述每种情况下,都是控制器处理ECC计算。“片上”ECC是DDR5的新功能,它将ECC放置在存储芯片内部。单个错误可以在发送到控制器之前被纠正。然而,如果传输中出现错误,片上ECC将无法捕捉到它。因此,边带ECC可能仍然适用于端到端保护。

最后,“链接”ECC仅保护通信数据。它在链接的两端计算,不涉及任何存储的代码。片上ECC和链路ECC可以结合起来覆盖端到端。

循环冗余检查(CRC)是检查数据是否可靠到达的另一个选项。

改编自错误越多,记忆的修正就越多布莱恩·莫耶著。


多媒体

企业级DRAM可靠性

Baidu