Vector Fabrics Vector Fabrics Blog RSS

Measuring Power Consumption of the OMAP4430 using the PandaBoard

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.

Power separation on the OMAP4430 chip

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_core: Supply voltage for the GPU and display functions
  • 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.

The created 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 VDD_CORE pins.

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

Measurement method

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.

Conclusion

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.

Posted in category: Market & Skills on Thursday, November 17, 2011 - 09:24

Comments

Very interesting entry. Is there a way to recover the
images from the article?

Thanks,


By Francisco Daniel Igual Peña on Monday, June 11, 2012 - 09:05

Dear Francisco: Could you elaborate on your question? What is your request, and what are you trying to achieve? Thanks,


By Marco Jacobs on Monday, June 11, 2012 - 09:11

Dear Marco,

The only issue with the article is that the two images
of the article cannot be loaded, so I cannot see them. We
are looking for an effective method to measure the power
consumption of the OMAP4 processor for double precision
scientific calculations (BLAS and LAPACK).

Thanks,

Fran


By Francisco Daniel Igual Peña on Monday, June 11, 2012 - 09:13

Hi Francisco,

We’ll send you the pictures over email, and take a look at why they’re not showing on your system.

Thanks,


By Marco Jacobs on Monday, June 11, 2012 - 09:28

Thanks. Anyway, I’m not sure that is only my problem, as
this is what I get if I click on the (non-visible) images:

Forbidden

You don’t have permission to access /images/uploads/blog/smps_schematic.gif on this server.

Apache Server at new.vectorfabrics.com Port 80


By Francisco Daniel Igual Peña on Monday, June 11, 2012 - 09:34

Hi,

nice work! I am wondering: how did you conclude that VDD_CORE drives the GPU? I can not find any description in the OMAP Manual about that. I would be very much interested in measuring the GPU’s power consumption.

Thanks,
Benedikt


By Benedikt Dietrich on Thursday, June 21, 2012 - 14:55

Hi Marco,

I also have the same problem with the pictures ..

btw, nice work
regards
Hamid


By Hamid Reza Poourshaghaghi on Monday, June 25, 2012 - 09:22

I also have one more question. Do you have any idea how it is possible to measure VDD_MPU power (current or dropping voltage) within the board by software (not with external devices e.g multi-meter or etc). (Maybe) Is it possible to measure it by GPADC? I am looking for a way to measure it by software and i would be very thankful if you share your idea with me.

Thanks in advance and best regards,
Hamid


By Hamid Reza Poourshaghaghi on Wednesday, June 27, 2012 - 12:06

Hi Hamid,
yes, good question: reading the actual power consumption in software is indeed desirable: It allows to obtain the power-level in synchronization with different application activities or OS modes. On-board AD converters are not directly sufficient, since the voltage drop across the current sensor (the inductor) is very small, and -more important- small in relation to the DC voltage offset to gnd. A relatively simple and reasonable low-cost alternative is to adopt a multimeter with a USB connection, and subsequently read the value through USB. I assume the multimeter would present itself as a serial device for which a device-driver would be readily available, but I did not yet try that experiment by myself.

Jos van Eijndhoven


By Jos van Eijndhoven on Wednesday, June 27, 2012 - 13:15

Dear Benedikt,
regarding the information on various on-chip modules and their power lines:

The OMAP4430 databook (as linked) shows a table 3-25 (page 325), listing modulenames attached to (belonging to) voltage domains.
In that list “VDD_CORE_L” contains among (many) others the SGX.
It also shows “VDD_MPU_L” to contain the CORTEXA9, and “VDD_IVA_L” to contain the DSP. [The name “SGX” is adopted in this manual for the PowerVR graphics engine, as shown in Chapter 11, page 2609.]

Table 3-24 (page 324) indicates that these 3 “VDD_*” powerdomains are attached to (controlled by) the PRCM module, controlling the external powersupply regulator.

The (also linked) pandaboard reference manual shows in section 2.4.1 (page 18) that the “VDD_MPU” pins are connected to the VCORE1 smps, “VDD_IVA” is connected to the VCORE2 smps, and the “VDD_CORE” pins are on the VCORE3 smps.

It is slightly a pity that the SGX shares its power with several other modules. However it does not seem difficult to create tests that do not modify/influence some of those other modules, and any major activity change in the SGX appears explicit (easy to observe) in the measurement as shown in the blog.

Regards,
Jos van Eijndhoven


By Jos van Eijndhoven on Wednesday, June 27, 2012 - 13:24

Hello,

Can we use a multimeter to directly measure the current and voltage drop across the inductors ? Or do we have to add some circuitry on the pandaboard to get these measurements ?

From the article what i see is that the power of only the A9s(using L18), IVA system(using L21) and the GPU(using L13) can be measured . The IVA consists of M3, DSP processors and other hardware accelerators. Is it possible to measure power consumption of the M3 processors on board separately from the DSP and other IVA accelerators ?

—Kiran


By Kiran on Wednesday, October 31, 2012 - 17:00

Yes, you can do all measurements with a standard multimeter. Mine had a DC voltage resolution of 0.1mV which was nice to have.

The OMAP chip has a limited number of power/voltage domains, and on the outside of the chip package we can only differentiate the power through a few different power pins. Which on-chip modules receive their power through which pins is somewhat of a puzzle, but table 3-25 in the section on power-managament layout has the most concrete info. I read there that the SGX and M3s share the same voltage domain, and therefor cannot be measured independently on the outside. In that case one can only try to write specific test software that activates these modules alternatively to verify their respective effect on power.


By Jos van Eijndhoven on Thursday, November 1, 2012 - 16:39

Hello Jos,

Thanks for your reply.

Could you also give some more details about how you measured the resistance of the inductors. I tried to measure L18 using a multimeter and failed. How do we send a known current through the inductors ?

We were also thinking of pulling out the inductor onto a breadboard and keeping an ammeter in series with the inductor and getting the current measurement which multiplied by the voltage should give the power. Will this be more accurate ?

—Kiran


By Kiran on Thursday, November 1, 2012 - 17:27

Hi Guys,

      Is there any current vs cycle relation in panda board to measure current required for user application. Guys, can you mention how you took the voltage drop because, due to small size of indicators, it seems very difficult to me to measure voltage drop using a multi-meter. Thanks in advance…


By Sreenath P V on Tuesday, November 6, 2012 - 08:44

Dear Kiran and Sreenath,
you asked how to actually perform these measurements, as connecting a multimeter to these tiny inductors is not easy…. indeed.
You would need two persons, one holding the multimeter and the other starting the software processes, clearly this is acceptable for a first couple of tests only.
For a more convenient and reliable setup, you would prefer to add a real connector to the Pandaboard that allows to properly hookup a multimeter. We just did something like that also for the newer pandaboard-ES, and I made some pictures of that to share here with you.

Please have a look at this Picasa site containing 4 photos with subscripts.

The actual wiring was done with a wiring pencil to provide the thin wires with lacquered isolation.

The added connector also allows for a more decent resistor measurement: You attach a multimeter to the connector to measure the voltage drop. Meanwhile you use another voltage source and external resistor to send a current through the onboard inductor, using probes to contact the inductor for which now the contact-resistance will not influence the measurement precision.

These are my resistance measurement results:
L22: 40 milli-ohm
L17: 39 milli-ohm
L15: 72 milli-ohm


By Jos van Eijndhoven on Monday, November 12, 2012 - 17:06

Hi,

nice article.

I’m planning to do the power measurements with a board that has an INA219 and a .1 ohm resistor as a shunt. Which of the following three scenario is best for the accuracy (I need to measure the power consumption of the memory in sleep mode):

1. leave both the .1 shunt along with the inductance (in parallel),
2. remove the .1 shunt and rely on the inductance,
3. remove the inductance and rely on the shunt?

In either case, I’ll measure the overall resistance afterwards.

Does removing the inductance from the board has a negative impact? AFAIK the inductance acts like a filter for EMI, so as long I’m not doing something fancy I should be ok—I forgot to mention that I want to measure the power consumption of VDD_MEM (i.e. for the memory).

Thanks,
Lucian


By Lucian Cojocar on Friday, January 25, 2013 - 18:40

dear Lucian,
following up on our email: your small INA219 board indeed seems a really nice option to implement dynamic power measurements! It would give less clutter and faster measurements in comparison with a (USB-connected and isolated) multi-meter. The current-sensing shunt resistor on this little board should be connected to the pads of the inductors that were pointed out in the article, with removal of these inductors from the Panda board. To avoid extra EMI problems you should try to do this with short wiring. Maybe it is an option to mount a series SMD inductor in the wiring between the boards. Success with this mod, and please announce here your results!


By Jos van Eijndhoven on Tuesday, January 29, 2013 - 11:11

After bricking one board, the hack was a success on a second board.

I’ve removed the ferrite beads from the PandaBoard ES and solder them on my board; basically the a ferrite bead is in series with my digital ammeter (INA219).

One thing that I’ve observed is that the output values varies with the temperature (approx. 1-2mW per degree)—I’m not sure if this is due to the shunt resistor (errors in measurements) or if the SMPS (TWL6030) is /more/ efficient at lower temperatures; anyways because I was interested in the difference of power between various workloads, it worked for me.

You can find the pictures [here](https://picasaweb.google.com/lh/photo/2T86_mygVoVb43v6VLIfR9MTjNZETYmyPJy0liipFm0?feat=directlink).


By Lucian Cojocar on Wednesday, March 20, 2013 - 10:14

Add comment

(required)
(required, will not be published)
(will not be published)
(will not be published)
Notify me of follow-up comments?

Please enter the word you see in the image below: