DDR存储器ECC机制

与任何电子系统一样,由于任何一个组件中的设计故障/缺陷或电气噪声,可能会导致存储子系统出现错误 。这些错误分为硬错误(由设计失败引起)或软错误(由系统噪声或由于alpha粒子等引起的内存阵列位翻转引起) 。
要在运行时处理这些内存错误,内存子系统必须具有高级RAS(可靠性,可用性和可维护性)功能,以在出现内存错误时延长整个系统的正常运行时间 。没有RAS功能,系统很可能会由于内存错误而崩溃 。但是 , RAS功能允许系统在存在可纠正错误的同时继续运行,同时记录不可纠正错误的详细信息以供将来调试之用 。
ECC简介
【DDR存储器ECC机制】内存子系统中使用的最流行的RAS方案之一是纠错码(ECC)内存 。通过为实际数据生成ECC (单比特错误纠正和双比特错误检测)代码并将其存储在其他DRAM存储中,DDR控制器可以纠正单比特错误并从接收到的数据中检测DRAM双比特错误 。
ECC的生成和检查顺序如下:
ECC代码由控制器基于实际WR(WRITE)数据生成 。存储器同时存储WR数据和ECC代码 。在RD(读?。┎僮髌诩?,控制器从存储器读取数据和相应的ECC代码 。控制器从接收到的数据中重新生成ECC代码,并将其与接收到的ECC代码进行比较 。如果存在匹配项 , 则不会发生任何错误 。如果存在不匹配 , 则ECC 机制允许控制器纠正任何一位错误并检测到两位错误 。
这种ECC方案可提供端到端保护,以防止可能在控制器和内存之间的内存子系统中任何位置发生的单位错误 。
基于ECC代码的实际存储,ECC方案可以有两种类型:边带ECC或串联ECC 。在边带ECC中,ECC代码存储在单独的DRAM中,而在串联ECC中,代码与实际数据存储在相同的DRAM中 。
由于DDR5和支持的数据速率比其前任产品高得多,因此它们支持附加的ECC功能 , 以增强存储子系统的鲁棒性 。DDR5中的片上ECC和中的Link-ECC是两种这样的RAS方案,可以进一步增强内存子系统RAS的功能 。
不同的ECC方案 边带ECC
边带ECC方案通常在使用标准DDR存储器(例如DDR4和DDR5)的应用中实现 。顾名思义 , ECC代码作为边带数据与实际数据一起发送到内存 。例如,对于64位数据宽度 , 将8个附加位用于ECC存储 。因此 , 当今企业级服务器和数据中心常用的DDR4 ECC DIMM为72位宽 。这些DIMM具有两个额外的x4 DRAM或一个x8 DRAM,用于额外的8位ECC存储 。因此 , 在边带ECC中,控制器与实际数据一起写入和读取ECC代码,此ECC方案不需要其他的WR或RD开销命令 。图1描述了带边带ECC的WR和RD操作流程 。
图1:WR和RD操作与边带ECC一起流动 。
内联ECC
内联ECC方案通常在使用LPDDR存储器的应用中实现 。由于LPDDR DRAM具有固定的通道宽度( / 4 / 4X通道为16位),因此使用这些存储器的边带ECC成为昂贵的解决方案 。例如 , 对于16位数据宽度,需要为7位或8位ECC代码字的边带ECC分配一个额外的16位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开销命令,延迟损失较少 。图2描述了带有内联ECC的WR和RD操作流程 。
图2:WR和RD操作与串联ECC一起进行 。
片上ECC
随着每一代DDR的出现,DRAM容量的增加是很常见的 。DRAM供应商通常会收缩处理技术以实现更高的速度和更好的生产规模经济 。随着更高的容量和速度以及更小的处理技术 , DRAM存储阵列上出现单位错误的可能性也会增加 。为了进一步增强存储通道,DDR5 DRAM仅具有用于ECC存储的额外存储 。片上ECC是DDR5系统可以实现更高速度的高级RAS功能 。对于每128位数据,DDR5 DRAM有8个额外的位用于ECC存储 。
DRAM在内部为WR数据计算ECC , 并将ECC代码存储在附加存储中 。在读取操作中,DRAM读取实际数据以及ECC代码,并且可以纠正任何读取数据位上的任何一位错误 。因此,片上ECC提供了进一步的保护,以防止DDR5存储器阵列内部的单位错误 。由于此方案无法提供任何针对DDR通道上发生的错误的保护,因此将片上ECC与边带ECC结合使用以增强内存子系统上的端到端RAS 。图3描述了带有片上ECC的WR和RD操作流程 。
图3:WR和RD操作与片上ECC一起流动 。
Link-ECC
Link-ECC方案是功能,可针对链路或通道上的单位错误提供保护 。存储器控制器为WR数据计算ECC , 并在特定位上将ECC与数据一起发送 。DRAM在接收到的数据上生成ECC,将其与接收到的ECC数据进行比较 , 并纠正所有单位错误 。对于读取操作,控制器和DRAM的作用相反 。请注意,link-ECC不能针对内存阵列上的单位错误提供任何保护 。但是,内联ECC与链接ECC结合使用可提供针对单比特错误的端到端保护,从而增强了通道的鲁棒性 。图4描述了具有链接ECC的WR和RD操作流程 。
图4:WR和RD操作与Link-ECC一起进行 。
结论
广泛使用的存储器RAS功能之一是纠错码(ECC)方案 。使用标准DDR存储器的应用程序通常实现边带ECC,而使用LPDDR存储器的应用程序则实现嵌入式ECC 。由于具有更高的速度,因此对DDR5和通道具有明显的SI影响,现在甚至分别以裸片上和链接ECC的形式在DDR5和 DRAM上也支持ECC 。