Première utilisation du Spartan 3E Kit NEXYS2 sous l

Transcription

Première utilisation du Spartan 3E Kit NEXYS2 sous l
Première utilisation du Spartan 3E Kit NEXYS2 sous l’environnement
Webpack Xilinx ISE
Objectif
Dans ce TP, nous allons réaliser un design simple sur FPGA Xilinx en utilisant le 3E Spartan de la carte
Digilent NEXYS2. Le but de ce TP vise à fournir une initiation à l’utilisation des outils de xilinx et / ou
la conception de FPGA en général. Ce TP suppose que l’étudiant a déjà installé Xilinx ISE, une version
gratuite est disponible à http://www.xilinx.com/webpack. (version 12.4)
Sur les machines du fil, il faut :
1- Récupérer le fichier de licence sur la page qu’on vous indique et l'enregistrer sur votre compte
2- Depuis un terminal, lancer le gestionnaire de licences par la commande:
/opt/Xilinx/12.4/ISE_DS/common/bin/lin/xlcm
3- Dans l'interface de gestion de licences choisir "Get free webpack licence"
4- Cliquer sur "connect now" puis sur "copy licence"
5- Charger le fichier de licence puis cliquer sur "close"
Remarque: les étapes de 1 à 5 ci-dessus sont à réaliser par chacun sur son propre compte (une seule
fois pour tout le semestre)
6-Le logiciel ISE est maintenant prêt à être utiliser. Il se lance avec la commande:
/opt/Xilinx/12.4/ISE_DS/ISE/bin/lin/ise
Le projet
Pour cette première expérience, nous aborderons les dispositifs les plus fondamentaux de la carte
NEXSYS, le segment de switch et l’afficheur LED 7-segment. La première partie est assez simple:
utiliser 4 interrupteurs SW0 à SW3 pour représenter un nombre de 4-bit binaire dont la valeur peut
évidemment s’afficher en hexa entre 0-F. Nous aimerions placer cette valeur sur l’afficheur droit 7segment de la carte. A partir de cette mise en œuvre l’étudiant devra implémenter d’autres
expériences du même type qui devront être validées par l’assistant de TP.
Phase 1
Connectez la carte via le cable USB et placez l’interrupteur en position ON. Lancez le logiciel ISE.
Pour commencer la conception, il faut créer un nouveau projet avec "File"->New
Project. Lorsque vous spécifiez le nom du projet et le répertoire, évitez les
espaces dans le chemin.
La prochaine étape sert à préciser le type de FPGA que vous ciblez. C'est pour nous
celui de la carte NEXYS2.
Next puis finish pour clôturer cette partie.
Phase 2
Pour décrire le système, nous allons ajouter un fichier VHDL à notre projet. Bien que cette tâche
puisse être faite avec n'importe quel éditeur de texte, ISE nous propose de créer le
squelette du programme pour nous, intéressant car nous créons le fichier à partir de rien. L’ajout
d'un fichier existant est néanmoins aussi simple, et serait fait avec le «Project -> Add Copy of
Source". Donc ici nous sélectionnons "Project-> New Source ", puis remplissons la boîte de dialogue
permettant à l’outil de créer un nouveau fichier VHDL avec le nom "toplevel.vhd"
En cliquant NEXT, vous serez invité à entrer les ports de votre nouveau module. C’est facultatif mais
cela vous permet d'économiser la saisie manuelle d’une partie du module VHDL. Que vous le
remplissiez ou non, le fichier texte obtenu reste complétement modifiable par la suite. Nous entrons
les ports qui seront insérés dans l’ENTITY dans le fichier VHDL: les 4 switch en entrée et les 7
segments en sortie. En plus, nous insérons le port "anodes» qui sera utilisé pour activer / désactiver
chacun des 4 afficheurs individuellement.
Next et Finish nous produit automatiquement le squelette du module VHDL toplevel.vhd.
Le code produit est composé de deux parties : la partie ENTITY qui précise les ports de notre
architecture et la partie ARCHITETURE qui en donne le comportement. C’est cette seconde partie
qu’il faut maintenant spécifier. Nous insérons ce comportement entre le BEGIN et END de cette
ARCHITECTURE.
Pour chaque valeur présente sur le port switches, il faut donner les segments à afficher sur le port de
sortie sevenseg. On utilise pour cela un WITH SELECT (pareil qu’un case ou select ou …), la notation
x »2 » représente un nombre de 4 bits en hexa. Le signe <= permet d’affecter une valeur au signal de
sortie en fonction de la valeur présente sur le signal d’entrée à un instant particulier. De façon
intuitive, les signaux ne sont pas des variables rangées en mémoire mais plutôt des valeurs qui
circulent et évoluent avec le temps….
Voici le codage sur 7 bits de notre afficheur :
Et le code VDHL correspondant :
with switches select
sevenseg <=
"1000000"
"1111001"
"0100100"
"0110000"
"0011001"
"0010010"
"0000010"
"1111000"
"0000000"
"0010000"
"0001000"
"0000011"
"1000110"
"0100001"
"0000110"
"0001110"
anodes <= "1110";
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
x"0" ,
x"1" ,
x"2" ,
x"3" ,
x"4" ,
x"5" ,
x"6" ,
x"7" ,
x"8" ,
x"9" ,
x"A" ,
x"B" ,
x"C" ,
x"D" ,
x"E" ,
others;
Après avoir entré le code VHDL, enregistrez le fichier, et vérifier la syntaxe en cliquant sur
“Check Syntax” sous la rubrique “Synthesize” dans le volet Processus.
Phase 3
La tâche suivante consiste à attribuer nos ports d'entrée et de sortie vers les emplacements effectifs
sur le chip. Sans cette étape, les broches seraient attribuées par le logiciel Xilinx au hasard. Pour ce
faire, nous devons d'abord en créer un nouveau fichier de type “Universal Constraints File” (.ucf)
Cela sera fait par Project -> New Source :
IL faut ici insérer le code qui correspond à la carte NEXYS2. Voici les noms des connections sur la
carte.
Voici le code correspondant à insérer et à sauvergarder:
NET
NET
NET
NET
"anodes<0>"
"anodes<1>"
"anodes<2>"
"anodes<3>"
LOC
LOC
LOC
LOC
=
=
=
=
"F17";
"H17";
"C18";
"F15";
NET "sevenseg<0>" LOC = "L18";
NET "sevenseg<1>" LOC = "F18";
NET
NET
NET
NET
NET
"sevenseg<2>"
"sevenseg<3>"
"sevenseg<4>"
"sevenseg<5>"
"sevenseg<6>"
LOC
LOC
LOC
LOC
LOC
=
=
=
=
=
"D17";
"D16";
"G14";
"J17";
"H14";
NET
NET
NET
NET
"switches<0>"
"switches<1>"
"switches<2>"
"switches<3>"
LOC
LOC
LOC
LOC
=
=
=
=
"G18";
"H18";
"K18";
"K17";
Il nous reste à vérifier la connexion de la clock. Un click droit sur Generate Programming File puis
dans le menu sur Process Properties on choisit la clock à JTAG
Prêt pour la synthèse !!
La prochaine étape dans le processus c’est l'ISE de Xilinx qui le fait pour vous. L'ensemble du
processus peut être réalisé en cliquant sur Generate Programming File pour votre fichier toplevel.
Configuration
Maintenant que le fichier de programmation a été généré, il est temps de charger votre design sur le
FPGA, et de le tester. On utilise pour cela la connexion USB et l’outil spécifique à cette carte ADEPT.
Chargez votre programme sur le PFGA à l’aide de Browse , puis charger le programme via Program.
Configuration sous linux :
Chargement du design sur le FPGA sous Linux, soit en ligne de commande.
Vérifiez que votre carte FPGA soit branchée et allumée.
Ouvrez un terminal, seulement 2 commandes sont utiles.
La commande « djtgcfg enum » : cette commande permet de lister toutes les cartes connectées à
l’ordinateur.
La commande « djtgcfg –d Nexys2 prog –i 0 –f toplevel.bit »
A vous de jouer !!!!
En changeant les positions des switch, vous devez observer un affichage sur le premier afficheur
différent…..
Question 1 : Affichez la valeur codée sur les 4 afficheurs en même temps.
Question 2 : faire un afficheur qui affiche un seul segment en fonction de son numéro, A= 1 , B= 2,
etc….. et rien sinon.
Question pour les rapides : même affichage que la question 2 mais c’est le switch i qui déclenche
l’affichage du segment i. Exemple en position les switches 1 ou 3 les segments 1 ou 3 s’allument. Il
faudra modifier le code VHDL.
Question pour les pro : peut-on combiner 2, 3 .. ; 7 segments en positionnant 2, 3 ..7 switches en
même temps.

Documents pareils