【Xilinx】SynchronousInterruptHandler错误排查笔记

2023-11-19

一、ArmV8的异常处理

在基于A53的MPSOC系列上,相比zynq系列原有的中断向量处理方式做了大幅度修改

ARMv8-A系列定义了一系列的异常等级,从EL0到EL3。随着n的增加,软件的执行权限也相应的增加;

EL0被称为无特权执行;
EL2提供了对虚拟化的支持
EL3提供了安全状态切换功能(安全状态与非安装状态之间的切换)

注意,EL0和EL1是必须实现的,EL2和EL3是可选的。而且一个PE中实现的EL可以不连续,例如只实现了EL0、EL1和EL3。

在这里插入图片描述

二、64位lscript.ld的修改

左边是32位的lscript.ld,右边是64位的lscript.ld,主要的差异部分如下图
在这里插入图片描述
在这里插入图片描述

三、asm_vectors.S的修改

在项目文件夹下搜索到asm_vectors.S
例如psu_cortexa53_0\standalone_psu_cortexa53_0\bsp\psu_cortexa53_0\libsrc\standalone_v7_3\src\asm_vectors.S,根据项目版本不同,路径可能有差异,仅供参考

可以看到中断向量表,对应表中的4个地址
在这里插入图片描述

EL0的Synchronous offset是0x0。其他EL级别,Synchronous offset是0x200,IRQ or vIRQ offset是0x280, FIQ or vFIQ offset是0x300,SError or vSError offset是0x380,
MPSoC A53启动后,在EL0,执行的第一条代码是“b _boot”。

	b	_boot
.org (VBAR + 0x200)
	b	SynchronousInterruptHandler

.org (VBAR + 0x280)
	b	IRQInterruptHandler

.org (VBAR + 0x300)
	b	FIQInterruptHandler

.org (VBAR + 0x380)
	b	SErrorInterruptHandler

四、SynchronousInterruptHandler函数解析

以下是SynchronousInterruptHandler函数的内容
它会判断ESR_EL3的取bit26-bit31,6个bit,判断是不是000111,如果不是则跳转到死循环

SynchronousInterruptHandler:
	saveregister

/* Check if the Synchronous abort is occurred due to floating point access. */
.if (EL3 == 1)
	mrs	x0, ESR_EL3
.else
	mrs	x0, ESR_EL1
.endif
	and	x0, x0, #(0x3F << 26)
	mov	x1, #(0x7 << 26)
	cmp	x0, x1
/* If exception is not due to floating point access go to synchronous handler */
	bne	synchronoushandler

/*
 * If excpetion occurred due to floating point access, Enable the floating point
 * access i.e. do not trap floating point instruction
 */
 .if (EL3 == 1)
	mrs	x1,CPTR_EL3
	bic	x1, x1, #(0x1<<10)
	msr	CPTR_EL3, x1
.else
	mrs	x1,CPACR_EL1
	orr	x1, x1, #(0x1<<20)
	msr	CPACR_EL1, x1
.endif
	isb

/* If the floating point access was previously enabled, store FPU context
 * registers(storefloat).
 */
	ldr	x0, =FPUStatus
	ldrb	w1,[x0]
	cbnz	w1, storefloat
/*
 * If the floating point access was not enabled previously, save the status of
 * floating point accessibility i.e. enabled and store floating point context
 * array address(FPUContext) to FPUContextBase.
 */
	mov	w1, #0x1
	strb	w1, [x0]
	ldr	x0, =FPUContext
	ldr	x1, =FPUContextBase
	str	x0,[x1]
	b	restorecontext
storefloat:
	savefloatregister
	b	restorecontext
synchronoushandler:
	bl	SynchronousInterrupt
restorecontext:
	restoreregister
	eret

五、ESR_EL3的错误代码解释

EC, bits [31:26]
Exception Class. Indicates the reason for the exception that this register holds information about.

For each EC value, the table references a subsection that gives information about:

The cause of the exception, for example the configuration required to enable the trap.
The encoding of the associated ISS.
Possible values of the EC field are:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Xilinx】SynchronousInterruptHandler错误排查笔记 的相关文章

  • FPGA同步复位和异步复位的区别以及设计处理

    FPGA复位信号的设计处理 同步复位 同步复位 同步复位信号跟触发器的时钟是同步的 只有在时钟的跳变沿到来之后才会生效 对应verilog代码如下 这种写法会被编译器综合成同步复位 always posedge clk begin if r
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • HDLBits刷题_Verilog Language_Procedures_Alwaysblock1

    学习内容 Since digital circuits are composed of logic gates connected with wires any circuit can be expressed as some combin
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d
  • xilinx xdma PCIe中断bug

    xilinx xdma PCIe中断存在bug bug1 此中断虽然是msi或者msx中断 但是不中断cpu bug2 此中断不是边沿中断 而是电平中断 在驱动层需要不断地轮训查询中断事件 bug3 此中断持续时间必须长 而且在收到中断应答
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • FPGA_MIG驱动DDR3

    FPGA MIG驱动DDR3 说明 FPGA zynq 7z100 DDR3 MT41K256M16TW 107 内存大小为512MB 数据接口为16bit 环境 Vivado2018 2 IP核 Memory Interface Gene
  • Spartan-3E 上的随机数生成

    我需要在 Spartan 3E FPGA 上为我的遗传算法生成伪随机数 并且我想在 verilog 中实现它 您能给我任何关于此的指示吗 当然 Adam 的随机生成器是不可合成的 您必须显式创建一个LFSR 以下示例可能会有所帮助 它是一个
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接
  • VHDL FSM多驱动网Q连接到常量驱动程序,其他驱动程序被忽略,我的代码有什么问题?

    这段代码是一个 FSM 它是一个摩尔机 艾莉莎 P 哈克 Alyssa P Hacker 有一只蜗牛 沿着纸带爬下去 上面有 1 和 0 蜗牛 每当最后两个时都会微笑 它爬过的数字是 01 设计摩尔和米利 蜗牛大脑的 FSM 代码如下所示

