Qu'est-ce que Verilog ?

Langage de description matérielle très utilisé pour la conception et la vérification de circuits numériques. Les circuits sont décrits par modules (module) et le comportement par assign ou always.

Nom japonais: Verilog

« Verilog » apparaît dans 21 questions d'entraînement réparties sur 2 thèmes, dont HDL et vérification, Flot de conception de circuits intégrés et EDA.

Domaine: HDL et vérification

Modules, assign et always

Une conception Verilog est construite à partir de modules, chacun étant un bloc de circuit doté de ports d'entrée et de sortie déclarés. Un module peut être instancié dans un autre autant de fois que nécessaire, ports reliés entre eux, si bien qu'une puce se décrit comme une hiérarchie de composants. À l'intérieur d'un module, une affectation continue comme assign y = (a & b) | c décrit une logique combinatoire dont la sortie suit ses entrées en permanence. Un bloc always décrit un comportement déclenché par des événements : always @(posedge clk) devient des bascules déclenchées sur front, tandis que always @(*) est réévalué dès qu'un signal qu'il lit change et décrit de la logique combinatoire.

Penser en matériel, pas en étapes

Verilog ressemble à un langage de programmation, mais chaque instruction assign et chaque bloc always fonctionnent de façon concurrente, quel que soit leur ordre dans le fichier. Dans les blocs cadencés, les affectations non bloquantes (<=) évaluent tous les membres de droite avec les valeurs d'avant le front, puis mettent à jour ensemble, à l'image de bascules qui capturent simultanément ; les affectations bloquantes (=) conviennent aux blocs combinatoires qui calculent des valeurs intermédiaires de haut en bas. Un signal déclaré reg n'est pas forcément un registre : affecté dans always @(*), il est combinatoire. Un if sans else dans un bloc combinatoire implique une mémorisation et infère un latch involontaire. Les largeurs comptent aussi, car les affectations tronquent silencieusement, et les signaux sont non signés sauf s'ils sont déclarés signed.

Sémantique de simulation et logique à quatre états

Les simulateurs Verilog sont pilotés par événements : ils ne réévaluent que la logique dont les entrées ont changé, ce qui est efficace car peu de signaux basculent à chaque cycle. Les signaux prennent quatre valeurs : 0, 1, X pour inconnu et Z pour haute impédance. Les registres non initialisés et les pilotes en conflit produisent X, et les nets non pilotés produisent Z ; voir l'une ou l'autre valeur dans un chronogramme est donc un indice de débogage précieux. Certaines sémantiques sont optimistes : une instruction if traite une condition X comme fausse, masquant des bogues que le matériel réel révélerait. L'opérateur == renvoie X lorsque les opérandes contiennent X ou Z, tandis que === les compare littéralement et n'est utilisé que dans les bancs de test.

Verilog, SystemVerilog et VHDL

Seul un sous-ensemble de Verilog est synthétisable. Les délais comme #10, $display et les entrées-sorties fichier sont réservés à la simulation et ignorés par la synthèse ; les bancs de test peuvent les utiliser librement, mais pas le RTL. SystemVerilog, la norme qui lui succède, ajoute le type logic, qui supprime l'essentiel de la distinction wire/reg, ainsi que always_ff et always_comb, qui expriment l'intention du concepteur pour que les outils puissent signaler un latch inféré. Il ajoute aussi de nombreuses fonctions de vérification comme les assertions et les classes. VHDL est l'autre grand langage de description matérielle, au typage plus strict et au style plus verbeux ; les deux sont utilisés pour la conception RTL.

S'entraîner : questions sur Verilog

Quelle est la grande différence entre une description en HDL comme Verilog et un programme logiciel en C ou autre ?

  1. AUne description HDL représente des circuits fonctionnant simultanément en parallèle
  2. BUne description HDL est une suite d'instructions exécutées ligne par ligne de haut en bas
  3. CEn HDL, les variables et les branchements conditionnels sont inutilisables
Afficher la réponse et l'explication

Réponse : A. Une description HDL représente des circuits fonctionnant simultanément en parallèle

