Recently, I performed a series of power measurements on Texas Instrument’s OMAP4430 mobile SoC. The aim of this experiment was to confirm that we can perform such energy consumption measurements with sufficient accuracy for software source-code optimization. The software parallelization tools of Vector Fabrics can be used to lower power consumption, and measurements like these are needed to verify our results. Furthermore, it was my goal to evaluate speed/power trade offs in re-mapping a compute kernel from the multi-core ARM Cortex-A9 host processor onto the PowerVR SGX graphics processing unit.
There’s an article available that describes power measurement results for the PandaBoard, however, they only measure the power on the global +5V power-supply board connector. This approach lacks the detail to differentiate which chip consumes the power, and which core within the OMAP4430 chip. In this article I will describe how you can measure the power consumption of the OMAP4430 on the Pandaboard with sufficient accuracy to support software source-code optimizations, and get more insight into the power consumption of the different cores.
The OMAP chip has multiple power pins on its package, intended to perform detailed power control (voltage and frequency adjustments), tuned to application or use-case requirements. In particular, I am interested in the power consumed through these pins:
vdda_dpll_mpu: Supply voltage for the ARM cortex core
vdda_dpll_iva: Supply voltage for various audio/video modules and the DSP
More information on the architecture can be found in the OMAP4430 data book.
In the PandaBoard reference manual you can see that the power for these pins is provided by a dedicated TWL6030 power regulator IC. The diagram below shows the key parts of the schematics around this IC.
VDD_VCORE1 wire in above caption connects to the
OMAP VDD_MPU pins, the
VDD_CORE2 connects to the
VDD_IVA pins, and finally the
VDD_CORE3 connects to the
To analyze the power consumption, we measure the voltage on and current through the inductors L18, L21 and L13, using their ohmic internal resistance, ignoring their inductance. So measuring their current is done by measuring their DC voltage drop, as well as their DC resistance. Note that the amount of AC voltage on these inductors is expected to be low. (You cannot measure the DC voltage drop on L17, L19, L14 as easily, since those DC voltages are swamped in highly disturbing AC voltages.) I am primarily interested in L18 for the
VDD_MPU power which flows into the ARM Cortex-A9, and in L13 for the
VDD_CORE power which drives the PowerVR SGX540 core.
On the PandaBoard, these two inductors can be located according to the picture on the right, highlighted with red and orange
According to the datasheets of these inductors, the (larger) L18 should have a resistance of < 0.05 Ohm. We measured its value at 0.041 Ohm. The (smaller) L13 should have a resistance of < 0.09 Ohm, which we measured at 0.075 Ohm. Note that it is not easy to accurately measure such low values: we did so by sending a known DC current through these inductors while the board was switched off, and measure their voltage drop. The accuracy of these resistance values dominates the overall accuracy of this power measurement scheme.
The SMPS input voltage (
Vbat in the schematic capture) was measured to be 4.2 Volt. When running applications, the DC voltage drop across these inductors (
Vdrop) is measured in the range of 3mVolt to 14mVolt. The resulting power consumption is now expressed as P = Vbat x Vdrop(Lxx) / R(Lxx). Note that this power value now includes the power losses of the TWL6030 converter. You might compensate for those losses with an efficiency derating that I estimate at roughly 90%. However, in my opinion, it is more fair to keep these power conversion losses included in the application power figures. All measurements were done using just a standard multi-meter.
The resulting power consumption has an estimated accuracy of 10%. Note that the power measured on these interfaces measure the on-chip core (processor) components. The power consumed in for instance the DDR interface drivers is not yet in here: those appear on different power-supply pins.
With these measurements you can determine the power in the OMAP4430 ARM and SGX domains independent from each other, ranging roughly from 0.1W to 1W depending on the use-case, where a resolution of 10mW is easily obtained. The measurements give direct and quantitative feedback on the effects of application source code transformations and operating system idle power. This enables the calibration and verification of a model for application-software power consumption.
If you are planning to repeat this power measurement method with your own Pandaboard and software, obtain additional results, please keep me posted, I will be happy to learn from you! Obviously, this includes ideas on program source-code transformations that lead to power savings.