Metaestabilidade

Metaestabilidade

Neste artigo iremos apresentar o conceito de metaestabilidade em sistemas digitais de maneira simples e rápida. Desmitificar esse conceito e propor uma solução para eliminá-lo são as ideias principais deste artigo.

 

 

Introdução

 

A metaestabilidade é um fenômeno que pode causar falhas em dispositivos digitais, incluindo FPGAs, em duas condições:

  1. Quando um sinal é transferido entre circuitos de domínios de clock distintos;
  2. Quando um sinal é transferido de um circuito assíncrono para um circuito síncrono.

 

Este artigo descreve o fenômeno metaestabilidade, explica o porquê ocorre, discute como isso pode levar sistemas a falhas e propõe uma solução para minimizar as falhas.

 

 

O que é metaestabilidade?

 

Todos os flip flops em dispositivos digitais, como por exemplo FPGAs, possuem requisitos de tempos bem definidos que permitem que cada flip flop capture corretamente um dado em sua entrada e produza um sinal de saída. Para garantir uma operação confiável, o dado de entrada de um flip flop deve estar estável por um tempo mínimo antes da borda do clock (register set up time ou tSU) e por um tempo mínimo depois da borda do clock (register hold time ou tH). A saída do flip flop é então disponibilizada depois de um tempo específico de atraso de propagação do sinal (clock-to-output delay ou tCO). Se um dado de entrada viola os requisitos de tSU ou tH, a saída do flip flop é imprevisível. Este estado é conhecido como estado de metaestabilidade. No estado de metaestabilidade (ou metaestado), a saída do flip flop pode flutuar entre os estados lógicos alto e baixo por um tempo indeterminado, o que significa que a transição para um estado lógico definido alto ou baixo é maior que o tempo tCO.

 

Em sistemas síncronos, os sinais de entrada devem respeitar os requisitos de temporização para que não ocorra problema de metaestabilidade. A metaestabilidade geralmente ocorre quando um sinal é transferido entre circuitos de domínios de clock distintos ou transferido de um circuito assíncrono para um circuito de síncrono. O projetista do circuito que irá tratar um sinal proveniente de um domínio de clock distinto ou assíncrono não consegue garantir que o sinal irá respeitar os tempos necessários de tSU e tH, pois o sinal pode chegar em qualquer instante em relação ao clock do circuito projetado. Entretanto, é válido reforçar que nem toda transição que viole os tempos de tSU ou tH de um flip flop resulte em um metaestado. A probabilidade de um flip flop entrar no metaestado e o tempo necessário para retornar a um estado estável varia de acordo com a tecnologia do processo usado na manufatura do dispositivo e na condição de operação. Na maioria dos casos, um flip flop em mestaestado rapidamente irá retornar a um estado lógico estável definido.

 

Um flip flop armazenando um dado de entrada em uma borda de clock pode ser representado como uma bola sendo liberada em uma colina, conforme a figura 1. Os lados da colina representam os estados estáveis da saída do flip flop - o valor antigo e o valor novo, após uma borda de clock - e o topo da colina representa o metaestado. Se a bola é liberada no topo da colina, ela pode se equilibrar neste ponto indefinidamente, mas na prática a bola desliza para um dos lados da colina e rola colina abaixo. Quanto mais a bola se distancia do topo da colina, mais rápido a bola chega a um estado estável no pé da colina.

 

Metaestabilidade representada como uma bola liberada em uma colina
Figura 1 - Metaestabilidade representada como uma bola liberada em uma colina [1].

 

Se um dado de entrada de um flip flop muda de estado lógico entre uma borda de clock e o tempo mínimo tH, tem-se uma condição análoga à bola sendo liberada no lado de "valor antigo" da colina, e o sinal de saída permanece no valor original para aquela borda de clock. Quando um dado de entrada muda de estado antes da borda do clock e do tempo mínimo tSU, e é mantido no mesmo estado durante o tempo tH, tem-se uma condição análoga à bola sendo liberada no lado de "valor novo" da colina, e a saída apresenta um novo estado estável rapidamente respeitando o tempo tCO. Entretanto, quando um dado de entrada viola o tSU ou o tH, tem-se uma situação semelhante à bola sendo liberada no topo da colina. Se a bola é liberada próxima ao topo da colina, a bola demora um longo tempo até alcançar o pé da colina, o que aumenta o tempo de atraso da transição do clock para uma saída estável além do tempo definido tCO.

 

A figura 2 ilustra sinais em metaestado. O dado de entrada se modifica do estado lógico baixo para alto enquanto ocorre uma borda de clock, violando o requisito de tempo tSU de um flip flop. Os sinais de saída do exemplo iniciam em estado lógico baixo e vão para o mestaestado, flutuando entre os estados lógicos baixo e alto. O sinal de saída A opta assumir o novo dado de entrada em nível lógico alto, e o sinal de saída B retorna para o nível lógico original baixo. Em ambos os casos, a transição para um estado definido baixo ou alto demora além do atraso definido pelo tCO do flip flop.

 

