RISC-V AIA SPEC学习(三)--APLIC

第四章APLIC

前序--核心功能概述​​

APLIC 是 RISC-V 高级中断架构的核心组件,用于集中管理系统中所有外部中断源。它支持两种中断传递模式:

  1. ​​直接传递模式​​:将中断信号通过物理线路传递给目标处理器。
  2. ​​MSI转发模式​​:将中断转换为消息信号中断(MSI),写入目标处理器的IMSIC内存区域。

一、中断源与中断标识​​

1.中断源编号​​

    • APLIC 最多支持 ​​1023个独立中断源​​,编号为1-1023。
    • 每个中断源可配置为电平触发或边沿触发(需硬件支持)。

​2.中断域(Interrupt Domains)​​

    • APLIC 支持多个独立配置的 ​​中断域​​,每个域可单独设置为直接传递或MSI模式。
    • 不同域的中断处理完全隔离,适用于多操作系统或虚拟化场景。

​​二、内存映射控制区域​​

APLIC 的控制寄存器通过内存映射访问,每个中断域对应独立的内存区域,主要包含以下功能模块:

​​1. 域配置(domaincfg)​​

  • ​​IE​​(Interrupt Enable):全局中断使能位。
  • ​​DM​​(Delivery Mode):选择直接传递(0)或MSI模式(1)。
  • ​​BE​​(Big-Endian):MSI数据字节序配置。

​​2. 源配置(sourcecfg[1..1023])​​

  • 每个中断源可绑定到特定域,或标记为不活跃(D=1)。
  • 支持级联模式,允许中断源触发其他中断(未完全定义)。

​​3. MSI地址配置​​

  • ​​mmsiaddrcfg​​:机器模式MSI目标地址配置。
  • ​​smsiaddrcfg​​:监管者模式MSI目标地址配置。
  • 支持地址偏移和Hart索引映射,灵活适应多处理器架构。

​​三、中断挂起与使能管理​​

1.挂起位操作​​

    • 通过 setipnum/clripnum 寄存器可原子化设置或清除指定中断源的挂起位。
    • 支持批量操作(setip[0..31])以提高效率。

2.使能位控制​​

    • setie/clrie 寄存器管理中断使能位,确保优先级和屏蔽策略。

​​四、中断传递机制​​

​​1. 直接传递模式​​

  • ​​IDC结构​​(Interrupt Delivery Controller):
    • idelivery:使能中断传递。
    • ithreshold:优先级阈值,过滤低优先级中断。
    • topi:读取当前最高优先级中断,claimi 用于确认处理完成。

​​2. MSI转发模式​​

  • ​​地址生成​​:根据目标Hart的IMSIC地址模板和中断ID生成MSI数据包。
  • ​​电平敏感中断处理​​:需APLIC保持MSI重发直至中断源释放。

​​五、同步与原子性​​

  • ​​内存屏障​​:在修改APLIC配置或发送MSI后,需执行 FENCE 指令保证操作可见性。
  • ​​原子操作​​:genmsi 寄存器允许单次写入同时触发中断并传递数据。

​​六、复位与初始化​​

  • 复位后所有中断源配置为不活跃(D=1),挂起位和使能位清零。
  • MSI地址寄存器初始值由实现定义,需软件配置。

设计意义​​与功能特点

1.灵活性与可扩展性​​

APLIC 的多域设计和MSI模式支持,使其适用于从嵌入式到数据中心的多样化场景,尤其在虚拟化环境中可为每个虚拟机分配独立中断域。

​性能优化​​

批量操作寄存器和原子化指令减少了中断处理延迟,适合高吞吐量场景(如网络数据包处理)。

2.​虚拟化支持​​

MSI模式与IOMMU结合,允许客户机直接管理设备中断,减少Hypervisor介入,提升性能。

3.兼容性考虑​​

保留传统直接传递模式,兼容旧有软件;同时支持PLIC兼容模式(eidelivery=0x40000000),平滑过渡到新架构。

概述

