Nom : Addine Lina et Djae Khadidja 4A-GBM
ETUDE 1 :
Conception d’un premier circuit logique à l'aide du logiciel ise et son implémentation sur
FPGA
L’objectif de cette première étude est de se familiariser avec le logiciel ISE de Xilinx. Il s'agit de
réaliser un circuit numérique conçu pendant la préparation du TP sous forme de circuit logique
(approche schématique) et de code VHDL (approche conception par langage), de le simuler, de le
compiler, de le synthétiser, puis de l’implémenter.
Partie 1 :
CONCEPTION D’UN CIRCUIT SUR FPGA À PARTIR D’UNE DESCRIPTION
SCHÉMATIQUE
Après avoir créer nos sources : “toplevel.shc” et “aiguillage.sch” de type Schematic (=shc) nous avons
représenté le circuit de la préparation de TP dans la fenêtre “aiguillage.sch” :
[Figure 1] - Circuit logique d’un sélecteur
Pour plus de lisibilité nous avons rajouté des labels pour définir les entrées et sorties du circuit.
Contrairement à la prépa de TP, nous avons choisi une porte NAND avec un inverseur dans une de ses
entrées pour réduire le nombre de portes.
Afin de tester notre circuit, nous sommes passés en mode simulation.
Après avoir effectué plusieurs test nous avons déduit que :
Type d’état Couleurs du signal
Haute impédance ‘Z’ Bleu
Variable connu lors de l'exécution du programme (0 ou 1) Vert
Indique des erreurs ou des problèmes de conception. Niveau Rouge
inconnu, forçage fort ‘X’
Entrées/ Sorties de type U : undefined. La simulation est lancée sans Orange
connaître l'évolution des états.
1
Nous voyons d’autres signaux que ceux que nous avons fait apparaître nous même dans le circuit.
Comme “xlxn_1” et “xlxn_3”, ce sont des signaux internes de notre schéma qui apparaissent au
niveau des NET.
Pour s’assurer du bon fonctionnement nous avons testé manuellement toutes les combinaisons des
entrées a,b et sel. Il existe deux moyens :
- Tester les combinaison une par une : clic droit - > Force constante -> choisir la valeur de la
constante 1 ou 0
- Tester toutes les combinaisons : clic droit - > Force clock -> ou nous définissons un signal qui
correspond à un signal d’horloge pour les entrées. Ou les valeurs 0 et 1 se succèdent avec une
période imposée.
[Figure 2]: Simulation du circuit logique “aiguillage.shc”. Test de toutes les combinaisons.
Nous comparons le chronogramme avec la table de vérité ci-dessous établie lors de la préparation de
TP.
Nous avons bien lorsque sel = 0 la sortie S
copie la valeur a et lorsque sel = 1 la sortie S
Sel I S
copie la valeur de b conformément à
0 a 𝑠𝑒𝑙 a l’équation S = 𝑠𝑒𝑙 a + sel b .
1 b sel b
Pour cet exemple, la simulation manuelle n'est pas compliquée. Cependant, dans le cas d'un circuit
plus complexe, il devient plus difficile de vérifier le bon fonctionnement de notre circuit.
Un autre moyen de tester le bon fonctionnement du circuit est le TestBench, c’est un code VHDL
destiné à la vérification, par simulation, du fonctionnement système, lui-même décrit en VHDL
Nous avons créer une nouvelle source de type VHDL test bench nommé “test_aiguillage.vhd”
Le fichier contient du code VHDL complétée automatiquement par le logiciel. La première étape est
de comprendre le code généré.
Nous analysons la structure du code VHDL (nous avons cherché à comprendre en détail, de ce fait à
gauche de chaque section du code se trouve une boîte de simulation du testbench) :
❖ L’ajout des librairies dans le code VHDL permet d'accéder à des descriptions et des
fonctionnalités supplémentaires définies dans ces bibliothèques ("packages").
❖ L’entité déclaration de l'entité du test bench. L’entité est dénuée d’entrées/sorties (pour le
moment vide).
2
❖ L’architecture déclaration de l'architecture du test bench
➢ Déclaration du composant du système à tester (UUT : Unit Under Test). Nous faisons
référence au composant dont nous avons besoin avec ses entrées et sorties ici
“aiguillage".
➢ Déclaration des signaux internes à l’intérieur de la structure de test (entrées et sorties
de l’UUT) pour pouvoir fixer les stimuli d’entrée, en utilisant les mêmes noms que
dans component (cf. aiguillage_aiguillage_sch_tb).
➢ Instruction d'instance de l’UUT. Dans notre architecture de test on ajoute l'élément à
tester (aiguillage UUT), qu’on relie aux signaux internes les entrées/sorties de
l’architecture de test. (port MAP)
➢ Instructions de génération de stimuli (entrées de l’UUT)
3
Cette partie est complétée par l’utilisateur afin de spécifier les tests à effectuer. Nous
avons reproduits combinaisons testé manuellement en début de TP.
tb : PROCESS
BEGIN
-- test 1 : sel = 0 , a = 0 , b = 1
wait for 500 ns ; -- will wait forever
IN_sel <= '0' ;
IN_a <= '0' ;
IN_b <= '1' ;
-- test 2 : sel = 1 , a = 0 , b = 1
wait for 1 us ;
IN_sel <= '1' ;
-- test 3 : sel = 1 , a = 1 , b = 0
wait for 1 us ;
IN_a <= '1' ;
IN_b <= '0' ;
-- test 4 : sel = 1 , a = 1 , b = 0
wait for 1 us ;
IN_sel <= '0' ;
wait;
END PROCESS;
-- *** End Test Bench - User Defined Section ***
Nous obtenons le même chronogramme que précédemment. Notre sortie est en adéquation avec les
entrées, notre Test bench est validé.
[Figure 3] : Simulation du Test bench aiguillage (approche description schématique)
Nous avons terminé la phase de simulation comportementale est terminée nous pouvons donc entamer
la partie implémentation.
Les étapes à suivre pour implémenter sont :
❖ Création d’un Symbole de Composant et l’ajouter dans le fichier toplevel. Pour chaque
entrée/sortie il faut placer des étiquettes (I/O Markers).
4
[Figure 4] : Symbole du composant aiguillage
Modifiez le fichier .ucf pour ne conserver que les trois interrupteurs et la LED. Les noms des
étiquettes doivent correspondre aux noms utilisés (SW1, SW2, SW3, LED) pour le
composant.
❖ Synthèse :
Les options par défaut sont : speed, optimization effort
La description de RTL ?
La description technologique
[Figure 5] : Description technologique toplevel
On retrouve notre circuit logique avec ces entrées et sorties, les connexions entre les portes
logiques et avec les switchs ON/OFF.
❖ Implémentation Translate - Map - Routage
❖ View Design Summary : Permets d’avoir un rapport complet des différentes étapes de
conception au fur et à mesure de l’avancement du projet. Nous avons accès à plusieurs
informations tels que les messages d’erreur et “warning”, les rapport détaillés de chaque étape
de conception.
Nous avons par la suite charger le code produit (fichier binaire) sur la carte connectée et allumée et
tester le bon fonctionnement du composant en vérifiant l’adéquation entre les entrées/sorties
L’avantage de la description schématique est qu’elle est intuitive, car nous sommes plus à l’aise avec
les symboles logiques (nous avons plus d’expérience). Les symboles sont déjà codés ; une fois le
schéma terminé, le code est généré. Il ne reste plus qu’à effectuer le banc d’essai pour vérifier.
5
Cependant, avoir le code généré n'est pas forcément avantageux, car si quelque chose ne fonctionne
pas, il faut analyser et comprendre le code, ce qui peut être gênant lorsqu'il ne s'agit pas du nôtre.
Écrire notre propre description VHDL permettrait sûrement d'être plus précis dans la description du
fonctionnement.
Partie 2 :
CONCEPTION D’UN CIRCUIT SUR FPGA À PARTIR D’UNE DESCRIPTION VHDL
Pour cette partie nous avons répété les mêmes étapes que précédemment mais cette fois si en partant
de la description VHDL de la prépa de TP.
Nous avons obtenu le chronogramme suivant (Testbench)
[Figure 6] Chronogramme testbench aiguillage (approche description vhdl)
Nous comparons les deux chronogrammes pour vérifier si le fonctionnement décrit est le même et
nous trouvons bien les valeurs de s comme décrit précédemment. Lors de l’implémentation sur la
carte.
L’avantage de la description par langage HDL est qu’elle est très flexible, car elle permet de coder des
comportements complexes (en décrivant précisément le fonctionnement du circuit). Cependant, bien
qu’elle ait des avantages pour les débutants, cette approche peut parfois être plus difficile à adopter.
Conclusion :
Ce TP nous a permis de nous familiariser avec le logiciel ISE de Xilinx et d'explorer deux approches
de conception de circuits logiques sur FPGA : l'approche schématique et l'approche par langage HDL.
Nous avons vu que chaque méthode présente des avantages et des inconvénients. Le plus important
est de choisir la méthode la plus adaptée en fonction de la complexité du circuit et des besoins
spécifiques du projet. En effet, les circuits peut complexes peuvent utiliser l’approche schématique à
l'inverse des plus complexes ou il est plus judicieux de se pencher vers une approche algorithmique.
Dans le cadre de ce TP, le sélecteur est assez simple, donc les résultats obtenus sont les mêmes.
Cependant, nous anticipons que la conception d'un diviseur de fréquence lors du prochain TP sera
bien plus complexe à réaliser avec une description schématique.