Exemplo de sinais de saída de flip flops em metaestado
Figura 2 - Exemplo de sinais de saída de flip flops em metaestado [1].

 

 

Quando a metaestabilidade provoca uma falha no projeto?

 

Se um sinal de saída de um flip flop vai para um estado lógico válido antes que o próximo flip flop o capture, então o sinal metaestável não impacta negativamente a operação do sistema. Mas se um sinal metaestável não vai para um estado lógico válido (alto ou baixo) antes de ser processado pelo próximo flip flop, ele pode causar uma falha no sistema.

 

Continuando com a analogia da bola na colina, a falha pode acontecer quando o tempo que a bola leva para alcançar o pé da colina (um estado lógico estável alto ou baixo) excede o tempo previsto, tCO mais o tempo de atraso no roteamento. Quando o tempo que um sinal metaestável demora para ir a um estado lógico estável excede o período do clock de um sistema digital, pode-se ter uma falha na lógica devido ao estado lógico inconsistente gerado pelo sinal metaestável, isto é, os flip flops que processarão este sinal podem capturar diferentes valores para o sinal metaestável.

 

 

Uma solução prática! Cadeia de flip flops de sincronismo

 

Quando um sinal é transferido entre circuitos de domínios de clock distintos ou clocks assíncronos é necessário sincronizar este sinal no novo domínio de clock antes de ser utilizado. O primeiro flip flop no domínio do novo clock faz o papel de flip flop de sincronismo.

 

Para minimizar as falhas devido à metaestabilidade em transferências de sinais assíncronos, os projetistas tipicamente usam uma sequência de flip flops (uma cadeia de flip flop de sincronismo) no domínio do clock destino para resincronizar o sinal no novo domínio de clock. Estes flip flops permitem um tempo extra para que um sinal potencialmente metaestável assuma um nível lógico estável antes de ser utilizado na lógica do sistema digital. O tempo de propagação na sequência de flip flops de sincronismo é o tempo disponível para que um sinal metaestável assuma um valor lógico definido (alto ou baixo). Este tempo é definido como “available metastability settling time”.

 

Uma cadeia de flip flops de sincronismo é definida como uma sequência de flip flops que respeitem os seguintes requisitos:

  1. Os flip flops da cadeia possuem o mesmo sinal de clock ou são utilizados clocks de mesma frequência mas defasados em fase;
  2. O dado de entrada do primeiro flip flop da cadeia é obtido de um sistema de domínio de clock distinto ou assíncrono;
  3. Cada flip flop da cadeia possui somente um único flip flop de fan out, exceto o último flip flop da cadeia.

 

O comprimento da cadeia dos flip flops de sincronismo é definido pelo número de flip flops no domínio do clock de sincronismo que respeite os requisitos listados acima. A figura 3 mostra um exemplo de uma cadeia de flip flops de sincronismo de comprimento igual a dois, assumindo que o sinal de saída do último flip flop está conectado ao restante do sistema digital.

 

metaestabilidade-figura3
Figura 3 - Exemplo de cadeia de Flip Flops de Sincronismo [1].

 

 

Conclusão

 

Metaestabilidade pode ocorrer quando sinais são transferidos entre circuitos de domínios de clock distintos ou são transferidos de um circuito assíncrono para um circuito síncrono. Uma solução, a cadeia de flip flops de sincronismo, foi proposta para minimizar o problema de metaestabilidade. Com este método, a probabilidade de um evento metaestável pode ser reduzida a um valor desprezível, mas nunca a zero. O tempo médio de uma falha de metaestabilidade está relacionado com o processo da tecnologia, as especificações do projeto e o tempo de processamento da lógica da cadeia de flip flop de sincronismo.  

 

 

Cosiderações finais

 

Apesar da dificuldade em se observar o efeito da metaestabilidade em sistemas digitais, o leitor já teve algum experiência com esse tipo de problema? Quais outros métodos podem ser empregados para evitar esse tipo de problema? Compartilhe sua experiência conosco!

 

 

Referências

 

[1] - Understanding Metastability in FPGAs - Altera (Intel) White Paper

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.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Caio AlonsoWillian Henrique Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Willian Henrique
Visitante
Willian Henrique

Muito bom o artigo, tem muita gente que trabalha com FPGA e não sabe que metaestabilidade existe.

Caio Alonso
Visitante
Caio Alonso

Pois é Willian! Em breve teremos um artigo explicando como fazer uma cadeia de flip flops de sincronismo em VHDL e em Verilog para minimizar os efeitos da metaestabilidade. Você já teve alguma experiência para compartilhar sobre este tema?