Je veux comprendre comment différentes constructions en code VHDL sont synthétisées en RTL.
- Quelqu'un peut-il me dire la différence entre la construction If-Else et les constructions d' instructions Case d'un processus en VHDL en termes de la façon dont le code est inféré dans le circuit RTL par l'outil de synthèse?
- Considérez le cas de plusieurs if-else imbriqués et le mélange d'instructions de cas avec la construction if-else à l' intérieur d'un processus.
- Aussi quand utiliser quelle construction?
PS: J'ai vu une question connexe "Plusieurs déclarations if en cours dans vhdl" mais cela ne répond pas à ma question de toute façon.
vhdl
code-design
rtl
nurabha
la source
la source
dec
/ itérativesjz
, ce qui est beaucoup plus efficace. Peut-être qu'une optimisation similaire est appliquée ici.Réponses:
La
if-elsif-else
construction déduit un réseau de routage prioritaire:simuler ce circuit - Schéma créé à l'aide de CircuitLab
Cela correspond à
La
case
construction, d'autre part, induit un grand ol 'mux:Cela correspond à
Évidemment, ce sont des conceptions très simplifiées avec une seule expression de valeur, résultant en une sortie.
Par ce qui précède, vous pouvez voir comment ils s'emboîtent / se mélangent.
Puisque
if-else
infère la priorité, il doit être utilisé lorsque plusieurs conditions d'entrée peuvent se produire. L'utilisationcase
, d'autre part, est appropriée lorsque les entrées s'excluent mutuellement.la source
if-else
construction, cependant, est à l'origine de cette chaîne. La première condition doit échouer pour que la deuxième condition soit testée. Ce n'est pas le cas pour, euh, lacase
construction, et c'est pourquoi uneif-else
déclaration n'a pas pu être synthétisée comme un seul grand multiplexeur.case
instruction peut également générer une logique séquentielle. J'ai trouvé "Real World VHDL" , une série de diapositives de cours de l'Université de Glasgow, qui pourraient vous être utiles.Dans cet ancien article de blog , l'auteur a écrit et synthétisé deux versions fonctionnellement équivalentes du code VHDL. L'un utilisant if-else, l'autre utilisant case. Le résultat:
Et sa conclusion:
Il existe également des dizaines de publications sur ce sujet sur Stack Overflow pour toutes les langues imaginables. La conclusion est généralement la même, qu'il n'y a pas de différence en termes de performances. Parfois, s'il existe un grand nombre de cas, un compilateur peut être suffisamment intelligent pour créer une table de recherche qui produirait des performances légèrement meilleures.
Un synthétiseur VHDL peut faire quelque chose de similaire. Mais vous auriez toujours besoin d'un grand nombre de cas auquel cas (jeu de mots), vous voudriez probablement utiliser une déclaration de cas de toute façon car elle offre une meilleure lisibilité là où il y a un grand nombre d'options.
la source