Plateforme CALF: Utilisation
Installation
Téléchargement
Pour commencer, il est nécessaire de télécharger le projet. Celui-ci utilise git comme gestionnaire de versions et est hébergé sur Gitlab. Pour le télécharger, utiliser les commandes suivantes:
# Avec SSH configuré sur Gitlab
git clone git@gitlab.com:escou64-emmk/calf.git
# Ou sans SSH: git clone https://gitlab.com/escou64-emmk/calf.git
# Déplacement dans le répertoire
cd calf
# Utilisation de la branche riscv
git checkout riscv
Configuration de l’environnement
Pour la simulation et l’implémentation de la plateforme, plusieurs outils sont nécessaires et doivent être installés:
- GHDL pour la simulation VHDL.
- VUnit pour les tests unitaires VHDL.
- sbt pour générer du SystemVerilog depuis des codes Chisel.
- Verilator pour simuler la simulation Chisel / SystemVerilog.
- GtkWave pour visualiser des chronogrammes.
- Vivado pour l’implémentation sur FPGA.
Pour cela, sur les machines de l’école, lancez la commande suivante à chaque ouverture de terminal pour avoir accès aux outils:
source /net/npers/mescoutelou/share/env/HWDES/setup.sh
Simulation (Module)
La simulation d’un module en Chisel s’effectue ici en quatre phases.
Nous prendrons ici les exemples des modules Empty et Acc décrits dans le répertoire src/main/scala/example.
Tout d’abord, il est nécessaire de générer les fichiers SystemVerilog de votre module. Pour cela, utilisez la commande:
sbt "runMain learn.example.Empty -o=sim/gen"
Le répertoire sim/gen va alors être créé avec à l’intérieur le fichier SystemVerilog Empty.sv.
Ensuite déplacez-vous dans le répertoire sim/ (ou ouvrez un nouveau terminal):
cd sim/
À l’intérieur vous trouverez deux fichiers d’exemple:
sv_tb_empty.pyest un exemple de testbench écrit en Python utilisant l’outil Cocotb.sv_empty.pyest un exemple de fichier en Python pour lancer l’exécution du testbench.
Depuis le répertoire sim/, lancez alors la commande suivante pour réaliser la simulation:
python sv_empty.py
L’ensemble est configuré pour utiliser le logiciel Verilator pour la simulation, puis pour générer un chronogramme au format .vcd dans le répertoire vcd (le fichier est initialement dans build, puis il est déplacé et renommé).
Vous pouvez ouvrir le chronogramme en utilisant l’outil GtkWave:
gtkwave vcd/sv_tb_empty.vcd &
L’ensemble de la démarche est la même pour le module Acc.
Il est seulement nécessaire d’adapter les noms de fichiers.
Vous remarquerez également dans sv_tb_acc.py une autre manière de générer l’horloge et le signal de reset dans le fichier testbench.
Simulation (Plateforme)
La simulation de la version Chisel de la plateforme s’effectue en quatre phases. Comme précédemment, il est nécessaire de générer les fichiers SystemVerilog avant de concevoir un modèle simulable à l’aide de l’outil Verilator. Concrètrment, ce dernier va transformer le SystemVerilog en modèle C++ pouvant être compilé et exécuté directement sur votre machine. Pour cela utilisez la commande:
make chisel-sim
Ensuite, il est nécessaire de compiler le logiciel que vous souhaitez exécuter.
Celui-ci se trouve dans le répertoire sw/.
Pour lancer la compilation du programme sim (répertoire sw/src/sim) depuis le répertoire racine, lancez la commande:
make -C sw sim
Il est alors nécessaire d’exécuter le programme sur le simulateur généré pour voir le fonctionnement en simulation. Pour cela, lancez la commande:
./obj/VSim --ram sw/hex/sim.ram.mem --ntrigger 300 --vcd waveform.vcd
Ici:
sw/hex/sim.ram.memest le fichier de description du contenu de la mémoire, au format hexadécimal, généré après la compilation du logiciel.300est le nombre maximal de cycles de simulation.waveform.vcdest le chronogramme de sortie généré.
La valeur de chacun de ces paramètres peut bien évidemment être modifiée selon les besoins. Finalement, pour visualiser le chronogramme, lancez la commande:
gtkwave waveform.vcd sim/sim.gtkw &
Programmation FPGA
L’implémentation sur FPGA s’effectue en quatre phases. Ici, nous ciblerons une carte Digilent NEXYS A7 100T.
Tout d’abord, il est nécessaire de compiler le programme à exécuter.
Celui-ci se trouve dans le répertoire sw/.
Pour lancer la compilation du programme tt (répertoire sw/src/tt) depuis le répertoire racine, lancez la commande:
make -C sw tt
Ensuite, pour lancer la génération du code SystemVerilog depuis le code Chisel, lancez la commande:
make chisel-fpga
Déplacez-vous dans le répertoire fpga/ puis lancez la génération du bitstream:
cd fpga/
vivado -mode tcl -source xpr-nexys-a7-1OOt.tcl
Pour finir, il est nécessaire de programmer la carte.
Cela peut-être fait en ouvrant le projet dans xpr/nexys avec Vivado.
Vous pourrez alors lancer la programmation de la carte Digilent NEXYS A7 100T.
