Une conception FPGA peut-elle être principalement (ou complètement) asynchrone?

39

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?

Roman Starkov
la source
3
Je sais que Simon Moore, de l'université de Cambridge, a effectué de nombreuses recherches sur la conception asynchrone, notamment pour la fabrication d'une puce de test. Elle nécessite un ensemble d'outils de conception entièrement nouveaux et a des effets secondaires étranges: une vitesse d'exécution inversement proportionnelle à la température, par exemple.
pjc50

Réponses:

27

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.

Andrey
la source
3
J'ai dû utiliser des périphériques avec des conceptions FPGA asynchrones. Ils étaient difficiles à travailler. Veuillez au moins utiliser des contraintes de temps
Tim Williscroft
1
S'il est vrai qu'il est possible d'implémenter des conceptions asynchrones avec un FPGA, la plupart des FPGA sont conçus pour prendre en charge des conceptions spécifiquement synchrones. Ils ont beaucoup de ressources (PLL, circuits de distribution d’horloge et une quantité énorme de bascules) qui seront gaspillées dans une conception asynchrone.
Dmitry Grigoryev
2
Cette réponse ne fournit pas de bons conseils. Vous pouvez créer un FPGA sans horloge, ce qui simplifie les lieux et les itinéraires, élimine une multitude de problèmes de synchronisation et, en raison du pipeline à grain fin, le débit peut être considérablement plus élevé. Le vrai problème vient lorsque vous essayez de mapper un circuit cadencé sur un FPGA sans horloge, car ils ont des caractéristiques de synchronisation très différentes. Cela peut être fait, il faut juste un peu plus de traitement frontal pour effectuer la conversion. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Ned Bingham
20

"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) .

Davidcary
la source
Je ressens exactement la même chose à propos de la tendance actuelle à acheminer les PCB sur une grille carrée , bien que les avantages de la migration soient beaucoup moins importants.
Roman Starkov
@romkyns - Cela tient plus au fait qu'il est difficile d' écrire un logiciel de PCB utilisant des grilles non rectilignes .
Connor Wolf
1
@supercat: Je suppose que vous faites allusion à la logique à quatre phases . C'est l'un des signaux d'horloge multiphase qui semble être oublié.
davidcary
1
@davidcary: en quelque sorte, sauf les deux "phases" d'un fil - une phase étant contrôlée par le front montant et l'autre par le front descendant. Fondamentalement, je diviserais les horloges à verrouillage en quatre catégories: montée propre, chute propre, montée tardive, chute tardive. Les verrous cadencés par (L / CB) un front montant ou descendant propre pourraient prendre des données de tout front montant ou descendant. L / CB, un front montant tardif pourrait prendre des données de tout front descendant du front montant L / CB L / CB par front descendant tardif pourrait prendre des données de L / CB propre en baisse ou en hausse.
Supercat
1
@davidcary: Pourvu que le temps de propagation le plus court pour un verrou dépasse le temps de maintien le plus long, et que le chemin de signal le plus long partant d'un front d'horloge, via une logique de déclenchement d'horloge et des verrous "en retard" déclenchés par ce bord, pour tout verrou déclenché par la suivant bord, ne dépasse pas le temps minimum entre les fronts d'horloge, je pense qu'une telle conception devrait être totalement fiable et exempte de métastabilité générée en interne, quelle que soit la combinaison des délais de propagation.
Supercat
5

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.

supercat
la source
4

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'.

mikeselectricstuff
la source
4

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).

