DDR ECC分类

      为了在运行时处理这些内存错误,内存子系统必须具有先进的 RAS(可靠性、可用性和可维护性)功能,以在发生内存错误时进行修正,延长整个系统的正常运行时间。如果没有 RAS 功能,系统很可能会因为内存错误而崩溃。但是,RAS 功能允许系统在出现可纠正的错误时继续运行,同时记录不可纠正错误的详细信息,以便将来进行调试。

作为内存 RAS 功能的 ECC

内存子系统中较常用的一种 RAS 方案是纠错码 (ECC) 内存。DDR 控制器通过为实际数据生成 ECC SECDED(单位纠错和双位检错)数据并存储到附加 DRAM 存储器中,可以对 DRAM 发送的数据进行单位纠错和双位检错。

ECC 生成和校验顺序如下:

ECC 数据由控制器根据实际的 WR(写入)数据生成。内存同时存储写命令的数据和 ECC 数据。

在 RD(读取)操作期间,控制器从内存读取数据和相应的 ECC 数据。控制器利用接收到的数据重新生成 ECC 数据,并将其与接收到的 ECC 数据进行比较。

如果两者匹配,则不会发生错误。如果不匹配,ECC SECDED 机制允许控制器纠正任何单 bit 错误并检测双 bit 错误。

这种 ECC 方案提供端到端的保护,以防止可能在控制器和内存之间的内存子系统中发生的单 bit 错误。

     基于 ECC 的实际存储,ECC 方案可能有两种类型:side-band ECC 或 inline ECC。在 side-band ECC 中,ECC 数据存储在单独的 DRAM 上;在inline ECC 中,ECC 数据与实际数据一起存储在同一个 DRAM 上。

       DDR5 和 LPDDR5 支持的数据速率远高于其前代产品,因此它们支持更多 ECC 功能,以增强内存子系统的稳定性。DDR5 中的 On-die ECC 和 LPDDR5 中的 Link ECC 就是两种此类 RAS 方案,可进一步增强内存子系统 RAS 功能。

Side-band ECC

    side-band ECC 方案通常在应用中使用标准 DDR 内存(如 DDR4 和 DDR5)实现。顾名思义,ECC 数据作为边带数据连同实际数据发送到内存。例如,对于 64 位数据宽度,增加 8 个数位用于 ECC 存储。因此,当今企业级服务器和数据中心常用的 DDR4 ECC DIMM 具有 72 位宽。这些 DIMM 有两个额外的 x4 DRAM 或一个 x8 DRAM,用于额外的 8 位 ECC 存储。因而在 side-band ECC 中,控制器会同时读写 ECC 数据和实际数据。此 ECC 方案不需要额外的 WR 或 RD 开销命令。图 2 描述了 side-band ECC 的 WR 和 RD 操作流程。如果接收的数据没有错误,side-band ECC 与 inline ECC 相比,延时损失更小。

Side-band ECC即为标准DDR 内存的ECC,如上图,ECC的生成和校验均由Memory Controller来完成,Data通道宽度为64-bit,有额外专门的8-bit ECC通道(一共72-bit),DIMM端也有专门的颗粒存储ECC。读写操作如下:

写:Memory Controller会根据64-bit Data计算出ECC,再经ECC通道写入DIMM端ECC位置。

读:Memory Controller会读取Data和ECC,Memory Controller再根据Data计算出ECC,然后通过对比读取的ECC和计算出的ECC进行校验
 

  

            图 2:side-band ECC 的 WR 和 RD 操作流程

