Zynq7000系列FPGA中的中断

本文介绍Zynq7000系列FPGA中的系统级中断环境和中断控制器的功能(见图7-1)。

专用、共享和软件中断

每个CPU都有一组专用外围中断(PPI,private peripheral interrupts),使用banked 寄存器可以对这些中断进行专用访问。PPI包括全局计时器、专用看门狗计时器、专用计时器和来自PL的FIQ/IRQ。

软件生成的中断(SGI)被路由到一个或两个CPU。SGI是通过写入通用中断控制器(GIC)而产生的。共享外设中断(SPI)是由PS和PL中的各种I/O和内存控制器产生。它们被路由到其中一个或两个CPU。来自PS外部设备的SPI中断也被路由到PL。

通用中断控制器(GIC)

通用中断控制器(GIC)是一个集中式资源,用于管理从PS和PL发送到CPU的中断。当CPU接口接受下一个中断时,控制器启用、禁用、屏蔽并优先考虑中断源,并以编程方式将其发送到选定的CPU。此外,控制器支持用于实现安全感知系统的安全性扩展。

控制器是基于Arm通用中断控制器体系结构的非矢量化的1.0版(GIC v1)。

通过CPU专用总线访问寄存器,以避免互连中的临时阻塞或其他瓶颈,从而实现快速读/写响应。

中断分配器将所有中断源集中在一起,然后将优先级最高的中断源分配给各个CPU。GIC确保针对多个CPU的中断一次只能由一个CPU执行。所有中断源都由一个唯一的中断ID号标识。所有中断源都有自己的可配置优先级和目标CPU列表。

重置和时钟

中断控制器由复位子系统通过写入SLCR中的A9_CPU_RST_CTRL寄存器的PERI_RST位来复位。相同的重置信号还重置CPU专用定时器和专用看门狗定时器(AWDT)。重置后,将忽略所有挂起或正在服务的中断。

中断控制器使用CPU_3x2x时钟(CPU频率的一半)进行操作。

方框图

共享外设中断由各种子系统生成,包括PS中的I/O外设和PL中的逻辑。中断源如图7-2所示。

CPU中断信号通过

来自PL的IRQ/FIQ可以作为PPI#4和#1通过GIC进行路由,或者使用图7-3所示的直通复用器绕过GIC。这个逻辑是为两个CPU实例化的。直通模式是通过mpcore启用的。ICCICR寄存器如表7-1所示。

功能说明

软件生成的中断(SGI)

每个CPU都可以使用软件生成的中断(SGI)来中断自己、另一个CPU或两个CPU。有16个软件生成的中断(见表7-2)。通过将SGI中断号写入ICDSGIR寄存器并指定目标CPU,生成SGI。此写入通过CPU自己的专用总线进行。每个CPU都有自己的一组SGI寄存器,用于生成16个软件生成的中断中的一个或多个。通过读取ICCIAR(中断确认)寄存器或将1写入ICDICPR(中断清除挂起)寄存器的相应位来清除中断。

所有SGI都是边缘触发的。SGI的灵敏度类型是固定的,不能更改;ICDICFR0寄存器是只读的,因为它指定了所有16个SGI的灵敏度类型。

CPU专用外围设备中断(PPI)

每个CPU连接到一个由五个外设中断组成的专用组。PPI如表7-3所示。

PPI的灵敏度类型是固定的,不能更改;因此,ICDICFR1寄存器是只读的,因为它指定了所有5个PPI的灵敏度类型。注意,来自PL的快速中断(FIQ)信号和中断(IRQ)信号被反相,然后被发送到中断控制器。因此,尽管ICDICFR1寄存器将它们反映为活动低(active)电平,但它们在PS-PL接口处为活动(active)高电平。

共享外设中断(**Shared Peripheral Interrupts,**SPI)

一组来自不同模块的大约60个中断可以路由到一个或两个CPU中,或是PL中。中断控制器为CPU管理这些中断的优先级和接收。

除了IRQ#61到#68和#84到#91之外,所有中断敏感度类型都由请求源固定,不能更改。必须对GIC进行编程以适应这种情况。引导ROM不对这些寄存器进行编程;因此SDK设备驱动程序必须对GIC进行编程以适应这些敏感度类型。

对于级别敏感类型的中断,请求源必须为中断处理程序提供一种机制,以便在确认中断后清除该中断。此要求适用于任何具有高灵敏度类型的IRQF2P[n](来自PL)。

对于上升沿灵敏度的中断,请求源必须提供足够宽的脉冲,以便GIC捕获。这通常至少是2个CPU_2x3x周期。此要求适用于任何具有上升沿灵敏度类型的IRQF2P[n](来自PL)。

ICDICFR2到ICDICFR5寄存器配置所有SPI的中断类型。每个中断都有一个2位字段,用于指定敏感度类型和处理模型。

SPI中断如表7-4所示。

中断敏感性、目标和处理

有三种类型的中断进入GIC:SPI、PPI和SGI。在一般意义上,中断信号包括灵敏度设置、是一个还是两个CPU处理中断,以及目标CPU的个数(0,1或2)。然而,大多数中断信号的功能包括固定设置,而其他中断信号是部分可编程的。

