2 XDMA IP中断

三种中断

1. Legacy
  • 定义:Legacy 中断是传统的中断处理方式,使用物理中断线(例如 IRQ)来传递中断信号。
  • 缺点
    • 中断线数量有限,通常为 16 条,限制了可连接设备的数量。
    • 中断处理可能会导致中断风暴,影响系统性能。
    • 不支持多处理器系统中的负载均衡。
  • 使用场景:主要用于旧设备和不支持 MSI 或 MSI-X 的硬件。
INTA, INTB, INTC, or INTD 区别
  • 优先级顺序:从高到低一般是 INTA > INTB > INTC/INTD。不过,具体的优先级也可以在系统 BIOS(Basic Input - Output System)或操作系统的设备管理部分根据设备的实际重要性和使用场景进行调整。
  • 应用场景倾向:INTA 倾向于用于对实时性和性能要求高的关键设备,INTB 用于实时性要求稍低的设备,而 INTC 和 INTD 更多地用于对中断响应要求不高、数据更新频率较低或不太关键的设备。这种区分有助于在复杂的 PCI 系统中合理分配中断资源,以满足不同设备的需求
2. MSI(Message Signaled Interrupts)
  • 定义:MSI 是一种通过消息而不是传统的中断线来发送中断信号的机制。
  • 优点
    • 减少了中断线的数量,支持更高的设备数量。
    • 提高了中断的处理效率,减少了中断风暴的可能性。
    • 可以支持多处理器系统中的负载均衡。
    • 最多32个
  • 使用场景:常用于现代设备,尤其是 PCI 和 PCIe 设备。
  • 默认情况下,MSI 功能是启用的,且启用了 1 个向量。可以选择最多 32 个向量。通常情况下,Linux 只使用 1 个向量用于 MSI。这是在IP中断配置页面,使能并选择msi中断的重点
3. MSI-X
  • 定义:MSI-X 是 MSI 的扩展版本,提供了更大的灵活性和更高的中断数量。
  • 优点
    • 支持更多的中断向量(最多可达 2048 个),适合需要高并发中断的设备。
    • 提供更好的性能和可扩展性,尤其是在高性能网络和存储设备中。
  • 使用场景:主要用于高性能设备,如网络适配器和存储控制器。
总结
  • MSI 和 MSI-X 提供了更高效和灵活的中断处理机制,适合现代设备和高性能应用。
  • Legacy 中断则是传统的方式,适用于老旧设备,但在性能和扩展性上存在限制。

中断使用

  • XDMA的中断类型,以及控制时序:
1)、Legacy Interrupts:

对于Legacy Interrupts中断,当user_irq_ack 第一次为1的时候usr_irq_req可以清0,当user_irq_ack 第二次为1的时候,可以重新设置usr_irq_req发起中断。

在PCI总线里面INTx中断是由四条可选的中断线决定的,这种中断方式是共享式的,所有的pci设备把中断信号在一条中短线上相与,再上报给cpu,cpu收到中断以后再查询具体是哪个设备产生了中断。
在PCIE总线里面已经没有了实体的INTx物理中断线了,PCIE标准使用专门的Message事务包来实现INTx中断,这是为了兼容以前的PCI软件。_INTx__是共享式_的,cpu相应中断后还需要查询具体中断源,效率比较低

在这里插入图片描述

解释一下这个图什么意思:
  • 首先是usr_irq_req[15:0] = 16’h3 = 0000 0000 0000 0011 中断0和1发出了中断请求
  • 然后是usr_irq_ack[15:0] = 16’h1 = 0000 0000 0000 0001 响应中断0
  • 然后是usr_irq_ack[15:0] = 16’h2 = 0000 0000 0000 0010 响应中断1
  • 中间的波浪线是省略的意思,也就是说在中断响应前和后,中断请求都需要保持一段时间,这个时间多少我没测试过,有大佬知道的可以留言
2)、MSI Interrupts:

