威三电子  

               威三电子

DDR4系列之ECC功能(二)

2026-05-26 13:43:05

浏览:

一、          概述在上一讲中我们提到了ECC寄存器的控制接口,使用axi4_lite接口提供了一种标准、简单、***的通信协议。可以通过读寄存器地址来访


一、          概述

在上一讲中我们提到了ECC寄存器的控制接口,使用axi4_lite接口提供了一种标准、简单、***的通信协议。可以通过读寄存器地址来访问寄存器中的数据,也可以通过写寄存器来改变寄存器的值,从而实现对ECC功能的控制。

二、          axi4_lite接口

ECC的控制器接口如下,包括读地址、写地址、写响应、读数据、读响应、写数据。

通过读地址和读数据通道来读取ECC寄存器的值,

通过写地址和写数据来向ECC寄存器中写值,实现ECC的控制。

Vivado 中为 DDR4 IP 核启用了 ECC(纠错码)功能,并且选择了 AXI4 作为主接口时,会出现这组接口。它通过一个标准的、32位宽的的axi4_lite 总线与外部连接。

ECC功能特性:

1、这组接口与数据接口并行传输,不影响数据接口的传输,相当于在旁边实时监控着DDR4的读写操作。

2、当内存读写过程中发生错误时,ECC会将错误记录,包括:

l  错误类型:是能自动修复的单比特错误(可纠正错误),还是严重的多比特错误(不可纠正错误)。

l  错误地址:发生错误的内存地址

l  错误详情:具体是地址中哪个bit出现错误。

3、故障注入

可以向故障寄存器里写值,来实现向内存数据里写入错误数据,这样做的目的是测试ECC纠错机制是否正常工作,故意制造这个错误,可以验证ECC系统是否能自动检测并纠正它,从而验证ECC的可靠性。

注意:一次只能写入一个错误,例如,对于72位宽(64位数据+8ECC)的数据,一次操作只能破坏前72位中的某一个bit

4、中断配置

可以向中断寄存器中写入值来控制中断的产生条件:

当发生可纠正错误时要不要触发中断,当发生不可纠正错误时要不要触发中断。这样DDR控制器可以根据不同的错误等级做出不同的反应,比如只有发生不可纠正的错误才告知用户,或者通知用户ECC检测到了错误并纠正。

 

三、          ECC寄存器地址

ECC寄存器地址如下表所示,列出了ECC控制器地址和寄存器名称。

 

四、          ECC寄存器说明

ECC_STATUS

该寄存器记录了可纠正错误和不可纠正错误的发生情况。对于每种错误类型首次出现时,状态位会独立设置为 1。通过向相应的位位置写入 1 来清除状态位;也就是说,状态位只能被清零,而不能通过寄存器写入操作设置为 1ECC 状态寄存器与 ECC 启用中断寄存器是相互独立运作的。

ECC_EN_IRQ

这个寄存器决定ECC状态寄存器中的CE_STATUSUE_STATUS位的值是否断言中断输出信号(ECC_Interrupt)。如果CE_EN_IRQUE_EN_IRQ都设置为1(使能),则中断信号的值是CE_STATUSUE_STATUS位之间的逻辑或。

ECC_ON_OFF

ECC_ON_OFF控制寄存器允许应用程序启用或禁用ECC检查。设计参数C_ECC_ONOFF_RESET_VALUE(默认开启)决定ECC开启/关闭设置的重置值。当ECC可能在外部内存中初始化,也可能不在外部内存中初始化时,这有助于启动操作。当关闭时,读操作的ECC检查是关闭的,但写操作的ECC生成是活跃的。

CE_CNT

这个寄存器计算可纠正错误的出现次数。它可以使用寄存器写入清除或预设为任何值。当计数器达到***值时,它不会换行,而是停止递增并保持在***值。CE计数器宽度的值固定为8位。

CE_FFA[31:0]

       该寄存器存储***次访问带有可纠正错误的译码DRAM地址的低32位(31:0位)。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器重新启用以存储下一个可纠正错误的地址。存储失败的地址在复位后启用。

CE_FFA[63:32]

