Por que precisamos sincronizar entradas assíncronas no FSM?

8

Eu tenho aprendido recentemente eletrônica digital. Eu sei que existem portões que executam funções lógicas, eu aprendi sobre RS-Latch, D-Latch e Master-Slave-D-Flip-Flop. Agora que posso executar funções lógicas e armazenar estados, posso criar uma máquina de estado finito (por exemplo, semáforo). Na aula, conversamos sobre esse exemplo específico de semáforo e houve uma discussão sobre quais problemas surgem, se adicionarmos um botão de iniciar / parar (sinal para o semáforo que um pedestre está esperando por sinal verde).

A conclusão foi que, como esse botão seria uma entrada assíncrona, precisamos colocar um flip-flop antes da máquina de estado para que essa entrada possa ser sincronizada primeiro.

O que eu não entendo é: qual é o problema com as entradas assíncronas? Por que precisamos sincronizá-lo? E por que um flip-flop na frente da máquina de estado ou nas costas ajudaria na sincronização? Li vários artigos falando sobre "metaestabilidade", mas ainda não entendo

Muito obrigado

Eren
fonte

Respostas:

6

Como você já entende, sua máquina de estado do controlador de semáforo é uma máquina síncrona. Ou seja, é acionado por algum relógio de tal maneira que todas as alterações na lógica combinatória acontecem e se estabelecem em valores estáveis ​​por tempo suficiente antes do próximo limite do relógio para atender aos tempos de configuração necessários.

esquemático

simular este circuito - esquemático criado usando o CircuitLab

insira a descrição da imagem aqui

Se os dados mudarem dentro desse tempo de configuração, a saída final não será apenas imprevisível, mas devido à metaestabilidade, ela poderá flutuar ou dançar em torno de algum valor intermediário por um tempo antes de escolher um valor final. Pode até oscilar entre a lógica um e a lógica zero em alta frequência, causando considerável fluxo de corrente e aquecimento.

insira a descrição da imagem aqui

Como tal, qualquer entrada assíncrona em uma máquina de estado precisa ser sincronizada em algum momento para que o sistema funcione conforme o esperado. No entanto, isso não significa necessariamente que você SEMPRE precisa adicionar outra trava ao sistema.

Se a entrada está apenas avançando para um único "próximo portão" E o estado da entrada é independente de todas as outras entradas, então realmente não importa se o sinal chega atrasado à parte. Basicamente, você precisa perguntar ... "Se perdermos a entrada de um ciclo de relógio, isso importa?"

Se, no entanto, a entrada alimentar vários portões diferentes. As próximas portas podem ver diferentes níveis lógicos e propagar um estado incorreto para a próxima trava. Basicamente, uma variedade de coisas ruins pode acontecer.

Isso pode ser ilustrado com seu exemplo simples. Observe que se a metaestabilidade no REG1 não for estabelecida antes do próximo relógio, isso poderá fazer com que o WALK e o semáforo acendam ao mesmo tempo ou nenhum dos dois possa acender.

esquemático

simule este circuito

Além disso, se uma entrada assíncrona tiver um relacionamento com outra entrada assíncrona que você espera que ocorra ao mesmo tempo, a segunda entrada pode ser reconhecida, mas a primeira não.

Nos dois casos, é necessário adicionar uma trava de sincronização à entrada para alinhar o tempo do sinal com o relógio das máquinas de estado. Observe que isso adiciona um atraso no ciclo do relógio ou um atraso no meio do relógio, se você usar a outra extremidade do sinal do relógio.

No entanto, você pode estar se perguntando: "mas essa trava não sofre do mesmo problema?" e, claro, a resposta seria sim. Mas o truque aqui é permitir que essa metaestabilidade potencial ocorra em um ponto do circuito em que não importa, como destaquei acima.

Encontrar esse ponto pode ser problemático com entradas dependentes. Normalmente, uma lógica extra precisa ser adicionada para qualificar essas entradas.

No entanto, esteja ciente de que a metaestabilidade é uma coisa de probabilidade. Embora, devido às diferenças nas tolerâncias de fabricação, a maioria das travas se desvie muito rapidamente, existe a possibilidade de que ela permaneça instável por algum tempo. Quanto maior o intervalo entre os pulsos do relógio, maior a probabilidade de que ele tenha se estabelecido. Dessa forma, se o relógio do sistema estiver em alta frequência, é prudente dividi-lo para fazer a pré-trava para permitir mais tempo de acomodação. No entanto, mesmo assim, não há garantias.

Um pensamento final. Mencionei que existe a possibilidade de altas correntes e aquecimento induzidos por metaestabilidade ao sincronizar uma entrada externa aleatória. Infelizmente, há muito pouco que você pode fazer para corrigir isso e problemas de metaestabilidade além de remover circuitos de entrada assíncronos.

