Pular para o conteúdo

Hardware e sistemas operacionais · parte 9 de 27

Clock e sincronização: como o tempo coordena os circuitos

Como o sinal de clock coordena flip-flops, por que o caminho crítico fixa a frequência máxima e os cuidados com setup, hold e skew.

intermediárioPublicada em · 40 min de leitura

Tamanho da fonte:
Largura da coluna:
Tom:
Espaço entre linhas:
Fonte:

Clock e sincronização

Numa fila de caixa de supermercado, todo mundo passa a compra quando a campainha toca. Ninguém começa antes do sinal, e ninguém espera o vizinho terminar a própria compra para começar a dele. A campainha é o clock de um processador, com uma diferença importante: em vez de tocar a cada poucos segundos, ela toca bilhões de vezes por segundo, e cada toque precisa dar tempo suficiente para que todas as contas do chip terminem antes do toque seguinte. Esta aula trata dessa campainha, de quanto tempo ela deixa para cada conta e do que acontece quando alguém chega atrasado.

A aula Circuitos sequenciais mostrou como um flip-flop guarda um bit numa borda do clock. Aqui o clock deixa de ser detalhe e vira o assunto. Vamos ver de onde ele vem, por que a frequência tem um teto, o que são as margens de setup e de hold, e por que um botão apertado por uma pessoa precisa de um tratamento especial antes de entrar num circuito síncrono.

Mapa da aula

SeçãoPergunta que responde
1. O que é o clockDe onde vem o sinal, e o que são período, frequência e ciclo?
2. Para que servePor que todos os registradores precisam de uma mesma referência de tempo?
3. Exemplos em contextos diferentesOnde aparece a mesma ideia de coordenar por uma batida comum?
4. Como funcionaComo a lógica entre dois registradores determina o período, e o que são setup, hold, skew e metaestabilidade?
5. Detalhes e bordasQuais limites o modelo da aula deixa de fora?
6. Erros comuns e boas práticasQuais equívocos aparecem quando alguém calcula frequência?
7. O programa que simulaComo os números de atraso viram período mínimo, margens e um sincronizador?
8. ExercíciosComo praticar, com as respostas?
9. GlossárioQuais termos a aula usa?

Os números desta aula são de exemplo, salvo onde a seção de fontes diz o contrário. Quando um valor vem de um modelo, a figura ou o parágrafo seguinte avisa.

1. O que é o clock

Um sinal de clock é uma onda quadrada que alterna entre nível alto e nível baixo, sempre no mesmo ritmo. Quase todo circuito síncrono usa um clock para decidir quando guardar valores nos flip-flops. Ele não carrega dados. Carrega apenas a informação de quando olhar para os dados.

A fonte do sinal costuma ser um cristal de quartzo. Quando recebe uma tensão, o cristal vibra numa frequência que depende do seu corte e do seu tamanho, e essa vibração é estável o bastante para servir de relógio de referência. Um cristal comum de computador fica em torno de algumas dezenas de megahertz, o que é lento demais para a maioria dos processadores. Por isso entra um PLL, sigla de phase-locked loop, ou malha de fase travada: um circuito que compara o sinal do cristal com um sinal gerado internamente e ajusta o oscilador até que os dois fiquem travados em uma relação fixa. Se a relação for de multiplicar por 120, um cristal de 25 MHz vira um clock de 3 GHz. Esses números são de exemplo, e a figura 01 mostra a cadeia.

Cristal de quartzo de 25 MHz alimenta um PLL que multiplica por 120 e entrega 3 GHz, e uma árvore de fios leva o clock a todos os flip-flops
figura 1 · Cadeia do clock: do cristal de quartzo aos flip-flops (valores de exemplo)

A figura 01 mostra a cadeia de exemplo. O cristal entrega 25 MHz ao PLL, que multiplica por 120 e entrega 3 GHz. Esse sinal então é distribuído por uma árvore de fios e buffers, que leva a mesma referência a todos os flip-flops do chip. A cor laranja marca o que o projetista controla, a cor verde marca a distribuição e a cor roxa marca o sistema em estudo. Os 25 MHz e os 3 GHz são valores de exemplo, escolhidos para que a multiplicação fique fácil de conferir.

Antes de seguir, precisamos de três palavras que aparecem em todo texto sobre clock. O período é o tempo de um ciclo completo, medido do começo de um pulso até o começo do pulso seguinte. A frequência é o inverso do período: quantos ciclos cabem em um segundo. O ciclo, ou duty cycle, é a fração do período em que o sinal fica em nível alto. A figura 02 mostra as três grandezas numa onda de exemplo.

Onda quadrada de exemplo com período de 10 ns: a borda de subida se repete a cada 10 ns, com metade do ciclo em nível alto, ou seja, 100 MHz
figura 2 · Onda de clock de exemplo: período de 10 ns, 100 MHz e ciclo de 50%

Na figura 02, o período vale 10 ns, e como 1 dividido por 10 ns dá 100 MHz, essa é a frequência. O sinal fica alto por 5 ns e baixo por 5 ns em cada ciclo, então o ciclo é de 50%. A borda de subida, marcada na figura em 10 ns, é o instante em que o sinal passa de baixo para alto, e é nela que os flip-flops da dos flip-flops da aula 2.3 capturam o dado. Repare que a figura desenha bordas quase verticais, mas no circuito real a transição leva um tempo pequeno e diferente de zero, e esse detalhe volta na seção de metaestabilidade.

2. Para que serve

A aula 2.3 mostrou que um flip-flop captura o dado numa borda, e que um registrador é uma coleção deles. Falta a pergunta que aquela aula deixou de lado: quem decide quando é a borda? Se cada flip-flop decidisse sozinho, o registrador de uma parte do chip poderia atualizar antes do registrador de outra parte, e a conta que depende dos dois ficaria com valores de instantes diferentes. O clock resolve isso dando uma única referência para todos. Todos os flip-flops de um sistema síncrono olham para a mesma borda, e o estado do chip inteiro muda de uma vez, em instantes que o projetista conhece.

