目录

前言

上一章讲了ug1085MPSOC技术参考手册的第二章,讲了有关MPSOC信号和引脚功能的相关内容,这次我们来讲第三章,MPSOC的核心器件之一的APU。事先声明,由于我对ARM架构完全不熟悉,所以我用了AI工具来理解这些内容,后面我可能也会直接贴AI的回答。

Chapter 3: Application Processing Unit 应用处理单元

3.1 Introduction 介绍

Application Processing Unity也就是我们常说的APU,实际是就是MPSOC中的四核/双核A53处理器,在这一小节中介绍了A53的一些特性,比如其基于Arm v8架构,无缝支持32和64位代码,以及其流水线特性等,介绍性内容不多说了。

3.1.1Cortex-A53 MPCore Processor Features

这一小节介绍了Cortex-A53 MPCore处理器的一些特性,这些特性后面都会介绍到,我这里也把这些特性列出来,方便先做个简介。A53有下面的特性:

  • AArch32 and AArch64 execution states.

  • All exception levels (EL0, EL1, EL2, and EL3) in each execution state.(支持4中特权(异常)等级)

  • Arm v8-A architecture instruction set including advanced SIMD, VFPv4 floating-point extensions, and cryptography extensions. (浮点数和加解密扩展)

  • Separate 32 KB L1 caches for instruction and data.(每个核心独立L1缓存)

  • Two-stage (hypervisor and guest stages) memory management unit (MMU).(两个阶段的地址管理)

  • CPU includes an in-order 8-stage pipeline with symmetric dual-issue of most instructions.

  • 1 MB L2 cache in CCI coherency domain.(具有缓存一致性的L2)

  • Accelerator coherency port (ACP).(这个接口会直接接到SCU上,实现对L2的直接访问)

  • 128-bit AXI coherency extension (ACE) master interface to CCI.(A53连接到CCI的接口)

  • Arm v8 debug architecture.

  • Configurable endianess. (可配置的大小端)

  • Supports hardware virtualization that enables multiple software environments and their applications to simultaneously access the system capabilities.

  • Hardware-accelerated cryptography—3-10x better software encryption performance.(硬件加解密器)

  • Large physical address reach enables the processor to access beyond 4 GB of physical memory.

  • TrustZone technology ensures reliable implementation of security applications.

3.2 Arm v8 Architecture Arm v8架构

这小节主要介绍了Arm v8架构的构成和功能,以及其从EL0-EL3的异常等级,这里简要提一嘴异常等级的概念,不过我也不是很熟悉所有可能有错误,所谓异常等级或者特权等级,就是ARM中软件运行的等级,在这一等级中EL0中运行的软件处于最低等级,不能够直接操作内存和各种外设,必须将请求提供给EL1,而随着等级提高,软件所能操作的硬件权限就更高,EL1主要是操作系统的内核,到EL2就能进行虚拟化的相关设置,到EL3也就是安全状态,就能够操作有关安全设置的最高权限了,后面将虚拟化还会说到相关内容,这里就不讲了,贴一张ARM v8架构图:
image
这张结构图其实也值得说到,例如每个核心的私有部件以及贡献的SCU,L2,以及与CCI通信的ACE总线,每个核心特有的中断线等等。

3.3 APU Functional Units APU功能单元

这节讲了APU中的各种功能单元,很多地方我都没搞懂是啥,所以就问AI了,这里我也贴下AI的回答,感觉比我自己总结的好,我这里额外问了AI这些单元需不需要显式的代码调用,这里也一并复制过来了。

3.3.1 Instruction Fetch Unit(指令取指单元)

image
我还要额外提一句DPU还负责对APU中寄存器中数据的操作。

3.3.2 Data Processing Unit(数据处理单元)

image

3.3.3 Advanced SIMD and Floating-point Extension(高级 SIMD 与浮点扩展)

image

3.3.4 Cryptography Extension(加密扩展)

image

3.3.5 Translation Lookaside Buffer (TLB,转译后备缓冲器)

image

3.3.6 Data-side Memory System (数据侧内存系统)

image
数据侧内存系统实际包含有好几个子模块,但是我理解不深,就只把这些模块介绍的原文翻译一下了。

数据缓存单元(DCU)由以下子块组成。

  • (L1)数据高速缓存控制器为associated embedded tag, data, and dirty RAMs生成控制信号,并在请求访问存储器资源的各个源之间进行仲裁。数据缓存是4路集关联的,并使用物理索引物理标记(PIPT)方案进行查找,从而实现系统中的明确地址管理。
  • 与DPU和主TLB接口的加载/存储流水线。
  • 系统控制器通过与IFU(指令取指单元)接口对指令进行高速缓存,又协同TLB(转译后备缓冲器)对数据进行高速缓存操作。
  • 从窥探控制单元(SCU)接收一致性请求的接口。

