01. 概况
Vivado中的DDR4 SDRAM IP 核集成的ECC功能是一种硬件级的数据完整性保护机制,主要用于检测和纠正DDR4内存读写过程中可能发生的单比特错误,并检测多比特错误(通常为双比特错误)。这对于高可靠性应用(如服务器、通信设备、金融系统、医疗设备等)至关重要。
本章节首先对ECC做个简单介绍。
02. 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位。
03. 总结
本章节主要讲述ECC的功能介绍并概括了ECC的实现方式及操作流程。简单介绍了ECC的控制器接口,下一章节来详细了解ECC的控制器列表,并通过xilinx官方文档pg150来详细介绍ECC控制寄存器的功能。
文章来源:威视锐