La question:
Quand utilise-t-on mieux les verrous que les bascules dans un FPGA qui prend en charge les deux?
Contexte:
C'est un principe bien connu que les verrous transparents sensibles au niveau doivent être évités dans les FPGA, et les bascules sensibles aux bords doivent être utilisées exclusivement. La plupart des architectures FPGA prennent en charge nativement les verrous et les bascules.
Le conseil général - même des fournisseurs de FPGA - est de faire attention aux verrous, ou de ne jamais utiliser de verrous, etc. Il y a de très bonnes raisons à ce conseil, dont les détails sont tous bien connus. Cependant, la plupart des conseils sont formulés, "n'utilisez pas de loquets à moins que vous ne sachiez que vous en avez besoin".
Je suis un concepteur FPGA expérimenté, et au fil des ans, chaque fois que je pensais savoir que j'avais besoin d'un verrou, je me suis vite rendu compte qu'il y avait une meilleure façon de le faire avec des tongs. Je suis intéressé à entendre des exemples de l'utilisation sans équivoque de verrous.
Note importante:
Les verrous contre les tongs mettent souvent les gens en colère. Je ne suis intéressé que par la réponse à la question. Les réponses expliquant la différence entre les verrous et les bascules, expliquant les raisons d'utiliser NON les verrous, détaillant pourquoi les bascules sont meilleures que les verrous, discutant de la façon dont les verrous sont meilleurs dans les cibles non FPGA, etc., seraient totalement hors sujet.
Réponses:
Votre question est essentiellement "quand savez-vous que vous avez besoin de verrous?" Ce qui, comme vous l'avez laissé entendre, est une question subjective. Attendez-vous à plus d'opinion que de fait comme réponses. Cela étant dit, voici mon avis:
Comme vous, je trouve souvent de meilleures façons d'utiliser des tongs, évitant ainsi les verrous. La logique qui en résulte est souvent plus élégante et robuste. Mais il y a des moments où je n'ai pas assez de contrôle sur la logique pour éviter les verrous. Par exemple, je peux être interfacé à un bus de processeur qui nécessite des verrous pour répondre aux spécifications souhaitées. Comme je ne peux pas repenser le CPU ou le bus, je suis coincé avec le verrou.
Au cours des 13 dernières années ou plus, c'est la seule fois où j'ai eu besoin de verrous.
la source
Les tongs sont souvent préférables aux verrous car ils n'ont que quatre conditions / contraintes de course:
Si ces contraintes sont respectées, la sortie d'une bascule sera entièrement "propre" et sans aucune confusion. En outre, la synchronisation d'une bascule est dans un sens "numérique": à condition que les contraintes de synchronisation soient respectées, la sortie ne changera que dans une fenêtre prévisible après un front d'horloge actif, quelle que soit la synchronisation d'entrée. L'effet des tongs en cascade est donc prévisible, quelle que soit la profondeur. En revanche, le timing d'une sortie de verrouillage est beaucoup plus "analogique". Un retard sur le signal entrant dans un verrou peut provoquer un retard dans le signal sortant. Même si les propres contraintes du verrou sont respectées, ce délai peut provoquer des problèmes en aval.
Je recommanderais d'utiliser des verrous dans les cas où le comportement requis des sorties d'une puce peut être le plus raisonnablement modélisé par un. Par exemple, son matériel est censé se comporter comme un convertisseur série-parallèle où, entre les fronts montant et descendant de la première horloge suivant une synchronisation de trame, la première sortie suit l'entrée; entre les fronts montant et descendant de la deuxième horloge, la deuxième sortie suit l'entrée, etc. compliqué que celui utilisant des verrous, et serait plus enclin à se comporter bizarrement si les contraintes de temps n'étaient pas respectées.
la source
Dans mon travail, je devais parfois implémenter des verrous dans le FPGA, mais c'était toujours une solution de "dernier recours". Les applications typiques comprenaient des connexions avec des interfaces ou des bus asynchrones, si je ne pouvais pas assurer une horloge avec une vitesse suffisante pour assurer un échantillonnage et une synchronisation appropriés du bus et des signaux de contrôle.
Le principal problème est que le verrou est un bloc asynchrone. Par conséquent, vous devez vous assurer que les fonctions combinatoires qui génèrent des signaux d'entrée pour le verrou sont sans course . Sinon, ils peuvent générer des problèmes , qui peuvent être verrouillés, entraînant des dangers dans votre système.
Pour éviter les courses, vous devez implémenter ces fonctions combinatoires d'une manière redondante spéciale. Malheureusement (dans ce cas particulier ;-), sinon c'est une très bonne propriété) les outils de synthèse FPGA optimisent votre conception en supprimant toute redondance. Par conséquent, si vous souhaitez implémenter un verrou dans FPGA, vous devez l'implémenter "à la main" et vous protéger contre l'optimisation (par exemple, dans VHDL, vous devrez peut-être définir l'attribut "garder" sur "vrai" pour les signaux utilisés en interne dans votre verrou) .
la source
En termes de timing:
Si nous utilisons des bascules dans une conception, les performances dépendent des délais de chemin de combinaison les plus longs.
si nous utilisons des verrous à la place des bascules, nous pouvons compenser les retards de trajet combo les plus longs en empruntant du temps aux retards de trajet plus courts dans les étapes suivantes. Avec cela, nous pouvons réduire les retards et augmenter les performances de la conception.
la source