Redefinir: síncrono vs assíncrono


15

Trabalho com fpgas há anos e sempre usei redefinições síncronas para todas as partes (que precisam) dos meus circuitos. Ajuda o circuito a ser redefinido globalmente em um determinado ciclo de clock.

No entanto, me disseram que em circuitos ASIC, as pessoas tendem a usar a reinicialização assíncrona em todos os lugares. Eu estou querendo saber o porquê, e se é o caso em alguns projetos de FPGA também. Eu adoraria ouvir opiniões profissionais.

obrigado

Respostas:


11

Parece haver muitas opiniões sobre este.
Afirmação assíncrona, afirma-se que a afirmação síncrona é uma boa prática. Isso evita que o relógio não funcione (ou funcione muito lentamente para capturar o sinal de redefinição) na asserção síncrona e possível metaestabilidade na desasserção assíncrona.

Você usaria um sincronizador de redefinição (dois FFs) com a saída vinculada ao restante dos designs redefinidos:

Redefinir

Discussões:
Redefinição assíncrona e sincronizada
Letters On Sync vs. Redefinições assíncronas


Como os requisitos de configuração / tempo de espera entre a liberação do sinal de redefinição de uma trava e o relógio são comparados com os da entrada de dados? Eu me sentiria mais confortável se as travas no sistema vissem o final do sinal de redefinição no limite do relógio inativo. A liberação de uma redefinição assíncrona em um limite do relógio ativo seria garantida para não afetar o ciclo em que ocorre?
Supercat

Não, não é garantido que a liberação da redefinição de forma assíncrona esteja limpa devido ao tempo de recuperação necessário (como configuração / espera) É por isso que você liberaria a redefinição de forma síncrona.
amigos estão dizendo sobre oli Glaser

Minha pergunta é se ter uma trava1 liberando o sinal de redefinição que alimenta a trava2 na mesma borda do relógio que a trava2 estaria usando é completamente kosher, ou seja, se o tempo mínimo de propagação do relógio da trava1 até sua saída satisfaria o requisito de espera para a entrada de redefinição da trava2. BTW, o que você acha da minha resposta acima? O circuito que você desenhou oferece pouca imunidade para disparar pulsos na linha de redefinição, quando quase total imunidade deve ser possível.
Supercat #

Após uma análise mais aprofundada, pode-se adicionar proteção contra pulsos runt adicionando uma terceira trava e tendo seu sinal de redefinição assíncrona uma versão suprimida de falha do sinal alimentada às duas primeiras, de modo que um sinal que perturbe assíncrona a terceira trava seja garantida a redefinição limpa dos dois primeiros. Um pulso runt na entrada de redefinição pode fazer com que a linha de redefinição principal no chip obtenha um pulso de runt, mas se esse pulso ocorresse, seria seguido por um pulso de redefinição síncrona.
Supercat

Desculpe, acho que entendi o que você quer dizer agora. Se você quer dizer a saída da segunda trava no sincronizador para a redefinição do FF do sistema, meu entendimento é que o tempo de recuperação da redefinição normalmente é menor que o tempo de configuração de dados para o mesmo FF, portanto, tudo ficará bem. Eu concordo com os impulsos runt, que não oferecem imunidade para aqueles sem algo como você sugere que seja implementado.
Oli Glaser #

7

Eu seria a favor de uma redefinição assíncrona em detrimento de uma redefinição síncrona por alguns motivos (em nenhuma ordem específica):

  • Adicionar um conjunto assíncrono ou função de redefinição a um flip-flop provavelmente resultará em um design menor devido à integração da lógica em uma única célula (vs. um flip-flop não redefinível com uma porta AND na entrada)
  • Menos portões resultam em fiação / local e rota menos congestionados
  • É um processo mais simples / fácil de redefinir o chip (mais fácil para o usuário / teste)
  • Tornar o caminho de redefinição assíncrono simplifica o particionamento da análise de tempo estático do sinal de redefinição
  • Uma redefinição síncrona adicionaria lógica extra ao caminho crítico do fluxo de dados e tornaria mais difícil atender aos requisitos de configuração e retenção
  • Enquanto um FPGA possui uma função lógica arbitrária de 4-6 entradas na entrada, você "paga" por cada entrada em um portão em um ASIC (mais entradas = portão maior; funções complexas = portões múltiplos)