Le HDL ressemble à un programme, mais ce qu'on écrit devient, par synthèse logique, un circuit de portes et de bascules. Toutes les parties d'un circuit fonctionnant en permanence simultanément, plusieurs instructions assign ou blocs always agissent en parallèle, indépendamment de leur ordre d'écriture. Raisonner comme en logiciel (« une fois ce traitement terminé, le suivant ») ne donne pas le circuit voulu ; il est essentiel d'écrire en imaginant le circuit produit.

Quel est l'objectif de l'utilisation de module en Verilog ?

  1. ADéfinir un composant de circuit doté de ports d'entrée et de sortie, réutilisable au sein d'autres modules
  2. BSuspendre temporairement l'exécution du programme
  3. CAfficher à l'écran les résultats de simulation
Afficher la réponse et l'explication

Réponse : A. Définir un composant de circuit doté de ports d'entrée et de sortie, réutilisable au sein d'autres modules

Le module est l'unité définissant un ensemble de circuit doté de ports d'entrée et de sortie ; il représente un additionneur, un compteur ou un CPU entier. Un module défini peut être utilisé autant de fois que voulu comme composant dans un autre module (instanciation), et l'on assemble de grands circuits en reliant les ports par des fils. Comme on dispose et câble des composants sur une carte, on construit des circuits de façon hiérarchique.

Questions fréquentes

Quelle est la différence entre wire et reg en Verilog ?

Un wire est piloté par une affectation continue ou une sortie de module, tandis qu'un reg est affecté dans un bloc always ou initial. Un reg ne devient une bascule que s'il est mis à jour sur un front d'horloge ; dans always @(*), c'est de la logique combinatoire.

Quand utiliser les affectations bloquantes (=) ou non bloquantes (<=) ?

Utilisez les affectations non bloquantes dans les blocs always cadencés qui décrivent des bascules, et les affectations bloquantes dans les blocs always combinatoires. Mélanger les deux dans un même bloc ou utiliser des affectations bloquantes pour la logique séquentielle peut rendre la simulation dépendante de l'ordre des instructions et la faire différer du matériel.

Quelle est la différence entre Verilog et SystemVerilog ?

SystemVerilog est un sur-ensemble de Verilog qui ajoute des commodités de conception comme le type logic, always_ff et always_comb, ainsi que des fonctions de vérification comme les assertions, les stimuli aléatoires sous contraintes et les bancs de test orientés objet.

« Verilog » dans les explications

Questions mentionnant « Verilog » (21)

  1. Quelle est la grande différence entre une description en HDL comme Verilog et un programme logiciel en C ou autre ?
  2. Quel est l'objectif de l'utilisation de module en Verilog ?
  3. Quelle est la différence entre les types wire et reg en Verilog ?
  4. Quel circuit représente l'instruction assign Verilog ci-dessus ?
  5. Quel circuit la synthèse logique produit-elle à partir de la description Verilog ci-dessus ?
  6. Quel est le comportement de l'affectation non bloquante (<=) en Verilog ?
  7. Quelle est la règle générale d'usage des types d'affectation en Verilog ?
  8. Que signifie l'écriture « always @(*) » en Verilog ?
  9. Parmi les descriptions Verilog suivantes, laquelle ne devient pas un circuit et est ignorée par la synthèse logique (description destinée à la simulation) ?
  10. En Verilog, on additionne les signaux a et b de 8 bits et l'on affecte le résultat au signal s de 8 bits (assign s = a + b;). À quoi faut-il prendre garde ?
  11. Quelle est la combinaison des valeurs de la logique à quatre états utilisée en simulation Verilog ?
  12. Dans la description ci-dessus, lorsque sel vaut X (indéterminé), la simulation Verilog sélectionne b pour y. Pourquoi cette propriété pose-t-elle problème en vérification ?
  13. Quel est l'avantage d'utiliser always_ff ou always_comb de SystemVerilog à la place du always de Verilog ?
  14. Quelle est la différence entre les opérateurs d'égalité « == » et « === » en Verilog ?
  15. Quel est l'ordre correct du flot de conception d'un LSI numérique courant ?

Comparatifs incluant ce terme

Termes associés

SystemVerilog Synthèse logique Circuit combinatoire Bascule (flip-flop) RTL (niveau transfert de registres) Affectation non bloquante Langage de description matérielle Netlist Tape-out SPICE

Retour au glossaire