Evitando metaestabilidade na prática - VHDL

Evitando metaestabilidade

Projeto de sistemas digitais com domínios de clock distintos estão sujeitos a problemas de metaestabilidade. Uma solução prática para evitar este problema é a utilização de flip flops de sincronismo. A cadeia de flip flop de sincronismo é uma das técnicas utilizadas para transferir sinais entre circuitos de domínio de clocks distintos ou de domínios assíncronos para domínios síncronos.

 

Este artigo irá apresentar um projeto em VHDL de uma cadeia de flip flops de sincronismo para evitar a metaestabilidade em FPGAs.

 

Para compreender o que é a metaestabilidade e qual a solução prática para este fenômeno, recomenda-se a leitura do artigo Metaestabilidade.

 

 

Uma Situação do Cotidiano

 

Para exemplificar na prática este conceito, convido o leitor a imaginar a seguinte situação recorrente no cotidiano de projetistas de FPGAs: uma entrada digital acionada por um ser humano através de um push button será processada dentro de um bloco digital. Para este exemplo, o autor está considerando a existência de um circuito de debounce externo ao FPGA.

 

Este exemplo ilustra a situação na qual a metaestabilidade possa ocorrer. Temos um sinal de um domínio de clock assíncrono (ação do ser humano ao pressionar o push button) entrando em um FPGA com domínio de clock síncrono e bem estabelecido.

 

O flip flop que será utilizado para compor a cadeia de sincronismo é um flip flop do tipo D de transição positiva de clock, com reset em nível alto assíncrono e clock enable.

 

 

Flip Flop do tipo D em VHDL

 

Um flip flop D em VHDL pode ser descrito da seguinte forma:

 

 

Resultado do RTL Viewer da ferramenta Quartus II.

 

Flip Flop D
Figura 1 - Flip Flop D

 

 

Cadeia de Flip Flop de Sincronismo em VHDL

 

A entidade em VHDL a ser descrita corresponde à área demarcada em pontilhado na Figura 2.

 

Cadeia de Flip Flops de Sincronismo
Figura 2 - Cadeia de Flip Flops de Sincronismo

 

Descrição da entidade para evitar metaestabilidade com uma cadeia de dois flip flops de sincronismo em VHDL:

 

 

Resultado do RTL Viewer da ferramenta Quartus II.

 

RTL Viewer Cadeia de Flip Flops de Sincronismo
Figura 3 - RTL Viewer Cadeia de Flip Flops de Sincronismo

 

A entidade metaestabilidade encapsula o sinal de entrada do sistema input e disponibiliza o sinal output para ser utilizado no projeto do sistema digital.

 

 

Conclusões

 

Utilizar a cadeia de flip flops de sincronismo evita problemas de metaestabilidade em projetos de circuitos digitais. Recomenda-se utilizar este recurso quando tem-se uma migração de um sinal assíncrono para um domínio de clock síncrono, como por exemplo os pinos de entradas em um FPGA. A mesma recomendação é sugerida para migração de sinais entre domínio de clocks distintos dentro de um mesmo FPGA, desde que seja respeitada a regra: a frequência do domínio de clock de origem deve ser menor que a frequência do domínio de clock de destino.

 

 

Referências:

 

Créditos para a imagem destacada: http://www.fpga-faq.com/FAQ_Pages/0017_Tell_me_about_metastables.htm

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.

Caio Alonso
Engenheiro da Computação e Mestre em Engenharia Elétrica pela Universidade Federal de Itajubá. Possui experiência no desenvolvimento de hardware e firmware para sistemas embarcados. Apaixonado por projetos de circuitos digitais utilizando VHDL/Verilog. Atualmente trabalha no desenvolvimento de inversores de frequência na WEG Drives & Controls - Automação em Jaraguá do Sul. Santista roxo, curte praia, frescobol e kitesurf.

Deixe um comentário

avatar
 
  Notificações  
Notificar