针对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错误的端到端保护。
四种方式对比
Compare | Side-band ECC | Inline ECC | On-die ECC | Link ECC |
---|---|---|---|---|
Memory Type | DIMM | LPDDR | DRAM | LPDDR5 |
Latency Penalty | Low | Higher | Low | High |
Reliability | High | Lower-er | High | Lower |
Cost | High | No cost | Lower | No cost |
Protect Area | Channel | Channel | DRAM | Channel |
结语
随着DDR速率的不断攀升,不管是片内还是通道,误码率也要求不断降低,这两者都为设计带来了很大挑战,因此ECC基本上变成了标配(当然其他高速接口也都有各自的ECC处理办法)。通过各种ECC的组合,对颗粒及通道上可能出现的误码进行修正,也算是为了高速所作出的努力。文章来源:https://www.toymoban.com/news/detail-608444.html
因为不同厂商和设计方的考虑,现在一种功能往往以不同的方式实现,来增强某一协议中不同的方面,随着速率和复杂度提升,这也是不得已而为之的吧……不过不管如何,各种借口总是朝着更快更强的方向在努力,期待看到DDR突破10000MHZ的那天!文章来源地址https://www.toymoban.com/news/detail-608444.html
到了这里,关于DDR5 内存ECC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!