Pular para o conteúdo principal

Aula 4 — Flip-flops

Apresentação​

Na aula anterior chegamos a um resultado e a um impasse. O resultado: um laço de dois inversores realimentados é biestável — guarda um bit indefinidamente, e é essencialmente o núcleo de toda RAM estática. O impasse: esse anel não tem entrada, então o bit que ele guarda é definido por acaso na energização e não pode ser escrito. Um circuito que guarda um bit que ninguém pode alterar não serve como memória.

Esta aula resolve o impasse. A ideia é trocar os dois inversores por duas portas de duas entradas — NAND ou NOR: cada porta continua invertendo o sinal que recebe da outra (a biestabilidade se mantém) e sobra uma entrada livre em cada uma, por onde finalmente se escreve o bit. Esse é o flip-flop RS, o ponto de partida. A partir dele chegamos às quatro variantes que aparecem no restante da disciplina — RS, JK, T e D —, cada uma acrescentando um controle sobre quando e como o estado muda.

Por que estudar isso em Organização de Computadores​

Porque o flip-flop é a unidade elementar de toda memória interna da máquina. Um registrador de 8 bits é um conjunto de oito flip-flops D compartilhando a mesma linha de clock. Uma célula de RAM estática é um laço de realimentação como o RS da Seção 1. O contador de programa é um registrador com um circuito de incremento. Os flags da ULA — zero, negativo, transporte, estouro — são flip-flops individuais.

Quando estudarmos o subsistema de memória e o caminho de dados da CPU, esses blocos vão aparecer prontos, como caixas com entrada, saída e clock. Esta aula é onde os abrimos.

Objetivos​

Ao final desta aula você deve ser capaz de:

  • Analisar o laço RS básico caso a caso e explicar por que a combinação S = R = 1 não é permitida.
  • Justificar a introdução da entrada de clock e descrever o que ela controla.
  • Explicar a estrutura mestre-escravo do flip-flop JK e por que ela elimina a indeterminação do RS.
  • Aplicar as tabelas-verdade dos flip-flops RS, JK, T e D para prever a saída futura (QfQ_f) a partir da saída anterior (QaQ_a).
  • Prever o comportamento de um JK com as entradas assíncronas Preset e Clear, inclusive quando elas conflitam com o clock.
  • Montar e simular os circuitos estudados no Logisim-Evolution, observando o comportamento em função do tempo.

Recapitulando: o biestável​

A aula anterior deixou três resultados de que precisamos aqui:

  • A realimentação cria estado. Ligar a saída de volta à entrada faz a saída depender também de si mesma — é o que distingue um circuito sequencial de um combinacional.
  • Duas inversões guardam um bit. Um anel de dois inversores é biestável: tem duas configurações estáveis (Q = 0 e Q = 1) e permanece na que estiver. É a célula elementar de memória.
  • Mas o biestável puro não tem entrada. Todos os terminais estão ocupados pelo laço, então não há como escrever o bit. E fechar o laço teve um custo: a tabela ganhou a coluna do estado anterior (QaQ_a), surgiram configurações instáveis, e apareceu o risco de condição de corrida quando duas entradas mudam juntas.

Guardaremos também a notação da aula anterior: QaQ_a é o estado da saída antes das entradas e QfQ_f o estado depois; a saída complementar é sempre indicada por Q. A partir daqui, cada seção acrescenta um controle ao laço até chegar ao flip-flop pronto.


1. Flip-flop RS básico​

O flip-flop RS é a troca do recap concretizada: no lugar dos dois inversores, duas portas de duas entradas. A biestabilidade se mantém — cada porta continua invertendo o sinal que recebe da outra — e as duas entradas que sobram, uma em cada porta, passam a ser o comando por onde se escreve o bit.

Existem duas realizações usuais desse mesmo circuito. Começamos pela do livro-texto, com NAND, e vemos a versão com NOR na Seção 1.4.

1.1 O laço com portas NAND​

A construção usa duas portas NAND realimentadas, precedidas de inversores nas entradas. A saída de cada porta alimenta uma entrada da outra: é o laço de realimentação que sustenta o estado; os inversores servem apenas para que S e R fiquem ativas em nível 1.

Esquema com duas portas NAND, uma acima da outra. As entradas S e R passam cada uma por um inversor antes de chegar à entrada externa da NAND correspondente. A saída da NAND de cima é Q e a de baixo é Q barrado. Duas linhas âmbar cruzam o vão central: a saída Q vai à entrada interna da NAND de baixo e a saída Q barrado vai à entrada interna da NAND de cima
Cada porta enxerga a saída da outra: é isso que faz o circuito se lembrar do que produziu.

O nome das entradas vem da função de cada uma:

  • S (Set), quando acionada em nível 1, leva a saída para 1 — estabelece o bit.
  • R (Reset), quando acionada em nível 1, leva a saída para 0 — zera o flip-flop.

1.2 Análise caso a caso​

Como a saída futura depende também da saída anterior, a tabela-verdade precisa de três colunas de entrada: S, R e QaQ_a. São oito casos.

SRQaQ_aQfQ_fQf{}_fComportamento
00001estado estável — mantém
00110estado estável — mantém
01001fixa QfQ_f em 0
01101fixa QfQ_f em 0
10010fixa QfQ_f em 1
10110fixa QfQ_f em 1
11011não permitido
11111não permitido

Eliminando a redundância, chega-se à tabela que se usa na prática:

SRQfQ_f
00QaQ_a (mantém)
010
101
11não permitido

1.3 Por que S = R = 1 é proibido​

