Zynq7000系列FPGA中的DDRC纠错码(ECC)


仅在半总线宽度(16位)数据宽度配置中提供可选的ECC支持。这种配置下,外部DRAM DDR设备需要26位,其中16位用于数据,10位用于ECC。每个数据字节使用独立的5位ECC字段,这种模式提供了单错误纠正和双错误检测的能力。

ECC位与数据位以及未使用的位交织在一起,这种交织方式有助于在数据传输过程中同时传输数据和ECC校验信息,以便在接收端能够实时进行错误检测和纠正。如表10-13所示。

ECC位的使用

  • 单错误纠正:当数据中的任何一位发生错误时,ECC算法能够使用这些ECC位来定位和纠正这个错误。这确保了数据的完整性和准确性。
  • 双错误检测:此外,ECC还能检测到数据中的两位错误,尽管它不能纠正这种情况。检测到双错误后,系统可以采取适当的错误恢复措施,如重试操作、记录错误日志或触发警报。

ECC初始化

ECC仅在16位总线模式下被支持。当ECC被启用时,写操作会计算并存储ECC码以及数据,读操作会读取数据并对照存储的ECC码进行检查。因此,在读取未初始化的内存位置时,可能会收到ECC错误。为了避免此问题,必须先写入所有内存位置,然后才能读取。请注意,由于ECC是在字节分辨率上计算和检查的,因此对仅初始化了该字节的16位位置读取1个字节(16位位置的第二个字节未初始化)不会导致ECC错误。控制器仅检查已读取字节的ECC。通过CPU写入整个DDR DRAM可能需要大量时间。使用DMA设备为DDR控制器初始化生成更大的脉冲串并卸载CPU可能是值得的。请注意,只有Arm CPU和ACP接口可以访问DDR的最低512KB(见表4-1),CPU软件可能仍然需要初始化基于ECC的DDR的这个区域。

请注意,虽然只有两个数据字节通道用于实际数据,但所有四个通道都在ECC模式下使用,因此必须在所有通道上执行DDR训练。

ECC错误行为

对于可纠正的ECC错误,系统通常不会通过中断或AXI响应来主动发出错误信号。

对于不可纠正的ECC错误,控制器将SLVERR响应返回给发出请求的AXI总线主控器。在这两种情况下,有关错误的信息(如列、行和存储体错误地址、错误字节通道等)都记录在控制器寄存器空间中。