MSI 发出usr_irq_req 中断请求后,user_irq_ack 为1只是说明中断已经被主机接收了,但是不代表已经处理,软件或者驱动层可以去清零usr_irq_req

MSI中断和MSI-X都是往配置的CPU中断寄存器里进行memory写操作,来产生中断,效率比INTx是共享式高,其中MSI最多支持32个中断向量,而MSI-X最多支持2048个中断向量。
![[Pasted image 20240927204256.png]]

3)、MSI-X Interrupts:

当usr_irq_req 中断请求后,只要user_irq_ack为1 就可以清零usr_irq_req,但是没说明说明时候可以置1,重启下次中断。
![[Pasted image 20240927204309.png]]

经过以上所有中断方式测试发现,MSI-X中断,会导致系统非常慢,估计是底层频繁中断导致,软件非常卡反而影响了传输效率,Legacy和MSI 对于usr_irq_req的清除,对于大数据量的传输,比如一幅图像的传图只要确保usr_irq_req足够长的时间,中断就能被响应。 保守的做法:当软件收到中断后,通过AXI-LITE接口清除usr_irq_req。 usr_irq_req清除后可以重新置位响应中断。

Note

在XDMA IP 配置期间,主机可从指定的支持中断列表中启用一种或多种中断类型。即使启用了多个中断类型,IP 在给定时间内也只会产生一个中断类型。MSI-X 中断优先于 MSI 中断,MSI 中断优先于传统中断。主机软件不得在断言或等待中断发生时切换(启用或禁用)中断类型。

在驱动中的引用

  • 后面介绍到驱动的时候说吧,这里就提一句,xdma驱动在读取中断事件的时候是挂起的状态,也就说在没读取到中断事件前不会往下执行其他程序,起到了阻塞的作用,如果你知道linux 驱动那么这个应该会很清楚,如果刚开始的和我一样没学过linux驱动的话就记住这个,我还特意去学了linux驱动基础…

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

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

相关文章

【算法】时间复杂度以及O(N^2)的排序

目录 1.常数时间的操作 2.时间复杂度 2.1.以选择排序为例 2.2.O(n^2)从何而来 2.3.冒泡排序 2.3.1.抑或运算 2.4.插入排序 3.二分法 3.1.局部最小 4.递归 4.1.递归行为时间复杂度的估计 1.常数时间的操作 一个操作如果和样本的数据量无关,每次都是固定时…

C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件

今天在本文中,我们将尝试使用NPOI库将图像插入到 Excel 文件的特定位置。请将以下逻辑添加到您的写作方法中,在 Excel 文件中添加图像(JPEG、PNG),我已经有一个示例 jpeg 文件 - Read-write-excel-npoi.jpg ,我们将尝试…

Observability:将 OpenTelemetry 添加到你的 Flask 应用程序

作者:来自 Elastic jessgarson 待办事项列表可以帮助管理与假期计划相关的所有购物和任务。使用 Flask,你可以轻松创建待办事项列表应用程序,并使用 Elastic 作为遥测后端,通过 OpenTelemetry 对其进行监控。 Flask 是一个轻量级…

使用Matplotlib显示中文的方法

1 问题提出 使用图1所示的代码进行matplotlib绘图时,因为其默认不支持中文,此时无法显示正确内容,如图2所示。 图1 matplotlib绘图绘图代码 图2 matplotlib无法显示中文 2 问题解决 2.1 设置全局字体 在图1所示的代码中,第13…

详解opencv resize之INTER_LINEAR和INTER_AREA

一。先简单介绍一下resize的用法 src:输入图, dst:输出图 dsize:输出图的宽高,如果dsize不为空(即宽高都不是0),则以dsize为准进行resize。 fx, fy是放大缩小的比例,是…

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的,大体上没有去做一些更新的东西,这里只是一个总的总结。在文章的最后,我会放上可以游玩该游戏的链接和exe可执行文件,不过没有对游戏内容进行什么加工,只有基本的功能实现罢了…