O motivo é direto: com as duas entradas ativas, o circuito é forçado a colocar o mesmo valor nas duas saídas — Q = Q. Isso contradiz a própria definição do dispositivo, cujas saídas devem ser complementares.

Pior do que isso é o que acontece depois. Ao retirar simultaneamente as duas entradas (voltando a S = R = 0), as duas portas disputam a estabilização, e o estado final depende de qual delas comutar primeiro — ou seja, de diferenças de fabricação e de temperatura. O resultado é imprevisível, e é por isso que a combinação não é apenas "estranha": ela é inutilizável em projeto.

Atenção ao valor da saída no caso proibido

No laço com NAND (Figura 1), as duas entradas ativas forçam Q = Q = 1. No laço com NOR da próxima seção, forçam Q = Q = 0. O valor difere; o que não difere é a conclusão: a combinação não é permitida em nenhuma das duas construções.

1.4 A construção com portas NOR​

O mesmo flip-flop pode ser montado com duas portas NOR, e nesse caso os inversores de entrada são dispensáveis. Repare que os papéis se invertem em relação à posição no desenho: a entrada da porta de cima é o Reset, e a da porta de baixo é o Set.

Esquema com duas portas NOR, uma acima da outra. A entrada R chega diretamente à entrada externa da NOR de cima, cuja saída é Q; a entrada S chega à NOR de baixo, cuja saída é Q barrado. Duas linhas âmbar cruzam o vão central levando cada saída à entrada interna da porta oposta
Mesma função da Figura 1 com duas portas a menos — e com o caso proibido levando ambas as saídas a 0.

O raciocínio de análise é sempre o mesmo, e vale a pena internalizá-lo: um nível 1 em uma entrada de porta NOR força a saída daquela porta a 0, independentemente da outra entrada. A partir daí, o valor 0 propaga-se pelo elo de realimentação e determina a outra saída.


2. Flip-flop RS com entrada de clock​

O RS básico muda de estado no instante exato em que as entradas mudam. Em um sistema com milhares de células, isso é ingovernável: cada uma comutaria em um momento diferente, e o circuito nunca teria um estado consistente.

A solução é condicionar a atuação das entradas a um sinal de comando. Basta substituir os inversores por portas NAND e injetar o clock na segunda entrada de cada uma.

À esquerda, o circuito: duas portas NAND de entrada recebem, cada uma, um dos sinais S ou R e o sinal de clock, e suas saídas alimentam um laço cruzado de duas outras NAND que produz Q e Q barrado. À direita, o bloco representativo: um retângulo com as entradas S, CK e R à esquerda e as saídas Q e Q barrado à direita, com um triângulo marcando a entrada de clock
Com o clock em 0 o laço fica isolado das entradas; o estado só pode mudar com o clock em 1.

O comportamento resume-se a duas situações:

CKComportamento
0as saídas das portas de entrada são sempre 1: o estado fica travado
1o circuito funciona como um RS básico

No bloco representativo (parte b da Figura 3), o triângulo na entrada de clock é a notação padrão para "entrada dinâmica", isto é, controlada pelo clock. Ela reaparece em todos os blocos daqui em diante.

Ainda não resolvemos o problema principal

A entrada de clock dá controle sobre quando a mudança acontece, mas não elimina a combinação proibida: com CK = 1 e S = R = 1, a indeterminação continua exatamente onde estava. Quem resolve isso é o flip-flop da próxima seção.


3. Flip-flop JK mestre-escravo​

3.1 A ideia​

O flip-flop JK mestre-escravo (JK master-slave) faz duas coisas ao mesmo tempo:

  1. Realimenta as saídas para as entradas. A entrada J só tem efeito quando Q = 1 (isto é, quando Q = 0), e a entrada K só tem efeito quando Q = 1. Em termos do RS interno: S = J·Q e R = K·Q. Como Q e Q nunca valem 1 ao mesmo tempo, S e R nunca chegam a 1 simultaneamente — a combinação proibida deixa de ser alcançável.
  2. Encadeia duas células RS com clocks complementares. A primeira, o mestre, lê as entradas; a segunda, o escravo, entrega o resultado à saída. Como uma trabalha com CK e a outra com CK, elas nunca estão abertas ao mesmo tempo.

A Figura 4 mostra as duas ideias em um único diagrama.

Diagrama de blocos: as entradas J e K passam por duas portas AND cujas saídas, rotuladas S igual a J vezes Q barrado e R igual a K vezes Q, alimentam um bloco Mestre (célula RS). As saídas Q1 e Q1 barrado do mestre alimentam um bloco Escravo (célula RS), que produz Q e Q barrado. O clock entra direto no mestre e, através de um inversor, no escravo. Duas linhas âmbar levam Q e Q barrado de volta às portas AND de entrada
As duas invenções do JK: a realimentação, que elimina o caso proibido, e o par mestre-escravo, que separa a leitura da entrada da atualização da saída.

3.2 Como o par mestre-escravo se comporta no tempo​

  • Enquanto o clock está em 1, o mestre acompanha J e K, mas o escravo está bloqueado — a saída não se move.
  • Na descida do clock (transição de 1 para 0), o mestre trava o valor que capturou e o escravo, agora liberado, copia esse valor para a saída.
  • Enquanto o clock permanece em 0, J e K podem variar à vontade: as saídas internas do mestre estão fixas e a saída não muda.

O efeito líquido é que a saída muda uma única vez por pulso, na descida do clock. Diz-se que o circuito é sensível à descida.

3.3 A tabela-verdade do JK​

JKQfQ_fComportamento
00QaQ_amantém o estado
010zera (reset)
101estabelece (set)
11Qa{}_ainverte o estado

