This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Variation in the current consumption due to memory address and offset value?

Hello to all,

 

I am trying to figure out the variation in current consumption as well as in clock cycles due to different memory regions and different offsets. During various experiments, I have found the following results:

 

LDR R4,[R1,#0x0]  (R1 = 0x00000000 (Flash) with 0 offset)  :   Current = 2.60mAmps & Cycles = 2

LDR R4,[R1,#0x1]  (R1 = 0x00000000 (Flash) with 1 offset)  :   Current = 2.07mAmps & Cycles = 4

LDR R4,[R1,#0x2]  (R1 = 0x00000000 (Flash) with 2 offset)  :   Current = 2.30mAmps & Cycles = 3

LDR R4,[R1,#0x3]  (R1 = 0x00000000 (Flash) with 3 offset)  :   Current = 2.08mAmps & Cycles = 4

 

from offset 4 it repeats the order. I mean Offset = 4 is equal to Offset = 0 ; Offset = 5 is equal to Offset = 1 ; Offset = 6 is equal to Offset = 2 ; Offset = 7 is equal to Offset = 3 ; Offset = 8 is equal to Offset = 0  and so on.... 

 

Similarly, while access SRAMX also :

 

LDR R4,[R1,#0x0]  (R1 = 0x04000000 (Flash) with 0 offset)  :   Current = 2.88mAmps & Cycles = 1

LDR R4,[R1,#0x1]  (R1 = 0x04000000 (Flash) with 1 offset)  :   Current = 2.30mAmps & Cycles = 3

LDR R4,[R1,#0x2]  (R1 = 0x04000000 (Flash) with 2 offset)  :   Current = 2.65mAmps & Cycles = 2

LDR R4,[R1,#0x3]  (R1 = 0x04000000 (Flash) with 3 offset)  :   Current = 2.29mAmps & Cycles = 3

 

from offset 4 it repeats the order. I mean Offset = 4 is equal to Offset = 0 ; Offset = 5 is equal to Offset = 1 ; Offset = 6 is equal to Offset = 2 ; Offset = 7 is equal to Offset = 3 ; Offset = 8 is equal to Offset = 0  and so on.... 

 

 

On the basis of observation, I have three questions:

  1. Why different offset value, results into different current consumption?
  2. Why offset value 4 shows the same result as offset 0 and so on?
  3. What is the reason for current variations, while accessing different memory regions?

 

Kindly help me out with this. I am using LPCXpresso 54114  board, with ARM Cortex-M4 processor. And all the measurement have been taken at 12MHz.

 

Thanking you,

 

Regards,

Himanshu

Parents
  • The bus interface on Cortex-M4 is based on AHB Lite, and this protocol doesn't support unaligned transfers. So when you have an unaligned transfer, the bus interface break this up into multiple aligned transfers. As a result:

    LDR R4,[R1,#0x0] - This need one 32-bit transfer, 4 byte lane active

    LDR R4,[R1,#0x1] - This need three transfers:

    - 1) 0x04000001 - byte size, 1 byte lane active

    - 2) 0x04000002 - halfword size, 2 byte lane active

    - 3) 0x04000004 - byte size, 1 byte lane active

    LDR R4,[R1,#0x2] - This need two transfers:

    - 1) 0x04000002 - halfword size, 2 byte lane active

    - 2) 0x04000004 - halfword size, 2 byte lane active

    When offset is 4, the word access is aligned again, so only take one transfer.

    So the number of clock cycles need for the transfer depends on the address offset, and the power depends on how many byte lane in the memory is active.

    The variation of the power when accessing different memory region:

    - when you use flash address for the test: only the flash memory macro is active, SRAM is idle, so take less power

    - when you use data SRAM address for the test: both the flash memory macro and SRAM are used at the same time (Note: instruction fetch and data access can happen concurrently, so it has one fewer clock cycle).

    regards,

    Joseph

Reply
  • The bus interface on Cortex-M4 is based on AHB Lite, and this protocol doesn't support unaligned transfers. So when you have an unaligned transfer, the bus interface break this up into multiple aligned transfers. As a result:

    LDR R4,[R1,#0x0] - This need one 32-bit transfer, 4 byte lane active

    LDR R4,[R1,#0x1] - This need three transfers:

    - 1) 0x04000001 - byte size, 1 byte lane active

    - 2) 0x04000002 - halfword size, 2 byte lane active

    - 3) 0x04000004 - byte size, 1 byte lane active

    LDR R4,[R1,#0x2] - This need two transfers:

    - 1) 0x04000002 - halfword size, 2 byte lane active

    - 2) 0x04000004 - halfword size, 2 byte lane active

    When offset is 4, the word access is aligned again, so only take one transfer.

    So the number of clock cycles need for the transfer depends on the address offset, and the power depends on how many byte lane in the memory is active.

    The variation of the power when accessing different memory region:

    - when you use flash address for the test: only the flash memory macro is active, SRAM is idle, so take less power

    - when you use data SRAM address for the test: both the flash memory macro and SRAM are used at the same time (Note: instruction fetch and data access can happen concurrently, so it has one fewer clock cycle).

    regards,

    Joseph

Children