Entendendo os circuitos dos flip-flops
Flip-flops são, basicamente, circuitos digitais de memória. Cada flip-flop corresponde a uma memória de 1 bit.
Existem diversos tipos de flip-flops, cada um deles com suas aplicações. Cada tipo de flip-flop possui um conjunto de propriedades para as quais devemos modelar um circuito. Isso significa que, para cada tipo de flip-flop, existe um circuito digital diferente dos circuitos dos demais tipos. Estes vários circuitos diferentes, entretanto, possuem semelhanças.
Analisaremos aqui 4 tipos de flip-flops: SR, D, JK e T.
Observe, na imagem acima, o circuito lógico de um flip-flop JK. Confuso, não acha ? A primeira vista ele aparenta ser, realmente, bem complexo, mas se analisarmos parte por parte de sua anatomia, tudo ficará mais simples.
Latch SR (set-reset)
Tudo começa com um pequeno e simples circuito latch set-reset.
Este pequeno circuito é a base de todos os flip-flops. Ele possui 2 entradas (chamadas set e reset) e 2 saídas (chamadas Q e Q’). Quando a entrada set (ou simplesmente S) passa do nível lógico 0 para o 1, o circuito “memoriza” o nível lógico 1 na saída Q e o nível lógico 0 na saída Q’. Da mesma forma, quando a entrada reset (ou simplesmente R) passa do nível lógico 0 para o 1, o circuito “memoriza” o nível lógico 1 na saída Q’ e o nível lógico 0 na saída Q. Isso significa que, caso as saídas do circuito sejam Q = 1 e Q’ = 0, elas permanecem nesse estado até que a entrada R passe do nível lógico 0 para o 1. Da mesma forma, caso as saídas do circuito sejam Q = 0 e Q’ = 1, elas permanecem nesse estado até que a entrada S passe do nível lógico 0 para o 1.
Enquanto o nível lógico das duas entradas é 0, o estado das saídas Q e Q’ não é alterado, até que alguma das duas entradas passe para o nível lógico 1.
Observe que as saídas Q e Q’ sempre possuem níveis lógicos complementares: Se Q = 1, então Q’ = 0; Se Q = 0, então Q’ = 1.
Entretanto, caso ambas as entradas estejam em nível lógico 1, ocorrerá um erro lógico que fará com que o circuito não se comporte de acordo com esta regra.
Será abordada mais adiante uma solução para este problema, mas antes disso vamos continuar analisando os circuitos set-reset.
Flip-flop SR (set-reset)
Nas aplicações dos flip-flops é necessário que as mudanças de estado do circuito ocorram em sincronia com os pulsos de um clock.
A maneira mais simples de adicionar um clock a um circuito set-reset é substituir as portas NOT das entradas S e R por duas portas NAND. Cada uma dessas portas NAND deve ter duas entradas: Uma para a respectiva entrada (S ou R) do circuito, e outra para o clock.
Este circuito tem um falha: O estado das saídas fica suscetível a mudanças enquanto o clock estiver em nível lógico 1, e não queremos isso. Queremos um circuito que só esteja suscetível a mudanças de estado nas saídas no exato momento em que o nível lógico do clock passa de 0 para 1 (momento este que chamaremos de “borda de subida”). Em outras palavras, as saídas Q e Q’ não podem mudar de estado em nenhum momento que não seja uma borda de subida do clock.
Para isso, é necessário fazer uma associação de dois circuitos set-reset com clock em uma configuração master-slave. As saídas Q e Q’ do circuito master devem ser ligadas, respectivamente, nas entradas S e R do circuito slave. O clock deve ser invertido com uma porta NOT na entrada do circuito master, e no circuito slave, o clock deve entrar sem inversão ou com duas inversões seguidas.
Observe que, agora, as saídas do circuito só mudam de estado na borda de subida do clock (momento exato em que o nível lógico do clock passa de 0 para 1).
O sinal de clock que entra no circuito master é inverso ao sinal de clock que entra no circuito slave. O circuito master fica suscetível a mudanças de estado enquanto o nível lógico do clock é 0, e o circuito slave fica suscetível a mudanças de estado enquanto o nível lógico do clock é 1.
O circuito master funciona como uma espécie de filtro nessa configuração. As entradas do circuito slave só recebem os sinais obtidos das entradas do circuito master enquanto o clock esta em nível lógico 0, e a mudança de estado nas saídas do circuito slave só ocorrem quando o clock esta em nível lógico 1.
A grosso modo, enquanto o clock esta em nível lógico 0, os sinais de entrada do circuito são memorizados no circuito master. No momento em que o nível lógico do clock passa de 0 para 1 (borda de subida), as saídas do circuito slave são atualizadas de acordo com o estado memorizado no circuito master. Após a borda de subida, enquanto o clock esta em nível lógico 1, nenhuma mudança de estado ocorre no circuito.
Entradas assíncronas preset e clear
Já conseguimos modelar um circuito de flip-flops SR com duas entradas síncronas (S e R), mas, para os próximos tipos de flip-flops, além disso, precisamos de duas entradas assíncronas, as quais chamaremos de preset e clear (ou simplesmente PRE e CLR). Essas duas entradas têm funções semelhantes às entradas S e R. A diferença é que as entradas PRE e CLR podem mudar o estado das saídas do flip-flop a qualquer momento, independente do estado do clock.
Para adicionar as entradas PRE e CLR ao nosso flip-flop, precisaremos acrescentar uma entrada a cada porta NAND do circuito. Feito isso, precisamos conectar as entradas PRE e CLR invertidas, cada uma, com uma porta NOT, às portas NAND como é mostrado nas animações a seguir:
O modo como as entradas PRE e CLR são conectadas às portas NAND é o mesmo nos circuitos master e slave:
Flip-flops JK
Para corrigir o problema de erro lógico nos flip-flops SR quando ambas as entradas estão em nível lógico 1, existem os flip-flops JK, que são semelhantes aos SR, com uma diferença: Quando ambas as entradas (J e K) estão em nível lógico 1, ao invés de ocorrer um erro lógico, as saídas Q e Q’ têm seus estados invertidos.
Este circuito pode ser modelado com base no circuito de flip-flop SR que fizemos anteriormente. Basta conectar a saída Q’ do circuito à porta NAND da entrada S e a saída Q à porta NAND da entrada R. Podemos desconectar as entradas PRE e CLR dessas duas portas NAND para dar lugar as novas conexões.
Flip-flops T e D
Os outros dois tipos de flip-flop são baseados nos flip-flops JK. Não precisamos nem modificar o circuito que já fizemos, basta acrescentar algumas coisas.
Os flip-flops T (toggle) possuem entradas clock, T, PRE, CLR, e saídas Q e Q’. Estes são, basicamente, flip-flops nos quais o estado das saídas é alternado na borda de subida do clock quando a entrada T esta em nível lógico 1.
Para modelar um flip-flop T, basta unir as entradas J e K de um flip-flop JK e transformá-las em uma única entrada T.
Os flip-flops D (data) possuem entradas clock, D, PRE, CLR, e saídas Q e Q’. Estes são, basicamente, flip-flops nos quais o estado da saída Q é igualado ao estado da entrada D nas bordas de subida do clock.
Para modelar um flip-flop D, basta conectar a entrada D à entrada J do flip-flop JK e a entrada D, negada com uma porta NOT, à entrada K do flip-flop JK.