A referência comum traz uma consequência que a maioria das pessoas não espera. Entre duas bordas consecutivas, a lógica que liga um registrador ao seguinte tem de terminar. Um somador de 64 bits leva algum tempo para estabilizar a saída depois de receber as entradas, e se a próxima borda chegar antes, o registrador captura um valor meio calculado. O clock, portanto, não só coordena. Ele também cobra: o período precisa ser grande o bastante para que toda a lógica assente antes da borda seguinte. A seção 4 mostra como calcular esse período mínimo, e a frequência máxima sai dele.

3. Exemplos em contextos diferentes

O primeiro exemplo é a esteira de uma fábrica de embalagens. A esteira anda em passos, e a cada passo cada estação faz o seu trabalho numa peça. Uma estação que demora mais que o passo atrasa a linha inteira, e a velocidade da fábrica é a da estação mais lenta, mesmo que as outras sejam rápidas. Esse é o caminho crítico em forma de máquina. A analogia tem limite claro: a esteira não tem atraso elétrico, e uma estação não pode começar antes do passo, o que no chip também vale para o flip-flop que espera a borda.

O segundo exemplo é o regente de uma orquestra. A batuta marca a entrada de cada naipe, e todos tocam a nota no mesmo instante. Quando o regente faz um gesto, os músicos mais distantes ouvem a marcação um pouco depois, e a orquestra soa um pouco espalhada. A analogia ajuda a pensar no skew, que é a diferença de chegada do clock entre dois pontos do chip. Mas o regente não tem atraso de propagação, e a batuta não se cansa de um lado para o outro. O regente explica a coordenação e não a física.

O terceiro exemplo é o semáforo de um cruzamento. Todos os carros de uma via arrancam quando a luz fica verde, e a duração do verde precisa caber a travessia do carro mais lento que ainda vai passar. Se o verde dura menos do que a travessia, o último carro fica preso no meio, que é o equivalente a um valor capturado antes de a lógica assentar. A analogia do semáforo falha num ponto: um semáforo troca de cor pelo relógio de uma central, e um chip gera o seu próprio clock a partir de um cristal, com o PLL cuidando da sincronia.

Os três exemplos têm a mesma estrutura. Uma referência comum manda a mudança, e o tempo entre duas mudanças precisa caber o trabalho mais lento. É isso que o resto da aula quantifica.

4. Como funciona

4.1 Período, frequência e ciclo na prática

A seção 1 definiu período, frequência e ciclo. Na prática, o projetista escolhe um período e escreve o circuito para caber dentro dele. Um período de 10 ns dá 100 MHz. Um período de 5 ns dá 200 MHz. Diminuir o período aumenta a frequência, mas só funciona se a lógica entre os registradores couber no novo período. Essa condição é o assunto das próximas seções, e ela explica por que o número da frequência nunca vem sozinho: sempre existe um caminho de lógica que decide o teto.

Vale lembrar também que o ciclo de 50% da figura 02 é uma escolha comum, mas não é uma lei. Alguns projetos usam ciclos diferentes, e o que importa para o caminho de lógica é a distância entre duas bordas de subida, que é o período.

4.2 Atraso de propagação e caminho crítico

Atraso de propagação é o tempo que um sinal leva para atravessar uma porta ou um fio e aparecer na saída. Uma porta NÃO real leva uma fração de nanossegundo para mudar a saída depois que a entrada muda, e um fio longo também leva tempo, porque o sinal precisa carregar a capacitância do caminho. A aula 2.2 tratou dessa ideia com o modelo de atraso unitário e viu que um somador em cadeia cresce em atraso com o número de bits.

Quando um sinal atravessa várias portas em série, o atraso total é a soma dos atrasos de cada uma. O caminho que mais demora para estabilizar a saída é o caminho crítico, e ele é o que decide o período. Isso vale mesmo quando o resto do chip é rápido: basta um caminho lento para que a frequência inteira caia. Um engenheiro que procura o gargalo de um chip começa exatamente por esse caminho, e as ferramentas de projeto fazem uma checagem automática de todos os caminhos para encontrá-lo.

A figura 03 mostra um caminho de exemplo entre dois registradores. O registrador A entrega o dado 0,5 ns depois da borda, o que é o seu atraso de clock para Q. Depois o dado atravessa três portas, de 2,0 ns, 2,0 ns e 1,0 ns, e chega ao registrador B. Esses 5,0 ns de lógica formam o caminho crítico do exemplo.

Caminho crítico de exemplo entre dois registradores: 0,5 ns de clock para Q, 5,0 ns de lógica em três portas e 0,5 ns de setup, somando 6,0 ns
figura 3 · Caminho crítico entre dois registradores: 0,5 + 5,0 + 0,5 = 6,0 ns (exemplo)

A figura 03 mostra só o caminho, e não a conta. Os valores de 0,5 ns e 2,0 ns são de exemplo e não foram medidos em nenhum processo. A conta do período mínimo entra na seção seguinte, depois de uma palavra sobre o último termo.

Para que a borda seguinte capture o valor certo, o dado precisa chegar ao registrador B antes do tempo de setup, que é o intervalo que o flip-flop exige entre a chegada estável do dado e a borda. A aula 2.3 definiu setup e hold com as notas da Universidade de Maryland e da UCSB, e aqui basta usar o valor: o exemplo fixa setup em 0,5 ns.

Juntando as três partes, o período mínimo é a soma do atraso de clock para Q, do caminho de lógica e do setup. Esse período é o menor intervalo em que o circuito funciona com o valor certo.

Exemplo resolvido: período mínimo e frequência máxima

Os valores de exemplo são: atraso de clock para Q de 0,5 ns, caminho de lógica de 5,0 ns e setup de 0,5 ns. A conta é:

T mínimo = 0,5 + 5,0 + 0,5 = 6,0 ns

A frequência máxima vem do inverso do período. Como 1 dividido por 6,0 ns dá cerca de 0,1667 por nanossegundo, e 1 por nanossegundo é 1000 MHz, a frequência máxima é 166,7 MHz. O programa da seção 7 faz a mesma conta em picossegundos e imprime 6000 ps e 166,7 MHz. Os números de entrada são de exemplo, e a conta vale para o modelo, não para um chip.

