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?
verilog
vlsi
system-verilog
asic
Anand
la source
la source
Réponses:
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.
la source
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#20
pour 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#10
et#20
cela 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.
la source
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.
la source