Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Les bases de la conception numérique

La leçon complète est à lire ici. Créez un compte gratuit pour la pratiquer dans un labo en direct.

Labo de machine virtuelle11 min de lecture10 commandes

Une puce se décrit avant d’être fabriquée

Une puce de téléphone contient des milliards d’interrupteurs. Personne ne les dessine un à un. Un ingénieur écrit le circuit sous forme de texte, dans un langage de description de matériel, et un programme exécute ce texte pour voir ce que ferait la puce, bien avant qu’on la fabrique.

À la fin de cette leçon

Remarque

Je peux simuler un petit circuit écrit en Verilog et lire la table et le chronogramme qu’il donne.

Mots-clés

  • Module : un circuit, avec des entrées et des sorties.
  • Banc de test : un module qui commande un autre module et affiche ce qui en sort.
  • Horloge : un signal qui monte et descend à un rythme régulier.
  • Chronogramme : la façon dont les signaux changent avec le temps.
  • Simulation : l’exécution de la description sur un ordinateur.

Pour commencer : ce que tu sais déjà

Remarque

Réponds dans ta tête. 1. Combien font 1 + 1 en binaire ? 2. Que donne une porte ET pour deux 1 ? 3. Qu’est-ce qu’un bit ? Tu as besoin de la première réponse dans un instant.

Avant de commencer

Remarque

Appuie sur Démarrer le lab dans la barre en haut de cette leçon. Ce lab est une machine Ubuntu entière, rien que pour toi : elle met un peu plus de temps à démarrer qu’un conteneur. Chaque bouton Exécuter tape sa commande dans le terminal de la machine, l’une après l’autre, dans la même session. Si l’un d’eux dit que la machine démarre encore, attends quelques secondes et appuie de nouveau. Pour les regarder, ou pour taper les tiens, appuie sur Ouvrir le terminal dans la barre.

Un circuit est un petit texte

Tes fichiers sont dans le dossier hdl. La première commande y entre, et la suivante affiche half_adder.v. Un demi-additionneur additionne deux bits. C’est un seul module avec deux entrées, a et b, et deux sorties. sum vaut a ^ b, c’est le OU exclusif, et carry vaut a & b, c’est le ET.

Commande
cd hdl

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
cat half_adder.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un banc de test l’exécute et affiche la table

L’outil s’appelle Icarus Verilog. iverilog compile le circuit et son banc de test en un seul programme et n’affiche rien quand tout va bien. vvp exécute ce programme. Le banc de test essaie les quatre entrées possibles et affiche une table de vérité : la ligne 1 1 donne carry 1 et sum 0, c’est 10 en binaire, donc 1 + 1 = 2.

Commande
iverilog -o /tmp/half half_adder.v half_adder_tb.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
vvp /tmp/half

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Vérifie

Astuce

Quelles entrées mettent carry à 1 ? Réponse : seulement a = 1 et b = 1, la ligne où la somme est trop grande pour un seul bit.

Une erreur fréquente

Attention

Beaucoup pensent qu’un fichier Verilog s’exécute ligne par ligne, comme un script Python. Ce n’est pas le cas. Un module décrit des pièces qui existent toutes au même moment, et une ligne assign est un fil qui suit toujours ses entrées. Lis-le comme un dessin, pas comme une liste d’étapes.

Une horloge et un chronogramme

counter.v est un compteur 4 bits : q augmente de un à chaque front montant de clk, et rst le remet à 0. Son banc de test fabrique une horloge et enregistre tous les signaux dans un fichier VCD, out/counter.vcd. La deuxième commande affiche q après 112 unités de temps : 10. La troisième transforme le fichier en texte, une ligne par signal et une colonne par tranche de 5 unités de temps. # vaut 1 et _ vaut 0. q reste à 0 tant que rst est haut, puis augmente de un à chaque montée de clk. dut.q est le même signal, à l’intérieur du compteur.

Commande
iverilog -o /tmp/counter counter.v counter_tb.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
vvp /tmp/counter

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
vcd2txt out/counter.vcd 5

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Vérifie

Astuce

Combien de fois clk est-il monté pendant que q passait de 0 à 10 ? Réponse : dix fois, une pour chaque pas du comptage.

Le même circuit en VHDL

Le VHDL est l’autre langage courant. GHDL l’exécute en trois étapes. ghdl -a analyse les fichiers et les vérifie. ghdl -e élabore le banc de test, ce qui construit un programme. ghdl -r l’exécute, et le banc de test rapporte les quatre lignes de la même table de vérité : a, b, carry et sum.

Commande
ghdl -a half_adder.vhd half_adder_tb.vhd

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
ghdl -e half_adder_tb

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
ghdl -r half_adder_tb

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Vérification finale

Astuce

Réponds sans revenir en arrière. 1. Que fait un banc de test ? 2. Que fait vvp ? 3. Quelles sont les trois étapes de GHDL ? 4. Qu’est-ce qui montre quand un signal change ? Réponses : il commande un module et affiche ce qui en sort ; il exécute la simulation compilée ; analyser, élaborer, exécuter ; un chronogramme. Ouvre maintenant le README.md de ton dossier personnel avec cat ~/README.md : tu écris l’additionneur complet et le compteur.

Pour les enseignants

Astuce

Cette leçon est un petit exemple de leçon donnée dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie de chaque élève. Elle se déroule dans un lab VM : chaque élève a sa propre machine Ubuntu avec les simulateurs installés, et un bouton Exécuter tape dans son terminal et montre ce qui s’est affiché. Points clés : 1. Un module est un circuit avec des entrées et des sorties. 2. Un banc de test le commande et affiche la table de vérité. 3. Une horloge fait changer un circuit pas à pas, et un chronogramme le montre. Erreur fréquente : lire le Verilog comme des étapes dans l’ordre. Matériel : le lab et un navigateur. Conseil : avant le vvp, demandez à la classe de prédire les quatre lignes. Le lab lui-même a une vérification qui note trois conceptions avec des bancs de test cachés. Copiez la leçon dans votre propre module pour la modifier, ou construisez-en une de zéro avec le menu Lab du générateur de leçons.

À propos de ce labo et de sa source: Lab Conception numérique : Verilog, VHDL et yosys dans une VM Ubuntu privée

Vous enseignez à une classe ? Proposez ces leçons à vos élèves avec correction et un labo pour chaque élève.