A maior rede de estudos do Brasil

Grátis
12 pág.
Artigo 1

Pré-visualização | Página 1 de 4

Conjuntos de instruções de 16 bits para processadores
de 32 bits
16-bit instruction sets for 32-bit processors
André Luís Macedo, Guilherme Beyer Thó, Vinícius Geraldo Felix
Instituto de Computação da Universidade Estadual de Campinas – IC/UNICAMP
RESUMO: 
Quando se trata de sistemas embarcados, o uso de memória e o consumo de energia
são elementos críticos. Processadores para estes sistemas como ARM e MIPS provém um
conjunto de instruções de 16-bits, além das instruções de 32-bits para endereçamento.
Usando instruções de 16-bits, pode-se diminuir o tamanho do código e aumentar a
economia de energia, ao custo de performance.
Analisaremos então três conjuntos de instruções diferentes, ARM THUMB, MIPS16 e
Motorola M-Core, procurando as soluções encontradas para resolver os problemas
mencionados de modo a discutirmos novas soluções, focando em três aspectos principais:
economia de energia, uso de memória e performance.
ABSTRACT: 
In the embedded domain, memory usage and energy consumption are critical con-
straints. Embedded processors such as the ARM and MIPS provide a 16-bit instruction
set in addition to the 32-bit instruction set to address these concerns. Using 16-bit instruc-
tions one can achieve code size reduction and I-cache energy savings at the cost of perfor-
mance.
We’ll analise three different sets of instructions, ARM THUMB, MIPS16 and Motoro-
la M-Core, looking for the solutions found to solve the problems mentioned so that we
discuss new solutions, focusing in three main aspects: energy savings, memory usage and
performance
1. INTRODUÇÃO
 A proposta de utilização de instruções 16 bits em processadores 32 bits surge como
uma alternativa para economia de custos frente a implementações restritas a 32 bits, mas
apresentando ainda um ganho de desempenho devido a utilização de um processador 32
bits.
Os processadores analisados neste artigo – ARM THUMB, MIPS e Motorola M-Core,
são amplamente utilizados em sistemas embarcados. Sistemas deste tipo têm apresentado
um grau de sofisticação crescente, o que aumenta a necessidade de processadores velozes
e capazes de oferecer o nível de desempenho exgido. Isto, combinado à exigência de
economia na utilização de baterias e memória nestes dispositivos compõe os requisitos
que os fabricantes destes microprocessadores buscam responder utilizando instruções de
16 bits em processadores 32 bits.
Esta abordagem proporciona um aumento na densidade de código, o que por
conseqüência alivia requerimentos de disponibilidade de memória e permite um
economia de energia já que um número menor de instruções são traduzidas.
A análise de como instruções deste tipo são executadas e implementadas, e suas
implicações em cada uma das arquiteturas mencionadas é o foco de estudo deste artigo.
2. MOTIVAÇÃO
Muitos desconhecem este fato, mas acima de 98% de todos microprocessadores do
mercado são aqueles encontrados em sistemas embarcados. Dentre estes
microprocessadores, incluem-se aqueles listados como objeto de estudo deste artigo. E
com a explosão
Eletrônicos portáteis, como celulares, dispositivos GPS e computadores de mão,
representam um novo e lucrativo mercado em explosão e engrossam a lista de exigências
dos microprocessadores voltados para sistemas embarcados. O desenvolvimento destes
têm caminhado para uma nova classe de dispositivos altamente portáteis - e ainda assim
sofisticados.
Desenvolvedores destes sistemas possuem uma constante preocupação: a duração da
bateria. Por um lado, o tamanho reduzido destes dispositivos impede o uso de baterias
volumosas. Por outro, a sofisticação dos equipamentos exigi uma crescente capacidade de
processamento e portanto, um consumo maior de energia. Como o desempenho de
baterias não tem crescido ao passo exigido pelo mercado, desenvolvedores necessitam de
componentes eletrônicos que oferecem alta performance e maximizem a duração de
baterias através da redução do consumo de energia.
Um dos motivos para a utilização de um conjunto de instruções 16 bits em
processadores 32 bits é justamente a redução do consumo de energia. Em algumas
arquiteturas, isto é realizado mantendo as instruções em um tamanho fixo de 16 bits,
como é o caso do Motorola M-Core. Já no caso do ARM THUMB e do MIPS16e,
diferentes modos de operação são suportados para que tanto instruções 16 bits como 32
bits sejam permitidas, mas a alternância entre estes modos envolve um certo custo.
i. Densidade de código
Instruções de 16 bits implicam em um densidade menor de código, isto é, um número
menor de bytes de código requeridos para implementar uma aplicação ou função. Uma
maior densidade de código afeta o consumo de energia tanto estaticamente como
dinamicamente. Um benefício imediato é a geração de um executável menor. Isto reduz
as exigências de memória de uma aplicação, que por sua vez reduz o custo do sistema e o
seu consumo energético.
Existe no entanto um benefício adicional de uma maior densidade de código: uma
redução na utilização do barramento para traduzir instruções. Uma vez que é possível
executar um trecho equivalente de código com um número reduzido de instruções, o
acesso ao barramento para traduzir instruções também é reduzido, resultando em uma
economia de energia.
ii. 16 bit vs 32 bit
O interesse em combinar instruções 16 bits e arquitetura 32 bits está em obter uma
maior densidade de código (e outras vantagens decorrentes disto) mas mantendo muito do
ganho de performance proporcionado pela arquitetura de 32 bits. Entre os ganhos
destacam-se a possibilidade de manipular inteiros de 32 bits em uma única instrução, e
endereçar um longo espaço de endereçamento de forma eficiente.
Nota-se que nem todo código em um programa irá processar dados de 32 bits.
Utilizando o ARM THUMB é possível codificar a aplicação utilizando instruções 16 bits,
mas realizando otimizações em trechos de código especialmente críticos para o
desempenho da aplicação.
3. ARM THUMB
O conjunto de instruções THUMB consiste nas instruções 16-bit que agem como um
compacto para um subconjunto das instruções 32-bit ARM padrão Cada instrução
THUMB poderia ser executada através da instrução 32-bit equivalente ARM. Entretanto,
nem todas as instruções ARM estão disponíveis no subconjunto THUMB; por exemplo,
não há nenhuma maneira acessar status ou registradores de coprocessadores. Também,
algumas funções que podem ser realizadas em uma única instrução ARM podem somente
ser simuladas com uma seqüência de instruções THUMB. 
Mas realmente ARM contém somente um conjunto de instruções: o de 32-bit. Quando
se está operando no estado THUMB, o processador expande simplesmente as instruções
menores do buscadas da memória em seus equivalentes 32-bit.
A diferença entre duas instruções equivalentes encontra-se em como as instruções são
buscadas e interpretadas antes da execução, não em como funcionam. Como a expansão
de 16-bit à 32-bit é realizada através de hardware dedicado dentro do chip, não há retardo
na execução do código. Mas as instruções 16-bit, por serem menores, oferecem
vantagens da memória.
O conjunto de instruções THUMB fornece a maioria das funcionalidades requeridas
em uma aplicação típica. As operações aritméticas e lógicas, os movimentos de dados de
load/store, e os branches condicionais e incondicionais são suportados. Baseado no
conjunto de instruções disponível, qualquer código escrito em C podia ser executado com
sucesso no estado THUMB. Entretanto, os drivers de dispositivo e os handlers de
exceção devem freqüentemente ser escritos, ao menos em parte, no estado ARM.
i. Registradores
Ao operar-se no estado 16-bit THUMB, a aplicação encontra um conjunto
ligeiramente