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.