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

Le même circuit en VHDL

Après cette leçon: Je peux écrire le même circuit en VHDL et dire en quoi les deux langages diffèrent.

Leçon de 60 min9 commandesLab Conception numérique : Verilog, VHDL et yosys dans une VM Ubuntu privée

VHDL décrit les mêmes circuits que Verilog

VHDL (VHSIC Hardware Description Language) est le second grand langage de description de matériel, à côté de Verilog. Il décrit les mêmes circuits avec plus de mots et plus de règles, et un ingénieur doit savoir lire les deux.

Vous allez écrire en VHDL l’alarme de la boutique, puis la simuler avec GHDL et comparer les deux langages ligne à ligne.

À la fin de cette leçon

Remarque

Je peux écrire le même circuit en VHDL et dire en quoi les deux langages diffèrent.

Mots-clés

MotCe que ça veut direExemple
Entitéla boîte du circuit : son nom, ses entrées et ses sorties
Architecturel’intérieur de la boîte : ce que le circuit calcule
std_logicle type VHDL d’un fil qui porte un bit
Analysela lecture des fichiers par GHDL, qui vérifie la grammaireghdl -a
Élaborationl’étape où GHDL assemble le banc de test en un programmeghdl -e

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une entité est la boîte, l’architecture est l’intérieur

En VHDL, un circuit s’écrit en deux parties. L’entité donne le nom, les entrées et les sorties. L’architecture dit ce qui se passe à l’intérieur.

En Verilog, un seul bloc module fait les deux. En VHDL, chaque fil a un type : std_logic pour un bit. Un fil sans type ou avec un mauvais type est refusé.

L’alarme en VHDL

Code: bash
library ieee;
use ieee.std_logic_1164.all;

entity alarme is
  port (porte, fenetre, armee : in std_logic;
        sirene : out std_logic);
end entity;

architecture rtl of alarme is
begin
  sirene <= armee and (porte or fenetre);
end architecture;

La même alarme en Verilog

Code: c
module alarme(input porte, input fenetre, input armee,
              output sirene);
  assign sirene = armee & (porte | fenetre);
endmodule

GHDL travaille en trois étapes

Verilog se compile en un seul geste. GHDL en demande trois. ghdl -a analyse les fichiers et vérifie la grammaire. ghdl -e élabore le banc de test : il assemble les pièces en un programme. ghdl -r lance ce programme.

Ce banc de test fait varier les entrées avec des pauses de 10 ns. Le dernier Run lit les changements écrits dans le fichier VCD.

Aller dans le dossier de travail

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.

Écrire alarme.vhd

Commande
printf "library ieee;\nuse ieee.std_logic_1164.all;\n\nentity alarme is\n  port (porte, fenetre, armee : in std_logic; sirene : out std_logic);\nend entity;\n\narchitecture rtl of alarme is\nbegin\n  sirene <= armee and (porte or fenetre);\nend architecture;\n" > alarme.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.

Écrire son banc de test

Commande
printf "library ieee;\nuse ieee.std_logic_1164.all;\n\nentity alarme_tb is\nend entity;\n\narchitecture sim of alarme_tb is\n  signal porte, fenetre, armee, sirene : std_logic := '0';\nbegin\n  dut: entity work.alarme port map (porte => porte, fenetre => fenetre, armee => armee, sirene => sirene);\n  process\n  begin\n    armee <= '1';\n    wait for 10 ns;\n    porte <= '1';\n    wait for 10 ns;\n    porte <= '0'; fenetre <= '1';\n    wait for 10 ns;\n    armee <= '0';\n    wait for 10 ns;\n    wait;\n  end process;\nend architecture;\n" > alarme_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.

Étape 1 : analyser les deux fichiers

Commande
ghdl -a alarme.vhd alarme_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.

Étape 2 : élaborer le banc de test

Commande
ghdl -e alarme_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.

Étape 3 : lancer et écrire le fichier VCD

Commande
ghdl -r alarme_tb --vcd=out/alarme.vcd

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.

Lire le chronogramme, une colonne par 10 ns

Commande
vcd2txt out/alarme.vcd 10ns

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.

Exemple travaillé : Verilog et VHDL côte à côte

IdéeVerilogVHDL
Un circuitUn bloc moduleUne entité et une architecture
Le ET, le OU& et |and et or
Donner sa valeur à un filassign s = ...s <= ...
Le type d’un filwire, sans plusstd_logic, obligatoire
Les étapes de l’outilCompiler, puis lancerAnalyser, élaborer, lancer

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Erreur fréquente

Attention

Beaucoup de gens pensent que VHDL est du Verilog avec d’autres mots. Les deux décrivent des circuits, mais VHDL est plus strict : chaque fil a un type, et chaque nom doit être déclaré. Une faute de frappe sur un nom est donc attrapée dès l’analyse.

Écrire une architecture avec un nom inconnu

Commande
printf "library ieee;\nuse ieee.std_logic_1164.all;\nentity oups2 is\n  port (a : in std_logic; s : out std_logic);\nend entity;\narchitecture rtl of oups2 is\nbegin\n  s <= a and b;\nend architecture;\n" > oups2.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.

L’analyser et lire le message

Commande
ghdl -a oups2.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.

Pour aller plus loin

Dans le labo, full_adder.vhd donne déjà son entité, et il reste à écrire l’architecture. Son banc de test, full_adder_tb.vhd, imprime les huit lignes.

Écrivez d’abord l’architecture en deux lignes sur papier, avec xor, and et or, puis simulez avec les trois étapes.

À 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 ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.