Nous avons eu un très court cours FPGA / Verilog à l'université (il y a 5 ans) et nous avons toujours utilisé des horloges partout.
Je commence à nouveau avec les FPGA comme passe-temps, et je ne peux m'empêcher de m'interroger sur ces horloges. Sont-ils absolument nécessaires, ou une conception basée sur FPGA peut-elle être complètement asynchrone? Peut-on construire un ensemble complexe de logique et faire en sorte que les choses se répercutent aussi vite que possible?
Je me rends compte qu'il y a beaucoup de pièges à obtenir avec ceci, comme savoir quand le signal s'est propagé dans toutes les parties du circuit et que la sortie s'est stabilisée. C'est à côté du point. Ce n'est pas que je veuille construire une conception entièrement asynchrone, mais simplement pour améliorer ma compréhension des capacités.
À mes yeux débutants, il semble que la seule construction qui nécessite absolument une horloge soit un reg
, et je crois comprendre qu'un FPGA typique (par exemple, un Cyclone II) aura ses bascules précâblées à des signaux d'horloge spécifiques. Est-ce correct? Existe-t-il d'autres horloges implicites comme celle-ci et peuvent-elles généralement être pilotées manuellement par la conception?
Réponses:
Une réponse courte serait: oui; une réponse plus longue serait: cela ne vaut pas votre temps.
Un FPGA lui-même peut exécuter une conception complètement asynchrone sans aucun problème. Le résultat que vous obtenez est le problème car la synchronisation par le biais d'un FPGA n'est pas très prévisible. Le plus gros problème est le fait que votre timing et votre conception résultante varieront presque certainement entre les différentes sessions d’endroits et de tournées. Vous pouvez imposer des contraintes sur les chemins asynchrones individuels en veillant à ce qu'ils ne prennent pas trop de temps, mais je ne suis pas sûr que vous puissiez spécifier un délai minimum.
En fin de compte, cela signifie que votre conception sera imprévisible et potentiellement complètement variable, même avec une légère modification de la conception. Il vous faudrait parcourir tout le rapport de minutage chaque fois que vous changez quoi que ce soit pour vous assurer que cela fonctionnera toujours. D'un autre côté, si la conception est synchrone, il vous suffit de rechercher une réussite ou un échec à la fin du lieu et de la route (en supposant que vos contraintes soient correctement configurées, ce qui ne prend pas longtemps du tout).
En pratique, les concepteurs ont pour objectif des conceptions complètement synchrones, mais si vous devez simplement tamponner ou inverser un signal, vous n'avez pas besoin de passer par une bascule tant que vous le contraignez correctement.
J'espère que cela clarifie un peu.
la source
"Peut-on construire un ensemble complexe de logique et faire en sorte que les choses se répercutent aussi vite que possible?" Oui. Des processeurs complets ont été construits et sont complètement asynchrones - au moins l'un d'entre eux était le processeur le plus rapide du monde. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU
Cela me chagrine que les gens rejettent les techniques de conception asynchrones, même si elles présentent théoriquement plusieurs avantages par rapport aux techniques de conception synchrones, simplement parce que (comme d'autres l'ont dit ici), les conceptions asynchrones ne sont pas aussi bien prises en charge par les outils disponibles.
Pour moi, cela revient à recommander que tous les ponts soient en bois, car il y a plus de gens qui ont des outils de travail du bois que des outils de travail de l'acier.
Heureusement, certains des avantages de la conception asynchrone peuvent être obtenus tout en utilisant des techniques de conception principalement synchrones en utilisant une conception globale synchrone asynchrone locale (GALS) .
la source
Un facteur non encore mentionné est la métastabilité. Si un circuit de verrouillage est heurté avec une séquence d'entrées / transitions telle que l'état résultant dépend de retards de propagation ou d'autres facteurs imprévisibles, rien ne garantit que l'état résultant sera propre "haut" ou "bas". Prenons, par exemple, une bascule à déclenchement sur le bord qui émet actuellement un "bas" et dont l’entrée passe de bas à haut presque au même moment qu’un front d’horloge arrive. Si le front d'horloge survient suffisamment longtemps avant le changement d'entrée, la sortie restera simplement basse jusqu'au prochain front d'horloge. Si le front d'horloge survient suffisamment longtemps après le changement d'entrée, la sortie bascule rapidement une fois de bas en haut et y reste jusqu'au prochain front d'horloge. Si aucune de ces conditions ne s'applique,. Il peut rester bas ou changer rapidement une fois et rester haut, mais il peut rester bas pendant un moment, puis basculer ou basculer puis revenir plus tard, ou basculer plusieurs fois, etc.
Si une conception est entièrement synchrone et que toutes les entrées sont synchronisées deux fois, il est très peu probable qu'une impulsion de synchronisation frappe le premier verrou d'un synchroniseur de manière à le faire basculer au moment idéal pour confondre le second. loquet. En général, il est prudent de considérer des choses telles que "ne se produira tout simplement pas". Dans une conception asynchrone, cependant, il est souvent beaucoup plus difficile de raisonner sur de telles choses. Si une contrainte de synchronisation sur un circuit de verrouillage (pas seulement des bascules, mais toute combinaison de logique qui agirait comme un verrou) est violée, rien ne permet de savoir ce que la sortie fera jusqu'à la prochaine fois qu'une condition d'entrée valide forcera le verrouillage à un état connu. Il est tout à fait possible que des sorties retardées fassent violer les contraintes de synchronisation des entrées aval, ce qui entraînera des situations inattendues.
Le moyen le plus sûr de modéliser un circuit asynchrone serait que presque chaque circuit de sortie produise une sortie "X" pendant quelques instants chaque fois qu'il bascule entre "0" et "1". Malheureusement, cette approche aboutit souvent à ce que presque tous les nœuds affichent "X", même dans les cas où, en réalité, ils auraient presque certainement abouti à un comportement stable. Si un système peut fonctionner alors que toutes les sorties sont simulées, toutes les sorties deviennent "X" immédiatement après la modification d'une entrée et restent "X" jusqu'à ce que les entrées soient stables. C'est un bon signe que le circuit fonctionnera, mais que les circuits asynchrones fonctionneront sous de telles contraintes. est souvent difficile.
la source
Bien sûr, si vos exigences en matière de conception sont suffisamment lentes pour que de nombreux retards internes restent des ordres de grandeur plus longs que les délais auxquels vous tenez, alors ce n'est pas un problème, et vous pouvez consulter le rapport de synchronisation pour garder un œil sur cela, mais il y a une limite à ce que vous pouvez utilement faire sans aucune information d'état interne. Si vous voulez simplement créer quelque chose comme un multiplexeur à 100 entrées, alors n'oubliez pas que chaque entrée aura un temps de propagation différent. En fait, vous pouvez obtenir des effets intéressants et chaotiques avec un grand nombre de boucles de rétroaction oscillantes à retard imprévisible. Peut-être qu'un synthétiseur à base de FPGA totalement asynchrone pourrait être le prochain 'analogique'.
la source
Oui, vous pouvez. Vous pouvez ignorer complètement les bascules et tout construire à partir de tables de correspondance. Et / ou vous pouvez utiliser les éléments d'état de la plupart des FPGA Xilinx en tant que verrous (déclenchés par niveau) au lieu de bascules (déclenchées par un bord).
la source
X=(someComplexFormula)
etY=X & D
, et si le compilateur substitue cette formule à X et détermine que celaX & D
équivaut àA & D
, le compilateur pourrait remplacer le calcul Y en termes de A et D, plutôt qu'en termes de X, permettant ainsi le calcul de Y procéder plus rapidement que celui de X. De telles substitutions sont valables avec la logique combinatoire, mais causent des ravages sur la logique séquentielle asynchrone.Comme @Andrey l'a souligné, votre temps ne vaut pas la peine. Plus précisément, les outils ne le font pas, vous êtes donc complètement autonome. De plus, étant donné qu'ils ont des registres intégrés, vous ne sauvegarderiez rien en ne les utilisant pas.
la source
Vraiment, il existe trois types de conceptions.
En général, lors de la synthèse / optimisation de la logique combinatoire, les outils partent du principe que tout ce qui compte est le résultat final et le temps maximal nécessaire pour régler ce résultat.
Vous pouvez construire un design purement combinatoire et vous obtiendrez le bon résultat. Les sorties peuvent changer dans n'importe quel ordre et peuvent changer plusieurs fois avant d'atteindre leurs valeurs finales. De telles conceptions gaspillent beaucoup de ressources logiques. La plupart des éléments logiques passeront la plupart de leur temps inactifs, alors que dans un système séquentiel, vous auriez pu les réutiliser pour traiter plusieurs éléments de données.
Dans un système synchrone séquentiel, tout ce qui compte est que les sorties du bloc combinatoire se soient stabilisées à leur état correct lorsqu'elles sont cadencées dans la bascule suivante. Peu importe l’ordre dans lequel ils changent ou si ce sont des problèmes en cours de route. Encore une fois, les outils peuvent facilement transformer cela en logique, à condition que l’horloge soit suffisamment lente pour donner la bonne réponse (et ils peuvent vous dire si l’horloge que vous souhaitez utiliser est suffisamment lente).
Dans un système séquentiel asynchrone, ces hypothèses sortent de la fenêtre. Les défauts peuvent avoir de l'importance, l'ordre des changements de sortie peut aussi avoir de l'importance. Les outils et les FPGA eux-mêmes ont été conçus pour des conceptions synchrones. Il y a eu beaucoup de discussions (conception de FPGA asynchrone sur Google si vous voulez en savoir plus) sur la possibilité de mettre en œuvre des systèmes asynchrone soit sur des FPGA standard, soit sur des systèmes conçus spécifiquement, mais cela reste en dehors des pratiques de conception acceptées par le grand public.
la source
Oui. Si vous n'avez pas de construction de type de processus, vous ne devriez pas faire d'inférence de registres. Il y aura des choses comme la mémoire embarquée qui nécessitent des horloges, bien que si vous le voulez vraiment, vous pouvez probablement les générer de manière asynchrone.
la source
FWIW Je pensais que je devrais ajouter que l'un des objectifs évidents des solutions de logique asynchrone serait la réduction globale de la consommation d'énergie.
Ces horloge / PLL / tampons globaux brûlent beaucoup de Joules.
Alors que les solutions FPGA se faufilent dans des arènes alimentées par batterie (par exemple, Lattice Icestick), cet aspect acquerra beaucoup plus d'attention.
la source