Por que um caminho de dados em microcontroladores sempre tem uma potência de 2 de largura?


8

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?


7
sacrilégio queimá-lo na fogueira!
Kenny

@kenny Sim, também estou indignado! :-)
m.Alin

@ m.Alin o horror! Antes que você perceba, as pessoas voltarão aos designs de fatias de bits e escreverão seus próprios montadores.
Kenny

Ele deveria ser sentenciado a 3 anos de uso apenas de teletipos antigos de código de 5 bits (estes tinham códigos separados para "shift" para acessar mais letras, entre outras alegrias).
Olin Lathrop

2
... porque um pouco em si é uma potência de 2? :-P
shimofuri

Respostas:


8

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 .


7

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.

insira a descrição da imagem aqui


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.


Se você deseja uma peça de produção de 24 bits, as GPUs R300 / 420 da ATI (placas 9500-X600 e X700-850) se encaixam perfeitamente.
Dan Is Fiddling Por favor

A idéia de um micro de um bit parece interessante, mas qual a utilidade de um chip como o MC14500B na prática? Eu pensaria que ter dados de entrada controlando um bit de endereço do programa (usando uma trava e um multiplexador 2: 1) seria mais eficaz do que tentar usar instruções para gerenciar o estado. Encontrei uma folha de dados da década de 90 para a peça, o que sugere que ela permaneceu por algum tempo, mas estou curioso para saber como esse chip seria realmente usado.
Supercat

@supercat - Encontrei uma referência em que um designer disse que tinha um design discreto e antigo que foi substituído por um baseado no MC14500B e, durante alguns anos, o cliente comprou vários deles. Dito isto, seria difícil imaginar um dispositivo mais incapacitado e incapaz.
Russell McMahon

Não consigo imaginar a psicologia do design dos anos 70, mas o controlador de unidade de disquete de Steve Wozniak (apresentado na Apple) [) demonstra que não é preciso muita lógica discreta para construir um "computador". Depois de examinar o manual do MC14500B, pensei em como projetar um sistema para executar código de uma PROM usando apenas uma lógica discreta (fora da própria PROM). Acho que a coragem da minha máquina seria uma trava transparente de 8 bits, um flip flop de 8 bits e um NAND quad, e possivelmente um atraso de RC (dependendo dos requisitos de configuração / espera da E / S). Uma instrução de 16 bits por ciclo.
Supercat 29/07/12

Sete bits do flip-flop acionariam os bits de endereço superior da PROM, e o bit inferior seria acionado pelo relógio. Durante a primeira metade de cada ciclo, a trava transparente amostraria os seis principais bits de saída (endereço de E / S) e o dispositivo executaria uma leitura de E / S. A entrada de E / S acionaria o sétimo bit de trava transparente e 3 NANDs atuariam como um multiplexador usando a entrada de trava para selecionar Q0 ou Q1 da PROM para alimentar o restante da trava transparente. Durante a segunda metade de cada ciclo, execute uma gravação de E / S com o endereço e os dados travados.
Supercat

7

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.


2

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.


1
"Os tipos de dados mais comuns são baseados em uma mordidela de 4 bits". Eu não acho que isso seja verdade. Os dados de texto ( muitos deles) são baseados em bytes e os dados numéricos (incluindo compactados / codificados) geralmente são baseados em 16 ou 32 bits. O único uso de dados de 4 bits que consigo pensar é o BCD, mas o IMO é muito limitado.
27612 stevenvh

@stevenvh Eu acho que ele refere-se ao grande uso de HEX para agrupar dados ... Eu diria que é verdade, em arquiteturas muitas vezes você vê esta decomposição
clabacchio

1

É 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":

SHL R1,4

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.


1
Também pensei nisso, mas não tenho certeza de que isso seja motivo suficiente para basear uma arquitetura completa nela.
Stevenvh

1
Um fator maior, eu acho, é a capacidade de armazenar e acessar dados em matrizes de bits. O uso de tais matrizes não representa grande parte do que os computadores fazem, mas dificilmente são incomuns. Em uma máquina com, por exemplo, bytes de 8 bits, o elemento i de uma matriz pode ser lido via arr[i >> 3] >> (i & 7)ou testando se arr[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.
Super27

@supercat Não é muito mais difícil, apenas muito mais lento. Um apenas substitui uma mudança por uma divisão. O que eu tenho certeza que você já sabe, mas achei que vale a pena mencionar.
Roman Starkov

0

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 ...... ..


1
Isso não explica os poderes de 2 para o comprimento da palavra. Você menciona um comprimento de 5 como suficiente para 32 combinações. O OP pergunta por que não existem controladores de 5 bits.
Stevenvh

@ stevenvh: Isso é absolutamente bom senhor. Deixa comigo. Talvez eu não tenha focado a questão adequadamente. Obrigado.
navegado

Mudei sua resposta para um comentário, que você pode usar na caixa abaixo. As respostas são direcionadas para fornecer conteúdo sobre a pergunta, o restante é para comentários.
Clabacchio

0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.