3.3.6.1 Store Buffer 存储缓冲器

当存储操作离开加载/存储流水线并由DPU提交时,存储缓冲器(STB)将保存这些操作。STB可以请求访问DCU中的缓存RAM、请求BIU启动行填充或请求BIU在外部写通道上写出数据。外部数据写入通过SCU进行。STB可以合并以下内容。

  • 如果多个事务位于相同的128位对齐地址,则将它们存储为单个事务。
  • 多次写入AXI或CHI写突发。STB还用于在将维护操作广播到Cortex-A53 MPCore中央处理器集群中的其他核心之前对维护操作进行排队。

Cortex-A53 MPCore L1内存系统由单独的L1指令和数据缓存组成。它还由两个级别的STB组成。

  • 指令端和数据端都有单独的微TLBs。
  • 统一的主TSB处理微TLBs的缺失。

3.3.6.2 Bus Interface Unit and SCU Interface 总线接口单元和SCU接口

接口单元(BIU)包含SCU接口和缓冲区,用于将接口与缓存和STB分离。BIU接口和SCU始终以处理器频率运行。

3.3.6.3 Snoop Control Unit 窥探控制单元

集成窥探控制单元(SCU)连接APU MPCore和MPSoCs中使用的加速器一致性端口(ACP)。SCU还具有L1数据缓存标签的复制副本,用于一致性支持。SCU与处理器同步且频率相同。

SCU包含的缓冲区可以处理处理器之间的脏缓存的缓存到缓存传输(脏缓存就是被一个处理器所使用的未同步缓存),而无需向外部存储器系统读取或写入任何数据。缓存行迁移使脏缓存行能够在处理器之间移动,并且不需要将传输的缓存行数据写回外部存储器系统(也就是不用经过DDR就能实现处理器间的缓存同步)。Cortex-A53 MPCore处理器使用MOESI协议来维护多个核心之间的数据一致性。

这部分我尽力校对了一下,如果发现有翻译的很抽象的就是我也没看懂的了。

3.3.7 L2 Memory Subsystem(L2 缓存子系统)

image

这里有额外的说明,核心对L2的访问是会被SCU单元仲裁的,而且当L2和SCU同时命中了核心的内存请求,核心会偏向于使用SCU来访问这些内存数据

3.3.8 Cache Protection(缓存保护)

image

3.3.9 Debug and Trace(调试与跟踪)

image

3.3.10 Generic Interrupt Controller(GIC,通用中断控制器)

image

3.3.11 Timers(定时器)

image

3.4 APU Memory Management Unit APU内存管理单元

MMU是A53中比较重要的一个单元,这个单元的主要作用是实现从虚拟地址到物理地址的转译,我们后面会了解到为了实现应用程序到虚拟机以及虚拟机到物理地址的双重地址转译,也就是VA(虚拟地址)->IPA(中间物理地址),IPA->PA(物理地址)的两次转译,需要由OS和虚拟机向MMU提供页表文件才能实现。而这种地址转译是为了实现两重的地址虚拟化,也就是应用程序和虚拟机的地址虚拟化,从而将他们从物理地址中分隔开。具体的虚拟化内容我们后面再讲。

3.5 System Virtualization 系统虚拟化

虚拟化是现代操作系统的一个重要功能,我浅显的理解就是虚拟化能够实现对内存空间的分割,防止不同应用程序或虚拟机去操作其他应用程序或虚拟机的地址,此外还能实现对内核以及外设的保护,同时实现多用户多操作系统的功能。

为了实现系统的虚拟化,A53核中提供了四种虚拟化组件:

  • APU虚拟化

  • 中断虚拟化

  • 定时器虚拟化

  • 使用SMMU地址转译的系统内存虚拟化

下面我们一个一个讲。

3.5.1 APU Virtualization