Martin Thompson
la source
3
Un danger avec cela est que, à moins de restreindre le compilateur logique, il peut produire une logique dont le temps de propagation est négatif pour certaines portes. Par exemple, si on spécifie X=(someComplexFormula)et Y=X & D, et si le compilateur substitue cette formule à X et détermine que cela X & 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.
Supercat
@supercat - Je n'ai jamais travaillé avec les outils de Xilinx, mais lorsque j'ai utilisé des FPGA Altera, vous avez toujours eu la possibilité de spécifier des chemins critiques en tant que modules de grille connectés plutôt qu'en RTL. désactivée.
Jules
@Jules: Toutes mes conceptions à logique programmable ont utilisé Abel, un langage plutôt maladroit, mais qui permet de spécifier des éléments pouvant être implémentés par certains CPLD, mais pouvant poser des difficultés pour un outil de synthèse VHDL ou Verilog. Par exemple, sur l'un de mes projets, j'ai exploité le fait que les composants Xilinx ont une horloge, un ensemble asynchrone et une réinitialisation asynchrone pour implémenter un registre à décalage asynchrone. Si j'ai besoin de faire de telles choses dans un FPGA, n'ayant jamais utilisé Verilog ou VHDL, comment devrais-je savoir ce qui est nécessaire pour le faire? BTW, si ma mémoire est
bonne
... le minutage était tel que l'écriture asynchrone ne pouvait se produire que dans les cas où l'entrée T serait basse, en supposant que si une horloge-nop se produisait près du début d'une impulsion d'écriture, l'écriture asynchrone s'étendrait au-delà pour assurer une valeur stable, et si la nop-clock se produisait vers la fin, il s'agirait simplement de verrouiller une valeur toujours stable. Je ne sais pas comment on pourrait gérer efficacement de tels cas en VHDL ou Verilog.
Supercat
@supercat - en prenant un problème similaire, en consultant le manuel d'utilisation du Cyclone IV, je vois que la meilleure approche du même problème serait d'utiliser l'option "Chargement synchrone à l'échelle de LAB" (un "LAB" est un groupe de 16 éléments logiques Ainsi, si la taille d’un tel registre ne correspond pas à un multiple de 16 bits, certains bits seront perdus, mais cela semble de toute façon l’option la plus utile). J'ai maintenant deux options: je peux écrire un verilog fonctionnel qui nécessitera l'outil de synthèse pour choisir un moyen de mettre en œuvre le registre requis (ce qui serait généralement la meilleure option), ou, si j'ai un timing strict ...
Jules
3

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.

Brian Carlton
la source
3

Vraiment, il existe trois types de conceptions.

  1. Combinatoire. Il n'y a pas d'horloge ni de chemin de retour et le système n'a pas de "mémoire". Quand une ou plusieurs entrées changent, les modifications se répercutent sur la logique. Après un certain temps, la sortie s'installe dans un nouvel état où elle reste jusqu'à ce que les entrées changent à nouveau.
  2. Séquentiel synchrone. Un système est construit à partir de registres et de blocs de logique combinatoire, les registres étant cadencés par un petit nombre (souvent 1) d’horloges. S'il existe plusieurs horloges, des précisions spéciales peuvent être nécessaires sur les signaux qui passent d'un domaine d'horloge à un autre.
  3. Séquentielle asynchrone. Il existe des chemins de retour, des verrous, des registres ou d'autres éléments qui mémorisent la conception d'événements passés et qui ne sont pas synchronisés par des lignes d'horloge faciles à analyser.

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.

Peter Green
la source
2

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.

mikeselectricstuff
la source
1
Vouliez-vous en faire une réponse unique?
Kevin Vermeer
1

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.

Harrygoz
la source
C’est un bon point, même s’il est utile de considérer qu’un circuit combinatoire mal conçu, exécutant la même opération qu’un circuit séquentiel, pourrait dans certains cas produire beaucoup de transitions transitoires lorsque des résultats partiels sont calculés et que la sortie finale est mise à jour pour en tenir compte, et dans les circuits CMOS (comme dans la plupart des FPGA), la consommation d'énergie est à peu près proportionnelle au nombre de transitions. Les horloges peuvent entraîner des transitions inutiles, mais vous pouvez également réduire considérablement la consommation de courant en désactivant les horloges dans des parties du circuit qui ne sont pas nécessaires pour le moment.
Jules