当控制器检测到可纠正的ECC错误时,它会执行以下操作:

  • 将校正后的数据作为读取数据的一部分发送到核心。
  • 将ECC错误信息发送到寄存器接口进行记录。
  • 执行RMW操作以更正DRAM中存在的数据(仅当启用ECC清理时(reg_ddrc_dis_scrub=0)。此RMW操作对核心不可见。在任何时候,控制器中只能有一个未执行的擦除RMW命令。当控制器处理另一个擦除RMW时,不会对发生的单比特ECC错误执行擦除。

当控制器检测到不可纠正的错误时,它会执行以下操作:

  • 将不可纠正的数据与错误响应一起发送到核心。这会导致AXI接口上的AXI SLVERR响应以及损坏的数据。AXI SLVERR响应将返回给待处理的事务主机,可能会产生L2/DMA中断、CPU预取/数据异常,或直接转发给PL AXI主机。
  • 将ECC错误信息发送到寄存器模块进行记录。

ECC模式下的数据掩码

ECC是在一个字节的数据上计算的,因此如果需要,可以在启用ECC的情况下屏蔽任何数据字节。这减轻了控制器在发生字节掩码时执行RMW操作的需要。

ECC编程模型

以下详细介绍了ECC编程要求。请注意,这些配置是常规DDR初始化编程的补充。另请注意,建议在读取任何数据之前初始化整个DDR空间,以防止因访问未初始化的内存区域而产生ECC错误。

启用ECC操作(从非ECC模式切换到ECC模式)

  1. 将reg_ddrc_soft_rstb编程为0(重置控制器)
  2. 通过将reg_ddrc.ECC_mode编程为3'b100来编程ECC模式
  3. 将reg_ddrc_dis_scrub编程为1'b0
  4. 程序reg_ddrc_data_bus_width到2'b1
  5. 将reg_ddrc_soft_rstb编程为1(使控制器退出重置)

请注意,建议在从DDR空间读取任何数据之前重新初始化整个DDR空间,以防止因访问未初始化的内存区域而产生ECC错误。

禁用ECC操作(从ECC模式切换到非ECC模式)

  1. 将reg_ddrc_soft_rstb编程为0(重置控制器)
  2. 通过将reg_ddrc.ECC_mode编程为3'b000来编程ECC模式
  3. 将reg_ddrc_dis_scrub编程为1'b1
  4. 将reg_ddrc_data_bus_width编程为2''00
  5. 将reg_ddrc_soft_rstb编程为1(使控制器不再复位)

AR#58684中描述了通过将错误位插入DDR存储器来测试ECC可纠正/不可纠正错误检测的示例测试程序。

监控ECC状态

  1. CHE_CORR_ECC_ADDR_REG_OFFSET给出ECC纠错的行/列信息
  2. CHE_UNCOR_ECC_ADDR_REG_OFFSET给出ECC不可恢复错误的行/列信息
  3. CHE_CORR_ECC_LOG_REG_OFFSET的B[0]表示ECC状态可纠正
  4. CHE_UNCOR_ECC_LOG_REG_OFFSET的B[0]表示ECC状态不可纠正
  5. CHE_ec_STATS_REG_OFFSET
  • B[7:0]->给出不可纠正错误的数量
  • B[15:8]->给出可纠正错误的数量

注意:CHE_ECC_STATS_REG_OFFSET报告自上次读取寄存器以来观察到的具有可纠正和不可纠正ECC错误的突发事务数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5蓝图 抽卡出货概率

SSR概率0.1 SR概率0.2 R概率0.7 ps:数组内相加为1。且从小到大排序。

C练手题--Two Oldest Ages 【7 kyu】

一、原题 链接:Training on Two Oldest Ages | Codewars The two oldest ages function/method needs to be completed. It should take an array of numbers as its argument and return the two highest numbers within the array. The returned value should b…

网络-多路io

了 fcntl 函数来操作文件描述符的状态标志,其中主要是为了设置非阻塞模式。下面是对 fcntl 函数及其参数的详细解释: fcntl 函数 fcntl 是一个用于操作文件描述符的系统调用,可以用来设置或获取文件描述符的各种属性。其原型如下&#xff1…

Ubuntu Linux Server安装Kubernetes

本文主要描述在Ubuntu Linux Server操作系统中安装Kubernetes云原生对应的microk8s组件。 sudo snap install microk8s --classic 如上所示,在Ubuntu服务器中安装microk8s组件完成,对应的版本是microk8s v1.30版本 microk8s enable dashboard 如上所…

华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 先看这里 写在前面效果华为云Flexus X实例服务器部署开源的热点新闻项目ssh连接服务器docker部署今日热点项目访问今日热点项目 搭建微信交互工具获取token创建发送的公共方法…

【Spring】获取cookie,session,header(3)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 目录 本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。…

Linux主机网络参数的设置—IP地址的作用和类型

网络参数管理 一.网络参数 主机名,IP地址,子网掩码,网关,DNS服务器地址 1.配置主机名 hostname命令来查看当前系统的主机名, hosnamectl set-hostname 修改centos7的主机名, 建议以FQDN的&#xff…

惠中科技光伏清洗剂:点亮绿色能源未来

在当今全球追求可持续发展的时代,光伏产业作为清洁能源的重要代表,正发挥着日益关键的作用。而在光伏产业的高效运行中,惠中科技的光伏清洗剂犹如一颗璀璨的明珠,为光伏板的清洁与维护贡献着卓越力量。 一、光伏产业的挑战与需求…

STM32嵌入式面试知识点总结

一、STM32F1和F4的区别? 解答: 参看:STM32开发 – STM32初识内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;主频不同:F1主频72MHz,F4主频168MHz;浮点运算:…

【C++ Primer Plus习题】8.3

问题: 解答: #include <iostream> #include <string> #include <cctype> using namespace std;void function(string& str) {for (int i 0; i < str.size(); i){str[i]toupper(str[i]);} }int main() {string str;while (true){cout << "…

od机试题目

od试题 日志采集TLV 日志采集 思路&#xff1a; 处理输入&#xff1a; Scanner 拿到整个输入 放入string[] 按照" "分隔 调用Integer.parseInt 将string转int类型 解题&#xff1a; 用一个变量count记录当前日志数量&#xff0c;初始为输入的第一个参数 用一个max变…

Java中类的成员介绍

我的后端学习大纲 我的Java学习大纲 4.类的成员&#xff1a; 3.1.类的成员 -> 属性介绍&#xff08;成员变量&#xff09;&#xff1a; a.语法格式&#xff1a; 1.修饰符 数据类型 属性名 初始化值 ;2.说明1: 修饰符 常用的权限修饰符有&#xff1a;private、缺省、prot…

网络原理 - 初识

文章目录 局域网(LAN)广域网(WAN)网络设备IP地址格式 端口号格式 认识网络协议协议分层 OSI七层模型(只是理论,没有实际运用)TCP/IP五层&#xff08;或四层&#xff09;模型网络设备所在分层 封装和分用 计算机之间通过网络来传输数据&#xff0c;也称为网络通信。 根据网络互连…

linux系统编程:数据库

1. 数组、链表、变量-----》内存&#xff1a;程序运行结束、掉电数据丢失 文件----------------------》硬盘&#xff1a;程序运行结束、掉电数据不丢失 数据库&#xff1a; 专业存储数据、大量数据-----》硬盘 sqlite相关的命令 .tables 查看…

库克库伯防爆电容器会起火吗

库克库伯&#xff08;Cooke Colb&#xff09;防爆电容器设计用于在具有爆炸性气体或粉尘的危险环境中安全运行。尽管这些防爆电容器经过严格的设计和测试&#xff0c;能够保障不会出现爆炸现象&#xff0c;以确保在恶劣环境中运行时的安全性&#xff0c;但在某些极端情况下&…

[数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;303 标注数量(xml文件个数)&#xff1a;303 标注数量(txt文件个数)&#xff1a;303 标注类别…

【网络安全】Instagram 和 Meta 2FA 绕过漏洞

未经许可,不得转载。 文章目录 漏洞概述技术细节Meta 2FA 绕过步骤Instagram 2FA 绕过步骤总结漏洞概述 该漏洞允许攻击者在具有受害者Facabook账户权限的情况下,绕过 Meta 的双重身份验证 (2FA) 机制,实现账户接管;并且也能够绕过 Instagram 的双重身份验证 (2FA) 机制,…

【GeoScenePro】Generic Server Error

错误 解决方案 在portal中进行知识图谱许可授权

国密起步5:GmSSL3交叉编译arm64

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 之前已经建立好了交叉编译环境…

视频集中存储智能边缘计算网关软硬一体机智能边缘计算网关应用场景

在信息化飞速发展的今天&#xff0c;数据处理的速度和效率直接影响到各行各业的运作和发展。传统的云计算模式虽然强大&#xff0c;但在面对实时性和带宽要求越来越高的应用场景时&#xff0c;往往显得力不从心。此时&#xff0c;智能边缘计算网关的出现&#xff0c;为我们带来…