DDR4系列之ECC功能(一)
一、概述
Vivado 中的 DDR4 SDRAM IP 核 集成的 ECC (Error Correction Code) 功能是一种硬件级的数据完整性保护机制,主要用于检测和纠正 DDR4 内存读写过程中可能发生的单比特错误,并检测多比特错误(通常为双比特错误)。这对于高可靠性应用(如服务器、通信设备、金融系统、医疗设备等)至关重要。
本章节首先对ECC做个简单介绍。
二、ECC介绍
1、ECC功能目的:
提高数据可靠性: 抵御由宇宙射线、电源噪声、工艺偏差、信号完整性等问题引起的 DRAM 单元或传输过程中的单比特翻转。
自动纠错: 在读取数据时,如果检测到单比特错误 (Single-Bit Error, SBE 或 Correctable Error, CE),ECC 逻辑会自动计算并输出纠正后的数据。
错误检测: 检测多比特错误 (Multi-Bit Error, MBE 或 Uncorrectable Error, UE)(通常是双比特错误)。检测到 UE 时,IP 核会标记错误状态,但无法自动纠正数据,需要软件或上层协议介入处理。
降低系统崩溃风险: 防止因内存位错误导致的软件崩溃、数据损坏或系统宕机。
2、实现方式 (72-bit 接口)
数据位宽: 当启用 ECC 时,IP 核的物理接口(与 DDR4 颗粒/模组连接)必须配置为 72 位宽。
数据划分:
64-bit 用户数据: 这是实际应用需要读写的有效数据。
8-bit ECC 校验码: 这 8 位是根据 64 位用户数据计算生成的校验码(通常采用 SEC-DED 编码 - Single Error Correction, Double Error Detection)。
存储方式: 在 DDR4 内存中,64 位数据 + 8 位 ECC 码作为一个整体(72 位)存储在连续的地址空间中。内存本身并不知道数据区和 ECC 区的区别,它只是存储 72 位二进制数。
3、ECC操作流程
写入操作:
1、用户通过用户接口(如 AXI4 或 AXI4-Stream)提供 64 位 数据给 DDR4 IP 核。
2、IP 核内部的 ECC 编码器根据这 64 位数据实时计算出对应的 8 位 ECC 校验码。
3、IP 核将组合后的 72 位数据 (64 + 8) 写入 DDR4 物理内存。
读取操作:
1、IP 核从 DDR4 物理内存读取 72 位数据。
2、IP 核内部的 ECC 解码器对读出的 72 位数据进行校验:
情况一:如果无错误:ECC 解码器输出原始的 64 位用户数据,并标记无错误。
情况二:如果检测到单比特错误 (SBE/CE):
(1)解码器自动定位并翻转错误比特,得到正确的 64 位数据。
(2)通过用户接口输出纠正后的 64 位数据,并置位 Correctable Error (CE) 状态标志。用户得到的是已经修正好的正确数据。
情况三:如果检测到双比特错误 (MBE/UE):
解码器无法确定具体哪两位出错或如何纠正。通过用户接口输出原始的、可能包含错误的 64 位数据(未纠正)。置位 Uncorrectable Error (UE) 状态标志。用户必须根据 UE 标志丢弃或处理该错误数据。
4、用户接口
当使用AXI4-Stream接口读取数据时,IP会额外提供控制信号来说明ECC状态。当我们如下配置DDR4 IP 核时,(选用支持72数据位宽的内存),在工程中选择的是MTA18ASF1G72HZ-2G1。数据位宽为72,并勾选ECC。如图1所示。
用户接口选择512位数据宽度,在这里地址为33位,相比之前的32位宽度多出一位,用来存储ECC寄存器的信息。如图2所示。
经过上述配置,ECC控制寄存器接口如下:
对于用户的数据接口与之前没有变化,但会多出一组C0_DDR4_S_AXI_CTRL接口,这一组接口中用来写入或读取ECC控制寄存器。可以看到控制接口的地址为32位,加上数据接口的32位地址,总地址为33位。读写数据位宽为32位。
三、总结
本章节主要讲述ECC的功能介绍并概括了ECC的实现方式及操作流程。简单介绍了ECC的控制器接口,下一章节来详细了解ECC的控制器列表,并通过xilinx官方文档pg150来详细介绍ECC控制寄存器的功能。
本文章由威三学社出品
对课程感兴趣可以私信联系
更多推荐

所有评论(0)