As três primeiras linhas reproduzem o RS. A quarta é a novidade: no lugar da combinação proibida, o JK oferece uma operação útil — a inversão do estado. É ela que torna o JK a célula básica dos contadores.

3.4 Sensibilidade à borda​

Colocando um inversor na entrada de clock, obtém-se um circuito que atua na subida em vez da descida. A distinção aparece no símbolo, como mostra a Figura 5:

Dois blocos de flip-flop JK lado a lado. Ambos têm as entradas J e K à esquerda, as saídas Q e Q barrado à direita e um triângulo na entrada de clock. O bloco (a), sensível à descida, tem um pequeno círculo entre o fio de CK e o triângulo; o bloco (b), sensível à subida, não tem o círculo
O círculo na entrada de clock é o que distingue os dois: com ele, a borda ativa é a de descida.

O cronograma da Figura 6 mostra o efeito na prática. Repare que J e K mudam várias vezes ao longo do tempo, mas Q só se move nas linhas tracejadas — as descidas do clock.

Cronograma com quatro formas de onda empilhadas: CK, J, K e Q, em função do tempo. Linhas verticais tracejadas em âmbar marcam as cinco descidas do clock. Sob cada uma há a anotação do par JK naquele instante e o efeito sobre Q: JK igual a 10 leva Q a 1, JK igual a 01 leva Q a 0, JK igual a 11 inverte duas vezes e JK igual a 00 mantém
A saída ignora tudo o que acontece entre as bordas: é o que torna o circuito sincronizável.
Aprofundamento — mestre-escravo e flip-flops modernos

A estrutura mestre-escravo tem uma limitação conhecida como ones catching: se um pulso curto aparecer em J enquanto o clock está em 1, o mestre o captura e o repassa na descida, mesmo que J já tenha voltado a 0. O circuito é sensível ao nível do clock durante a janela em que está alto, não apenas à borda.

Por isso, os circuitos integrados modernos usam flip-flops disparados por borda (edge-triggered), tipicamente do tipo D, em que a captura ocorre em uma janela muito estreita em torno da transição. O modelo mestre-escravo continua sendo o melhor caminho didático — ele torna visível a separação entre "ler a entrada" e "atualizar a saída" —, mas não é o que está dentro de um registrador atual.


4. Entradas assíncronas: Preset e Clear​

Além das entradas de dados, o JK dispõe de duas entradas que agem diretamente sobre o laço, sem passar pelo clock:

  • Preset (PR) — força a saída para Q = 1.
  • Clear (CLR), também chamada de Reset — força a saída para Q = 0.

Nos circuitos integrados usuais, ambas são ativas em nível 0, o que se indica pelo círculo no símbolo (Figura 7) e pela barra sobre o nome.

Bloco de flip-flop JK com as entradas J e K à esquerda, a entrada de clock com triângulo e círculo, as saídas Q e Q barrado à direita, a entrada PR no topo e a entrada CLR na base, ambas com um pequeno círculo indicando atividade em nível zero. Ao lado, as anotações PR barrado igual a zero implica Q igual a 1 e CLR barrado igual a zero implica Q igual a zero
As duas entradas assíncronas passam por cima do clock e das entradas J e K.
CLRPRQfQ_f
00não permitido
010
101
11funcionamento normal (comandado por J, K e clock)

Note que a linha proibida reaparece aqui, e pelo mesmo motivo de sempre: pedir simultaneamente Q = 0 e Q = 1 é pedir o impossível.

Assíncrono quer dizer assíncrono

Este é o ponto que mais gera erro em prova: PR e CLR não esperam o clock. Se CLR estiver em 0, a saída vai a 0 e permanece lá, não importa o que J, K e o clock estejam fazendo. Ao resolver exercícios, verifique primeiro as entradas assíncronas; só se as duas estiverem em 1 é que se olha para a borda do clock.


5. Flip-flop T​

O flip-flop T é obtido a partir de um JK mestre-escravo com as entradas J e K curto-circuitadas — ligadas uma à outra. Se J vale 1, K também vale 1; se J vale 0, K também vale 0. Restam, portanto, apenas duas das quatro linhas da tabela do JK.

À esquerda, um bloco JK com Preset e Clear em que as entradas J e K estão ligadas entre si por um fio vertical e recebem o mesmo sinal, chamado T. À direita, após um símbolo de implicação, o bloco equivalente com uma única entrada rotulada T, além da entrada de clock e das saídas Q e Q barrado
Amarrar J a K reduz o JK a duas operações: manter e inverter.
TQfQ_f
0QaQ_a (mantém)
1Qa{}_a (inverte)

A sigla vem de Toggle, comutar. Como com T = 1 a saída se inverte a cada descida de clock, um flip-flop T sozinho já é um divisor de frequência por 2 — e é por isso que ele é a célula principal dos contadores assíncronos.

O T não existe como componente

O flip-flop T não é encontrado na série de circuitos integrados comerciais. Na prática ele é montado a partir de um JK mestre-escravo com a ligação mostrada na Figura 8.


6. Flip-flop D​

O flip-flop D é obtido a partir de um JK mestre-escravo com a entrada K invertida em relação a J: como mostra a Figura 9, um inversor entre as duas garante que K = J. Desaparecem os casos J = K = 0 e J = K = 1, e restam apenas as duas linhas que gravam um valor.

À esquerda, um bloco JK com Preset e Clear em que o sinal D entra diretamente em J e, por meio de um inversor, na entrada K. À direita, após um símbolo de implicação, o bloco equivalente com uma única entrada rotulada D, além da entrada de clock e das saídas Q e Q barrado
Com K sempre complementar a J, o flip-flop deixa de escolher e passa a simplesmente copiar.
DQfQ_f
00
11

