AMD-Xilinx MPSoC 和 Versal ACAP 系列均具有复杂的内部电源结构,其中包括全功率域 (FPD) 、低功耗域 (LPD) 、单个处理器电源域、外设等节点以及存储器电源域。
这些域可以通过通、断电,优化整个解决方案的功耗。并且允许在运行时进行动态电源管理,为当前用例实现最低功耗。在 MPSoC 和 Versal 器件中,系统电源管理均由专用 MicroBlaze 处理器控制。它由 MPSoC 器件中的平台管理单元 (PMU) 和 Versal 器件中的平台管理控制器 (PMC) 执行。
PMU 在 MPSoC 的运行中扮演着多种角色。这些角色可以概括为平台管理:
在引导期间执行初始化。此过程使用 Sysmon 检查电源、初始化 PLL、运行内置测试并在释放 CSU 之前检查错误。
在操作期间执行电源管理。PMU 可以关闭电源域或单个电源岛或进入深度睡眠模式。一旦进入深度睡眠模式,PMU 也会暂停。只有 PMU 可以接收唤醒触发信号。
监视系统的错误,并能够通过专用 MIO 上的 PS_ERROR_STATUS 引脚在内部和外部报告这些错误。
为功能安全应用程序可能需要的更高级别的系统管理提供支持。例如,用户可以上传自己的更高级的PMU软件来运行软件测试库(STL)。
电源管理角色很有趣,因为处理器中断允许 APU、RPU 或 PL MicroBlaze 等电源主设备管理电源从设备。
首先,我们需要创建 PMU 固件,该固件是在 Vitis 中的新应用程序向导中针对 PMU 处理器创建的。框图非常简单,只使用 PS即可。
如果我们需要对 PMU 固件进行更改确保调试可见性,可以使用多个标志指示。这些在Zynq UltraScale+ MPSoC 软件开发人员指南 UG1137 的第 139 页上进行了定义,并且可以作为符号添加到 PMU 固件的 C/C++ 设置中。
构建 PMU 固件后,我们需要在板支持设置中启用 XilPM 库。
在我们的应用程序 BSP 中启用该库时就允许应用程序与 PMU 及其电源管理软件进行通信。运行该软件使我们能够观察电源域和岛的状态,并根据需要关闭和打开域/岛的电源。API 调用的完整列表在UG643中的操作系统和库文档集中有详细说明。
对于这个简单的示例,创建一个应用程序,该应用程序将循环检查所有电源岛和域,并输出节点状态报告。
以下是上面使用的术语的一些定义
要求Requirements – 这些是每个节点的特定要求,并且对于每个节点/岛/域来说都是不同的。
状态Status - 显示岛、域或节点的状态。对于 CPU 节点,显示 CPU 状态为 CPU OFF(0)、CPU Active (1)、CPU Sleep (2) 或 CPU suspending (3)。对于电源岛,它只是位于打开 (1) 或关闭 (0) 的岛。节点有三种状态:开 (1)、关 (0) 和保留 (2)。
使用情况Usage – 节点当前未使用(0),由调用者独占使用(1),节点被其他权力使用
该应用程序查看 Zynq MPSoC 中的所有 70 个电源岛、节点和域,并通过XilPM 客户端的源代码pm_defs.h(https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_services/xilpm/src/zynqmp/client/common/pm_defs.h)进行到节点的映射。
在加载 PMU 固件时,配置内存有两个选项。
引导 ROM 加载 – 在这种情况下,PMU 由引导 ROM 加载并在 FSBL 之前开始运行。由于设备 IO 尚未配置,因此不会有终端输出。但是,如果未找到 PMU 固件,FSBL 将报告警告。
由 FSBL 加载 - 在这种情况下,FSBL 加载 PMU 固件,然后 PMU 将能够输出其版本等。
这些选择引导 ROM 或 FSBL 加载由引导文件创建(bif 文件)中 PMU elf 的标记方式控制。如果 PMU elf 分区被定义为发往 PMU 的数据文件,它将由 FSBL 加载。
如果我们将分区类型设置为由引导ROM加载的PMU,它将由引导ROM加载。
如果我们想要调试应用程序,我们首先需要确保 PMU 在 FSBL 等之前加载并运行。这是因为如果不删除安全门,PU MicroBlaze 在 XSDB 中不可见。
为此,我们可以使用 XSCT 并创建一个简单的 TCL 脚本,如下所示。请注意,需要在应用程序中编辑软件的名称和路径。
#Disable Security gates to view PMU MB target targets -set -filter {name =~ "PSU"} mwr 0xffca0038 0x1ff after 500 #Load and run PMU FW targets -set -filter {name =~ "MicroBlaze PMU"} dow xpfw.elf con after 500 #Reset A53, load and run FSBL targets -set -filter {name =~ "Cortex-A53 #0"} rst -processor dow fsbl_a53.elf con #Give FSBL time to run after 5000 stop
今天关于 PMU 就介绍到这里。
审核编辑:刘清
评论
查看更多