这个寄存器存储解码的DRAM地址的上32位(位[55:32])的***次发生访问与可纠正的错误。地址格式定义在Error address中。此外,该寄存器的上字节存储ecc_single信号。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器重新启用以存储下一个可纠正错误的地址。存储失败的地址在复位后启用。

CE_FFD[31:0]

该寄存器存储了***次出现可纠正错误时的(已纠正的)失败数据(比特位[31:0])。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器被重新启用以存储下一个可纠正错误的数据。失败数据的存储在复位后启用。

CE_FFD[63:32]

这个寄存器存储了***次出现可纠正错误时的(已纠正的)失败数据(比特[63:32])。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器被重新启用以存储下一个可纠正错误的数据。失败数据的存储在复位后启用。

CE_FFD[95:64]

注意:该寄存器仅在DQ_WIDTH==144时使用。

这个寄存器存储了***次出现可纠正错误时的(已纠正的)失败数据(Bits[95:64])。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器被重新启用以存储下一个可纠正错误的数据。失败数据的存储在复位后启用。

CE_FFD[127:96]

注意:该寄存器仅在DQ_WIDTH==144时使用。

这个寄存器存储了***次出现可纠正错误时的(已纠正的)失败数据(比特位[127:96])。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器被重新启用以存储下一个可纠正错误的数据。失败数据的存储在复位后启用。

CE_FFE

该寄存器存储具有可纠正错误的访问的***次发生的ECC位。当ECC状态寄存器中的CE_STATUS位被清除时,该寄存器重新启用以存储下一个可纠正错误的ECC。系统复位后,将启动故障的ECC存储功能。

UE_FFA[31:0]

该寄存器存储了***次出现不可纠正错误的访问时解码的DRAM地址(31:0位)。地址格式定义在Error address中。当ECC状态寄存器中的UE_STATUS位被清除时,该寄存器被重新启用以存储下一个不可纠正的错误的地址。存储失败的地址在复位后启用。

UE_FFA[63:32]

这个寄存器存储了***次出现不可纠正错误时的译码地址(位[55:32])。地址格式定义在Error address中。此外,该寄存器的***字节存储ecc_multiple信号。当ECC状态寄存器中的UE_STATUS位被清除时,该寄存器被重新启用以存储下一个不可纠正的错误的地址。存储失败的地址在复位后启用。

UE_FFD[31:0]

该寄存器存储了***次出现不可纠正错误时的(未纠正的)失败数据(比特位[31:0])。当清除ECC状态寄存器中的UE_STATUS位时,该寄存器重新启用,以存储下一个不可纠正错误的数据。失败数据的存储在复位后启用。

UE_FFD[63:32]

该寄存器存储了***次出现不可纠正错误时的(未纠正的)失败数据(比特[63:32])。当清除ECC状态寄存器中的UE_STATUS位时,该寄存器重新启用,以存储下一个不可纠正错误的数据。失败数据的存储在复位后启用。

UE_FFD[95:64]

注意:此寄存器仅在DQ宽度为144时使用。

这个寄存器存储了***次出现不可纠正错误时的(未纠正的)失败数据(比特[95:64])。当清除ECC状态寄存器中的UE状态位时,该寄存器将重新启用,用于存储下一个不可纠正错误的数据。失败数据的存储在复位后启用。

UE_FFD[127:96]

注意:此寄存器仅在DQ_WIDTH == 144时使用。

这个寄存器存储了***次出现不可纠正错误时的(未纠正的)失败数据(比特位[127:96])。当清除ECC状态寄存器中的UE_STATUS位时,该寄存器重新启用,以存储下一个不可纠正错误的数据。失败数据的存储在重置后启用。

UE_FFE

该寄存器存储具有不可纠正错误的访问的***次发生的ECC位。当ECC状态寄存器中的UE_STATUS位被清除时,该寄存器重新启用以存储下一个不可纠正错误的ECC。复位失败ECC后使能。

FI_D0

该寄存器用于向写入内存的数据(比特位[31:0])中注入错误,并可用于测试错误纠正和错误信号。在寄存器中设置的位会切换后续数据写入内存的相应数据位[310],而不影响写入的ECC位。故障注入完成后,故障注入数据寄存器自动清0

