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

server/2024/9/20 4:01:16/ 标签: fpga开发


仅在半总线宽度(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.ppmy.cn/server/112804.html

相关文章

拥抱分布式云:云基础设施的下个新时代

在技术不断发展的过程中,云计算早已成为一股变革力量,使企业能够以前所未有的速度进行扩展、创新和适应。虽然世界仍然需要大规模集中式数据中心所产生的强大计算能力,但“提供更好体验”这个需求正在将云计算进一步地推向边缘。 ​ 这种需求…

速盾:ddos防御整体方案,高防cdn防御可靠吗

DDoS攻击是一种利用多台僵尸主机向目标网络发动大规模流量攻击的方式,旨在使目标系统资源耗尽,导致服务不可用。为了保护网络安全,许多企业选择使用DDoS防御解决方案。而其中一种常见的方法是使用高防CDN进行防御。 高防CDN是指具备较强的DD…

【网络安全】XSS之HttpOnly防护(附实战案例)

原创文章,不得转载。 文章目录 HttpOnly的产生背景HttpOnly的用途配置HttpOnly实战案例总结HttpOnly的产生背景 随着Web应用程序的普及,安全性问题也愈发凸显,尤其是与会话管理相关的安全漏洞。在Web应用中,服务器通常会通过HTTP协议在客户端和服务器之间传递重要信息,如…

pdf怎么压缩小一些?推荐的几种PDF压缩方法

pdf怎么压缩小一些?在工作中,我们经常处理PDF文件。大文件不仅存储麻烦,还会拖慢传输速度。因此,我们通常希望将这些文件压缩成更小的尺寸。压缩后的文件更便于分享和管理,适用于云存储、社交媒体或其他在线平台&#…

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出 文章目录 一、基本原理1. 数据预处理2. PSO优化(粒子群优化)3. KELM训练(核极限学习机)4. AdaBoost集成5. 模型评估和优化6.…

奥威让您更懂现金流情况

企业现金流一旦出了问题都是大问题,会直接影响到企业的日常运作,甚至直接关系到企业能不能继续存活,因此现金流量表是企业财务分析中重要报表之一,也是企业监控财务监控情况的重要手段之一。那么这么重要的一份现金流量表该怎么做…

go常用代码

连接阿波罗: 默认properties类型 package mainimport ("fmt""github.com/apolloconfig/agollo/v4""github.com/apolloconfig/agollo/v4/env/config" )func main() {c : &config.AppConfig{AppID: "2222",Cl…

java后端开发-Mybatis连接数据库步骤

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

计算机网络11——数据库语法2

目录 1、变量 (1)局部变量 (2)会话变量 (3)系统变量 2、判断选择 (1)if选择语法 (2)case选择 3、循环 (1)while循环 (2)其他循环 4、存储过程 5、触发器 6、事务:transaction 事务的特性 使用 1、变量 (1)局部变量 函数里面定义的,变量名 …

leetcode:3176 求出最长好子序列 使用动态规划

3176. 求出最长好子序列 题目链接https://leetcode.cn/problems/find-the-maximum-length-of-a-good-subsequence-i/ 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标 i 满足 seq[i] ! se…

压缩大型语言模型 LLMs

压缩大型语言模型 LLMs 随着人工智能技术的迅猛发展,大型语言模型(LLMs)如GPT系列已成为自然语言处理领域的明星。然而,这些模型通常包含数十亿甚至上万亿的参数,导致巨大的计算和存储需求,限制了它们在消…

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景 "板凳龙",又称"盘龙",是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色,展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中&am…

c++ 链表tail->next = new ListNode(sum % 10); tail = tail -> next; 语句含义

这两行 C 代码: tail->next new ListNode(sum % 10); tail tail->next;通常出现在处理链表(ListNode)的上下文中,特别是在实现与数字相加相关的算法时,比如“两个数相加”问题。下面是对这两行代码的详细解释…

IIS 反向代理模块: URL Rewrite 和 Application Request Routing (ARR)

需要设置iis反向代理的场景其实挺多的。例如websocket、Server Sent Events(SSE) 都需要反向代理。 对于需要临时放公网访问的应用,直接运行127.0.0.1的开发环境,然后通过反向代理访问127.0.0.1就可以了,省去麻烦的iis设置。 IIS 实现反向代…

【Day07】

目录 MySQL-DQL- 基本查询 MySQL-DQL- 条件查询 MySQL-DQL- 聚合函数 MySQL-DQL- 分组查询 MySQL-DQL- 排序查询 MySQL-DQL- 分页查询 MySQL-DQL- 案例 MySQL-多表设计-一对多 MySQL-多表设计-一对多-外键约束 MySQL-多表设计-一对一&多对多 MySQL-多表设计-案例…

汇编语言在虚拟机中输出“Hello World!”

1.软件 Nasmide64.exe(李忠老师编写) Fixvhdw64.exe(李忠老师编写) VirtualBox虚拟机(免费 开源) 2.过程 01.Fixvhdw64.exe输入以下代码: mov ax,0xb800 mov ds,ax mov byte [0x00],H mov byte [0x02],e mov byte [0x04],l mov byte [0x06],l mov byte [0x08],o mov byte…

K8s系列之:解释Kubernetes Operators

K8s系列之:解释Kubernetes Operators 什么是控制器循环?Kubernetes Operator是如何工作的?如何添加自定义资源自定义资源定义Kubernetes Operators:案例研究 你是否曾想过,Site Reliability Engineering(SR…

Stream 流式编程

优质博文:IT-BLOG-CN 大家都知道可以将Collection类转化成流Stream进行操作(Map并不能创建流),代码变得简约流畅。我们先看下流的几个特点: 1、流并不存储元素。这些元素可能存储在底层的集合中,或者是按需…

docker 安装NextERP

有很多方式: 一 docker sudo docker run -itd -p 8016:80 -v ERPNext_db:/var/lib/mysql -v ERPNext_sites:/home/frappe/frappe-bench/sites --name ERPNext lvxj11/erpnext:latest二 git clone https://e.coding.net/yuanerp/yuanerp/frappe_docker.gitcp exa…

EmguCV学习笔记 VB.Net 10.1 人脸检测 CascadeClassifier类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…