Agora que sabemos como os processadores funcionam em alto nível, é hora de nos aprofundarmos no processo de projetar seus componentes internos. Este é o segundo artigo de uma série sobre desenvolvimento de processadores. Eu recomendo que você estude a primeira parte primeiro, para entender os conceitos descritos abaixo.
Parte 1: Noções básicas de arquitetura de computador (arquiteturas de conjunto de instruções, armazenamento em cache, pipelines, hyperthreading)
Parte 2: Processo de projeto da CPU (circuitos elétricos, transistores, elementos lógicos, sincronização)
Parte 3: Layout e fabricação física do chip (fabricação de VLSI e silicone)
Parte 4: Tendências atuais e importantes direções futuras na arquitetura de computadores (mar de aceleradores, integração tridimensional, FPGA, Near Memory Computing)
Como você deve saber, os processadores e a maioria dos outros dispositivos digitais são compostos de transistores. A maneira mais fácil de perceber o transistor como um interruptor controlado com três contatos. Quando o obturador é ligado, a corrente elétrica pode fluir através do transistor. Quando o obturador está desligado, a corrente não pode fluir. O obturador é como um interruptor de luz em uma sala, mas é muito menor, mais rápido e pode ser controlado eletricamente.
Existem dois tipos principais de transistores usados nos processadores modernos: pMOS (PMOS) e nMOS (NMOS). O transistor nMOS passa corrente quando a porta é carregada ou possui alta tensão, e o transistor pMOS passa corrente quando a porta é descarregada ou tem baixa tensão. Combinando esses tipos de transistores de maneira complementar, podemos criar elementos lógicos do CMOS. Neste artigo, não analisaremos detalhadamente os recursos da operação dos transistores, mas abordaremos isso na terceira parte da série.
Um elemento lógico é um dispositivo simples que recebe sinais de entrada, executa uma operação e gera um resultado. Por exemplo, o elemento AND (AND) ativa seu sinal de saída se e somente se todas as entradas do gate estiverem ativadas. O inversor, ou o elemento NOT (NOT), liga sua saída se a entrada estiver desativada. Você pode combinar esses dois obturadores e obter um elemento NAND que ativa a saída, se e somente se nenhuma das entradas estiver ativada. Existem outros elementos com sua funcionalidade lógica, por exemplo, OR (OR), OR-NOT (NOR), OR exclusivo (XOR) e OR exclusivo com inversão (XNOR).
A seguir, mostramos como dois elementos simples são montados a partir de transistores: um inversor e NAND. No inversor, o transistor pMOS (em cima) é conectado à energia e o transistor nMOS (em baixo) é conectado ao terra. Na designação de transistores pMOS, há um pequeno círculo conectado ao portão. Dissemos que os dispositivos pMOS passam corrente quando a entrada é desativada, e os dispositivos nMOS passam corrente quando a entrada é ativada, por isso é fácil perceber que o sinal de saída (Out) sempre será o oposto do sinal de entrada (In). Observando o elemento NAND, vemos que ele requer quatro transistores e que a saída sempre será desativada se pelo menos uma das entradas estiver desativada. Conectar transistores dessa maneira para formar redes simples é o mesmo processo usado para projetar elementos lógicos mais complexos e outros circuitos dentro dos processadores.

