Vous êtes sur la page 1sur 27

TP1 de Codesign: Conception avec Nios II et SOPC Builder

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Objectifs:
Familiarisation avec loutil SOPC Builder. Cration dun systme complet base du NIOS II. Compiler et excuter du code sur le Nios II.

Dans la premire partie de ce TP, vous allez apprendre utiliser les outils (Quartus II et SOPC Builder) qui vont vous permettre de crer votre plate-forme hardware en implmentant le processeur Nios II et un ensemble de priphriques de base. Dans une deuxime partie, vous allez utiliser loutil NiosII Embedded Design Suite (bas sur Eclipse) qui permet dcrire et compiler des programmes en C (software) qui vont tre excuts sur cette plate-forme. Pour tous les TPs, vous allez utiliser la carte dexprimentation DE2 qui comprend un FPGA Cyclone 2 de chez Altera et plusieurs composants externes lists ci-dessous : I/O Devices Built-in USB-BlasterTM cable for FPGA configuration 10/100 Ethernet RS232 Video Out (VGA 10-bit DAC) Video In (NTSC/PAL/Multi-format) USB 2.0 (type A and type B) PS/2 mouse or keyboard port Line In/Out, Microphone In (24-bit Audio CODEC) Expansion headers (76 signal pins) Infrared port Memory 8-MBytes SDRAM, 512K SRAM, 4-MBytes Flash SD memory card slot Displays 16 x 2 LCD display Eight 7-segment displays Switches and LEDs 18 toggle switches 18 red LEDs 9 green LEDs Four debounced pushbutton switches Clocks 50 MHz crystal for FPGA clock input 27 MHz crystal for video applications External SMA clock input

2
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Partie 1 : Hardware (45 minutes)


Le processeur Nios II est un soft processeur, dfinit avec un langage de description matrielle, qui peut tre implment sur les FPGA Altera en utilisant la suite logicielle Quartus II. Pour implmenter un systme complet, il est ncessaire dajouter dautres lments au processeur, tel que des mmoires, des interfaces dentres/sorties, des temporisateurs (timers) et des interfaces de communications. Un systme complet base de Nios II peut tre implment sur la carte DE2 comme le montre la figure ci-dessous.

Host Computer

USB-Blaster Interface

Cyclone II FPGA Chip

Timer

NIOS II Processor

JTAG Debug Module

JTAG UART Interface

Avalon Switch Fabric

On-Chip Memory

SRAM Interface

SDRAM Interface

Flash Interface

Parallel I/O Interface

Serial I/O Interface

SRAM Chip

SDRAM Chip

Flash Chip

Parallel I/O port lines

Serial I/O port lines

Pour ce premier TP, vous allez uniquement implmenter les priphriques de base qui permettent de raliser des applications simples telles que : - allumer des LEDs squentiellement, - lire les valeurs des interrupteurs et des boutons poussoirs. - afficher des valeurs sur les afficheurs 7 segments - communiquer avec le PC via une liaison srie de type RS232 3
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Au niveau hardware, pour raliser ces applications, vous avez besoin dimplmenter les priphriques suivants (comme le montre la figure ci-dessous) : - Un P et une mmoire pour excuter le programme. - Des entres/sorties dusages gnral (GPIO) pour les LEDs, les interrupteurs, les boutons poussoirs et les afficheurs 7 segments. - Dun temporisateur pour laffichage squentiel sur les LEDs - Dun UART pour les transmissions sries.

Host Computer

USB-Blaster Interface

Cyclone II FPGA Chip

Timer

NIOS II Processor

JTAG Debug Module

JTAG UART Interface

Avalon Switch Fabric

SRAM Interface

Switches and Key parallel input interface ..

Red and Green LEDs parallel output interface [LEDR17LEDR0] [LEDG7LEDG0]

7 segments parallel output interface

SRAM Chip

..... HEX7 HEX0

[SW17..SW0] [KEY3..KEY0]

4
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Vous allez dcouvrir travers cet exercice la suite logicielle dAltera qui permet de faire du Codesign Hard/Soft. Le sujet de cet exercice contient des instructions trs prcises quil faut suivre rigoureusement pour construire votre systme.
1. Aller sur le lien suivant : https://www.polytech.upmc.fr/~douze/E2i3/CoD/TP/TP1_SOPC_Builder/ et copier le fichier E2i3_TP1_SOPCBuilder.zip sur votre ordinateur. Dzipper ce fichier dans un rpertoire CoD que vous aurez crer au pralable sur votre disque rseau (H:\CoD\). 2. Lancer QuartusII : Demarrer Programmes Programmation ALTERA Quartus II 10.1 Quartus II 10.1 (32 bit). Sur la page daccueil, Cliquez sur Create a New Project afin de crer un nouveau projet. Dans cette premire page, cliquez sur Next, sur la seconde page, vous devez choisir le nom de votre projet et son rpertoire de travail. A la premire ligne, slectionnez le rpertoire prcdemment copi sur le disque H (H:\CoD\E2i3_TP1_CoD_SOPCBuilder). Pour le nom, choisissez TP1. 3. Cliquez sur Next, dans cette page vous pouvez ajouter des fichiers (vhdl ou verilog) votre projet. Dans cet exercice, vous allez partir de zro (from scratch) pour construire votre systme donc vous navez aucun fichier rajouter. 4. Cliquez sur Next, sur cette page, vous devez choisir le composant programmable (FPGA, CPLD) sur lequel vous allez implmenter votre circuit numrique. La carte DE2 est munie dun FPGA Cyclone II EP2C35F672C6, choisissez ce composant dans la liste des composants proposs comme le montre la figure cidessous. Ce numro est toujours crit sur la partie visible des composants programmable.