Inline ECC

     Inline ECC 方案通常在使用 LPDDR 内存的应用中实现。LPDDR DRAM 具有固定信道宽度(LPDDR5/4/4X 信道宽度为 16 位),因此 side-band ECC 对于此类内存而言是一种昂贵的解决方案。例如,对于 16 位数据宽度,需要为 7 位或 8 位 ECC 位宽的 inline ECC 额外分配 16 位 LPDDR 信道。此外,7 或 8 位 ECC 数据字段仅部分填充了 16 位额外的通路,导致存储效率低下,还给地址命令信道带来额外负载,可能会对性能有所影响。因此,inline ECC 成为更适合用作 LPDDR 内存的解决方案。

    Inline ECC 中的控制器不需要额外的信道来存储 ECC,而是将 ECC 数据存储在存储实际数据的同一 DRAM 信道中。因此,内存信道的总体数据宽度与实际数据宽度相同。

     在 inline ECC 中,16 位信道内存被分区,使得内存的专用部分被分配给 ECC 数据存储。当 ECC 数据未与读写数据一起发送时,控制器为 ECC 数据生成单独的开销 WR 和 RD 命令。因此,实际数据的每条 WR 和 RD 命令都伴有一条 ECC 数据的开销 WR 和 RD 命令。高性能控制器通过在一条 ECC WR 命令中封装几个连续地址的 ECC 数据,以此来降低此类 ECC 命令的损失。同样,控制器在一条 ECC RD 命令中读取内存发出的若干连续地址的 ECC 数据,并且可以将读出的 ECC 数据,应用于该连续地址产生的实际数据。因此,流量模式越有序,此类 ECC 开销命令造成的延迟损失越小。图 3 描述了 inline ECC 的 WR 和 RD 操作流程。

  

图 3:Inline ECC 的 WR 和 RD 操作流程

inlineECC的原理是(8,4)汉明码

Inline ECC为LPDDR中传统的ECC方案,LPDDR数据宽度为16-bit,Inline ECC没有额外的ECC通道,所以需要额外增加ECC数据的读写操作来传输ECC,ECC数据一样被写到DIMM端,这样影响了效率,对性能也产生了影响。具体读写操作如下:

写:Memory Controller根据Data计算出ECC,Memory Controller通过不同的命令将Data和ECC分别传送至DIMM。

读:Memory Controller用不同的命令从DIMM端读取Data和ECC,Memory Controller根据Data再次计算出ECC,比较读取的ECC和计算出的ECC进行校验。

On-die ECC

每一代 DDR 的发展,DRAM 容量通常都会增加。DRAM 供应商通常也会缩小工艺技术,以实现更高的速度和更经济的量产。面对更高的容量和速度以及更小的工艺技术,DRAM 内存阵列出现单位错误的可能性会增加。为进一步改善内存信道,DDR5 DRAM 配备额外的存储器,只用于 ECC 存储。On-die ECC 是一种高级 RAS 功能,可获得 DDR5 系统的支持以实现更高的速度。DDR5 DRAM 为每 128 位数据额外设置 8 位的 ECC 存储空间。

DRAM 内部计算 WR 数据的 ECC,并将 ECC 数据存储在额外的存储器中。在读取操作中,DRAM 读出实际数据以及 ECC 数据,并且可以纠正任何读数据位上的任何单位错误。因此,on-die ECC 进一步保护 DDR5 内存阵列免于产生单位错误。由于此方案无法针对 DDR 信道上发生的错误提供任何保护,所以 on-die ECC 会与 side-band ECC 结合使用,以增强内存子系统上的端到端 RAS。图 4 描述了 on-die ECC 的 WR 和 RD 操作流程。

个人理解:

ECC是dram内部产生的,内部检测的。所以不会对数据从DRAM出来到controler之间的通道进行数据检测保护。

图 4:片上 ECC 的 WR 和 RD 操作流程

On-die ECC是DDR5上推出的新功能,随着DDR的速度,工艺双重提升,Memory出现问题的概率大大的增加了,为了降低Memory问题,DDR颗粒本身可以对自己的数据进行校验(Data 128-bit, ECC 8-bit);即DDR5的颗粒自己具备ECC的生成,校验和存储功能,即所有的动作均在DIMM颗粒内进行。因此ECC数据不需要传输至Memory Controller端,此功能对Memory Controller透明,可以和Side-band ECC同时使用,互不干涉。具体的读写操作如下:

写:Memory Controller将Data传输至DIMM,DIMM颗粒计算出ECC在存储至颗粒里面。

读:DIMM颗粒读出Data和对应的ECC,DIMM颗粒再次计算出ECC,和读取的ECC进行校验。

Link ECC