A sigla vem de Data, dado. O comportamento é o mais simples de todos — a saída assume o valor presente na entrada D no instante da borda ativa —, e é justamente essa simplicidade que o torna o flip-flop mais usado na prática: é a célula dos registradores de deslocamento, dos registradores de uso geral da CPU e das memórias construídas com portas lógicas.


7. Quadro comparativo​

TipoEntradas de dadosEquação característicaCaso a evitarOnde é usado
RSS, RQfQ_f = S + R·QaQ_aS = R = 1célula elementar; base dos demais
JKJ, KQfQ_f = J·Qa{}_a + K·QaQ_a—contadores síncronos
TTQfQ_f = T ⊕ QaQ_a—contadores assíncronos, divisores de frequência
DDQfQ_f = D—registradores, memórias

A equação característica exprime a saída futura como função booleana das entradas e da saída anterior. Vale conferir cada uma contra a tabela correspondente — por exemplo, no JK com J = K = 1: QfQ_f = 1·Qa{}_a + 0·QaQ_a = Qa{}_a, que é a inversão prevista.

8. Para onde isso vai​

Os quatro dispositivos desta aula não são alternativas concorrentes: são especializações sucessivas do mesmo laço de realimentação, cada uma trocando generalidade por segurança de uso.

  • O RS mostra o princípio, mas tem um caso inutilizável.
  • O JK elimina esse caso e transforma-o em uma operação útil.
  • O T e o D restringem o JK a um subconjunto seguro, cada um otimizado para um papel: contar e armazenar.

Na unidade de subsistema de memória, o flip-flop D reaparece agrupado em registradores e como célula de RAM estática. Na unidade de CPU, ele é o que sustenta o contador de programa, o registrador de instrução e os flags. Guarde a distinção entre entradas síncronas e assíncronas: ela volta na forma dos sinais de reset do processador.


Exercícios (checkpoints)​

Verificação rápida​

Quiz7 questões

1. Em um flip-flop RS básico construído com portas NOR, o que acontece quando S = R = 1?

  • a)O flip-flop mantém o estado anterior
  • b)O flip-flop inverte o estado anterior
  • c)As duas saídas vão a 0, violando a complementaridade entre Q e Q
  • d)As duas saídas vão a 1, violando a complementaridade entre Q e Q
  • e)O circuito oscila indefinidamente enquanto as entradas estiverem em 1

2. Qual é a função da entrada de clock em um flip-flop RS com clock?

  • a)Definir o valor que será armazenado na saída
  • b)Controlar quando as entradas S e R podem atuar sobre o laço
  • c)Eliminar a combinação proibida S = R = 1
  • d)Inverter a saída a cada pulso
  • e)Zerar o flip-flop no início da operação

3. Por que a combinação J = K = 1 é permitida no flip-flop JK, enquanto S = R = 1 não é no RS?

  • a)Porque o JK tem mais portas lógicas e suporta correntes maiores
  • b)Porque no JK a saída é realimentada às entradas, de modo que S = J·Q e R = K·Q nunca valem 1 ao mesmo tempo
  • c)Porque o JK ignora a entrada K quando J está em 1
  • d)Porque o clock do JK é mais lento
  • e)Porque o JK só aceita uma entrada ativa por vez, por construção elétrica

4. Um JK mestre-escravo sensível à descida está com CK = 1, J = 1, K = 0 e Qa = 0. Qual é o valor de Q neste instante?

  • a)Q = 1, porque J = 1 estabelece a saída imediatamente
  • b)Q = 0, porque o escravo só copia o valor do mestre na descida do clock
  • c)Q é indeterminado enquanto o clock estiver em 1
  • d)Q = 1 apenas se o Preset também estiver ativo
  • e)Q oscila entre 0 e 1 enquanto o clock estiver em 1

5. Um flip-flop JK está com CLR = 0, PR = 1, J = 1, K = 1 e recebe uma descida de clock. Qual é o valor de Qf?

  • a)Qf = Qa, porque J = K = 1 inverte o estado
  • b)Qf = 0, porque a entrada Clear é assíncrona e prevalece sobre o clock
  • c)Qf = 1, porque o Preset está em 1
  • d)A situação não é permitida
  • e)Qf mantém o valor anterior, porque as entradas assíncronas bloqueiam o clock

6. Por que o flip-flop T é usado como célula de contadores assíncronos?

  • a)Porque ele armazena dois bits em vez de um
  • b)Porque com T = 1 ele inverte a saída a cada borda ativa, funcionando como divisor de frequência por 2
  • c)Porque ele é o único que possui entradas Preset e Clear
  • d)Porque ele não precisa de sinal de clock
  • e)Porque ele é o mais rápido dos quatro tipos

7. Qual característica torna o flip-flop D a escolha natural para registradores?

  • a)Ele mantém o valor anterior quando D = 0
  • b)Ele inverte o valor armazenado a cada pulso, permitindo contar
  • c)A saída assume, na borda ativa, exatamente o valor presente na entrada D
  • d)Ele dispensa a entrada de clock
  • e)Ele possui duas entradas de dados independentes

Questões dissertativas​

Q1

Explique, com suas palavras, por que um circuito construído apenas com portas lógicas sem realimentação não consegue armazenar informação.

Q1Difícil

No flip-flop RS básico, a combinação S = R = 1 é descrita como 'não permitida' e não apenas como 'inútil'. Justifique a diferença, explicando o que acontece quando as duas entradas voltam a 0 simultaneamente.

Q2