Repare que o período não depende só da lógica. O atraso de clock para Q e o setup entram na conta porque o dado precisa sair do registrador A depois da borda e chegar ao registrador B antes da borda seguinte. Quem esquece esses dois termos calcula uma frequência que o chip não sustenta.

4.3 Margem de setup e violação de setup

A margem de setup, ou folga de setup, é a diferença entre o instante em que o dado chega e o instante limite para que ele seja capturado. Quando a folga é positiva, o dado chega a tempo. Quando é negativa, o dado chega depois do limite, e o flip-flop captura um valor que não é o esperado. Isso é uma violação de setup.

A figura 04 usa o mesmo dado, que chega em 5,5 ns depois da borda de lançamento, e compara dois períodos de clock. Com T de 5 ns, a janela de setup vai de 4,5 ns a 5 ns, e o dado só chega em 5,5 ns, então a folga é negativa. Com T de 6 ns, a janela vai de 5,5 ns a 6 ns, e o dado chega exatamente no início dela, com folga zero.

Duas janelas de setup com o mesmo dado chegando em 5,5 ns: com clock de 5 ns a captura falha, e com clock de 6 ns o dado passa com folga zero
figura 4 · Setup: o mesmo dado chega em 5,5 ns; com T = 5 ns falha, com T = 6 ns passa

A figura 04 mostra a violação do ponto de vista de tempo. No painel de cima, o dado fica estável só depois da janela e a borda de 5 ns captura o valor antigo. No painel de baixo, o clock mais lento dá tempo suficiente, e o dado já está estável quando a janela começa. A janela é de exemplo, com setup de 0,5 ns.

A folga de setup tem uma fórmula que vale para qualquer caminho:

folga de setup = (T - setup) - (clock para Q + caminho de lógica)

Com T de 5 ns, a conta dá (5,0 - 0,5) - (0,5 + 5,0) = 4,5 - 5,5 = -1,0 ns. A violação é de 1,0 ns. Com T de 6 ns, a conta dá 0, e com T de 7 ns dá 1,0 ns de folga. Por isso a violação de setup se resolve reduzindo a frequência: aumentar o período dá mais tempo para a lógica assentar. O custo é o desempenho, e o projetista troca o caminho lento por um mais rápido, ou quebra o caminho com um registrador intermediário, como na seção 4.10.

4.4 Margem de hold e violação de hold

O hold é a condição oposta. Depois da borda que captura o dado, o valor precisa continuar estável por um pequeno intervalo, o tempo de hold. Se um dado novo chegar antes do fim desse intervalo, o registrador pode capturar o valor errado, porque o dado mudou no instante em que ele ainda estava olhando.

A violação de hold costuma aparecer quando o clock não chega ao mesmo tempo nos dois registradores. Suponha que o registrador B receba o clock 0,6 ns depois do registrador A, o que é o skew da seção 4.5. Depois da borda de A, o dado novo sai do registrador A e atravessa um caminho de 0,05 ns até o registrador B. Esse dado chega em 0,5 ns (o clock para Q mínimo) mais 0,05 ns, ou seja, 0,55 ns. Mas o registrador B só fecha a janela de hold em 0,6 ns mais 0,2 ns de hold, que dá 0,8 ns. O dado novo entra antes do fim da janela, e a folga de hold é 0,55 - 0,8 = -0,25 ns.

Diagrama de tempo de hold com skew: o clock do registrador B chega 0,6 ns depois do A, e o dado muda em 0,55 ns, antes de a janela de hold de B terminar
figura 5 · Hold: o dado muda antes de o registrador B terminar a janela de hold

A figura 05 mostra as três linhas que importam. A linha de cima é o clock do registrador A, a do meio é o clock do registrador B, atrasado 0,6 ns, e a de baixo é o dado que entra no registrador B. O dado muda para 0 em 0,55 ns, e a janela de hold do registrador B vai de 0,6 ns a 0,8 ns. Como a mudança cai antes do fim dessa janela, o registrador pode capturar o valor novo no lugar do antigo. A figura usa valores de exemplo e não mede nenhum circuito.

A folga de hold tem uma propriedade que surpreende quem aprende primeiro o setup: ela não depende do período. Em nenhuma parte da conta aparece T. O dado novo sai da borda de A e chega ao registrador B sempre no mesmo instante relativo, e a janela de hold de B também acontece sempre no mesmo instante relativo. Por isso baixar a frequência não cura a violação de hold. O programa da seção 7 confirma isso: a folga de -250 ps aparece igual com T de 5 ns e com T de 10 ns.

O remédio é diferente. Adicionar atraso no caminho curto, com um buffer de 0,3 ns, faz o dado novo chegar em 0,85 ns, e a folga passa para +0,05 ns. As ferramentas de projeto inserem esses buffers automaticamente. Para o leitor, a regra é: setup se resolve com período, hold se resolve com atraso.

4.5 Skew e jitter

Skew é a diferença de chegada do clock entre dois pontos do chip. A figura 06 mostra um gerador que alimenta dois registradores por fios de comprimentos diferentes. O sinal chega ao registrador A em 0,3 ns e ao registrador B em 0,9 ns, então o skew entre eles é de 0,6 ns.

Um gerador de clock alimenta dois registradores por fios de tamanhos diferentes, e o clock chega ao registrador B 0,6 ns depois do A: esse desvio é o skew
figura 6 · Skew de 0,6 ns: o mesmo clock chega em dois registradores em instantes diferente

O skew não é bom nem ruim por si. Ele muda a conta de cada caminho. Quando o registrador de destino recebe o clock depois, o setup do caminho ganha tempo, e o hold perde. Quando recebe antes, acontece o contrário. Por isso um projeto de clock tenta manter o skew pequeno e bem controlado, e as árvores de distribuição usam buffers com o mesmo número de estágios em cada ramo para equilibrar os atrasos. Os valores de 0,3 ns e 0,9 ns são de exemplo.

