bitGateLab Digital · Aprenda
Português (Brasil)
Abrir o simulador

Aprenda › Tema 12

Diagramas de tempo, glitches e riscos estáticos (hazards)

Leitura de 8 min · Equipe bitGateLab

No papel, uma porta responde instantaneamente; na realidade, cada porta leva alguns nanossegundos. Essa diferença quase nunca importa na tabela-verdade, mas importa no diagrama de tempo: dois caminhos com atrasos diferentes podem produzir pulsos falsos, chamados de glitches, que fazem um contador avançar ou um latch disparar quando não deviam. Aqui você vai aprender a ler um diagrama de tempo, calcular atrasos e detectar e eliminar riscos estáticos (hazards) com o mapa de Karnaugh.

Como ler um diagrama de tempo

Um diagrama de tempo desenha cada sinal como uma linha que sobe (1) ou desce (0) sobre um eixo horizontal de tempo comum. Uma linha vertical imaginária em qualquer instante fornece o valor de todos os sinais. As bordas das entradas são as causas; a distância entre uma borda de entrada e a mudança que ela provoca na saída é o atraso. Em circuitos com clock, leia os valores logo antes de cada borda ativa, que é quando os flip-flops fazem a amostragem.

Atraso de propagação e caminho crítico

O atraso de propagação é o tempo entre uma mudança na entrada e a mudança resultante na saída, medido entre os pontos a 50 % de cada transição. Distinguem-se dois valores:

Na família 74HC alimentada com 5 V, os atrasos de uma porta simples são da ordem de 10 ns e aumentam com a carga capacitiva e com a redução da tensão de alimentação.

O atraso de um circuito é o do caminho mais lento entre qualquer entrada e a saída, o caminho crítico. Ele é calculado somando os atrasos das portas de cada caminho e ficando com o maior.

Exemplo: F = A·B + A·C com tNOT = 5 ns, tAND = 10 ns e tOR = 10 ns.

  • Caminho de B ou de C: AND + OR = 20 ns.
  • Caminho de A pela AND de cima: AND + OR = 20 ns.
  • Caminho de A pelo inversor: NOT + AND + OR = 25 ns.

O caminho crítico é o de A através do inversor, com 25 ns. Nenhuma mudança de entrada leva mais do que isso para deixar F estável.

Glitches e riscos estáticos

Um risco estático de 1 existe quando a saída deveria permanecer em 1 durante uma mudança de entrada, mas pode cair brevemente para 0. Um risco estático de 0 é o contrário: a saída deveria permanecer em 0 e dá um pico breve em 1. Ambos aparecem quando uma variável e o seu complemento chegam à saída por caminhos com atrasos diferentes.

Tome o circuito do exemplo anterior com B = C = 1. Logicamente, F = A + A = 1 sempre. Mas, quando A desce de 1 para 0, o termo A·B se apaga antes que A·C se acenda, porque A tem de passar primeiro pelo inversor.

A Ā A·B Ā·C F 0 5 10 15 20 25 t (ns)
Com B = C = 1, A desce em t = 0. Entre 10 e 15 ns as duas entradas da OR valem 0, e F cai de 20 a 25 ns: um glitch de 5 ns.

Cronologia do glitch (B = C = 1, A desce em t = 0):

  1. t = 5 ns: o inversor faz A subir.
  2. t = 10 ns: a AND de A·B leva a sua saída para nível baixo (respondeu à mudança de A em t = 0).
  3. t = 15 ns: a AND de A·C leva a sua saída para nível alto (respondeu à mudança de A em t = 5).
  4. Entre 10 e 15 ns as duas entradas da OR valem 0. A OR responde 10 ns depois: F vale 0 de t = 20 até t = 25 ns.

A largura do glitch é a diferença de atrasos entre os dois caminhos: 5 ns, o do inversor. Se A sobe, A·B se acende em t = 10 e A·C se apaga em t = 15; ambas valem 1 nesse intervalo e não há glitch.