Descreva o que acontece dentro de um flip-flop JK mestre-escravo durante um ciclo completo de clock (subida, nível alto, descida, nível baixo), indicando em qual momento a saída Q pode mudar.

Q3

Explique por que o flip-flop T não é fabricado como circuito integrado próprio e como ele é obtido na prática. Em seguida, explique por que ele funciona como divisor de frequência por 2.

A tabela a seguir descreve oito situações aplicadas a um flip-flop JK mestre-escravo sensível à descida, com Preset e Clear ativos em nível 0. Copie-a e complete a coluna QfQ_f antes de revelar o gabarito da Questão 4.

#ClockJKPRCLRQaQ_aQfQ_f
11 → 000111
21 → 001111
3111101
4010010
51 → 010110
61 → 001111
70 → 101101
80 → 111011
Q4

Determine o valor de Qf em cada linha da tabela acima, justificando as três primeiras.

Q5

Mostre que a equação característica do flip-flop JK, Qf = J·Qa + K·Qa, reproduz as quatro linhas da tabela-verdade do dispositivo.

Q6Difícil

Um colega afirma que, para zerar todos os registradores de uma máquina no momento em que ela é ligada, basta colocar 0 nas entradas D de todos os flip-flops. Avalie a afirmação e proponha a solução correta.

Atividades práticas no Logisim-Evolution​

Ambiente sugerido: Logisim-Evolution, o fork mantido do Logisim clássico. A instalação (com links de download por sistema) e a leitura da tela — cores dos fios, mensagem Oscillation apparent, menu Simulate — estão detalhadas na aula anterior. Vale tê-la aberta ao lado. Os arquivos declaram as bibliotecas na ordem do Logisim-Evolution e não abrem no Logisim 2.7.1 original.

São nove atividades. As seis primeiras trabalham o RS e os flip-flops montados com portas — três com arquivos prontos, três que você monta. As três últimas usam os flip-flops prontos da biblioteca Memory, para você ver na prática o que estava dentro das caixas. Cada uma tem a mesma estrutura: o que fazer, o que deve aparecer na tela e o que verificar se não aparecer.

Os atalhos que você mais vai usar
  • Ctrl+R (⌘+R) — Reset Simulation: devolve tudo ao estado inicial e limpa o erro de oscilação. É o que se usa para recomeçar, não fechar e reabrir o arquivo.
  • Ctrl+T (⌘+T) — Manual Tick Half Cycle: avança meio ciclo de relógio, ou seja, uma borda. É o modo certo para estudar flip-flops.
  • Ctrl+F9 (⌘+F9) — Manual Tick Full Cycle: avança um ciclo inteiro (subida e descida).
  • Ctrl+K (⌘+K) — Auto-Tick Enabled: liga/desliga o relógio automático.
  • A ferramenta dedo (Poke) muda o valor de um pino; a seta seleciona e move componentes. E lembre: Ctrl+T avança o relógio em uma borda, enquanto Ctrl+I avança a propagação em um atraso de porta — são escalas de tempo diferentes.

Arquivos de apoio​

ArquivoAtividadeO que contém
03-latch-rs-nor.circ1Laço RS com duas portas NOR, entradas S e R independentes, saídas Q e nQ
05-caso-proibido-corrida.circ2O mesmo laço NOR, mas com S e R ligadas a um único pino, para forçar a corrida
04-latch-rs-com-clock.circ3RS com duas NAND de entrada comandadas por um componente Clock
06-flipflops-componentes.circ7Os quatro flip-flops prontos (S-R, J-K, T, D) da biblioteca Memory, cada um com entradas, clock e LEDs
07-contador-t.circ8Contador/divisor de 3 bits com três flip-flops T (T = 1) em cascata
08-jk-preset-clear.circ9J-K com as entradas assíncronas Preset e Clear ligadas a pinos

As duas primeiras atividades práticas da aula anterior — o oscilador em anel (01) e o biestável de dois inversores (02) — são o pré-requisito prático para o que vem aqui: elas mostram o laço de realimentação antes de ele ganhar entradas.

Nos arquivos, a saída complementar aparece como nQ: o Logisim aceita apenas letras, dígitos e sublinhado nos rótulos, então não há como escrever Q.

Atividade 1 — O laço RS com portas NOR​

Objetivo: confirmar a tabela da Seção 1.2 linha a linha.

Abra 03-latch-rs-nor.circ. Compare o desenho com a Figura 2 antes de simular: são o mesmo circuito. Atenção à posição — no laço com NOR, a entrada da porta de cima é R e a da porta de baixo é S.

  1. Observe o estado inicial, com S = R = 0, e anote a cor dos fios.
  2. Aplique S = 1, R = 0; observe Q e nQ; volte S a 0 e observe de novo.
  3. Aplique S = 0, R = 1; observe; volte R a 0 e observe de novo.
  4. Repita os passos 2 e 3 algumas vezes, alternando a ordem, preenchendo a tabela resumida da Seção 1.2.

O que deve aparecer:

  • Passo 1: os fios aparecem vermelhos. Isso é esperado e é a lição mais importante da atividade: o laço nunca recebeu um valor definido, então não há estado nenhum para mostrar — é o biestável recém-energizado. Nenhum comando de Reset conserta isso, porque não é um erro: só escrever no laço resolve.
  • Passo 2: S = 1 leva a Q = 1, nQ = 0, e os fios ficam verdes. Ao voltar S a 0, o valor permanece.
  • Passo 3: R = 1 leva a Q = 0, nQ = 1; ao voltar R a 0, o valor permanece.