APU虚拟化就是将APU中的核心共享到多个用户的OS中使用,这些OS的运行和对CPU的调度由虚拟机进行管理,所以虚拟机功能的核心就是在多个虚拟机上运行多个用户的操作系统,我们之前提到过异常等级或者特权等级的概念,有很大程度就是用于虚拟机系统的,在这一框架下,系统的最高级权限以及安全应用运行在EL3的安全世界中,而EL2运行虚拟机的程序,EL1运行用户OS,EL0运行OS上的应用程序,后三者都是运行于非安全世界,架构图如下所示:
image
在虚拟机的框架下,地址转译的方式也会不同,当整个系统只运行一套OS,不使用虚拟机时,对内存的虚拟化只需要从有应用的虚拟化地址VA直接由OS转为物理地址PA就可以被发送给硬件进行执行了,但是在虚拟机系统中,各个虚拟机也需要进行内存空间的虚拟化以实现对不同虚拟机可使用内存空间的限定,因此地址虚拟化会多出一层IPA,也就是会分为两个阶段地址转译,具体示意图如下:
image
这个虚拟化过程还是比较复杂的,在讲MMU的章节中用嘛两张示意图详细描述了这种二阶段虚拟化的过程,但是我也没看懂,这里就不展开说了,主要有这么个概念。

3.5.2 Interrupt Virtualization

中断虚拟化主要是有GIC中断控制器来完成的,理论上来说每个APU的核心以及外设都有着确定的中断线,当一个虚拟机想要使用某个外设的中断时,就需要GIC将这些外设的中断送给对应的虚拟机,不过我没用过虚拟机所以这部分内容可能不太准确

3.5.3 Timer Virtualization

由于每个APU的核心中只有一个定时器,当运行在该核心上的多个虚拟机都需要使用定时器时就需要进行定时器虚拟化,具体的在第14章定时器章节有更为详细的描述。

3.6 System Coherency 系统一致性

一致性也是比较关键的内容,系统的一致性是指CPU多个核心之间或者CPU与外部设备需要共同处理同一批数据时出现的一致性问题,因为CPU的核心会将要处理的数据缓存到自己的私有缓存中从而加速处理,但当其他核心或者设备也需要处理这批数据时,就会出现当前数据未更新导致处理的数据不一致的问题

通常有两种处理该不一致的方法,一种是软件上的,例如CPU核心要使用PL端逻辑加速处理DDR上的同一批数据,那么在PS端在发送命令让PL进行处理前,要首先刷新自己的缓存,强制将缓存写回DDR中,同样当PL端处理完这段数据前,要强制CPU缓存不读取这段数据

另一种方法则是硬件上的,这里先不涉及CPU多核心间使用的缓存一致性的硬件,而是像PL端直接使用ACP总线由APU的SCU单元直接窥探核心的L1数据

3.6.1 I/O Coherency

IO一致性就是使用具有一致性特性的数据接口,主要就是Accelerator coherency port (ACP)和Cache-coherent interconnect (CCI) ACE-Lite接口两种,ACP刚刚介绍过了,ACE接口我的理解是其不像ACP接口一样直接连接到APU,而是先连接到CCI上进行一致性的设置,具体的下一节讲。

3.7 ACE Interface ACE接口

ACE就是一致性扩展的AXI接口,其本质上还是AXI协议,但是他从硬件层面上确保了缓存一致性以及传输的顺序性,具体的实现内容这部分有一点解释:

ACE一致性协议通过强制每当存储到该位置时仅存在一个副本,确保所有主机在任何给定地址位置观察到正确的数据值。每次存储到某个位置后,其他主机可以为其自己的本地缓存获取数据的新副本,从而允许存在多个副本

我感觉他的硬件缓存一致可能还是由CCI单元来做的,其可能有一些复杂的机制,我也不太懂。

3.8 ACP Interface ACP接口

刚刚讲了不少了,具体的到等我看到第35章再说。

3.9 APU Power Management 电源管理策略

这部分主要讲APU的电源域和电源管理策略,我们下面细说。

3.9.1 Power Islands

APU主要有三个电源域:
image
可以看到,APU把电源域分为了SCU和L2控制器,L2,CPU核心三部分,这样的分法其实主要和电源管理策略有关。

3.9.2 Power Modes

电源管理策略主要是为了低功耗应用准备的,主要有5类:

  • 常规模式
  • 待机模式
  • MPCore独立关闭模式
  • Cluster Shutdown Mode with System Driven L2 Flush(我没翻译主要是不知道要翻译成啥)

3.9.2.1 Normal State

常规模式就是A53所有功能都启用的模式。

3.9.2.2 Standby State

待机模式有好几种不同的模式

3.9.2.2.1 MPCore Wait for Interrupt

这一小节描述了v8架构处理器的Wait for Interrupt (WFI)特性,这个模式下整个MPCore都会处于低功耗模式并等待中断唤醒。在处理器进入WFI模式前,需要使用WFI指令并等待处理器进行一些操作,例如寄存器和指令的退回。