Os blocos de construção na forma de elementos lógicos são tão simples que é difícil entender como eles se transformam em um computador em funcionamento. O processo de design consiste em combinar vários elementos para criar um pequeno dispositivo que pode executar uma função simples. Em seguida, você pode combinar muitos desses dispositivos para criar algo que desempenhe uma função mais complexa. O processo de combinar componentes individuais para criar uma estrutura de trabalho é exatamente o processo usado hoje para criar chips modernos. A única diferença é que um chip moderno consiste em
bilhões de transistores.
Como um pequeno exemplo, vamos usar um somador simples - um somador completo de 1 bit. Ele recebe três sinais de entrada - A, B e Carry-In (sinal de entrada de transferência) e cria dois sinais de saída - Soma (soma) e Carry-Out (sinal de saída de transferência). O circuito mais simples usa cinco elementos lógicos e eles podem ser conectados juntos para criar um somador de qualquer tamanho. Nos esquemas modernos, esse processo é aprimorado pela otimização de parte da lógica e dos sinais de transferência, mas os princípios fundamentais permanecem os mesmos.
A saída de Sum é A ou B, mas nunca para os dois, ou existe um sinal de transporte de entrada e, em seguida, A e B são ativados ou desativados. A saída de transferência é um pouco mais complicada. Está ativo quando A e B estão ativados ao mesmo tempo ou há uma Carry-in e um de A ou B está ativado. Para conectar vários somadores de 1 bit para criar um somador mais amplo, basta conectar a Carry-out do bit anterior à Carry-in do bit atual. Quanto mais complicados os circuitos, mais confusa é a lógica, mas essa é a maneira mais fácil de adicionar dois números. Os processadores modernos usam dispositivos de adição mais sofisticados, mas seus circuitos são muito complicados para essa revisão. Além dos somadores, os processadores também contêm dispositivos para dividir, multiplicar e versões de todas essas operações de ponto flutuante.
Essa combinação de sequências de elementos para executar uma função nos sinais de entrada é chamada
lógica combinatória . No entanto, esse não é o único tipo de lógica usada nos computadores. Não será muito útil se não pudermos armazenar dados ou rastrear o status. Para poder salvar dados, precisamos de lógica sequencial.
A lógica seqüencial é construída conectando ordenadamente inversores e outros elementos lógicos, para que suas saídas transmitam sinais de feedback à entrada dos elementos. Esses loops de feedback são usados para armazenar um bit de dados e são chamados de
RAM estática ou SRAM. Essa memória é chamada de RAM estática, em oposição à RAM dinâmica (DRAM), porque os dados armazenados são sempre diretamente conectados à tensão positiva ou ao terra.
A maneira padrão de implementar um bit SRAM é com o circuito de 6 transistores mostrado abaixo. O sinal superior marcado como WL (
Word Line ) é o endereço e, quando ativado, os dados armazenados nessa célula de 1 bit são transferidos para a
linha de bit marcada como BL. A saída BLB é chamada de
Bit Line Bar ; este é apenas o valor invertido da linha de bits. Você deve reconhecer os dois tipos de transistores e entender que M3 com M1, como M4 com M2, formam um inversor.
A SRAM é usada para criar caches e registros ultra-rápidos dentro dos processadores. Essa memória é muito estável, mas requer seis a oito transistores para armazenar cada bit de dados. Portanto, em comparação com a DRAM, é extremamente caro em termos de custo, complexidade e área no chip. A RAM dinâmica, por outro lado, armazena dados em um pequeno capacitor, em vez de usar portas lógicas. É chamado de dinâmico, porque a tensão no capacitor pode variar significativamente, pois não está conectada à energia ou ao terra. Existe apenas um transistor usado para acessar os dados armazenados no capacitor.
Como a DRAM requer apenas um transistor por bit e é altamente escalável, ela pode ser compactada de maneira densa e barata. A desvantagem da DRAM é que a carga no capacitor é tão pequena que precisa ser atualizada constantemente. É por isso que, depois de desligar a energia do computador, todos os capacitores são descarregados e os dados na RAM são perdidos.
Empresas como Intel, AMD e Nvidia não publicam diagramas de circuitos de seus processadores, portanto, é impossível mostrar circuitos elétricos completos para processadores modernos. No entanto, esse somador simples permite que você tenha a ideia de que mesmo as partes mais complexas do processador podem ser divididas em elementos lógicos e de armazenamento e, em seguida, em transistores.
Agora que sabemos como alguns componentes do processador são fabricados, precisamos descobrir como juntar tudo e sincronizar. Todos os principais componentes do processador estão conectados a um
sinal de relógio . Alternadamente, possui alta e baixa tensão, alterando-a com um determinado intervalo, chamado
frequência . A lógica dentro do processador geralmente alterna os valores e executa os cálculos quando o sinal do relógio altera a tensão de baixa para alta. Ao sincronizar todas as partes, podemos garantir que os dados sempre cheguem no momento certo, para que não haja falhas no processador.
Você já deve ter ouvido falar que pode aumentar a velocidade do relógio para aumentar o desempenho do processador. Esse aumento de desempenho se deve ao fato de que a troca de transistores e lógica dentro do processador começa a ocorrer com mais frequência do que o pretendido. Como há mais ciclos por segundo, mais trabalho pode ser feito e o processador terá um desempenho aprimorado. No entanto, isso é verdade até certo ponto. Os processadores modernos geralmente operam em frequências de 3,0 GHz a 4,5 GHz, e esse valor não mudou muito nos últimos dez anos. Assim como uma corrente de metal não é mais forte que seu elo mais fraco, um processador não pode correr mais rápido que sua parte mais lenta. Ao final de cada ciclo de clock, cada elemento do processador deve concluir seu trabalho. Se algumas peças ainda não o tiverem concluído, o sinal do relógio será muito rápido e o processador não funcionará. Os projetistas chamam essa parte mais lenta de
Caminho Crítico, e é ele quem determina a frequência máxima com a qual o processador pode trabalhar. Acima de uma certa frequência, os transistores simplesmente não têm tempo para trocar com rapidez suficiente e começam a falhar ou produzir valores de saída incorretos.
Ao aumentar a tensão do processador, podemos acelerar a troca de transistores, mas isso também funciona até um certo limite. Se muita tensão for aplicada, corremos o risco de queimar o processador. Quando aumentamos a frequência ou a voltagem do processador, ele sempre começa a irradiar mais calor e consumir mais energia. Isso ocorre porque a energia do processador é diretamente proporcional à frequência e proporcional ao quadrado da tensão. Para determinar o consumo de energia do processador, consideramos cada transistor como um pequeno capacitor que precisa ser carregado ou descarregado quando seu valor muda.
A fonte de alimentação é uma parte tão importante do processador que, em alguns casos, até a metade dos contatos físicos no chip pode ser usada apenas para energia ou aterramento. Alguns chips em plena carga podem consumir mais de 150 amperes e, com toda essa corrente, você precisa ser controlado com muito cuidado. Para comparação: o processador central gera mais calor por unidade de área do que um reator nuclear.
O sinal do relógio nos processadores modernos ocupa cerca de 30-40% de sua potência total, porque é muito complexo e deve gerenciar muitos dispositivos diferentes. Para economizar energia, a maioria dos processadores de baixo consumo de energia desabilita partes do chip quando não estão em uso. Isso pode ser feito desligando o relógio (este método é chamado Clock Gating) ou desligando a energia (Power Gating).
Os sinais do relógio criam outra dificuldade no design do processador: como suas frequências estão em constante crescimento, as leis da física começam a influenciar o trabalho. Apesar da velocidade extremamente alta da luz, ela não é grande o suficiente para processadores de alto desempenho. Se você conectar um sinal de relógio a uma extremidade do chip, quando o sinal chegar à outra extremidade, ele ficará fora de sincronia em uma quantidade significativa. Para sincronizar todas as partes do chip, o sinal do relógio é distribuído usando a chamada H-Tree. Essa é uma estrutura que garante que todos os pontos de extremidade estejam exatamente à mesma distância do centro.

