0% ont trouvé ce document utile (0 vote)
23 vues10 pages

Tutorial V Sim

Le document présente une simulation VHDL d'un module accumulateur à l'aide de l'outil ModelSim, incluant la déclaration de l'entité, l'architecture comportementale, et la création d'un testbench. Il décrit également les étapes pour créer un projet, compiler les fichiers VHDL, et exécuter la simulation, tout en fournissant des exemples de code. Enfin, il aborde une description structurelle de l'accumulateur en utilisant un additionneur et un registre.

Transféré par

wowlyom15
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • ModelSim,
  • saisie de fichiers,
  • architecture structurelle,
  • signaux,
  • simulation,
  • accumulateur,
  • valeurs de test,
  • générique,
  • entité,
  • entrées-sorties
0% ont trouvé ce document utile (0 vote)
23 vues10 pages

Tutorial V Sim

Le document présente une simulation VHDL d'un module accumulateur à l'aide de l'outil ModelSim, incluant la déclaration de l'entité, l'architecture comportementale, et la création d'un testbench. Il décrit également les étapes pour créer un projet, compiler les fichiers VHDL, et exécuter la simulation, tout en fournissant des exemples de code. Enfin, il aborde une description structurelle de l'accumulateur en utilisant un additionneur et un registre.

Transféré par

wowlyom15
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • ModelSim,
  • saisie de fichiers,
  • architecture structurelle,
  • signaux,
  • simulation,
  • accumulateur,
  • valeurs de test,
  • générique,
  • entité,
  • entrées-sorties

ELEC 4 - VHDL

TD n°2

Simulation VHDL avec l’outil « ModelSim »


Objectif
Bien que l’interface de l’outil de simulation « ModelSim » soit très conviviale et facile à utiliser au travers de
ses menus déroulant, voici quelques renseignements complémentaires qui vous aideront à tirer toute la
puissance de cet outil au travers d’un exemple de modélisation de composant simple.

1. Présentation du circuit : « Le module accumulateur »


La Figure 1 donne un exemple de déclaration du registre accumulateur, décrit en VHDL.
Dans le fichier « accumulateur.vhd »
entity accumulateur is B (0..N-1)
generic (N : natural := 1); rst
port( rst : in bit;
ld : in bit; accumulateur
B : in natural range 0 to N-1; ld
A : out natural range 0 to N-1);
end accumulateur;
A (0..N-1)

Figure 1: Déclaration de l'entité


La déclaration de l’entité doit être complétée par la définition d’une architecture au
minimum. Une première possibilité consiste à décrire le composant par une vue externe dite
comportementale. Un algorithme composé d’une suite séquentielle d’instructions traduit
l’évolution de la sortie A en réaction à une modification des entrées. S’agissant d’un
composant de nature séquentielle, l’évolution ne peut s’effectuer que sur un front d’horloge
ou sur un signal reset asynchrone.
Dans le fichier « accumulateur.vhd »
architecture behv of accumulateur is
begin
p1: process(rst,ld)
variable result : natural range 0 to N-1;
begin
if (rst = '1') then
result := 0;
elsif (ld’event and ld = '1') then
result:= result + B;
end if;
A <= result;
end process;
end behv;

Figure 2: Déclaration d'une architecture de type comportementale


Afin de pouvoir tester le composant accumulateur, un entité de test et une architecture
couramment appelée « testbench » (cf Figure 3) est nécessaire pour modéliser
l’environnement. Cette entité de test suit le même modèle de description que le composant à
tester. Le corps de l’architecture défini la valeur des différents signaux de test. Même si
l’entité de test ne possède pas de signaux d’entrée-sortie, la déclaration de l’entité reste
obligatoire.

-1-
ELEC 4 - VHDL
TD n°2
Dans le fichier « test_acc.vhd »
entity test is
end test;

architecture bench of test is


component accumulateur
generic (N : natural := 1);
port( rst : in bit;
ld : in bit;
B : in natural range 0 to N-1;
A : out natural range 0 to N-1);
end component;

-- constant MAX : natural:= 16;


signal rst, clk : bit;
signal A, B : natural range 0 to MAX;
begin
UUT:accumulateur generic map (MAX)
port map (rst, clk, B, A);
rst <= '1', '0' after 220 ns;
process
begin
wait for 40 ns;
clk <= not clk;
end process;
B <= 0, 1 after 200 ns,3 after 550 ns, 0 after 720 ns;
end bench;

