En tant qu'ingénieur expérimenté ( 3 ans avec la conception FPGA et les systèmes embarqués ), je vous dis que vous devez vérifier la fiche technique et le guide d'utilisation du FPGA. Ce n'est pas une réponse simple.
Vous devez faire de vos FIT de conception le type de FPGA que vous avez choisi. Certains FPGA ont des FlipFlops qui ont été conçus pour une réinitialisation Async, certains sont conçus pour une réinitialisation Sync.
Vous devez vérifier le guide de l'utilisateur FPGA pour savoir quel type de FlipFlops vous avez.
L'Implémenteur / Mappeur choisira des routes dédiées pour votre réinitialisation (le code peut s'exécuter à une fréquence plus élevée et prend moins d'espace ) si vous faites correspondre votre code avec le type de primitives FPGA.
Votre conception fonctionnera dans tous les cas , mais parfois l'implémentateur FPGA se mettra en quatre pour faire fonctionner votre logique ( ajoute plus de logique ), mais cela entraînera une fréquence maximale inférieure et / ou plus de ressources FPGA.
Exemple: testé avec le ZYNQ de Xilinx (le FPGA est conçu pour une réinitialisation synchronisée - voir le guide d'utilisation des primitives ). En changeant la réinitialisation de l'async à la synchronisation , la fréquence stable maximale est passée de 220 MHz à 258 MHz et j'ai donc dépassé ma marge de fréquence.
Je pourrais également ajouter que l'implémenteur ne sait pas ce qu'est une horloge et un signal de réinitialisation. Il attribue des broches de bascule aux signaux par ORDRE, pas par nom. Ainsi, dans certains FPGA, l'implémenteur choisit le premier signal après "process () begin" dans VHDL comme horloge, dans certains comme réinitialisation, selon le FPGA sur lequel l'implémentateur est défini.