segunda-feira, 19 de agosto de 2013

Por que a arquitetura ARM Cortex M0+ consome menos energia que o Cortex M0?

   Os processadores Cortex M0 já possuem em sua arquitetura um gerenciamento de energia que preve estados de baixo consumo: sleep ( que para o clock do processador ) e deep sleep ( que interrompe o clock do sistema todo e desliga a memória flash e o PLL, que trabalha com o cristal externo ). Essas características foram pensadas para que, quando o processador não estivesse ocupado, pudesse aguardar até a próxima tarefa em um estado mais economico de energia.

   Ele também já preve um periférico opcional chamado de WIC ( Wakeup Interrupt Controller ), que permite que o processador acorde de um estado deep sleep através de uma interrupção de hardware ( por exemplo por um byte chegando pela serial USART, I2C ou SPI ou mesmo uma entrada sendo sensibilizada ou uma combinação de entradas ).

   Essas características e o número de diferentes estados de baixo consumo mudam conforme o fabricante do microcontrolador escolhido.

   Mas como a ARM pensou em diminuir o consumo de seus processadores Cortex M0+ ainda mais, em relação ao Cortex M0?

   Uma das razões pelas quais o consumo é alto em um microcontrolador é, certamente, o número de acessos a Flash, seja pra escrita ou pra leitura. Por isso, em diversas famílias de microcontroladores, observamos a utilização de tecnologia de memória diferentes da tradicional NAND FLASH. A Texas Instruments utiliza em alguns microcontroladores MSP430 a tecnologia FRAM ( Ferroelectric Random Access Memory ) que demanda baixa energia em suas operações. A Renesas, por outro lado, optou por utilizar uma tecnologia de NAND Flash batizada como MONOS ( metal oxide nitride oxide silicon ), com tecnologia 40 nm ( e, na verdade essa que é a novidade. A tecnologia MONOS já vem sendo utilizada a mais de 20 anos em seus microcontroladores ). Um CI construido com tecnologia de 40 nm. permite um consumo ainda menor devido a menor corrente de fuga ( aspectos construtivos do silício ), além de um mais alto clock - isso fica pra outro artigo.

   A ARM, sabendo disso, diminuiu o número de estágios de pipeline de 3, do Cortex M0, para 2, no Cortex M0+. E vocês vão ver como isso funcionou para que o número de acessos a memória diminuisse.

   Primeiro vou falar um pouco sobre o que é PIPELINE. 

   Talvez a melhor forma de entender um pipeline seja pensar numa lavanderia. Vejam a apresentação de um curso da UFSCAR, do slide 3 ao 6. Os três estágios de lavagem de um monte de roupas diferentes podem ser divididos em lavar, secar e passar, nessa ordem. E isso pode ser feito em paralelo, quando há muito roupa pra lavar.

   Bom, voltemos ao mundo das CPUs modernas... Elas são projetadas para executarem diversas instruções em paralelo (manter um pipeline). Esse forma de processamento em paralelo aumenta muito a eficiência da CPU, a mantendo a maior parte do tempo ocupada.
Algumas sequências de instruções podem interromper o fluxo de informações do pipeline e, pelo menos por um curto período de tempo, diminuir a ocupação da CPU.

   Os microcontroladores ARM Cortex M0, M3 e ARM7 são compostos por três estágios de pipeline: 

  • FETCH ( Acesso a memória )
  • DECODE ( Decodificação ) 
  • EXECUTE ( Execução ). 

   A explicação de cada um dos estágios pode ser visto na figura. Nela está apresentada as posições das instruções por ciclo de clock. O progresso pode ser observado se seguirmos a linha horizontal do tempo.



   Cada uma das operações apresentadas na figura requer um ciclo de clock para instruções de processamento de dados. Então, uma instrução desse tipo leva 3 ciclos para terminar a execução. Esse tempo é conhecido como a latência de execução de uma instrução. Com o pipeline cheio, cada instrução é completada a cada ciclo de clock. As máquinas RISC já são projetadas para manter o pipeline cheio ( ou ocupado, como preferirem ). Ou seja, podemos dizer que o pipeline tem um rendimento de uma instrução por ciclo, se considerarmos instruções de processamento de dados.

   Como dito anteriormente, no Cortex M0+ há apenas 2 estágios de pipeline:


  • FETCH+PRE-DECODE ( Acesso a memória + começo da decodificação )
  • DECODE+EXECUTION ( fim da decodificação + Execução )





   O exemplo anterior funciona para instruções de Processamento de Dados.

   As instruções desse tipo para o ARM CORTEX M0+ estão a seguir e podem ser encontradas no site da ARM.





   Diminuindo o número de estágios de pipeline, o número de acessos a flash e a ROM é diminuido. Além disso a sombra de buscas ( branch shadows ) é reduzida de 2 para 1 ciclo de clock. No primeiro slide abaixo mostro os 2 ciclos de clock que são perdidos quando uma instrução branch é executada.




   Neste próximo slide mostro que apenas 1 ciclo de clock é perdido quando uma instrução branch é executada.



   Mostro abaixo, de outra forma, o "branch shadow" para as arquiteturas ARM CORTEX M0, M3 e M0+.


As instruções de branch da arquitetura Cortex M0+ estão apresentadas abaixo:



   Outra característica modificada nesta arquitetura, que possibilitava um consumo menor de energia, foi o controle de consumo dos componentes do sistema. Isso foi otimizado.

   O Processador Cortex M0+ também implementa uma caracteristica que possibilita aumentar a velocidade de acesso aos i/os, em um único ciclo e em alta velocidade. Essa caracteristica é mapeada em memória e suporta todas as instruções de acesso a memória. No entanto, essa característica não suporta execução de código (apenas operações de load e store).

   Execuções mais rápidas do código permitem que o processador rode a uma frequência mais baixa ou que o tempo que o processador passe em sleep mode aumente. Essas duas ações fazem com que o consumo seja minimizado.

Referências:


  1. www.arm.com
  2. The Definitive Guide to the ARM Cortex-M3, Joseph Yiu Second Edition  185617963X  978-1856179638 Segunda Edição
  3. Applications Development on the ARM® Cortex™-M0+, Rafael Charro - ARROWAR
  4. Texas Instruments Benchmarking MCU power consumption for ultra-low-power applications
  5. www.ti.com - MSP430 com FeRAM
  6. www.renesas.com - Implementing Ultra-Low-Power Design Techniques in RX100 MCU-based applications
  7. Livro Computers as Components, Third Edition: Principles of Embedded Computing System Design (The Morgan Kaufmann Series in Computer Architecture and Design)  0123884365  978-0123884367 Terceira Edição
  8. www.freescale.com - Kinetis L Series 
  9. www.nxp.com - LPC800
  10. http://www2.dc.ufscar.br/~saito/download/arquitetura-pos/aula03-pipeline.ppt
  11. The Anatomy of the ARM Cortex-M0+ Processor - Joseph Yiu
Agradecimentos



Nenhum comentário:

Postar um comentário