Como um Cortex M0 se compara aos controladores de 8 bits?

10

Este documento cita 60 DMIPS / mW para um Cortex M0, contra 31 DMIPS / mW para um M3. (O último não concorda com os números deste documento , que citam 1,25 DMIPS / MHz e 0,19 mW / MHz, fornecendo 6,6 DMIPS / mW.)
Alguém sabe como o desempenho / potência M0 se compara aos controladores de 8/16 bits como AVR, PIC e MSP430? E qual é o problema com os números do M3?

Federico Russo
fonte
3
@frederico, esta é uma pergunta muito carregada e não há resposta fácil. Desde então, minha experiência é outra coisa que determina o desempenho. Coisas como recursos de pré-busca, velocidade de barramento, número de periféricos pendurados em um barramento, velocidade de acesso ao flash etc. etc. Se você cria um perfil de um sistema, quase sempre vê a obtenção de dados. e fora se torna o gargalo da garrafa. Bem, se você detalhar seu aplicativo, eu ficaria feliz em fornecer informações sobre qual é o melhor caminho para escolher o processador.
Frank
11
@Frank: O benchmark Dhrystone não leva em conta coisas como pré-busca e velocidade do barramento? Eu particularmente gostaria de esclarecer os números contraditórios do NXP M3. Não pode lhe dar mais detalhes sobre o aplicativo, porque os detalhes ainda não existem :-)
Federico Russo
@ Frederico, eu me considero engenheiro abaixo da média, certamente não um arquiteto. Não confio em nenhum benchmark por aí, já que os dados são quase sempre massageados. Por exemplo, se você possui um coletor de dados de alta velocidade que exige que você insira e remova dados e, nesse meio tempo, você precisa acessar a memória e outros periféricos, esse barramento de caso atrapalha. Esses processadores foram projetados para casos de uso médios. Se você estiver decodificando com facilidade alguns dados que requerem várias leituras / gravações de memória e o caminho dos dados poderá transbordar ou morrer de fome. Isso geralmente termina em noites sem dormir para os caras do software.
Frank
Hoje em dia o Dhrystone é um brinquedo divertido, mas não lhe diz muito. Os benchmarks em geral não dizem muito a você. Você precisa pegar seu aplicativo e executá-lo. O compilador que você optar por não alterar nenhum código ou hardware pode fazer várias vezes mais ou menos a diferença de desempenho, portanto tudo isso é muito difícil. Você pode fazer benchmarks que fazem os números mostrarem o que você quiser.
old_timer
O ARM fará círculos ao redor do resto para obter desempenho puro (com tamanho e preço semelhantes, não necessariamente energia). Eu não acho que mesmo um 8051 seja tão lento quanto um PIC, você pode entender o número de relógios perdidos para fazer algo útil? Usando asm, as pessoas usam C e torna-se insuportável de assistir. O msp430, você provavelmente o quer para aplicativos onde você o desliga, ele acorda uma vez na lua azul faz algumas coisas e depois entra no modo de suspensão, como um controle remoto de TV ou algo assim.
# 1

Respostas:

9

Aqui estão algumas dicas que eu posso fornecer. As especificações fornecidas pelo NXP são para todo o chip (núcleo, memória, periféricos). A especificação que o ARM fornece é baseada apenas no núcleo. Como os números são derivados de maneira diferente, é realmente difícil fazer a comparação.

Então, proponho que recuemos e analisemos dois dispositivos. Um MCU baseado em NXP M0 e um MCU baseado em MXP M3.

Para o MCU baseado em M0, vejamos o LPC1111. Quando este MCU estiver executando um loop ocioso ocupado, ele consumirá 3mA de corrente na taxa de clock de 12MHz. Isso produz 250uA / MHz, que em 3,3V é 825uW / MHz.

Para o MCU baseado em M3, vejamos o LPC1311. Quando este MCU estiver executando o mesmo loop ocioso ocupado, consumirá 4mA de corrente em 12MHz. Rendimento 333,3uA / MHz, que é 1,1mW / MHz.

Se olharmos para um MSP430C1101 MCU (16 bits), veremos que ele usará 240uA a 1MHz quando a tensão for de 3V. Isso produz 720uW / MHz.

A seguir, vejamos o ATMega328 (usado no Arduino Uno). Vemos 200uA usados ​​em 1MHz com uma voltagem de 2V. Isso produz 400uA / MHz.

Também deve ser observado que o MSP430 e o AVR são especificados de maneira diferente. O consumo de energia é dado em 1 MHz, enquanto que o M0 e o M3 são dados em 12MHz. Isso significa que o M0 e o M3 têm ineficiências de escala de até 12MHz incorporadas em seus números.

Esses valores são todos os números de consumo atual ativos. Se você observar o consumo atual quando o dispositivo estiver no modo de suspensão, verá ordens de magnitude menos energia sendo usadas. A vantagem que o M0 de 32 bits oferece é que ele pode realizar muito mais trabalho em menos tempo que o MCU de 8 e 16 bits. Isso significa que, para uma determinada carga de trabalho, passará muito mais tempo no estado de suspensão. O M0 nas mãos de um bom engenheiro geralmente obtém uma eficiência de energia muito melhor do que um MCU de 8 bits nas mãos de um engenheiro menos qualificado, apesar das diferenças no consumo de energia ativo.

Pela minha experiência, o M0 é tão próximo do consumo de energia ativa de 16 e 8 bits que você pode compensar muitas diferenças de aplicação. Além disso, muitas vezes o consumo de energia de tudo o que você tem pendurado no MCU diminui o consumo do MCU. Portanto, para muitas aplicações, a eficiência da MCU não é a coisa mais importante.

Espero que ajude. É um longo caminho para dizer que o consumo de energia é um pouco pior, mas você faz muito mais com esses ciclos de clock do que outros chips. Então, isso realmente depende da sua aplicação.

tallganglyguy
fonte
11
Re seu primeiro parágrafo: se os números do ARM são praticamente o núcleo, eles devem ser mais altos que os números do NXP, que incluem energia de periféricos. Mas eles são mais baixos. Também não sei explicar.
stevenvh
11
Além disso, você deve comparar os controladores em tensões iguais. Se você executar o LPC1111 em 3V como o MSP430, o consumo de energia será muito próximo. Nada mal para o NXP ARM; o MSP430 é conhecido por sua baixa potência.
Stevenvh
11
um grande problema que tive com os dispositivos de córtex ARM em comparação com o MSP430 é que os dispositivos ARM podem gravar muitos ciclos de processador, voltando ao estado de execução do modo de baixo consumo de energia. Os dados da RAM são perdidos e precisam ser recriados / inicializados (além da SRAM com bateria), o sistema de PLL e relógio deve ser reiniciado. O MSP apenas continua a partir da próxima instrução com toda a RAM intacta desde quando foi adormecida. Se o seu processo envolver transições frequentes entre os modos ativo e de suspensão, o ARM perderá.
uɐɪ
3

A comparação de 12MHz a 1MHz é tendenciosa - as taxas de clock mais altas exigem menos corrente por MHz. Por exemplo, os MSP430 mais recentes podem chegar a 80-120uA por MHz, com 8 / 16MHz no modo ativo.

Vale ressaltar que o código escrito corretamente mantém o modo ativo do MCU abaixo de 1% (ou mesmo 0,1%) do tempo, portanto os modos de energia fazem muita diferença aqui.

Na vida real, é difícil vencer os MSP430 (eu não sou um funcionário da TI) devido a estados de baixa energia muito úteis nos quais outros MCUs demoram mais para serem ativados ou não mantêm o conteúdo da RAM, o que é ridículo.

user19790
fonte