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 () a partir da saída anterior ().
- 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 = 0eQ = 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 (), 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: é o estado da saída antes das entradas e 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.
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 . São oito casos.
| S | R | Q | Comportamento | ||
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | estado estável — mantém |
| 0 | 0 | 1 | 1 | 0 | estado estável — mantém |
| 0 | 1 | 0 | 0 | 1 | fixa em 0 |
| 0 | 1 | 1 | 0 | 1 | fixa em 0 |
| 1 | 0 | 0 | 1 | 0 | fixa em 1 |
| 1 | 0 | 1 | 1 | 0 | fixa em 1 |
| 1 | 1 | 0 | 1 | 1 | não permitido |
| 1 | 1 | 1 | 1 | 1 | não permitido |
Eliminando a redundância, chega-se à tabela que se usa na prática:
| S | R | |
|---|---|---|
| 0 | 0 | (mantém) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | nã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.
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.
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.
O comportamento resume-se a duas situações:
| CK | Comportamento |
|---|---|
| 0 | as saídas das portas de entrada são sempre 1: o estado fica travado |
| 1 | o 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.
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:
- 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.
- 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.
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
| J | K | Comportamento | |
|---|---|---|---|
| 0 | 0 | mantém o estado | |
| 0 | 1 | 0 | zera (reset) |
| 1 | 0 | 1 | estabelece (set) |
| 1 | 1 | Q | inverte 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:
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.
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.
| CLR | PR | |
|---|---|---|
| 0 | 0 | não permitido |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | funcionamento 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.
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.
| T | |
|---|---|
| 0 | (mantém) |
| 1 | Q (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 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.
| D | |
|---|---|
| 0 | 0 |
| 1 | 1 |
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
| Tipo | Entradas de dados | Equação característica | Caso a evitar | Onde é usado |
|---|---|---|---|---|
| RS | S, R | = S + R· | S = R = 1 | célula elementar; base dos demais |
| JK | J, K | = J·Q + K· | — | contadores síncronos |
| T | T | = T ⊕ | — | contadores assíncronos, divisores de frequência |
| D | D | = 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: = 1·Q + 0· = Q, 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
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
Explique, com suas palavras, por que um circuito construído apenas com portas lógicas sem realimentação não consegue armazenar informação.
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.
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.
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 antes de revelar o gabarito da Questão 4.
| # | Clock | J | K | PR | CLR | ||
|---|---|---|---|---|---|---|---|
| 1 | 1 → 0 | 0 | 0 | 1 | 1 | 1 | |
| 2 | 1 → 0 | 0 | 1 | 1 | 1 | 1 | |
| 3 | 1 | 1 | 1 | 1 | 0 | 1 | |
| 4 | 0 | 1 | 0 | 0 | 1 | 0 | |
| 5 | 1 → 0 | 1 | 0 | 1 | 1 | 0 | |
| 6 | 1 → 0 | 0 | 1 | 1 | 1 | 1 | |
| 7 | 0 → 1 | 0 | 1 | 1 | 0 | 1 | |
| 8 | 0 → 1 | 1 | 1 | 0 | 1 | 1 |
Determine o valor de Qf em cada linha da tabela acima, justificando as três primeiras.
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.
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.
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+Tavança o relógio em uma borda, enquantoCtrl+Iavança a propagação em um atraso de porta — são escalas de tempo diferentes.
Arquivos de apoio
| Arquivo | Atividade | O que contém |
|---|---|---|
03-latch-rs-nor.circ | 1 | Laço RS com duas portas NOR, entradas S e R independentes, saídas Q e nQ |
05-caso-proibido-corrida.circ | 2 | O mesmo laço NOR, mas com S e R ligadas a um único pino, para forçar a corrida |
04-latch-rs-com-clock.circ | 3 | RS com duas NAND de entrada comandadas por um componente Clock |
06-flipflops-componentes.circ | 7 | Os quatro flip-flops prontos (S-R, J-K, T, D) da biblioteca Memory, cada um com entradas, clock e LEDs |
07-contador-t.circ | 8 | Contador/divisor de 3 bits com três flip-flops T (T = 1) em cascata |
08-jk-preset-clear.circ | 9 | J-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.
- Observe o estado inicial, com
S = R = 0, e anote a cor dos fios. - Aplique
S = 1,R = 0; observeQenQ; volteSa 0 e observe de novo. - Aplique
S = 0,R = 1; observe; volteRa 0 e observe de novo. - 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
Resetconserta isso, porque não é um erro: só escrever no laço resolve. - Passo 2:
S = 1leva aQ = 1,nQ = 0, e os fios ficam verdes. Ao voltarSa 0, o valor permanece. - Passo 3:
R = 1leva aQ = 0,nQ = 1; ao voltarRa 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:
- Aplique
S = R = 1e observe as duas saídas. - Volte
Ra 0 e depoisSa 0. Anote o valor final deQ. - Reinicie (
Ctrl+R), repita o passo 1, e agora volte primeiroSe depoisR. 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.
- Leve
SRa 1 (as duas saídas vão a 0) e depois de volta a 0. AnoteQ. - Dê
Ctrl+Re repita o passo 4 umas oito vezes, anotandoQa cada tentativa. - Abra Project → Options… → Simulation e desmarque Add noise to component delays. Dê
Ctrl+Re 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
Qvaria 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
00e11indefinidamente — o Logisim acusaOscillation 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.
- Desligue o relógio automático (Auto-Tick Enabled,
Ctrl+K) se ele estiver ligado. - Clique no componente Clock com a ferramenta dedo até que ele fique em 0.
- Com o clock em 0, varie
SeRà vontade — todas as quatro combinações. Observe as saídas. - Coloque o clock em 1 e repita as mesmas quatro combinações.
- Volte o clock a 0 e verifique se o último valor escrito permaneceu.
O que deve aparecer:
- Passo 3: nenhuma mudança em
SouRafeta 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).
- 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.
- 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.
- Abra a pasta Wiring e arraste um Clock. Ligue-o à entrada de clock do flip-flop.
- 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.
- 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+Tque produza uma descida. - Como cada
Ctrl+Tavanç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, useCtrl+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:
- 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.
- Acrescente um segundo J-K Flip-Flop, também com Trigger em Falling edge e J = K = 1.
- Ligue a saída Q do primeiro à entrada de clock do segundo.
- Ligue as duas saídas Q a pinos de saída, rotulados
Q0(primeiro) eQ1(segundo). - 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:
- Ligue as entradas S (na borda de cima) e R (na borda de baixo) do primeiro flip-flop a dois pinos de entrada, rotulados
SeR. - Com o relógio automático rodando e J = K = 1 — ou seja, com a saída invertendo a cada pulso —, leve
Ra 1. - Devolva
Ra 0 e observe. Depois repita comS. - Por fim, leve
SeRa 1 ao mesmo tempo e observe qual dos dois prevalece.
O que deve aparecer:
- Passo 2:
Q0vai 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
Rvence — 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.
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.
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-flop | Entradas | Tabela-verdade (na borda ativa) | O que faz de especial | Caso a evitar | Uso típico |
|---|---|---|---|---|---|
| RS | S, R | 00→ · 01→0 · 10→1 · 11→✗ | a célula original; comando direto de set/reset | S = R = 1 | didático; base dos demais |
| JK | J, K | 00→ · 01→0 · 10→1 · 11→Q | 11 inverte o estado — elimina o caso proibido | — | contadores síncronos |
| T | T | 0→ · 1→Q | inverte a cada borda → divide a frequência por 2 | — | contadores, divisores de frequência |
| D | D | 0→0 · 1→1 | copia 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.
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.
- 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.
- Gere uma borda clicando no pino de clock (0 → 1) e observe a captura.
- No J-K, faça J = K = 1 e pulse o clock várias vezes:
Qinverte a cada subida. - No D, ponha D = 1 e pulse (Q = 1); volte D = 0 sem pulsar —
Qpermanece 1 (memória). - 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.
- Ligue o relógio automático (
Ctrl+K) e observeQ2 Q1 Q0contarem de000a111. - Desligue o auto-tick e avance com
Ctrl+T, anotando o valor a cada borda. - 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.
- Com
PR = 0eCLR = 0e J = K = 1, pulse o clock:Qinverte a cada borda (funcionamento normal). - Sem parar, leve
CLRa 1:Qvai a 0 na hora e trava, mesmo com o clock pulsando. - Volte
CLRa 0 e levePRa 1:Qvai a 1 na hora, sem esperar borda. - Leve
PReCLRa 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.
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
- Revisão: Fundamentos de Circuitos Digitais — portas lógicas, álgebra booleana e teoremas de De Morgan, usados na análise dos laços desta aula.