Professional Documents
Culture Documents
ISET DE GABES
LAII 5
TP N°1
Guide pratique d’initiation a
ENSEIGNANT : M. TA YA RI LASSAAD XILINX ISE 9.2i
CLASSE : LAII51
1- Introduction
1.1 Survol
ISE Foundation 9.2 est un environnement intégré de développement de systèmes numériques ayant pour
but une implémentation matérielle sur FPGA de la compagnie Xilinx. Les designs peuvent être décrits sous
trois formes principales :
• schémas;
• langage de description matérielle (HDL) comme VHDL et Verilog; et,
• diagrammes d’états. ISE intègre donc différents outils permettant de passer à travers tout le flot
de conception d’un système numérique :
• un éditeur de textes, de schémas et de diagrammes d’état;
• un compilateur VHDL/Verilog;
• un outil de simulation;
• des outils pour la gestion des contraintes temporelles;
• des outils pour la synthèse;
• des outils pour la vérification; et,
• des outils pour l’implantation sur FPGA.
5. Si vous désirez faire un design à base d’un code HDL, choisir HDL comme Top_Level Source Type.
Family permet de choisir la famille de FPGA, et Device permet de sélectionner le sous-type (nombre de
portes logiques). Package définit le type de boitier : dans le cas présent, nous utilisons un FPGA Spartan 3
XC3S200 à 256 pattes.
Appuyer sur Next.
8. Appuyer sur Next deux autres fois pour les deux autres fenêtres et sur Finnish.
On peut dériver les équations pour les sorties retenue et somme grâce à un tableau de Karnaugh, et, à l’aide
de manipulations algébriques, obtenir une version plus efficace pour l’implémentation matérielle. Un
schéma d’un circuit réalisant ces deux fonctions est donné ici :
M TAYARI.L Page 3 /32 TP N°1
FPGA LAII51 ISET GABES
Le circuit est composé des entités suivantes :
2. Sélectionner schematic comme source et entrer le nom du schéma que vous allez créer.
6. La première fois qu’on ajoute un fichier source au projet, on obtient une fenêtre semblable à la figure ci-
contre.
7. Cliquer sur l’onglet sources si nécessaire (partie gauche et en haut de l’écran), puis dans la fenêtre
sources cliquer deux fois sur votre fichier pour ouvrir l’éditeur de schémas.
8. Pour ajouter des composantes cliquer sur le symbole : ou dans la barre d’outils Add Symbol
10. Répéter l’étape 8 pour les portes xor2 et or2 correspondant respectivement à un « OU EXCLUSIF »
à deux entrées et à un « OU » à deux entrées.
11. Relier les portes à l’aide d’un fil en cliquant sur le symbole (ou avec le menu Add Wire).
12. Cliquer sur bouton de droite de la souris et renommer les Entrées/Sorties (bit0, bit1, bit2 / Somme,
Retenue) avec l’option Rename Port. Il est à noter que le choix de la direction des ports (en entrée ou en
sortie) s’effectue automatiquement.
14. Pour finir, vérifier votre schéma avec le bouton de la barre d’outil de dessin ou en sélectionnant
Tools Check Schematic du menu. Vérifier les messages dans la console au bas de l’écran.
4 Simulation du design
La simulation du design permet de vérifier qu’il fonctionne de la façon prévue par les spécifications. La
simulation à faire à cette étape est la simulation comportementale. Pour simuler le design il faut créer un
banc d’essai contenant les stimuli d’entrée.
1. Sélectionner le fichier à simuler (Schema_additionneur).
2. Créer un nouveau banc d’essai en sélectionnant Project New Source.
3. Dans la fenêtre qui s’ouvre, sélectionner Test Bench WaveForm comme source, et donner un nom au
fichier comme ci-contre :
9. Avec le bouton droit de droite, cliquer sur le début de la courbe (juste à côté de la zone grise)
correspondant au signal bit0; et sélectionner set value.
14. Sauvegarder le banc d’essai avec File >Save, qui devrait ressembler au schéma ci-contre.
16. Assurez-vous que le banc d’essai est bien sélectionné dans la fenêtre sources.
19. Corriger votre design si vous obtenez des erreurs. Vous ne devriez quitter la simulation que lorsque
celle-ci donne des résultats conformes aux spécifications.
2. Dans la fenêtre Processes, dérouler le menu User Constraints et double-cliquer sur Assign
Package Pins.
3. Dans la fenêtre suivante cliquer sur Yes pour créer automatiquement le fichier
d’assignation (.ucf) des ports du FPGA.
Cela a pour effet de connecter les entrées aux commutateurs SW0, SW1, et SW2, et les sorties aux
diodes émettrice de lumière LD1 et LD0 de la planchette.
5. Sauver les allocations effectuées en sélectionnant File_Save. Sélectionner XST Default:<> pour le
type de sauvegarde. Cliquer sur Ok.
1. Informer votre enseignant que vous êtes prêt à utiliser la planchette pour qu’on vous
indique comment effectuer les connexions.
10. Vous devrez obtenir le schéma suivant indiquant que la programmation du FPGA s’est
bien déroulée.
11. Vous pouvez maintenant tester votre design sur le FPGA! Vérifier toutes les combinaisons
possibles d’entrées et vérifier que les sorties sont bien conformes au tableau de vérité.
3. Sélectionner VHDL Module comme source et entrer le nom du schéma que vous allez
créer.
7. Cliquer sur Next et ensuite sur Finish. Une ébauche du fichier apparaît avec la
description de l’entité et de l’architecture.
8. Dans la description de l’architecture, en dessous de l’énoncé begin, insérer les
fonctions permettant de calculer la somme et la retenue, tel que montré ci-contre.
Une fois le fichier VHDL édité, il est conseillé de vérifier la syntaxe du design afin de
trouver des erreurs de syntaxe, de typographie :
1. Vérifier que synthesis/implementation est sélectionné dans la liste déroulante de la
fenêtre sources.
2. Sélectionner le fichier VHDL Compteur-VHDL pour afficher les processus liés dans
la fenêtre processes.
3. Cliquer sur le « + » à coté de synthesize-XST.
4. Double-cliquer sur le processus check syntax. Si tout va bien, un crochet vert apparaît.
Sinon, consulter les messages d’erreur dans la console au bas de l’écran.
5. Corriger les erreurs s’il y a lieu, puis fermer le fichier VHDL.
6. Refaire le étapes des sections 4- et 5-
T P N°2
I. Objectif
L’objectif de ce module de TP est, au travers de la réalisation de différents petits
projets, d’apprendre à utiliser les outils de la suite logicielle ISE design sofware de la société
Xilinx pour configurer des composants logiques programmables à partir d’une description en
VHDL. Pré Requis : connaître les fonctions logiques de base.
II. Déroulement
La conduite d’un projet simple comporte les étapes suivantes :
1. Description du projet avec le module ISE qui comporte différents modes d’entrée
tels que :
Texte VHDL ou Verilog HDL
Schéma bloc
Machine d’états
2. Simulation fonctionnelle avec le module ModelSim
Cette étape permet d’entrer des stimuli, de simuler le comportement des éléments du
projet et de visualiser les résultats sous forme de chronogrammes ou de listes d’états.
3. Synthèse
L’outil de synthèse XST (Xilinx Synthesis Technology) crée, à partir des fichiers texte
VHDL, un fichier du type « netlist » de très bas niveau qui décrit les fonctions à implémenter
dans le composant.
4. Implémentation dans un CPLD (XCRP) ou FPGA (sapartanIII)
Elle comporte deux étapes :
Traduction (Translation) du modèle logique du composant en une autre forme
qui tient compte de l’architecture du composant, et vérification de la validité
des contraintes imposées par l’utilisateur (temps de propagation, brochage).
Adaptation du modèle précédant (Fitting) aux ressources du composant en
tenant compte des contraintes.
5. Simulation post- implémentation
Elle consiste à simuler le fonctionnement du composant en tenant compte du chemin
suivi par les signaux et donc des temps de propagation (simulateur ModelSim).
6. Programmation du composant
Elle commence par la création d’un fichier de programmation au format standard
JEDEC puis la configuration du composant sur l’application cible avec le logiciel iMPACT
Figure 1
Compte rendu
Les résultats obtenus à chaque étape de chaque projet seront analysés et consignés
dans un compte rendu sur l’ensemble des projets.
Pour chaque projet il sera présenté :
- La fonction du composant réalisé
- Une analyse du fichier source expliquant les nouvelles instructions utilisées
- Les tests proposés pour la simulation en justifiant leur choix.
- Les résultats de la simulation et leur interprétation.
- Les ressources utilisées après implémentation dans le composant
- Les équations logiques synthétisées
- Les résultats de tests effectués avec la carte d’évaluation
-- mode concourant
-- Le système est purement combinatoire
-- Il utilise le symbole d'affectation <=
-- La mise jour est effective à la dernière instruction
-- fichier Basic_gates.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Fichier Comparateur.vhd
-- mode concourant
-- utilise l''assignation conditionnelle WHEN ... ELSE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
begin
SUP <= '1' WHEN A>B ELSE '0';
INF <= '1' WHEN A<B ELSE '0';
EGAL <='1' WHEN A=B ELSE '0';
end Behavioral;
-- fichier Hex2seg.vhd
-- mode concourant
-- utilise un signal interne
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity HEX27SEG is
Port ( i : in std_logic_vector(3 downto 0); -- SW1,SW2,SW3,SW4
a : out std_logic; -- AA
b : out std_logic; -- AB
c : out std_logic; -- AC
d : out std_logic; -- AD
e : out std_logic; -- AE
f : out std_logic; -- AF
g : out std_logic; -- AG
cat1 : out std_logic; -- CAT1
cat2 : out std_logic); -- CAT2
end HEX27SEG;
a <= seg(0);
b <= seg(1);
c <= seg(2);
d <= seg(3);
e <= seg(4);
f <= seg(5);
g <= seg(6);
cat1 <= '0';
cat2 <= '1';
end Behavioral;
-- fichier BCD27SEG.vhd
-- mode concourant
-- utilise l'assignation conditionnelle WITH SELECT <= WHEN
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity BCD27SEG is
Port ( i : in std_logic_vector(3 downto 0); -- SW1,SW2,SW3,SW4
a : out std_logic; -- AA
b : out std_logic; -- AB
c : out std_logic; -- AC
d : out std_logic; -- AD
e : out std_logic; -- AE
f : out std_logic; -- AF
g : out std_logic; -- AG
cat1 : out std_logic; -- CAT1
cat2 : out std_logic); -- CAT2
end BCD27SEG;
a <= seg(0);
b <= seg(1);
c <= seg(2);
d <= seg(3);
e <= seg(4);
f <= seg(5);
g <= seg(6);
cat1 <= '0';
cat2 <= '1';
end Behavioral;
-- fichier Decodeur_octal.vhd
-- mode combinatoire
-- utilise l'assignation conditionnelle IF THEN ELSE dans un process
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Decodeur_Octal is
Port ( E : in std_logic_vector(2 downto 0); -- SW1,SW2,SW3
S0 : out std_logic; -- LED1
S1 : out std_logic; -- LED2
S2 : out std_logic; -- LED3
S3 : out std_logic; -- LED4
S4 : out std_logic; -- LED5
S5 : out std_logic; -- LED6
S6 : out std_logic; -- LED7
S7 : out std_logic); -- LED8
end Decodeur_Octal;
BEGIN
PROCESS(E) BEGIN
IF E="0000" THEN S0 <='1'; ELSE S0 <='0';END IF;
IF E="0001" THEN S1 <='1'; ELSE S1 <='0';END IF;
IF E="0010" THEN S2 <='1'; ELSE S2 <='0';END IF;
IF E="0011" THEN S3 <='1'; ELSE S3 <='0';END IF;
IF E="0100" THEN S4 <='1'; ELSE S4 <='0';END IF;
IF E="0101" THEN S5 <='1'; ELSE S5 <='0';END IF;
IF E="0110" THEN S6 <='1'; ELSE S6 <='0';END IF;
IF E="0111" THEN S7 <='1'; ELSE S7 <='0';END IF;
END PROCESS;
end Behavioral;
-- fichier Dec3V8.vhd
-- mode combinatoire
-- utilise l'assignation conditionnelle CASE dans un process
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Decodeur3V8 is
Port ( SEL : in std_logic_vector(2 downto 0);-- SW1,SW2,SW3
S : out std_logic_vector(7 downto 0));-- LEDs 1 a 8
end Decodeur3V8;
begin
PROCESS(SEL )BEGIN
end Behavioral;
-- fichier demux1V8
-- mode combinatoire
-- utilise l'assignation conditionnelle CASE dans un process
-- utilise le mot clé OTHERS
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Demux1V8 is
Port ( E : in std_logic; -- BTN1
SEL : in std_logic_vector(2 downto 0); -- SW1,SW2,SW3
S : out std_logic_vector(7 downto 0)); -- LEDS 1 à 8
end Demux1V8;
BEGIN
PROCESS(SEL,E) BEGIN
CASE SEL IS
WHEN "000" => S <= (0=>E,OTHERS=>'0');
WHEN "001" => S <= (1=>E,OTHERS=>'0');
WHEN "010" => S <= (2=>E,OTHERS=>'0');
WHEN "011" => S <= (3=>E,OTHERS=>'0');
WHEN "100" => S <= (4=>E,OTHERS=>'0');
WHEN "101" => S <= (5=>E,OTHERS=>'0');
WHEN "110" => S <= (6=>E,OTHERS=>'0');
WHEN OTHERS => S <=(7=>E,OTHERS=>'0');
END CASE;
END PROCESS;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Com_Mot_2V is
Port ( Clk : in std_logic; -- MCLK
Rst : in std_logic; -- BTN1
Ma_PV : in std_logic; -- BTN2
MA_GV : in std_logic; -- BTN3
At : in std_logic; -- BTN4
K_PV : out std_logic; -- LED1
K_GV : out std_logic); -- LED2
end Com_Mot_2V;
-- C:\JOB\XILINX_JOB\EXEMPLE_14\EX_14.vhd
-- VHDL code created by Xilinx's StateCAD 5.03
-- Sun Oct 17 10:53:40 2004
-- This VHDL code (for use with Xilinx XST) was generated using:
-- enumerated state assignment with structured code format.
-- Minimization is enabled, implied else is enabled,
-- and outputs are area optimized.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY EX_14 IS
PORT (CLK,at,mar,mav,rst: IN std_logic; --MCLK,BTN2,BTN1,BTN3,BTN4
ar,av : OUT std_logic);
END;
PROCESS (sreg,at,mar,mav)
next_sreg<=Arret;
CASE sreg IS
WHEN Arret =>
av<='0';
ar<='0';
IF ( mav='0' AND mar='0' ) OR ( mar='1' AND mav='1'
THEN
next_sreg<=Arret;
END IF;
IF ( mav='1' AND mar='0' ) THEN
next_sreg<=Avant;
END IF;
IF ( mar='1' AND mav='0' ) THEN
next_sreg<=Arriere;
END IF;
WHEN Arriere =>
av<='0';
ar<='1';
IF ( at='1' ) THEN
next_sreg<=Arret;
ELSE
next_sreg<=Arriere;
END IF;
WHEN Avant =>
av<='1';
ar<='0';
IF ( at='1' ) THEN
next_sreg<=Arret;
ELSE
next_sreg<=Avant;
END IF;
WHEN OTHERS =>
END CASE;
END PROCESS;
END BEHAVIOR
T P N°3
I. Objectif
L’objectif de ce module de TP est d’apprendre à utiliser les outils de la suite logicielle
ISE design sofware de la société Xilinx pour configurer des circuits logiques programmables
à partir d’une description mixte schématique et VHDL dont le but de définir de nouveaux
composants personnelles.
Pré Requis :
Connaître les fonctions logiques de base.
Initiation de base sur ISE. (TP1 et TP2)
II. Déroulement
2- Lancement de ISE 9.2 et création d’un nouveau composant
Dans l’environnement ISE, un ‘projet’ est un regroupement de fichiers en rapport avec un système ou un
design en particulier. Par exemple, dans le cadre d’un cours, on pourrait avoir un projet par laboratoire ou
par devoir.
1. Lancer ISE 9.2 en cliquant deux fois sur l’icône sur le bureau de travail ou en choisissant
StartPrograms XilinxISE 9.2i Project Navigator.
Family permet de choisir la famille de FPGA, et Device permet de sélectionner le sous-type (nombre de
portes logiques). Package définit le type de boitier : dans le cas présent, nous utilisons un FPGA Spartan 3
XC3S200 à 256 pattes.
Appuyer sur Next.
7. Sélectionner le menu Project new Source
8. Sélectionner schematic comme source et entrer le nom du schéma que vous allez créer.
11. Cliquer sur l’onglet sources si nécessaire (partie gauche et en haut de l’écran), puis dans la fenêtre
sources cliquer deux fois sur votre fichier pour ouvrir l’éditeur de schémas.
19. Pointer la sourie sur le composant « addition1bit », en suite avec le bouton droite sélectionner
« symbolpush into symbol »
23. Vérifier que synthesis/implementation est sélectionné dans la liste déroulante de la fenêtre sources.
24. Sélectionner le fichier VHDL addition1bit pour afficher les processus liés dans la fenêtre processes.
25. Cliquer sur le « + » à coté de synthesize-XST.
26. Double-cliquer sur le processus check syntax. Si tout va bien, un crochet vert apparaît. Sinon, consulter
les messages d’erreur dans la console au bas de l’écran.
27. Corriger les erreurs s’il y a lieu, puis fermer le fichier VHDL.
28. Sélectionner le fichier addition.sch (schéma) pour ajouter les marques d’entrée/soritie (I/O marker).
29. vérifier le montage par une simulation.
30. télécharger le montage dans le circuit et vérifier son fonctionnement.