Crystal 8086. O local de armazenamento dos registros está marcado. Os registros superiores são usados pelo bloco de interface de barramento para acesso à memória, enquanto os registros de propósito geral inferiores são usados pelo bloco de execução. O buffer de comando é uma fila de 6 bytes de comandos pré-solicitados.
A foto mostra uma imagem do processador 8086 sob um microscópio. Uma camada de metal é visível no topo do chip, sob a qual o silício está escondido. Localizado na borda externa dos fios de conexão, conecte as almofadas do chip aos 40 pinos externos do chip.
Quinze registros 8086 de 16 bits e seis bytes da fila de pré-solicitação de comando (pré- busca de código ) são enquadrados . Os registros ocupam uma parte significativa do cristal, embora no total sejam digitados em apenas 36 bytes. Devido a restrições de espaço, os primeiros microprocessadores tinham relativamente poucos registros. Em comparação, os chips de processador modernos têm kilobytes de registros e megabytes de caches.
O 8086 foi um dos primeiros microprocessadores a implementar a pré-busca de código, mas o Motorola 68000 (1979) tinha um buffer de pré-busca de 4 bytes um pouco antes. Em mainframes, a pré-busca estava disponível com IBM Stretch (1961), CDC 6600 (1964) e IBM System / 360 Modelo 91 (1966).
O número de registros em um processador moderno é difícil de calcular. O único número exato que encontrei foi no livro Anatomy of a High-Speed Microprocessor"(1997), descrevendo em detalhes o processador AMD K6. Devido à renomeação dos registros, os processadores modernos têm muito mais registros físicos do que arquitetônicos (aqueles que são visíveis ao programador), e o número de registros físicos não é indicado na documentação. O K6 tem, exceto por oito registros x86 para fins gerais, havia 16 registros de trabalho de microarquitetura para
renomear. Os processadores com suporte a AVX-512 têm 32 registros de 512 bits, ou seja, 2 KB de registros são reservados para esta função. Nesses casos, o tamanho dos registros é ainda mais difícil de calcular. Quanto ao tamanho do cache, em seguida, em processadores avançados seu volume chega a 77 MB .
Como os registros são implementados em silício
Vou começar descrevendo como o 8086 é construído a partir de transistores N-MOS. Em seguida, explicarei como um inversor é feito, como bits únicos são armazenados com inversores e como um registro é feito.
O 8086, como outros chips da época, era baseado em transistores N-MOS. Esses chips consistiam em um substrato de silício, no qual impurezas de arsênio ou boro eram difundidas para formar transistores. Acima do silício, os condutores de polissilício formavam as portas dos transistores e conectavam todos os componentes uns aos outros. A camada de metal localizada ainda mais alta continha condutores adicionais. Em comparação, os processadores modernos usam a tecnologia CMOS , que combina os transistores N-MOS e P-MOS e contém muitas camadas de metal.
O diagrama abaixo mostra um inversorconsistindo em um transistor N-MOS e um resistor. Quando a tensão de entrada está baixa, o transistor está desligado, então o resistor pull-up aumenta a saída. Quando a tensão de entrada está alta, o transistor liga, conecta o terra e a saída, puxando a saída para baixo. Assim, o sinal de entrada é invertido.
Na verdade, o resistor pull-up em uma válvula N-MOS é um tipo especial de transistor. Um transistor esgotado se comporta como um resistor, sendo mais compacto e eficiente.
O diagrama mostra como um inversor é feito de um transistor e um resistor. A foto mostra a implementação no chip. A camada de metal foi removida para expor o silício e o polissilício.
A foto acima mostra como o inversor 8086 é fisicamente feito. As áreas rosadas são de silício com impurezas que o tornam condutor e as linhas de cobre são de polissilício no topo. O transistor aparece onde o polissilício se cruza com o silício. Polissilício forma a porta do transistor, e seções de silício em ambos os lados fornecem uma fonte e dreno. Um grande retângulo de polissilício forma um resistor pull-up entre + 5V e a saída. Portanto, o circuito do chip é o mesmo do inversor. Circuitos como esses podem ser vistos sob um microscópio e submetidos à engenharia reversa.
O bloco de construção do registro são dois inversores no loop de feedback que armazenam um bit (veja abaixo). Se o condutor superior for 0, o inversor direito produzirá 1 para o condutor inferior. O inversor esquerdo então produzirá 0 para o condutor superior, completando o ciclo. Assim, o circuito é estável e "lembra" 0. E vice-versa, se o condutor superior for 1, passará para 0 no condutor inferior e voltará para 1 no superior. Como resultado, a cadeia pode armazenar 0 ou 1, formando uma memória de um bit.
O 8086 possui dois inversores emparelhados que armazenam um bit em um registrador. O circuito está estável no estado 0 ou 1.
Três transistores são adicionados ao par de inversores para criar uma célula de registro utilizável. Um transistor seleciona uma célula para leitura, o segundo seleciona uma célula para escrita e o terceiro amplifica o sinal durante a leitura. No centro do circuito abaixo, dois inversores armazenam o bit. Para ler o bit, a corrente é aplicada ao barramento vermelho. Isso conecta a saída do inversor à linha de bits por meio de um transistor amplificador. Para escrever um bit, a corrente é aplicada à linha vermelha, que conecta a linha de bit aos inversores. Aplicando sinais de alta corrente de 0 ou 1 à linha de bits (e, consequentemente, ao bit armazenado), forçamos os inversores a mudar para o valor desejado. Observe que a linha de bits é usada para leitura e gravação.
Outros processadores usam locais de registro ligeiramente diferentes. O 6502 usa um transistor adicional no loop de feedback do inversor para interromper o circuito quando um novo valor é escrito. O Z80 grava em ambos os inversores ao mesmo tempo, o que "facilita" a troca, mas requer dois fios para gravar. O 8086 tem um transistor de ganho em cada localização de registro para leitura, enquanto outros processadores leem a saída de ambos os inversores e usam um amplificador diferencial externo para amplificar o sinal. A célula base do registro 8086 consiste em 7 transistores (7T), que é mais do que uma célula RAM estática típica usando 6 ou 4 transistores, mas usa apenas uma linha de bits, não duas diferentes. A memória dinâmica (DRAM) é muito mais eficiente e usa um único transistor e capacitor,no entanto, sem atualizar os dados, eles serão perdidos.
Diagrama esquemático de uma célula de registro armazenando um bit. O arquivo de registro é feito de um array de tais células.
O arquivo de registro consiste em uma matriz de células de registro semelhante à descrita acima. A matriz tem 16 células de largura porque os registradores armazenam valores de 16 bits. Cada registro está localizado horizontalmente, de modo que o barramento de leitura ou gravação seleciona todas as células de um determinado registro. As 16 linhas de bits verticais formam um único barramento, de modo que todos os 16 bits no registro selecionado são lidos e gravados em paralelo.
A foto abaixo mostra um arquivo de registro geral ampliado 8086 mostrando uma matriz de células de registro: 16 colunas e 8 linhas, 8 registros de 16 bits. Então, o incremento de uma localização de registro no arquivo é fornecido. Deixe-me explicar como essa célula é implementada.
8086 ( 16- ), . , .
O 8086 é feito de silício dopado e condutores de polissilício com condutores de metal na parte superior. A foto à esquerda abaixo mostra os condutores metálicos verticais da célula de registro. Fios de aterramento, alimentação e barramento de bits são marcados (o fio restante cruza o arquivo de registro, mas não o contata). Na foto à direita, a camada de metal está dissolvida de forma que polissilício e silício possam ser vistos. Os barramentos de leitura e gravação são condutores de polissilício horizontais. Como o chip tem apenas uma camada de metal, o metal é usado nos registros para os barramentos verticais e polissilício para os barramentos horizontais, de forma que eles não se cruzem). Metal e silício através das juntas aparecem como círculos mais brilhantes na foto de metal e como círculos na foto de silício.
Registre o local de armazenamento. A foto à esquerda mostra a camada de metal e à direita - as camadas correspondentes de polissilício e silício.
O diagrama abaixo mostra a correspondência do esquema físico da célula de registro ao principal. Os inversores consistem nos transistores A e B e registros. Os transistores C, D e E são formados por peças de polissilício marcadas. A linha de bits não é visível porque está localizada na camada de metal. Observe que o layout da célula de memória é altamente otimizado para minimizar o tamanho. Observe também que o transistor A é muito menor do que os outros. O inversor A tem uma corrente de saída bastante baixa, de modo que a linha de bits pode superá-la durante a gravação.
Registre a célula do 8086 com o circuito correspondente
Suporte de registro de 8 bits
Se você examinar cuidadosamente o cristal, poderá ver que algumas das células de registro têm uma estrutura ligeiramente diferente. À esquerda está a localização do registrador que já discutimos, e à direita está um par de localizações do registrador com dois barramentos de gravação em vez de um. Na foto à esquerda, o barramento de gravação cruza o silício em ambas as células de registro. Na foto à direita, o barramento de “gravação à direita” cruza o silício da direita, mas passa entre o silício da esquerda. Por outro lado, a linha "escrita à esquerda" cruza o silício no lado esquerdo e passa entre as regiões de silício à direita. Assim, um bus controla a escrita do bit direito, enquanto o outro controla a escrita do bit esquerdo. Em um registro de 16 bits, as partes intercaladas de 8 bits podem ser escritas separadamente desta forma.
A célula de registro no cristal não é repetida uniformemente - cada segunda célula é uma imagem espelhada da anterior. Isso aumenta a densidade da célula de registro - o barramento de alimentação passando entre as duas células espelhadas pode alimentar as duas (o mesmo vale para o aterramento). Repetições espelhadas reduzem o número de trilhos de energia e aterramento necessários pela metade.
Embora os diagramas de bloco geralmente mostrem como os registros de 16 bits são divididos nas metades esquerda e direita, no mundo real os bits de cada lado se alternam, em vez de sempre armazenar a primeira parte de 8 bits à esquerda e a segunda à direita. Essa implementação simplifica a tarefa que às vezes surge de trocar duas metades de uma palavra de 16 bits. Um desses casos é ler ou gravar memória sem alinhamento. Outra é uma operação ALU que usa a parte superior do registro - por exemplo, AH. Trocar os bits entre as metades direita e esquerda exigiria puxar fios longos entre todos os bits das metades da palavra. No entanto, em um arranjo alternado, para trocar duas metades de uma palavra, é necessário trocar cada par de bits adjacentes, o que não requer fios longos. Em outras palavras,o registro intercalado do 8086 facilita a disposição dos condutores para trocar as duas metades de uma palavra.
Dois pares de células de memória com circuitos diferentes. As células à esquerda têm um barramento de gravação e as da direita têm barramentos de gravação separados para os bits esquerdo e direito.
Por que alguns registradores têm dois barramentos de gravação e outros têm um? O motivo é que o 8086 tem registradores de 16 bits, mas quatro deles podem ser acessados como 8 bits, conforme mostrado abaixo. Por exemplo, o acumulador A de 16 bits pode ser acessado como registradores AH de 8 bits (parte de ordem superior do acumulador) e AL (parte de ordem inferior) de 8 bits. A implementação de registros com dois barramentos de controle de gravação permite a escrita para cada metade do registro separadamente.
Se o arquivo de registro suportasse apenas registros de 16 bits em vez de 8 bits, o processador poderia funcionar, mas com menos eficiência. As gravações nas metades de 8 bits seriam feitas lendo todos os 16 bits, mudando a metade de 8 bits e gravando todos os 16 bits. Como resultado, em vez de acessar um registro, a chamada iria para três. Neste caso, o arquivo de registro não precisa suportar de alguma forma particularmente a leitura de 8 bits, uma vez que a metade desnecessária pode ser simplesmente ignorada.
Registros de uso geral no 8086. Os registros A, B, C e D podem ser divididos em duas metades de 8 bits.
Registros multiportas
Até agora, cobrimos oito “registros inferiores” de uso geral. O 8086 também tem sete "registros superiores" usados para acesso à memória, incluindo os infames registradores de segmento . Esses registradores têm um esquema de operação multiportas mais complexo, permitindo que vários processos de leitura e gravação sejam realizados simultaneamente. Por exemplo, um arquivo de registro multiporta permite que você leia um contador de programa, um registro de segmento e escreva outro registro de segmento, tudo ao mesmo tempo.
O diagrama de bloco abaixo é diferente da maioria dos diagramas de bloco.para 8086, porque mostra a implementação física real do processador, e não o que o programador imagina. Em particular, o diagrama mostra dois "registros de comunicação interna" entre os registros do módulo de interface de barramento (direita), junto com registros de segmento que correspondem aos 7 registros que podem ser vistos no chip. Os registros temporários mostrados abaixo são fisicamente parte da ALU, portanto, não os abordarei neste artigo.
O livro " Projetando processadores modernos " discute sistemas complexos de registro em um processador desde os anos 2000. Diz que a complexidade dos circuitos ultrapassa rapidamente três portas, e em alguns processadores avançados existem arquivos de registro com 20 ou mais portas.
A célula de registro multiporta abaixo é baseada no mesmo circuito de dois inversores, porém tem três linhas de bits (não uma como no caso anterior) e cinco linhas de controle (em vez de duas). Três barramentos de leitura permitem que você leia o conteúdo de uma célula de registro em qualquer uma das três linhas de bits, e dois barramentos de gravação permitem que os bits A ou C escrevam em uma célula de registro.
Célula de registro multiporta no processador 8086
À primeira vista, o arquivo de registro do 8086 parece um conjunto homogêneo de registros, mas um olhar mais atento mostra que cada registro é otimizado dependendo de sua função. Alguns deles são registros simples de 16 bits e estão localizados de forma mais compacta. Os outros registros de 16 bits podem ser acessados como dois registros de 8 bits, o que requer outro barramento de controle. Os registros mais complexos possuem duas a três portas para leitura e uma ou duas para escrita. Em cada caso, a implementação física da célula de registro é cuidadosamente projetada para ocupar o mínimo de espaço possível e, portanto, o formato dos transistores é frequentemente complexo. Os engenheiros da Intel apertaram o layout do registro o mais firmemente possível para caber todos eles no espaço disponível para eles.
Os registros superiores possuem um número diferente de portas para leitura e escrita: dois registros com 3 barramentos de leitura e 2 de escrita, um registro com 2 barramentos de leitura e 2 de escrita, quatro registros com 2 barramentos de leitura e 1 de escrita. Os três primeiros registros são provavelmente o contador do programa, um registro temporário indireto e um registro temporário de operando. Os últimos quatro são provavelmente os registradores de segmento SS, DS, SS e ES. Existem também três registradores de buffer de pré-busca de instrução, cada um com um barramento de leitura e um de gravação.
O processador 8088 usado nos IBM PCs originais era virtualmente idêntico ao 8086, exceto que tinha um barramento externo de 8 bits em vez de 16 bits, então o sistema era mais barato. O buffer de pré-busca do 8088 tinha 4 bytes em vez de 6 - provavelmente porque 4 bytes eram suficientes para o barramento de memória mais lento do 8088.
Ao contrário do 8086, os registradores de pré-busca do 8088 suportam gravação independente em metades de 8 bits (semelhante aos registradores A, B, C e D do 8088, apenas essas células parecem diferentes). Isso ocorre porque o 8088 solicitou comandos um byte por vez, e não uma palavra por vez, devido ao barramento estreito. Portanto, os registradores de pré-busca devem oferecer suporte à escrita de bytes, enquanto o 8086 oferece suporte à pré-busca de palavras.
Arquivo de registro superior que consiste em dez registros de 16 bits. A foto mostra silicone e polissilício. Linhas vermelhas verticais - remanescentes da camada de metal removida. Clicável.
Conclusão
Embora o processador 8086 tenha 42 anos, ele ainda tem um impacto significativo nos computadores modernos, já que a arquitetura x86 ainda é muito usada hoje. Os registros 8086 ainda existem nos computadores x86 modernos, embora hoje já tenham 64 bits, e além desses registros existem muitos outros.
O cristal 8086 é muito interessante de estudar porque seus transistores podem ser vistos em um microscópio. Antes era um processador complexo, pois abrigava 29.000 transistores, mas simples o suficiente para rastrear todos os circuitos e entender como eles funcionam.
Veja também: