Os caminhos de dados dos microcontroladores são sempre uma potência de 2 de largura: 4 bits, 8, 16, 32 bits, etc. Até os PICs que usam instruções de largura de 12 bits são controladores de 8 bits. Por quê? Existe alguma vantagem de design nisso? O que há de errado com um banco de dados de 12 bits ou um controlador de 7 bits ?
editar
O 7-bit não faz muito sentido, mas é o que me fez pensar na pergunta. As respostas se referem à tradição de 8 bits. Mas 16 bits não são 8 bits e 24 bits podem lidar com dados de 8 bits e 16 bits, certo? Por que eles saltaram de 24 bits para 32 bits?
microcontroller
architecture
Federico Russo
fonte
fonte
Respostas:
A tradição tem uma forte atração. Mas o mesmo acontece com a interoperabilidade. Praticamente todos os formatos de arquivos e protocolos de comunicação existentes operam em bytes. Como você lida com isso no seu microcontrolador de 7 bits?
O PIC se diverte com o espaço de instruções totalmente separado e programado com antecedência a partir do exterior. Há algum valor em barbear o conjunto de instruções, pois é a única coisa que você pode controlar como um projetista de microprocessador.
Se você deseja uma arquitetura extrema, Huffman pode codificar o conjunto de instruções, fornecendo uma variável de duração variável .
fonte
Mínimo sensível de 4 bits:
0-9 Os dados numéricos precisam de 4 bits de
0 a 9 = 10 palavras.
O próximo tamanho de palavra binária mais alto = 4 bits = 16 palavras possíveis.
Dados BCD (decimal codificado binário) = 4 bits
Próximo salto lógico de 8 bits
0-9, az, AZ = 10 + 26 + 26 = 62 palavras.
Pode lidar com 7 bits = 128 palavras.
8 é tão fácil quanto 7 e permite 2 x 4 bits, para que os dados numéricos possam ser compactados 2 por 8 bits.
Então 12 bits (não 16)?:
Próximo tamanho lógico acima = 12 bits e o PDP-8 inicial e muito bem-sucedido usou 12 bits. 12 bits usados para dados e programa permitem 2 ^ 12 = 4096 locais de endereço. Como Bill Gates pode ter dito uma vez "4K de memória deve ser suficiente para qualquer um".
A seguinte família PDP-11 usou 16 bits.
Dobrar por compatibilidade.
Se você deseja interoperar com sistemas em níveis mais baixos e mais altos e se deseja ter dispositivos mais capazes na mesma família, é possível lidar com 2 palavras do sistema menor na palavra maior do sistema.
MAS
As exceções que comprovam a regra:
"Sempre" é uma palavra tão forte :-)
exemplos de 1 bit, 12 bits, 18 bits e 36 bits abaixo.
Máquinas de 18 e 36 bits nunca foram microcontroladores.
1 e 12 bits foram.
O sistema de um bit mencionado abaixo é realmente um sistema de "bits aleatórios como achar melhor". A palavra de dados de um bit é essencialmente um sinalizador de ir / não-ir produzido por computação e é usado para ativar ou desativar a atividade do programa. O contador de programa é um contador ascendente que avança ciclicamente na memória com o código sendo ativado ou desativado conforme necessário. Muito, muito, muito desagradável. Quando chegou ao mercado, os processadores de 8 bits da época estavam bastante maduros e o processador de 1 bit nunca fazia muito sentido. Não sei quanto uso ele conseguiu.
1 bit !!!:
Motorola MC14500B Recebi uma menção honrosa de Jack Gansell para melhor descrição deste dispositivo :-)
Folha de dados - clique na página para baixar o PDF.
12 bits:
Harris HM-6100, também conhecido como Intersil IM6100 - dispositivo de minicomputador de 12 bits] ( http://www.classiccmp.org/dunfield/other/i6100cfs.pdf )
Baseado no minicomputador DEC PDP-8 de 12 bits de grande sucesso.
Visão geral
A memória de programa e a memória de dados ocupam o mesmo espaço de memória. O tamanho total da memória endereçável diretamente é de 4 K palavras. O tamanho da palavra é 12 bits. O 6100 não possui memória de pilha.
O tamanho da memória do programa é de 4 K palavras. Todas as instruções condicionais permitem que o processador pule apenas a próxima instrução. Para ir condicionalmente para um endereço arbitrário na memória quando determinada condição for atendida, o código deve executar a instrução "ignorar se a condição não for atendida" primeiro e colocar a instrução de salto incondicional direta ou indireta após a instrução de ignorar. Instruções incondicionais podem ser usadas para pular diretamente dentro da página atual (127 palavras) ou indiretamente dentro de todo o espaço da memória (4 K palavras). O 6100 suporta chamadas de sub-rotina, mas, devido à falta de memória da pilha, o endereço de retorno para as sub-rotinas é armazenado na memória . Não há instruções de "retorno da sub-rotina" - a sub-rotina deve usar salto indireto para retornar ao chamador.
O tamanho da memória de dados é de 4 K palavras. Os dados podem ser acessados diretamente na página zero (0000h - 007Fh) ou na página atual de 127 palavras. Os dados podem ser acessados indiretamente em qualquer lugar em 4 K palavras de memória.
Wikipedia - Intersil 6100
O PDP-8 e o Intersil 6100 tinham 16 instruções muito ricas. Não há instruções de substrato.
A instrução ADD é chamada TADD para lembrá-lo de que é um complemento de 2's, para que não precisemos de ... instrução de subtração.
Outros de 18 e 36 bits - a família PDP:
Processador de dados programado da Wikipedia
PDP1 - 18 bits
PDP2 - 24 bits morreu
PDP3, PDP6 - 36 bits
Manual do usuário do PDP-12 (preliminar - Wow.
Apesar da numeração ser pré-PDP16 - um PDP-8 em esteróides com capacidade de E / S analógica - e máquina de laboratório de engenharia. Eu poderia ter um de graça, se quisesse, mas não caberia em nenhum lugar sensato - ou insensível. O
primeiro jogo de computador que já joguei foi em um desses.
Guerra Espacial. A
máquina estava em dois armários pequenos.
Você abriria uma porta e entraria para fazer coisas ao seu redor. internos.
fonte
Porque a maior parte do mundo convergiu para armazenar, comunicar e manipular dados de computadores em pedaços de 8 bits. Não é um padrão oficial, mas é um padrão ad-hoc muito forte.
No passado, havia máquinas que manipulavam múltiplos diferentes de 8 bits em seus caminhos de dados. Exemplos incluem as séries CDC Cyber 6000 e 7000 e o PDP-8. As máquinas CDC usavam bytes de 6 bits, e o PDP-8 tinha uma palavra de 12 bits de largura, sem uma maneira especial de lidar com quantidades de apenas 8 bits. Certamente havia outras máquinas nessa categoria também. O motivo pelo qual você não os ouve muito hoje é porque as pessoas decidiram que desejam máquinas que possam lidar com seus bytes de 8 bits muito bem, e é isso que os fabricantes fabricam. Você acha que um microcontrolador de 7 bits venderia bem? Quem fez isso seria ridicularizado e depois encontraria poucos clientes. Seria uma proposta estúpida de negócios.
Você pode ver algumas evidências adicionais de "bytes" não de 8 bits se observar os padrões da Internet. Eles deliberadamente usam o termo "octeto" porque naquela época não havia um acordo universal de que um byte sempre tivesse 8 bits. Hoje em dia, o significado de byte converge para 8 bits binários e você pode rir da cidade se tentar usá-lo de maneira diferente.
fonte
Há um pouco de eficiência misturada com muita compatibilidade com versões anteriores como o motivo dessa escolha de design comum.
Se meu caminho de dados tiver 7 bits de largura, preciso de 3 bits para representar qualquer linha desse caminho. Como vou desperdiçar três bits, é melhor usá-los totalmente, tanto para eficiência quanto para eliminar um caminho morto que pode resultar em um erro fatal.
Os tipos de dados mais comuns são baseados em um nibble de 4 bits e a maioria deles em um byte de 8 bits. Ao optar por usar uma base alternativa, pode ser necessário recorrer a códigos ímpares e ineficientes para lidar com tipos de dados comuns. Por exemplo, meu computador de 7 bits exigiria 5 espaços de memória para lidar com qualquer um dos números de 32 bits, incluindo ponto flutuante, que são muito comuns na indústria atual.
Se minha máquina não dependesse de dados externos, eu provavelmente poderia me safar, mas controladores de motor, codificadores, sensores de temperatura e a maioria dos dispositivos e sensores de interface do mundo real suportam essas unidades padrão.
Não é impossível conectar um computador de 7 bits a uma porta USB, mas você fará muitos testes extras e executará muito mais instruções processando todas essas transações de 5 unidades para tipos de dados de 32 bits do que faria se você adicionou um pouco mais ao seu caminho de dados e ficou alinhado com o restante da indústria.
No entanto, ele começou e se uniu à forma atual devido à eficiência do endereçamento de bits; portanto, essa é a causa raiz. Se, por exemplo, você criasse um computador trinário (3 estados em vez de 2 estados por bit), veria os tamanhos de bits mais eficientes em 3, 9, 27, 81, etc. Você também veria tentativas menos eficientes de 18, 24, 33 e 66 em um esforço para fornecer uma compatibilidade mais próxima com sistemas binários.
fonte
É mais fácil porque permite especificar um número de bits em vários bits. Isso pode parecer um truque de salão, mas os conjuntos de instruções fazem isso o tempo todo. Pense, por exemplo, em uma instrução "shift left":
Se você tiver um número de bits com potência de dois, poderá codificar o operando em um número fixo de bits sem desperdício.
fonte
arr[i >> 3] >> (i & 7)
ou testando searr[i >> 3] & mask[i & 7]
é diferente de zero (algumas CPUs favorecem uma abordagem em relação à outra). Fazer uma coisa dessas com tamanho de palavra que não exceda o número de duas seria muito mais difícil.No que diz respeito ao meu conhecimento em eletrônica digital, o motivo parece ser bastante óbvio. O fato é que, para todos os sistemas digitais, utilizamos o conceito de sistema de números binários. Isso significa que temos apenas dois níveis de operação, ou seja, 0 ou 1. Portanto, qualquer combinação possível no nível do hardware deve ser uma combinação de 0s e 1s. Portanto, se precisamos executar 4 tarefas diferentes, precisamos de 2 variáveis, para 32 tarefas precisamos de 5 variáveis e assim por diante (a lógica é 2 ^ n onde n é o número de variáveis). Então, como estamos lidando em apenas dois níveis, devemos ter uma combinação como potência de apenas 2, o que consequentemente é responsável por ter 2,4,8,16,32,64,128,256 e assim por diante ...... ..
fonte
Admito que apenas procurei nas outras respostas, mas um detalhe importante parece ser indiretamente abordado: velocidade lógica e compacidade.
Se você empacotar valores de 24 bits contíguos e também puder acessá-los de maneira endereçada por byte, a lógica de processamento precisará ser dividida por 3 para o acesso à palavra. A divisão é bastante cara de fazer na lógica (basta verificar a referência do processador favorito - a instrução de divisão é lenta), a menos que seja especificamente por uma potência de 2; nesse caso, você simplesmente ignora os bits mais baixos (que o software faz com a mudança de bits). Essa é a mesma razão fundamental pela qual preferimos acessos alinhados.
É claro que é possível projetar um processador em torno desses limites, talvez até codificando a palavra acessa como o quarto valor do endereço (já que são necessários dois bits para selecionar entre três bytes), e eu não ficaria muito surpreso ao ver isso em um DSP (como uma GPU); mas não é a norma para CPUs. Também terminaria com um estranho passo 4 / 3rd para acessos à matriz de bytes, que precisariam lidar com números semelhantes aos números BCD. Assim, torna-se muito mais eficiente lidar com uma matriz de vetores de 3x8bit em vez de bytes de 8 bits.
fonte