Aqui, examinamos o conceito de metastabilidade em relação aos circuitos digitais – e, portanto, aos projetos de FPGA – e como sua 'aparência' pode ser grandemente reduzida simplesmente aderindo a princípios de design comprovados que mitigam seu efeito.
Metastabilidade! Você poderia ser perdoado por pensar que isso poderia estar relacionado à integridade de algum recipiente de contenção futurista, ou campo de força: "A metastabilidade do triangulador de fluxo da unidade de dobra e do envelope criônico está atingindo níveis críticos, Capitão!"
Para aqueles de vocês que vivem e respiram eletrônica digital diariamente, no entanto, o termo provavelmente será recebido com uma mistura de desdém e respeito.
Aqui, examinamos o conceito de metastabilidade em relação a um circuito digital – e, portanto, aos projetos de FPGA – e como sua 'aparência' pode ser grandemente reduzida, simplesmente aderindo a princípios de design comprovados que mitigam seu efeito.
A metastabilidade diz respeito às saídas de registradores (ou flip-flops sincronizados, em termos antigos) dentro de circuitos digitais e ao potencial para um terminal de saída entrar em um 'estado metastável'. Dispositivos FPGA tipicamente utilizam flip-flops do tipo D. Antes de analisarmos como tal estado pode ser alcançado, é uma boa ideia nos refrescarmos com alguns elementos chave de temporização básicos relacionados à operação de um registrador:
‘Tempo de preparação’ – este é o tempo mínimo que a entrada do registrador deve estar estável, antes da chegada da próxima borda de relógio. Tipicamente aparece como Tsu nas folhas de dados.
‘Tempo de manutenção’ – este é o tempo mínimo após a chegada da borda de relógio, que a entrada do registrador deve continuar no mesmo estado estável. Tipicamente aparece como Th nas folhas de dados.
‘Atraso de Relógio-Para-Saída’ – este é o tempo, após a chegada da borda de relógio, no qual o ponto de saída do registrador muda. Isso também é referido como o 'tempo de assentamento' ou 'atraso de propagação' do registrador. Pode aparecer nas folhas de dados como, por exemplo, Tco, ou Tphl e Tplh.
Sempre que um sinal viaja entre dois domínios de relógio assíncronos – subcircuitos digitais dentro do projeto geral que estão operando em relógios diferentes ou não relacionados – existe a possibilidade de encontrar metastabilidade. Isso também é verdadeiro para a transferência de dados de uma região não sincronizada de um projeto para um sistema síncrono – por exemplo, sinais externos (de fora) alimentados em um FPGA.
A imagem a seguir ilustra dois exemplos de sinais assíncronos entrando em um sistema síncrono. No exemplo superior, um sinal viaja entre diferentes domínios de relógio. No exemplo inferior, um sinal de um sistema não sincronizado é alimentado em um sistema sincronizado (com relógio).
O problema surge quando um sinal de dados de um domínio de relógio chega à lógica de registro em outro domínio de relógio. O sinal de dados vindo do domínio de origem pode transitar a qualquer momento em comparação com o relógio no domínio de destino – não há sincronia entre os dois domínios, nenhum conhecimento das velocidades transicionais nos dois subcircuitos lógicos. Se o sinal de dados transita em um ponto que viola os tempos necessários de Configuração ou Manutenção para o registro de destino, a saída desse registro pode entrar em um 'estado metastável' – um estado onde o sinal de saída não é nem lógico Baixo, nem lógico Alto, mas sim na área instável entre os dois.
O tempo de duração em que a saída continua a permanecer metastável pode exceder o tempo especificado de ‘Atraso de Relógio para Saída’ (tempo de estabilização) do registrador. Na maioria dos casos, os registradores rapidamente resolvem essa instabilidade de saída e retornam a um dos dois estados definidos (e estáveis). O problema para um design, no entanto, está nos casos minoritários, quando o tempo para se estabilizar em um estado estável não é rápido o suficiente, ou o sinal de saída resolve para o nível lógico incorreto.
A imagem a seguir ilustra a saída de um registrador dependendo da transição do sinal de dados de entrada.
Considerando as três entradas:
Entrada A: A entrada observa os tempos de Preparação e de Manutenção do registrador, e a saída está disponível após o tempo de Atraso de Relógio para Saída do dispositivo.
Entrada B: A entrada transita durante o tempo de Preparação do registrador, com a saída ficando metastável até se estabilizar no nível estável correto além do tempo de Atraso de Relógio para Saída.
Entrada C: A entrada transita durante o tempo de Manutenção do registrador, com a saída ficando metastável. Não apenas a saída se estabiliza em um estado estável além do tempo de Atraso de Relógio para Saída, mas também se estabiliza no nível lógico errado!
Se a saída do registrador alimentar mais de um registrador subsequente no circuito – em paralelo – existe a possibilidade de que esses registradores de destino capturem os dados em níveis lógicos diferentes, dependendo de se a saída metastável do registrador fonte se estabilizou em um estado estável antes de cada registrador de destino ser acionado para capturar os próximos dados. Atrasos de caminho entre os registradores fonte e destino, adicionados ao tempo para que a saída metastável se torne estável, apenas agravam o problema.
Em resumo, a metastabilidade é um inimigo baseado em estatística ou probabilidade para um designer. Dependendo dos dispositivos usados e da disposição dos circuitos no design, estados de saída metastáveis podem ocorrer, ou não. Se ocorrerem, podem ser prejudiciais – causando falha no design – ou a sorte pode estar ao seu lado e os tempos de estabilização dos dispositivos, velocidades de clock e caminhos roteados podem tornar sua aparição benigna. O problema, como designer, no entanto, é que você realmente pode se dar ao luxo de correr esse 'risco'? E se o produto que você está projetando faz parte de uma instalação médica ou de um avião comercial – a falha do design poderia ser catastrófica.
Embora a metastabilidade não possa ser completamente erradicada – nenhum dispositivo no mundo pode reivindicar operar totalmente livre dos potenciais efeitos da metastabilidade – ela pode ser reduzida a ponto de se tornar apenas um 'ponto no radar'.
Como medida da confiabilidade de um design, em relação à falha induzida por metastabilidade, falamos sobre algo chamado Tempo Médio Entre Falhas – ou MTBF. Com a metastabilidade deixada sem controle – isto é, sem providências tomadas no design para mitigar seu efeito – o MTBF poderia ser tão pouco quanto segundos. Ao aplicar metodologias de design digital testadas e comprovadas para combater a metastabilidade, e fazendo escolhas cuidadosas dos dispositivos digitais usados em um design, o MTBF pode ser consideravelmente aumentado. Mil anos entre falhas. Um milhão de anos. Até um bilhão de anos se calculado matematicamente e extrapolado. Com esses valores para o MTBF, tal design pode ser carimbado como 'Altamente Confiável' ou praticamente 'À Prova de Falhas' (ou deveria ser 'Livre de Falhas') – mas você entendeu a ideia.
As seções seguintes examinam justamente como você, como designer, pode prolongar o MTBF, e como a tecnologia de dispositivos desempenha seu papel.
Talvez a solução mais prevalente e amplamente aceita para o problema da metastabilidade seja a adição de circuitos frontais para sincronizar um sinal assíncrono de entrada com o relógio do circuito síncrono alvo. Na sua forma mais simples, essa circuitaria consiste em um ou mais flip-flops do tipo D, encadeados juntos e sincronizados usando o relógio do sistema alvo. Isso é referido como uma 'cadeia de registro de sincronização', ou simplesmente 'sincronizador'.
A demora adicional imposta por cada registro permite que o sinal de entrada se recupere de qualquer estado metastável em que possa ter entrado. Quanto mais registros na cadeia, mais demora e, portanto, mais tempo para que uma saída metastável se resolva. O atraso total é frequentemente conhecido como 'Tempo de Assentamento da Metastabilidade'. Tipicamente, o circuito de sincronização consistirá de dois registros, mas para aplicações críticas – como as médicas e militares – três não é incomum.
A imagem a seguir ilustra um exemplo da adição de um sincronizador de 2 estágios na frente de um sistema síncrono, para sincronizar um sinal assíncrono de entrada.
A lógica de handshake entre circuitos em diferentes domínios de clock e/ou lógica FIFO também é usada - além da sincronização de front-end - para garantir a recepção de valores de dados corretos. Isso é de particular importância ao lidar com um agrupamento em barramento de múltiplos sinais assíncronos, cada um dos quais poderia transicionar a qualquer momento e independentemente um do outro.
Em um design digital, pode haver múltiplos domínios de clock diferentes e uma infinidade de sinais passando entre eles. Além disso, pode haver uma variedade de sinais assíncronos externos – originados de fora (especialmente para um design implementado em um FPGA e utilizando componentes periféricos externos e interfaces de comunicação). Nesses casos, não é incomum encontrar muitas cadeias de registros de sincronização, tratando das diferentes transferências de sinais assíncronos dentro do sistema geral.
Em termos de MTBF, cada cadeia de sincronização terá seu próprio 'valor'. Como a taxa de falha geral para um design é a soma das taxas de falha individuais para as cadeias de sincronização dentro dele, e a taxa de falha é 1/MTBF, você pode ver claramente que uma cadeia de sincronização com um MTBF reduzido em comparação com os outros, teria um efeito geral prejudicial no MTBF total do design. Na verdade, o MTBF do design seguirá essencialmente o MTBF da pior cadeia de sincronizadores – o que pode ser desastroso se cinco cadeias tivessem um MTBF de um milhão de anos e uma sexta cadeia tivesse um MTBF de 50 anos!!
Para lidar com isso, a solução é adicionar outro estágio de registro à cadeia de sincronizadores com o pior desempenho no design, aumentando assim o tempo de estabilização da metastabilidade e melhorando consideravelmente o MTBF dessa cadeia - e, portanto, do design geral – consideravelmente (se não exponencialmente!).
Para recapitular, a metastabilidade (embora não haja nada estável sobre este estado!) ocorre quando um sinal assíncrono de entrada transita em violação do Tempo de Configuração e/ou de Manutenção de um registro. O comprimento total do tempo, Configuração + Manutenção, define essencialmente a 'janela' para a ocorrência de metastabilidade – a 'janela de metastabilidade', se preferir.
É razoável afirmar que quanto mais rápidos forem os tempos de Configuração e de Retenção de um registrador, menor será a janela de metastabilidade. De fato, famílias de lógica mais rápidas exibem esses tempos mais curtos e, portanto, diminuem a probabilidade de um evento metastável. Caso ocorra um evento metastável (lembre-se de que a metastabilidade não pode ser completamente erradicada), os registradores são rápidos o suficiente para se recuperarem rapidamente. Por exemplo, um registrador da família 74F levaria a um melhor MTBF do que um dispositivo usado da família 74LS – dois extremos do espectro de velocidade do dispositivo.
Com FPGAs, a diminuição nas geometrias de processo (de 180nm, passando por 90nm e avançando para 65nm, 40nm e além) favorece velocidades de comutação de transistores mais rápidas – melhorando tipicamente o MTBF devido à metastabilidade. No entanto, os benefícios do tamanho reduzido não estão isentos de possíveis penalidades. Geometrias menores naturalmente trazem tensões de alimentação reduzidas. Durante um estado metastável, a saída de um registrador é tipicamente metade da tensão de alimentação. À medida que a tensão de alimentação fica cada vez menor, a diferença de tensão entre o valor total e a metade se estreita, levando a uma redução no ganho do circuito e tempos mais longos para os registradores se recuperarem de um estado metastável.
Os fornecedores de FPGA geralmente realizam uma análise rigorosa de metastabilidade para garantir robustez contra a metastabilidade em dispositivos físicos que utilizam essas geometrias de processo cada vez menores.
Utilize os seguintes links para acessar documentos externos que examinam de perto e com mais detalhes o fenômeno da metastabilidade e como seu efeito é essencialmente tornado negligenciável em designs eletrônicos digitais. Muitos desses documentos analisam as equações usadas para calcular o MTBF para um flip-flop, e subsequente MTBF para um design inteiro, e eles próprios fornecem referência para mais informações sobre o assunto.
Metastabilidade em Lógica Digital (www.interfacebus.com)
FPGA-FAQ 0017: Conte-me sobre Metastabilidade (Philip Freidin)
Metastabilidade em eletrônica (Wikipedia)
O que é Metastabilidade? (www.asic-world.com)
Metastabilidade em Design (The VLSI Homepage)
White Paper: Entendendo a Metastabilidade em FPGAs (Altera)
Nota de Aplicação: Recuperação Metastável em FPGAs Virtex-II Pro (Peter Alfke, Xilinx)
Nota de Aplicação: Metastabilidade e a Família ECLinPS™ (Engenharia de Aplicações, ON Semiconductor)
Resposta Metastável em Circuitos Lógicos de 5-V (Texas Instruments)