Vous êtes sur la page 1sur 12

ENSA D’OUJDA DEPARTEMENT GENIE ELECTRIQUE

Travaux pratiques
Langage VHDL
B. HAJJI
01/09/2016

Niveau 4ème GE Année Universitaire : 2016-2017

1
Guide d’utilisation du logiciel Modelsim

Ce guide d’utilisation du logiciel Modelsim présente les 4 étapes nécessaires pour la simulation d’un
circuit décrit par le langage VHDL :

 La première étape consiste à créer un nouveau projet


 La seconde étape permet la création ou l’ajout d’un nouveau fichier source VHDL
 La troisième et la dernière étape concernent la compilation et la simulation des fichiers
sources VHDL

Lancer l’outil de simulation Modelsim dans le menu Démarrer des programmes ou par le
raccourci.

Etape 1 : Création d’un nouveau projet : File  New Project

La fenêtre suivante apparaît :

o Donner un nom de projet


o Choisir un emplacement sur votre compte du répertoire où sera situé le projet.
o Laisser work comme nom de bibliothèque par défaut.

Lorsque vous validez votre choix en cliquant sur le bouton OK comme indiqué, la fenêtre
suivante s’affiche :

2
Etape 2 : Création ou ajout d’un nouveau fichier source

o Si votre fichier source VHDL existe (a été déjà écrit), vous pouvez simplement
l’ajouter au projet en sélectionnant  Add Existing File .

o Dans le cas contraire, sélectionner  Create New File. La fenêtre suivante s’ouvre et
vous propose de préciser le nom du fichier tout en indiquant l’extension .vhd.

Après la validation de votre choix en cliquant sur le bouton  ok, la fenêtre principale de Modelsim
doit contenir votre fichier source VHDL dans l’espace de travail  workspace.

3
Le point d’interrogation signifie que le fichier n’est pas compilé. Vous pouvez à présent éditer le
contenu du fichier en double-cliquant sur son nom. La fenêtre de l’éditeur s’ouvre et vous pouvez en
modifier le contenu. 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 dans la figure ci-contre. Souvegardez le fichier sous la référence test_acc.vhd.
Dans le menue File  add to project, cliquez 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, avec toujours un point d’interrogation comme indicateur
d’état (status) de fichier.

Etape 3 : Compilation des fichiers sources VHDL

- Sélectionner les fichiers sources VHDL


- Cliquer bouton droit de la souris
- Sélectionner « Compile selected »

4
Etape 4 : Simulation

- Cliquer sur l’onglet library dans le cadre « workspace ».


- Ouvrer le dossier test puis cliquer avec le bouton droit de la souris sur bech et sélectionner
simulate.
- De nouveaux onglets apparaissent dans le « workspace ». Vous pouvez vérifier que l’entité et
l’architecture chargées pour la simulation correspondent bien à celles attendues.

- Sélection des signaux : cliquer sur Wave dans le menu view -> Debug Windows. La fenêtre
d’affichage des chronogrammes s’affiche. Faite ensuite une sélection des signaux que vous
souhaitez visualiser dans cette fenêtre : clique bouton droit de la souris  add to Wave 
Selected Signals

5
- La simulation faite à l’aide de la commande  Force :

Exemple : force clk 0 0, 1 40 –repeat 80


Force a 0 0, 1 80
Run 100

La première ligne force le signal clk à 0 au temps 0, à 1 au temps 40, et répète cette séquence
toutes les 80 ns. Ceci correspond à un signal périodique.

6
Prof : B. HAJJI TP VHDL Niveau 4ème GE

Partie 1

Exercice 1 : Demi-additionneur

Un demi-additionneur est un système à 2 entrées sur 1 bit, fournissant une sortie S = a + b et


une sortie Cout de retenue.

1- Ecrire ce composant en VHDL


2- Simuler le bon fonctionnement de ce circuit en utilisant :

a. La commande Force de ModelSim


b. Un test-bench qui permet de générer les stimuli à appliquer au composant demi-
additionneur

Exercice 2 : Additionneur complet

Un additionneur complet est un système à 3 entrées sur 1 bit (A, B, Cin), fournissant une
sortie S = A + B + Cin et une sortie Cout de retenue.

1) Ecrire ce composant en VHDL à l’aide de la des riptio stru turelle e utilisa t 2


demi-additionneurs et un circuit combinatoire g
2) Simuler le bon fonctionnement de ce circuit en utilisant :

a. La commande Force de ModelSim


b. Un test-bench qui permet de générer les stimuli à appliquer au composant demi-
additionneur

7
Exercice 3 : Comparateur

Les ports du comparateur qui compare deux nombres de 8bits non assignés sont listés dans
la table 1 ci-dessous :

Signal Type Direction Function


A std_logic_vector(7 downto 0) input Data input
B std_logic_vector(7 downto 0) input Data input
Eq std_logic output a=b
Lt std_logic output a<b
Gt std_logic output a>b

Table1 : Description des ports du comparateur


Le modèle VHDL de flot de données du comparateur est donné par la figure 1 :

Library ieee ;
Use ieee.std_logic_1164.all;

entity compare is port (


a, b : in std_logic_vector (7 downto 0);
eq, gt, lt : out std_logic);

end compare;

architecture dataflow of compare is

begin

eq <= ‘1’ when a = b else ‘0’;


gt <= ‘1’ when a > b else ‘0’;
lt <= ‘1’ when a < b else ‘0’:

end dataflow;

Figure 1 : Description comportementale du comparateur a 2 nombres de 8 bits non assignés.

