当前位置: 首页 > news >正文

DDR5 ECC详细原理介绍与基于协议讲解

本文篇幅较长,涉及背景原理介绍方便大家理解其运作方式 以及 基于DDR5协议具体展开介绍。

背景原理介绍

上图参考:DDR 内存中的 ECC

写入操作时,On-die ECC的工作过程如下:

  1. SoC将需要写入到Memory中的数据发送给控制器
  2. 控制器将需要写入的数据直接发送给DRAM芯片
  3. 在DDR5 DRAM内部,根据写入的数据进行计算,生成对应的ECC码
  4. DRAM芯片将写入的数据和对应的ECC码保存在存储阵列中

读取操作基本上是写入过程的逆过程,On-die ECC的具体工作过程如下:

  1. DRAM芯片将数据和对应的ECC码读取出来
  2. DRAM根据读取出的数据进行计算,生成用于校验的ECC码
  3. DRAM将读取出的ECC码和上一步中计算生成的ECC码进行比较
  4. 若这两个ECC码相同,则表明读取出的数据没有发生错误,数据将直接传输给控制器;若这两个ECC码不同,则表明读取出的数据存在错误,将会对数据以单bit纠错的方式进行数据纠正

综上,On-die ECC的基本特征是ECC码的计算生成和比较都在DRAM芯片上进行。On-die ECC其实是一种较新应用在DRAM中的技术,随着DRAM芯片的不断微缩,到了DDR5技术代,BL和WL的间距和线宽不断减小,存储单元间发生串扰的可能性逐渐增加,因此误码率也在不断上升,需要通过On-die ECC来降低误码率。

Note:row hammer作为一种经典的内存硬件错误,即就是狂锤某一行,隔山打牛,让隔壁的行不寒而栗,在颤抖中改变立场。通俗一点的语言解释一下row hammer:DDR数据读取的过程,是通过ACT命令激活某一行row,读取到sense amp中,之后再写回到原来的cell。由于DDR芯片密度的增高,这种频繁的读写会对临近行产生影响,多次之后甚至会造成该cell的电量变化,进一步引起电平翻转

4.35 片上ECC -- 基于协议展开介绍

DDR5设备应实现内部单错误纠正(SEC:Single Error Correction)ECC以提高DRAM内部的数据完整性。DRAM将使用128个数据位来计算8个ECC校验位的ECC码。

对于x4 DDR5设备,即使x4是64位预取设备,内部预取用于片上ECC的是128位。对于x4设备的每个读或写事务,将内部访问DRAM阵列的额外部分,以提供用于128位ECC计算中所需的额外64位。换句话说,在x4设备中,每个8位ECC校验位字与DRAM的两个64位部分相连。对于x8设备,不需要额外的预取,因为预取与外部传输大小相同。对于x16设备,从不同的内部bank(相同的外部bank地址)中提取了两个128位数据字和它们对应的8个校验位。每个128位数据位和对应的8个校验位分别并行地进行检查。

在读取时,DRAM会在将数据返回给内存控制器之前纠正任何单比特错误。在读取周期中,DRAM不会将纠正后的数据写回阵列。

在写入时,DRAM会计算ECC并将数据和ECC位写入阵列。如果外部数据传输大小小于128个数据位编码字(对于x4设备),则DRAM将需要执行内部的“读-修改-写”操作。在合并传入的写入数据之前,DRAM会纠正因内部读取而产生的任何单比特错误,并重新计算8个ECC校验位,然后将数据和ECC位写入阵列。对于x8和x16 DDR5的情况,不需要进行内部读取操作。

对于x16设备,从两个内部bank(相同的外部bank地址)读取两个136位码字(two 136-bit code words࿰

http://www.xdnf.cn/news/757963.html

相关文章:

  • 3D Gaussian splatting 05: 代码阅读-训练整体流程
  • 【计算机网络】第3章:传输层—面向连接的传输:TCP
  • Spring Boot中Excel处理完全指南:从基础到高级实践
  • telnet 基本用法
  • Java并发编程中任务调度与线程池的配置优化
  • 大规模真实场景 WiFi 感知基准数据集
  • SSL/TLS 协议详解:安全通信的基石
  • C++修炼:位图和布隆过滤器
  • 布隆筛选详解
  • Ansible自动化运维工具全面指南:从安装到实战应用
  • 【Go语言生态】
  • Vue初始化脚手架
  • 数据库,Spring Boot,数据源
  • 第13讲、Odoo 18 配置文件(odoo.conf)详细解读
  • 6.1 英语复习笔记 3
  • 如何利用大语言模型生成特定格式文风的报告类文章
  • Redis分布式锁实现指南
  • 《P3959 [NOIP 2017 提高组] 宝藏》
  • 继承与多态
  • 篇章七 数据结构——栈和队列
  • 查看make命令执行后涉及的预编译宏定义的值
  • Python数学可视化——环境搭建与基础绘图
  • 力扣刷题(第四十四天)
  • 主数据编码体系全景解析:从基础到高级的编码策略全指南
  • GEE:获取研究区的DEM数据
  • RocketMQ 学习
  • 性能优化 - 案例篇:数据一致性
  • 清理 pycharm 无效解释器
  • CVE-2021-28164源码分析与漏洞复现
  • DDD架构