有两组控制寄存器用于灵敏度、处理和定位:

•mpcore。ICDICFR[5:0]寄存器:灵敏度和处理。

•mpcore。ICDIPTR[23:0]寄存器:目标CPU。

共享外设中断(SPI)

SPI中断可以针对任意数量的CPU,但只有一个CPU处理中断。如果一个中断以两个CPU为目标,并且它们同时对GIC做出响应,则MPcore确保只有一个CPU读取活动中断ID#。另一个CPU根据时序接收Spurious ID#1023中断或下一个未决中断。这消除了对中断服务例程中的锁的要求。

以CPU为目标是由ICDIPTR[23:8]寄存器完成的。每个SPI中断的灵敏度必须编程为与ICDICFR Register、PS和PL共享外设中断(SPI)中列出的灵敏度相匹配。使用ICDICFR[5:2]寄存器对灵敏度进行编程。

专用外围设备中断(PPI)

每个CPU都有自己的独立PPI中断,具有固定的功能;这些中断的灵敏度、处理和目标是不可编程的。每个中断只进入其自己的CPU,并由该CPU处理。ICDICFR[1]寄存器是只读的,CDIPTR[5:2]寄存器基本上是保留的。

软件生成的中断(SGI)

SGI中断总是边缘敏感的,并且是在软件将中断号写入ICDSGIR寄存器时生成的。ICDIPTR[23:8]中定义的所有目标CPU必须处理中断才能清除它。

编程模型

中断优先级

所有中断请求(PPI、SGI和SPI)都被分配了一个唯一的ID号。控制器使用ID号进行仲裁。中断分配器保存每个CPU的挂起中断列表,然后在将其发送到CPU接口之前选择最高优先级的中断。同等优先级的中断通过选择最低ID来解决。

优先级逻辑在物理上是重复的,以使每个CPU能够同时选择最高优先级的中断。中断分配器保存中断、处理器和激活信息的中央列表,并负责触发CPU的软件中断。

存储SGI和PPI分配器寄存器,为每个连接的处理器提供单独的副本。硬件确保针对多个CPU的中断一次只能由一个CPU执行。

中断分配器向CPU接口传输最高未决中断。它接收回中断已被确认的信息,然后可以更改相应中断的状态。只有确认中断的CPU才能结束该中断。

中断处理

当IRQ线路去断言时,GIC对未决中断的响应。

如果中断在GIC中挂起,并且IRQ被取消断言,则GIC中的中断将变为非活动状态(CPU永远不会看到它)。如果中断在GIC中处于活动状态(因为CPU接口已确认中断),则软件ISR通过首先检查GIC寄存器,然后轮询I/O外设中断状态寄存器来确定原因。

Arm编程主题

Arm GIC体系结构规范包括以下编程主题:

  • GIC寄存器访问
  • 分配器和CPU接口
  • GIC安全扩展的影响
  • PU接口寄存器
  • 保持和恢复控制器状态

传统中断和安全扩展

当使用传统中断(IRQ、FIQ),并且中断处理程序以安全模式(通过ICCICR[AckCtl]=1)访问IRQ和FIQ时,读取中断ID时偶尔会出现争用情况。在IRQ处理程序中也存在看到FIQ ID的风险,因为GIC只知道处理程序从什么安全状态读取,而不知道处理程序是从哪种类型读取的。

有两种可行的解决方案:

  • 仅向重新进入的IRQ处理程序发送IRQ信号,并使用GIC中的抢占功能。
  • 在ICCICR[AckCtl]=0的情况下使用FIQ和IRQ,并使用TLB表在非安全模式下处理IRQ,在安全模式下进行FIQ处理。
相关推荐
XINVRY-FPGA2 小时前
XC7VX690T-2FFG1761I Xilinx AMD FPGA Virtex-7
arm开发·嵌入式硬件·fpga开发·硬件工程·fpga
FPGA_无线通信4 小时前
FPGA 组合逻辑和时序逻辑
fpga开发
Js_cold6 小时前
Xilinx FPGA温度等级及选型建议
fpga开发·fpga·vivado·xilinx
从此不归路7 小时前
FPGA 结构与 CAD 设计(第5章)上
fpga开发
洋洋Young7 小时前
【Xilinx FPGA】7 Series Clocking 设计
fpga开发·xilinx fpga
156082072197 小时前
FPGA下AD采集时钟相位的调整
fpga开发
从此不归路7 小时前
FPGA 结构与 CAD 设计(第5章)下
fpga开发
Js_cold10 小时前
Xilinx FPGA Flash启动时钟频率
单片机·嵌入式硬件·fpga开发·vivado·xilinx·flash·cclk
博览鸿蒙1 天前
FPGA的学习路径和入行指南
fpga开发
ShiMetaPi1 天前
GM-3568JHF丨ARM+FPGA异构开发板应用开发教程:01 UART读写案例
arm开发·单片机·嵌入式硬件·fpga开发·fpga·rk3568