Pode parecer que o design de cada transistor individual, sinal de relógio e contato de potência no chip é uma tarefa extremamente monótona e difícil, e é de fato isso. Embora milhares de engenheiros trabalhem para empresas como Intel, Qualcomm e AMD, eles não seriam capazes de projetar manualmente todos os aspectos do chip. Para projetar chips dessa escala, eles usam muitas ferramentas sofisticadas que geram automaticamente projetos e circuitos elétricos. Essas ferramentas geralmente obtêm uma descrição de alto nível do que o componente deve fazer e determinam a melhor configuração de hardware que atende a esses requisitos. Recentemente, surgiu uma direção de desenvolvimento chamada
Síntese de Alto Nível , que permite aos desenvolvedores especificar a funcionalidade necessária no código, após o qual os computadores determinam a melhor forma de alcançá-la no equipamento.
Da mesma maneira que você pode descrever programas de computador por meio de código, os designers podem descrever dispositivos de hardware com código. Idiomas como Verilog e VHDL permitem que os projetistas de equipamentos expressem a funcionalidade de qualquer circuito que criarem. Após a realização de simulações e verificação de tais projetos, eles podem ser sintetizados em transistores específicos, dos quais o circuito elétrico será composto. Embora a fase de verificação possa não parecer tão empolgante quanto projetar um novo cache ou kernel, é muito mais importante que eles. Para cada engenheiro de design contratado por uma empresa, pode haver cinco ou mais engenheiros de verificação.
A verificação de um novo projeto geralmente leva mais tempo e dinheiro do que a criação do próprio chip. As empresas gastam muito tempo e dinheiro na verificação, porque, após enviar o chip para a produção, ele não pode ser consertado. Em caso de erro no software, você pode liberar o patch, mas o equipamento funciona de maneira diferente. Por exemplo, a Intel descobriu um
bug no módulo de divisão de ponto flutuante de alguns chips Pentium e, como resultado, resultou em perdas equivalentes aos atuais US $ 2 bilhões.
É difícil compreender que pode haver vários bilhões de transistores em um chip e entender o que todos eles fazem. Se você quebrar o chip em seus componentes internos individuais, isso se tornará um pouco mais fácil. Os elementos lógicos são compostos de transistores, os elementos lógicos são combinados em módulos funcionais que executam uma tarefa específica e esses módulos funcionais são conectados para formar a arquitetura do computador que discutimos na primeira parte da série.
A maior parte do trabalho de design é automatizada, mas o acima exposto nos permite perceber o quão complexo é o novo CPU que acabamos de comprar.
Na segunda parte da série, falei sobre o processo de design da CPU. Discutimos transistores, portas lógicas, sinais de potência e relógio, síntese de projeto e verificação. Na terceira parte, descobriremos o que é necessário para a produção física do chip. Todas as empresas gostam de se gabar de quão moderno é o processo de fabricação (Intel 10nm, Apple e AMD 7nm etc.), mas o que esses números realmente significam? Falaremos sobre isso na próxima parte.
Leitura Recomendada