ISET de Bizerte
TP 1
Circuits Logiques Programmables
1. But
Maitriser la simulation fonctionnelle en utilisant le logiciel Modelsim.
2. Manupilation
1. Demi-additionneur
a) Description.
Le demi-additionneur est un circuit permettant d’additionner deux bit pour
fournir les sorties SUM et CARRY.
Le circuit suivant illustre un demi additionneur avec les entrées A et B et
fournissant le sorties S (SUM) et C (CARRY).
A
B
Demi-
Additionneur
S (SUM)
C (CARRY)
b) Table de vérité
A
0
0
1
1
B
0
1
0
1
c) Conception du circuit logique
=
. +
BABAS
.=
BAC
.
(XOR)
(AND)
d) Description VHDL
S
0
1
1
0
C
0
0
0
1
Soit la description VHDL du demi-additionneur.
Réécrivez cette description dans l’éditeur du logiciel Modelsim.
Page 2
ISET de Bizerte
Circuits Logiques Programmables
e) Simulation fonctionnelle du demi-additionneur avec Modelsim
• Après avoir lancé le logiciel Modelsim et ajouter le code du demi-
additionneur dans l’éditeur de Modelsim, enregistrez le fichier édité
sous
répertoire
nom
le
«c:/TP_VHDL».
« demi_additionneur.vhd »
sous
le
• Cliquez sur « File>Change Directory » puis sélectionnez le répertoire
« c:/TP_VHDL » dans lequel vous venez d’enregistrer votre fichier.
• Compilez le code VHDL du demi-additionneur pour pouvoir le simuler
en cliquant sur « Compile>Compile » puis en choisissant le demi-
additionneur.
• Vérifiez que la compilation c’est bien déroulé dans la fenêtre
« Transcript »
• Lancez la simulation en cliquant sur «Simulate>Start simulation», puis
en choisissant le demi-additionneur.
Page 3
ISET de Bizerte
Circuits Logiques Programmables
• Cliquez sur « view>object » puis sur « view> wave ».
• Sélectionnez les quatre signaux à visualiser (dans la fenêtre object)
et glissez déposer dans la fenêtre « wave ».
• Détachez la fenêtre « wave » puis lancez la simulation pas à pas.
• Forcez chaque fois un des signaux d’entrée pour parcourir
l’ensemble des combinaisons de la table de vérité.
Pour forcer un signal il suffit de cliquer sur lui avec le bouton droit
de la souris et de choisir la valeur logique à luis assigner.
• Comparez les valeurs visualisées avec les valeurs de la table de
vérité.
2. Additionneur Complet :
a) Présentation de l’additionneur complet
Un additionneur complet est un circuit à trois entrées A, B et Cin et deux sorties S et
Cout.
Page 4
ISET de Bizerte
Circuits Logiques Programmables
A
B
Cin
Additionneur
Complet
S
Cout
On peut concevoir un additionneur complet à partir de sa table de vérité mais il serait
plus intéressant de le concevoir à partir de deux demi additionneur.
Le schéma block d’un additionneur complet en utilisant deux demi additionneur est le
suivant :
A
B
Cin
Demi-
additionneur
Demi-
additionneur
S
OR
Cout
Advertisement
En VHDL pour utiliser un composant déjà conçu on doit utiliser le syntaxe :
component ENTITYNAME (of the desired component)
port (INPUTS
: DATATYPE;
OUTPUTS : DATATYPE);
end component;
Pour pouvoir interconnecter un composant déjà existant on doit utiliser le syntaxe :
Label: ENTITYNAME (of the desired component) port map (INPUTS & OUTPUTS)
b) Description VHDL de l’additionneur complet
Le code VHDL de l’additionneur complet est le suivant
Page 5
ISET de Bizerte
Circuits Logiques Programmables
Simuler ce composant avec Modelsim selon la démarche précédemment
présentée.
3. Additionneur Complet à 4 bits:
Soit le code VHDL du composant Additionneur complet sur 4 bits.
• Simulez ce module en utilisant Modelsim.
• Déterminez l’architecture interne de ce composant.
Page 6
ISET de Bizerte
Bascule D
Circuits Logiques Programmables
Le nouveau concept à introduire est l’utilisation de signal d’horloge (CLK). Lors de
l’utilisation d’un signal d’horloge on a nécessairement besoins d’utiliser un process
dont la sensibilité est « CLK ».
1. Rappel sur la bascule D :
Une bascule D est un circuit qui copie l’état de l’entrée au front de l’horloge.Dans ce
qui suit on va essayer de modéliser une bascule D sensible au front montant de
l’horloge.
2. Code VHDL du process permettant de modéliser le comportement d’une bascule
D :
PROCESS (clk)
BEGIN
IF ( clk'EVENT ) AND ( clk = '1') THEN
--On détecte le front de l’horloge puis on vérifie
--s’il s’agit d’un front montant ou descendant.
q <= d;
END IF;
END PROCESS;
3. Travail demander:
Compléter ce code pour fournir la description complète d’une bascule D.
Registre à décalage sur 4 bits
1. Description du registre à décalage :
Un registre à décalage est un ensemble de bascules arrangés de tel façon que le
nombre binaire stocké dans une bascule est décalé vers la bascule suivant à chaque
front d’horloge.
2. Travail demandé :
Partant de la description VHDL précédemment établie d’une bascule D.
Ecrire le code VHDL d’un registre à décalage.
Page 7
ISET de Bizerte
ISET de Bizerte
ISET de Bizerte
TP 2
TP 2
TP 2
Circuits Logiques Programmables
Circuits Logiques Programmables
Circuits Logiques Programmables
1. But
1. But
1. But
• Maitriser la conception de composants séquentiels.
• Maitriser la conception de composants séquentiels.
• Maitriser la conception de composants séquentiels.
• Maitriser l’environnement ISE 9.1.
• Maitriser l’environnement ISE 9.1.
• Maitriser l’environnement ISE 9.1.
2. Manipulation
2. Manipulation
2. Manipulation
1. Création d’un nouveau projet avec ISE
1. Création d’un nouveau projet avec ISE
1. Création d’un nouveau projet avec ISE
Le but de cette première manipulation est la création d’un nouveau projet sous
Le but de cette première manipulation est la création d’un nouveau projet sous
Le but de cette première manipulation est la création d’un nouveau projet sous
l’environnement ISE 9.1 de XILINX.
l’environnement ISE 9.1 de XILINX.
l’environnement ISE 9.1 de XILINX.
Pour pouvoir créer un nouveau...
Pour pouvoir créer un nouveau...
Pour pouvoir créer un nouveau...
• Lancer l’environnement ISE.
• Lancer l’environnement ISE.
• Lancer l’environnement ISE.
• Sélectionnez File>New Project, La fenêtre de configuration du nouveau projet
• Sélectionnez File>New Project, La fenêtre de configuration du nouveau projet
• Sélectionnez File>New Project, La fenêtre de configuration du nouveau projet
apparait.
apparait.
apparait.
• Tapez TP_2_VHDL dans l’emplacement destiné au nom du projet.
• Tapez TP_2_VHDL dans l’emplacement destiné au nom du projet.
• Tapez TP_2_VHDL dans l’emplacement destiné au nom du projet.
• Le répertoire du projet est crée automatiquement, toutefois vous pouvez choisir
• Le répertoire du projet est crée automatiquement, toutefois vous pouvez choisir
• Le répertoire du projet est crée automatiquement, toutefois vous pouvez choisir
un emplacement spécifique.
un emplacement spécifique.
un emplacement spécifique.
• Vérifiez que VHDL est sélectionné dans l’emplacement Top-Level Source
• Vérifiez que VHDL est sélectionné dans l’emplacement Top-Level Source
• Vérifiez que VHDL est sélectionné dans l’emplacement Top-Level Source
Type.
Type.
Type.
• Cliquez Next pour passer à la page de la propriété du composant cible.
• Cliquez Next pour passer à la page de la propriété du composant cible.
• Cliquez Next pour passer à la page de la propriété du composant cible.
• Remplir la table des propriétés pour choisir la famille de FPGA Spartan2
• Remplir la table des propriétés pour choisir la famille de FPGA Spartan2
• Remplir la table des propriétés pour choisir la famille de FPGA Spartan2
• Cliquez sur suivant pour créer les nouvelles sources.
Advertisement
• Cliquez sur suivant pour créer les nouvelles sources.
• Cliquez sur suivant pour créer les nouvelles sources.
2. Création du fichier VHDL haut niveau de notre projet :
2. Création du fichier VHDL haut niveau de notre projet :
2. Création du fichier VHDL haut niveau de notre projet :
Dans cette partie on va créer le fichier VHDL de haut niveau de notre circuit.
Dans cette partie on va créer le fichier VHDL de haut niveau de notre circuit.
Dans cette partie on va créer le fichier VHDL de haut niveau de notre circuit.
• Choisissez alors New Source.
• Choisissez alors New Source.
• Choisissez alors New Source.
Page 8
Page 8
Page 8
ISET de Bizerte
ISET de Bizerte
ISET de Bizerte
• Choisissez maintenant VHDL module puis dans le champ « File name »
• Choisissez maintenant VHDL module puis dans le champ « File name »
• Choisissez maintenant VHDL module puis dans le champ « File name »
Circuits Logiques Programmables
Circuits Logiques Programmables
Circuits Logiques Programmables
choisissez pour nom compteur.
choisissez pour nom compteur.
choisissez pour nom compteur.
• Vérifiez que « Add to project » est sélectionnée.
• Vérifiez que « Add to project » est sélectionnée.
• Vérifiez que « Add to project » est sélectionnée.
• Déclarez les ports du compteur en remplissant les informations sur les ports, on
• Déclarez les ports du compteur en remplissant les informations sur les ports, on
• Déclarez les ports du compteur en remplissant les informations sur les ports, on
va utiliser les signaux suivants :
va utiliser les signaux suivants :
va utiliser les signaux suivants :
CLOCK qui est une entée connectée au signal d’horloge
CLOCK qui est une entée connectée au signal d’horloge
CLOCK qui est une entée connectée au signal d’horloge
permettant de déterminer la fréquence du compteur.
permettant de déterminer la fréquence du compteur.
permettant de déterminer la fréquence du compteur.
DIRECTION qui est une entrée permettant de choisir le sens du
DIRECTION qui est une entrée permettant de choisir le sens du
DIRECTION qui est une entrée permettant de choisir le sens du
comptage.
comptage.
comptage.
COUNT_OUT qui est une sortie sur trois bit contenant la valeur
COUNT_OUT qui est une sortie sur trois bit contenant la valeur
COUNT_OUT qui est une sortie sur trois bit contenant la valeur
comptée.
comptée.
comptée.
• Cliquez sur Next puis sur Finish, enfin valider la création du répertoire
• Cliquez sur Next puis sur Finish, enfin valider la création du répertoire
• Cliquez sur Next puis sur Finish, enfin valider la création du répertoire
du projet.
du projet.
du projet.
• Cliquez ensuite Next, next puis Finish.
• Cliquez ensuite Next, next puis Finish.
• Cliquez ensuite Next, next puis Finish.
Page 9
Page 9
Page 9
ISET de Bizerte
ISET de Bizerte
ISET de Bizerte
Circuits Logiques Programmables
Circuits Logiques Programmables
Circuits Logiques Programmables
Le fichier source crée contient le couple entite/architecture du composant compteur.
Le fichier source crée contient le couple entite/architecture du composant compteur.
Le fichier source crée contient le couple entite/architecture du composant compteur.
Il nous reste alors de compléter l’architecture à fin de refléter le comportement du
Il nous reste alors de compléter l’architecture à fin de refléter le comportement du
Il nous reste alors de compléter l’architecture à fin de refléter le comportement du
compteur.
compteur.
compteur.
Pour pouvoir continuer la description du composant on va essayer d’utiliser les
Pour pouvoir continuer la description du composant on va essayer d’utiliser les
Pour pouvoir continuer la description du composant on va essayer d’utiliser les
modèles de construction VHDL fournis avec ISE.
modèles de construction VHDL fournis avec ISE.
modèles de construction VHDL fournis avec ISE.
3. Utilisation des modèles VHDL fournis avec ISE :
3. Utilisation des modèles VHDL fournis avec ISE :
3. Utilisation des modèles VHDL fournis avec ISE :
L’étape de description du comportement du compteur peut être simplifiée en utilisant
L’étape de description du comportement du compteur peut être simplifiée en utilisant
L’étape de description du comportement du compteur peut être simplifiée en utilisant
les modèles de constructions VHDL fournis avec ISE.
les modèles de constructions VHDL fournis avec ISE.
les modèles de constructions VHDL fournis avec ISE.
On peut utiliser ces modèles de la façon suivante.
On peut utiliser ces modèles de la façon suivante.
On peut utiliser ces modèles de la façon suivante.
• Placez le curseur au dessus de begin dans l’architecture du compteur.
• Placez le curseur au dessus de begin dans l’architecture du compteur.
• Placez le curseur au dessus de begin dans l’architecture du compteur.
• Ouvrez le menu Language Templates en sélectionnant «Edit Language
• Ouvrez le menu Language Templates en sélectionnant «Edit Language
• Ouvrez le menu Language Templates en sélectionnant «Edit Language
Templates».
Templates».
Templates».
Notez que vous pouvez afficher la fenêtre Language Templates en même
Notez que vous pouvez afficher la fenêtre Language Templates en même
Notez que vous pouvez afficher la fenêtre Language Templates en même
temps que les autres, en sélectionnant sur la fonction « Window Tile
temps que les autres, en sélectionnant sur la fonction « Window Tile
temps que les autres, en sélectionnant sur la fonction « Window Tile
Vertically ».
Vertically ».
Advertisement
Vertically ».
• En utilisant le symbole « + » , parcourez les modéles pour accéder à : VHDL
• En utilisant le symbole « + » , parcourez les modéles pour accéder à : VHDL
• En utilisant le symbole « + » , parcourez les modéles pour accéder à : VHDL
→ Synthesis Constructs → Coding Examples → Counters → Binary →
→ Synthesis Constructs → Coding Examples → Counters → Binary →
→ Synthesis Constructs → Coding Examples → Counters → Binary →
Up/Down Counters → Simple Counter.
Up/Down Counters → Simple Counter.
Up/Down Counters → Simple Counter.
• Pour pouvoir utiliser le modèle du compteur dans notre code sélectionnez
• Pour pouvoir utiliser le modèle du compteur dans notre code sélectionnez
• Pour pouvoir utiliser le modèle du compteur dans notre code sélectionnez
EditUse in File, ou sélectionnez Use Template in File dans la barre d’outils.
EditUse in File, ou sélectionnez Use Template in File dans la barre d’outils.
EditUse in File, ou sélectionnez Use Template in File dans la barre d’outils.
Cette étape permet de recopier le modèle dans le fichier source ouvert.
Cette étape permet de recopier le modèle dans le fichier source ouvert.
Cette étape permet de recopier le modèle dans le fichier source ouvert.
• Fermer la fenêtre « Languages Templates ».
• Fermer la fenêtre « Languages Templates ».
• Fermer la fenêtre « Languages Templates ».
Page 10
Page 10
Page 10
ISET de Bizerte
4. Finalisation du code VHDL :
Circuits Logiques Programmables
• Ajouter la déclaration du signal suivant à fin de prendre en compte l’état précedent
du compteur.
signal count_int : std_logic_vector(3 downto 0) := "0000";
La déclaration d’un signal comme vue dans le cour doit s’effectuer
entre la déclaration de l’architecture et son begin.
• Personnaliser le code source du compteur en remplaçant les ports et les noms de
signaux.
Remplacer toutes les occurrences de <clock> par CLOCK.
Remplacer toutes les occurrences de <count_direction> par DIRECTION.
Remplacer toutes les occurrences de <count> par count_int.
Enregistrer le fichier.
Après avoir finis l’édition du fichier le résultat doit ressembler à ce qui suit :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitive in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity counter is
Port ( CLOCK : in STD_LOGIC;
DIRECTION : in STD_LOGIC;
COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0));
end counter;
architecture Behavioral of counter is
signal count_int : std_logic_vector(3 downto 0) := "0000";
begin
process (CLOCK)
begin
if CLOCK='1' and CLOCK'event then
if DIRECTION='1' then
count_int <= count_int + 1;
else
count_int <= count_int - 1;
end if;
end if;
end process;
COUNT_OUT <= count_int;
end Behavioral;
5. Vérification de la syntaxe du module compteur :
Après avoir finis l’édition du module compteur on peut vérifier les erreurs éventuelles
de syntaxe.
Pour cela on doit :
• Vérifier que le paramètre Synthesis/Implementation est sélectionné dans le
panneau sources.
Page 11
ISET de Bizerte
Circuits Logiques Programmables
• Sélectionner le design counter dans la fenêtre source pour afficher les
processus liés dans la fenêtre des process.
• Cliquez sur « + » dans Synthesis-XST process à fin d’étendre le group de
processus liés.
• Double cliquez sur le processus « Check Syntax ».
Vous devez actuellement corriger les erreurs s’il s’y présente dans votre code
VHDL. Vous pouvez visualiser les erreurs visualisés dans la fenêtre console
ou Errors.
• Fermez actuellement le fichier VHDL du compteur.
6. Simulation de notre conception :
a. Vérifications des fonctionnalités en utilisant une simulation fonctionnelle:
Le but de cette manipulation est la création des formes d’ondes pour le
testbench afin de vérifier les fonctionnalités du compteur.
Créez le testbench comme suit :
o Sélectionnez le fichier Counter.vhd dans la fenêtre Sources.
o Créer un nouveau fichier test bench en accédant au menu
ProjectNew Source.
o Dans l’interface de création de la nouvelle source choisissez Test Bench
WaveForm comme type, nommez ce fichier counter_tbw, cliquez sur Next.
o La fenêtre « Associate Source » vous permet d’associer le test bench
au fichier source counter.
o Une page de sommaire s’affiche alors et vous permet de verifier les
paramètres du fichier ajouté, cliquez sur Finish si les paramètres vous
conviennent.
o Vous avez besoin maintenait de spécifier la fréquence d’horloge, le
temps et les délais de sortie avant d’ouvrir la fenêtre de traçage des
Page 12
ISET de Bizerte
waveform.
Les besoins pour notre design sont :
Circuits Logiques Programmables
Le compteur doit fonctionner correctement à une fréquence
d’horloge de 25 MHz.
L’entrée DIRECTION doit être valide 10ns avant l’arrivée du
front montant de l’horloge CLOCK.
la sortie COUNT_OUT doit être valide 10ns après l’arrivée du
front montant de l’horloge CLOCK.
Advertisement
Les paramètres correspondant à cette spécification à inscrire dans le
tableau sont :
Clock High Time: 20 ns.
Clock Low Time: 20 ns.
Input Setup Time: 10 ns.
Output Valid Delay: 10 ns.
Offset: 0 ns.
Global Signals: GSR (FPGA)
Cliquez sur Finish pour compléter l’initialisation temporelle.
La partie colorée en bleu précédent le front montant de l’horloge correspond à
la contrainte d’établissement du signal précédent le front d’horloge. Cliquez
sur DIRECTION pour imposer les stimulis d’entrée de ce signal.
Cliquez sur la cellule en bleu au niveau (à peu prêt) de 300ns
sur l’axe du temps, afin que le compteur puisse compter dans le
sens croissant.
Page 13
ISET de Bizerte
Cliquez sur la cellule en bleu au niveau (à peu prêt) de 900ns
Circuits Logiques Programmables
sur l’axe du temps, afin que le compteur puisse compter dans le
sens décroissant.
Enregistrer le fichier Waveform
Dans la fenêtre des sources sélectionnez « Behavioral
Simulation », assurez vous que le fichier tesbench est ajouté à
votre projet.
Fermer le fichier testbench Waveform.
b. Simulation du Compteur:
Dans cette étape on va vérifier si le compteur conçue respecte la
spécification :
Vérifier que Behavioral Simulation et counter_tbw sont
sélectionnés dans fenêtre sources.
Dans le menue process cliquez sur « + » afin de dérouler la
liste, cliquez sur Simulate Behavioral Model. Modelsim est alors lancer
à fin d’effectuer toute la simulation.
Vous pouvez exploiter les possibilités de Modelsim pour vérifier que le
compteur fonctionne comme voulue.
Page 14
ISET de Bizerte
TP 3
Circuits Logiques Programmables
1. But
Implémentations de modules électroniques numériques standards afin de maitriser à la fois ces
composants ainsi que les constructions syntaxiques de VHDL
2. Manipulation :
1- le multiplexeur.
Utilisons un multiplexeur pour illustrer les assignations conditionnelles when et sélective with.
S0
S1
A
B
C
d
S1
0
0
1
1
Table de vérité :
S0
0
1
0
1
MUX
X
X
A
B
C
D
En utilisant le simulateur MODELSIM, valider le fonctionnement de ce multiplexeur.
Utilisation de l’assignation conditionnelle when :
Page 15
ISET de Bizerte
Circuits Logiques Programmables
Utilisation de l’assignation sélective with :
Page 16
ISET de Bizerte
2- Modèle d’une sortie à trois états (2 registres).
Circuits Logiques Programmables
INV
SEL
CLK
D
D
D
Q
Buff 3 états
La sortie Q se trouve à haute impédance si le buffer de sortie est actif. Valider ce mode sur
MODELSIM en activant l’entrée SEL
3- Diviseur d’horloge :
Soit la description VHDL d’un circuit diviseur d’horloge:
Intégrer ce détecteur dans un projet ISE, simulez son fonctionnement en créant le fichier testbench
pour Modelsim.
Page 17
ISET de Bizerte
Circuits Logiques Programmables
4- Détecteur de front :
Soit la description VHDL d’un circuit détecteur de front :
Intégrer ce détecteur dans un projet ISE, simulez son fonctionnement en créant le fichier testbench
pour Modelsim, puis présenter une deuxième méthode pour décrire ce circuit.
Page 18
ISET de Bizerte
5- Diviseur:
Circuits Logiques Programmables
Soit la description VHDL d’un circuit diviseur générique, le but essentiel de cette manipulation est la
rétro-ingénieur de conception VHDL existante
Simulez ce module avec Modelsim, donnez une interprétation du code, Déterminez le schéma block
de ce module.
Page 19