Jitter é a variação do período de um ciclo para o outro. Se a borda de subida chega um pouco antes num ciclo e um pouco depois no seguinte, a folga de setup e a de hold oscilam, e o projetista precisa reservar uma margem extra para o pior caso. O jitter vem de ruído na alimentação, de variações no PLL e de efeitos de temperatura. A aula não mediu nenhum jitter, e não cita um valor de fonte para processo algum. Quem projeta um chip precisa desse número, e ele aparece nas folhas de dados de fabricantes, que esta aula não consultou.

4.6 Por que existe um limite de frequência

Até agora a frequência máxima apareceu como consequência do caminho de lógica. Ela tem outras duas causas, que são o calor e a potência consumida. Vale separar as três, porque cada uma aparece de um jeito diferente.

A primeira é o atraso, já visto: o caminho crítico define o período mínimo. A segunda é o calor. Quanto mais o chip troca de estado por segundo, mais corrente passa pelos transistores e mais calor é gerado. A terceira é a potência dinâmica, que é a energia gasta para carregar e descarregar as capacitâncias do circuito a cada troca. O modelo clássico é

P = C · V² · f

em que C é a capacitância que é carregada, V é a tensão de alimentação e f é a frequência. A relação com a aula Transistor como chave é direta: cada troca de uma porta CMOS carrega e descarrega a capacitância do fio e da carga, e o número de trocas por segundo é a frequência. A fórmula tem uma consequência forte: a tensão entra ao quadrado. Dobrar a tensão quadruplica a potência, e reduzir a tensão junto com a frequência corta a potência muito mais do que só reduzir a frequência.

A figura 07 traduz essa fórmula num gráfico, com um valor de capacitância de exemplo, C = 1 nF. Com essa escolha, P em watts vale V² vezes f em gigahertz. A curva de 1,0 V sobe a 3 W em 3 GHz. A curva de 0,8 V fica em 1,92 W no mesmo ponto.

