Bom, vamos começar definindo o que é lógica sequencial. Para tanto, vamos dar uma rápida revisada na definição de lógica combinacional.
Um circuito digital combinacional é aquele cuja saída depende única e exclusivamente das entradas em um dado momento. Porém, na lógica sequencial a saída agora depende das entradas de agora e de como a saída estava antes.
Essa definição até que é boa, mas temos que trabalhar um pouco nela e definir o quão antes. Pois dizer que a saída de agora depende da saída de antes não informa se era a saída de 1 segundo atrás ou o estado da saída ontem!
Para resolver esse "problema" os sistemas digitais sequenciais trabalham respeitando um sinal de clock. Você com certeza já ouviu falar neste termo, pelo menos implicitamente. Quando falamos que um processador de PC trabalha com 3GHz, estamos falando justamente deste tal de clock. Ele, dessa forma, acaba definindo a velocidade com o que o sistema digital trabalha.
Para nossos exemplos, vamos considerar um sinal de clock de 1Hz, o que dá um período de 1 segundo. Isto significa que cada transição, cada mudança de estado vai acontecer a cada 1 segundo. Dessa forma, podemos usar aquela definição de lógica combinacional e dizer que o estado da saída agora depende das entradas agora e de como estava a saída 1 segundo atrás.
Parando para pensar (ou você também pode pensar caminhando, como preferir), se nós dizemos que a saída agora depende do estado de antes, isto significa que em lógica sequencial nós trabalhamos com a ideia de memória. Nós conseguimos (e com "nós", me refiro ao sistema digital...) lembrar o estado de antes para definir o estado atual. Para estudar este fenômeno novo, vamos trabalhar com o elemento mais simples da lógica sequencial. Se em combinacional o elemento mais simples era uma porta lógica, agora em sequencial o elemento mais simples será o flip-flop SR (ou RS).
Análise da Tabela Verdade do Flip-Flop SR
Vamos explicar algumas coisas para analisar este circuito. Ele possui duas entradas, que se chamam S (Set) e R (Reset) e duas saídas que são Q e Q'. A saída Q' é simplesmente Q negado (Q negativo). Ou seja, se Q for 1, Q' obrigatoriamente deverá ser 0 e vice-versa.
Vamos começar supondo R=0 e S=0. Se a saída anterior era Q=0, então Q'=1. Dessa forma na porta NOR de cima temos R e Q' (0 nor 1) como entradas que resulta em Q=0. Na porta NOR de baixo temos S e Q (0 nor 0) como entradas que resultam em Q'=1 como saída.
Supondo as mesmas entradas ainda, R=0 e S=0, mas as saídas ao contrário, ou seja, Q=1 e Q'=0, teríamos na porta NOR de cima como entrada (0 nor 0) que resulta em Q=1 e na porta NOR de baixo teríamos como entrada (0 nor 1) que resultaria em Q'=0.
Vimos que se tanto R como S forem 0, a saída continua exatamente como está. Interpretamos isso da seguinte forma: se eu não estou Setando nem Resetando, então não estou fazendo nada. Se não faço nada, as coisas continuam iguais a como estavam antes.
Supondo R=1 e S=0, começando com Q=1 e Q'=0. Neste caso na porta NOR de cima a entrada seria (1 nor 0) que resulta em Q=0 e a porta NOR de baixo teria como entrada (0 nor 0), que resulta em Q'=1.
Supondo R=1 e S=0, mas dessa vez com Q=0 e Q'=1. Neste caso a porta NOR de cima tem como entrada (1 nor 1), apresentando como saída Q=0 e a NOR de baixo teria (0 nor 0) como entrada, apresentando Q'=1 como saída.
Ou seja, se eu tiver um sinal em R (Reset), eu obrigo a saída Q a ser igual a 0, ou seja, eu reseto o valor de Q. Fazendo Q valer zero eu, consequentemente, transformo Q' em 1. Se a saída Q já era 0 antes de eu ativar o RESET, a saída continua no estado 0.
Supondo dessa vez R=0 e S=1, com Q=1 e Q'=0. Temos então (0 nor 0) na NOR de cima, resultando em Q=1 e (1 nor 1) na NOR de baixo, resultando em Q'=0.
Supondo ainda R=0 e S=1, mas com Q=0 e Q'=1 dessa vez. Temos então (0 nor 1) na NOR de cima, resultando em Q=0 e (1 nor 0) na NOR de baixo, resultando em Q'=0.
De forma análoga ao caso do Reset, se eu tiver um sinal em S (Set), eu obrigo a saída Q a ser igual a 1, ou seja, eu Seto o valor de Q. Com isso eu obrigo, por consequência, a saída Q' a ser igual a 0. Se a saída Q já era 1 antes de eu ativar o SET, ela simplesmente continua valendo 1.
Últimos dois casos. Suponha R=1 e S=1, com Q=1 e Q'=0. Assim na NOR de cima temos (1 nor 0) resultando em Q=0 enquanto a NOR de baixo apresenta como entrada (1 nor 1) que dá como resultado Q'=0.
Por fim, suponha R=1 e S=1, agora com Q=0 e Q'=1. Na NOR de cima temos como entrada (1 nor 1) que resulta em Q=0 e na NOR de baixo temos (1 nor 0) que também resulta em Q'=0.
Perceba que se tanto R quanto S forem 1, temos que tanto Q quanto Q' são 0. Isso é um problema, pois definimos que Q' devia ser o contrário de Q. E imagine que tanto Q quanto Q' são 0. Agora eu faço tanto R quanto S valerem 0 também. Dessa forma a saída continua igual. Certo? Errado. Se R e S são 0 quando Q e Q' também são 0, então Q e Q' passam a valer ambos 1. Isso desfaz nossa definição que quando eu não estou setando nem resetando a saída permanece inalterada.
Por causa desses problemas, nenhum sistema sequencial que emprega flip-flop SR utiliza a última situação, como é mostrado pela nossa tabela verdade. Dizemos então que estas não são entradas válidas para o flip-flop SR e que devemos evitá-las.
Mas este flip-flop não está sendo influenciada por nenhum sinal de clock. Dessa forma o flip-flop não está funcionando de forma sincronizada e podemos colocar qualquer entrada qualquer hora que a saída irá mudar (a menos, claro, que ambas as entradas sejam zero). Essa situação de poder alterar a saída a qualquer hora é muito indesejável em algumas aplicações (como um computador, por exemplo). Então nossa missão agora é fazer o flip-flop funcionar (ou seja, permitir que sua saída mude de estado) somente em intervalos sincronizados e muito curtos. Dessa forma, solucionamos o problema com o seguinte circuito:
Abaixo está a imagem de um flip-flop com entrada para clock.
Esse flip-flop é similar ao anterior, mas com uma diferença. Ele só funciona quando o clock=1. Pois se clock for igual a 0, a saída da porta E vai ser zero independente dos valores de R e S e, dessa forma, a saída se manterá igual independente das entradas R e S. O flip-flop só vai ler mesmo as entradas R e S quando o sinal de clock for igual a 1.
Supondo que o clock dê um pulso de nível alto muito curto uma vez a cada 1 segundo. Dessa forma as saídas só vão ser atualizadas conforme as entradas do flip-flop a cada 1 segundo. Porém é importante que o pulso do clock seja muito breve. Pois se o pulso de clock for longo, é possível que o flip-flop leia duas entradas diferentes enquanto o clock estiver ativado e, assim, troque o estado da saída 2 vezes, o que é indesejável.
Existem, até onde eu sei, 4 tipos de "leitura" de clock. Um clock que é ativo com o sinal alto e um clock ativo com o sinal baixo. Esses dois tipos são ruins pois, em geral, o sinal de clock passa muito tempo em estado alto e baixo (considere como clock, por exemplo, um sinal com duty cicle igual a 50%). Com isso temos o problema de ser possível colocar duas entradas no mesmo pulso de clock, o que é indesejável.
Então é mais comum os outros dois tipos de clock, que são clocks por transição. Assim o clock fica ativo quando o clock passa do estado baixo para o alto ou do estado alto para o baixo. Com isso, o clock fica ativo por um tempo muito menor. Assim é muito mais difícil que o flip-flop receba duas entradas durante o tempo de clock ativo, pois o tempo de clock ativo é muito menor.
Com este post espero que tenham entendido a ideia de clock e a ideia de flip-flop SR. Recapitulando brevemente, clock é o pulso que faz todo o sistema digital funcionar de forma síncrona. Ele é como o maestro da grande orquestra da eletrônica digital. O flip-flop SR, que foi estudado neste post, é o elemento mais simples da eletrônica digital sequencial e o primeiro elemento que estudamos que contém a propriedade de memória, ou seja, ele se lembra de seu estado passado e usa essa informação para determinar o estado atual. Se o leitor que não conhecia flip-flops nem clocks sair deste post com essas informações bem compreendidas, já me considero um blogueiro feliz. *-*
E por hoje era isso. Ainda temos outros tipos de flip-flops para aprender (como um tipo que resolve o problema das duas entradas valendo 1) e, no futuro, veremos circuitos práticos com flip-flops (como um clapper simples, que aciona uma carga quando bate-se palmas!) que são muito interessentes. Então, até lá e se cuidem. E lembrem-se, qualquer dúvida, sugestão ou apontamento de erros no post, usem os comentários que eu costumo responder dentro de 1 dia.
Feedback people, please...
Nenhum comentário:
Postar um comentário