Pourquoi les retards ne peuvent-ils pas être synthétisés dans Verilog?


8

J'ai toujours lu que les retards déclarés dans le code RTL ne peuvent jamais être synthétisés. Ils sont destinés uniquement à des fins de simulation et les outils de synthèse modernes ignoreront simplement les déclarations de retards dans le code.

Par exemple: x = #10 y;sera considéré comme x = y;par l'outil de synthèse.

Quelles sont les raisons pour lesquelles les déclarations de retard dans un langage de description matériel (par exemple, VHDL, Verilog ou Sytem-Verilog) ne peuvent pas être synthétisées?


1
Il s'agit d'une question croisée car elle se situe entre le chevauchement de SO et ElectronicsSE.
pre_randomize

Réponses:


14

La synthèse signifie en quelque sorte convertir ce que vous avez décrit (dans Verilog ici) en matériel réel .

Maintenant, dans votre Verilog, vous dites que vous avez un retard de 50ns. Ok, mais maintenant, en termes de matériel, comment convertiriez-vous cela en matériel réel?

Si vous utilisez un FPGA, comment construirez-vous réellement votre délai de 50ns en utilisant les ressources FPGA disponibles (LUT, Registres, élément Ram, ...)? En ajoutant des retards de routage supplémentaires? imaginez que vous spécifiez 1s de retard! Impossible sans utiliser TOUTES les capacités de routage de votre puce (peut-être pas assez). Votre design ne peut pas être ajusté. Idem pour un ASIC. Vous utiliseriez 80% de la surface de silicium pour ajouter un retard à UNE ligne.

La façon dont cela est censé fonctionner est que vous utilisez une conception synchrone et que vous implémentez le retard vous-même à l'aide de compteurs ou d'autres techniques. Mais les retards doivent être des multiples de l'horloge de cet élément.

Habituellement, vous trouvez des choses comme "après 10 ns", ce sont des retards de propagation. Lorsque vous effectuez une simulation idéale sur un simulateur Verilog, les sorties se produisent exactement lorsque les entrées changent. Ce n'est pas réaliste et ne décrit pas le fonctionnement réel du matériel. Pour tenir compte de cela, vous pouvez spécifier après combien de temps votre sortie sera modifiée: en utilisant la déclaration de délai.


2
Je noterai que "parce que cela prendrait toute la puce" n'est pas vraiment une raison pour laquelle quelque chose ne peut pas être synthétisé, c'est une raison pour laquelle quelque chose ne peut pas être ajusté ou placé dans les limites définies.
W5VO

@ W5VO Vous avez raison. Il s'agissait de montrer quelque chose d'absurde qui justifierait de trouver un autre moyen. Corrigée.
Blup1980

5

Portage de ma réponse de SO . Ce qui explique pourquoi il est impossible de synthétiser des retards absolus

Lors de la synthèse d'arbres d'horloge, l'outil de synthèse les équilibre en ajoutant des retards afin que tous les nœuds reçoivent l'horloge en même temps, il semblerait donc que l'outil de synthèse ait la capacité d'ajouter des retards.

Cependant, lorsque les ASIC sont fabriqués, la vitesse varie, à un niveau élevé, elle peut être considérée comme lente, typique et rapide. Dans la pratique, il existe des centaines de variations de ces coins où certains types d'appareils dans le silicium fonctionnent rapidement et d'autres ralentissent.

Ces coins du silicium ont également une température nominale, le pire des cas peut être + 140C Silicium rapide et -40C Silicium lent. La variation du retard à travers un tampon dans ce cas pourrait être de 1ns à 30ns.

Pour ramener cela à Verilog s'il #10était synthétisable, vous obtiendriez en fait 155 + -145, c'est-à-dire 10ns à 300ns, si vous avez également conçu quelque chose avec #20pour faire partie de la même interface ou structure de contrôle, il va avoir une plage de 20ns à 600ns . Par conséquent, le tout n'est pas vraiment valable par rapport à votre conception. Vous n'obtenez pas l'exact #10et #20cela a été spécifié.

Les arborescences d'horloge sont conçues de manière à limiter les retards max et min et à ce que tous les nœuds de l'arborescence évoluent les uns par rapport aux autres. On ne leur donne jamais une règle si stricte qu'elle doit être de # 10ns car cela est physiquement impossible à garantir dans un circuit combinatoire.


3

La seule unité de temps absolue proviendrait d'une horloge externe. D'où proviendrait le retard arbitraire - quelle sorte d'équivalent logique numérique discret le produirait à partir de l'horloge?

Si vous voulez un retard synthétisable, vous devrez utiliser l'entrée d'horloge externe et une machine / compteur d'état approprié qui comptera pour un nombre spécifique de cycles d'horloge.


Cette pensée m'a traversé l'esprit. Pourquoi devons-nous compter sur l'horloge pour générer un retard? Pourquoi ne pas synthétiser le retard sur un simple circuit RC avec Vdd?
Anand

1
La synthèse remplit principalement les valeurs dans les tables de recherche et les éléments de routage. Je suppose qu'il est beaucoup plus difficile de créer un circuit RC programmable sur site, en particulier un circuit qui n'est pas trop affecté par la température. Il est beaucoup plus facile de tout synchroniser sur le même front d'horloge que d'espérer des temps de propagation exacts.
maxy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.