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
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):
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.
fonte
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.
fonte
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').
fonte
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.
fonte