使用LSTM预测股票收盘价

在金融数据预测中,LSTM(长短期记忆网络)凭借其在时间序列数据建模中的优势,成为了分析股票价格趋势的热门选择。本篇博客将以完整的代码实现为例,展示如何利用LSTM网络对股票收盘价进行预测,并从数据处理到…

模拟SpringIOCAOP

一、IOC容器 Ioc负责创建,管理实例,向使用者提供实例,ioc就像一个工厂一样,称之为Bean工厂 1.1 Bean工厂的作用 先分析一下Bean工厂应具备的行为 1、需要一个获取实例的方法,根据一个参数获取对应的实例 getBean(…

预编译SQL

预编译SQL 预编译SQL是指在数据库应用程序中,SQL语句在执行之前已经通过某种机制(如预编译器)进行了解析、优化和准备,使得实际执行时可以直接使用优化后的执行计划,而不需要每次都重新解析和编译。这么说可能有一些抽…

软件测试预备知识⑥—搭建Web服务器

在软件测试的广阔领域中,搭建Web服务器是一项极为关键的技能。它不仅有助于模拟真实的应用环境,方便我们对Web应用进行全面且深入的测试,还能让测试人员更好地掌控测试场景,提升测试效率与质量。接下来,让我们一同深入…

计算机视觉算法实战——打电话行为检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​​​ ​​​​​​​​​​​​​​​ ​​​​​​ ​ 1. 引言✨✨ 随着智能手机的普及,打电话行为检测成为了计算机视…

Linux第二课:LinuxC高级 学习记录day01

0、大纲 0.1、Linux 软件安装,用户管理,进程管理,shell 命令,硬链接和软连接,解压和压缩,功能性语句,结构性语句,分文件,make工具,shell脚本 0.2、C高级 …

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色…

阿里云-通义灵码:在 PyCharm 中的强大助力(下)

目录 六.通义灵码在 PyCharm 中的优势与不足 1.优势 (1).提高开发效率 (2).提升代码质量 (3).易于使用 (4).不断学习和改进 2.不足 (1).依赖网络 (2).准确性有待提高 (3).局限性 七.未来发展展望 1.提高准确性和可靠性 2.与其他工具的集成 3.智能化程度的提升 八…

开源项目stable-diffusion-webui部署及生成照片

参考链接 https://www.freedidi.com/13133.html 基础环境部署 python 官网链接 Python Release Python 3.10.6 | Python.org 下载 Python 3.10.6 版本安装包 下载好后双击 点击安装,这里需要选择一下,把环境变量加上。(这里是默认安装到C盘…

【芯片封测学习专栏 -- 单 Die 与 多Die(Chiplet)介绍】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 Overview单个Die(Monolithic Die)多个Die(Chiplet Architecture or Heterogeneous SoC)如何判断一个SoC是…

Windows 安装 Docker 和 Docker Compose

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

java_将数据存入elasticsearch进行高效搜索

使用技术简介: (1) 使用Nginx实现反向代理,使前端可以调用多个微服务 (2) 使用nacos将多个服务管理关联起来 (3) 将数据存入elasticsearch进行高效搜索 (4) 使用消息队列rabbitmq进行消息的传递 (5) 使用 openfeign 进行多个服务之间的api调用 参…

Github Copilot学习笔记

(一)Prompt Engineering 利用AI工具生成prompt设计好的prompt结构使用MarkDown语法,按Role, Skills, Constrains, Background, Requirements和Demo这几个维度描述需求。然后收输入提示词:作为 [Role], 拥有 [Skills], 严格遵守 […

android分区和root

线刷包内容: 线刷包是一个完整的android镜像,不但包括android、linux和用户数据,还包括recovery等。当然此图中没有recovery,但是我们可以自己刷入一个。 主要分区 system.img 系统分区,包括linux下主要的二进制程序。 boot.img…