No fim das contas, não acho que nenhum desses problemas ocorra, mas eles definitivamente contribuiriam para uma forte preferência de redefinição assíncrona nos ASICs.


2
Um perigo em usar redefinições assíncronas na lógica interna de alguém é que um pulso irregular na entrada de redefinição pode causar todo e qualquer tipo de destruição. Se alguém quiser permitir que o circuito seja redefinido de forma assíncrona, deve-se projetar o circuito de entrada de forma a garantir que qualquer pulso de redefinição suficiente para causar qualquer tipo de redefinição assíncrona para alcançar o circuito interno seja garantido também uma redefinição síncrona para ocorrer.
Supercat

4

A redefinição assíncrona com desasserção síncrona funciona muito bem. Como mencionado acima, os flops de redefinição assíncrona são menores e não exigem um relógio ativo para garantir a redefinição, para que você possa forçar uma parte a redefinir (geralmente um estado conhecido e de baixo consumo de energia) com apenas energia e um único pino ou fio com fio. na reposição.

Se você realmente quer se aprofundar nisso, leia os artigos de Cumming sobre isso, em particular:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

Felicidades.


Uma questão que acho que o Sr. Cummings sente falta no artigo é que, embora os detectores de falhas possam suprimir o que de outra forma seriam pulsos runtes, eles também podem transformar o que seriam pulsos de comprimento legítimo em pulsos runtes. O efeito disso é que um pulso com o comprimento certo pode arbitrariamente sobrecarregar o estado do sistema sem causar uma redefinição adequada. Como é muito difícil evitar a metaestabilidade em todos os casos sem sincronização dupla, eu sugeriria ter dois circuitos de captura assíncrona, um dos quais com um critério de detecção de falhas mais rigoroso e depois ...
supercat

... organize as coisas de modo que uma falha curta possa ou não fazer com que uma redefinição ocorra um ou dois ciclos depois, mas um pulso longo o suficiente causará uma redefinição imediata. Além disso, embora o uso de entradas de 'reinicialização assíncrona' em chinelos possa ajudar a síntese em algumas topologias, isso não significa que elas devam ser usadas de forma assíncrona. Pode ser útil sincronizar a maioria dos sinais de redefinição internos com o relógio, mesmo ao acionar entradas de "reinicialização assíncrona" nas travas.
Supercat

Cummings diz que os filtros de falha "são feios". Eu nunca vi um nos CIs em que trabalhei. Nós tendemos a usar gatilhos Schmitt em todas as células do bloco de entrada para evitar esses problemas, e as redefinições de ativação que uso são igualmente limpas. A propósito, em que casos você teria pulsos curtos em uma linha de redefinição? Eu já vi isso em alguns cenários de teste de varredura, mas eles ainda estão na ordem de um ciclo de relógio longo, não pulsos curtos intencionais. Em seu último comentário, a desativação da redefinição deve ser sincronizada com o relógio para evitar violações s / h na redefinição e garantir que todos os flops saiam da redefinição na mesma borda.
mixed_signal_old

Os filtros de falha geralmente são úteis para determinar quais tipos de entradas podem causar metaestabilidade, mas eles não eliminam estados metaestáveis. O objetivo com um filtro de falha deve ser garantir que quaisquer estados metaestáveis ​​que possam ocorrer estejam em situações de "não se importe". Às vezes, é necessário que um dispositivo seja capaz de redefinir outro dispositivo conectado a ele. A menos que o fio de redefinição seja sincronizado duas vezes, haverá o risco de pulsos de execução de eventos ESD nas proximidades e outros danos.
supercat

Quanto ao último ponto, eu estava apenas dizendo que mesmo um está sintetizando um design em hardware que fornece entradas de redefinição assíncrona "gratuitas" em chinelos, isso não significa que não é possível sincronizar completamente o sinal com o relógio principal nos dois asserção e liberação. Os sinais voltados para fora podem ter que reagir de forma assíncrona a uma entrada de redefinição, mas isso não significa que seja necessário redefinir de forma assíncrona todas as travas. De fato, para evitar estados inconsistentes, pode ser útil apenas ter todos os dois trincos no design de uma pessoa síncronos.
Supercat #

2