5
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

5. Cliquez sur Next, dans cette page vous avez la possibilit de spcifier lutilisation dautres outils logiciels (que ceux dAltera) pour raliser la simulation ou la synthse. Il est par exemple possible dutiliser Modelsim (Mentor Graphics) pour faire les simulations la place de loutil de simulation propos par Altera. Pour cet exercice, laissez la page tel quel et cliquez sur Next. 6. Dans la dernire page, vous avez une synthse des choix que vous avez faits dans les pages prcdentes, vrifiez que vous vous ntes pas tromp et cliquez sur Finish.

7. La synthse des circuits numriques demande beaucoup de calculs et de ressources processeur et peuvent prendre beaucoup de temps. Pour diminuer au maximum les temps de synthse, all dans le menu Assignements Settings, slectionnez la section Compilation Process Settings dans la fentre Category, ensuite vrifier que la case Use Smart Compilation est coche. Valid et termin en cliquant sur OK.

6
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

8. Une fois que ceci est bien vrifi, vous allez commencer construire votre systme. Dmarrer SOPC Builder en allant sur Tools SOPC Builder ou en cliquant sur licne suivante : La fentre Create New System souvre, remplissez le champ System Name avec le nom de votre systme (utilisez imprativement le nom niosII). Vous pouvez aussi choisir le langage HDL de votre choix, VHDL dans votre cas. Valider en cliquant sur OK. Renommez lhorloge clk en clk_in et fixer la valeur 50 MHz.

9. Vous allez commencer par ajouter le processeur Nios II votre systme. Dans la fentre de gauche, slectionnez le Processors Nios II processor et cliquez sur le bouton Add Vous avez la possibilit de slectionnez la version du cur : conomique (Nios II/e), standard (Nios II/s) ou rapide (Nios II/f, f comme fast). En fonction de ce choix, vous avez un processeur plus ou moins puissant mais qui prend aussi plus ou moins de place sur le FPGA. Slectionnez la version fast du cur : Nios II/f (f comme Fast) 7
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Dans longlet JTAG Debug Module, vous avez la possibilit de choisir les capacits de dbogage du processeur travers la liaison JTAG. Slectionnez loption Level 1. Comme indiqu, le Level 1 vous permet de vous connecter avec la cible travers la liaison JTAG (JTAG Target Connection) de tlcharger le code sur la cible (Download Software), davoir des points darrts software (Software Breakpoints). Comme pour le choix de la version du processeur, plus vous choisissez de capacit de mise au point (dbogage), plus cela prendra beaucoup de place sur la matrice FPGA. Cliquez sur le bouton Finish et renommez le priphrique en cpu (bouton droit sur le nom du priphrique et choisir Rename).

10. Ensuite vous allez rajouter linterface pour la mmoire SRAM votre systme. Ce priphrique a t ralis sur mesure pour la carte DE2, on parle alors de Custom peripheral. Cette mmoire externe permet de stocker le code et les donnes pour le processeur. Dans la catgorie University_Program Memory slectionnez llment SRAM/SSRAM Controller et cliquez sur le bouton Add Cliquez sur Finish et renommez le priphrique en ext_SRAM. 11. Ensuite, vous allez rajouter linterface srie qui permet de tlcharger et dbugger le code sur la cible, cette interface permet galement de communiquer avec le PC. Dans la catgorie Interface Protocol et ensuite Serial, slectionnez llment JTAG UART et cliquez sur le bouton Add Cliquez sur Finish et renommez le priphrique en jtag_uart. 8
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