Figure 3:fichier des stimuli pour le test de l'accumulateur

2. Simulation de la description algorithmique


A. Démarrage de l’outil de simulation
Le simulateur utilisé s’appelle ModelSim. Pour accéder à l’icône de démarrage
« ModelSim », aller dans le répertoire « CAO » situé sur le bureau.

B. Création du projet et saisie des fichiers VHDL

Cliquez sur projet dans le menu File → New.

Une fenêtre de dialogue sur le modèle de celle apparaissant en partie gauche de la Figure 4
vous permet de saisir le nom du projet (accumulateur ici) et de modifier éventuellement
l’emplacement du répertoire où sera situé le projet, si l’emplacement par défaut ne vous
convient pas.

Remarque : si le répertoire cible du projet n’existe pas sur le disque référencé, l’outil vous
propose de le créer (partie gauche de la Figure 4). Validez sa décision en cliquant sur le
bouton « OK » comme indiqué.

-2-
ELEC 4 - VHDL
TD n°2

1 Nom du projet
2

Répertoire de travail

Librairie de Travail
(par défaut: work)

Cliquez sur « OK » pour confirmer


Uniquement si le
répertoire n’existe pas
Cliquez sur « OK »

Figure 4 : Création d'un projet.


Une fois le projet créé, l’outil vous propose d’insérer ou d’éditer un nouveau fichier source
(cf Figure 5). Le fichier source n’existant pas, cliquez sur « create new file ».

3 4

Ne pas oublier
! l’extension « .vhd »

Figure 5: Création ou ajout d'un nouveau fichier source.


Une fenêtre de saisie du nom de fichier vous permet de préciser le nom du fichier.
N’oubliez pas l’extension .vhd. Validez en cliquant sur le bouton « ok » et fermez la fenêtre
en cliquant sur le bouton « close ».

Figure 6: Etat du workspace à la fin de l'opération de création du fichier

-3-
ELEC 4 - VHDL
TD n°2
Vous observez alors l’apparition du fichier dans l’espace de travail (workspace). Le point
d’interrogation signifie que le fichier n’est pas compilé. Double cliquez sur le nom pour
permettre l’affichage d’une fenêtre de saisie (cf Figure 7) dans laquelle vous taperez le code
des Figure 1 et Figure 2, à la suite, et dans cet ordre.

Save

Indique que le fichier n’est pas sauvegardé

Figure 7: Fenêtre de saisie de la description de l'accumulateur


Une fois la saisie effectuée, sauvegardez la description à l’aide du bouton « save ». Cliquez
ensuite à nouveau sur VHDL dans le Menu : File → New → Source. Effectuez la saisie du
code apparaissant en Figure 3. Sauvegardez le fichier sous la référence test_acc.vhd.

A l’aide du bouton droit de la souris dans la cadre workspace, cliquez sur add to project,
puis sur existing file et demandez l’insertion du fichier dans le projet courant. Vous devez
alors observer l’apparition de la référence test_acc.vhd dans le workspace, au coté de
accumulateur.vhd, accompagné d’un point d’interrogation comme indicateur d’état
(status) de fichier.

C. Compilation du fichier source VHDL


- Sélectionner accumulateur.vhd
1 - Cliquer bouton droit de la souris 2 Résultat de la compilation, ici pas d’erreur !
- Sélectionner « Compile selected »

- Double Cliquer sur la ligne rouge ModelSim surligne


4 la ligne d’erreur.

- Sélectionner test_acc.vhd
- Cliquer bouton droit de la souris 4
6
- Sélectionner « Compile selected » il faut enlever le commentaire,
MAX n’est pas déclaré!
ERREUR !!! - Double Cliquer sur la ligne rouge
5
inscrit « ERROR … »

Figure 8 : Compilation des fichiers source VHDL.

-4-
ELEC 4 - VHDL
TD n°2
D. Simulation

D.1 Ouverture du simulateur


Cliquez sur l’onglet library dans le cadre workspace. Ouvrez le dossier test puis cliquez
avec le bouton droit de la souris sur bench et sélectionnez simulate. De nouveau onglets
apparaissent dans le workspace. Vous pouvez (et il est même fortement conseillé de) vérifier
que l’entité et l’architecture chargées pour la simulation correspondent bien à celles attendues.

