RISC-V AIA学习3---APLIC 第一部分

先介绍一下什么是APLIC

1. APLIC 的背景与必要性

  • 为什么需要 APLIC?

    APLIC 是 RISC-V 架构中升级版的中断控制器,专门处理通过物理线路(而非电子消息)传递的硬件中断。就像传统邮局处理实体信件,APLIC 负责处理这类 "实体中断信号"。

  • 与旧版 PLIC 的区别

    APLIC 是 "高级版",不兼容旧的 PLIC。就像智能手机不兼容老式大哥大,新系统需要 APLIC 才能支持最新的中断管理功能。

2. 何时使用 APLIC?

  • 无 IMSIC 的系统

    如果 CPU 核心(hart)没有 IMSIC(类似智能分拣中心),所有外部中断必须通过 APLIC(或旧版 PLIC)处理。例如,老式电脑只能通过传统邮局(PLIC/APLIC)接收信件。

  • 有 IMSIC 的系统

    即使 CPU 有 IMSIC(能处理电子消息中断 MSI),某些设备仍可能使用物理线路中断:

    • 成本原因:像老式打印机,添加电子消息功能太贵,不如直接拉条线更省钱。
    • 兼容性:许多设备(如 USB 控制器)必须兼容所有平台,物理线路是通用解决方案。

3. APLIC 的功能与设计

  • 核心作用

    APLIC 就像邮局的分拣中心,负责将物理线路的中断信号转化为 CPU 能处理的格式。例如,将实体信件(线路中断)扫描成电子文档(MSI)再发送给 CPU。

  • 多 APLIC 的情况

    当设备分布在不同物理位置(如多个芯片),可以部署多个 APLIC:

    • 每个 APLIC 负责附近设备的中断转换。
    • 例如,北京的 APLIC 处理北方设备,上海的 APLIC 处理南方设备。

4. 与旧系统的兼容性

  • 替代方案

    旧的 PLIC 仍可使用,但只能处理物理线路中断,无法支持 MSI。就像老式邮局只能处理实体信件,不能发送电子邮件。

  • Duo-PLIC 的尴尬

    曾有一个 "二合一" 设计(Duo-PLIC),可以切换成旧 PLIC 或 APLIC,但可能不会成为标准。类似能插软盘和 U 盘的光驱,但最终 U 盘成为主流。

5. 系统架构示例

  • 无 IMSIC 的系统

  • 有 IMSIC 的系统

6. 多 APLIC 的效率问题

  • 优点

    物理上分散的设备可以就近处理,减少线路延迟。例如,上海的信件直接由上海邮局处理。

  • 缺点

    多个 APLIC 需要更多资源(如内存、电力),可能不如一个大 APLIC 高效。就像每个城市都建邮局,成本高于集中处理。

总结比喻

APLIC 是 RISC-V 架构中的 "智能邮局":

  1. 处理实体信件(物理线路中断),并将其转换为电子文档(MSI)。
  2. 比旧邮局(PLIC)更高效,但不兼容旧系统。
  3. 在分布式系统中,多个 APLIC 可以分工处理不同区域的信件。
  4. 有了它,即使 CPU 有智能分拣中心(IMSIC),仍能兼容老式设备的中断方式。

一、Interrupt sources and identities

1. 中断源的物理基础

  • APLIC 的 "插座"

    APLIC 就像一个带多个物理插座的插排,每个插座对应一个中断源。这些插座连接到设备或控制器的中断信号线:

    • 例如:打印机连接到插座 1,键盘连接到插座 2
    • 特殊情况:多个设备的中断信号可以合并到同一个插座(电平触发中断)
  • 插座编号规则

    每个插座的编号是 1 到 N(N 最多 1023),0 号无效。就像酒店房间号从 1 开始,没有 0 号房。

2. 中断标识的作用

  • 直接传递模式

    当 APLIC 直接向 CPU 核心(hart)发送中断时:

    • APLIC 的插座编号(1-1023)直接作为 hart 的中断 ID
    • 例如:插座 5 的中断会被 hart 识别为中断 5
  • MSI 转发模式

    当 APLIC 将中断转换为电子消息(MSI)时:

    • 软件会为每个插座分配一个新的 ID(可能与原编号无关)
    • 例如:插座 5 的中断可能被重新编号为 ID 100 发送给 hart

3. 两种模式的对比

4. 特殊配置说明

  • 电平触发中断

    多个设备的中断信号可以 "线或" 到同一个插座。例如:

    • 打印机和扫描仪同时连接到插座 3 的信号线
    • 任一设备触发中断,APLIC 都会收到插座 3 的中断
  • 固定电平插座

    插座可以被硬连线为高或低电平:

    • 高电平:永远触发中断(可能用于测试)
    • 低电平:永远不触发中断(可能用于预留)

5. 为什么最大源数是 1023?

  • 技术原因:APLIC 使用 10 位寄存器存储中断 ID(2^10=1024)
  • 有效范围:排除 0 后,实际可用 1-1023(共 1023 个)

总结比喻

APLIC 的中断源系统就像一个邮件分拣中心:

  1. 直接投递模式:邮件按原始编号(1-1023)直接送到对应的邮箱(hart)
  2. 转寄模式:邮件会被重新编号(如转换为 EMS 单号),再通过快递(MSI)发送
  3. 特殊处理:允许将多封邮件合并到同一个邮箱,或设置某些邮箱为常满 / 空

这种设计兼顾了物理设备的兼容性和电子消息的灵活性,适用于不同复杂度的系统。

二、Interrupt domains

1. 中断域的基本概念

APLIC 可以划分成多个 "中断域",每个中断域就像一个独立的 "管理小组":

  • 每个小组负责管理特定权限级别的处理器核心(HART)
  • 例如分为 "机器级小组" 和 "管理级小组"
  • 每个小组有自己的 "控制面板"(内存映射控制区域),但实际都是同一个 APLIC 控制器的不同管理界面

APLIC 就像一家公司,中断域就是不同的部门:

  • 机器级域(M 域):最高管理层(根域),所有中断线首先到达这里
  • 管理级域(S 域):业务部门,处理日常工作(操作系统直接控制)
  • 每个部门:有自己的 "办公系统"(内存映射控制区域),但实际共享同一栋办公楼(同一个 APLIC 控制器)

2. 中断域的层次结构

  • 根域:必须是机器级域,所有中断线首先到达这里
  • 子域:根域可以将部分 "工作任务"(中断源)委派给子域

例如:根域(CEO)将 "打印机管理" 任务交给 IT 部门(子域)

未被委派的任务(中断源)对子域来说 "不存在"

  • 编号规则:所有域的中断源编号是统一的(比如源 1 在所有域都指向同一个物理线路)

3. 典型系统架构示例

3.1 一个interrupt domain

只有一个hart并且只支持machine level 的中断域

类似于单核心小公司

  • 只有 1 个员工(hart),只能处理最高层(M 域)的工作
  • 所有中断直接由根域处理,没有其他部门

machine-level interrupt domain对应hart0的machine模式,可以触发hart0 machine模式的中断。

3.2 两个interrupt domain

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

类似于多核心 SMP 公司

  • 4 个员工(harts),分为两个部门:
    • M 域:处理硬件维护(如电源故障)
    • S 域:处理日常业务(如打印、网络)
  • S 域允许操作系统直接管理,无需每次请示 CEO(M 域)

machine-level interrupt domain对应hart0-3的machine模式,可以触发这些hart的machine模式下中断。

supervisor-level interrupt domain对应hart0-3的supervisor模式,可以触发这些hart的supervisor模式下中断。

3.3 三个interrupt domain

APLIC的root domain始终是machine-level interrupt domain。输入的线中断,首先进入根中断域。每个中断域,会有选择地将部分中断域,进行委托给子中断域。

下图是三个中断域的结构,两个在machine-level,一个在supervisor-level。当结合PMP(物理内存保护)使用时,允许软件在machine-level专门为hart0建立一个独立域。

类似于

  • 新增 1 个 "经理" 员工(M 域专用)
  • 通过 "门禁系统"(PMP 内存保护)将特定任务(中断)隔离给经理,其他员工无法处理

machine-level interrupt domain(Root) 对应Hart0的machine模式,可触发Hart0的machine模式下中断。

machine-level interrupt domain(非Root) 对应Hart1 ~ 4的machine模式,可触发这些Hart的machine模式下中断。

supervisor-level interrupt domain对应Hart1 ~ 4的supervisor模式,可触发这些Hart的supervisor模式下中断。

  1. 规则
  • 管理级域的父域必须是包含相同核心的机器级域
  • 同一域内的所有核心必须使用同一种中断传递方式(全部直接连线或全部 MSI 消息)
  • 使用 APLIC 的核心在每个权限级别只能属于一个域
  • 使用 IMSIC 控制器的核心可以属于多个域

APLIC 的中断域就像一家公司的部门架构:

  1. 根域(M 域):CEO 办公室,处理最紧急的任务
  2. 子域(S 域):各业务部门,处理日常工作
  3. 任务编号:全公司统一的分机号,无论哪个部门都指向同一台设备
  4. 委派机制:CEO 可以将任务分配给部门,未分配的任务对部门不存在
  5. 通信方式:同一部门必须使用相同沟通渠道(邮件 / 电话)

这种设计让公司(系统)能够高效管理不同优先级的任务,同时保证安全性和灵活性。

三、Hart index numbers

1. 索引编号的本质:部门内的员工编号

在 APLIC 的中断域中,每个 Hart 的索引编号就像公司部门内的员工编号:

  • 范围:0 到 16383(共 16384 个编号)
  • 独立性:与 RISC-V 架构分配的全局 Hart ID 无关
  • 灵活性:不同部门(中断域)可以给同一批员工(Hart)分配不同的编号

示例

同一个 Hart(员工)在部门 A 的编号是 5,在部门 B 可能变成 10。

2. 索引编号的作用

  • 域内控制:用于中断域内的优先级设置、中断路由等
  • 隔离性:不同域的编号系统相互独立,避免冲突

3. MSI 转发时的特殊规则

如果 APLIC 支持通过 MSI(电子消息)转发中断:

  • 所有机器级域必须共享相同的索引→Hart 映射
  • 这就像多个部门合作时,必须使用统一的员工编号系统

示例

当部门 A(机器级域)和部门 B(另一个机器级域)都需要通过 MSI 发送消息时,它们的员工编号必须一致。

4. 为什么需要不同的索引?

  • 域的独立性:每个域可以独立管理自己的中断路由策略
  • 简化配置:避免与全局 Hart ID 的复杂映射

5. 实际应用场景

  • 单域系统:索引与 Hart ID 可能相同
  • 多域系统
    • 部门 A(管理级域)使用简单编号(0-3)
    • 部门 B(机器级域)使用复杂编号(100-103)
  • 跨域 MSI:必须统一编号,否则消息无法正确路由

总结比喻

Hart 索引编号就像:

  • 部门内的工号:不同部门可以有不同的编号方式
  • 跨部门协作时的工牌:必须使用统一编号才能互相识别

这种设计让中断域可以灵活管理自己的资源,同时保证跨域通信的兼容性。

四、Overview of interrupt control for a single domain

1. 中断域的内存映射控制接口

由高级平台级中断控制器(APLIC)实现的每个中断域都有其独立的物理控制接口

  • 权限管理:通过 PMP 内存保护 和 基于页的地址转换 控制访问
  • 独立性:每个中断域的控制接口都具有相同的结构
  • 对于软件而言,每个中断域看起来都像是根域,无法看到其所在层次结构中位于它之上的那些中断域。

2. 中断源的三个核心组件

每个中断源在域内有三个管理设置:

a. 源配置

  • 决定设备是否激活(启用 / 禁用)
  • 判断输入信号类型(电平触发:持续按压;边沿触发:按一下)
  • 未激活时:可以将控制权委派给子部门(子域)

b. 中断待处理位和中断使能位

  • 未激活的中断源:这两位均为只读的零值
  • 激活的中断源:
    • 待处理位:记录未处理的中断
    • 使能位:决定当前是否应传递来自该中断源的中断,还是让其中断保持待处理状态

c. 目标选择

  • 直接传递模式:指定中断发送给哪个Hart
  • MSI 转发模式:为中断分配新的优先级或 ID

APLIC 的多域实现实际上共享源状态,因为每个源最终只在一个域中激活。未被委派的域中的源状态显示为只读零,节省了硬件资源。

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习