COMO UMA CPU LEMBRA

TIAGO GOTTARDO :: SEPTEMBER 12, 2026

O Intel Core i9-13900K (Raptor Lake) é um processador topo de linha da sua geração. Internamente, processadores modernos têm muito mais estado do que os registradores visíveis em assembly: registradores físicos usados para renomeação, execução fora de ordem, vetores, flags e outros buffers internos. Somando tudo isso, chegamos facilmente a milhares ou milhões de bits guardados dentro do chip antes mesmo de falar em cache ou RAM.

É muita memória disponível para processamento direto. Feynman teria terminado em segundos várias das contas que, no Projeto Manhattan, exigiam salas cheias de pessoas operando calculadoras mecânicas. Mas como um circuito elétrico tem a capacidade de se lembrar de uma informação?

SR Latch

Em 1918, William Eccles e F. W. Jordan criaram a forma mais rudimentar de guardar um bit. O SR latch consiste de um circuito de 2 inputs, 2 NOR gates e 2 outputs.

Circuito de um SR latch.

Os inputs S e R significam, respectivamente, set e reset. O output Q é a saída padrão e ~Q é a saída negada. Quando ambas as entradas são 0, Q mantém seu estado. Caso o set seja ativado, Q se torna 1; caso o reset seja ativado, ele vai para 0. Vejamos o diagrama de tempo:

O valor consegue ser guardado porque o output de cada NOR gate é direcionado ao input do outro. Essa realimentação permite que os estados se sustentem.

Diagrama de tempo do SR latch.

O SR latch tem um problema: a entrada proibida. Se ambas as entradas S e R são 1, Q e ~Q se tornam 0 e o padrão se quebra. Uma das formas de resolver é o D latch.

D Latch

Agora, continuaremos 2 inputs, porém com propósitos diferentes. O input D dirá qual o valor queremos registrar e o input Enable, quando queremos registrá-lo.

Circuito de um D latch.

Perceba que o princípio é o mesmo usado no SR latch. Porém, agora, temos o D conectado às duas entradas com um NOT gate na entrada do reset. Vamos ver como fica o diagrama de tempo:

Diagrama de tempo do D latch.

Podemos resumir a lógica assim:

text
S = D AND Enable
R = NOT D AND Enable

Quando Enable é 0, tanto S quanto R ficam 0, e o latch mantém seu estado. Quando Enable é 1, o valor de D decide se o latch será setado ou resetado.

O nosso D latch já funciona muito bem. Porém, se você entende um pouco sobre arquitetura de computadores, sabe que, em CPUs, os componentes sequenciais obedecem a um clock. À primeira vista, parece que apenas conectar um clock ao enable já seria o suficiente. Vamos entender por que isso não funciona e o que precisamos adicionar para capturar o valor apenas no instante certo.

Uma Maneira de Detectar a Borda do Clock

Com um NOT gate e um AND gate, podemos gerar um pulso curto a partir da borda de subida de um sinal. O truque consiste no delay causado pelo NOT gate. Quando o input se torna 1, o sinal chega antes à entrada de cima do AND gate. Então, por um breve momento, o output será 1. Assim que o sinal negativo chega à entrada de baixo do AND gate, ele volta a 0.

Circuito em t=0.
Circuito em t=1.
Circuito em t=2.

Vários computadores históricos, como o ENIAC, IBM 701, PDP-1 e PDP-8, usaram variações de circuitos de temporização e detecção de pulso. Hoje em dia, a referência principal de clock costuma vir de osciladores de cristal ou circuitos equivalentes mais estáveis; a detecção de borda e a distribuição do clock acontecem depois, dentro da lógica do sistema.

Master-Slave D Flip-Flop

A diferença entre um latch e um flip-flop é como o gatilho é acionado. Num latch, basta o input enable ser 1. Já num flip-flop, o que aciona é a transição entre 0 e 1, o que chamamos de edge (borda). Quando um circuito é disparado na transição de 0 para 1, o chamamos de rising-edge sensitive (sensível à transição de subida). E, no caso de 1 para 0, falling-edge sensitive (sensível à transição de descida).

Vejamos, então, a forma mais famosa de um D flip-flop: o master-slave. Aninhamos dois D latches, colocamos a saída Q do primeiro na entrada D do segundo e, por fim, conectamos sinais invertidos do clock em cada um.

Master-slave D flip-flop sensível à borda de subida.

Nesse caso, o circuito é sensível à borda de subida. Para transformá-lo em falling-edge sensitive, basta recolocar o NOT gate na entrada do segundo latch.

Master-slave D flip-flop sensível à borda de descida.

Computadores frequentemente usam flip-flops, latches e circuitos equivalentes para controlar quando uma mudança de estado pode acontecer. Entre um pulso e outro, portas lógicas estão fazendo contas, comparações e deslocamentos. Caso um latch ficasse transparente pelo tempo errado, uma mudança poderia atravessar mais de um estágio e alterar o estado guardado erroneamente.

Conclusão

Existem várias outras formas de flip-flops, como o JK flip-flop e o T flip-flop, e várias outras implementações além do master-slave, como TSPC, SAFF e pulse-triggered flip-flops. Mesmo assim, a sequência SR latch → D latch → D flip-flop master-slave é uma das mais didáticas: primeiro entendemos a realimentação, depois controlamos quando o valor pode entrar, e por fim sincronizamos essa captura com a borda do clock.

Recomendo implementar esses circuitos, vê-los funcionando e, como complemento, assistir aos vídeos do Ben Eater sobre cada tipo de flip-flop.