www.design-reuse-china.com
搜索,选择,比较,与提供商进行安全高效的联系
Design & Reuse We Chat
D&R中国官方微信公众号,
关注获取最新IP SOC业界资讯

技术洞见 | LPDDR5之Link ECC介绍

Introduction to Link ECC in LPDDR5

mp.weixin.qq.com – Nov. 06, 2026 –

本文转载自知乎作者执笔存心的专栏,转载文章仅供学习和研究使用。

在LPDDR5协议中,Link ECC已经成为一个可选的功能。支持Link ECC的DRAM在WCK频率≤1600MHz时不需要开启Link ECC。对于支持Link ECC的DRAM,控制器可以根据系统配置、操作速度或其他要求决定是否启用Link ECC功能。

Link ECC的特征

首先,让我们通过图1回顾一下Link ECC的特征,它会在控制器和DRAM芯片上都进行ECC校验位的计算,只有当两次计算的ECC校验位完全一致时,才会把控制器传来的数据写入到DRAM中或是把DRAM中读取出的数据传输给控制器端。因此Link ECC主要覆盖的是从DRAM芯片到控制器之间的传输过程可能产生的错误。

Link ECC的数据传输过程

写入时Link ECC的数据传输过程

图2展示了LPDDR5协议中启用Link ECC时,写入数据的传输过程。当Link ECC启用时,在每个写入的burst中,都会根据128 bit的Data生成ECC校验位,同时还会针对DMI上的16 bit数据生成对应的校验位并进行检查。这是因为LPDDR5协议中的DMI Pin集成了DM(Data Mask)和DBI(Data Bus Inversion)两种功能,在写入过程中可能会通过DBI将写入的数据反转以降低传输过程的功耗,因此在计算Data bit的ECC校验位时,除了Data bit本身,还需要有正确的DBI的信息才能准确地还原写入数据。为了保障DBI数据能够正确地传输,在传输过程中也需要通过Link ECC进行保护,以确保DMI上的数据即使发生了错误也可以纠正回来。由于DBI操作是以Byte为单位的,即每Byte数据对应1 bit DMI,因此128 bit数据对应16 bit DMI。128 bit data和16 bit DMI数据所对应的ECC校验位,都通过RDQS_t Pin来传输。图2中的DQ[7:0]的绿色部分代表了BL32即Burst Length=32的场景。由于LPDDR5中的Link ECC是以128 bit data为一个计算单位的,8个DQ 16拍就可以传输128 bit data,因此BL32需要分成两笔16拍的数据分别进行Link ECC的计算。

在LPDDR5中,Link ECC采用的是SECDED的编码方法。

根据SECDED的编码规则,对于16 bit的DMI数据,需要6 bit ECC校验位,对应图2中最下方RDQS_t Pin上的6拍橙色数据。而对于128 bit的data,需要 log₂(128) +2=9 bit校验位,对应图2中最下方RDQS_t Pin上的9拍黄色数据。

读取时Link ECC的数据传输过程

我们再来看看读取过程中的ECC数据是怎么传输的,如图3所示,同样在BL32场景下,在每个读取的burst中,Link ECC会针对128 bit data生成ECC校验位。由于RDQS Pin需要用于读取过程中的数据采样,因此读取过程中的ECC数据不能像写入过程中那样通过RDQS Pin传输,而是需要通过DMI Pin来传输。进一步地,由于ECC数据占用了DMI Pin,无法实现DBI的功能,因此在读取过程中Link ECC和DBI是互斥的,无需再像写入过程中那样对DBI数据也计算ECC校验位,而是只用计算128 bit data对应的9 bit ECC校验位,如图3中最下方DMI Pin上的9拍黄色数据所示。

读取过程与写入过程类似的是,LPDDR5中的Link ECC都是以128 bit data为一个计算单位的,因此在Burst Length=32的场景下,需要分成两笔16拍的数据分别生成对应的ECC校验位。而读取过程与写入过程类区别的点在于,读取过程每笔16拍的数据只产生9 bit ECC数据,而写入过程中由于还要计算DBI的ECC数据,因此每笔16拍的数据会产生9+6=15 bit ECC数据。

需要注意的是,图2和图3中只展示了8个DQ对应的场景,对于16个DQ的LPDDR5 DRAM,在Burst Length=16的场景下,总共有256 Bit数据,因此会产生两组ECC校验位,而在Burst Length=32的场景下,总共会产生4组ECC校验位。

Link ECC校验位生成规则

接下来我们来详细介绍一下Link ECC的校验位是如何计算生成的。图4展示了LPDDR5的Link ECC使用的校验矩阵,虽然这个矩阵因为页面的宽度限制分成了三部分来显示,但是实际上应该将它整体上应该看作一个9行137列的矩阵。其中第一行代表了0~15拍共计16拍的数据,第二行代表了8个DQ,每一拍在8个DQ上都有1 bit数据,因此总共有128 bit data。第二行的最后9列,代表了9个校验位。

S0-S8也代表了9个校验位,其生成规则可以参考往期文章中关于SECDED编码规则的详细介绍。现在需要思考的是,当我们拿到这样一张校验矩阵的表格,应当如何理解?

图4中所有标注了1的色块,实际上都是在说明每个校验位的计算方法。首先以S8为例,我们可以看到矩阵中S8那一行全部都是1,其含义为S8的生成规则是所有Data Bit的异或计算结果。由于多Bit数据的异或运算结果可以看成是看护它们的奇偶校验码,因此S8实际上是所有数据位的奇偶校验码,而S0-S7这8 bit实际上对应各个部分数据的奇偶校验码,也称为局部校验码。当ECC没有检测到错误时,[S8:S0]的值会为0,反之,当ECC检测到有错误时,[S8:S0]的值不为0。正是有了全局校验码S8的存在,才使得SEC编码(即可以纠正单bit错误)有了DED(即可以检测双bit错误)的功能。具体来说,当局部校验码和全局校验码同时检测到错误,即[S8:S0]不为0且S8为1时,此时大概率是出现了1 bit错误,因为发生2 bit错误时全局的奇偶检验码不会检测到错误,而发生>2 bit的多bit错误的概率通常很低;而当局部校验码检测到错误,而全局校验码没有检测到错误时,即[S8:S0]不为0且S8为0时,此时大概率是出现了2 bit错误,因为发生1 bit错误时全局的奇偶检验码会检测到错误,而发生>2 bit的多bit错误的概率通常很低。

基于以上分析,我们对S8是如何基于数据进行计算得到的已经有了基本的概念,那么类似地我们就能理解S0-S7是如何生成的。以S2为例,在图4矩阵中的第5行,即以S2开头的那一行,将所有标注了1的数据位(如第0拍DQ4、5、6、7上的数据,第1拍DQ4、5、6、7上的数据,依此类推……)进行异或运算即可得到S2。也可以理解为,S2就是所有这一行标注为1的数据的奇偶校验码。需要注意的是,在Link ECC的编码过程中,计算S0-S7的值时,C0-C7的值应当为0,但计算S8时需要用到计算出的S0-S7的值。

Link ECC的纠错过程

当Link ECC检测到单bit错误时,[S2:S0]会指明是哪个DQ发生了错误,[S7:S3]经过解码之后可以得到是哪一拍的数据发生了错误,结合这两方面的信息就可以得出是哪一bit数据发生了错误,将其数据反转即可得到正确的数据。需要注意的是[S7:S3]的值并不直接指向是哪一拍的数据发生了错误,而是需要通过解码才能获得该信息。当[S7:S3]中少于两位是1时,表明错误发生在校验位C0-C8中。

DMI bit ECC的过程与Data bit ECC的过程类似,区别仅在于DMI bit只通过一个Pin进行传输,因此无需像Data bit那样指出是哪个DQ出错了,只需要指出是哪一拍的数据出错了就可以定位到错误bit的位置。通过将[S4:S2]进行解码,可以获取DMI出错拍数的低2 bit信息,将这2 bit与[S1:S0]进行拼接就可以得到出错拍数的完整4 bit信息,这4 bit信息会指出是哪一拍的数据发生了错误,将其数据反转即可得到正确的数据。当[S4:S2]中少于两位是1时,表明错误发生在校验位C0-C5中。

接下来,我们结合图2来理解这9 bit校验位的传输过程。如图2所示,在16拍Data Bit的传输过程中,ECC Bit也在同步进行传输,由于在16拍的时间里,在RDQS_t Pin上总共只用传输15 bit数据,因此第0拍不会传输ECC Bit。同时如图2下方最后一行黄色色块所示,Data Bit对应的校验位C0-C8依次会在第7拍,第8拍……第15拍进行传输。

