GHDL sur Windows

Posté le 28 décembre 2021 dans Hardware

Lorsque l'on veut simuler du VHDL sans logiciel commercial, il n'y a qu'une solution : GHDL.
Comme pour beaucoup de logiciels libres, GHDL est très facile à installer et utiliser sous Linux. Avec Windows, c'est un peu plus compliqué. Il existe des versions Windows natives, mais celles-ci sont obsolètes. Le projet ne génère plus de telles versions.

La solution passe par l'utilisation d'un sous-système Linux.

Je n'ai pas essayé WSL, le système Linux intégré à Windows. Je ne sais pas si cela fonctionnerait, mais j'ai déjà eu des déboires avec d'autres projets sur WSL.
Le projet GHDL supportant officiellement des versions fonctionnant sur MSYS2, c'est tout naturellement vers cette solution que je me suis tourné.

Installation de MSYS2 :

Pour installer GHDL, il faut donc commencer par installer MSYS2.
Pour cela, il faut aller sur le site WEB du projet, télécharger et installer MSYS2.
On n'oubliera pas de suivre la procédure complète de mise à jour du système.

Installation de GHDL :

MSYS2 étant installé, passons à l'installation de GHDL.

Première chose à faire, ouvrir une console MSYS2 MSYS à partir du menu Démarrer de Windows.
MSYS2 MSYS

GHDL peut s'installer de 2 façons différentes.

  • En utilisant le package de MSYS2 :

    Pour installer la version 64-bit de GHDL la commande est la suivante :

    pacman -S mingw64/mingw-w64-x86_64-ghdl-llvm

    Voilà, c'est fait.

    La mise à jour se fera à l'aide de la commande pacman -Syu , Commande qui met à jour tout le système MSYS2.
    Le package GHDL de MSYS2 est mis à jour régulièrement, mais pas très souvent.
  • En utilisant un "nightly package" généré par le projet GHDL :

    Personnellement, je préfère cette méthode qui a l'avantage de coller au développement de GHDL, et d'avoir un processus de mise à jour beaucoup plus rapide et léger (on ne met pas à jour le système MSYS2 complet).

    Pour cela, il faut entrer les commandes suivantes (de préférence dans un répertoire dédié) :

    wget -O mingw-w64-x86_64-ghdl-llvm-ci-1-any.pkg.tar.zst https://github.com/ghdl/ghdl/releases/download/nightly/mingw-w64-x86_64-ghdl-llvm-ci-1-any.pkg.tar.zst
    pacman -U mingw-w64-x86_64-ghdl-llvm-ci-1-any.pkg.tar.zst

    Ces mêmes commandes permettent de mettre le package à jour.
    On mettra ces deux lignes dans un fichier bash pour pouvoir faire des mise à jour plus facilement.

Installation de GtkWave :

GHDL permet d'enregistrer l'état des signaux d'une simulation dans un fichier. Il est possible de choisir le format VCD, très utilisé, faisant partie du standard verilog. Avec ce format, on aura le choix de l'outil de visualisation des formes d'ondes, intégré à un environnement de développement ou non.

Le langage VHDL étant plus riche que le verilog, le format de fichier VCD n'est pas le plus adapté à l'enregistrement de données d'une simulation VHDL. On préfèrera l'utilisation du format spécifique à GHDL : GHW [1] .
Inconvénient, on n'aura pas le choix de l'outil de visualisation. Seul GtkWave permet de lire ce format.

Pour installer GtkWave, cette fois, nous avons 3 possibilités :

  • En utilisant le package de MSYS2 :

    Pour installer la version 64-bit de GtkWave la commande est la suivante :

    pacman -S mingw64/mingw-w64-x86_64-gtkwave

  • En utilisant un "nightly package" généré par le projet GtkWave :

    Il est possible de choisir entre une version Gtk2 et une version Gtk3. Il est recommandé d'utiliser la version Gtk3, la version Gtk2 devant disparaître à plus ou moins long terme [2] .

    Les commandes sont les suivantes :

    wget -O mingw-w64-x86_64-gtkwave-gtk3-ci-1-any.pkg.tar.zst https://github.com/gtkwave/gtkwave/releases/download/nightly/mingw-w64-x86_64-gtkwave-gtk3-ci-1-any.pkg.tar.zst
    pacman -U mingw-w64-x86_64-gtkwave-gtk3-ci-1-any.pkg.tar.zst
  • En utilisant un package natif Windows (solution préférée) :

    Avec cette méthode, on récupère un zip sur le github du projet GtkWave et on le décompresse dans un dossier.
    Et c'est tout.
    Les zip se trouvent ici .
    Les fichiers dont le nom commence par gtkwave_ sont ceux qui nous intéressent. Dans la capture d'écran ci-dessous, nous pouvons voir que nous avons le choix entre une version Gtk2 64-bit et deux versions Gtk3 (32-bit et 64-bit). La liste proposée peut-être différente.
MSYS2 MSYS

Le format des fichiers GHW n'est pas figé. Il arrive (rarement) qu'une évolution de GHDL impose une modification de la structure de données de ce format de fichier. Il faudra alors mettre GtkWave à jour (l'import des fichiers GHW dans GtkWave est géré par les développeurs de GHDL).

Utilisation de GHDL :

Pour utiliser GHDL, il y a 2 méthodes.

  • La première consiste à utiliser la console MSYS2 MinGW 64-bit

    MSYS2 MSYS

    Dans cette console, toutes les commandes GHDL fonctionnent directement. Il est possible d'accéder aux fichiers Windows directement. Par exemple, si votre projet se trouve dans D:\mon_projet , il suffit de faire cd /d/mon_projet pour se positionner dans le bon dossier.

  • La deuxième méthode consiste à utiliser une ligne de commande Windows classique et de modifier le PATH en conséquence avec la commande suivante :

    PATH=C:\msys64\mingw64\bin;%PATH%

    Il est également possible de lancer des commandes GHDL directement à partir d'autres outils, comme un environnement de développement intégré, à partir du moment où le PATH est correctement modifié.

Eclipse PATH

Modification du PATH pour une configuration de lancement dans Eclipse.

Utilisation de GtkWave :

Si vous avez opté pour une version intégrée à MSYS2, Il est possible de créer un raccourci sur le bureau :

GtkWave Shortcut

Configuration d'un raccourci pour GtkWave intégré à MSYS2.

Si vous avez opté pour une version "native Windows", il vous suffit de créer un raccourci sur gtkwave.exe.
Dans l'exemple suivant, le package GtkWave a été décompressé dans le dossier C:\GtkWave_Gtk3" .
GtkWave Shortcut

Configuration d'un raccourci pour GtkWave "natif Windows".

Pour visualiser un fichier GHW, il suffit de faire un Drag & Drop du fichier sur l'icône du raccourci.






[1]Pour générer des fichiers au format GHW, l'option --wave=my_waveform.ghw doit être utilisée lors de la phase de simulation.
[2]Au moment de l'écriture de cet article, la version Gtk3 a des problèmes de performance d'affichage.