ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【教程】Agilex 5 SOC FPGA的HPS端如何响应FPGA端中断(一)——GIC控制器介绍

【教程】Agilex 5 SOC FPGA的HPS端如何响应FPGA端中断(一)——GIC控制器介绍 前言DE25-Nano是基于Altera Agilex™ 5 FPGA138K逻辑单元的开发平台集成了双集群ARM Cortex-A76/A55硬处理器系统HPS为开发者提供了兼具硬件可重构性与强大软件处理能力的异构计算平台。在实际嵌入式系统开发中FPGA端外设如按键、开关等产生的中断需要被HPS端的Linux系统及时响应和处理。本文将系统介绍Agilex 5 SoC FPGA中HPS端响应FPGA端中断的完整开发流程。本文先深入解析GIC-600中断控制器的架构与中断映射机制然后以DE25-Nano开发板为载体从修改GHRD工程添加支持中断的PIO外设开始逐步完成设备树配置、中断驱动程序开发最终通过按键触发中断验证HPS对FPGA中断的实时响应能力。GIC控制器介绍Agilex 5 SoC FPGA 的HPS中集成了 Arm Generic Interrupt Controller (GIC-600)。该 GIC 控制器位于应用处理器子系统APS分区内独立于 Cortex-A55和Cortex-A76 处理器之外由所有 CPU 核心共享。GIC是HPS中负责管理所有中断请求的核心组件是Agilex 5 SoC FPGA 的中断传递通路的“总调度官”它接收来自各类外设的中断信号仲裁优先级并将其路由到合适的CPU核心进行处理。GIC系统集成示意图GIC-600的架构由多个功能模块协同构成。其中Distributor分发器 是整个GIC通信的中枢负责管理所有共享外设中断Shared Peripheral Interrupts, SPI包括来自FPGA逻辑的中断请求。Redistributor重分发器 则为每个CPU核心维护私有外设中断PPI 和软件触发中断SGI。此外SPI CollatorSPI收集器 支持将多达512个SPI中断转换为消息格式以减少系统布线并支持更激进的时钟门控从而降低功耗。Interrupt Translation ServiceITS 则负责翻译PCIe等来源的消息信号中断。GIC 把中断分作了三类SGI、PPI和SPI。软件生成中断SGISoftware Generated Interrupts (SGI)属于核间中断即由一个核心生成并发送至其他核心的中断。系统中每个核心对 SGI 的处理相互独立其优先级及其他设置也按核心单独配置。SGI 通过向发起核心的 CPU 接口中的系统寄存器执行写操作来产生信号类型为边沿触发。每个目标核心最多可记录 16 个 SGI各自对应中断 ID 0 至 15 范围内的唯一 INTID。私有外设中断PPIPrivate Peripheral Interrupt (PPI)通常用于与特定核心紧密耦合的外设连接至某一核心 PPI 输入的中断仅发送至该核心。每个核心对 PPI 的处理相互独立且每个 PPI 的 INTID 用于标识其来源。PPI 对每个核心是私有的但不同核心的 PPI 可以使用相同的 INTID。每个目标核心最多可记录 12 个 PPI各自对应中断 ID 16 至 31 范围内的唯一 INTID。共享外设中断SPIShared Peripheral Interrupt (SPI)可编程为定向至特定核心或任意核心。HPS 的 GIC-600 支持 512个SPI中断这些既可以是线连中断也可以通过从接口向 GIC-600 内部特定寄存器执行写操作来生成。首个 SPI 的中断 ID 号为 32。每个 SPI 均可配置为上升沿触发或高电平有效active-HIGH的电平敏感方式通常用于与特定核心无紧密耦合关系的外设。FPGA中断在GIC中的映射关系对于FPGA开发者而言最关键的莫过于理解FPGA中断在GIC中的映射关系。根据Atera官方技术手册GIC 中断号 0-31 保留给 PPI 和 SGISPI 从 GIC irq[32] 开始。Agilex 5 的FPGA 外设中断属于SPIFPGA逻辑产生的64个中断通过fpga2hps_interrupt[0]至fpga2hps_interrupt[63]共64条中断线接入GIC-600。每条中断线对应一个唯一的GIC SPI编号fpga2hps_interrupt[0]对应GIC SPI 49fpga2hps_interrupt[1]对应SPI 50依此类推。GIC-600支持这些FPGA中断线配置为电平触发Level Triggered 或边沿触发Edge Triggered为开发者提供了灵活的触发方式选择。GIC 中断号GIC irq[x]与系统中断号irqS[x]之间存在固定偏移。以下是 Agilex 5 HPS 的共享外设中断映射表的部分常用内容完整表格内容参考Hard Processor System Technical Reference Manual Agilex™ 5 SoCs的表格Table 81. Shared Peripheral Interrupts Map系统中断号GIC中断号源模块中断名称中断类型描述032SDMsdm_aps_mailbox_intrLevelSDM中断...17-8049-112FPGAfpga2hps_interrupt[0-63]Level/EdgeFPGA 逻辑中断请求...93125USB0usb0_irqLevelOTG0中断请求...104136I2C1i2c1_irqLevelI2C1中断请求...109141UART1uart1_irqLevelUART1中断请求...Agilex 5 FPGA-to-HPS中断接口 (f2h_irq0/1_in) 详解在Agilex 5 SoC底层硬件设计GHRD当中配置HPS时勾选Enable FPGA-to-HPS Interrupts选项会出现f2h_irq0_in 和 f2h_irq1_in 端口。f2h_irq0_in 和 f2h_irq1_in 是FPGA向HPS内的GIC发送中断请求的专用接口如下图。它们的主要作用是让FPGA中自定义的逻辑如PIO按键能够异步通知Arm处理器执行相应的中断服务程序。f2h_irq0_in 和 f2h_irq1_in 端口共提供了64个通用的FPGA到HPS中断信号。FPGA端外设中断连接到f2h_irq0_in或f2h_irq1_in时需分配一个0~31的序号这个序号称之为位索引Bit Index一个FPGA外设中断的系统中断号与位索引对应关系如下f2h_irq0_in 上的中断其系统中断号 17 (位索引)f2h_irq1_in 上的中断其系统中断号 1732 (位索引)比如上图按键挂在f2h_irq0_in上中断位索引是1那么按键的系统中断号是17118。后续在设备树里面描述按键中断的时候中断号填写18即可。本文参考: Altera Documentation and Resources Center
返回列表