Simuler le modèle VHDL en utilisant les stimulés des entrées suivants :

Wave /*

Force b 00000000 0, 1000000 100, 00000001 2000


Force a 00000000 0, 0000001 100, 10000000 2000
Run 300

8
Exercice 4 : bascule D flip-flop

Le tableau 1 présente les ports de la bascule D flip-flop. L’entrée D est mémorisée à chaque front
montant du signal d’horloge clk.

Signal Type Direction Fonction


d std_logic Input Data input
clk std_logic Input Clock
q std_logic Output Data output

Tableau 1 : Description des signaux de la bascule D

1) Taper le modèle de la bascule ci-dessous en appelant le fichier de description bascule.vhd

Library IEEE ;

Use IEEE.std_logic_1164.all;

Entity DEF is port (

D : in std_logic;
Clk: in std_logic;
Q: out std_logic);

End DEF;

Architecture RTL of DEF is

Begin

Process (clk) begin


If rising_edge (clk) then
Q <= d;
End if;
End process;

End RTL;

- Qu’elle est la fonctionnalité de rising-edg?


- Qu’est ce qu’un attribut en VHDL ?

2) Compiler le modèle. Vous devez alors avoir dans la librairie WORK l’entité et l’architecture
du modèle.

3) La simulation du modèle VHDL se fait par deux manières différentes. Soit en imposant des
valeurs aux signaux d’entrés à l’aide de la commande « Force » ou bien en utilisant un test
bench.

a. Simulation du modèle VHDL à l’aide de la commande « Force » en imposant aux


signaux d’entrés les valeurs suivantes :

9
Wave /*
Force clk 0 0, 1 60 – repeat 120
Force d 0 0, 1 100, 0 200
Run 400

b- Taper le modèle de test ci-dessous en appelant le fichier de description


test_bascule.vhd :

entity test_bascule is
--- cette entité n’a pas de signaux car c’est le test
end test_bascule;

Architecture test_bench of test_bascule is

Component latch ---- composant que l’on utilise dans le modèle de test
port (data, clock : in std_logic;
sortie : out std_logic);
end component;

--- on doit spécifier quelle entité et quelle architecture on utilise pour le composant.
--- C’est la configuration

begin
--- on définit le process copie dans lequel on affecte la valeur des signaux

--- définition de signaux internes


Signal din, dout : std_logic ;
Signal horloge : std_logic ;
begin
--- on relie un composant du type latch à nos signaux c’est une description structurelle
IC1 : latch port map( din, horloge, dout) ;
--- on donne des valeurs aux signaux, ce sont des descriptions de type flux de données
Horloge <= not horloge after 20 ns ;
Din <= ‘1’, ‘0’ after 35ns, ‘1’ after 70 ns;
end test_bench;

4) Compiler le modèle. Vous devez alors avoir dans la librairie WORK l’entité et l’architecture
du modèle.

Exercice 5 : D flip-Flip asynchrone

1- Ecrire un programme VHDL de la bascule D flip-Flop Asynchrone et le compiler.

2- Simuler le modèle VHDL de la bascule F flop-Flop Asynchrone soit en utilisant la


commande « Force » ou en écrivant un code de test (test bench).

10
Exercice 6 : Diviseur de fréquence

On cherche à concevoir un diviseur d’horloge permettant de diviser la fréquence d’une horloge


d’entrée par 128. Pour se faire, on souhaite utiliser un compteur. Ce compteur possèdera :

- Une entrée CLK

- Une entrée RESET, synchrone, permettant la mise à 0 du compteur

- Une entrée CE, permettant la validation du comptage

1) Quelle doit être la taille du compteur ?

2) Concevoir un test-bench permettant de tester les fonctionnalités du compteur

Exercice 7 : Compteur

Le tableau 2 présente la description des ports d’un compteur simple

Signal Type Direction Fonction


Clk std_logic Input Clock
Count std_logic_vector (3 downto 0) Output Counter’s output

Tableau 2 : Description des ports du circuit compteur

a- Taper le code suivant du circuit compteur :

Library ieee ;

Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;

Entity BCNT is port (

CLK : in std_logic;
COUNT: out std_logic_vector(3 downto 0));
End BCNT;

Architecture RTL simple of BCNT is


Signal TMP: unsigned (3 downto 0): = (others => ‘0’);
Begin

Increment : process (clk) begin


If rising_edge (clk) then
TMP <= TMP + 1;
End if;
End process;
COUNT <= std_logic_vector (TMP);
End RTL simple ;

b- Simuler le modèle VHDL du circuit compteur en utilisant la commande « Force » :

11
Wave /*
Force clk 0 0, 1 50 – repeat 100

Run 500

Exercice 8 : Registre à décalage

1) Décrire en VHDL un registre à décalage 4-bit, utilisant les bascules D Flip-flop, présenté par
le schéma ci-dessous :

2) Si uler le fo tio e e t de e ir uit à l’aide d’u test e h.

Exercice 9 : Décodeur pour affichage à 7 segments

Il s’agit de développer on modèle fonctionnel (comportemental) d’un décodeur pour un affichage LED
à 7 segments

Tous les signaux sont des std_logic_vector Descriptif des bits de SEG (b0 à b6)

1- E rire l’e tité decode et l’ar hitecture concur de ce modèle en utilisant une description de type
flot de données.

2- Ecrire le modèle de test test_compil8bit comportant les 10 valeurs que prendre DataDCB

3- Compiler et simuler

12

Vous aimerez peut-être aussi