VHDL ou Verilog? [fermé]


94

VHDL et Verilog sont les HDL du jour. Quels sont les avantages de l'un ou l'autre pour quelqu'un qui n'a aucune expérience des HDL?


2
Ils semblent être tout aussi efficaces, choisissez celui que vous préférez. Je trouve que le VHDL me convient le mieux.
Leon Heller

1
Comment puis-je donner à ces modérateurs "voter"? La rhétorique des personnes ayant de l'expérience auparavant est plus précieuse que l'information contenue dans les livres. Les livres ne portent pas la notion de temps.
dsgdfg

Réponses:


70

Je ne peux pas vous dire lequel apprendre, mais voici quelques points contrastés (d'un utilisateur très centré sur le VHDL, mais j'ai essayé d'être aussi juste que possible!), Ce qui peut vous aider à faire un choix en fonction de vos propres préférences. en termes de style de développement:

Et gardez à l'esprit la célèbre citation qui dit: "Je préfère celle des deux que je n'utilise pas actuellement" (désolé, je ne me souviens pas qui a écrit cela - peut-être Janick Bergeron?)

VHDL

  • fortement typé
  • plus verbeux
  • très déterministe
  • syntaxe (et état d'esprit) autre que C

Beaucoup d'erreurs de compilation pour commencer, mais cela fonctionne généralement comme prévu. Cela peut conduire à une courbe d'apprentissage très raide (avec la syntaxe inconnue)

Verilog

  • faiblement typé
  • plus concis
  • seulement déterministe si vous suivez certaines règles avec soin
  • plus de syntaxe C-like (et mentalité)

Les erreurs se retrouvent plus tard dans la simulation - la courbe d'apprentissage pour "avoir l'impression de faire quelque chose" est moins profonde, mais dure plus longtemps (si c'est la bonne métaphore?)

Verilog est également favorable à ce que la vérification haut de gamme se tourne de plus en plus vers SystemVerilog, qui est une extension considérable de Verilog. Mais les outils haut de gamme peuvent également combiner le code de synthèse VHDL avec le code de vérification SystemVerilog.


Pour une autre approche entièrement: MyHDL - vous obtenez toute la puissance de Python en tant que langage de vérification avec un ensemble d’extensions de synthèse à partir duquel vous pouvez générer du VHDL ou du Verilog.

Ou Cocotb - toute la puissance de Python en tant que langage de vérification, avec votre code de synthèse encore écrit dans le HDL choisi (par exemple, VHDL ou Verilog).


2
Je connais Verilog mais je ne connais pas bien le VHDL: qu'entendez-vous par VHDL comme étant plus déterministe que Verilog?
cic

44

J'ai appris les deux la même semaine. VHDL est comme ADA / Pascal et Verilog est comme C. VHDL est plus verbeux et plus pénible pour obtenir une compilation, mais une fois que vous avez obtenu une compilation, vos chances de succès sont meilleures. Au moins c'est ce que j'ai trouvé. Verilog, comme C, est très content de vous laisser vous tirer une balle dans le pied. Certaines industries comme l'aérospatiale / le gouvernement se tournent vers le VHDL, d'autres vers Verilog. Le problème que je rencontre avec les deux réside dans les capacités du banc d’essai. Lorsque vous essayez d’apprendre et de passer de la simulation à l’écriture sur silicium / FPGA, un code synthétisable unique constitue un autre niveau de formation.

J'aime beaucoup le langage appelé CDL . Il est strictement synthétisable, vous écrivez vos bancs d’essais d’une autre manière, il génère un Verilog synthétisable que vous pouvez intégrer à d’autres outils. Malheureusement, les documents CDL font défaut, j'espère avoir quelques exemples dans le monde pour montrer à quel point il est plus facile à utiliser que Verilog ou VHDL, mais ne le faites pas. Il vient avec son propre environnement sim / test. Avec CDL et GTKWave, vous pouvez effectuer un travail considérable.

Un autre outil appelé Verilator est assez rigide pour garder votre Verilog propre. C'est un simulateur gratuit de Verilog avec un moyen très simple de se connecter à la simulation ou de créer des bancs d'essai en C / C ++. Vous pouvez aussi utiliser Verilog, ne vous y limite pas. Il existe également Icarus Verilog , qui est plus grand et plus connu, mais je recommanderais Verilator si vous voulez apprendre Verilog. Pour le format VHDL, il existe GHDL , mon expérience n’était pas aussi satisfaisante que celle de Verilator , mais au moins, il existe un outil gratuit pour essayer de vous mouiller les pieds. Si vous avez une expérience en programmation logicielle, vous pourrez probablement utiliser Verilog plus rapidement que VHDL.

Je suis vraiment d'accord avec Leon, essayez les deux. fpga4fun et d’autres pages Web ont de bonnes informations et certaines de ces pages vous donneront à la fois les équivalents Verilog et VHDL pour le sujet dont ils discutent. Je trouve les pages comme celles-ci les plus utiles pour comparer les deux langues. Si vous souhaitez utiliser un HDL au cours de votre carrière, je vous recommande d’avoir au moins quelques fonctionnalités avec les deux, peut-être vraiment très bien avec l’un mais de ne pas être complètement incapable d’utiliser l’autre.


1
Très bons conseils. J'ai modifié votre réponse en référence à moi et à d'autres. +1
Daniel Grillo

23

De nombreuses guerres saintes ont été menées à ce sujet. Verilog présente un inconvénient particulier : son comportement non déterministe. http://www.sigasi.com/content/verilogs-major-flaw


Oui, ça a l'air mauvais, mais je ne suis pas sûr: s'agit-il d'un défaut de la langue ou de ce synthétiseur?
Steven

4
C'est un problème de langue. Différents synthétiseurs choisissent leur propre comportement de manière imprévisible. Exécutez le même code sur un simulateur Mentor ou un simulateur de cadence et vous obtiendrez peut-être des résultats différents.
Philippe

20

Les deux ont des avantages et des inconvénients. VHDL est plus académique, prolixe et complexe. Vous devez écrire plus de code, mais la rigueur signifie qu'il est plus susceptible de fonctionner. Verilog est plus simple pour une conception numérique typique, mais facilite la création de bogues difficiles. Le VHDL est plus répandu dans les universités. Verilog est plus commun dans les grandes entreprises de semi-conducteurs.

Généralement, le choix de l’un ou de l’autre dépend des outils que vous utilisez. Certains des outils FPGA populaires fonctionnent mieux avec le VHDL. Certains outils ASIC populaires fonctionnent mieux avec Verilog. Donc, ce qui est mieux dépend de ce que vous voulez en faire.

Supposons que vous vouliez construire de petits projets en utilisant les FPGA Altera qui sont populaires dans les écoles EE. Les outils gratuits prennent en charge les deux HDL. Mais vous constaterez peut-être que la communauté d'utilisateurs utilise principalement le langage VHDL. Il y aura plus d'exemples de code, de modules réutilisables, etc. si vous optez pour cette langue.

Inversement, si vous avez l’intention de travailler dans une grande entreprise qui effectue un travail sérieux de conception de puces, presque toutes utilisent Verilog de nos jours. Les outils de synthèse, de simulation et de vérification à usage intensif sont optimisés pour Verilog. Et dernièrement, SystemVerilog - des extensions à Verilog pour prendre en charge la conception et la vérification de systèmes de haut niveau.

Plus de discussion ici et des liens utiles ici:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

Le meilleur conseil pour un débutant / amateur est de décider avec quels jetons vous voulez jouer et de voir quels exemples le fournisseur fournit. Utiliser ça. Une fois que vous êtes un concepteur numérique expérimenté, apprendre l’autre langue ne prend que quelques jours.


4
Merci. La dernière phrase est importante. Existe-t-il des outils permettant de convertir l’un en l’autre?
Steven

je ne vais pas entrer dans l'histoire du gouvernement américain, mais si vous regardez modelsim, quand il prend verilog, il se convertit en vhdl puis sims que. Il ne fait pas que l'inverse, donc au moins verilog to vhdl vous pouvez voir une conversion avec cet outil. il existe d'autres outils qui convertissent spécifiquement une manière ou une autre et ils ont des versions de démonstration.
old_timer

3
Certains des outils commerciaux (synthèse, analyse statique) liront dans une langue et sortiront dans une autre. Le résultat est comme utiliser un compilateur pour transformer Ada en langage assembleur, puis un décompilateur pour extraire C. Vous n'aimerez pas le résultat.
Andy McC

17

Réponse courte : utilisez SystemVerilog, mais apprenez aussi le VHDL . Évitez Verilog-2001 si vous le pouvez.

Réponse très longue : pour le moment, je suppose que par Verilog, vous voulez dire Verilog-2001, ce qui est probablement ce que supposent également la plupart des autres réponses. La meilleure suggestion serait probablement d'apprendre les deux, mais de ne pas utiliser ni l'un ni l'autre (plus à ce sujet à la fin de la réponse). Les principales différences peuvent être résumées de la manière suivante:

  • Verilog-2001 est concis , alors que VHDL est (très, très, très) prolixe
  • Verilog-2001 prend en charge les constructions de très bas niveau qui ne sont pas prises en charge par VHDL (mais vous n’aurez pas à les utiliser pour une conception de niveau de transfert de registre (RTL) typique.
  • Le VHDL est plus typé , ce qui facilite généralement la détection précoce des erreurs.
  • VHDL est beaucoup plus expressif que Verilog
  • Verilog-2001 a une syntaxe plus semblable à C , tandis que VHDL ressemble plus à Ada
  • Verilog-2001 peut avoir des concepts déroutants pour les débutants (par exemple wirevs reg)

Cela dit, les concepts les plus importants sont partagés par les deux langues, mais par des noms différents (par exemple, alwaysvs process) et, en tout état de cause, la difficulté d’apprendre un HDL est davantage liée aux concepts sous-jacents (tels que la simultanéité de tous les processus, la HW conventions etc.) que la langue elle-même. Compte tenu des différences, si le choix se situe entre Verilog 2001 et VHDL, je m'adresserais personnellement à tout débutant en VHDL.

Cependant, comme je l'ai dit, ma suggestion est en fait de n'utiliser ni VHDL ni Verilog-2001 si vous avez le pouvoir de choisir. Contrairement à ce que beaucoup de gens pensent, SystemVerilog n'est pas un langage de niveau supérieur utile uniquement pour la conception ou la vérification au niveau système. Il a peu de choses à partager avec les langages pouvant être intégrés à un outil de synthèse de haut niveau tel que SystemC.

SystemVerilog est plutôt une mise à jour complète du langage Verilog (basé sur Verilog-2005, voir http://en.wikipedia.org/wiki/SystemVerilog ) qui comporte un sous-ensemble entièrement synthétisable qui correspond à la concision de Verilog avec une expressivité supérieure à celle des deux. Verilog-2001 et VHDL, fournissant à mon avis le meilleur des deux mondes.

Voici des exemples de constructions / expressions très importantes disponibles dans SystemVerilog qui ne sont pas disponibles dans Verilog-2001, VHDL ou les deux:

  • always_ff, always_latch, always_combBlocs qui aident le concepteur distinguer immédiatement entre les blocs de mise en œuvre différents types de logique, et - pour always_combet always_latch- (! Une source de bugs infinies dans VHDL et Verilog, en particulier pour les débutants) déduire automatiquement les signaux qui doivent aller sur la liste de sensibilité
  • logictypes qui se substituent aux types déroutants wireet regtypes de Verilog-2001
  • types compacts permettant de construire facilement des bus multidimensionnels (par exemple logic [N-1:0][M-1:0][P-1:0]), alors que Verilog-2001 ne prend en charge que les bus bidimensionnels et que VHDL oblige le concepteur à définir de nouveaux types pour construire des structures similaires
  • des constructions de haut niveau telles que struct(similaire au VHDL record) et même de niveau supérieur interfacequi peuvent être utilisées très efficacement pour modéliser des structures régulières (telles que les ports d'un bus)

J'ai testé toutes ces différences "sur ma peau" tout en travaillant sur un système multicœur assez complexe à des fins de recherche. Il est maintenant pris en charge par de nombreux outils, et je suis certain (de les utiliser presque tous les jours) qu'il est soutenu par les outils Synopsys (pour les flux de synthèse ASIC et FPGA), Xilinx Vivado (pour la synthèse FPGA) et des outils de simulation tels que en tant que MentorGraphics Modelsim, Cadence NCsim et Synopsys VCS.

Pour être totalement complet, il existe deux autres types de langages importants dans la boîte à outils du concepteur de matériel (bien que la qualité de ces outils puisse varier beaucoup):

  • Langages de génération HDL tels que MyHDL (basé sur Python) et Rocket (basé sur Scala). Le concept est le suivant: vous décrivez votre conception dans un langage de niveau supérieur tout en utilisant des concepts très HDL (par exemple, des blocs concurrents, une synchronisation explicite), puis vous générez un format HDL classique (généralement Verilog-2001). Honnêtement, je ne trouve pas cela très utile, car l'étape d'abstraction des HDL est petite et SystemVerilog fournit déjà bon nombre des concepts de niveau supérieur, avec l'avantage qu'il est directement introduit dans le flux de synthèse sans étapes intermédiaires.
  • Des outils de synthèse de haut niveau , tels que Vivado HLS, LegUp, Calypto Catapult et bien d’autres. Celles-ci prennent une description de très haut niveau, souvent en C, C ++ ou SystemC et généralement sans heure, et génèrent une implémentation optimale au mieux dans Verilog (généralement illisible). Ils sont assez efficaces pour générer des objets (par exemple des accélérateurs matériels pour des fonctions telles que la convolution, les FFT, etc.), mais ne sont généralement pas polyvalents. Par exemple, il est impossible de concevoir un cœur de processeur dans la plupart des outils HLS - le seul que je connaisse est BlueSpec, qui est en réalité un hybride entre les générations HLS et HDL.

C'est à peu près comment j'ai appris. J'ai d'abord appris le VHDL et l'ai codé pendant 3 ans. Après avoir passé 3 mois à coder verilog après cela, nous avons décidé (très rapidement) que SystemVerilog était la solution. Maintenant, je code presque exclusivement en SV, mais je compte beaucoup sur les techniques de compréhension et de codage que j'ai apprises lors de l'utilisation du VHDL.
Stanri

12

Ma carrière au cours des 13 dernières années était composée à 80% d’ASIC et à 20% de FPGA.

Le VHDL a été utilisé pendant les trois premières années et demi et le reste était du Verilog. Je n’ai pas trouvé difficile de passer à Verilog, et pour des raisons d’emplacement (Silicon Valley) et de rapidité, je ne code que dans Verilog aujourd’hui.

De plus, je fais beaucoup d'interfaces asynchrones, de verrous et de conceptions semi personnalisées au niveau de la porte pour des performances optimales, de sorte que le VHDL est très peu utilisé dans ma vie actuelle. Au lieu de cela, j'ai trouvé SystemVerilog et SystemC beaucoup plus utiles à prendre en charge et à utiliser pour les grands projets d'ingénierie.

À un moment donné, des outils tels que Verilator (gratuit! & Rapide) m'ont permis d'économiser beaucoup de fonds indispensables à la réalisation de simulations critiques. Vous n'avez pas (encore) cette option pour VHDL. Et vous pourriez ne jamais en avoir besoin si vous nagez toujours dans une piscine riche ou si vous ne faites pas de conceptions de porte> 1 M.

Néanmoins, le VHDL convient mieux aux débutants avant qu'ils ne développent de solides principes de conception du matériel. Mes communications avec les membres de l'EDA ici suggèrent qu'ils ont fait peu de développements en VHDL au cours des 10 dernières années, et il y a une grande campagne derrière HLS aujourd'hui. Donc, il n'y aura pas beaucoup de développeurs d'outils VHDL autour de ...


FreeHDL pour la simulation VHDL? Qucs comme frontend.
Martin

8

J'ai opté pour le VHDL, principalement parce que je connais très bien le langage C et que j'ai constaté qu'essayer d'écrire verilog avait tendance à me faire écrire comme si je ciblais un processeur ne décrivant pas le matériel.

Très ennuyeux d'écrire une page de code et de se rendre compte de ce que vous avez écrit était en fait un programme séquentiel et non une conception matérielle, voire un synthé, mais le résultat était moche et lent.

Le format VHDL était suffisamment différent pour que je trouve beaucoup plus facile de penser en termes de conception logique et de ne pas contrôler le flux.

À la fin de la journée, la langue est rarement le plus difficile, la compétence réside dans la conception du système et non dans la frappe.

Cordialement, Dan.


5

L'année dernière, l'université que j'ai étudiée a mis en place deux cours ouverts pour débutants. Tous deux couvraient le même contenu, l'un utilisant le langage VHDL et l'autre Verilog.

Bien sûr, j'ai demandé aux deux professeurs les différences entre VHDL et Verilog. Les deux ne pouvaient pas élire le meilleur.

J'ai donc dû faire les deux cours pour voir lequel pourrait être meilleur pour moi. Ma première impression était VHDL est plus Pascal comme et Verilog est plus C-like .

Après cela, j'ai décidé de ne faire que du VHDL car, à cette époque, je travaillais avec Delphi.

Mais je n'ai jamais travaillé avec le FPGA après le cours. C'est donc le mieux que je puisse vous aider.


5

J'utilise presque entièrement le VHDL. Mon expérience est que le VHDL est plus répandu en Europe, Verilog aux États-Unis, mais que le VHDL progresse régulièrement aux États-Unis. Le typage puissant du format VHDL ne me dérange pas car je l'utilise comme un langage de conception matérielle à l'ancienne utilisé dans une petite logique programmable, telle que PALASM ou le format AHDL d'Altera.

Le gros problème pour la plupart des gens qui utilisent le VHDL, ce sont les types forts. Ils veulent faire des assignations entre std_logic_vector (que je considère comme une collection de fils dans la cible) et "int" (que je considère comme un nombre stocké dans l'ordinateur qui compile le dessin). La conversion de type la plus gênante que je rencontre généralement se situe entre bit_vector (ce que je considère être une description d’une collection de fils dans l’ordinateur compilant le dessin) et std_logic_vector. En fait, ce qui m’entraînait à stackexchange à l’heure actuelle, c’était à la recherche d’une conversion de char (une variable de caractère stockée dans l’ordinateur compilant) en int.

À l'époque, le conflit le plus célèbre entre VHDL et Verilog était le concours de design organisé par le magazine ASIC & EDA. Google "Résultats inattendus d'un concours de conception matérielle: Verilog gagné et VHDL perdu? Vous êtes le juge!", Par exemple: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

Le concours consistait à mettre en place un registre 9 bits assez complexe. Il y avait des comptages haut / bas ainsi que quelques autres choses. Les résultats ont été que 8 des 9 concepteurs Verilog avaient du code en cours d'exécution après 90 minutes. Zéro des 5 gars du VHDL ne fonctionnait pas.

Je n'utilise pas le VHDL comme n'importe qui. La façon dont je l'utilise, les types ne me gênent pas très souvent. J'aurais implémenté le projet ci-dessus de la même manière que je faisais tout le reste, entièrement dans std_logic et std_logic_vector, en utilisant (de retour dans la journée) la bibliothèque non signée IEEE. Au lieu de cela, j'imagine que les concepteurs VHDL ont fait leur travail avec int et se sont perdus dans la conversion de type.

Vous pouvez vous perdre dans la conversion de type à deux endroits: (a) votre conception et (b) votre banc d’essai. Pour moi, il est simplement plus facile d'écrire (presque) entièrement le banc de test dans std_logic, de sorte que le banc de test lui-même est (presque) synthétisable. Par "presque", je veux dire que je définirai l'horloge avec une affectation différée qui ne peut pas être synthétisée. Mais à part cela (et les commentaires), vous ne pouvez pas distinguer mes bancs d’essai de la logique synthétisée.

Quoi qu'il en soit, avant de choisir la première langue à apprendre (presque tout le monde a une préférence, mais presque tout le monde utilise les deux), je vous conseillerais de consulter ce concours et de lire le commentaire.

L’un des problèmes que j’ai observé avec le langage VHDL est qu’étant donné qu’il s’agit d’un langage très prolixe, il semble y avoir une tendance (dans l’esprit des concepteurs) à croire qu’il n’exige pas de commentaires. Pas vrai bien sûr, vous devriez écrire les commentaires avant le code.


1
Je pense que c’est une affirmation intéressante que le problème le plus grave est le typage puissant du VHDL. Pour moi, la dactylographie forte est une fonctionnalité essentielle qui me permet d’élever le niveau d’abstraction. Dans la conception matérielle, vous avez le choix entre décrire une structure qui implémente un comportement ou décrire un comportement qui implémente une structure. L'histoire a montré que l'abstraction est la clé du succès de la conception de grands systèmes, et les systèmes numériques ne font pas exception. Je pense donc que vous manquez beaucoup en vous limitant à un sous-ensemble très étroit de fonctionnalités linguistiques.
Trondd

2
C'est vrai, mais je ne me spécialise pas dans la "conception de grands systèmes", je me spécialise dans les petites choses qui doivent être extrêmement efficaces. L'efficacité devient parfois primordiale dans la conception électronique pour un certain nombre de raisons. Parfois, un grand système est constitué de beaucoup de ces petits systèmes et ce type de conception offre une efficacité bien supérieure.
Carl Brannen

5

Je vais peser sur mes deux cents: je suis un grand utilisateur de VHDL, mais Verilog peut certainement faire le travail aussi bien. Vous pouvez toujours en insérer un dans un autre (bien qu’avec un temps et un coût de frappe).

Ce que j’ai constaté, c’est que le VHDL brut manque de nombreuses fonctions pratiques. (OU ou AND: on pense à tout un std_logic_vector). Ainsi, vous construire une boîte à outils de fonctions déboguées et synthétisables augmente considérablement votre productivité lorsque vous utilisez VHDL.

Peut-être que quelqu'un pourrait faire référence à une bonne bibliothèque à code source ouvert offrant toutes ces fonctions "utiles".


2
Je suis à peu près sûr que la réduction ET / OU est incluse dans VHDL 2008 avec d'autres mises à jour utiles.
ks0ze

4

Les réponses précédentes couvrent à peu près les contrastes entre les deux langues, et cet article couvre également les points: http://www.bitweenie.com/listings/verilog-vs-vhdl/

J'aimerais également faire quelques remarques supplémentaires qui n'ont pas été mentionnées.

Je recommanderais d'abord d'apprendre le VHDL pour quelques raisons. Le typage fort aide le compilateur à rattraper certaines erreurs faciles du débutant. J'ai également entendu dire que le VHDL était plus difficile à utiliser après avoir utilisé Verilog en premier.

Honnêtement, vous ne pouvez pas vous tromper avec l'une ou l'autre langue; et si vous travaillez très longtemps dans cette industrie, vous apprendrez quand même les deux langues.

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.