Vivado IP目录中的DDR4 SDRAM设计中,只有当C_ECC_TEST= ONECC_TEST_Fl_XOR= ONECC = ON时,该寄存器才会实现。写入该寄存器和随后写入内存的操作不能中断。

FI_D1

该寄存器用于向写入内存的数据(比特[63:32])中注入错误,并可用于测试错误纠正和错误信号。在寄存器中设置的位可以切换相应的数据位[63:32]的后续数据写入内存,而不影响写入的ECC位。故障注入完成后,故障注入数据寄存器自动清0

该寄存器只有在Vivado IP目录中的DDR4 SDRAM设计中C_ECC_TEST = ONECC_TEST_FI_XOR = ONECC = ON时才实现。写入该寄存器和随后写入内存的操作不能中断。

FI_D2

注意:该寄存器仅在DQ_WIDTH =144时使用。

该寄存器用于向写入内存的数据(比特[95:64])中注入错误,并可用于测试错误纠正和错误信号。在寄存器中设置的位可以切换相应的数据位 [95:64]的后续数据写入内存,而不影响写入的ECC位。故障注入完成后,故障注入数据寄存器自动清0

该寄存器只有在Vivado IP目录中的DDR4 SDRAM设计中C_ECC_TEST= ONECC_TEST_FI_XOR = ONECC = ON时才实现。写入该寄存器和随后写入内存的操作不能中断。

FI_D3

注意:该寄存器仅在DQ_WIDTH=144时使用。

该寄存器用于向写入内存的数据(比特[127:96])中注入错误,并可用于测试错误纠正和错误信号。在寄存器中设置的位可以切换相应的数据位(字3或位[127:96])的后续数据写入内存,而不影响写入的ECC位。故障注入完成后,故障注入数据寄存器自动清0

Vivado IP目录中的DDR4 SDRAM设计中,只有当C_ECC_TEST=ONECC_TEST_Fl_XOR=ONECC= ON时,该寄存器才会实现。写入该寄存器和随后写入内存的操作不能中断。

FI_ECC

该寄存器用于将生成的ECC中的错误注入到内存中,并可用于测试纠错和错误信号。在寄存器中设置的位切换下一个数据写入内存的对应ECC位。故障注入完成后,故障注入ECC寄存器自动清0

Vivado IP目录中的DDR4 SDRAM设计中,只有当C_ECC_TEST = ONECC_TEST_FI_XOR = ONECC = ON时,该寄存器才会实现。写入该寄存器和随后写入内存的操作不能中断。

五、          总结

DDR4 ECC寄存器的作用是为用户提供一个重要的接口,使其能够洞察内存系统的运行状况,并在出现问题时计时纠正错误,从而极大地提升整个系统的可靠性。这对于服务器、数据中心、金融设备等需要常年稳定运行的关键系统来说,时必不可少的功能。

本文章由威三学院出品

对课程感兴趣可以联系我们

0
DDR4系列之ECC功能(二)
一、          概述在上一讲中我们提到了ECC寄存器的控制接口,使用axi4_lite接口提供了一种标准、简单、***的通信协议。可以通过读寄存器地址来访
长按图片保存/分享

北京威三电子科技有限公司

突破技术壁垒,芯创智联领航未来

 


北京威三电子科技有限公司 版权所有
京ICP备2026012969号
 

热线:

159-2199-9232

 

图片展示

淘宝店铺:

威三科教

地址:

北京市延庆区辰龙国际6号楼406室

微信公众号:

北京威三电子科技有限公司 

热线:159-2199-9232

淘宝店铺:威三科教

地址:北京市延庆区辰龙国际6号楼406


微信公众号

图片展示
北京威三电子科技有限公司 版权所有| 京ICP备2026012969号
微信公众号
客服中心
热线电话
15921999232
上班时间
周一到周五
二维码
扫码关注
客服中心
热线电话
15921999232
上班时间
周一到周五
二维码
扫码关注
添加微信好友,详细了解产品
使用企业微信
“扫一扫”加入群聊
复制成功
添加微信好友,详细了解产品
我知道了