12. Ensuite vous allez rajouter linterface pour les afficheurs 7 segments. Ce priphrique est galement un Custom Peripheral. Dans la catgorie Project, slectionnez llment Display DE2 Seven Segs Driver et cliquez sur Add Cliquez sur Finish et renommez le priphrique en seven_seg. 13. Ensuite, vous allez rajouter linterface pour les LEDs. Dans la catgorie Peripherals et ensuite Microcontroller Peripherals, slectionnez llment PIO (Parallel I/O) et cliquez sur le bouton Add Choisissez une taille de 18 bit avec le mode Output. Cliquez sur Finish et renommez le priphrique en LEDR. Refaites la mme opration pour les LEDs Vertes. En choisissant 8 bit au lieu de 18 bit et en le renommant LEDG. 14. Ensuite, vous allez rajouter les interfaces pour les boutons poussoirs (KEY) et pour les interrupteurs (Switch). Dans la mme catgorie Peripherals et ensuite Microcontroller Peripherals, slectionnez encore llment PIO (Parallel I/O) et cliquez sur le bouton Add Choisissez une taille de 3 bit avec le mode Input. Cliquez sur Finish et renommez le priphrique KEY. 15. Refaites la mme opration pour les interrupteurs (Switch). En choisissant 18 bit au lieu de 3 bit et en le renommant Switch. 16. Ensuite, vous allez rajoutez les temporisateurs qui vont vous permettre de faire des oprations squentielles sur les LEDs. Dans la catgorie Peripherals et ensuite Microcontroller Peripherals, slectionnez llment Interval Timer et cliquez sur le bouton Add Laissez les paramtres par dfaut et cliquez sur Finish. Renommez le priphrique en sys_clk_timer. Refaites la mme opration pour un deuxime timer de plus grande prcision. Modifiez lunit de la priode en sec et cliquez sur Finish. Renommez le priphrique en high_res_timer (il sera utilis dans les prochains exercices pour mesurer le temps dexcution de certaines fonctions). 17. Ensuite, vous allez rajoutez linterface srie (UART) qui va vous permettre de communiquer avec un PC ou une autre cible. Dans la catgorie Interface Protocols et ensuite Serial, slectionnez llment UART et cliquez sur le bouton Add Laissez les paramtres par dfaut et cliquez sur Finish. Renommez le priphrique en uart. 18. Pour sassurer que toutes les adresses de base sont valides et bien align, allez dans le menu System et cliquez sur Auto-Assign Base Addresses. 19. Pour sassurer que les IRQ (interruptions) ne sont pas en conflit, allez dans le menu System et cliquez sur Auto-Assign IRQs. 20. Dans la colonne Module Name Double cliquez sur le cpu (Nios II) dj rajout votre systme. En bas de cette page, vous allez slectionner les adresses de reset et dexception. Slectionnez ext_SRAM pour Reset Vector et ext_SRAM pour Exception Vector. Ensuite cliquez sur le bouton Finish.

9
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Aprs toutes ces oprations, votre systme devrait ressembler ceci :

21. Vous pouvez maintenant cliquez sur le bouton Generate. SOPC Builder va vous demander si vous voulez sauvegarder le systme. Ensuite le logiciel va gnrer votre systme Nios II fait sur mesure. Cette opration consiste a gnr tout le code HDL des IP que vous avez instanci dans SOPC Builder. Cette opration prend un certain temps, pour viter de perdre du temps, pass la suite avant dattendre la fin de la gnration. 22. Retournez dans Quartus II. Dans la suite, vous allez instancier le composant cr avec SOPC Builder avec les entres/sorties du FPGA. Pour cela, vous allez utiliser loutil graphique de Quartus II. Crez un New, choisissez Design Files Block nouveau fichier graphique en allant sur File DIagram/SChematic File comme type de fichier. Enregistrez le sous le nom TP1.bdf dans le mme rpertoire que le projet. 23. Quand SOPC Builder aura termin, vous allez instanciez le systme dans le fichier TP1.bdf. Dans ce schma, double cliquez nimporte o. Ceci ouvre la fentre de Symbol. Dvelopper le rpertoire Project et slectionner le symbole niosII.

10
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

24. Cliquez sur le bouton OK et placez le symbole dans le schma comme indiqu ci-dessous.

25. Maintenant il faut connecter les entres/sorties du composant niosII avec les entres/sorties du FPGA. Pour cela, vous allez utiliser les noms attribus dans le fichier dassignement. Double cliquez nimporte o. Ceci ouvre la fentre de Symbol. Dvelopper le rpertoire c:/altera/10.1/quartus/libraries ensuite primitives et puis pin, slectionnez input.

11
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

26. Cliquez sur OK et placez ce port dentre gauche du composant niosII, en face de la clk_in. Double cliquez sur le port et renommer le CLOCK_50 (nom utilis pour lentre de lhorloge de 50 MHz dans le DE2_pin_assignement.csv). 27. Ensuite il faut faire la connexion en cliquant sur licne lentre clk_in du niosII. et relier le port dentre CLOCK_50 avec

28. Pour les ports de plusieurs bits, il faut faire diffremment. Par exemple pour lentre Switch qui est sur 18 bits. Il faut faire la mme manipulation que les tapes 28 et 29 mais pour la nomination du port, il faut crire SW[17..0] pour prciser quil sagit dun vecteur de 18 bits. Pour la connexion il faut choisir licne suivante : .

29. Il faut connecter lentre reset_n avec un des boutons poussoir de la carte. On doit reli KEY[0..0] avec reset_n et KEY[3..1] avec lentre KEY du composant niosII. Comme le montre limage ci-dessous.

