Entendendo os circuitos dos flip-flops

Filipe Chagas Ferraz
7 min readSep 10, 2018

--

Circuito lógico de um contador de 4 bits com flip-flops do tipo T

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.

Circuito lógico de um flip-flop JK

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.

Simulação de um circuito lógico set-reset. (O botão de cima é a entrada set, o botão de baixo é a entrada reset, a lâmpada de cima é a saída Q e a lâmpada de baixo é a saída Q’)

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.

Simulação de erro lógico em um circuito latch set-reset. (O botão esta ligado nas duas entradas. Alâmpada de cima é a saída Q e a lâmpada de baixo é a saída Q’)

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.

Circuito set-reset com clock. (O botão de cima é a entrada set, o botão de baixo é a entrada reset, a lâmpada de cima é a saída Q e a lâmpada de baixo é a saída Q’)

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.

Gráfico que mostra o comportamento das entradas e saídas de um flip-flop SR. Os gráficos de Q e Q’ em vermelho são os graficos do comportamento ideal.

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.

Circuito set-reset master-slave (entradas e saídas indicadas)
Circuito set-reset master-slave simplificado

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.

Demonstração do funcionamento das entradas PRE e CLR em um flip-flop SR

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:

Conectando as entradas PRE e CLR (invertidas, cada uma, com uma porta NOT), às portas NAND do circuito master

O modo como as entradas PRE e CLR são conectadas às portas NAND é o mesmo nos circuitos master e slave:

Conectando as entradas PRE e CLR (invertidas, cada uma, com uma porta NOT), às portas NAND do circuito 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.

Demostração do funcionamento de um flip-flop JK

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.

Demonstração da modelagem de um flip-flop JK a partir do circuito de um flip-flop SR. (ignorem essas legendas indicando as conexões das entradas CLR e PRE nas portas NAND, eu esqueci de tirá-las antes de fazer a captura de tela)

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.

Modelagem de um flip-flop T a partir de um flip-flop JK

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.

Modelagem de um flip-flop D a partir de um flip-flop JK

--

--

Filipe Chagas Ferraz

Brasil, Cuiabá-MT; engenheiro de computação pela Universidade Federal de Mato Grosso; professor e pesquisador. https://github.com/FilipeChagasDev