Link-ECC 方案是一种 LPDDR5 功能,可保护 LPDDR5 链路或信道免受单位错误的影响。内存控制器计算 WR 数据的 ECC,并在特定位上发送 ECC 和数据。DRAM 基于接收到的数据生成 ECC,对照接收到的 ECC 数据进行校验,并纠正任何单位错误。控制器和 DRAM 在读取操作中的作用是相反的。请注意,link ECC 不针对内存阵列上的单位错误提供任何保护。然而,inline ECC 与 link ECC 相结合,通过提供端到端的单位错误防护,增强了 LPDDR5 信道的稳定性。图 5 描述了 link ECC 的 WR 和 RD 操作流程。

Link ECC是LPDDR5新有的功能,其定位检测LPDDR5链路是否产生了问题;做法为用Memory Controller计算出的ECC和DIMM计算出的ECC进行对比,这样可以确保数据中链路上没有发生错误;但是DIMM端数据存储中发生的问题是不能被检测的。具体读写操作如下:

写:Memory Controller计算出ECC,并用Inline的方式将数据和ECC分别传送至DIMM,DIMM通过Data再次计算出ECC,计算出的ECC被和传输到的ECC进行比较校验。

读:DIMM根据Data计算出ECC,Data和ECC分别被传送至Memory Controller;Memory Controller根据Data再次计算出ECC,计算出的ECC和被传过来的ECC进行比较校验。

link ECC原理

LPDDR5的Link ECC功能只能纠正最多2bit的fail,超过2bit的fail依旧无法纠正。????

存在疑问:ECC不应该只能对单bit错误进行纠正,对2bit数据只能做检查,对多bit数据不能保证能检测到?

其实现原理是在传输数据的过程中,同时传递Link ECC的校验码,当DRAM接收到数据和校验码时,DRAM内部会给数据做一个Link ECC的校验,去判断数据传输过程中有无bit fail。

当计算出的校验码不是0时,说明有fail,根据系列算法,可以反推出是数据fail还是Link ECC校验码错误。

此处不能看成3个表格,应该看成1个表格。是137列,11行。

Beat代表的是每个Burst的数据。 DQ pin行中代表的是DQ0-DQ7。S0-S8是算出来的Link ECC code.

对于DQ8-15计算方式与DQ0-7一致。

对于BurstLength=32时,分为前16个Burst和后16个Burst,分开进行Link ECC code计算。

计算公式是将每个1的位置的数据进行异或,从而得到S0-S8.

在输入数据时,将Link ECC code 和Data同时传输进入LPDDR5.

四种对比