30. Pour lentre de lUART, il faut choisir le nom UART_RXD.

31. Pour les sorties, choisir output au lieu de input. Il y a un seul port bidirectionnel qui est le bus de donnes de la mmoire SRAM (sram_dq). Pour celle-ci il faut choisir un port de type bidir. Pour toutes les autres sorties, voir ci-dessous les noms quil faut choisir en conformit avec lassignement des pins. Pour les afficheurs 7 segments, il faut intercaler un inverseur logique. Pour cela, cliquez sur licne et allez dans primitives logic not.

12
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

32. Une fois que vous avez connect toutes les entres/sorties de votre FPGA dans le composant schmatique TP1.bdf, il faut ajouter ce composant votre projet et le choisir comme top-level de votre design. Pour cela, allez dans longlet Files du Project Navigator. Click droit sur le rpertoire Files et slectionnez Add/Remove Files in your project, ajoutez le TP1.bdf et cliquez sur Add puis OK. Ensuite click droit sur le TP1.bdf et choisir Set as top-level entity. 33. Maintenant il va falloir connecter les entres/sorties du composant cre avec SOPC Builder avec les entres/sorties du FPGA. Pour faciliter cette tache, nous vous fournissons un fichier de configuration (DE2_pin_assignements.csv) qui attribut un nom explicite chaque numro de pin du FPGA conformment limplmentation du FPGA sur la carte DE2. Pour importer cette configuration dans Import Assignements et choisissez le fichier votre projet, allez sur Assignements DE2_pin_assignements.csv. Pour vrifier que limportation a bien t effectue, allez dans Assignements Pin Planner. 34. Maintenant, vous pouvez faire la synthse de votre design. Depuis le menu Processing, slectionnez Start Compilation ou alors, cliquez directement sur licne . Aprs quelques minutes, la fentre Compilation Report - Flow summary apparait et vous donne les rsultats de la synthse et du placement routage. Cette page vous renseigne sur la place occupe par votre design dans le FPGA : Le nombre dlments logiques utiliss (Total Logic element) Le nombre de registres (Total Registers) Le nombre de pins (Total Pins) Lespace mmoire utiliss (Total Memory bits) Le nombre de multiplieur utiliss (Embedded multiplier 9-bit) Le nombre de PLL 13
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

35. Assurez-vous que la carte est alimente. Connectez la carte votre PC avec le cble USB (connecteur BLASTER de la carte DE2 et pas DEVICE). Lancez le programmateur depuis le menu Tools Programmer ou licne . Une fentre apparait, cliquez sur OK. Le nom du type de cble (USBBlaster) doit apparaitre cots de Hardware Setup Ci ce nest pas le cas, cliquez sur le bouton Hardware Setup. Ensuite slectionnez votre type de cble dans le menu Currently selected hardware. Une fois que votre cble est slectionn, fermer la fentre en cliquant sur Close.

36. Le fichier TP1.sof devrait dj tre slectionn dans la fentre de programmation. Ci ce nest pas le cas, cliquez sur le bouton Add File afin de le slectionner. Cochez la case Program/configure qui correspond votre fichier .sof et ensuite cliquez sur le bouton Start afin de programmer le FPGA. 37. Si tout va bien, le FPGA est maintenant configur. Si vous avez une version limit de la licence une fentre OpenCore Plus Status doit apparaitre, surtout ne pas appuyer sur Cancel. 38. Vous avez maintenant termin la partie Hardware et vous allez passer la partie Software avec loutil Nios II Software Buil Tool for Eclipse qui est un environnement de dveloppement bas sur Eclipse.

14
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Partie 2 : Software (30 minutes)


1. Dans les tapes suivantes, vous allez compiler un programme pour votre systme SOPC, le tlcharger dans la carte et lexcuter. Pour cela, retournez dans SOPC Builder, ouvrir loutil NiosII SBT partir du menu Nios II Nios II Software Build Tool. Au dmarrage on vous demande de slectionner le rpertoire de travail. Choisissez le rpertoire /E2i3_TP1_CoD_SOPC_Builder/software.

2.

Crer un nouveau projet en slectionnant File Template dans la barre des menus.

New

Nios II Application and BSP from

Dans la partie Target Hardware Information, vous devez spcifiez par un fichier .sopcinfo quelle est la cible sur laquelle vous allez dvelopper. Il sagit de la cible que nous venons de crer avec SOPC Builder prcdemment. Naviguez vers le chemin de votre projet afin de slectionner le fichier niosII.sopcinfo. Ensuite choisissez le nom de votre projet (niosII_training_project par exemple). Dans la partie Select Project Template, choisissez Blank Project. Cliquez sur Finish.

15
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

