Flot de
conception VLSI/FPGA
ModelSim SE
Tutorial
ENSSAT - Université de Rennes 1
Ce tutorial a pour objectif l'apprentissage de base du
logiciel ModelSim SE dédiés à la
conception
d'ASIC et de FPGA.
Le logiciel ModelSim SE permet la simulation temporelle au
niveau RT
(transfert de registre) ou au niveau porte, à partir des
langages VHDL
ou Verilog.
Une aide en ligne des outils est disponible dans le help.
L'invocation de l'outil de simulation se fait par
le menu "démarrer/programmes".
Il faut ensuite
cliquer
sur "Create a Project" dans la fenêtre Welcome.
Ensuite choisissez un répertoire de travail sur votre disque, un nom de projet et laisser le nom
de bibliothèque work.
Avant d'effectuer une simulation, il est nécessaire de
créer
plusieurs fichiers de test (testbench).
Pour simuler un circuit, il
faut 3
fichiers .vhd :
Nous utiliserons un exemple de fichier code : compteur.vhd Ouvrez un nouveau fichier (menu File /new/source/VHDL) et copiez le code du compteur. Ajoutez ce fichier à votre projet.
library IEEE;
Le fichier de simulation (ou testbench) est un fichier .vhd, il doit toujours être
structuré
de la même façon.
Voici un exemple de fichier de simulation : sim_compteur.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library work;
use work.all;
ENTITY bench IS
END bench;
ARCHITECTURE test OF bench IS
COMPONENT compteur
generic (size : integer := 16 );
port ( reset : in Std_Logic;
clk : in Std_Logic;
up : in Std_Logic;
load : in Std_Logic;
value : in integer range 0 to size-1;
output : out integer range 0 to size-1) ;
end COMPONENT;
constant Tclk : time := 10 ns;
signal clk_cpt : std_logic:= '0';
signal reset_cpt: std_logic:= '1';
signal up_cpt : std_logic:= '1';
signal load_cpt: std_logic:= '0';
signal val_cpt : integer range 0 to 15 := 9;
signal out_cpt : integer range 0 to 15;
begin
cpt : compteur generic map(16) port map (reset_cpt, clk_cpt, up_cpt, load_cpt, val_cpt,out_cpt);
GENERATE_CLOCK : process
begin
clk_cpt<= '0';
WAIT FOR Tclk/2;
clk_cpt<= '1';
WAIT FOR Tclk/2;
end process GENERATE_CLOCK;
CPT_SIM : process
begin
reset_cpt<= '1';
up_cpt<= '1';
load_cpt<= '0';
WAIT FOR 3*Tclk;
reset_cpt<= '0';
WAIT FOR 10*Tclk;
load_cpt<= '1';
WAIT FOR 10*Tclk;
load_cpt<= '0';
WAIT FOR 30*Tclk;
up_cpt<= '0';
WAIT FOR 40*Tclk;
wait;
end process CPT_SIM;
end test;
Le fichier de configuration est aussi un .vhd, il est obligatoire mais peut
être
inclus dans le fichier précédent.
Voici un exemple de fichier de configuration : cfg_compteur.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library work;
use work.ALL;
configuration compteur_cfg of bench is
for test
for cpt:compteur
use entity work.compteur(comportementale);
end for;
end for;
end compteur_cfg;
Remarque: Les fichiers de configuration et de testbench peuvent être utilisés aussi bien au niveau RTL qu'au niveau porte. Il suffira de modifier le nom de l'architecture dans les fichiers sim_compteur.vhd et cfg_compteur.vhd. Si la netlist après synthèse a pour nom d'architecture SYN_comportementale au lieu de comportementale
configuration compteur_cfg_gate of bench_compteur is
for comportementale
for cpt:compteur
use entity work.compteur(SYN_comportementale);
end for;
end for;
end compteur_cfg_gate;
Avant de tester le circuit, il faut l'analyser. Pour cela il nous faut ajouter dans le projet les fichiers VHDL à compiler.
Il est bien sur possible de compiler les fichiers un par un en cas d'erreur. Un éditeur de texte s'ouvre lorsque l'on double-clique sur les fichiers .vhd.
Choisissez l'onglet Library, puis, en
double-cliquant sur la
configuration compteur_cfg, la simulation se charge.
Ceci est équivalent à : Design->Load
Design->compteur_cfg.
Par la suite il est conseillé d'utiliser cette procédure
car elle
permet de gérer les options de simulation (timing, ...).
Avant de continuer la simulation, une petite explication de cet outil
s'impose.
L'écran est composé de 7 parties:
Nous allons maintenant continuer la simulation.
Maintenant que vous venez de faire la simulation
au niveau RTL,
il faut faire la simulation au niveau porte avec la netlist compteur_gate.vhd.
Pour cela supprimez le fichier compteur.vhd du projet, puis
ajoutez le fichier compteur_gate.vhd dans le projet en cours,
puis modifiez le fichier cfg_compteur.vhd (comportementale en
SYN_comportementale) ou créez un nouveau fichier de
configuration cfg_compteur_gate.vhd.
Recompilez l'ensemble. La configuration instancie maintenant la netlist
au
niveau porte et non plus la spécification RTL d'origine contenue
dans
compteur.vhd.
Il est en outre nécessaire de générer un fichier
au format
SDF (Standard Delay Format) compteur.sdf sous dc_shell ou design_analyzer
dans la "Command Window" en tapant la commande : write_sdf
compteur.sdf. Ce fichier contient les délais des portes et
les
estimations des délais d'interconnexions.
A partir de ce moment, la simulation prend en compte les portes
logiques qui
constituent la netlist du compteur et les
informations de délais fournies par le fichier SDF. Relancez la
simulation, vous voyez maintenant apparaître des temps de
propagation
entre l'horloge et les sorties du compteur ainsi que des messages vous
indiquant les instants où des glitchs apparaîssent.
Il ne vous reste plus qu'à faire vos propres composants dans le
cadre de
votre projet. Bon courage!