Aprenda › Tema 10
Contadores e registradores de deslocamento: projeto passo a passo
Leitura de 7 min · Equipe bitGateLab
Um contador é um grupo de flip-flops que percorre uma sequência fixa de estados a cada pulso de clock; um registrador é um grupo de flip-flops que guarda ou desloca uma palavra binária. Com eles se medem tempos, se dividem frequências, se convertem dados de serial para paralelo e se geram sequências de controle. Você precisa ter bem claros os flip-flops D, JK e T e suas tabelas de excitação, explicados em latches e flip-flops.
Contador assíncrono (ripple)
A forma mais simples de contar é encadear flip-flops T com T = 1, de modo que cada um alterne e divida a frequência por 2. Só o primeiro recebe o clock do sistema; cada um dos seguintes usa como clock a saída do anterior. Com flip-flops disparados por borda de descida, conecta-se Q de um estágio ao clock do seguinte e o contador conta para cima; com borda de subida é preciso usar Q para contar para cima (com Q ele contaria para baixo).
Seu defeito é o atraso acumulado: o estágio n não muda até que todos os anteriores tenham mudado, como uma onda que percorre a cadeia. Durante esse tempo a saída passa por valores falsos.
Exemplo: contador assíncrono de 4 bits com tCQ = 12 ns por flip-flop. Ele passa de 0111 para 1000.
- Q0 muda de 1 para 0 aos 12 ns: a saída é lida como 0110.
- Q1 muda aos 24 ns: 0100.
- Q2 muda aos 36 ns: 0000.
- Q3 muda aos 48 ns: 1000, o valor correto.
Durante 48 ns a saída mostrou 0110, 0100 e 0000. Se um circuito decodifica esses valores, verá pulsos falsos. Para ler sempre um valor estável, o período do clock deve ser maior que 48 ns, ou seja, f < 20.8 MHz.
Contador síncrono
No contador síncrono todos os flip-flops recebem o mesmo clock, e a lógica decide quem alterna. Em um contador binário crescente, um bit alterna quando todos os bits menos significativos valem 1:
T0 = 1, T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2
Todas as saídas mudam juntas, tCQ depois da borda. O período mínimo já não depende do número de bits por causa da cadeia de flip-flops, e sim de tCQ + atraso da AND + tsu.
Contador módulo N
Um contador módulo N percorre N estados e recomeça. Precisa de pelo menos ⌈log2 N⌉ flip-flops. Há duas formas de fazê-lo.
Com reset assíncrono: toma-se um contador binário e detecta-se o primeiro estado que não deve aparecer. Para módulo 10 esse estado é 1010; basta uma NAND de Q3 e Q1 conectada ao clear ativo em nível baixo, porque é a primeira vez que Q3 e Q1 valem 1 ao mesmo tempo. Funciona, mas o estado 1010 aparece durante alguns nanossegundos e gera um pulso curto nas saídas.
Projeto síncrono: escreve-se a tabela de estados e calculam-se as entradas com a tabela de excitação. Não há estados transitórios.
Exemplo: contador síncrono módulo 6 (0 a 5) com flip-flops T. Estados Q2 Q1 Q0; os estados 110 e 111 não são usados e valem X.
| Q2 Q1 Q0 | Próximo | T2 | T1 | T0 |
|---|---|---|---|---|
| 000 | 001 | 0 | 0 | 1 |
| 001 | 010 | 0 | 1 | 1 |
| 010 | 011 | 0 | 0 | 1 |
| 011 | 100 | 1 | 1 | 1 |
| 100 | 101 | 0 | 0 | 1 |
| 101 | 000 | 1 | 0 | 1 |
Cada T vale 1 quando o bit muda. Simplificando com os X:
- T0 = 1.
- T1 = Q2·Q0 (cobre 001 e 011; em 101 vale 0 porque Q2 = 1).
- T2 = Q1·Q0 + Q2·Q0 = Q0·(Q1 + Q2).
Confira os estados não usados: a partir de 110, T2 = 0, T1 = 0, T0 = 1, o contador vai para 111; a partir de 111, T2 = 1, T1 = 0, T0 = 1, vai para 010. Ambos voltam à sequência: o contador parte sozinho (tem autopartida), mesmo que seja ligado em um estado inválido.
Registradores de deslocamento
Um registrador de deslocamento é uma cadeia de flip-flops D: a saída de cada um alimenta a entrada do seguinte e, a cada borda, todos os bits avançam uma posição. Conforme a forma como os dados entram e saem, eles se classificam assim:
- SISO (entrada serial, saída serial): atrasa um sinal em n ciclos de clock.
- SIPO (entrada serial, saída paralela): recebe os bits um a um e os entrega juntos. Converte de serial para paralelo.
- PISO (entrada paralela, saída serial): carrega uma palavra completa e a envia bit a bit. Cada flip-flop tem um MUX 2 para 1 na entrada:
Di = CARGA·Pi + CARGA·Qi−1. - PIPO (paralela para paralela): um registrador de armazenamento simples.
Exemplo: registrador SIPO de 4 bits, inicialmente em 0000, com Q0 ← entrada, Q1 ← Q0, Q2 ← Q1, Q3 ← Q2. São enviados os bits 1, 0, 1, 1, nessa ordem.
| Borda | Bit de entrada | Q0 Q1 Q2 Q3 |
|---|---|---|
| 1 | 1 | 1 0 0 0 |
| 2 | 0 | 0 1 0 0 |
| 3 | 1 | 1 0 1 0 |
| 4 | 1 | 1 1 0 1 |
Depois de 4 bordas, lido como Q3 Q2 Q1 Q0, o registrador contém 1011: o primeiro bit enviado ficou em Q3.
Contador em anel e contador Johnson
Se a saída do último flip-flop de um registrador de deslocamento é conectada à entrada do primeiro, obtém-se um contador em anel. Ele é inicializado com um único 1 (por exemplo 1000) e esse 1 circula: 1000, 0100, 0010, 0001, 1000. Com n flip-flops ele tem n estados, e cada estado já vem decodificado, porque só uma saída está em 1. É preciso garantir a carga inicial; se ele parte de 0000, fica ali para sempre.
Se, em vez de Q, realimenta-se Q do último flip-flop, obtém-se o contador Johnson (ou de anel torcido), com 2n estados. Para 4 bits (Q0 Q1 Q2 Q3, com Q0 ← Q3):
0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000
Cada estado é identificado com uma AND de apenas duas entradas, observando onde está a fronteira entre uns e zeros: por exemplo, 1100 é o único com Q1 = 1 e Q2 = 0, e 0000 é o único com Q0 = 0 e Q3 = 0.
Erros comuns
- Decodificar as saídas de um contador assíncrono com lógica combinacional sem considerar os estados transitórios.
- Conectar Q em vez de Q entre estágios de um contador assíncrono de borda de subida e obter um contador decrescente.
- Esquecer de verificar para onde vão os estados não usados de um contador módulo N.
- Dar partida em um contador em anel sem carregar o 1 inicial.
- Confundir a ordem dos bits ao ler um registrador SIPO: o primeiro bit que entra termina na extremidade mais distante.
Experimente no simulador
Comparar um contador assíncrono com um síncrono no cronograma é a melhor forma de ver o efeito de propagação em onda (ripple).
- Coloque quatro flip-flops T com T = 1, conecte o clock ao primeiro e encadeie os demais como contador assíncrono.
- Conecte as quatro saídas a indicadores e a um display ou a uma barra de LEDs.
- Monte ao lado dele o contador síncrono com T1 = Q0, T2 = Q0·Q1 e T3 = Q0·Q1·Q2, todos com o mesmo clock.
- Abra o cronograma, deixe o clock correr e observe a transição de 0111 para 1000 em ambos.
- Monte um registrador com quatro flip-flops D em cadeia, mude a entrada serial antes de cada borda e observe como os bits avançam; depois realimente Q do último estágio para o primeiro e verifique os 8 estados do Johnson.
Exercícios
- De quantos flip-flops você precisa para um contador módulo 12 binário, em anel e Johnson?
Resposta
Binário: 4 (24 = 16 ≥ 12). Anel: 12. Johnson: 6 (2 × 6 = 12).
- Que porta e que saídas você usaria para fazer um contador módulo 12 com reset assíncrono ativo em nível baixo a partir de um contador binário de 4 bits?
Resposta
12 = 1100. Uma NAND de Q3 e Q2 conectada ao clear, porque é a primeira vez que ambos valem 1.
- Um contador assíncrono de 8 bits usa flip-flops com tCQ = 10 ns. Qual é o pior tempo de acomodação?
Resposta
8 × 10 = 80 ns, por exemplo ao passar de 01111111 para 10000000.
- Que AND de duas entradas decodifica o estado 0111 do contador Johnson de 4 bits?
Resposta
Q0·Q1: é o único estado com Q0 = 0 e Q1 = 1.