Com S = R = 0 a saída fica no valor deixado pela combinação anterior. É o armazenamento acontecendo diante dos seus olhos — e é a diferença que a aula anterior anunciou: o circuito passou a ter passado.

Se as saídas não mudarem: verifique se você está usando a ferramenta dedo, e não a seta.

Atividade 2 — O caso proibido e a corrida​

Objetivo: entender por que S = R = 1 é proibido por regra, e não apenas desaconselhado — e ver, no simulador, de que exatamente depende o resultado.

Comece ainda em 03-latch-rs-nor.circ:

  1. Aplique S = R = 1 e observe as duas saídas.
  2. Volte R a 0 e depois S a 0. Anote o valor final de Q.
  3. Reinicie (Ctrl+R), repita o passo 1, e agora volte primeiro S e depois R. Anote de novo.

O que deve aparecer: com as duas entradas ativas, Q = nQ = 0 — as saídas deixam de ser complementares e o dispositivo já não representa um bit. E o valor final depende de qual entrada você soltou por último: a que ficou ativa mais tempo vence. Isso não é aleatório porque, com o mouse, você nunca solta as duas ao mesmo tempo.

O problema real é justamente o que o mouse não consegue fazer. Para isso existe o segundo arquivo:

Abra 05-caso-proibido-corrida.circ. É o mesmo laço NOR, mas S e R estão ligadas ao mesmo pino, chamado SR — mudá-lo altera as duas entradas no mesmo instante de simulação.

  1. Leve SR a 1 (as duas saídas vão a 0) e depois de volta a 0. Anote Q.
  2. Dê Ctrl+R e repita o passo 4 umas oito vezes, anotando Q a cada tentativa.
  3. Abra Project → Options… → Simulation e desmarque Add noise to component delays. Dê Ctrl+R e repita o passo 4 mais algumas vezes.

O que deve aparecer:

  • Passos 4 e 5 (com ruído ligado, que é como o arquivo vem): as duas portas saem da condição proibida ao mesmo tempo e disputam a estabilização. O ruído de 3% nos atrasos desempata a disputa de um jeito diferente a cada execução, e o valor final de Q varia entre as tentativas.
  • Passo 6 (sem ruído): as duas portas ficam perfeitamente simétricas. Agora não há quem desempate, e o circuito passa a alternar entre 00 e 11 indefinidamente — o Logisim acusa Oscillation apparent. Um empate perfeito não produz um valor errado: produz valor nenhum.

A conclusão: o estado final não é decidido pelo projeto, e sim por diferenças de atraso entre componentes nominalmente iguais — que variam com fabricação, tensão e temperatura. O ajuste Add noise to component delays existe exatamente para tornar isso visível, e ligá-lo ou desligá-lo é a forma de verificar, no Logisim, se um resultado depende de temporização. É por isso que a combinação é excluída por regra de projeto.

Se Q não variar no passo 5: confirme que Add noise to component delays está marcado e que você usou Ctrl+R entre as tentativas — sem reiniciar, o laço parte sempre da mesma configuração.

Se aparecer Oscillation apparent mesmo com o ruído ligado: é o empate do passo 6 acontecendo por acaso, porque o sorteio dos atrasos saiu simétrico. Dê Ctrl+R e repita — e anote a tentativa, porque ela também é resultado.

Atividade 3 — A entrada de clock​

Objetivo: separar "quando o estado pode mudar" de "para qual valor ele muda".

Abra 04-latch-rs-com-clock.circ. Duas portas NAND de entrada combinam S e R com o clock antes de chegarem ao laço.

  1. Desligue o relógio automático (Auto-Tick Enabled, Ctrl+K) se ele estiver ligado.
  2. Clique no componente Clock com a ferramenta dedo até que ele fique em 0.
  3. Com o clock em 0, varie S e R à vontade — todas as quatro combinações. Observe as saídas.
  4. Coloque o clock em 1 e repita as mesmas quatro combinações.
  5. Volte o clock a 0 e verifique se o último valor escrito permaneceu.

O que deve aparecer:

  • Passo 3: nenhuma mudança em S ou R afeta as saídas. As duas NAND de entrada estão com o clock em 0, o que força as saídas delas a 1 e isola o laço.
  • Passo 4: o circuito volta a se comportar como o RS da Atividade 1 — caso proibido incluído.
  • Passo 5: o valor fica travado.

O clock controla quando, não o quê. Repare que ele não resolveu nada quanto ao caso proibido: com CK = 1 e S = R = 1, a indeterminação continua exatamente onde estava.

Atividade 4 — O flip-flop JK e a borda de clock​

Objetivo: ver que a saída ignora tudo o que acontece entre as bordas — o cronograma da Figura 6, ao vivo.

Esta você monta. Comece um arquivo novo (File → New).

  1. Na árvore de componentes à esquerda, abra a pasta Memory e arraste um J-K Flip-Flop para o meio da tela. O bloco tem, do lado esquerdo e de cima para baixo, as entradas J, K e o clock (marcado com o triângulo); do lado direito, Q em cima e Q embaixo; e mais duas entradas nas bordas horizontais, S em cima e R embaixo.
  2. Selecione o flip-flop com a seta e, na tabela de atributos (canto inferior esquerdo), mude Trigger de Rising edge para Falling edge (borda de descida) — é a convenção usada nesta aula.
  3. Abra a pasta Wiring e arraste um Clock. Ligue-o à entrada de clock do flip-flop.
  4. Ainda em Wiring, arraste dois Pin de entrada e ligue-os a J e K; arraste um Pin de saída e ligue-o a Q. Rotule cada um pelo atributo Label.
  5. Desligue o relógio automático (Ctrl+K) e use Manual Tick Half Cycle (Ctrl+T) para avançar uma borda por vez, testando as quatro combinações de J e K.

