This guide covers techniques that can be applied to achieve low power consumption on Zynq UltraScale+ MPSoC based systems. All the phases of design are considered and techniques corresponding to each phase are discussed with appropriate references wherever applicable. Examples demonstrating most of the techniques are attached for users to try out and serve as references.
Selecting a device of right capacity and speed grade can help minimize both static and dynamic power consumed by a device.
Static power is directly proportional to device capacity. Programable Logic is the main consumer of power on a ZU+ device. There are different device variants available with variable PL capacity. So, selecting a device with minimal capacity that can fit the application is critical to minimizing the power consumed by PL.
For example, XCZU19EG device consumes 850mW more than a XCZU2EG device in static power.
ZU+ devices are available in speed-grades that can work with the PL at lower voltages of 0.72V when compared to the nominal 0.85V devices. As discussed earlier, operating at a lower voltage helps in reducing both static and dynamic power consumption significantly. So, for applications having stringent power goals, these low power variants need to be considered.
For example, on a ZU7EV device, using a -2L device instead of a -2 device, and bringing down PL voltage to 0.72V, can save around 20% of total power consumption.
An optimized schematic design can sometimes save 15% more power by enabling a low power standby state, or by allowing a more aggressive PL Power Management design.
Impact of Capacitance on PL Power Management
PL Power Management includes simultaneously turning off/on the clocks for a clock domain. Please model this effect and increase the capacitance on VCCINT if required. Capacitors and switching loads are discussed in ug583 - UltraScale Architecture PCB Design User Guide, PCB Decoupling Capacitors.
GPIOs for PL Power Management Control
PL Power Management includes GPIO controls to clock managers so the PL clock domains can be frequency scaled or turned off. These are typically controlled externally to the PL by EMIO, AXI, or I2C. But they can also be controlled internally to the PL. Though the GPIOs are internal, the resources need to be reserved during the schematic design.
Vivado Design Phase
Once the board design is finalized and the actual development of platform starts in Vivado, there are several techniques that can be applied to lower the power consumption. Vivado design is split into PS and PL design phases and corresponding techniques are provided.
PS Design Optimizations
The PS side of the design optimizations to save power involves disabling unused blocks, optimizing clocks, DDR configurations, etc. The PS has power islands which can be power gated to eliminate static power consumed by that island. Power gating is handled by the PM framework automatically at runtime. See Linux Power Management section for details on runtime PM. The PM framework depends on the configuration specified in Vivado to power down unused blocks. So it is essential to properly specify which blocks are used/unused to get the power savings. It is typical to be able to save 20% of the PS power this way. Here is a list of techniques that can be applied to PS configuration:
For PL Designs, different implementation options are presented by Vivado including Optimization for Power. For designs targeting low power, this setting needs to be selected. It is typical to be able to save up to 30% of the PL power this way, depending on the design contents. Here is a snapshot of the selection in “Implementation Settings” dialog.
More detailed instructions are covered by these guides provide by Xilinx:
To enable runtime power management, there are several techniques that need to be employed in defining controls for clocks and power modes of PL IPs. These techniques are explained in detail on this page: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1433960485 . It is typical to be able to save 40% of the PL power this way.
Software Build & Runtime
The software stack used for each application may vary depending on the use-case. Xilinx supports runtime power management for Linux and bare-metal applications. All required drivers and libraries are available from Xilinx. Using these runtime PM features in software is critical to achieving lower power consumption. There is an example which demonstrates the typical power states that can be achieved using Xilinx provided software stack here: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1078460507
For applications using XilPM standalone library, refer to UG1199 for detailed guidance on using XilPM for power management.
Custom Software Stack
For applications which use a custom software stack which cannot leverage Xilinx provided power management framework or not interested in active runtime power management, but still looking for an efficient low power design, here are a few techniques that might be useful: