Energy consumption of XL216-series

Technical discussions around xCORE processors (e.g. General Purpose (L/G), xCORE-USB, xCORE-Analog, xCORE-XA).
ChrisDev
Member
Posts: 13
Joined: Tue Jan 31, 2017 8:45 am

Energy consumption of XL216-series

Postby ChrisDev » Wed Feb 01, 2017 11:56 am

Hi everybody,

I'd like to develop an low energy application using a xmos processor.
Currently I'm doing some tests with the XL216 Slice kit. The XL216 series seem to fit my requirements very well.
I was wondering if anybody could provide some information, about how much energy the XL216 processors consume and how applicable the values shown in the Application Note "Estimating Power Consumption For XS1-L Devices" are to this processor.

And maybe somebody might have some advice, how to do the hardware design properly to reach the lowest energy consumption. I found a link in a document, but sadly he's broken.


Greets,

Chris
User avatar
mon2
XCore Legend
Posts: 1836
Joined: Thu Jun 10, 2010 11:43 am

Postby mon2 » Wed Feb 01, 2017 12:51 pm

Hi Chris. Also noting that may old links are broken on the new website. Hope those links will get resolved in the near future.

A few general comments:

1) the current trend of the XMOS website is to review the datasheets for the power consumption of the respective device - the older checklist documents have been purged

2) the premise for the lowest power consumption is to quickly perform your task with your s/w and go to sleep mode till required to wake up and repeat

3) you are working with the XS-2 series (ie. XCORE-200 series) as compared to the older XS-1 series. The older processors consume less power than the XCORE-200 but the XCORE-200 offer additional features and instructions. In some cases, XCORE-200 series may be even lower cost than the older series.

Here is a 3rd party project (audio related that chats briefly about power with the XCORE-200 device):

http://www.dimdim.gr/tag/xcore-200/

Thread on the older devices:

http://www.xcore.com/viewtopic.php?f=7&t=480

In the end, your total power consumption will be driven by assorted factors including the number of active logical cores, how long the cores are active, external glue logic of your design.

The XMOS may not be the lowest powered solution as compared to others on the market but the other solutions cannot perform at the same level as XMOS devices.
henk
Respected Member
Posts: 346
Joined: Wed Jan 27, 2016 5:21 pm

Postby henk » Wed Feb 01, 2017 7:05 pm

Hi Chris,

As mon2 points out, xCORE200 is very different from XS1 from a power perspective. As it is a 2-tile die, its static power consumption is a bit higher if you just use a single tile. MIPS per mW is quite a bit better on xCORE200, because of dual issue and added memory goodness (double load, double store). It is notoriously difficult to give precise power numbers as they dramatically depend on the number of threads that are active, frequency that the core runs at, number of resources you use, and the data you operate on.

When you say low energy, roughly how many operations would you like to perform over which span of time, in what energy budget? For example - are you after burst processing (1,000,000 operations every second); or slow but steady processing (1,000 operations every ms) and how do you like to power it?

Cheers,
Henk
ChrisDev
Member
Posts: 13
Joined: Tue Jan 31, 2017 8:45 am

Postby ChrisDev » Thu Feb 02, 2017 12:11 pm

Thank both of you for your fast replies.

Exactly because of these differences between this two, I'm asking my questions.
The actual idea is to use the xmos' sleep feature to save energy, like mon2 mentioned to quickly perform the task and then go again to sleep mode and wait for an other event to occure.
But due to the slowness of the process we want to observe, depending on the different parameters we were thinking about if it might be a good idea to lower the tile frequency.

We plan to power the whole system by battery. We're yet not able to say exactly how many operations we will need for the whole application but roughly estimated something like (100 every 20ms and 500-1000 every 100 ms).
Ahh... and the batteries' capacity is about 500F @ 5V, in order to make a estimation about the systems' expected lifetime until a battery change is needed, i'm looking for this informations.
During some testing with the slice-card I measured an average power consumption of 465mW. With this amount our battery would last only a few hours, but out target is at least a week, but longer time span would be even better.

Cheers,
Chris
henk
Respected Member
Posts: 346
Joined: Wed Jan 27, 2016 5:21 pm

Postby henk » Thu Feb 02, 2017 3:57 pm

Hi Chris,

There is two ways you can do this with XMOS devices.

The XS1 series has two sorts of sleep features. All XS1 chips have a feature that lowers the clock frequency automatically when the processor goes idle; this takes the power consumption down to, say, 10 mW, and can restart instantaneously. The XS1-A and U series of chips also have a deep-sleep mode where the processor powers down to 10-100 micro watts, rebooting when a pin goes high or an internal timer expires.

xCORE200 allows you to manually reduce the clock frequency (including the PLL frequency), lowering the power consumption to, say, 20 mW; or you can switch the power supplies off, and reboot when you need it.

Switching the chip off and rebooting is less dramatic than it sounds; depending on the program size you can boot in tens of microseconds or milliseconds; programs of the size you are describing could be stored entirely in OTP if you wanted to, which will load in no time. Or you can store them in QSPI flash and still load them in less than a millisecond. This would reduce average power consumption by one to two orders of magnitude; being on for 0.1-0.5 ms out of every 20 ms: a duty cycle of 0.5-2.5%.

The downside is that the power supply must be able to provide a burst of 250 mW or so, and that you need some external circuit that knows when the chip needs to be switched on.

In all cases - keep the chip on the low side of the allowed voltage supply: 0.95V rather than 1.0 has a sizeable impact on the power consumption.

Cheers,
Henk
ChrisDev
Member
Posts: 13
Joined: Tue Jan 31, 2017 8:45 am

Postby ChrisDev » Tue Feb 07, 2017 9:17 am

Hi henk,

Your explanation brought a lot of light into the dark.
But I've still some questions, please correct me if i'm wrong, but is the XS1 series still available? And if yes, for how long is it going to stay available? Because there a very few information about the XS1 series on the xmos website, at least in the available microcontroller area.

My second question is, are there any example applications using a manually programmed sleep mode with a xCore200?
Swichting it off might be also a well working option, but I'd prefer to test diverse options to select the best fitting.

Greets,
Chris
henk
Respected Member
Posts: 346
Joined: Wed Jan 27, 2016 5:21 pm

Postby henk » Tue Feb 07, 2017 9:43 am

Hi Chris,

The XS1 is available and used by many in new designs; it has complementary features to XS2 (such as a lower static power envelop, sleep modes, lower cost if you don't need USB, etc), and there is no reason to discontinue it.

Manual sleep mode on the XCORE200 is exactly the same as in XS1 - you set the processor divider value up (in the switch), after that you enable the processor divider (in the processor status register). The only thing that has changed is the automatic transition between the two.

Changing the PLL it a bit more involved; you can write a new PLL value every few microseconds reducing the PLL frequency by (from memory) no more than 10% at a time.

Cheers,
Henk
ChrisDev
Member
Posts: 13
Joined: Tue Jan 31, 2017 8:45 am

Postby ChrisDev » Wed Feb 08, 2017 9:50 am

Hi henk,

Yesterday I rummaged a bit trough the XL216 datasheet, in order to understand how to modify the the divider and the divider enable.
But when I tried to set the enable a problem occured.
xrun: Program received signal ET_ILLEGAL_PS, Access to invalid processor state.
[Switching to tile[1] core[0]]
adc (I2C=<value optimized out>) at ../src/main.xc:94

94 setps(0x02,new_ps);

Code: Select all

	int mask_autoen = 16;  //= 0000.0000.0001.0000
    		int ps=0;
    
        	ps=getps(0x02);
    		int new_ps = ps|mask_autoen;
    		setps(0x02,new_ps);
    
Is there anything I'm doing wrong? Also tried the values 8 and 0, but they didn't work either.
Or may it be better to use some of the commands like "int write_node_config_reg(tileref tile, unsigned reg, unsigned data)" ? My actual problem that i didn't knew the alias address Bit 5 or 4 of the xCore Tile Control Reg.
henk
Respected Member
Posts: 346
Joined: Wed Jan 27, 2016 5:21 pm

Postby henk » Wed Feb 08, 2017 10:41 am

Hi Chris,

You need to use 0x020b for the address; I made a not to update the start of appendix B of the datasheet.

Cheers,
Henk
ChrisDev
Member
Posts: 13
Joined: Tue Jan 31, 2017 8:45 am

Postby ChrisDev » Fri Feb 10, 2017 10:18 am

Hi,

Thanks for your advice henk, with the correct address everything worked pretty good.

But I've got an additional question. ;-)

I already did some more or less successful testing, with the sleep mode on my sliceKit and got some inspiration from the "xCORE-200 Clock Frequency Control"- doc.
In this doc is also mentioned the option to reduce the Switch Speed, as the XL216 is a dual tile device does it effect the performance if the final program has to be run on both tiles at the same time? Or am I just mixing things up?
Because reducing has a way bigger impact on the energy consumption than just using the sleep mode. ( Switch frequency reduces about 40mW and sleep mode about 10mW @ 450mW unmodified consumption )

Greets,
Chris

Who is online

Users browsing this forum: No registered users and 2 guests