Latch - O que você precisa saber sobre algo tão simples, mas tão importante

Latch

Prezado leitor, este post tem por objetivo introduzir brevemente o conceito de latch (figura 1). Primeiramente um latch não é somente uma música do Sam Smith (confira aqui), latch também é um elemento primitivo de memória amplamente utilizado em microeletrônica. Ou seja, um latch armazena uma informação. Temos que ter em mente que sistemas digitais, em geral, possuem circuitos sequencias que armazenam bits de informação e, portanto, temos que considerar os dispositivos mais simples como os latches antes de falarmos em flip-flops, mesmo sabendo que raramente um projetista utiliza latch para o desenvolvimento de um projeto (quem programa HDL sabe bem que devemos evitar latch - #ficaadica).

 

Para entendermos melhor para que serve um latch, temos que ter em mente que um circuito sequencial tem as suas saídas (output) dependentes tanto do estado atual ou do estado corrente da entrada (input).

 

latch
Figura 1 - Latch: elemento primitivo de memória

 

Uma vez que este estado é alterado torna-se necessário de alguma forma armazenar essa informação até que futuramente novas combinações nas entradas voltem a ocorrer e mudem este estado. Portanto, para esse armazenamento são utilizadas células de memória, no caso latches ou flip-flops. Dessa forma, iremos discutir mais a fundo sobre latch-SR padrão, latch-SR sensível a nível e o latch do tipo D e, por fim, sobre como é construído um flip-flop [1][2] .

 

 

Realimentação

 

Segundo [1] o método básico para armazenamento de um bit em um circuito digital é a realimentação deste circuito. O exemplo (figura 2) abaixo ilustra todos os passos dessa realimentação. Na figura 2 (a) tanto as entradas quanto a saída da porta lógica OR estão em zero. No transcorrer a entrada S é alimentada - figura 2 (b), que por sua vez é executada a lógica OR e cuja saída muda portanto para nível lógico 1 - figura 2 (c). Na figura 2 (d) é possível observar que a outra entrada do circuito é realimentada pela saída. Por fim na figura 2 (e) a entrada S é novamente colocada em nível lógico zero. Onde está o problema agora?

 

latch
Figura 2 - Armazenamento realimentado [1]

 

O maior problema levantado pelo autor é que uma vez a entrada S muda de estado (figura 2 (e)) para 1 a saída Q permanecerá sempre em 1 - isto ocorre devido à realimentação (ao menos que o circuito seja desligado).

 

 

LATCH-SR BÁSICO

 

Um solução para resolver o problema descrito anteriormente foi o desenvolvimento do latch-SR (figura 3) - uma combinação entre duas portas NOR inter-alimentadas. De forma simples podemos pensar que um latch SR funciona da seguinte forma: a porta S (SET) obriga o latch a ser um, enquanto a porta R (RESET) obriga o latch a ser zero.

 

latchRS
Figura 3 - Latch SR Básico

 

Como nem tudo são flores, um latch SR também possui um porém. Quando ambas as entradas S e R ficam em 1 ao mesmo tempo pode ocorrer um problema de indefinição do estado, ou seja, a saída Q do latch SR vai começar a oscilar (figura 4) quando S e R ambas voltarem a ser zero. Isso para um circuito digital não é aceitável. 

 

instabilidade
Figura 4 - Instabilidade na saída Q -quando S = 0 e Q = 0

 

O que realmente ocorre em um circuito real são atrasos nas linhas que interligam os sistemas, portanto em algum momento, depois de um período de oscilação, umas das portas poderá estar atrasada ou adiantada o suficiente para tornar o circuito estável. Essa indefinição é chamada de condição de corrida (race condition), e torna o latch-SR básico muito instável para projetos digitais.

 

 

LATCH-SR Sensível a Nível

 

Um latch-SR Sensível a Nível é um latch cujas portas de entradas S e R somente são habilitadas quando a terceira porta E (Enable) é habilitada. Em termos gerais, somente colocamos a entrada E em 1 quando realmente tivermos seguros que as entradas S e R estão estáveis. A figura 5 ilustra o latch-SR sensível a nível.

 

latchRSnivel
Figura 5 - Latch-SR Sensível a Nível

 

 

LATCH-SR tipo D 

 

Um latch com uma configuração mais avançada é o latch-SR do tipo D. Este latch evita definitivamente o problema de trepidação mencionado na figura 4. O latch-SR tipo D difere do latch-SR Sensível a Nível por conta da inclusão de uma porta inversora entre as entradas S e R.  Dessa forma, devido ao atraso inerente à porta NOT, estamos garantindo que as entradas S e R não serão 1 ao mesmo tempo, desde de que a porta de enable esteja desabilitada [1].

 

latchD
Figura 6 - Latch do tipo D com entrada de habilitação E (posteriormente a lógica será simplificada, ou seja, tem uma AND a mais)

 

Chegamos ao ponto de virada (turning point) - o latch tipo D é, portanto, o ponto de partida para estruturas mais complexas para armazenamento de um bit, ou seja, com a combinação de dois latches do tipo D podemos projetar um flip-flop do tipo D.

 

 

Latch – Aplicação

 

Uma aplicação interessante para um latch é a supressão de ruídos de contato (chaves mecânicas), estamos falando do conhecido debouncing ou contact bounce (figura 7). 

 

vout
Figura 7 - Trepidação por comutação de chave mecânica

 

Um forma de evitarmos o problema de trepidação é com a inserção de um latch na saída da chave como ilustrado na figura 8.

 

latchTrip
Figura 8 - Latch como solução para debouncing

 

 

Flip-Flop

 

Por fim chegamos à unidade básica de memória - o flip-flop. Um flip-flop do tipo D é um bloco de armazenamento de 1 bit, sensível à borda, ou seja, quando a entrada Clk variar, seja na subida ou na descida do sinal, o sinal da entrada é transmitido para a saída. Um flip-flop do tipo D é composto de dois latches do tipo D ligados em modo mestre/escravo (figura 9).

  

ff
Figura 9 - Flip-flop tipo D combinação de dois latches D

 

Caro leitor, o assunto é amplo e importante. O presente post cobre muito superficialmente o assunto, mas levanta tópicos importantes. Quem pretende se enveredar no campo da microeletrônica necessita entender o assunto de forma mais aprofundada, em especial flip-flops. Outro aspecto interessante de lembrar são as diversas aplicações para que esses blocos de armazenamento de dados podem servir. 

 

 

Referências

 

[1] Sistemas Digitais - Projeto, Otimização e HDLs - Frank Vahid

[2] CMOS VLSI Design: A Circuits and Systems Perpesctive (4th ed.) - Neil West, David Harris

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Rodrigo Pereira
Engenheiro da Computação e Mestre em Computação Aplicada, cursou o programa Brasil-IP e CI-Brasil em Campinas/SP. Atualmente cursa doutorado junto ao PPGeEL - UFSC. Possui experiência no desenvolvimento e projeto de hardware e firmware para sistemas embarcados. Jornalista freelancer, curte praia e conhecer outros lugares. No tempo livre respira aviação. Amo meu filho, Francisco.

Deixe um comentário

avatar
 
  Notificações  
Notificar