1 Chargement du test bench 2 Résultat du Chargement

Cliquez bouton droit puis


sélectionnez « simulate »

Figure 9: Démarche alternative pour le chargement du fichier de simulation


De manière équivalente, vous pourrez obtenir le même résultat en cliquant sur start
simulation dans le menu Simulate. Dans la fenêtre de simulation qui fera alors son apparition,
vous cliquerez sur work, test et bench avant de valider grâce au bouton ok.
D.2 Sélection des signaux
Cliquez sur wave dans le Menu View. La fenêtre d’affichage des chronogrammes apparaît.
Faites ensuite une sélection des signaux que vous souhaitez visualiser dans cette fenêtre,
comme l’indique la Figure 10.

Sélectionner
les signaux et
les faire glisser
avec la souris

Figure 10: Ajout de signaux dans la fenêtre de simulation.


Les signaux a et b sont des entiers naturels. Il est possible d’afficher les signaux dans
d’autres formats (modification du radix). En procédant comme l’indique la Figure 11, vous
pouvez obtenir une représentation en hexadécimal.

-5-
ELEC 4 - VHDL
TD n°2
cliquez sur le signal avec le bouton droit de la souris

Figure 11:Changement de format du signal A (en hexadécimal)

D.3 Sélection des variables


Cliquez sur process dans le menu view. Cliquez ensuite sur locals dans ce même menu.
Deux nouvelles fenêtres s’affichent au coté des précédentes.
Nous avons une variable result située dans la structure « accumulateur », et le process p1.
Pour visualiser l’évolution temporelle de cette variable, vous devez sélectionner le process
« p1 » dans le workspace, puis le process « p1 » dans la fenêtre active process. Comme le
montre la Figure 12 : Sélection d'une variable., la variable « result » apparaît dans la fenêtre
des variables (local). Il suffit ensuite de sélectionner la variable et de la faire glisser dans la
fenêtre des chronogrammes comme les signaux.

Figure 12 : Sélection d'une variable.


Comme pour les signaux, le format d’affichage d’une variable peut être modifié.
D.4 La simulation
Il existe plusieurs manières de faire avancer la simulation :
• En tapant une ligne de commande (run 800 ns par exemple)
• En appuyant sur le bouton « run » (simulation par pas de 100 ns par défaut)

-6-
ELEC 4 - VHDL
TD n°2
Solution N°1 Solution N°2

bouton « run »

commande

Figure 13 : Lancement de la simulation.


Dans notre cas, nous voulons simuler 800 ns. Par exemple, vous taperez la ligne de
commande « run 800 » dans la fenêtre transcript. Nous voyons apparaître un chronogramme
résultat de la simulation dans la fenêtre « wave » comme le montre la Figure 14.

Figure 14: Résultat de la simulation

D.5 Relancer la simulation


Modifiez le programme source de test afin d’insérer une modification de la valeur de B à 4
à 770 ns. Pour relancer la simulation après modification du source VHDL, il n’est pas
nécessaire de fermer les fenêtres. Il vous suffit de :
• compiler les fichiers modifiés (Ne pas oublier !!),
• d’appuyer sur le bouton « restart » et de valider par « Restart » la fenêtre présentée à
l’écran.
1 2 2

RECOMPILER !!!

bouton « restart »

Appuyer sur « Restart »

Figure 15 : Relance du simulateur.

D.6 Sauvegarde des chronogrammes


Dans le menu file, cliquez sur Datasets, et cliquez dans la fenêtre Dataset Browser pour la
rendre active. Cliquez ensuite sur le bouton save as et nommez votre fichier (.wlf).

-7-
ELEC 4 - VHDL
TD n°2
3. Une description structurelle du module accumulateur
Une alternative à la description comportementale de l’accumulateur consiste à décrire le
composant comme l’assemblage d’un additionneur et d’un registre simple. Cette description
topologique constitue une vue interne du composant encore appelée solution de réalisation. Le
comportement global de l’accumulateur résulte alors du comportement de chaque composant
de la structure et des liens unissant les deux composants, liens permettant de propager les
valeurs des signaux d’un composant à l’autre.
Dans le fichier « composants.vhd »
entity additionneur is e1(0..N-1) e2(0..N-1)
generic (N : natural := 1);
port( e1,e2 : in natural range 0 to N-1;
S : out natural range 0 to N-1); Additionneur
end additionneur;

S(0..N-1)

architecture beh of additionneur is


begin
process(e1,e2)
begin
s <= (e1+e2) mod N after 4 ns;
end process;
end beh;

Figure 16: Symbole et architecture de l’additionneur


Un des composants de la structure est un additionneur de N bits (1 bit par défaut). Comme
pour l’accumulateur, une architecture est nécessaire pour décrire l’évolution de sa sortie.
Dans le fichier « composants.vhd »
entity registre is E(0..N-1)
generic (N : natural := 1);
rst
port( rst,ld: bit;
E : in natural range 0 to N-1; Registre
S : out natural range 0 to N-1); Ld
end registre;

S(0..N-1)

architecture beh of registre is


begin
process(ld,rst)
begin
if rst=‘1’ then
S <= 0 after 3 ns;
elsif ld’event and ld=‘1’ then
s <= E after 3 ns;
end if;
end process;
end beh;

Figure 17: Symbole et architecture du registre

-8-
ELEC 4 - VHDL
TD n°2
Les deux types de description, comportementale et structurelle sont à nouveau possibles. On
choisit la première forme ce qui donne une description purement externe. S’agissant d’un
composant combinatoire, la liste de sensibilité doit impérativement comporter l’ensemble des
signaux d’entrée du composant pour un fonctionnement correct de ce composant. Le second
composant de la structure est un registre simple avec reset asynchrone. A nouveau, la
description de l’architecture est de type comportementale.
B (0..N-1)

additionneur

rst V (0..N-1)

Ld
Registre

A (0..N-1)

Figure 18: Schéma de réalisation de l’accumulateur


L’interconnexion des deux composants s’effectue au travers d’une nouvelle architecture pour
l’entité accumulateur (Figure 19). La liaison des deux composants s’obtient au travers des
noms de signaux interne et notamment du signal V représentant un fil (une soudure, un câble)
liant la sortie S de l’additionneur et l’entrée E du registre.

Dans le fichier « accu str.vhd »


Architecture structure of accumulateur is
component additionneur
generic(N:natural:=1);
-- signaux formels
port (e1,e2: natural range 0 to N-1;
S: out natural range 0 to N-1);
end component;
component registre
generic(N:natural:=1);
-- signaux formels
port (rst,ld: bit;
E:natural range 0 to N-1;
S: out natural range 0 to N-1);
end component;
signal V,Aint:natural range 0 to N-1;
-- signaux internes
begin
-- les instances des composants
c1: additionneur generic map (N) port map (B,Aint,V);
c2: registre generic map(N) port map (rst,ld,V,Aint);
A <= Aint;
end structure;

Figure 19: Code de l'architecture structurelle (netlist)

-9-
ELEC 4 - VHDL
TD n°2
Travail : Dans le même projet, effectuez la saisie des différentes descriptions dans les fichiers
VHDL respectif. Insérez ces fichiers dans le projet courant. Compilez les nouveaux fichiers.
L’ordre de compilation n’a pas d’importance sauf pour le fichier de test qui devra toujours
être compilé en dernier.

On notera qu’il est inutile de recompiler l’entité accumulateur. Celle-ci n’a en effet subit
aucun changement. Le test bench est également identique pour les deux descriptions.
Néanmoins, il est nécessaire de recompiler le fichier afin de lier l’entité accumulateur à la
nouvelle architecture. C’est le problème de la configuration qui, ici, s’effectue par défaut sur
la base de la dernière architecture compilée.

Exécutez la simulation du composant et demandez en particulier à visualiser le signal interne


V. Pour cela, cliquez avec le bouton droit de la souris sur la fenêtre objects et demandez add
signals in design.

Vous pouvez également comparer ces formes d’ondes par rapport à celles obtenues
précédemment. (cf Figure 20). Une fois la simulation démarrée, et les signaux chargés dans le
chronogramme (add signal in design), cliquez sur tools Æ waveform compare Æ Comparison
Wizard. Dans la fenêtre qui s’affiche, faites références aux chronogrammes du modèle
behavioral sauvegardés puis, dans la fenêtre suivante, cliquez sur l’option compare all
signals, puis sur next.Terminez en cliquant sur le bouton compute differences now, et finish.
Lancez votre similation (run).

Figure 20: Une simulation avec l'ensemble des architectures

- 10 -

Vous aimerez peut-être aussi