O que é metaestabilidade?


15

Do artigo da Wikipedia Metastability in electronics :

A metaestabilidade na eletrônica é a capacidade de um sistema eletrônico digital persistir por um tempo ilimitado em um estado de equilíbrio instável ou metaestável. Em estados metaestáveis, o circuito pode não conseguir se estabilizar em um nível lógico '0' ou '1' estável dentro do tempo necessário para a operação correta do circuito. Como resultado, o circuito pode agir de maneiras imprevisíveis e levar a uma falha do sistema.

Essa parece ser uma boa definição, mas o que isso significa em um aplicativo?

Do ponto de vista de um designer de eletrônicos, quais são alguns exemplos de quando isso pode ocorrer e onde esse tipo de falha deve ser motivo de preocupação?

Existe uma definição mais pragmática ou aplicada - algo em termos mais específicos?


2
Leslie Lamport (ele da fama $ \ LaTeX $) escreveu uma boa descrição da metaestabilidade neste documento: research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages

@markrages Brilhante. Isso também pode acontecer com gatos que caem e torradas com manteiga .
Rusty

Respostas:


15

Resposta rápida: Se você violar a configuração e reter o tempo na entrada de um flip-flop, a saída será imprevisível por um certo período de tempo. Essa saída imprevisível é chamada de metaestável (ou metaestabilidade).

Resposta longa: quando a saída é imprevisível, quero dizer que é imprevisível. Pode ser alto, baixo, pode estar em algum lugar no meio ou pode oscilar. Após esse período metaestável, a produção será alta ou baixa, mas não sabemos para que lado vai até que aconteça.

A quantidade de tempo que é imprevisível é algo previsível, no entanto. Existem dois fatores principais que determinam a duração do período metaestável: a velocidade do flip-flop e o quão "perto da borda" você conseguiu o tempo.

A maioria dos tempos metaestáveis ​​é bastante curta, embora a probabilidade de longo tempo seja diferente de zero. Teoricamente, você pode ter um tempo metaestável na ordem de segundos, embora as chances de isso acontecer sejam incrivelmente raras. À medida que a velocidade do flip-flop aumenta, o tempo médio metaestável diminui - todas as outras coisas são iguais.

Há um tempo "imaginário" no flip-flop, relativo ao limite do relógio, onde você é mais suscetível a problemas de metaestabilidade. Exatamente quando isso depende de muitos fatores, como temperatura, voltagem, processo, fase da lua, sacrifícios de animais e com qual partido político você se associa. Sempre que esse tempo chegar, quanto mais próxima estiver a borda da entrada de dados desse tempo, maior será o tempo de metaestabilidade.

A melhor maneira de lidar com a metaestabilidade é tornar toda a sua lógica síncrona e não violar os tempos de configuração e espera. É claro que isso é difícil ou impossível para circuitos de qualquer complexidade. Portanto, o que fazemos é tentar limitar os locais onde a metaestabilidade pode ser um problema e, em seguida, lidar com esses locais.

O método normal seria o "relógio duplo" dos dados. Ou seja, tem dois flip-flops D em série com a saída do primeiro alimentando a entrada do segundo. A esperança é que, se o primeiro flip-flop for metaestável, o período metaestável terminará antes de violar o tempo de configuração / espera do segundo. Na prática, isso funciona bastante bem. Em aplicativos super críticos, pode haver algum "relógio triplo" acontecendo.


3
Alguma dependência do tipo de animal sacrificado?
Rusty

11

Um estado metaestável é semelhante a um equilíbrio instável. Um exemplo comum de equilíbrio instável é um pêndulo invertido . Se você puder equilibrar o pêndulo na posição vertical, esse é um estado estável. No entanto, se algo empurrar a alavanca para um dos lados (correntes de ar ou vibrações no solo, por exemplo), o pêndulo não se restabelecerá na posição vertical, mas cairá. O contraste com um pêndulo comum, que se empurrado para um lado, acabará por voltar à vertical.

Equilíbrios estáveis ​​são usados ​​em sistemas elétricos para criar elementos de armazenamento. Os equívocos instáveis ​​não produzem bons elementos de armazenamento (já que perdem seu estado facilmente), mas geralmente existem como um estado parasitário.

Um elemento comum de armazenamento digital é um par de inversores de acoplamento cruzado:

Dois inversores conectados em loop, saída a entrada

O elemento de armazenamento possui dois estados estáveis, um onde o nó à esquerda está na tensão de alimentação e o nó à direita está no terra, e o outro na condição oposta. Há também um estado instável, no qual cada nó está em alguma tensão intermediária.

Para entender melhor como surge o estado instável, lembre-se da função de transferência de um inversor. O gráfico da função de transferência mostra a tensão de saída do inversor para uma dada tensão de entrada.

Função de transferência do inversor

O inversor não é linear; uma maneira simples de obter uma solução aproximada de um circuito não linear é plotar as características do circuito; as interseções das parcelas são as soluções, ou seja, os pontos em que as características elétricas de todos os componentes do circuito são satisfeitas. Normalmente, isso é feito com gráficos iv, como neste exemplo de diodo na Wikipedia . No entanto, para os inversores, faremos isso com plotagens vv. Sobreposição de uma segunda função de transferência do inversor na plotagem (com os eixos trocados, uma vez que o segundo inversor está ao contrário:

Funções de transferência sobrepostas para inversores inversos

Existem três interseções das plotagens: uma em (0, Vs), uma em (Vs, 0) e uma em (Vs / 2, Vs / 2). O estado (Vs / 2, Vs / 2) é metaestável. Após uma pequena perturbação de qualquer nó, o circuito quase sempre se instala em um dos estados estáveis, em vez de retornar a (Vs / 2, Vs / 2).

A maneira de escrever um valor no elemento de armazenamento do inversor duplo é forçar um dos nós para o valor desejado usando um driver mais forte que os inversores. Uma maneira comum de fazer isso é com um transistor de passagem:

Inversores de acoplamento cruzado com transistor de passagem

Se você conectar o portão do transistor de passagem ao relógio, terá uma trava D (estou deixando de fora a estrutura de saída). Quando o relógio está alto, permitindo o transistor de passagem, a trava é transparente - a entrada passa diretamente para a saída. Quando o relógio está baixo, a trava mantém o valor anterior. A metaestabilidade surge no momento em que as amostras da trava. Se a entrada tiver uma tensão alta ou baixa estável quando a trava for amostrada, ela funcionará corretamente. No entanto, se a entrada estiver em torno do ponto Vs / 2 quando a trava for amostrada, é possível que a trava termine no estado metaestável (Vs / 2, Vs / 2). Uma vez que esteja no estado metaestável, ele pode permanecer lá indefinidamente (assumindo que a trava não está cronometrada novamente), mas como é um equilíbrio instável, algo geralmente acontece relativamente rápido para eliminá-lo do estado metaestável.

Quando se preocupar com metaestabilidade

Se seus elementos de armazenamento ficarem metaestáveis, você estará perdendo, no mínimo, parte do orçamento de tempo para a lógica downstream. A lógica não pode executar a avaliação desejada até que o estado metaestável seja resolvido. Na pior das hipóteses, o estado metaestável persiste ou se propaga através da lógica, e os elementos de armazenamento downstream também se tornam metaestáveis, ou vários elementos de armazenamento relacionados capturam valores inconsistentes.

A lógica síncrona projetada e funcionando corretamente não apresenta problemas de metaestabilidade. O período do relógio é mais longo que o tempo de avaliação da lógica, todas as entradas do flip-flop são estáveis ​​no próximo limite do relógio (requisito de configuração satisfeito) e todas carregam um valor válido.

Algumas das situações comuns em que a metaestabilidade é uma preocupação são:

  • A amostragem lógica de uma entrada externa, por exemplo, um interruptor no painel frontal ou a saída de circuitos do monitor que podem fazer a transição a qualquer momento (subtensão, superaquecimento).
  • Lógica usando vários relógios que não têm um relacionamento síncrono. Isso geralmente ocorre com interfaces de E / S que possuem requisitos específicos de clock, mas também ocorre internamente quando partes diferentes de um chip têm requisitos de desempenho diferentes. Por exemplo, nem toda a lógica da sua CPU de 3 GHz está realmente funcionando a 3 GHz. (Porém, uma CPU não é um ótimo exemplo, pois muitos dos relógios de uma CPU são múltiplos síncronos um do outro.)

Resposta muito boa, mas outra coisa a mencionar é que, devido a atrasos na propagação, não há um estado metaestável, mas sim uma família inteira deles, e não há uma maneira certa de identificar estados metaestáveis. Pode-se projetar um circuito com uma saída de três estados (alta / baixa / metaestável) e organizar coisas para que "alto" nunca seja relatado se a saída acabar baixa ou vice-versa, mas não há garantia de saída não saltará entre 'alto' e 'metaestável' (terminando em 'alto') ou entre 'baixo' e 'metaestável' (terminando em 'baixo').
Supercat 31/05

+1 Isso é bom, mas faz mais sentido depois de ler a resposta de @David Kessner. +2 Para os gráficos.
Rusty

3

Um sinal metaestável é aquele que pode parecer arbitrariamente alto ou baixo em qualquer padrão arbitrário por um período arbitrário de tempo. Se o sinal alimentar vários portões diretamente ou indiretamente , é possível que alguns deles o "vejam" alto enquanto outros o vejam baixo. Coisas desagradáveis.

Para sistemas com um único relógio, os sinais metaestáveis ​​geralmente podem ser tratados passando por duas travas. Uma questão mais complicada surge ao bloquear relógios. Existem muitos circuitos (especialmente usando travas RS) que funcionariam maravilhosamente se a metaestabilidade não fosse possível, mas que, se a metaestabilidade ocorrer, acabaria gerando pulsos de clock de execução (que por sua vez podem causar metastabilidade a jusante).

Aliás, outro ponto importante a ser destacado em relação à metaestabilidade: o tempo de propagação de uma trava indica quando, se os tempos de amostragem e retenção forem atendidos , a saída será estável em seu novo valor. Se os tempos de configuração e espera não forem cumpridos, não há garantia de se ou quando a saída será ou não alternada, até o momento em que a trava receber um evento de relógio válido. Mesmo que a saída 'pareça' mudar de maneira limpa, não há garantia de que ela não voltará espontaneamente.


2

O caso clássico é se você violar os tempos de configuração / espera de uma trava síncrona e é um problema que você precisa estar ciente ao criar FPGAs (tenho certeza que o Xilinx e Altera terão anotações sobre isso). Se um sinal pode aparecer a qualquer momento aleatório, você nunca pode ter certeza de que, quando o registra, não muda dentro das especificações da janela de configuração / tempo de espera. O que pode acontecer é que, em vez de a saída da trava ficar alta ou baixa no tempo especificado após o limite do relógio, ela pode ficar oscilando um pouco antes de se estabelecer em um estado estável. A maneira normal de evitar isso é usar uma trava de dois estágios, com o mesmo relógio ou um relógio atrasado ou fora de fase, dependendo do equilíbrio entre os requisitos de latência e a probabilidade de metaestabilidade. Isso permite que o primeiro tempo da trava estabilize antes que a segunda trava um estado estável. Aliás, isso é algo com o qual os microcontroladores precisam lidar internamente, pois os sinais de E / S externos geralmente são assíncronos ao relógio da CPU, portanto, as portas de E / S costumam ter arranjos de trava dupla para evitar problemas, e o software não precisa se preocupar com isso. . Uma vaga lembrança da leitura de muitos anos atrás sobre um problema com o 6502, em que uma leitura de barramento de dados que foram alterados fora das especificações de tempo de configuração / espera pode levar uma ramificação a um endereço que não era o alvo da ramificação nem a próxima instrução, como algumas instruções internas. estado foi metaestável. Este vídeo mostra alguns exemplos: Uma vaga lembrança da leitura de muitos anos atrás sobre um problema com o 6502, em que uma leitura de barramento de dados que foram alterados fora das especificações de tempo de configuração / espera pode levar uma ramificação a um endereço que não era o alvo da ramificação nem a próxima instrução, como algumas instruções internas. estado foi metaestável. Este vídeo mostra alguns exemplos: Uma vaga lembrança da leitura de muitos anos atrás sobre um problema com o 6502, em que uma leitura de barramento de dados que foram alterados fora das especificações de tempo de configuração / espera pode levar uma ramificação a um endereço que não era o alvo da ramificação nem a próxima instrução, como algumas instruções internas. estado foi metaestável. Este vídeo mostra alguns exemplos:http://www.youtube.com/watch?v=tKHCwjWMMyg

Uma analogia é se você atirar uma bola para alguém - ela a pega ou a deixa cair / erra, então, depois de um certo tempo de arremesso, elas a seguram ou não. Mas, ocasionalmente, eles se atrapalham por um tempo antes de capturá-lo ou deixá-lo cair, de modo que seu estado não se sustenta nem cai - esse é o estado metaestável!


Eu ainda trabalho com sistemas baseados no 6502 como hobby. Seria bom conhecer alguns detalhes dos problemas de metaestabilidade nos dados do barramento. Certamente posso imaginar que, se o acumulador contiver $ FF e se ler um valor que seja $ 00 ou $ 01, o acumulador poderá terminar com qualquer valor possível. Antes que qualquer ramificação pudesse ser tomada, porém, eu esperaria que mais dois ciclos tivessem decorrido, durante os quais as bandeiras seriam disparadas duas vezes. Não consigo imaginar um estado metaestável restante por tanto tempo.
Supercat

Isso foi algo que ouvi em segunda ou terceira mão, talvez 20 anos atrás, mas se originou de pessoas que sabiam o que estavam fazendo - era a interface do Tube no segundo processador 6502 da BBC Micro e a leitura do status bandeiras, e era uma ocorrência que já foi na lua azul, mas frequente o suficiente para atrasar o lançamento do produto. Não seria necessário necessariamente durar 2 ciclos, pois os sinais provavelmente estão sendo travados internamente em vários estágios do pipeline. Eu acho que também foi a variante 6502 mais rápida disponível na época - 3MHz 65C02 ISTR.
Mikeelectricstuff 30/05

Interessante. [BTW, existe alguma maneira de usar pontuação sem o StackExchange alterá-la?] No comportamento normal de, por exemplo, "ADC 0xD000", o endereço seria emitido na fase 1 do quarto ciclo e os dados seriam bloqueados no final da fase 2 desse ciclo. Os dados entrariam na ULA na fase 1 do próximo ciclo (que seria a busca do código de operação para a instrução a seguir). O ciclo seguinte seria a busca do operando. Se as coisas ainda estivessem metaestáveis ​​nesse ponto, o sistema poderia derreter, mas isso pareceria improvável, pois os registros dinâmicos teriam sido relançados duas vezes.
Supercat

Não quero dizer que é impossível que a metastabilidade do barramento de dados afete o 6502, porque sei que existem outros comportamentos estranhos que não posso explicar. Por exemplo, o barramento de dados é travado durante a fase 2 do relógio e acionado durante a fase 1. a seguir. Portanto, não importa se ele muda durante a fase 2, desde que seja estável no final. Entretanto, existem algumas instruções não documentadas, cujo comportamento é afetado pelo conteúdo do barramento de dados durante a parte anterior do ciclo (demonstrável em máquinas como o C64 e a Apple que obtêm vídeo durante a fase 1). Eu não sei como ... #
317

... o comportamento dessas instruções está realmente sendo afetado pelo comportamento inicial do barramento de dados, mas suspeito que seja algum tipo de condição de corrida estranha. IIRC, um dos opcodes corresponde aos padrões de decodificação para LDA #imm, LDX #imm e TAX, portanto a saída da ALU está sendo mapeada de volta para sua entrada. Esquisito.
Supercat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.