### 回答1: PSPICE 17.2 是一种用于电子电路仿真和分析的软件工具。下面是一份简单的 PSpice 17.2 使用初级教程: 1. 安装和启动:首先,你需要下载并安装 PSpice 17.2 软件。安装完成后,双击图标启动软件。 2. 创建电路:在软件界面上,选择“文件”>“新建”,然后在电路编辑器中创建你的电路。你可以从元件库中选择组件,并将其拖放到画布上。连接元件的引脚以构建电路。 3. 设置元件参数:双击元件以打开元件参数设置对话框。在对话框中,设置元件的值、名称和其他参数。对于电阻、电容等基本元件,可以直接输入数值。 4. 设置仿真配置:选择“仿真”>“设置和校验”,然后在仿真设置对话框中选择仿真的类型和参数。你可以选择直流分析、交流分析、暂态分析等。设置仿真参数后,点击“确定”。 5. 运行仿真:选择“仿真”>“运行”来启动仿真。在仿真过程中,软件将模拟电路的响应,并将结果输出到仿真波形窗口中。 6. 查看仿真结果:在仿真波形窗口中,你可以查看各个元件的电流、电压等参数随时间变化的波形。你还可以对波形进行放大、缩小、平移等操作,以更详细地分析电路的性能。 7. 保存和导出结果:在仿真过程中,你可以选择将结果保存为文件或导出为其他格式,如图像文件或数据文件。 以上是 PSpice 17.2 使用初级教程的基本步骤。随着实践的深入,你可以进一步了解复杂电路的建模和分析方法,并尝试更高级的功能和技术。 ### 回答2: PSPICE 17.2是一款电子电路仿真软件,用于对电路进行分析和验证。以下是PSPICE 17.2的使用初级教程: 1. 下载和安装:在官方网站上下载PSPICE 17.2并进行安装。 2. 组件库:打开PSPICE软件后,点击“Capture CIS”图标,进入组件库界面。选择适当的电子元件,如电阻、电容、二极管等,将它们拖放到画布上。 3. 电路连接:在画布上拖放所需元件后,使用导线工具连接它们。点击导线图标,选择合适的连接方式,并将其拖动到适当的端口上。 4. 参数设定:双击元件,弹出元件属性对话框。在这里设置元件的数值,例如电阻的阻值、电容的电容值等。 5. 电源设置:在画布上点击右键,选择“Power Sources”,然后选择适当的电源,如直流电源或交流电源。设置电源的电压或电流数值。 6. 仿真设置:点击画布上方的“PSpice”选项,选择“Edit Simulation Profile”打开仿真配置对话框。在仿真配置中,设置仿真参数,如仿真类型(直流、交流、脉冲等)、仿真时间等。 7. 仿真运行:在仿真配置对话框中点击“Run”按钮,开始进行电路仿真运行。仿真完成后,可以查看并分析仿真结果,如电流、电压、功率等。 8. 结果分析:通过菜单栏中的“PSpice>Probe”选项,打开特定信号的仿真结果。通过选择信号节点,可以显示该信号的波形、幅值和频谱等信息。 9. 数据输出:仿真结束后,可以通过“PSpice>Results”菜单栏选项,导出仿真结果到文本文件,以供后续分析。 10. 误差调整:如果仿真结果与预期不符,可以检查电路连接、元件参数等以找出问题。根据需要进行调整,重新运行仿真以验证改进效果。 以上就是PSPICE 17.2使用初级教程的简要介绍。在使用过程中,请参考软件的帮助文件和官方文档,以获取更详细的指导和解决方法。任何新的软件都需要不断的实践和尝试,希望这个教程能对你有所帮助。 ### 回答3: PSPICE 17.2是一款常用的电路仿真软件,用于电路设计和分析。下面是一个简要的PSPICE 17.2的初级教程: 1. 下载和安装:首先,从官方网站下载PSPICE 17.2,并按照安装向导进行安装。安装完成后,打开软件。 2. 创建新工程:在PSPICE 主界面上,点击“File”菜单,然后选择“New Project”来创建一个新的工程。给工程起一个适当的名字,并选择工程的存储位置。 3. 添加电路元件:在工程界面上,点击“Place”图标,然后选择不同的元件来构建你的电路。你可以从库中选择各种电子元件,如电阻、电容、电感等,并将它们拖放到工程界面上。 4. 连接元件:选择“Wire”图标,然后点击元件的引脚来连接它们。确保连接顺序正确,以保证电路的正确性。 5. 设置元件参数:对于每个添加的元件,你需要设置它们的参数。右键点击元件,选择“Edit Propertiess”,然后在弹出的窗口中输入适当的参数值。 6. 添加电源:在电路中添加电源,以提供电路所需的电能。选择“Place”图标,然后选择合适的电源元件并将其拖放到电路中。同样,设置电源的参数值。 7. 设置仿真配置:在工程界面上,点击“PSpice”菜单,然后选择“Edit Simulation Profile”来设置仿真配置参数。你可以选择仿真类型、仿真时间和仿真步长等。 8. 运行仿真:点击“PSpice”菜单,选择“Run”来运行仿真。PSPICE将自动运行仿真并显示结果。 9. 分析和优化:根据仿真结果,可以分析和优化电路的性能。你可以观察电流、电压和功率等参数,以评估电路的性能,并根据需要进行调整。 10. 保存和导出结果:在分析和优化完成后,可以保存你的工程并导出结果。点击“File”菜单,选择“Save Project”来保存工程,然后选择“Outut”菜单,选择“Export”来导出结果。 以上是PSPICE 17.2的初级教程的简要介绍。通过以上步骤,你可以开始使用PSPICE 17.2进行电路设计和仿真。在实践中不断探索和学习,你将成为一个熟练的PSPICE用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哈哈黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值