Há também riscos dinâmicos: a saída deveria mudar uma única vez e muda três ou mais (por exemplo 1 → 0 → 1 → 0). Eles aparecem em lógica de vários níveis com três ou mais caminhos de atrasos diferentes para a mesma variável.

Detectar e eliminar riscos com Karnaugh

No mapa de Karnaugh de uma soma de produtos, um risco estático de 1 aparece quando duas células com 1 são adjacentes mas ficam cobertas por grupos diferentes e nenhum grupo cobre as duas. Passar de uma célula para a outra significa mudar uma única variável, e durante essa mudança o circuito "salta" de um termo para outro.

A solução é acrescentar o termo de consenso: um grupo extra que cubra as duas células. Ele é redundante do ponto de vista lógico (não muda a tabela-verdade), mas mantém a saída em 1 durante a transição.

Exemplo: F = A·B + A·C.

  1. A·B cobre as células ABC = 110 e 111. A·C cobre 001 e 011.
  2. As células 011 e 111 são adjacentes (só muda A) e estão em grupos diferentes: esse é o risco que vimos, com B = C = 1.
  3. O grupo que cobre as duas é B·C, o consenso de A·B e A·C: retira-se a variável que aparece direta em um termo e negada no outro, e multiplica-se o que sobra.
  4. Circuito sem risco: F = A·B + A·C + B·C. Com B = C = 1, o termo B·C vale 1 o tempo todo e a OR já não pode cair.

Para um produto de somas o raciocínio é dual: procuram-se zeros adjacentes em grupos diferentes e acrescenta-se a soma de consenso para eliminar o risco estático de 0. Por exemplo, F = (A + B)·(A + C) tem risco quando B = C = 0, e é corrigido acrescentando o fator (B + C).

Acrescentar termos de consenso elimina riscos estáticos devidos à mudança de uma única variável. Em projeto síncrono, a outra defesa é não observar a lógica combinacional enquanto ela se acomoda: os flip-flops só fazem a amostragem na borda do clock, quando os glitches já terminaram. Os glitches são, sim, perigosos em clocks, resets assíncronos e habilitações de latch.

Erros comuns

Experimente no simulador

No cronograma você pode ver o pico e como ele desaparece ao acrescentar o consenso.

  1. Coloque um inversor, duas AND e uma OR, e monte F = A·B + A·C.
  2. Fixe B = 1 e C = 1, e conecte A a uma entrada que você possa mudar ou a um sinal de clock lento.
  3. Abra o cronograma e mude A de 1 para 0 várias vezes; observe F no momento da transição e veja se aparece um pulso breve ou um aviso de glitch.
  4. Acrescente uma terceira AND com B·C e conecte-a também à OR.
  5. Repita a mudança de A e observe que F se mantém em 1.

Exercícios

  1. Encontre o risco estático de F = A·C + B·C e escreva a versão sem risco.
    Resposta

    A·C cobre 100 e 110; B·C cobre 011 e 111. As células 110 e 111 são adjacentes (muda C) em grupos diferentes, com A = B = 1. Consenso: A·B. F = A·C + B·C + A·B.

  2. No circuito do exercício 1, com tNOT = 4 ns, tAND = 8 ns e tOR = 8 ns, A = B = 1, em que transição de C aparece o glitch, quando e quanto tempo dura?
    Resposta

    Quando C desce em t = 0: B·C desce em t = 8, C sobe em t = 4 e A·C sobe em t = 12. Entre 8 e 12 ns a OR vê dois zeros, de modo que F vale 0 de t = 16 a t = 20 ns: 4 ns. Quando C sobe não há glitch.

  3. Qual é o caminho crítico de F = A·C + B·C com os atrasos do exercício 2?
    Resposta

    De C através do inversor: 4 + 8 + 8 = 20 ns.

  4. Para F = (A + B)·(A + C), que valor a saída deveria ter quando B = C = 0 e que glitch pode aparecer?
    Resposta

    Com B = C = 0, F = A·A = 0. Ao mudar A pode aparecer um pico breve em 1 (risco estático de 0). Ele é eliminado acrescentando o fator (B + C).