在RISC-V系统中,PLIC 处理外部中断是通过线中断而非MSI(message signal interrupt) 的方式,当系统的hart不具有IMSIC时,hart本身不支持MSI,因此所有的外部中断必须通过 PLIC。即使hart具有IMSIC,且大多数的中断使用 MSI 的方式,但有些设备还是以线中断的方式发出。特别是对于不需要在系统中启动总线事务的设备,支持MSI的成本较高,因此使用线中断时成本较低的选择。与MSI不同,当前计算机平台普遍支持线中断。这也是许多商用设备或控制器选择线中断而非MSI的另一个原因,除非实现像PCIe那样规定MSI的标准。

Advanced PLIC(以下简称 APLIC) 不向下兼容,也就是说不与RISCV PLIC兼容。完整的AIA架构是需要APLIC这个组件的。只要向 hart 发送 interrupt 是使用 wire interrupt 而不是 MSI,就可以使用 PLIC 建立一个可行的系统。不过,假设系统中不需要支持MSI,使用原有的PLIC也是可行的。

在不包含IMSIC的系统中,只会有一个PLIC或者APLIC,作为系统的外部中断控制器,将中断发送到每一个hart中。APLIC与每个hart之间采用独享的中断线连接,每个特权等级都对应一根中断线。

在包含IMSIC的系统中,IMSIC作为每个hart的外部中断控制器,其只接收MSI中断。在这种情况下,APLIC角色发生变化,不再充当hart的外部中断控制器,其作用为将线中断转换丞MSI中断发送到IMSIC中。当 hart具有IMSIC时,系统可能包含多个APLIC,用于将wire interrupt转换为MSI,每个APLIC对应一组外设。

4.1 中断源与中断标识

一个APLIC支持固定数量的中断源,这些中断源分别对应APLIC模块的物理中断线输入。通常,每个中断源的输入线都会连接一个设备或是设备控制器的输出中断线。对于电平触发的中断,可以将多个外设的中断线相或接入到APLIC的输入中断线上。当APLIC的输入中断线固定设置为0或者1,则该中断源通常配置为Detached模式。

每个APLIC的interrupt source都有一个唯一标识号(ID),范围为1到N,其中N是APLIC的源总数。0表示不是APLIC的有效中断标识号。APLIC可以支持的最大interrupt source为1023。

当 APLIC 将中断直接传递给 harts(不是将中断当作 MSI 转发)时,APLIC是该harts的外部中断控制器,并且APLIC的interrupt ID直接成为该中断的minor ID,并附带软件配置的优先级。

当APLIC通过MSI转发中断时,软件会为每个中断源的MSI配置一个新的interrupt ID。因此,在这种情况下,APLIC interrupt ID只区分APLIC的诸多输入interrupt,到IMSIC时就会使用软件配置的interrupt ID。

4.2 Interrupt domain

APLIC支持一个或多个interrupt domain,每个domain分别对应一组hart的某一特权等级(machine或者supervisor level),可以触发组内hart的对应特权等级的中断。每个domain都有各自的物理地址内存映射的控制区域,控制一个完整独立的APLIC。

下图是一个最简单的系统,只有一个hart并且不支持S mode,只有一个machine level的interrupt domain。

RISC-V AIA SPEC学习(三)--APLIC_第1张图片

下图为SMP系统基本架构,其中hart支持S mode,并且具有多个hart,在这种情况下,APLIC通常会为supervisor level提供一个独立的interrupt domain,此interrupt domain允许操作系统直接在S态处理接收到的中断,避免调用M mode来处理中断,提高处理中断的效率。

RISC-V AIA SPEC学习(三)--APLIC_第2张图片

APLIC的中断域是一个树状结构,根域总对应的是machine level。输入的线中断首先进入根中断域。每个中断域会有选择地将部分中断源进行委托给子中断域。需要注意的是不论在哪一个中断域,某一中断源的ID都是固定且一致的。对于根以下的中断域,未委托到该中断域的中断源对于该域来说表现为未实现。

下图显示了三个中断域的结构,两个在M level,一个在S level。当结合 PMP(physical memory pr

你可能感兴趣的:(RISC-V系列专题之AIA,SPEC,risc-v,学习,单片机)