Quelqu'un peut-il me dire quelle est la différence entre RTL et le code comportemental Verilog? Existe-t-il une démarcation claire entre les conceptions à ces deux niveaux?
digital-logic
verilog
vhdl
hdl
Akash Singh
la source
la source
Le code "niveau de transfert de registre" est un code décrit en termes de registres et de logique combinatoire qui se situe entre eux et destiné à être utilisé comme entrée d'un outil de synthèse. Le code s'en tient à un sous-ensemble synthétisable [1] du langage. Il n'y a pas de retards explicites, tout le timing est en termes de fronts d'horloge. Les structures représentant des verrous déclenchés par le niveau sont généralement évitées. Les registres sont généralement cadencés sur un petit nombre d'horloges dont les détails peuvent être donnés à l'analyseur de synchronisation. On s'attend généralement à ce que la logique combinatoire [2] s'installe dans un cycle d'horloge unique, ce qui limite sa complexité. C'est un niveau plus élevé qu'un modèle de niveau de porte, mais il définit toujours la valeur que chaque registre a à chaque cycle d'horloge.
Le code "comportemental" est généralement un code qui décrit le comportement à un niveau supérieur pour une utilisation dans une simulation, mais il n'est pas destiné à être synthétisable. Il peut être utilisé pour décrire l'environnement entourant votre conception dans une simulation. Il peut être utilisé comme une première étape d'une conception pour mettre en place la conception globale avant de dépasser la conception RTL détaillée des modules individuels.
[1] Le sous-ensemble exact autorisé varie selon les outils de synthèse.
[2] S'il ne se stabilise pas en un seul cycle, la simulation et la synthèse peuvent donner des résultats différents et l'analyseur de synchronisation affichera une violation, sauf indication contraire explicite.
la source
Une définition plus généralisée.
Code de comportement: par définition, il définit le comportement d'un composant numérique. Il ne donne pas d'informations sur la façon dont il sera mis en œuvre dans le matériel réel (synthèse). Il ne donnera pas d'informations sur la façon dont les registres et les portes seront mis en œuvre pour effectuer les opérations requises. Cela ressemble plus à l'écriture d'un algorithme ou d'un FSM en C.
RTL: C'est la forme plus précise d'un composant numérique. Il donne des informations sur la façon dont le code sera implémenté en tant que matériel réel (après synthèse). Il donne également des informations sur la façon dont les données seront transférées entre les registres et les portes.
la source
C'est la même langue, mais différents styles sont utilisés. Avec l'expérience, vous pouvez les distinguer rapidement, voici quelques traits de chacun:
Le code Verilog comportemental ressemble généralement davantage à un programme informatique séquentiel exécuté de haut en bas dans un
initial begin
bloc. Vous pouvez constater qu'aucun port d'entrée / sortie n'est défini dans les modules comportementaux de niveau supérieur, car la sortie peut être vers des installations de simulateur, comme la console$display()
ou le système de fichiers avec$open
ou le videur de forme d'onde avec$dumpfile
et$dumpvars
. Surveillez les retards entre les instructions implémentées en utilisant de longs temps de simulation, par exemple#4000
et en invoquant des tâcheswishbone_master.checked_read(addr, value)
. Pour ces constructions de niveau supérieur, il n'est pas évident de savoir quel serait ou pourrait être l'équivalent de la technologie de synthèse.Verilog pour la synthèse a toujours des ports d'entrée / sortie, car sans ports connectés, le module n'a aucun effet secondaire et peut être éliminé [1]. Retards probablement mis en œuvre en comptant les cycles d'une horloge particulière. Notez que certaines fonctions du système Verilog, par exemple,
$clog2(PARAMETER)
peuvent être autorisées dans le code de synthèse, donc la présence de$function
n'est pas une garantie dans les deux cas. Le code de synthèse comprend généralement de nombreux «processus» indépendants, chacun avec une liste de sensibilité. Certaines technologies autorisent lesinitial begin
blocs pour l'initialisation de la mémoire, ce n'est donc pas une garantie.En fin de compte, le concepteur connaît le but du code qu'il écrit et l'invoquera de manière appropriée avec l'ensemble d'outils de synthèse ou dans un simulateur.
[1] sauf pour certains blocs IP qui peuvent établir des connexions de porte dérobée avec des installations de puces internes, par exemple JTAG
la source