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:
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.
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.
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:
- www.arm.com
- The Definitive Guide to the ARM Cortex-M3, Joseph Yiu (Author) Second Edition ISBN-10: 185617963X | ISBN-13: 978-1856179638 Segunda Edição
- Applications Development on the ARM® Cortex™-M0+, Rafael Charro - ARROWAR
- Texas Instruments Benchmarking MCU power consumption for ultra-low-power applications
- www.ti.com - MSP430 com FeRAM
- www.renesas.com - Implementing Ultra-Low-Power Design Techniques in RX100 MCU-based applications
- Livro Computers as Components, Third Edition: Principles of Embedded Computing System Design (The Morgan Kaufmann Series in Computer Architecture and Design) ISBN-10: 0123884365 ISBN-13: 978-0123884367 Terceira Edição
- www.freescale.com - Kinetis L Series
- www.nxp.com - LPC800
- http://www2.dc.ufscar.br/~saito/download/arquitetura-pos/aula03-pipeline.ppt
- The Anatomy of the ARM Cortex-M0+ Processor - Joseph Yiu
Agradecimentos
- Dipu Ghosh, professor do curso da Universidade da California, Irvine - Embedded Systems Design Using ARM Technology. Ele me ensinou como o que são os "branch shadows" do ARM7.
- Yoshinori Kanno - trabalha atualmente na Avnet e trabalhou na NXP por diversos anos.
- O pessoal da Freescale Brasil, em especial Fabiano Costa, que trabalha atualmente na Freescale Brasil, e está lá desde 2002, Paulo Knirsch Marketing da Freescale USA, e Denis Shimizu, atualmente atuando como FAE.
- Francesco Sacco pelas conversas que sempre são esclarecedoras.
- Keren Dantas, pelo exemplo da lavanderia
- Henrique Rossi, pelos livros e conhecimento compartilhado
- Euripedes Rocha Filho, que revisou e sugeriu alterações.
Nenhum comentário:
Postar um comentário