3. Vous avez maintenant crez deux nouveaux rpertoires, un projet C/C++ (nios_training_project) et un projet qui contient les librairies pour votre systme (niosII_training_project_bsp). Cependant, le projet C/C++ est vide et nous devons y ajouter des codes sources. Pour ajouter le fichier simple.c votre projet, dabord dvelopper le rpertoire niosII_training_project. Ensuite naviguer sur votre disque rseau H: et trouver le fichier simple.c (voir dans le rpertoire software). drag and drop le fichier simple.c dans le rpertoire niosII_training_project dans lIDE Nios II comme le montre la figure ci-dessous.

16
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

4. Maintenant, slectionnez le rpertoire niosII_training_project_bsp, faites un click droit et choisissez NiosII BSP Editor. Dans cette page, vous pouvez choisir toutes les proprits de votre systme. Assurez-vous que stdout, stderr et stdin soit configur sur jtag_uart. Ce choix de configuration signifie que le JTAG est la sortie standard de votre systme. Dans ce cas, les fonctions printf() ou scanf() permettent dcrire ou de lire des donnes sur le bus srie du JTAG. Vrifiez que sys_clk-timer soit configur avec sys_clk_timer et que Timestamp_timer soit configur avec high_res_timer. Cliquez sur Generate et ensuite Exit.

17
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

5. Maintenant vous allez compiler le code, pour cela, slectionnez le rpertoire niosII_training_project, ensuite avec le clic droit slectionnez Build Project ou alors cliquez sur licne suivante : Note : Vous pouvez faire en sorte que la compilation soit faite en arrire plan (background), ou alors laisser lexcution de cette tache en premier plan (forground). Lorsque la compilation sexcute en arrire plan, vous avez la possibilit dutiliser loutil pour faire dautres oprations. 6. Aprs que la compilation soit termine, il faut tlcharger le programme sur la cible. Pour cela slectionner le rpertoire niosII_training_project, avec le clic droit slectionnez Run As Nios II Hardware. Note 1 : Si une fentre souvre, allez dans longlet Target Connection et cliquez sur Refresh Connections et dans System ID Check cochez les deux cases Ignore Mismatched System ID et Ignore Mismatched System TimeStamp et enfin cliquez sur Run

Cette commande va tlcharger le programme vers la cible et lexcuter. Vous devriez observer sur la console le message Hello World ! Vous devriez galement voir les LEDs vertes clignoter. Maintenant modifiez la valeur sur les interrupteurs et vrifiez que le rsultat est recopi sur les LEDs rouges. Dans le programme simple.c, vous avez des fonctions qui permettent de lire ou dcrire sur les interfaces dentres sorties. Pour la lecture des switch: sw=IORD_ALTERA_AVALON_PIO_DATA(SWITCH_BASE);
Pour lcriture sur les LEDR : IOWR_ALTERA_AVALON_PIO_DATA (LEDR_BASE,sw);

Dans les 2 cas le paramtre NOM_DU_PERIPHERIQUE_BASE correspond ladresse du priphrique dans lespace adressable du Nios II. Vous pouvez retrouver la valeur de cette adresse dans le fichier system.h. Ce fichier renseigne sur les paramtres de votre systme. Pour louvrir, allez sur le rpertoire NiosII_training_project_bsp System.h Par exemple, relevez ladresse de SWITCH_BASE et vrifiez que cest bien la mme que celle spcifi dans SOPC Builder. Le priphrique SEVEN_SEG est compos de plusieurs registres dcriture pour cette raison il faut rajouter un offset dans ladresse pour crire sur les diffrents registres du priphrique. Pour avoir plus de dtail sur ce priphrique, vous pouvez examiner le code VHDL de ce
18
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

priphrique (voir le fichier de2_sevensegs.vhd dans le rpertoire de2sevensegs). En effet, ce priphrique nest pas fourni par Altera, il a t fait sur mesure pour la carte DE2. 7. Maintenant, vous allez tester le debugger. Lancer le debugger en slectionnant le rpertoire niosII_training_project. Ensuite avec le clic droit slectionnez Debug As Nios II Hardware. Le debugger va se lancer, se connecter et tlcharger le code sur la cible. (Choisir Yes lorsquon va vous demander de changer de perspective pour le debug).

8. Activer laffichage des numros de ligne. Pour cela, allez sur Window dans le menu et ensuite Prfrences. Ouvrir le rpertoire General et ensuite slectionnez Editors Text Editors. Activer le carr Show line numbers et puis appuyer sur OK. 9. Positionnez des points darrts sur les lignes 27 e 31. Pour positionner un point darrt, il suffit de placer le curseur dans la partie grise gauche des numros de ligne et faire un double click. Un petit rond bleu doit normalement apparaitre cots du numro de ligne indiquant quun point darrt a t positionn. Cliquez sur le bouton resume . Le programme sarrte sur le premier point darrt la ligne 27. 10. Maintenant, slectionnez la fentre Variables et visualiser la valeur de la variable sw. Pour afficher la valeur en hexadcimal, slectionnez la variable sw, avec un clic droit choisissez
19
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Format et ensuite Hexadcimal. Vrifiez que la valeur de sw correspond la position des interrupteurs sur la carte DE2. Afficher galement la valeur de GreenLed en hexadcimal. 11. Vous pouvez galement faire du pas pas avec le debugger. Pour cela appuyer sur licne suivante : 12. En faisant du pas pas, vous devriez voir la valeur de GreenLed tre invers et les LEDs vertes steindre sur la carte. 13. Changez la position des interrupteurs et en cliquant sur licne change en consquence. , vrifiez que la valeur de sw

14. Pour arrter le debugger. Allez dans le sous-menu Debug, ensuite faire un clic droit sur le nom du projet logiciel qui est en train dtre debugger et slectionnez Terminate and Remove.

15. Pour revenir la fentre de lIDE, cliquez sur la double flche en haut droite de lcran et slectionnez Nios II

20
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Partie 3 : Exercices (45 minutes)


Aprs avoir test le programme donn en exemple simple.c qui envoie un message sur la liaison srie, qui recopie les valeurs des interrupteurs sur les LEDs rouges, qui fait clignoter les LEDs vertes et qui affiche des valeurs quelconques sur les afficheurs 7 segments, modifier ce code pour rpondre aux questions suivantes : 1. Envoyez de manire continu la valeur des interrupteurs (sw) sur la console (avec la fonction printf()) et gnrez un chenillard sur les LEDs vertes. 2. Ecrire un programme qui permet de commander la valeur des LEDs vertes, des LEDs rouges et les valeurs afficher sur les afficheurs 7 segments partir de la console de lIDE. Pour cela il faut utiliser la fonction scanf(). Pour que les commandes soient dcodes correctement par la cible, il faut inventer un codage explicite. Par exemple : pour afficher la valeur 100 sur les LEDs vertes, envoyer la commande g 100 (g comme green) pour afficher la valeur 100 sur les LEDs rouges, envoyer la commande r 100 (r comme red) pour afficher la valeur 3 sur lafficheur HEX0, envoyer la commande h0 3. pour afficher la valeur 9 sur lafficheur HEX5, envoyer la commande h5 9. Etc 3. Faire un chenillard sur les LEDs vertes command en vitesse par les boutons poussoirs (KEY). Par exemple, le dfilement du chenillard sacclre si vous appuyez sur le bouton poussoir KEY [3], et le dfilement ralentit si vous appuyez sur le bouton poussoir KEY [2]. Attention ! les boutons poussoir sont ltat haut au repos et KEY [0] est utilis comme reset du systme.

21
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Custom Peripherals
Cette partie consiste reprendre larchitecture matrielle cre pendant la premire partie et y rajouter un priphrique personnalis (Custom Peripheral) qui va permettre de commander les LEDs vertes en intensit. Pour apprendre crer un priphrique personnalis avec la suite logicielle dAltera, vous allez fabriquer un priphrique PWM qui va permettre de commander les LEDs vertes en intensit. Au lieu de les commander en tout ou rien, vous allez pouvoir commander lintensit lumineuse des LEDG en modifiant le rapport cyclique du priphrique PWM.

Pour raliser ce priphrique, on vous fournit le code VHDL du composant. Avant de commencer, examiner le code VHDL de ce priphrique (avalon_pwm.vhd) afin de comprendre comment il fonctionne. Dans les tapes suivantes, vous apprendrez comment insrer ce priphrique dans SOPC Builder, comment lajouter votre systme et comment doit tre crit le code C qui permet dutiliser ce priphrique. Dans une deuxime partie vous allez crire un programme qui permet de gnrer un battement de cur (HeartBeat) sur les LEDs vertes.

22
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

Partie 4 : Cration dun priphrique personnalis : Custom Peripheral (30 minutes)


1. Dans SOPC Builder sur la colonne Use de la liste des priphriques de votre systme. Dslectionnez la case correspondant aux LEDs vertes (LEDG). Nous dslectionnons ce priphriques car nous allons maintenant piloter les LEDs partir du priphrique PWM que vous allez crer dans cette partie. 2. Vous allez maintenant crez un composant pour SOPC Builder partir du code VHDL. Dans le menu File, slectionnez New Component et allez vers longlet HDL Files. 3. Cliquez sur Add et naviguer vers le fichier avalon_pwm.vhd. Cliquez sur Open. 4. SOPC Builder excute lanalyseur de Quartus II pour vrifier quil ny a pas derreur de syntaxe dans le code. Cliquez sur Close. 5. Assurez-vous que le Top Level Module pointe bien sur avalon_pwm.

23
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

6. Allez sur longlet Interfaces, dans la section Avalon Slave Settings, positionnez les valeurs de Read Wait et Write Wait 0. 7. Allez sur longlet Signals, pour le signal nomm out_port de la colonne Name, dans la colonne Interface, en face de out_port, slectionnez new Conduit 8. Positionnez la colonne Interface et la colonne Signal Types comme dans la figure ci-dessous :

