Quando o uso de travas é melhor do que flip-flops em um FPGA compatível com ambos?

20

A questão:

Quando o uso de travas é melhor do que flip-flops em um FPGA compatível com ambos?

Fundo:

É um princípio bem conhecido que trincos transparentes sensíveis ao nível devem ser evitados nos FPGAs, e chinelos sensíveis ao limite devem ser usados ​​exclusivamente. A maioria das arquiteturas FPGA suporta nativamente travas e chinelos.

O conselho geral - mesmo dos fornecedores de FPGA - é observar trincos ou nunca usar trincos, etc. Existem boas razões para esse conselho, cujos detalhes são bem conhecidos. No entanto, a maioria dos conselhos é formulada: "não use travas, a menos que você saiba que precisa delas".

Eu sou um designer FPGA experiente, e ao longo dos anos cada vez que eu pensei que eu sabia que eu precisava de um trinco, um rapidamente percebeu que havia uma maneira melhor de fazê-lo com flip-flop. Estou interessado em ouvir exemplos de quando o uso de travas é inequivocamente melhor.

Nota importante:

Travas versus chinelos geralmente deixam as pessoas irritadas. Estou interessado apenas na resposta à pergunta. Respostas que explicam a diferença entre travas e flip-flops, explicando as razões para usar NÃO usar travas, detalhando por que os flip-flops são melhores que travas, falando sobre como as travas são melhores em destinos que não sejam FPGA, etc., seria totalmente fora de tópico.

wjl
fonte
Quando você está usando um FPGA para imitar exatamente um circuito existente que usa travas?
Majenko

Respostas:

11

Sua pergunta é basicamente "quando você sabe que precisa de travas?" O que, como você sugeriu, é uma questão subjetiva. Espere mais opiniões do que fatos como respostas. Dito isto, aqui está a minha opinião:

Eu, como você, frequentemente encontro maneiras melhores de usar chinelos, evitando travas. A lógica resultante é geralmente mais elegante e robusta. Mas há momentos em que não tenho controle suficiente sobre a lógica para evitar travas. Por exemplo, posso estar em interface com um barramento de processador que requer travas para atender às especificações desejadas. Como não consigo reprojetar a CPU ou o barramento, estou preso à trava.

Nos últimos 13 anos ou mais, essa é a única vez em que preciso de travas.

Shubham Mittal
fonte
2
Obrigado pela resposta. Estou arquivando mentalmente sua resposta em "compatibilidade reversa obrigatória", o que parece totalmente razoável. =)
wjl 6/11/11
8

Os chinelos são geralmente preferíveis aos trincos, porque eles têm apenas quatro condições / restrições de corrida:

  1. tempo de configuração entre uma alteração na entrada de dados e o seguinte limite do relógio ativo, e
  2. mantenha o tempo entre a borda do relógio e a próxima alteração na entrada de dados;
  3. duração mínima do pulso do relógio ativo;
  4. duração mínima do pulso do relógio inativo.

Se essas restrições forem atendidas, a saída de um flip-flop será totalmente "limpa" e livre de vacilações. Além disso, o tempo de um flip-flop é no sentido "digital": desde que as restrições de tempo sejam atendidas, a saída só será alterada dentro de uma janela previsível após uma borda do relógio ativa, independentemente do tempo de entrada. O efeito de chinelos em cascata é, portanto, previsível, independentemente da profundidade. Por outro lado, o tempo de uma saída de trava é muito mais "analógico". Um atraso no sinal entrando em uma trava pode causar um atraso no sinal que sai. Mesmo que as próprias restrições da trava sejam atendidas, esse atraso pode causar problemas a jusante.

Eu recomendaria o uso de travas nos casos em que o comportamento exigido das saídas de um chip possa ser modelado de maneira mais razoável por um. Por exemplo, o hardware de uma pessoa deve se comportar como um conversor serial-paralelo, onde, entre as bordas ascendente e descendente do primeiro relógio após uma sincronização de quadro, a primeira saída rastreia a entrada; entre as bordas ascendente e descendente do segundo relógio, a segunda saída rastreia a entrada, etc. Pode-se projetar um circuito usando flip-flops e lógica puramente combinatória que produziria esse comportamento, desde que as restrições de tempo fossem atendidas, mas esse circuito seria mais mais complicado do que o uso de travas e seria mais propenso a se comportar de maneira estranha se as restrições de tempo não fossem atendidas.

supercat
fonte
3
"Respostas que explicam a diferença entre travas e flip-flops, explicando as razões para usar NÃO usar travas, detalhando por que os flip-flops são melhores que travas, falando sobre como as travas são melhores em destinos que não sejam FPGA, etc., seria totalmente fora de tópico . "
Majenko
@ supercat Bem, pelo menos a segunda parte da sua resposta tem uma resposta relevante para a pergunta. =) Obrigado.
Wjl 6/11/11
11
@Majenko: Talvez eu devesse ter dito "mais fácil de usar" do que "preferível"; meu argumento não era argumentar que se deve evitar travas sempre que possível, mas sugerir que alguém que usa as travas precisa estar ciente das complexidades.
Supercat
@ supercat, você pode esclarecer seu exemplo com um breve traçado de onda?
Philippe
1

Às vezes, no meu trabalho, eu precisava implementar travas no FPGA, mas era sempre uma solução de "último recurso". As aplicações típicas incluíam conexões com interfaces ou barramentos assíncronos, se eu não pudesse garantir um relógio com velocidade suficiente para garantir amostragem e sincronização adequadas dos sinais de barramento e controle.

O principal problema é que a trava é um bloco assíncrono. Portanto, você deve garantir que as funções combinacionais que geram sinais de entrada para a trava sejam livres de corrida . Caso contrário, eles podem gerar falhas , que podem ser travadas, causando riscos no seu sistema.

Para evitar corridas, você deve implementar essas funções combinacionais de uma maneira redundante especial. Infelizmente (neste caso em particular ;-), caso contrário, é uma propriedade muito boa) as ferramentas de síntese do FPGA otimizam seu design, removendo toda redundância. Portanto, se você deseja implementar uma trava no FPGA, é necessário implementá-la "manualmente" e proteger contra otimização (por exemplo, em VHDL, pode ser necessário definir o atributo "keep" para "true" para sinais usados ​​internamente em sua trava) .

wzab
fonte
-1 O OP perguntou especificamente sobre quando você deveria usar as travas e pediu especificamente aos leitores para não fornecerem mais razões pelas quais as travas não devem ser usadas.
Joe Hass
-1

Em termos de tempo:

Se estivermos usando chinelos em um design, o desempenho dependerá dos maiores atrasos no caminho combinatório.

se usarmos travas no lugar de chinelos, podemos compensar os atrasos mais longos do caminho combinado, emprestando tempo aos atrasos mais curtos nos próximos estágios. Com isso, podemos reduzir os atrasos e aumentar o desempenho do design.

user43102
fonte
3
-1. É melhor analisá-lo adequadamente com uma restrição de vários ciclos e permitir que a parte "assíncrona" seja executada em dois ciclos. Veja, por exemplo, a página 7-30 da altera.co.uk/literature/hb/qts/qts_qii53018.pdf
shuckc