还有一点,在这个模式下。似乎L2缓存系统还会响应一些特殊的指令,例如要求L2加载指令的操作,进行数据缓存和TLB维护的操作,以及存放专有指令的操作。

3.9.2.2.2 MPCore Wait for Event

Wait for Event (WFE)等待事件特性我感觉有点类似于WFI,区别在于一个等待中断一个等待事件寄存器置位,但是WFE有着更多的特点,我觉得一个比较重要的是这个模式下有些操作可以让处理器暂时的使能而不退出其待机状态,原文如下:

当MPCore处于WFE低功耗状态时,当检测到以下任何事件时,MPCore中的时钟将暂时启用(而不会导致MPCore退出WFE低功耗状态)。

  • 必须由MPCore L1数据缓存服务的L2窥探请求
  • 必须由MPCore L1指令高速缓存、数据高速缓存或TLB进行服务的高速缓存或TLB维护操作
  • APB访问驻留在MPCore电源域中的调试或跟踪寄存器
3.9.2.2.3 L2 Wait for Interrupt

这个状态比较简单,就是所有核心以及L2缓存系统都进入WFI模式。

3.9.2.3 Individual MPCore Shutdown Mode

这个模式我对比了一下WFI和WFE模式,总结下来就是该模式会直接将MPCore关闭,或者说是关闭之前APU电源域提到的PDCPU电源域,但不连同L2缓存系统,这个模式不像WFI和WFE还存在待机功耗,好像就是直接关了。这里有很长的一段操作来进行MPCore的断电和重新上电,具体不讲了。

3.9.2.4 Cluster Shutdown Mode with System Driven L2 Flush、

这个名字很奇怪的模式就是直接把APU的三个电源域PDCORTEXA53, PDL2, and PDCPU全部关了,这节讲了下关闭的具体操作,也不再讲了。这里额外提到APU的电源管理和动态功耗管理都是是由运行在PMU中的电源管理软件控制的。

3.10 Clocks and Resets 时钟与复位

这节稍微讲了下APU的复位操作,APU的每个核心都可以进行单独的复位操作这些复位操作可以由FPD域的看门狗或者从软件上写寄存器来实现,具体的有两个寄存器可以实现复位操作,一个是PMU中的PMU_GLOBAL.REQ_SWRST_INT_EN寄存器的[APUx]位,另一个是REQ_SWRST_TRIG寄存器的[APU{0:3}]位(我没看到这个寄存是哪的)。

3.11 Performance Monitors 性能监视器

这里懒得写了就贴下原文:

Cortex-A53 MPCore处理器包括实施Arm PMUv 3架构的性能监视器。性能监视器可以收集有关处理器及其内存系统在运行时操作的各种统计数据。它们提供有关处理器行为的有用信息,供调试或分析代码时使用。性能监视器提供六个计数器。每个计数器都可以对处理器中可用的任何事件进行计数。

3.12 System Registers 系统寄存器

这部分列出来APU的系统控制寄存器,描述也写在表里了:
image
他这里没详细介绍这些寄存器的作用,在别的章节可能会有关联

3.13 System Memory Virtualization Using SMMU Address Translation 使用SMMU地址转译进行系统内存虚拟化

这个章节的内容也很多,我这里先简要介绍下这个很长的标题是什么意思。我们之前说过,虚拟机系统需要进行两个阶段的内存虚拟化,一个是由应用程序的VA转为操作系统的IPA,另一个是有操作系统的IPA转为物理地址的PA,但是要注意,这些内存转换在APU中是由APU的MMU单元实现的,MMU单元受到OS和虚拟机的页表控制实现这两阶段的地址转译,但是对于一个独立的外设呢,例如对于一个在PL端实现的数据处理逻辑,为了保障安全性,这个外设也需要被设定内存范围并且进行内存虚拟化,但是这个外设并没有APU中的MMU单元,为了给这些没有MMU的单元实现虚拟地址化,就需要使用这里所说的SMMU(System MMU),所以本质来说,SMMU也是MMU,我这里把原文翻译一下来解释一阶段和二阶段的转译:

虚拟化多客户操作系统的第一阶段硬件地址转换。虚拟地址(VA)到中间物理地址(IPA)。

  • 管理程序软件对第一级地址转换单元编程以虚拟化除处理器之外的总线主控器的地址,例如,DMA单元和PL主机。
  • 将每个总线主设备与其操作系统的中间虚拟内存空间关联。