Longlet Interface permet de dfinir les interfaces de votre composant, dans votre cas, vous avez 2 interfaces : Une interface export_0(Conduit Output) qui correspond la sortie de votre module PWM et qui sera connect avec les LEDs - Une interface avalon_slave_0(Avalon Slave) qui correspond linterface connect avec le bus avalon. Le paramtre slave est mentionn car votre priphrique ce comporte en temps quesclave de votre systme. Il ne fait quexcuter des ordres, il nen donne pas. Longlet Signals permet de dfinir les connexions entre les ports dentres/sorties de lentit de votre composant avalon_pwm et les signaux du bus avalon.

24
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

9. Allez sur longlet Library Info, et observez les paramtres par dfauts. Positionnez le champ Group sur Peripherals/Microcontroller Peripherals. Ce paramtre reprsente la catgorie dans laquelle sera rang votre composant dans SOPC Builder. Ce sera lendroit ou vous devrez aller chercher votre composant pour lincorporer votre systme. Dans cet onglet vous pouvez galement rajouter des renseignements sur ce priphrique, comme lauteur ou une url vers la documentation technique, etc Cliquez sur Finish et ensuite sur Yes, Save 10. Maintenant, dans SOPC Builder allez dans le menu File et slectionnez Refresh Component List. 11. Localisez le composant avalon_pwm que vous venez de crer et ajoutez le votre systme (Si vous avez bien suivit les instructions, il devrait tre dans la catgorie Peripherals Microcontroller Peripherals). Renommer le en avalon_pwm_inst. 12. Avant de gnrer le systme, il est prfrable de raligner les adresses. Pour cela, allez dans System Auto Assign Base Adress. 13. Cliquez sur le bouton Generate pour rgnrer votre systme. 14. Une fois que le systme a t rgnr, allez sur lditeur schmatique de Quartus II. Slectionnez le composant niosII et avec le clic droit slectionnez Update Symbol or Block. Vous devriez observer que les ports sur le symbole ont chang en relation avec les changements que vous avez faits dans SOPC Builder. Il est possible que certaine connexion soient incorrectes aprs la mise jour du symbole, modifier le schma afin de rtablir ces connexions. 15. Sauvegard le schma mis jour (File Save), et faites la synthse du nouveau design en cliquant sur Cliquez sur Ok quand la synthse est termin avec succs. .

16. Ouvrez le programmateur en cliquant sur . Cochez la case Program/Configure, et cliquez sur le bouton Start pour implmenter le circuit dans le FPGA. 17. Dans SOPC Builder, ouvrez Nios II SBT (Nios II projet en allant dans le menu File et slectionnez New Nios II Software Build Tool), crer un nouveau NiosII Application and BSP Template.

18. Slectionnez le bon fichier niosII.sopcinfo. Choisissez niosII_pwm_project comme nom pour votre projet. Dans la partie Select Project Template, slectionnez Blank Project et cliquez sur Finish. Pour la suite, on vous a fournit les programmes qui permettent dutiliser votre nouveau priphrique avalon_pwm. Ouvrez et examinez le fichier pwm.c et le fichier altera_avalon_pwm_regs.h qui se trouve dans le rpertoire source_pwm. Vous remarquerez que lon vous a fournit un fichier .h qui dfinit quatre fonctions qui permettent de venir lire ou crire dans les registres duty et divider. Ces fonctions permettent de venir modifier les paramtres de votre priphrique. En loccurrence, ici cela permet de venir modifier la priode et le rapport cyclique de votre signal PWM de sortie. 19. Utilisez lexplorateur Windows et naviguer vers le rpertoire source_pwm. Glisser et dposer le fichier pwm.c et le header qui laccompagne altera_avalon_pwm_regs.h vers le rpertoire niosII_pwm_project dans lEDS Nios II. 20. Avant de compiler il faut rgnrer le BSP qui a t lgrement modifi par lajout du Custom Peripheral. Pour cela, clic droit sur le dossier du BSP et slectionnez NiosII Generate BSP 25
E2i3 : UE Codesign Y. DOUZE

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

21. Slectionnez le rpertoire niosII_pwm_project et avec le clic droit slectionnez Build Project et ensuite cliquez sur Run in Background. 22. Aprs que la compilation soit termine, slectionnez Run As Nios II Hardware.

23. Le message Application - PWM devrait apparaitre dans la console de lIDE. Suivit par la question Please enter an LED intensity between 1 to 4 (0 to exit). 24. Cliquez avec la souris sous le texte afin dy placer le curseur. Ajuster lintensit des LEDs en tapant 1, 2, 3 ou 4 suivit par la touche Entre. 25. Si vous tapez 0 sur votre clavier, cela terminera le programme.

Partie 5 : Battement de cur : HeartBeat (30 minutes)


Dans cette cinquime partie, le but est d'afficher sur les vertes LEDs de la carte DE2 un coeur qui bat (HeartBeat en anglais). Pour cela, il faut moduler l'intensit perue par les diodes luminescente par une fonction triangulaire comme ci-contre. Il n'est pas demand une priode trs prcise, mais une variation autour de 1 hertz (entre 0.5 et 2 Hz par exemple).
~ 1 second
Intensity
100%

Ton

Remarque : dans la pratique, l'intensit lumineuse perue n'est pas une fonction linaire, mais nous ngligerons ceci pour cette application simple. Pour que lil ne voit pas les allumages et extinctions de la LED, il faut que la priode Ton+Toff soit suffisamment faible. Une frquence d'au moins 50 Hz (Ton+Toff < 20 ms) suffit. D'un autre ct, on vitera galement les priodes trop courtes peu compatibles avec les temps de commutation de l'lectronique de commande, et gnratrices d'interfrences. Un bon choix se situe entre 60 Hz (16.7 ms) et 400 Hz (2.5 ms). Pour gnrer des tempos, il est conseill dutiliser la fonction usleep() que vous avez dj utilis dans le TP1. Si vous utilisez usleep(), ne pas oublier de rajouter la librairie unistd.h (#include unistd.h). Ecrivez le programme HeartBeat.c qui permet de rpondre ce cahier des charges.

Partie 6 : Priphrique personnalis et paramtrable (30 minutes)


Dans cette partie du TP, on dsire rendre le priphrique avalon_pwm paramtrable afin de pouvoir choisir le nombre de bits de sortie lors de linstanciation du priphrique dans SOPC_Builder. 1. Pour cela, il faut modifiez le code VHDL du composant avalon_pwm afin de le rendre gnrique. Dans un premier temps, faites une copie du fichier avalon_pwm.vhd et renommer le en avalon_pwm_generic.vhd (renommer galement lentit du composant en avalon_pwm_generic). Ensuite modifier le code de ce composant en rendant la taille du vecteur de sortie out_port modifiable grce un paramtre gnrique N. 26
E2i3 : UE Codesign Y. DOUZE

0%

Toff

PolytechParis UPMC

TP1 : Conception avec Nios II & SOPC Builder

2. Crez un nouveau composant dans SOPC Builder en suivant les mmes tapes que dans la partie 4 du TP. Vous devriez remarquer que dans ce nouveau composant il est possible de paramtrer la taille du vecteur de sortie. 3. Dans SOPC Builder, slectionnez Files Refresh Component List

4. Ensuite, remplacez le priphrique LEDR par votre nouveau composant avalon_pwm_generic et choisissez 18 pour la taille du vecteur de sortie (N). 5. Gnrer votre systme dans SOPC Builder, mettez jour le composant niosII dans le schma de Quartus II et rparer les connexions qui ont t cass, faites la synthse dans Quartus II et chargez le circuit sur le FPGA. 6. Dans lIDE Nios II, modifiez le code C afin de gnrer un cur qui bat sur les LEDs rouges. 7. Compilez et testez votre code sur la cible.

Partie 7 : Configuration individuelle de chaque sortie PWM (30 minutes)


Dans cette partie, on dsire crer un composant sur lequel il y a plusieurs sorties PWM (8 par exemples) mais sur lequel on puisse configurer chaque canal individuellement. Au lieu que toutes les sorties PWM aient le mme rapport cyclique, on dsire pouvoir configur le rapport cyclique de chaque sortie individuellement. 1. Pour cela, il faut modifiez le code VHDL du composant avalon_pwm. Dans un premier temps, faites une copie du fichier avalon_pwm.vhd et renommer le en avalon_pwm_8_channels.vhd. Ensuite il faut modifier le code de ce composant afin de pouvoir configurer la priode et le rapport cyclique de chaque sortie individuellement. Pour cela, il faut changer la taille du bus dadresse car les deux registres DIV et DUTY ne suffisent plus pour configurer individuellement chaque sortie PWM. Pour configurer individuellement chaque sortie PWM il faut autant de registre DIV et DUTY que de sorties PWM. Si on choisit 8 sorties PWM, il faut alors 16 registres internes. Ensuite, il faut choisir une adresse pour chaque registre. On choisit par exemple que les 8 adresses basses (0 7) soient rserv pour les registres DIV et les 8 adresses hautes (8 15) pour les registres DUTY. 2. Crez un nouveau composant dans SOPC Builder en suivant les mmes tapes que dans la partie 1 du TP. 3. Ensuite, remplacez le priphrique LEDG par votre nouveau composant avalon_pwm_8_channels. 4. Gnrer votre systme dans SOPC Builder, mettez jour le composant niosII dans le schma de Quartus II et rparer les connexions qui ont t cass, faites la synthse dans Quartus II et chargez le circuit sur le FPGA. 5. Dans lIDE Nios II, modifiez le code C afin de gnrer un cur qui bat sur les LEDs vertes. 6. Compilez et testez votre code sur la cible.

27
E2i3 : UE Codesign Y. DOUZE