目录
[1.2 实现选项](#1.2 实现选项)
[2.1 processor内部的组件](#2.1 processor内部的组件)
[2.2 接口](#2.2 接口)
[2.2.1 Memory接口](#2.2.1 Memory接口)
[2.2.2 可选的Accelerator Coherency Port](#2.2.2 可选的Accelerator Coherency Port)
[2.2.3 可选的GIC CPU接口](#2.2.3 可选的GIC CPU接口)
[2.2.4 Debug 接口](#2.2.4 Debug 接口)
[2.2.5 Trace 接口](#2.2.5 Trace 接口)
[2.2.6 PMU接口](#2.2.6 PMU接口)
[2.2.7 通用的Timer接口](#2.2.7 通用的Timer接口)
[2.2.8 Cross trigger 接口](#2.2.8 Cross trigger 接口)
[2.3 clock & reset](#2.3 clock & reset)
[2.4 Power 管理](#2.4 Power 管理)
[2.4.1 动态电源管理](#2.4.1 动态电源管理)
[2.4.2 Power domains](#2.4.2 Power domains)
1.介绍
Cortex-A72处理器包括以下特性:
- 完整实现ARMv8-A架构配置文件。
- 超标量、变长、乱序流水线。
- 动态分支预测,配备分支目标缓冲(BTB)和全局历史缓冲(GHB)RAM、返回栈和间接预测器。
- 48项全关联L1指令转换后备缓冲(TLB),原生支持4KB、64KB和1MB页面大小。
- 32项全关联L1数据TLB,原生支持4KB、64KB和1MB页面大小。
- 每个处理器具有4路集合关联的1024项二级(L2)TLB。
- 固定的48K L1指令缓存和32K L1数据缓存。
- 可配置大小为512KB、1MB、2MB或4MB的共享L2缓存。
- L2缓存可选错误校正码(ECC)保护,以及L1数据缓存可选ECC保护和L1指令缓存的奇偶校验保护。
- AMBA 4 AXI一致性扩展(ACE)或CHI主接口。
- 可选的加速器一致性端口(ACP),实现为AXI4从接口。
- 基于ETMv4架构的嵌入式追踪宏单元(ETM)。
- 基于PMUv3架构的性能监控单元(PMU)支持。
- 多处理器调试的交叉触发接口(CTI)。
- 可选的密码学引擎。
- 可选的通用中断控制器(GIC)CPU接口。
- 支持具有多个电源域的电源管理。
1.1接口
Cortex-A72处理器具有以下外部接口:
- 内存接口,实现ACE或CHI接口。
- 可选的ACP,实现AXI从接口。
- 可选的GIC CPU接口,实现AXI4-Stream接口。
- 调试接口,实现APB从接口。
- 追踪接口,实现ATB接口。
- 性能监控单元(PMU)接口。
- 通用定时器接口。
- 交叉触发接口。
- 电源管理接口。
- 测试设计(DFT)。
- 内存内置自测试(MBIST)。
1.2 实现选项
2.功能描述
2.1 processor内部的组件
处理器的主要组件包括:
- 指令获取。
- 指令解码。
- 指令分派。
- 整数执行。
- 加载/存储单元。
- L2内存系统。
- 高级SIMD(单指令多数据)和浮点单元。
- GIC CPU接口。
- 通用定时器。
- 调试和追踪。
指令获取 指令获取单元从L1指令缓存中获取指令,并且每个周期最多向指令解码单元提供三条指令。它支持动态和静态分支预测。 指令获取单元包括:
- L1指令缓存是一个48KB的3路集合关联缓存,具有64字节的缓存行,并且数据RAM中每32位和标签RAM中的36位可选双位奇偶校验保护。
- 48项全关联L1指令转换后备缓冲(TLB),原生支持4KB、64KB和1MB页面大小。
- 2级动态预测器,配备分支目标缓冲(BTB)用于快速生成目标。
- 静态分支预测器。
- 间接预测器。
- 返回栈。
指令解码 指令解码单元解码以下指令集:
- A32。
- T32。
- A64。
指令解码单元支持A32、T32和A64高级SIMD和浮点指令集。指令解码单元还执行寄存器重命名,以促进乱序执行,通过消除写后写(WAW)和写后读(WAR)冲突。
指令分派 指令分派单元控制解码后的指令何时分派到执行流水线,以及返回结果何时退役。它包括:
- ARM核心通用寄存器。
- 高级SIMD和浮点寄存器集。
- AArch32 CP15和AArch64系统寄存器。
整数执行 整数执行单元包括:
- 两个算术逻辑单元(ALU)流水线。
- 整数乘累加和ALU流水线。
- 迭代整数除法硬件。
- 分支和指令条件代码解析逻辑。
- 结果转发和比较器逻辑。
加载/存储单元 加载/存储(LS)执行单元执行加载和存储指令,并包含L1数据侧内存系统。它还处理来自L2内存系统的内存一致性请求。加载/存储单元包括:
- L1数据缓存是一个32KB的2路集合关联缓存,具有64字节的缓存行,并可选每32位错误校正码(ECC)保护。
- 32项全关联L1数据TLB,原生支持4KB、64KB和1MB页面大小。
- 自动硬件预取器,生成针对L1D缓存和L2缓存的预取指令。
L2内存系统 L2内存系统为每个处理器的L1指令和数据缓存缺失提供服务。它管理AMBA 4 AXI一致性扩展(ACE)或CHI主接口以及可选的加速器一致性端口(ACP)从接口上的请求。 L2内存系统包括:
- L2缓存,具有以下特性:
- 可配置大小为512KB、1MB、2MB或4MB。
- 16路集合关联缓存,每64位数据可选ECC保护。
- 每个处理器的L1数据缓存标签RAM的副本,用于处理窥探请求。
- 每个处理器的4路集合关联的1024项L2 TLB。
- 可编程指令获取距离的自动硬件预取器。
2.2 接口
2.2.1 Memory接口
处理器具有一个内存接口,它实现了AMBA 4 ACE或CHI总线接口。这两种接口都是用于处理器与内存或其他系统组件之间通信的协议。
2.2.2 可选的Accelerator Coherency Port
处理器实现了一个可选的加速器一致性端口(Accelerator Coherency Port,简称ACP)。这是一个AMBA 4 AXI从接口。
ACP从接口支持对Cortex-A72处理器内存系统的内存一致性访问,但不能接受一致性请求、屏障操作或分布式虚拟内存消息。这意味着ACP接口允许某些类型的加速器或辅助处理器以一致性的方式访问主处理器的内存,但这些加速器不能主动发起需要处理器响应的一致性操作或同步指令。
2.2.3 可选的GIC CPU接口
处理器实现了一个可选的GIC(Generic Interrupt Controller,通用中断控制器)CPU接口,该接口使用AMBA AXI-4 Stream接口。
2.2.4 Debug 接口
Cortex-A72处理器实现了一个AMBA 3 APB从接口,该接口允许访问调试寄存器。
-
AMBA 3 APB (Advanced Peripheral Bus) 接口是一种用于连接处理器和外设的总线,它支持低速外设通信。APB是一种简化的总线,与高性能的AXI总线相比,它具有较低的复杂性和较低的带宽需求。
-
调试寄存器 是一种特殊的寄存器,用于在调试过程中控制和监视处理器的行为。这些寄存器可以提供关于处理器状态、执行的指令、内部变量等信息,对于软件开发和硬件测试至关重要。
2.2.5 Trace 接口
处理器为每个核心实现了专用的AMBA 3 ATB(Advanced Trace Bus)接口,用于输出调试所需的追踪信息。ATB接口与CoreSight架构兼容。
-
AMBA 3 ATB接口 是一种用于处理器核心和追踪设备之间通信的总线,它允许将处理器执行的指令和数据传输到外部追踪分析工具。
-
追踪信息 是指处理器在执行过程中生成的信息,包括指令执行、数据访问、中断处理等。这些信息对于调试和性能分析非常有用。
-
CoreSight架构 是ARM提供的一种全面的系统级调试和追踪解决方案,它包括一系列硬件和软件组件,用于支持复杂的调试任务。
2.2.6 PMU接口
处理器实现了性能监视器,并为每个核心提供了中断输出和事件接口。
-
性能监视器 是一种硬件组件,用于跟踪和测量处理器的各种性能指标。这些指标可能包括但不限于指令执行次数、分支预测准确率、缓存命中率、内存访问延迟等。
-
中断输出 是一种机制,允许性能监视器在检测到特定性能事件或达到预定的性能阈值时,向处理器发出中断信号。这可以用于实时监控系统性能,并在必要时采取行动,例如调整资源分配或优化程序执行。
-
事件接口 是一种编程接口,允许软件开发人员指定他们希望性能监视器跟踪的特定事件或条件。通过事件接口,开发者可以定制性能监视器的行为,使其专注于对他们的应用或系统最重要的性能指标。
2.2.7 通用的Timer接口
处理器拥有一个全局定时器输入,并且每个核心有四个定时器中断输出。
-
全局定时器输入 是一个单一的定时器输入源,通常用于整个系统的计时和同步。它可以被配置为基于系统时钟或外部时钟源运行,以提供一致的时间基准。
-
每个核心的四个定时器中断输出 指的是每个处理器核心都可以独立地生成四个不同的定时器中断信号。这些中断输出可以用于以下目的:
- 性能监控:定时器中断可以用来监控程序或系统的执行时间,帮助开发者了解程序的性能特性。
- 任务调度:操作系统或应用程序可以使用定时器中断来实现任务调度和时间管理。
- 时序控制:在需要精确时序控制的应用中,定时器中断可以用来触发特定的事件或操作。
- 用户定义的定时任务:开发者可以根据需要配置定时器中断来执行用户定义的任务或操作。
2.2.8 Cross trigger 接口
处理器实现了一个单一的交叉触发通道接口。这个外部接口通过简化的交叉触发矩阵(Cross Trigger Matrix,简称CTM)连接到每个核心对应的CoreSight交叉触发接口(Cross Trigger Interface,简称CTI)。
-
交叉触发通道接口 是一种允许不同处理器核心或调试组件之间进行通信和同步的机制。它使得一个事件(如中断或异常)能够触发其他核心或组件的响应。
-
CoreSight CTI 是ARM CoreSight调试架构的一部分,它提供了一种灵活的方式来管理和同步多个调试和跟踪组件。CTI允许复杂的调试场景,其中不同的调试事件可以在不同的处理器核心或调试工具之间进行协调。
-
简化的交叉触发矩阵(CTM) 是一种硬件组件,它简化了CTI的实现,使得交叉触发事件的路由和控制更加高效。CTM通常包含逻辑电路,用于确定哪些事件应该触发哪些响应,以及如何将这些事件传递到目标核心或组件。
通过实现交叉触发通道接口和连接到CTM,处理器能够:
- 支持复杂的调试场景,其中多个核心和调试工具需要同步操作。
- 允许一个核心的事件触发其他核心的调试操作,这对于分析多线程程序的行为非常有用。
- 提供一种机制,用于在处理器核心之间或与外部调试工具之间进行精确的时序控制。
2.3 clock & reset
略
2.4 Power 管理
2.4.1 动态电源管理
这部分描述了处理器中的以下动态电源管理特性:
- Core Wait for Interrupt(核心等待中断)
- Core Wait for Event(核心等待事件)
- 使用WFE(Wait For Event,等待事件)和SEV(Send Event,发送事件)指令的事件通信
- CLREXMON请求和确认信号
- L2 Wait for Interrupt(L2等待中断)
- L2硬件缓存刷新
- 处理器动态保留
- L2 RAMs动态保留
- 高级SIMD和FP(浮点)时钟门控
- L2控制和标签库时钟门控
- 区域时钟门控
Core Wait for Interrupt(核心等待中断)
- 等待中断(Wait for Interrupt,简称WFI)是ARMv8-A架构的一个特性,它通过禁用核心中的时钟来将核心置于低功耗状态,同时保持核心供电。这减少了核心在WFI低功耗状态下的静态泄漏功耗。
- 核心通过执行WFI指令进入WFI低功耗状态。
- 执行WFI指令时,核心等待核心中的所有指令退役后进入空闲或低功耗状态。WFI指令确保所有在程序顺序中WFI指令之前的显式内存访问都已退役。例如,WFI指令确保以下指令从L2内存系统中接收到所需的数据或响应:
- 加载(Load)指令。
- 缓存和TLB(Translation Lookaside Buffer,转换后备缓冲)维护操作。
- 存储独占(Store-Exclusive)指令。
- 此外,WFI指令确保存储(Store)指令更新缓存或已发送到L2内存系统。
- 核心在WFI低功耗状态下,当检测到以下任何事件时,核心中的时钟会暂时启用,但不会导致核心退出WFI低功耗状态:
- 必须由核心L1数据缓存服务的L2窥探请求。
- 必须由核心L1指令缓存、数据缓存、指令TLB、数据TLB或BTB服务的缓存、TLB或BTB维护操作。
- 通过APB(Advanced Peripheral Bus,高级外设总线)访问位于核心电源域中的调试或追踪寄存器。
- 核心在检测到重置或WFI唤醒事件时退出WFI低功耗状态。有关各种WFI唤醒事件的信息,请参阅ARM®架构参考手册ARMv8,了解ARMv8-A架构配置文件。
- 进入WFI低功耗状态时,该核心的STANDBYWFI被断言。即使由于L2窥探请求、缓存、TLB和BTB维护操作或APB访问,核心中的时钟暂时启用,STANDBYWFI也继续被断言。
核心等待事件(WFE) 等待事件(Wait for Event,简称WFE)是ARMv8-A架构的一个特性,它使用基于事件的锁定机制,通过禁用核心的时钟同时保持核心供电,将核心置于低功耗状态。当核心处于WFE低功耗状态时,这减少了静态泄漏电流的功耗。
核心通过执行WFE指令进入WFE低功耗状态。执行WFE指令时,核心等待核心中的所有指令完成后再进入空闲或低功耗状态。WFE指令确保所有在WFE指令之前的程序顺序中发生的显式内存访问都已完成。
当核心处于WFE低功耗状态时,如果检测到以下任何事件,核心的时钟会暂时启用,但不会导致核心退出WFE低功耗状态:
- 必须由核心L1数据缓存服务的L2窥探请求。
- 必须由核心L1指令缓存、数据缓存、指令TLB、数据TLB或BTB服务的缓存、TLB或BTB维护操作。
- 通过APB访问位于核心电源域中的调试或追踪寄存器。
核心在以下情况下退出WFE低功耗状态:
- 检测到重置。
- EVENTI输入信号被断言。
- CLREXMONREQ输入信号被断言。
- 发生WFE唤醒事件。有关各种WFE唤醒事件的信息,请参阅ARM®架构参考手册ARMv8,了解ARMv8-A架构配置文件。
进入WFE低功耗状态时,该核心的STANDBYWFE被断言。即使由于L2窥探请求、缓存、TLB和BTB维护操作或APB访问,核心中的时钟暂时启用,STANDBYWFE也继续被断言。
使用WFE和SEV指令的事件通信 EVENTI信号允许外部代理参与WFE和SEV事件通信。当此信号被断言时,它向处理器中的所有核心发送事件消息。这类似于在处理器中的一个核心上执行SEV指令。这使得外部代理可以向核心发出信号,表示它已释放信号量,核心可以离开WFE低功耗状态。EVENTI输入信号必须保持高电平至少一个CLK周期才能被核心看到。
外部代理可以通过检查EVENTO信号来确定处理器中至少有一个核心已执行SEV指令。当处理器中的任何核心执行SEV指令时,EVENTO信号被断言,表示向所有核心发出事件信号,并且EVENTO信号在任何核心执行SEV指令时保持高电平三个CLK周期。
CLREXMON请求和确认信号 CLREXMONREQ信号有一个对应的CLREXMONACK响应信号。这形成了一个标准的双线、四阶段握手,可用于核心和系统之间的电压和频率边界信号传递。
当CLREXMONREQ输入被断言时,它表示清除外部全局独占监视器,并对处理器中的所有核心作为WFE唤醒事件。
如果系统中不存在全局独占监视器,请将CLREXMONREQ输入连接到低电平。
L2 等待中断
当所有核心都处于 WFI 低功耗状态时,所有核心共有的共享 L2 内存系统逻辑也可以进入 WFI 低功耗状态。 只有满足特定要求并应用以下顺序时,才能进入 L2 WFI 低功耗状态:
- 所有核心都处于 WFI 低功耗状态,因此所有核心的 STANDBYWFI 输出都被断言。
- 当 ACP 存在且所有未完成的 ACP 请求都已完成时,SoC 断言 AINACTS 输入以使能ACP从接口进入空闲状态。断言 AINACTS 后,SoC 不得断言 ARVALIDS、AWVALIDS 或 WVALIDS。
- 如果处理器实现:
- ACE 接口:当所有未完成的窥探请求都已完成时,SoC 断言 ACINACTM 输入信号以使能 AXI 主动窥探接口进入空闲状态。这防止 L2 内存系统接受来自 AXI 主动窥探接口的任何新请求。断言 ACINACTM 后,SoC 不得断言 ACVALIDM。
- CHI 接口:当所有未完成的窥探请求都已完成时,SoC 断言 SINACT 输入信号,表示处理器已从一致性域中移除,不再接收任何更多的窥探。这触发 L2 停用 TX 和 RX 链接。当 TX 和 RX 链接分别处于其停止状态时,L2 内存系统不接受来自 CHI 接口的任何新请求。
- 当 L2 内存系统完成了 ACE 和 CHI 接口的未完成事务后,它就可以进入 L2 WFI 低功耗状态。进入 L2 WFI 低功耗状态时,断言 STANDBYWFIL2。STANDBYWFIL2 的断言保证了 L2 处于空闲状态,不接受任何新事务。
- 然后 SoC 可以选择取消断言处理器的 CLKEN 输入,以停止所有从 CLK 衍生出来的核心内剩余的内部时钟。共享 L2 内存系统逻辑、GIC 和定时器中的所有时钟都被禁用。
如果 CLKEN 被取消断言,SoC 必须在 WFI 唤醒事件上断言 CLKEN 输入,以使能 L2 内存系统和可能的核心。有两种类别的唤醒事件:
- 仅需要使能 L2 内存系统的事件。
- 需要同时使能 L2 内存和核心的事件。 以下唤醒事件导致 L2 内存系统和核心退出 WFI 低功耗状态:
- 物理 IRQ 或 FIQ 中断。
- 调试事件。
上电或温重启。 以下唤醒事件仅导致 L2 内存系统退出 WFI 低功耗状态:
- 如果设备配置为具有 ACE 接口,取消断言 ACINACTM 以服务 AXI 主动窥探接口上的外部窥探请求。
- 如果设备配置为具有 CHI 接口:
- 取消断言 SINACT 以服务外部窥探请求。
- 激活 TX 或 RX 链接。
- 如果 ACP 存在,取消断言 AINACTS 以服务从接口上的 ACP 事务。 当核心退出 WFI 低功耗状态时,该核心的 STANDBYWFI 被取消断言。当 L2 内存系统逻辑退出 WFI 低功耗状态时,STANDBYWFIL2 被取消断言。
L2硬件缓存刷新
处理器提供了一种有效的方式,在不需要唤醒核心通过软件执行清理和使无效操作的情况下,完全清理和使L2缓存无效,为关闭电源做准备。
使用L2硬件缓存刷新只能在满足特定要求并应用以下顺序时发生:
- 通过向CPU扩展控制寄存器的位[38]写入1,位[36:35]写入0来禁用L2预取。
- 通过向CPU辅助控制寄存器的位[56]写入1来禁用加载/存储硬件预取器。
- 执行ISB指令以确保CPU扩展控制寄存器和CPU辅助控制寄存器的写入操作完成。
- 执行DSB指令以确保所有先前预取请求的完成。
- 所有核心都处于WFI低功耗状态,因此所有核心的STANDBYWFI输出都被断言。
- 当ACP存在且所有未完成的ACP事务都已完成时,SoC断言AINACTS信号以使ACP空闲。这是必要的,以防止ACP事务在硬件缓存刷新发生时在L2缓存中分配新条目。断言AINACTS后,SoC不得断言ARVALIDS、AWVALIDS或WVALIDS。
- SoC现在可以断言L2FLUSHREQ输入信号。
- L2对L2缓存的每个集合和方式执行一系列内部清理和使无效操作。任何脏缓存行都使用WriteBack或WriteNoSnoop操作写回到系统中。如果L2配置了,干净的缓存行可以引起Evict或WriteEvict事务。
- 当L2完成清理和使无效序列时,它断言L2FLUSHDONE信号。SoC现在可以取消断言L2FLUSHREQ信号,然后L2取消断言L2FLUSHDONE。
- 当所有未完成的窥探事务完成后,SoC可以在ACE实现中断言ACINACTM信号,或在CHI实现中断言SINACT信号。作为响应,L2断言STANDBYWFIL2信号。
在L2FLUSHDONE信号被断言之前取消断言L2FLUSHREQ信号可以终止L2硬件缓存刷新。这导致L2中止硬件缓存刷新。当SoC不关闭核心并且必须快速唤醒核心时,可以使用此功能。