Xilinx 电源管理库 (XilPM)介绍及使用

AMD-Xilinx MPSoC 和 Versal ACAP 系列均具有复杂的内部电源结构,其中包括全功率域 (FPD) 、低功耗域 (LPD) 、单个处理器电源域、外设等节点以及存储器电源域。

5dc758eac03e241477d616c8864d92e3.png

这些域可以通过通、断电,优化整个解决方案的功耗。并且允许在运行时进行动态电源管理,为当前用例实现最低功耗。在 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即可。

1e744973a0e985686f225a6d9bb0ccda.png 4b3ea53300ed24cc13feca180bd192c4.png

如果我们需要对 PMU 固件进行更改确保调试可见性,可以使用多个标志指示。这些在Zynq UltraScale+ MPSoC 软件开发人员指南 UG1137 的第 139 页上进行了定义,并且可以作为符号添加到 PMU 固件的 C/C++ 设置中。

739ea54e48ed60fbfc15bcb45b2fa215.png

构建 PMU 固件后,我们需要在板支持设置中启用 XilPM 库。

fbf891ed02c0ce6dc1336f87b4099584.png

在我们的应用程序 BSP 中启用该库时就允许应用程序与 PMU 及其电源管理软件进行通信。运行该软件使我们能够观察电源域和岛的状态,并根据需要关闭和打开域/岛的电源。API 调用的完整列表在UG643中的操作系统和库文档集中有详细说明。

https://docs.xilinx.com/r/en-US/oslib_rm/BSP-and-Libraries-Overview

对于这个简单的示例,创建一个应用程序,该应用程序将循环检查所有电源岛和域,并输出节点状态报告。

以下是上面使用的术语的一些定义

  • 要求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)进行到节点的映射。

ae3009d2bdf449219a7bca099c1907c6.png

在加载 PMU 固件时,配置内存有两个选项。

  • 引导 ROM 加载 – 在这种情况下,PMU 由引导 ROM 加载并在 FSBL 之前开始运行。由于设备 IO 尚未配置,因此不会有终端输出。但是,如果未找到 PMU 固件,FSBL 将报告警告。

  • 由 FSBL 加载 - 在这种情况下,FSBL 加载 PMU 固件,然后 PMU 将能够输出其版本等。

这些选择引导 ROM 或 FSBL 加载由引导文件创建(bif 文件)中 PMU elf 的标记方式控制。如果 PMU elf 分区被定义为发往 PMU 的数据文件,它将由 FSBL 加载。

a05dfc85cdfbc75be303e79bc37e44e5.png

如果我们将分区类型设置为由引导ROM加载的PMU,它将由引导ROM加载。

5318726b564405452ef45d5035188835.png

如果我们想要调试应用程序,我们首先需要确保 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 就介绍到这里,后续我们会更详细的介绍其功能。

cb3ac36ff82c14cbfbbea1a1253ed2cb.jpeg

猜你喜欢

转载自blog.csdn.net/Pieces_thinking/article/details/132506746
今日推荐