O que deve aparecer:

  • A saída muda uma única vez por pulso, na borda ativa — não no instante em que você altera J ou K. Mude J com o clock parado: nada acontece até o próximo Ctrl+T que produza uma descida.
  • Como cada Ctrl+T avança meia onda, são necessários dois para completar um ciclo, e apenas um deles é a borda ativa. Se preferir avançar de ciclo em ciclo, use Ctrl+F9.
  • Com J = K = 1, a saída inverte a cada pulso — a linha do JK que o RS não tinha.

Se a saída mudar na borda errada: o atributo Trigger voltou para Rising edge, ou você selecionou o pino em vez do flip-flop ao editar os atributos.

Atividade 5 — Divisor de frequência e contador​

Objetivo: transformar o JK em um flip-flop T e ver a divisão por 2 virar contagem binária.

Continuando o arquivo da Atividade 4:

  1. Substitua os pinos de J e K por dois componentes Constant (pasta Wiring) com o atributo Value em 1 — ou simplesmente deixe os dois pinos fixados em 1. Amarrar J a K é o que produz o flip-flop T da Seção 5.
  2. Acrescente um segundo J-K Flip-Flop, também com Trigger em Falling edge e J = K = 1.
  3. Ligue a saída Q do primeiro à entrada de clock do segundo.
  4. Ligue as duas saídas Q a pinos de saída, rotulados Q0 (primeiro) e Q1 (segundo).
  5. Ligue o relógio automático (Ctrl+K). Se estiver rápido demais, reduza em Simulate → Auto-Tick Frequency.

O que deve aparecer: Q0 tem metade da frequência do clock, e Q1, um quarto. Lendo as duas saídas em paralelo, com Q1 como bit mais significativo, a sequência é 00 → 01 → 10 → 11 → 00: um contador assíncrono de 2 bits, construído sem nenhuma lógica adicional.

Para conferir com calma: desligue o auto-tick e avance com Ctrl+F9 (um ciclo completo por vez), anotando o par Q1 Q0 a cada passo.

Se a contagem sair decrescente: o segundo flip-flop está disparando na borda de subida de Q0. Ou coloque o Trigger dele em Falling edge, ou ligue o clock dele a Q do primeiro em vez de Q.

Atividade 6 — As entradas assíncronas​

Objetivo: ver, literalmente, o que "assíncrono" significa.

Ainda no mesmo arquivo:

  1. Ligue as entradas S (na borda de cima) e R (na borda de baixo) do primeiro flip-flop a dois pinos de entrada, rotulados S e R.
  2. Com o relógio automático rodando e J = K = 1 — ou seja, com a saída invertendo a cada pulso —, leve R a 1.
  3. Devolva R a 0 e observe. Depois repita com S.
  4. Por fim, leve S e R a 1 ao mesmo tempo e observe qual dos dois prevalece.

O que deve aparecer:

  • Passo 2: Q0 vai a 0 imediatamente, sem esperar a próxima borda, e fica travado em 0 enquanto o sinal estiver ativo — mesmo com o clock rodando e J = K = 1.
  • Passo 3: ao soltar R, a inversão a cada pulso recomeça.
  • Passo 4: no componente do Logisim, o R vence — a implementação testa o clear antes do preset. Em um circuito integrado real essa combinação é simplesmente proibida (Seção 4), e nenhum projeto deve depender de qual dos dois ganha.
A polaridade no Logisim é o oposto da do datasheet

Este é o ponto que mais confunde ao passar da teoria para o simulador. Na Seção 4 e nos circuitos integrados reais, Preset e Clear são ativas em nível 0 — daí a barra sobre o nome e o círculo no símbolo.

O J-K Flip-Flop do Logisim-Evolution faz o contrário: as entradas S e R do bloco são ativas em nível 1. Um pino deixado em 0 é a condição de repouso, e é 1 que aciona.

Não é um erro da ferramenta, e sim uma convenção diferente. Ao resolver exercícios da Seção 4, use a polaridade do datasheet; ao montar no Logisim, use a do componente. Se quiser reproduzir o comportamento real, basta colocar um inversor antes de cada uma das duas entradas.

Um atalho útil para depurar

Clicar com a ferramenta dedo sobre o círculo colorido desenhado no meio do bloco do flip-flop inverte o valor armazenado na hora. Serve para pôr o circuito em um estado específico sem ter que chegar até ele pulso a pulso.

Os flip-flops prontos da biblioteca Memory​

Até aqui você montou os flip-flops com portas — é assim que se entende o que há dentro deles. Na prática, ninguém redesenha o laço a cada uso: a biblioteca Memory do Logisim traz os quatro flip-flops prontos, já disparados por borda, exatamente como os blocos que existem dentro de qualquer circuito integrado. As três atividades a seguir usam esses componentes.

Todos têm o mesmo formato — entradas de dados e clock (triângulo) à esquerda, Q e Q à direita, e as entradas assíncronas Preset/Clear nas bordas de cima e de baixo. O que muda de um para o outro é a função e o uso típico. O quadro a seguir resume os quatro, lado a lado:

Flip-flopEntradasTabela-verdade (na borda ativa)O que faz de especialCaso a evitarUso típico
RSS, R00→QaQ_a · 01→0 · 10→1 · 11→✗a célula original; comando direto de set/resetS = R = 1didático; base dos demais
JKJ, K00→QaQ_a · 01→0 · 10→1 · 11→Qa{}_a11 inverte o estado — elimina o caso proibido—contadores síncronos
TT0→QaQ_a · 1→Qa{}_ainverte a cada borda → divide a frequência por 2—contadores, divisores de frequência
DD0→0 · 1→1copia a entrada; sem decisão nem caso proibido—registradores, memória

Repare na progressão: o RS tem um caso inutilizável; o JK o transforma na operação de inversão; o T e o D são o JK restrito a um uso seguro — contar e armazenar. É a mesma história das Seções 1 a 7, agora em quatro caixas prontas.

Borda de subida × descida

Os componentes prontos vêm configurados para borda de subida (o padrão do Logisim e dos circuitos integrados modernos), ao contrário do mestre-escravo do livro (Seção 3), que é sensível à descida. O comportamento é idêntico — muda apenas a borda ativa; o atributo Trigger, na tabela de atributos do componente, permite alternar entre as duas.

Atividade 7 — Os quatro flip-flops prontos​

Objetivo: ver, lado a lado, o comportamento dos quatro flip-flops — sem montar nada.

Abra 06-flipflops-componentes.circ. Estão os quatro (S-R, J-K, T, D), cada um com seus pinos de entrada, um pino de clock e LEDs em Q e nQ.

  1. Em cada flip-flop, com o clock em 0, mude as entradas de dados. Confirme que a saída não muda — só a borda atua.
  2. Gere uma borda clicando no pino de clock (0 → 1) e observe a captura.
  3. No J-K, faça J = K = 1 e pulse o clock várias vezes: Q inverte a cada subida.
  4. No D, ponha D = 1 e pulse (Q = 1); volte D = 0 sem pulsar — Q permanece 1 (memória).
  5. No S-R, tente S = R = 1 e pulse: é o caso proibido. Compare com o J-K na mesma situação.

O que deve aparecer: cada bloco confirma a tabela-verdade da sua seção. Preencha as quatro tabelas testando as combinações de entrada seguidas de uma borda.

Se a saída mudar sem o clock: o clock já estava em 1 e a mudança da entrada coincidiu com a captura; dê Ctrl+R e recomece com o clock em 0.

Atividade 8 — Contador com flip-flops T prontos​

Objetivo: o contador da Atividade 5, agora com componentes prontos.

Abra 07-contador-t.circ. São três flip-flops T com T = 1 fixo (uma Constant); o clock de cada estágio vem do Q do anterior.

  1. Ligue o relógio automático (Ctrl+K) e observe Q2 Q1 Q0 contarem de 000 a 111.
  2. Desligue o auto-tick e avance com Ctrl+T, anotando o valor a cada borda.
  3. Confirme a divisão de frequência: Q0 = metade do clock; Q1 = um quarto; Q2 = um oitavo.

O que deve aparecer: uma contagem binária crescente. Cada flip-flop T divide por 2 a frequência do anterior — é o mesmo princípio da Atividade 5, agora sem montar o laço à mão.

Se a contagem não avançar: confirme que o auto-tick está ligado (Ctrl+K) ou que você está pulsando com Ctrl+T (o tick do relógio), e não Ctrl+I (o passo de propagação).

Atividade 9 — Preset e Clear no componente pronto​

Objetivo: ver as entradas assíncronas agindo por cima do clock — a versão pronta da Atividade 6.

Abra 08-jk-preset-clear.circ. É um J-K com PR (topo) e CLR (base) ligados a pinos.

  1. Com PR = 0 e CLR = 0 e J = K = 1, pulse o clock: Q inverte a cada borda (funcionamento normal).
  2. Sem parar, leve CLR a 1: Q vai a 0 na hora e trava, mesmo com o clock pulsando.
  3. Volte CLR a 0 e leve PR a 1: Q vai a 1 na hora, sem esperar borda.
  4. Leve PR e CLR a 1 ao mesmo tempo: o caso não permitido (as duas saídas deixam de ser opostas).

O que deve aparecer: as entradas assíncronas ignoram o clock e J/K. Vale a regra da Seção 4: verifique PR e CLR primeiro; só com ambos em 0 é que o clock atua.

Ativas em nível 1 no Logisim

Como na Atividade 6, no Logisim PR e CLR são ativas em nível 1 (1 aciona), ao contrário do datasheet, em que são ativas em nível 0. Para reproduzir o comportamento real, coloque um inversor antes de cada uma.


Referências​

Principais (essenciais)​

  • CAPUANO, Francisco Gabriel. Sistemas digitais: circuitos combinacionais e sequenciais. São Paulo: Érica, 2014. (Série Eixos). Número de chamada: Ac.5012157

    • Capítulo 4 — Circuitos Sequenciais, seções 4.1 e 4.2 (texto de referência desta aula)
  • SILVA, Gabriel Pereira da. Arquitetura e organização de computadores: uma introdução. Rio de Janeiro: LTC, 2024. Recurso online — Acervo Virtual. Número de chamada: Ac.5063593

    • Elementos de armazenamento e o subsistema de memória

Aprofundamento (opcionais)​

  • TOCCI, Ronald J.; WIDMER, Neal S.; MOSS, Gregory L. Sistemas digitais: princípios e aplicações. São Paulo: Pearson. Número de chamada: Ac.131146

    • Tratamento detalhado de latches, flip-flops disparados por borda e parâmetros de temporização (setup e hold)
  • DELGADO, José. Arquitetura de computadores. Rio de Janeiro: LTC, 2017. Recurso online — Acervo Virtual. Número de chamada: Ac.5013563

  • WEBER, Raul Fernando. Fundamentos de arquitetura de computadores. Porto Alegre: Bookman, 2012. Número de chamada: 004.2 W375fuf 4.ed.-2012 Ac.113940

Pré-requisito​