DDR5 内存ECC

针对DDR5,已经写了很多文章来分析,但最近工作中碰到一个问题,同一个channel里的CB是不是可以任意互换? 让我对DDR5的ECC功能有一些疑问,查了下资料发现这里面水挺深,ECC居然还有好几种?

DDR作为目前主板上带宽最高的设备和协议,误码率当然是其中最重要的参数之一,但普通工程师一般不会接触到误码率,在日常工作中往往是以ECC和SI(signal quality)来体现的,SI保证误码率量级不要超出要求,ECC则负责出现误码情况的时候进行修正。

ECC,全称Error Correction Code,是用来在DDR数据传输过程中出现误码的时候进行检查并且纠正的,它极大地增强了DDR设备的RAS(Reliability, Availability,and Serviceability)特性。

DDR5的ECC有很多种方式,这篇文章就会具体分析每种方式的实现方式及其功能,首先针对我的问题,出现在memory connector上的CB,也即check bit,是属于DQ的,但又独立于DQ,有专属于CB的DQS来配合使用,因此理论上CB在同一个channel内是可以任意互换的。

不同的ECC方案

Side-band ECC 边带ECC

边带ECC,顾名思义是增加了边带ECC信号,对于DDR5来说,64bit的数据将会要求额外增加8bit side band ECC信号,也即总共72bit数据。当然DDR5内部有subchannel,所以也会有32+4的组合。

有side band ECC的DDR,也即默认是RDIMM,带有控制器。

读写过程中有些不同,对于读,控制器会根据数据产生ECC code,并且将ECC code与实际数据一同发送出去;对于写,控制器会读取ECC code与实际数据,并且根据实际数据再产生ECC code,将前后ECC code对比来确认收到的数据是否正确。 这种方式不会产生额外的读或者写命令,与inline ECC相比,在没有接收到错误数据的时候,延迟更小。

Inline ECC 内联ECC

内联ECC一般用于LPDDR设计中,因为LPDDR颗粒位宽是固定的,LPDDR5/4都是16bit,边带ECC在这种情况下性价比就很低了,以64bit数据为例,需要8bit ECC,但因为没有8bit LPDDR,就还是需要增加一颗16bit的颗粒,并且即使增加颗粒,因为ECC只有8bit,反而会有额外的开销花在地址和命令通道上,影响性能。

在这种背景下,内联ECC变成了LPDDR的选择。这种方式不需要为ECC提供单独的芯片支持,而是就放在和数据同一颗颗粒内,没有额外开销,所以LPDDR的数据宽度和实际通道宽度相同。

在内联ECC里,会对每一个16bit内存分区,部分内存会用来分配给ECC code。对于ECC code,有两种处理方式,一种是将ECC和WR或者RD数据一块发送;另一种则是当不一起发送的时候,控制器会为ECC code单独生成WR和RD命令。高性能的处理器可以通过将几个连续地址的ECC打包在一块来降低这种ECC命令的开销,所以当数据流是连续地址的时候,延迟损失会更小。

On-die ECC 片上ECC

以上两种方式,都是针对传输通道上的数据误码,也即发送和接收方(CPU和DRAM)总有一方是正确的,通过ECC code可以发现并且解决一部分误码;on die ECC则与它们不同,专门用于DRAM内部可能出现的误码。

On die ECC的实现方式是对于每128bit数据,DRAM会有8个额外的bit来进行ECC存储,根据ECC算法,这样可以用来纠正任何读取数据位上的任何一位错误。

需要注意的是,这是一种发生在DRAM内部的过程,是为了防止在高速情况下发生片上单位错误,对于DRAM到CPU之间的通道传输没有帮助,并且CPU也不会有感知这一过程。

实际应用中,On die ECC可以与其他方式,比如以上的任意一种结合使用,来增强端到端RAS。

Link ECC

Link ECC方案是LPDDR的功能,提供单bit error的修正功能。

控制器会为WR数据计算ECC,并且在特定位上与数据一起发送,DRAM在接收端可以基于收到的数据再次产生ECC,并且和收到的ECC对比,这样来修正任意一位的bit error;对于RD,模式相反。但link ecc并不能修正片上的错误。

所以说,inline ecc和link ecc结合在一起使用可以提供单bit错误的端到端保护。

四种方式对比

CompareSide-band ECCInline ECCOn-die ECCLink ECC
Memory TypeDIMMLPDDRDRAMLPDDR5
Latency PenaltyLowHigherLowHigh
ReliabilityHighLower-erHighLower
CostHighNo costLowerNo cost
Protect AreaChannelChannelDRAMChannel

结语

随着DDR速率的不断攀升,不管是片内还是通道,误码率也要求不断降低,这两者都为设计带来了很大挑战,因此ECC基本上变成了标配(当然其他高速接口也都有各自的ECC处理办法)。通过各种ECC的组合,对颗粒及通道上可能出现的误码进行修正,也算是为了高速所作出的努力。

因为不同厂商和设计方的考虑,现在一种功能往往以不同的方式实现,来增强某一协议中不同的方面,随着速率和复杂度提升,这也是不得已而为之的吧……不过不管如何,各种借口总是朝着更快更强的方向在努力,期待看到DDR突破10000MHZ的那天!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值