随机推荐

  • 2023年考证时间一览表

    2022年已经成为历史 在疫情背景全面开放下给大家整理了2023年全年的考试时间以及报名时间新鲜出炉 了解清楚 为2023年提前做好规划 1月份 2022年下半年中小学教师资格考试面试 报名时间 2022年12月9日 12日 考试时间 20
  • Java Web如何限制访问的IP的两种方法

    Java Web限制IP访问的两种方法 前一阵子因为在做项目时碰到了这个功能 现在好好总结一下 至于为什么要限制IP访问 我就不多说了 然后百度了一下 现在主要有两种方式去限制IP访问 第一种是最简单的方便的 第二种是通过过滤器来限制访问
  • vuforia模型脱卡功能的实现

    思路是这样 识别图视野脱离之后 将被识别的物体不再作为识别图的子物体 转而作为相机的子物体 并置于屏幕中央位置 1 首先 写个小script C 纯文本查看 复制代码 01
  • Mybatis/Mybatis-Plus驼峰式命名映射

    目录 一 mybatis驼峰式命名 二 mybatisPlus默认开启驼峰命名映射 一 mybatis驼峰式命名 方法一 使用前提 数据库表设计按照规范 字段名中各单词使用下划线 划分 使用好处 省去mapper xml文件中繁琐编写表字段
  • 团队梯队人才培养模型,60页人才梯队建设与人才培养

    团队梯队人才培养模型 60页人才梯队建设与人才培养 果断收藏 今日头条 人才梯队建设与人才培养 目录 1 人才梯队建设理念 2 人才梯队建设路径 3 梯队人才培养内容与方法 团队总监以上人员管理不成熟的表现 1 无法从项目运作导向转变到战略
  • yolov5 deepsort 行人/车辆(检测 +计数+跟踪+测距+测速)

    功能 简介 实现了局域的出 入 分别计数 显示检测类别 ID数量 默认是 南 北 方向检测 若要检测不同位置和方向 需要加以修改 可在 count car traffic py 点击运行 默认检测类别 行人 自行车 小汽车 摩托车 公交车
  • C++开源序列化库:FStruct

    FStruct是一个用于C 对象 结构体 STL容器等 和json xml字符串之间进行转换的库 采用非入侵方式 无需在原有结构体上进行修改 目前支持基础类型 结构体 以及vector list deque set map等复杂数据类型的序
  • 【C语言】字符串函数介绍三(strstr、strtok、streeror)

    前言 之前我们用两篇文章介绍了strlen strcpy stract strcmp strncpy strncat strncmp这些函数 第一篇文章strlen strcpy stract 第二篇文章strcmp strncpy str
  • 2019年用户流失分析(五)——Python实现

    5 模型应用 选择4月份为正常状态的电视用户 计算他们的收视时长 收视在线天数 距最近一次收视时间 入网时长 用户主动办理次数和投诉与报障次数6个特征指标 利用构建好的用户流失模型预测5月份的用户流失情况 5 1 离网倾向阈值 在4月份为正
  • ThreeJS动态加载div标签

    思路 1 在页面中创建一个div标签 2 确定标签在三维场景中的三维位置 3 计算三维位置的屏幕坐标 4 在每一帧的渲染中都计算一下这个三维坐标的屏幕位置 并把屏幕位置赋给标签 具体实现 1 创建div标签 标签样式 tap positio
  • 脑电EEG代码开源分享 【4.特征提取-频域篇】

    往期文章 希望了解更多的道友点这里 0 分享 脑机接口 人工智能 的学习之路 1 1 脑电EEG代码开源分享 1 前置准备 静息态篇 1 2 脑电EEG代码开源分享 1 前置准备 任务态篇 2 1 脑电EEG代码开源分享 2 预处理 静息态
  • Linux 文件共享(两种方法)

    一 实验目的 快速掌握Linux文件共享 共享文件夹 的两种方法 1 通过虚拟机ubuntu在 mnt hgfs下的共享文件夹映射到物理机实现 2 通过物理机的映射网络驱动器连接到虚拟机ubuntu的共享文件夹实现 二 实验环境 工具软件
  • 《算法图解》——第八章 贪婪算法

    第八章 贪婪算法 1 简单的贪婪算法 每步都采取最优的做法 每步都选择局部最优解 2 背包问题 有些情况下 完美是优秀的敌人 如果你只需要找到一个大致解决问题的算法 贪婪算法挺不错 因为实现容易 结果与正确结果相当接近 练习8 1 你在一家
  • 一文了解Clickhouse

    ClickHouse是什么 ClickHouse是一个存储计算一体的工具 其与spark flink等大数据框架不同的在于它有自己的存储层 在数据压缩 存储上做了更多的优化 所以导致它在某些数据处理能力上比其他工具快上了不少 毕竟一般框架只
  • OpenWrt的SR9000有线网卡驱动

    SR9000芯片的有线网卡驱动可以直接使用kmod usb net CDC ether 若为编译 可采取如下措施 make menuconfig kernel module usb support kmod usb net CDC ethe
  • PAT (Basic Level) Practice 1033 旧键盘打字 Python

    根据题意 这道题让我们根据要求去除第二行输入的字符串中的部分内容 1 判断上档键是否损坏 以进行下一步处理 2 根据要求去除字符串中特定字符 3 sys模块 可用于大量输入的加速 4 operator 可用于运算时的加速 代码如下 impo
  • Eclipse搭建stm32+jlink开发环境全攻略(高级篇)

    Eclipse搭建stm32 jlink开发环境全攻略 高级篇 一 问题概况 通过初级篇的学习 我们知道了一个Eclipse工程的配置以及调试 貌似使用也没什么问题 然而 当我们抛弃掉Eclipse自带的工程模版是 也抛弃的他的一些其他的功
  • 机器学习:多分类的logistic回归

    机器学习 多分类的logistic回归 Multi Class Logistic 多分类的Logistic问题 它适用于那些类别数大于2的分类问题 并且在分类结果中 样本x不是一定只属于某一个类可以得到样本x分别属于多个类的概率 也可以说样
  • Unity3D【脚本】 按键盘Esc弹出退出面板 确定退出游戏 取消关闭面板

    按键盘Esc弹出退出面板 确定退出游戏 取消关闭面板 效果图 脚本 using UnityEngine using System Collections public class Exit MonoBehaviour public Game
  • 【Xilinx】SynchronousInterruptHandler错误排查笔记

    SynchronousInterruptHandler错误排查笔记 一 ArmV8的异常处理 二 64位lscript ld的修改 三 asm vectors S的修改 四 SynchronousInterruptHandler函数解析 五