刚才我们还提到,由于LPDDR5的写入过程中可能会采用DBI使数据反转来降低数据传输功耗,因此为了保证数据能够正确的传输,我们对DMI Pin上的DBI数据也要进行ECC的编码。图5给出了LPDDR5中,对16 bit DMI数据所对应的校验矩阵。根据SECDED的编码规则,对于16 bit的DMI数据,需要6 bit ECC校验位,图5中的C0-C5和S0-S5都代表了这6 bit ECC校验位。我们可以采用与图4类似的方法来理解这6 bit ECC校验位的生成规则,即S5代表了16 bit DMI数据的全局校验位,而S0-S4代表了5 bit局部校验位,每个校验位都是校验矩阵中对应行标注了1的数据的异或运算结果,S0-S5共同构成了16 bit DMI数据采用SECDED编码得到的Link ECC校验位。图2下方最后一行的橙色色块,表明DMI Bit对应的校验位C0-C5依次会在第1拍到第6拍通过RDQS_t Pin进行传输。

图6清晰地展示了LPDDR5写入过程中启用Link ECC时的数据流,控制器端接收到来自SOC的DQ数据,首先需要进行DBI/DMI的编码,如果开启了DBI,则需要对数据进行取反,DBI的编码规则与LPDDR4相同。在完成DBI编码之后,如果开启了Link ECC功能,就会根据Data bits和DMI bits分别生成对应的ECC校验位。由于在DBI编码过程中,Masked Write操作会改变数据,因此需要在DBI编码之后再进行ECC校验位的生成,这样能保障在任何情况下进行ECC计算的都是修改之后的数据。在ECC校验位计算完成之后,6 bit DMI的ECC和9 bit Data的ECC都会通过RDQS_t Pin进行传输,如图2所示。

当DRAM接收到来自控制器的写入数据后,DRAM会对DMI ECC进行检查和校验,同时也会对Data ECC进行检查和校验。一旦DMI通过验证,DRAM会继续执行Data的DBI解码,DBI的编码规则与LPDDR4相同。之所以Data ECC的检查和校验可以放在DBI解码之前,是因为ECC编码具有这样一个特性,即使整个CodeWord被反转,也不会改变它的ECC功能。

LPDDR5读取过程中启用Link ECC时的数据流如图7所示,由于LPDDR5的读取过程中,Link ECC和Read DBI都需要占用DMI Pin,因此两者是互斥的,不能同时开启。当开启Link ECC时,DRAM会针对读取的数据进行ECC计算,生成ECC校验位;当开启DBI时,DRAM会将读取的数据进行DBI编码,然后再进行传输。因此,对比图6和图7可以看到,读取过程和写入过程的区别在于,写入过程可以先进行DBI编码再进行ECC计算,而读取过程只能在DBI编码和ECC计算中二选一。此外,在读取过程中开启Link ECC时,由于DBI不能同时开启,因此也无需像写入过程中那样,对DBI数据进行ECC校验位的计算。在开启DBI时,DBI的编码规则与LPDDR4相同。

在控制器接收到来自DRAM的读取数据之后,如果开启了DBI功能,控制器就会进行DBI的解码,DBI的解码规则与LPDDR4相同,解码后的数据将由控制器传输给SoC端;而如果开启了Link ECC,控制器就会执行ECC的检查和校验。

关于牛芯半导体

牛芯半导体是一家国内领先的高速互联半导体企业,致力于以高速互联技术赋能全域互联互通。公司主营业务为SerDes、DDR、D2D等高速互联技术的研发与产业化,核心高速互联产品涵盖芯片定制设计、IP授权、专用芯片开发,已深度应用于人工智能、通用计算、半导体设备、智能驾驶等终端应用场景,可全方位适配芯片设计公司、终端系统厂商、大型装备集团等客户对芯片内、芯片间、芯片与外部设备之间等多层级的高速通信及高速数据传输需求。

点击此处阅读更多

 Back

业务合作

添加产品

供应商免费录入产品信息

点击此处了解更多关于D&R的隐私政策

© 2026 Design And Reuse

版权所有

本网站的任何部分未经Design&Reuse许可,
不得复制,重发, 转载或以其他方式使用。