Trevor_G
fonte
Obrigado! Então o ciclo extra de um relógio do flip flop acrescenta tempo para a metaestabilidade se estabilizar? Além disso, por que colocaríamos um flip flop no final de um FSM?
Eren
@Eren Yes acrescenta tempo e, logicamente, oferece um local seguro para se estabelecer no sincronismo. Geralmente você deseja que todas as saídas mudem ao mesmo tempo. Portanto, o último estágio normalmente deve ser um flip-flop, ou mais precisamente, "trava" a saída, para que todas as saídas sejam síncronas.
Trevor_G
1
deu a você + 1 para vários portões, mas confiando em que você corrige seus parágrafos finais. A metaestabilidade na trava de sincronização também é importante, porque isso pode ser transmitido para o circuito. Não há cura para a metaestabilidade. No entanto, você pode reduzir a probabilidade a uma probabilidade extremamente pequena, aguardando mais tempo antes da decisão final. Para evitar a redução da taxa de clock, isso geralmente é feito através do pipeline de D-flops extras antes dele. Uma vez que a probabilidade de erro diminui para uma vez na era do universo, para 1 bilhão de circuitos na velocidade máxima do relógio, a maioria das pessoas considera a metaestabilidade 'curada'
Neil_UK
@ Neil_UK sim, eu estava tentando dizer isso, sem confundir muito o OP. Ainda um trabalho em andamento. Tenho que sair para o dia embora. Obrigado.
Trevor_G
1
A metaestabilidade é um bicho-papão nesses tipos de discussões. Na realidade, a situação que você descreve onde você alimenta várias entradas através do limite do relógio falhará com muito mais frequência do que os eventos de metaestabilidade. Atrasos de roteamento podem se inclinar na ordem de nanossegundos, o que significa que uma alteração nos dados pode atingir um flip-flop antes da borda ascendente do relógio receptor e pode alcançar outro flip-flop após a borda ascendente. Faço essa distinção porque a metaestabilidade é apenas um problema nos casos em que você tem muito pouca folga, enquanto a inclinação do roteamento é sempre um problema.
precisa saber é o seguinte
3

Um problema com projetos assíncronos é a presença de raça ou perigos. Por exemplo, neste circuito, digamos que A = 1, B = 0 e C = 1 inicialmente e, portanto, D seja estável e resolvido em 1.

insira a descrição da imagem aqui

Agora deixe B alterado para 1 e C alterado para 0 no mesmo momento . É óbvio que D permanecerá em 1. Mas em circuitos reais, atrasos de propagação e atrasos de fio são importantes. Portanto, é muito possível que a mudança em C atinja a porta OR mais rapidamente do que a mudança em B se propague para a porta OR, através da porta AND. O resultado é que D é puxado para 0 momentaneamente, antes de voltar ao seu estado estável 1. Isso é chamado de raça ou risco. Essa falha momentânea pode acionar qualquer circuito presente após D, e essa transição indesejada é propagada por todo o circuito. Isso causa dissipação de energia indesejada e possivelmente erro na funcionalidade.

Para evitar esses problemas, podemos registrar as entradas e saídas adicionando um D-flip-flops antes de todas as entradas A, B, C e após a saída D. Para que agora nosso circuito prenda apenas entradas estáveis ​​nas bordas do relógio, calcula a expressão, trava D e a produz somente na próxima borda do relógio. Isso garante que nenhuma falha nas entradas ou saídas seja propagada em nosso circuito, desde que todas as entradas dos flip-flops atendam ao tempo de configuração e de espera.

Essa é a principal razão pela qual os projetos síncronos são mais preferidos, apesar da velocidade que os projetos assíncronos fornecem.

Mitu Raj
fonte
Muito obrigado! Só tenho mais uma pergunta se estiver tudo bem. Adicionar os flip-flops antes das entradas e depois das saídas causará uma mudança de dois ciclos de clock. A mudança causará algum problema para nossa máquina de estado? Havia uma analogia com a Pessoa A contando até 7 e perguntando à Pessoa B se ele contava corretamente. B analisará e responderá "Sim". Se tivéssemos um flip-flop na frente e depois da saída, a resposta "yes" chegaria à pessoa A quando ele já tivesse 9 anos. Não vejo como isso causaria algum problema além da latência
Eren
Depois de travar as entradas em um ciclo de clock, obtemos a saída no próximo ciclo de clock. A funcionalidade permanecerá a mesma. Transição de estado em cada ciclo do relógio. É assim que o FSM geralmente é projetado.
Mitu Raj
Sim, esse é o atraso causado pelo flip-flop, mas isso não afeta a funcionalidade.
Mitu Raj