Outra abordagem, que pareceria ainda mais segura do que a abordagem 'assíncrona assert / liberação síncrona', seria ter um detector de redefinição assíncrona (como descrito em outros lugares, com 'assert' assíncrona e 'liberação' síncrona), mas ter a saída de que bloqueia qualquer dispositivo de E / S voltado para fora sem redefinir assincronamente nada (além da trava no próprio detector). Se alguém usar dois detectores de redefinição assíncronos, um para linhas de E / S e outro para alimentar o detector de redefinição síncrona e se projetar um para linhas de E / S, de modo que ele seja acionado apenas por pulsos de redefinição que sejam suficientemente sonoros para garantir a confiabilidade. Ao acionar o detector principal, é possível evitar falhas nas saídas nos casos em que não será necessário reiniciar a CPU. Observe que, se alguém fizer isso, um pulso de redefinição de comprimento legítimo redefinirá as saídas de forma assíncrona,

Outra coisa a considerar é que os sistemas geralmente têm alguns registros que não devem ser afetados por uma redefinição. Se uma redefinição assíncrona puder atingir o circuito que grava nesses registros, seria possível que um pulso de redefinição que chegue no momento errado bloqueie esses registros, mesmo que seja um pulso limpo (não runt). Por exemplo, se o código estiver tentando gravar no endereço 1111 e uma redefinição assíncrona que chega pouco antes de um pulso de relógio força um dos trincos de endereço a zero no momento em que o pulso de relógio está chegando, isso pode causar uma gravação incorreta no endereço 1110. Enquanto era possível usar várias linhas de redefinição internas com atrasos combinatórios para garantir que as gravações do registro fossem desativadas antes que o endereço fosse bloqueado, o uso da lógica de redefinição interna síncrona evita o problema por completo.

BTW, aqui está um circuito que ilustra o conceito. Perto do canto inferior esquerdo, há duas entradas lógicas para redefinição. Um irá gerar um pulso de reset "limpo", e o outro irá gerar um pulso realmente nojento. O LED amarelo indica redefinição do sistema principal; o LED ciano indica habilitação de E / S. Pressionar uma redefinição limpa causará uma "redefinição" imediata das saídas; Pressionar uma redefinição icky causará uma redefinição atrasada das saídas ou as deixará inalteradas (no simulador, não há como causar a caixa 'deixe-as não afetadas').


Eu acho que isso parece uma boa ideia. tantos tons de cinza com coisas aparentemente simples como redefinir.
Oli Glaser #

0

Como engenheiro experiente ( 3 anos com design FPGA e sistemas embarcados ), estou lhe dizendo que você precisa verificar a folha de dados e o guia do usuário do FPGA. Não é uma resposta simples.

Você precisa fazer do seu ajuste de design o tipo FPGA que você escolheu. Alguns FPGAs têm flip-flops projetados para redefinição assíncrona, outros são projetados para redefinição de sincronização.

Você precisa verificar o guia do usuário do FPGA para saber que tipo de flip-flops você possui.

O implementador / mapeador escolherá rotas dedicadas para sua redefinição (o código pode ser executado com maior frequência e ocupa menos espaço ) se você combinar seu código com o tipo de primitivas FPGA.

Seu design funcionará em QUALQUER caso , mas às vezes o Implementador de FPGA fará o possível para que sua lógica funcione ( adiciona mais lógica ), mas isso causará menor frequência máxima e / ou mais recursos de FPGA.

Exemplo: testado com o ZYNQ da Xilinx (o FPGA foi projetado para redefinição sincronizada - consulte o manual do usuário das primitivas ). Ao alterar a redefinição de assíncrono para sincronizado , a frequência estável máxima passou de 220MHz para 258MHz e, portanto, passei na minha margem de frequência.

Além disso, devo acrescentar que o implementador não sabe o que é um sinal de relógio e redefinição. Ele atribui pinos de flip-flop a sinais por ORDER, não por nome. Assim, em alguns FPGAs, o implementador escolhe o primeiro sinal após o "processo () começar" em VHDL como o relógio, em alguns como a redefinição, dependendo do FPGA em que o implementador está definido.


Discordo da sua afirmação de que "o implementador não sabe o que é um relógio e redefine o sinal". As ferramentas de síntese inferem qual é o relógio e qual é redefinido pela maneira como são usadas. O sinal do relógio é usado com uma especificação de borda, a redefinição não é. Além disso, qualquer flip-flop pode ser usado com uma especificação de redefinição síncrona e, como você observou, isso geralmente leva a caminhos críticos mais rápidos.
Joe Hass
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.