Potência dinâmica contra frequência no modelo P = C·V²·f com C de 1 nF: a 3 GHz, baixar a tensão de 1,0 V para 0,8 V reduz a potência de 3 W para 1,92 W
figura 7 · Potência dinâmica contra frequência: baixar a tensão junto corta a potência (mod

A figura 07 é um cálculo do modelo, e não uma medida. A linha de cada tensão mostra que a potência cresce em proporção direta com a frequência. A diferença entre as duas linhas é o ganho de baixar a tensão, que é de 36% no mesmo ponto de 3 GHz (1,92 dividido por 3, menos 1, dá -36%). Se, além da tensão, a frequência também cair de 3 GHz para 2,4 GHz, a potência vai para 0,64 vezes 2,4, ou seja 1,54 W, cerca de metade do valor inicial. Essa é a lógica do DVFS, sigla de dynamic voltage and frequency scaling, ou escalonamento dinâmico de tensão e frequência: o sistema reduz a tensão e a frequência juntas quando a carga é pequena, e as devolve quando a carga aumenta. O modelo não leva em conta a corrente de fuga, que existe em todo transistor e cresce com a temperatura, e por isso a aula não dá o valor real da economia em nenhum chip.

Os processadores modernos fazem o caminho contrário em parte do tempo. Quando há folga de temperatura e potência, o chip aumenta a frequência acima da base para acelerar uma tarefa curta, comportamento que costuma ser chamado de boost. A conta de potência explica por que esse aumento é temporário: a potência cresce com a frequência, e o calor acumulado é o que limita o boost.

A figura 08 coloca a história das frequências em uma linha. A Intel publicou o 4004 em 15 de novembro de 1971 com clock máximo de 740 kHz. O 8086 foi lançado em junho de 1978 com clock original de 5 MHz, e a versão 8086-2, de 1980, chegou a 8 MHz. O Core i9-14900KF, lançado no quarto trimestre de 2023 segundo a página da Intel, tem turbo máximo de 6 GHz. Esse último número é o pico que o chip atinge por pouco tempo, e não um clock fixo, e a diferença importa para qualquer comparação.

Clock máximo de CPUs em escala logarítmica: Intel 4004 em 1971, 8086 em 1978 e 1980, Core i9-14900KF em 2023 e o cancelamento do Tejas em 2004
figura 8 · Clock máximo de CPUs reais, de 1971 a 2023, com fonte em cada ponto

A figura 08 usa escala logarítmica porque a frequência cresce mil vezes entre 1971 e 2023. Em escala linear, os primeiros chips ficariam colados ao eixo. O ponto de 2004 marca o cancelamento do projeto Tejas, da Intel, em 7 de maio de 2004, atribuído pela Wikipedia a problemas de calor e de consumo de energia. A figura não afirma que a frequência parou de subir naquele ano, e a aula não confirmou por fonte primária a data de 2005 que costuma aparecer quando se fala em parede de potência. O que a figura mostra é que a frequência deixou de crescer no ritmo das décadas anteriores, e que o cancelamento do Tejas é um sinal concreto dessa mudança.

4.7 Sinais assíncronos, metaestabilidade e sincronizador

Até aqui todos os sinais do circuito mudaram em sintonia com o clock. Um botão apertado por uma pessoa não segue essa regra. O instante em que a pessoa aperta é arbitrário, e ele pode cair em qualquer ponto do ciclo, inclusive perto da borda. Um sinal assim é assíncrono em relação ao clock.

Se o botão entrasse direto num flip-flop, o projeto violaria o setup ou o hold em algum momento, porque não há como garantir que a transição fique fora da janela. Quando isso acontece, a aula 2.3 explicou que o flip-flop pode entrar num estado metaestável, um estado intermediário, nem zero nem um, que dura um tempo imprevisível antes de cair para um dos dois valores. A figura 09 mostra esse comportamento com curvas ilustrativas: a saída parte do meio do nível e se resolve para 1 ou para 0, e a velocidade da resolução depende de quão perto do meio ela começou.

Curvas ilustrativas de um flip-flop metaestável que parte do meio do nível e se resolve para 1 ou para 0 com o tempo, medido em unidades de tau
figura 9 · Metaestabilidade ilustrativa: a saída parte do meio e se resolve para 0 ou 1

A figura 09 não é medida. As duas curvas são fórmulas escolhidas para mostrar o mecanismo, com a constante de tempo tau como unidade de tempo. O ponto da figura é que a saída resolve com o tempo, mas não instantaneamente, e que o projeto precisa dar tempo para essa resolução acontecer antes de o valor ser usado. Quando o tempo é curto demais, o sistema lê um valor que ainda não existe.

A solução padrão é o sincronizador de dois estágios, que aparece na figura 10. O sinal assíncrono entra no flip-flop 1, que é o estágio que pode ficar metaestável. O flip-flop 2 captura a saída do primeiro na borda seguinte, e o sistema só lê a saída do segundo. Entre as duas bordas há um ciclo inteiro para o flip-flop 1 resolver. Com esse ciclo, a chance de o flip-flop 2 receber um valor ainda metaestável cai muito, mas não chega a zero. Um sincronizador reduz a probabilidade de falha, e não a elimina.

Sincronizador de dois estágios: o botão entra no flip-flop 1, que pode ficar metaestável, e o flip-flop 2 entrega ao sistema um sinal quase sempre estável
figura 10 · Sincronizador de dois estágios para um botão que muda sem relação com o clock

A figura 10 mostra o fluxo. O botão, que é a entrada assíncrona, entra no flip-flop 1. A seta rotulada como um ciclo para resolver é a janela que o segundo flip-flop dá ao primeiro. A lógica do sistema só enxerga a saída do flip-flop 2. Os tons seguem a ideia: laranja para o que chega de fora, rosa para o estágio que pode falhar, verde para o que já está seguro, e roxo para o sistema.

O programa da seção 7 faz a conta de forma simulada. Com 200 mil transições em posições aleatórias em relação à borda, cerca de 1% cai na janela de captura (por construção do modelo), e nessas transições o primeiro estágio, com um único flip-flop, deixa 38 leituras metaestáveis, enquanto o segundo estágio deixa apenas uma. Os números dependem de constantes de exemplo, e o que se confirma é a queda da falha com o segundo estágio.

4.8 Cruzamento entre domínios de clock

Um chip real tem mais de um clock. Um núcleo de processador pode rodar em uma frequência, e a interface com a memória ou com um periférico em outra, e às vezes os dois clocks nem têm relação entre si. O cruzamento entre esses domínios é o mesmo problema do botão, em escala maior: um sinal que muda em um ritmo chega a um circuito que olha em outro ritmo.

Para um sinal de controle de um bit, a solução é o sincronizador de dois estágios da seção 4.7. Para um barramento com muitos bits, o sincronizador não basta, porque os bits podem chegar em estágios diferentes e formar um valor misto. Nesse caso o projeto usa uma fila de dois domínios, uma FIFO com ponteiros sincronizados, ou um protocolo de handshake, em que cada lado confirma o recebimento antes de o outro mudar. A aula não detalha essas estruturas, que ficam para as fases de memória e de sistema da trilha.

4.9 Clock gating

Clock gating é a técnica de desligar o clock de um bloco que não está sendo usado. Se o clock não chega aos flip-flops de um bloco, esses flip-flops não trocam de estado, e a potência dinâmica desse bloco cai a zero, porque o f da fórmula da seção 4.6 passa a valer zero para ele. É uma forma direta de aplicar a conta de potência: o bloco parado não gasta energia para trocar bits que não mudam.

A técnica tem um risco. Se a porta que liga o clock ao bloco mudar de estado no meio de um pulso, o bloco recebe uma borda falsa, chamada de glitch de clock, e pode capturar valores errados. Por isso o projeto de clock gating usa células especiais que só deixam o clock passar durante o nível baixo, e a aula não detalha essas células. O que vale guardar é o princípio: como a potência dinâmica é proporcional à frequência, desligar o clock é a forma mais barata de cortar a potência de um bloco ocioso.

4.10 Pipeline como forma de encurtar o caminho crítico

Quando o caminho crítico é longo, a frequência cai. O pipeline é a técnica que divide esse caminho em estágios separados por registradores. Cada estágio fica com um pedaço da lógica, e o período passa a depender só do pedaço mais longo, mais o custo do registrador.

Tome um caminho de 8 ns. Sem pipeline, o período é de 8 ns de lógica mais 0,5 ns de clock para Q e 0,5 ns de setup, ou seja, T = 9,0 ns, que dá 111,1 MHz. Com dois estágios, cada um com 4 ns de lógica e o mesmo custo de registrador, o período de cada estágio é 4,0 + 0,5 + 0,5 = 5,0 ns, que dá 200 MHz. A frequência sobe 1,8 vez, e não 2 vezes, porque o registrador extra custa 1 ns por ciclo. O custo se vê também na latência: um dado que antes atravessava o caminho em um ciclo de 9 ns agora atravessa dois ciclos de 5 ns, ou seja 10 ns, e chega 1 ns mais tarde. A figura 11 mostra o antes e o depois, com o período em cada um.

Caminho de 8 ns antes e depois de um pipeline: sem registrador intermediário o período é 9 ns, e com dois estágios de 4 ns o período cai para 5 ns
figura 11 · Pipeline: caminho de 8 ns partido em dois de 4 ns, com um registrador extra (exe

A figura 11 coloca os dois casos lado a lado. O grupo de cima é o circuito sem pipeline, com um único bloco de 8 ns entre dois registradores. O grupo de baixo tem um registrador a mais no meio, dividindo a lógica em duas metades de 4 ns. As cores seguem a regra das figuras anteriores: laranja para os registradores, rosa para a lógica longa e roxo para as metades. Os valores de tempo são de exemplo.

A ideia do pipeline aparece aqui só para mostrar o efeito no período. O pipeline completo de um processador, com busca, decodificação, execução e escrita de instruções, é assunto da fase 5 da trilha. Antes disso, vale a conta da seção: o pipeline encurta o período, e o custo é o registrador extra e a latência maior.

5. Detalhes e bordas

O modelo desta aula tem um atraso fixo para cada porta, e o circuito real não tem. O atraso depende da tensão, da temperatura, do carregamento da saída e da variação de fabricação de cada transistor. Por isso o projeto trabalha com pior caso: a ferramenta de análise de temporização estática, em inglês static timing analysis, calcula os atrasos de todos os caminhos nos piores cenários de processo, tensão e temperatura, e só aprova um projeto se todas as folgas de setup e de hold forem positivas. A aula não usou essa ferramenta, e apresenta a conta à mão para que o leitor entenda o que a ferramenta faz.

Outro detalhe é que uma violação de setup nem sempre quebra o chip de forma visível. Às vezes o flip-flop captura o valor errado apenas em certas temperaturas ou em certos dados, e o defeito só aparece depois de muitas horas de uso. Isso torna os testes de temperatura e de tensão tão importantes quanto a conta.

Também vale notar que o período da seção 4 é o mínimo para um circuito que só usa lógica combinacional entre registradores. Quando há realimentação sem registrador no meio, como num contador que lê o próprio valor, o caminho crítico é o laço inteiro, e a conta muda. Esse caso aparece com máquinas de estados, assunto da aula 2.5.

Por fim, o clock nunca é o único sinal de tempo do chip. Interfaces com memória, com disco e com rede têm seus próprios clocks e protocolos, e o cruzamento entre eles é o tema da seção 4.8. Uma frequência de chip, sozinha, não diz quanta informação passa por cada interface.

6. Erros comuns e boas práticas

O erro mais difundido é achar que clock mais alto sempre significa mais rápido. O clock define quantos ciclos cabem em um segundo, e não quanto trabalho cada ciclo faz. Um chip de 3 GHz com caminho de lógica longo pode terminar menos contas por segundo do que um chip de 2 GHz que faz mais trabalho por ciclo, porque o segundo tem um caminho crítico curto. Quem compara processadores só pela frequência compara a campainha e ignora a fila. Todo mundo acredita nisso uma vez, e quem diz que nunca acreditou provavelmente nunca comparou dois chips com benchmark na mão.

O segundo erro é tentar curar uma violação de hold reduzindo a frequência. Como a folga de hold não depende do período, o chip continua violando na frequência mais baixa. A boa prática é diagnosticar pelo tipo de violação: setup pede período maior ou caminho mais curto, e hold pede atraso extra no caminho curto.

O terceiro erro é calcular o período sem o clock para Q e sem o setup, somando só a lógica. A conta parece plausível e dá um número 1 ns menor que o real no exemplo da seção 4. A boa prática é escrever a soma completa, com os três termos, toda vez que se calcula um período.

O quarto erro é ligar um botão direto num flip-flop, achando que a lógica seguinte só precisa esperar o clock. A entrada assíncrona pode cair na janela de captura e produzir metaestabilidade. A boa prática é usar um sincronizador de dois estágios em toda entrada que não seja síncrona, e a regra vale para botões, sensores e sinais de outros domínios.

O quinto erro é achar que um sincronizador elimina a falha. Ele reduz a probabilidade, com um ciclo extra para a resolução, e a simulação da seção 7 mostra a queda de 38 para 1 leitura metaestável, sem chegar a zero. A boa prática é quantificar o risco com a taxa de transições e o tempo disponível, em vez de confiar numa fórmula de fábrica.

O sexto erro é esquecer o skew ao copiar um caminho de outro projeto. O mesmo caminho pode ser seguro num chip com árvore de clock equilibrada e inseguro em outro. A boa prática é conferir a folga de hold nos dois sentidos do skew, o que é exatamente a conta da seção 4.4.

7. O programa que simula

O programa abaixo calcula o período mínimo e a frequência máxima do caminho da seção 4.2, mostra a folga de setup em três períodos e a folga de hold com skew, com e sem buffer. Depois calcula o ganho do pipeline da seção 4.10 e simula, com uma semente fixa, um sincronizador de um e de dois estágios. Todas as grandezas de tempo estão em picossegundos, e por isso 6000 ps corresponde aos 6,0 ns do texto. Nada aqui foi medido em chip real, e os valores de entrada são de exemplo.

# Temporização de caminhos entre registradores, com valores de exemplo em picossegundos (ps).
# Nenhum destes números foi medido em chip real.
import random

CLK_TO_Q = 500       # atraso clock-para-Q do registrador de origem (exemplo)
CLK_TO_Q_MIN = 500   # atraso mínimo usado no hold (exemplo)
CAMINHO = 5000       # soma das portas do caminho crítico (exemplo)
CAMINHO_MIN = 50     # atraso mínimo do caminho, para o hold (exemplo)
SETUP = 500          # tempo de setup do registrador de destino (exemplo)
HOLD = 200           # tempo de hold do registrador de destino (exemplo)


def periodo_minimo(clk_q, caminho, setup, skew=0):
    # T >= clk_q + caminho + setup - skew. Skew positivo: o destino recebe a borda mais tarde.
    return clk_q + caminho + setup - skew


def folga_setup(T, clk_q=CLK_TO_Q, caminho=CAMINHO, setup=SETUP, skew=0):
    # Chegada do dado: clk_q + caminho. Exigência: T + skew - setup.
    return (T + skew - setup) - (clk_q + caminho)


def folga_hold(skew=0, buffer=0):
    # Não depende de T: o dado novo não pode chegar antes de skew + hold.
    chegada_minima = CLK_TO_Q_MIN + CAMINHO_MIN + buffer
    return chegada_minima - (skew + HOLD)


def situacao(folga):
    return "passa" if folga >= 0 else "VIOLA"


print("== 1. período mínimo e frequência máxima ==")
t_min = periodo_minimo(CLK_TO_Q, CAMINHO, SETUP)
print("T minimo = %d + %d + %d = %d ps" % (CLK_TO_Q, CAMINHO, SETUP, t_min))
print("frequencia maxima = %.1f MHz" % (1e6 / t_min))

print("== 2. setup: a mesma lógica com três períodos ==")
for T in (5000, 6000, 7000):
    f = folga_setup(T)
    print("T = %d ps: folga de setup = %+d ps -> %s" % (T, f, situacao(f)))

print("== 3. hold: skew de 600 ps no registrador de destino ==")
for T in (5000, 10000):
    f = folga_hold(skew=600)
    print("T = %d ps: folga de hold = %+d ps -> %s" % (T, f, situacao(f)))
f = folga_hold(skew=600, buffer=300)
print("com buffer de 300 ps no caminho: folga de hold = %+d ps -> %s" % (f, situacao(f)))

print("== 4. pipeline: caminho de 8000 ps ==")
sem = periodo_minimo(CLK_TO_Q, 8000, SETUP)
com = periodo_minimo(CLK_TO_Q, 4000, SETUP)
print("sem pipeline: T = %d ps, %.1f MHz" % (sem, 1e6 / sem))
print("com 2 estagios: T = %d ps, %.1f MHz" % (com, 1e6 / com))
print("ganho de frequencia = %.2fx" % ((1e6 / com) / (1e6 / sem)))


print("== 5. sincronizador: 200000 transicoes assincronas (modelo de exemplo) ==")
PERIODO = 10000   # ps
JANELA = 100      # ps em torno da borda em que a captura falha (exemplo)
TAU = 2500        # ps, constante de resolucao da metaestabilidade (exemplo)
N = 200000
rng = random.Random(2026)
meta = 0
falha_1 = 0
falha_2 = 0
for _ in range(N):
    d = rng.uniform(-PERIODO / 2, PERIODO / 2)  # instante da transicao em relacao a borda
    if abs(d) < JANELA / 2:
        meta += 1
        tr = rng.expovariate(1 / TAU)           # tempo para resolver
        if tr > PERIODO:
            falha_1 += 1                        # 1 estagio: a logica le antes de resolver
        if tr > 2 * PERIODO:
            falha_2 += 1                        # 2 estagios: a logica le no segundo ciclo
print("transicoes que caem na janela (metaestaveis): %d" % meta)
print("leituras metaestaveis com 1 estagio: %d" % falha_1)
print("leituras metaestaveis com 2 estagios: %d" % falha_2)

Saída real do programa, com Python 3.12.8, executado com python3 -I clock_timing.py:

== 1. período mínimo e frequência máxima ==
T minimo = 500 + 5000 + 500 = 6000 ps
frequencia maxima = 166.7 MHz
== 2. setup: a mesma lógica com três períodos ==
T = 5000 ps: folga de setup = -1000 ps -> VIOLA
T = 6000 ps: folga de setup = +0 ps -> passa
T = 7000 ps: folga de setup = +1000 ps -> passa
== 3. hold: skew de 600 ps no registrador de destino ==
T = 5000 ps: folga de hold = -250 ps -> VIOLA
T = 10000 ps: folga de hold = -250 ps -> VIOLA
com buffer de 300 ps no caminho: folga de hold = +50 ps -> passa
== 4. pipeline: caminho de 8000 ps ==
sem pipeline: T = 9000 ps, 111.1 MHz
com 2 estagios: T = 5000 ps, 200.0 MHz
ganho de frequencia = 1.80x
== 5. sincronizador: 200000 transicoes assincronas (modelo de exemplo) ==
transicoes que caem na janela (metaestaveis): 2011
leituras metaestaveis com 1 estagio: 38
leituras metaestaveis com 2 estagios: 1

Algumas leituras da saída. A linha de período mínimo confirma a conta da seção 4.2. As três linhas de setup mostram a folga caindo de +1000 ps para -1000 ps conforme o período diminui, com a passagem por zero em 6000 ps. As duas linhas de hold têm o mesmo valor com períodos diferentes, o que comprova que o hold não depende de T. A linha do buffer mostra a folga virando positiva. A seção 4 do pipeline reproduz 111,1 MHz e 200,0 MHz, com ganho de 1,80 vez. Na seção de sincronização, a contagem exata de transições na janela (2011) depende da semente fixa, e o que importa é a diferença entre 38 e 1 leitura metaestável.

8. Exercícios

  1. Um caminho tem clock para Q de 0,4 ns, lógica de 4,6 ns e setup de 0,6 ns. Qual é o período mínimo e a frequência máxima?

Resposta: T mínimo = 0,4 + 4,6 + 0,6 = 5,6 ns. Frequência máxima = 1 dividido por 5,6 ns, que dá cerca de 178,6 MHz. Os valores são de exemplo.

  1. No mesmo caminho do exercício 1, o registrador de destino recebe o clock com skew de 0,3 ns atrasado. O hold é de 0,1 ns, o caminho mínimo é de 0,05 ns e o clock para Q mínimo é de 0,4 ns. Há violação de hold?

Resposta: o dado novo chega em 0,4 + 0,05 = 0,45 ns. A janela de hold do destino termina em 0,3 + 0,1 = 0,4 ns. Como 0,45 é maior que 0,4, a folga é +0,05 ns e não há violação. Note que o resultado não depende do período.

  1. Um caminho de 12 ns é dividido em três estágios de 4 ns, com registradores de custo total de 1 ns por ciclo. Qual é a frequência do circuito original e a do pipelinado, e qual é o ganho?

Resposta: sem pipeline, T = 12 + 1 = 13 ns, o que dá cerca de 76,9 MHz. Com três estágios, T = 4 + 1 = 5 ns, o que dá 200 MHz. O ganho é de 200 dividido por 76,9, cerca de 2,6 vezes. Esse ganho fica abaixo de 3 vezes pelo mesmo motivo do exemplo da seção 4.10: o registrador custa 1 ns em cada ciclo.

  1. Um chip tem C de 1 nF, como no modelo da figura 07. Compare a potência a 3 GHz com 1,0 V e a potência a 2 GHz com 0,9 V.

Resposta: a 3 GHz e 1,0 V, P = 1,0² · 3 = 3,0 W. A 2 GHz e 0,9 V, P = 0,81 · 2 = 1,62 W. A potência cai cerca de 46%, mesmo com a frequência 1 GHz menor, e a maior parte do ganho vem da tensão ao quadrado. O modelo ignora a corrente de fuga, então o número real seria outro.

9. Glossário

Clock: sinal periódico que alterna entre alto e baixo e indica quando os flip-flops capturam dados.

Cristal de quartzo: componente que vibra numa frequência estável quando recebe tensão, usado como referência de tempo.

PLL: malha de fase travada, circuito que multiplica a frequência de um sinal de referência travando-o numa relação fixa.

Período: tempo de um ciclo completo do clock.

Frequência: inverso do período, quantos ciclos por segundo.

Ciclo (duty cycle): fração do período em que o sinal fica em nível alto.

Atraso de propagação: tempo que um sinal leva para atravessar uma porta ou um fio.

Clock para Q: atraso entre a borda do clock e a saída do flip-flop mudar.

Caminho crítico: o caminho de lógica entre registradores que mais demora e que fixa o período mínimo.

Setup: tempo que o dado precisa estar estável antes da borda de captura.

Hold: tempo que o dado precisa continuar estável depois da borda de captura.

Folga: diferença entre o instante de chegada do dado e o limite exigido pela margem.

Skew: diferença de chegada do clock entre dois pontos do chip.

Jitter: variação do instante da borda de um ciclo para o outro.

Metaestabilidade: estado intermediário de um flip-flop depois de uma violação, que dura um tempo imprevisível.

Sincronizador: circuito de dois flip-flops em série que reduz a chance de o sistema ler um valor metaestável.

Clock gating: técnica de desligar o clock de um bloco ocioso para cortar sua potência dinâmica.

Pipeline: divisão de um caminho longo em estágios separados por registradores, para encurtar o período.

DVFS: escalonamento dinâmico de tensão e frequência, que reduz as duas quando a carga é pequena.

Boost: aumento temporário da frequência acima da base quando há folga de temperatura e de potência.

O que não foi confirmado ou medido

Os valores de tempo deste texto (clock para Q, atrasos de porta, setup, hold, skew, buffers e o caminho de 8 ns do pipeline) são de exemplo. Eles servem para a conta e não representam nenhum processo de fabricação. Nenhum número de atraso foi lido de datasheet.

A capacitância de 1 nF da figura 07 é um valor de exemplo para o modelo. A fórmula P = C · V² · f é o modelo clássico de potência dinâmica, mas a aula não consultou fonte primária para ela, e a corrente de fuga não entra na conta.

Os valores de frequência da figura 08 vêm de duas páginas. O clock máximo de 740 kHz do 4004 e a data de 15 de novembro de 1971 vêm da Wikipedia em inglês, e não de um datasheet da Intel. A aula não consultou o datasheet original do MCS-4, e por isso o detalhe do clock em duas fases, que aparece em fontes secundárias, não foi confirmado e não entra no texto. O clock de 5 MHz do 8086 original e os 8 MHz do 8086-2, de 1980, também vêm da Wikipedia, e a aula não encontrou data confirmada para a versão de 10 MHz, por isso ela não aparece na figura. O valor de 6 GHz do Core i9-14900KF vem da página oficial da Intel, mas para o modelo KF, irmão do 14900K, e a aula não confirmou a página do 14900K sem o sufixo. O valor é o turbo máximo, e não um clock fixo.

O cancelamento do Tejas em 7 de maio de 2004 e a atribuição a calor e consumo vêm da Wikipedia. A aula não confirmou por fonte primária a data de 2005 associada à parede de potência, e por isso o texto não a afirma como fato.

O jitter e o skew desta aula não foram medidos em nenhum chip, e a aula não cita valores de fabricantes para eles.

As constantes de resolução e as janelas da simulação de metaestabilidade são de exemplo. A taxa de 1% de transições na janela é consequência do modelo, e não de um dado de silício. O resultado de 38 contra 1 leitura metaestável serve para mostrar a diferença entre um e dois estágios, e não como taxa de falha de um chip.

A figura 09 é ilustrativa. As curvas são fórmulas escolhidas para o mecanismo, e não foram medidas em nenhum flip-flop.

A ferramenta de análise de temporização estática é descrita de forma geral. A aula não a usou nem consultou sua documentação, e o que a seção 5 diz sobre ela é descritivo.

Fontes

Consultadas em 1 de novembro de 2026.

  • Wikipedia em inglês, verbete “Intel 4004”, para a data de lançamento (15 de novembro de 1971) e o clock máximo de 740 kHz: https://en.wikipedia.org/wiki/Intel_4004
  • Wikipedia em inglês, verbete “Intel 8086”, para a data de lançamento (junho de 1978), o clock original de 5 MHz, o 8086-2 de 8 MHz em 1980 e o 8086-1 de 10 MHz citado na tabela: https://en.wikipedia.org/wiki/Intel_8086
  • Intel, página de especificações do Core i9-14900KF, para o lançamento no quarto trimestre de 2023 (Q4’23) e o turbo máximo de 6 GHz: https://www.intel.com/content/www/us/en/products/sku/236787/x/specifications.html
  • Wikipedia em inglês, verbete “Tejas and Jayhawk”, para o cancelamento em 7 de maio de 2004 e a atribuição a calor e consumo de energia: https://en.wikipedia.org/wiki/Tejas_and_Jayhawk
  • Notas da aula Circuitos sequenciais (University of Maryland, ENEE 244, e UCSB, ECE 122A), para as definições de setup, hold e metaestabilidade. Essas fontes foram consultadas na aula 2.3 em 1 de novembro de 2026 e não foram reabertas nesta aula.

Relacionados

  • Trilha de Hardware
  • CPU
  • Circuitos sequenciais
  • Circuitos combinacionais
  • Transistor como chave
  • Bits e binário

↑ Voltar ao topo

Atalhos de teclado

Abrir busca
/
Alternar tema claro/escuro
t
Aula anterior na série
←
Próxima aula na série
→
Lista de atalhos
?