多应用程序操作系统的第二阶段硬件地址转换。中间物理地址(IPA)到物理地址(PA)。

  • Guest OS软件对第二阶段翻译单元进行编程,以管理每个应用程序的内存映射资源的编址。
  • 将中间虚拟内存地址与系统的物理地址空间关联。

不过我这里怀疑原文可能有问题,这里的两个阶段的转译其控制和MMU那部分内容中的两阶段转译其控制源不同,这里写的是一阶段由虚拟机,二阶段由OS控制,但是实际上应该是写反了,一阶段由VA到IPA才应该由OS控制,二阶段的IPA到PA才由虚拟机控制,这里注意。

3.13.1 Translation Buffer Unit

SMMU有两个部件,一个就是这个Translation Buffer Unit转译缓冲单元,作用就是缓存了地址转译表,这个表就标志了什么地址应该被准换到什么地址去,TBU是由translation control unit (TCU)转译控制单元来维护的。

3.13.2 Translation Control Unit

TCU维护TBU中的地址转译表,而且使用了一个私有的AXI-stream接口来更新这些表。这里没什么内容了,主要就是有一种SMMU在系统中作用的示意图:
image

3.13.3 SMMU Architecture

这小节内容讲SMMU的两阶段转译的内容,具体的原理我们上一部分就讨论了,这里我就主要把原文翻译了一下,可能还有一点注释。

3.13.3.1 Stage 1 SMMU Translation

第1阶段翻译旨在协助操作系统,无论是在本地运行还是在虚拟机管理程序中运行。第1阶段翻译的工作原理与传统(单级)CPU的MMU类似。通常,操作系统通过连续为内核和应用程序分配和释放堆上的内存空间来导致物理内存碎片。由于此问题,不建议使用包括IPA和PA空间之间的碎片模型的虚拟化系统(其中多个客户操作系统共享相同的物理内存)。

分配大型连续物理内存的典型解决方案是预分配此类缓冲区。这非常低效,因为仅在运行时需要缓冲区。此外,在虚拟化系统中,预分配的解决方案需要虚拟机管理程序将任何连续的缓冲区分配给客户操作系统,这可能需要虚拟机管理程序修改。

对于在碎片化物理内存上运行的DMA设备,通常会使用DMA分散-聚集(SG-DMA)机制,这会增加软件复杂性并增加性能负载。此外,某些设备无法访问完整内存范围,例如64位系统中的32位设备。一种解决方案是提供反弹缓冲区-位于低地址的内存中间区域,充当桥梁。操作系统在设备可见的地址空间中分配页面,并将它们用作往返操作系统的DMA的缓冲页面。I/O完成后,操作系统将缓冲页的内容复制到其最终目的地。此操作存在大量的额外费用,可以通过使用SMMU来避免。I/O虚拟化可以通过使用阶段1(对于本地操作系统)以及阶段1或2(对于客户操作系统)来实现。

3.13.3.2 Stage 2 SMMU Translation

SMMU第2阶段转换无需管理程序管理影子转换表,从而简化了管理程序并提高了性能。通过第2阶段地址转换,SMMU使客户操作系统能够直接配置系统中支持DMA的设备。(应该是第二阶段的页表可以共用MM的页表的意思)

SMMU还可以配置为确保防止代表一个客户操作系统运行的设备损坏另一个客户操作系统的内存。

image

在地址转换的两个阶段之间提供硬件分离允许明确定义客户操作系统(阶段1)和管理程序(阶段2)之间两个不同阶段的所有权。翻译错误被路由到适当级别的软件。管理功能(TLB管理、MMU启用、寄存器配置)在翻译过程的适当阶段处理,通过减少虚拟机中的条目数量来提高性能。

安全和非安全翻译上下文都支持第1阶段翻译。第2阶段翻译仅支持非安全翻译上下文。对于非安全操作,两阶段地址转换的典型使用模型如下。

  • 非安全操作系统定义了应用程序和操作系统级操作的第1阶段地址翻译。操作系统这样做就好像它在定义从VA到PA的映射一样,但它实际上是在定义从VA到IPA的映射。
  • 虚拟机管理程序定义将IPA映射到PA的阶段2地址转换。它将其作为一个或多个非安全客户操作系统虚拟化的一部分。

本章总结

这一章是我写的最难受的一章,因为ARM处理器的很多内容我都不太懂,写这一章的同时也相当于是新学了,但也正是越难的东西越有收获。下一章还是设计处理器的一章,讲RPU,我们下一章再见。