Pour avoir un environnement de simulation complet, vous pouvez utiliser les logiciels suivants :
La machine virtuelle que nous proposons a été testée avec VirtualBox 6.0. Vous pouvez la construire vous-mêmes en utilisant les indications suivantes :
debian-10.3.0-i386-netinst.iso
.L’installation de Debian dans la machine virtuelle s’effectue de la manière suivante :
cocinum-vm
.cocinum
.c0c1num
(avec un « zéro » et un « un » à la place du « o » et du « i »)./dev/sda
.À la fin de l’installation, la machine virtuelle redémarre.
Connectez-vous avec l’utilisateur cocinum
.
La machine virtuelle que nous distribuons est configurée pour :
cocinum
automatiquement au démarrage.Nous pouvons également retirer les logiciels qui ne sont pas indispensable pour nos activités : LibreOffice, Thunderbird, lecteurs audio et vidéo.
Si vous prévoyez d’installer les Guest additions de VirtualBox, ouvrez un terminal et exécutez cette commande :
sudo apt install gcc make perl linux-headers-686
L’installation des logiciels de simulation VHDL est détaillée ci-après.
Les instructions d’installation on été testées sous Ubuntu 19.10, Ubuntu 20.04 et Debian 10.3.
Sous Ubuntu 19.10, Debian 10.3, ou des versions ultérieures, exécutez la commande suivante dans un terminal :
sudo apt install ghdl-llvm
Pour les versions précédentes d’Ubuntu, à partir de la version 18.04, GHDL peut s’installer de la manière suivante :
wget http://fr.archive.ubuntu.com/ubuntu/pool/universe/g/ghdl/ghdl_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
wget http://fr.archive.ubuntu.com/ubuntu/pool/universe/g/ghdl/ghdl-llvm_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
sudo dpkg -i ghdl_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
# Cette commande se termine avec une erreur mais elle sera réparée par la commande suivante
sudo dpkg -i ghdl-llvm_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
sudo apt -f install
Ces commandes installent les outils de test et d’affichage des chronogrammes :
sudo apt install gtkwave python3 python3-dev python3-tk python3-pip make gcc
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
sudo pip3 install cocotb
Logisim-evolution est distribué sous la forme d’un fichier jar
à copier dans /opt
:
sudo apt install default-jre
sudo wget -P /opt https://github.com/reds-heig/logisim-evolution/releases/download/v3.3.0/logisim-evolution-3.3.0-all.jar
Installer git à l’aide du gestionnaire de paquets :
sudo apt install git
Cette commande installe l’éditeur Gedit. Vous pouvez en installer un autre selon vos préférences.
sudo apt install gedit gedit-plugins
Disponible seulement à partir d’Ubuntu 19.10.
sudo apt install gcc-riscv64-unknown-elf
Cette commande installe trois logiciels terminaux pour ports série, graphiques ou en ligne de commande :
sudo apt install gtkterm minicom picocom
Créer les dossiers de travail :
mkdir -p ghdl-demo/src
mkdir -p ghdl-demo/tests
Nous utiliserons les trois fichiers suivants :
ghdl-demo/src/InToOut.vhd
library ieee;
use ieee.std_logic_1164.all;
entity InToOut is
port(
x : in std_logic;
y : out std_logic
);
end InToOut;
architecture Behavioral of InToOut is
begin
y <= x;
end Behavioral;
ghdl-demo/tests/test_intoout.py
import cocotb
from cocotb.triggers import Timer
import tkinter as tk
from datetime import datetime, timedelta
led_color_on = "lime"
led_color_off = "dark slate gray"
refresh_time = timedelta(milliseconds=40)
class Gui:
def __init__(self, dut):
self.dut = dut
self.root = tk.Tk()
self.root.protocol("WM_DELETE_WINDOW", self.on_close)
btn = tk.Button(self.root, text="Click here")
btn.pack(side=tk.TOP)
btn.bind("<ButtonPress>", self.on_press)
btn.bind("<ButtonRelease>", self.on_release)
self.canvas = tk.Canvas(self.root, width=100, height=100, bg="black", relief="flat")
self.canvas.pack(side=tk.BOTTOM)
self.led = self.canvas.create_oval(10, 10, 90, 90, fill=led_color_off)
self.state = 0
self.closed = False
self.last_update = datetime.now()
def on_close(self):
self.root.quit()
self.closed = True
def on_press(self, evt):
self.state = 1
def on_release(self, evt):
self.state = 0
def update(self):
t = datetime.now()
delta = t - self.last_update
if delta >= refresh_time:
self.last_update = t
self.dut.x = self.state
self.canvas.itemconfig(self.led, fill=led_color_on if self.dut.y.value.binstr == '1' else led_color_off)
self.root.update()
@cocotb.test()
def run(dut):
gui = Gui(dut)
dut.x = 0
while not gui.closed:
yield Timer(250, "us")
gui.update()
ghdl-demo/tests/Makefile
SRCDIR = $(PWD)/../src
VHDL_SOURCES = $(SRCDIR)/InToOut.vhd
TOPLEVEL = intoout
MODULE = test_intoout
SIM = ghdl
SIM_ARGS = --wave=InToOut.ghw
export COCOTB_REDUCED_LOG_FMT = 1
include $(shell cocotb-config --makefiles)/Makefile.inc
include $(shell cocotb-config --makefiles)/Makefile.sim
Dans un terminal, déplacez-vous vers le dossier ghdl-demo/tests
à l’aide de la commande cd
, puis exécutez la commande make
.
Dans la machine virtuelle que nous fournissons, les fichiers sont déjà présents :
cd ghdl-demo/tests
make
Une fenêtre tk
doit s’afficher. Chaque pression sur le bouton met à '1'
l’entrée x
de l’entité InToOut
.
Sous le bouton, un disque coloré se met au vert lorsque la sortie y
vaut '1'
.
Après avoir fermé la fenêtre tk
, affichez les chronogrammes :
gtkwave InToOut.ghw
Dans les panneaux de gauche, sélectionnez les signaux x
et y
.
Réglez le niveau de zoom pour observer leurs variations sur toute la durée
de simulation.
En 2020, l’unité d’enseignement Conception de Circuits Numériques s’est entièrement déroulée à distance. Dans ce contexte, les étudiants ont pu utiliser des outils de développement VHDL libres que nous avons fournis pré-installés dans une machine virtuelle.
Cette page donne les instructions d’installation de ces outils selon deux modalités possibles :