TP N 8 : Utilisation du NIOS 2006-2007 Attention! La taille des projets sous Quartus/SOPC-Builder est énorme : comptez entre 30 et 40Mo par projet. Il est donc très fortement conseillé de faire le ménage sur votre compte avant de commencer le TP/projet. 1 Prise en main de Quartus et SOPC-Builder 1.1 Lancement de Quartus II L outil est accesible par le menu Emulateurs Altera Quartus II 4.0.Un fois le programme lancé, sélectionnez File open project, et ouvrez le projet standard.qpf du répertoire nios_20mhz. Une nouvelle fenêtre contenant la représentation schématique de l architecture associée au projet doit alors apparaître. Cette architecture contient un composant std_1s10 qui contient un processeur Nios-II et tous ses périphériques. 1.2 L outil SOPC-Builder C est l outil SOPC-Builder qui permet de configurer et de générer la description matérielle (en VHDL) du processeur et de ses périphériques. Il génère également le code (en assembleur et en langage C) d un système d exploitation minimal (chargeur, entrées-sorties par liaison série) qui sera compilé puis exécuté sur le processeur Nios II. Pour accéder à SOPC-Builder, il suffit de double cliquer sur le composant standard, vous pourrez alors visualiser les différents composants du système ainsi que leurs configuration (adresses de base, numéro d interruption, etc.) comme indiqué figure 1. L utilisateur dispose d une bibliothèque de composants prédéfinis, et peut y ajouter ses propres modules. Tous les périphériques du système, ainsi que certains de leurs paramètres de configuration, sont visibles. Figure 1 : La fenêtre principale de SOPC-Builder S. Derrien 1/6
La configuration de SOPC-Builder visible à l écran n intègre pour l instant qu un petit sousensemble des périphériques disponibles sur la carte (CPU, SRAM et JTAG), notre objectif étant d intégrer à ce système un accélérateur matériel de filtrage numérique sous la forme d un périphérique de bus Avalon 1.3 Création d un périphérique Pour créer un nouveau périphérique, vous allez cliquer sur la commande create new component en haut à gauche de la fenêtre SOPCBuilder, dans l onglet system content. Un boite de dialogue intitulée Component Editor doit alors s afficher. Pour créer votre composant Avalon, vous allez suivre les directives suivantes : 1. Dans l onglet HDL files, vous allez ajouter tout les fichier nécessaires à la mise ne œuvre du composant (iir_periph.vhd, iir_fifo.vhd, les FIFOs, les fichier contenant l UT, l UC, etc.) 2. Dans l onglet signal vous allez associer les signaux du périphérique à ceux du bus Avalon (ils ont normalement le même nom), et indiquer que tous ces signaux concernent l interface avalon_slave_0. 3. Dans l onglet interface vous paramétrer le fonctionnement (protocole) de l interface, en particulier : a. Configurer le Slave Adressing Mode en Registers b. Régler les paramètres Avalon Slave Timing de manière à ce que les chronogrammes représentés au dessous correspondent exactement à ceux utilisés dans le TP7. 4. Dans l onglet component wizard, vous allez affecter un nom (iir_periph) et une catégorie (DIIC_ARC) à votre nouveau composant, puis vous cliquerez sur le bouton Finish. Vous devriez alors pouvoir constater qu un nouveau composant est disponible dans le volet gauche de l onglet system content. 1.4 Ajout d un périphérique au système Pour ajouter une nouvelle instance de notre périphérique au système, vous allez simplement double-cliquer sur le composant iir_periph crée au paragraphe précédent. Un nouveau module nommé iir_periph_0 doit alors apparaître, et le contenu du système doit correspondre à la saisie d écran donnée ci-dessous. Pour pouvoir utiliser cette nouvelle configuration matérielle, il faut régénérer entièrement la description matérielle (en VHDL) du système et les définitions/pilotes logiciels (en C). Pour cela, il suffit de cliquer sur la commande «generate». Attention! Cette étape dure en général plusieurs minutes. S. Derrien 2/6
2 L environnement de développement pour le Nios II 2.1 Présentation de l IDE L environnement que nous allons utiliser est basé sur Eclipse, il permet de gérer l édition, la compilation l exécution et le déboguage d une application NIOS-II écrite en langage C. Une vue de la fenêtre principale est donnée figure 2. La zone de console permet de visualiser les résultats de compilation et d exécution. Le navigateur permet de se repérer dans les différents fichiers du projet. Figure 2 : Environnement Eclipse pour NIOS-II A chaque projet est associé une «system library» qui contient les pilotes de périphériques associés à une configuration matérielle spécifique. Dans notre cas, nous disposons de la librairie testtp7_syslib qui a été généré à partir de SOPC-Builder. 2.2 Développer un programme pour le NIOS-II 2.2.1 Présentation On travaille ici sur un processeur «embarqué» qui ne dispose pas d un système d exploitation complet. Certaines des fonctionnalités disponibles sur une machine «desktop» ne sont donc pas disponibles (pas de processus, un seul programme, pas de protection mémoire, etc.) 2.2.2 Importer et configurer le projet 1. Dans le menu File, sélectionnez la commande import, puis l option Existing Altera Nios II project. 2. Choisissez alors le répertoire test_tp7 dans software. 3. Dans le menu file, faites ensuite new, sélectionnez System Library, choisissez comme nom tp7_syslib, sélectionnez le fichier nios_20mhz/std_1s10.ptf, puis cliquez sur finish. Sélectionnez le projet test_tp7 dans la partie gauche de la fenêtre, ouvrez le menu project et sélectionnez le choix properties, modifiez le champ associated system library de manière à l affecter à test_tp7_syslib, puis validez. S. Derrien 3/6
2.2.3 Editer et compiler le projet Sélectionnez le projet test_tp7, et visualisez le contenu du programme nios.cpp, que vous avez normalement complété au TP n 7. Pour compiler le projet, sélectionnez simplement la commande «build project» du menu «project». La compilation va produire un fichier.elf qui est en fait l image de l exécutable qui sera ensuite copié vers la mémoire locale de la carte. 2.3 Simuler l exécution d un programme par le NIOS Avant de tester in-situ votre système, vous allez effectuer une simulation VHDL de l ensemble du système. Pour ce faire, sélectionnez la commande «run as/nios Modelsim» du menu «project». Cette commande va lancer le simulateur Modelsim, qui va nous permettre de simuler le VHDL de l ensemble du système (NIOS, bus, mémoire, etc.). 1. Une fois le shell de Modelsim ouvert, saisissez la commande s (suivi de entrée), Celleci va compiler l ensemble des fichiers VHDL du projet et lancer la simulation. 2. Tapez ensuite la commande jtag_uart_drive, une fenêtre console nios2-terminal ve s ouvrir, elle vous permet de simuler le fonctionnement des entrées-sorties standard 3. Pour vous aider à visualiser les signaux les plus importants (c.a.d les signaux de bus en entrée de notre périphérique iir_periph_0) vous pouvez utiliser le script test_tp7.do qui se lance par la commande do../test_tp7.do. 4. Tapez ensuite la commande run 10 ms Une fois la simulation terminée, vous devriez pouvoir observer dans la console les messages affichés par le NIOS ; de même la fenêtre waveform doit vous permettre d observer les transactions apparues sur votre périphérique IIR_PERIPH_0. NB : Si vous n observez rien sur le bus du périphérique, continuez la simulation quelques dizaines de millisecondes. Si vous souhaitez relancer la simulation avec un programme différent pour el NIOS, il faut : 1. Recompiler le programme dans l IDE du NIOS II 2. lancer les commande restart, jtag_uart_drive et run 10 ms dans la fenêtre shell de Modelsim. Remarque : à la différence des la simulation au niveau transaction mise en œuvre au TP précédent, la simulation est ici précise au niveau cycle (on simule le VHDL du processeur NIOS qui exécute son programme stocké dans un composant mémoire VHDL). Elle est donc beaucoup plus lente et plus longue. S. Derrien 4/6
3 Compilation et exécution sur la carte 3.1 Compilation de l architecture et configuration du FPGA 3.1.1 Synthèse & placement routage Une fois la génération du système effectuée, vous allez implanter l architecture sur le circuit. Cette implantation (abusivement appelée «compilation») se décompose en plusieurs étapes : 1. La synthèse logique, qui convertit la description VHDL de l architecture en un ensemble de blocs logiques élémentaires, qui correspondent à la structure interne du circuit. 2. Le placement/routage qui va placer ces blocs logiques sur le circuit spécifié, puis qui les reliera entre eux au moyen du réseau d interconnexion programmable du circuit. 3. La génération du fichier de configuration (fichier au format.sof) qui produit un fichier bitstream qui sera téléchargé dans le FPGA. L implantation se lance par le bouton de la barre d action (en haut au milieu). Ici encore cette étape est assez longue (entre 2 et 4 minutes). Attention : il se peut que Quartus détecte des erreurs qui ne soient pas apparues lors de la simulation avec Modelsim (rappelez vous que seul un sous-ensemble de VHDL est synthétisable). 3.1.2 Configuration du circuit La configuration du circuit de la carte se fait au travers du port parallèle de votre machine, en lançant la commande programmer du menu Tools. Une nouvelle fenêtre doit apparaître à l écran. Dans cette fenêtre : - Sélectionnez la commande add file (bouton droit de la souris) pour spécifier le fichier bitsream «.sof» contenant votre configuration (dans notre cas, le nom du fichier est standard.sof) - Cliquez sur le bouton Hardware, suivi de Add hardware, et sélectionnez ByteBlasterII. - Cochez ensuite la case program/configure, puis cliquez sur start programming (icône en haut à gauche) Après quelques secondes, la carte est réinitialisée avec la nouvelle configuration du FPGA (en cas de message d erreur de type «cant t access JTAG chain», coupez, puis rouvrez l alimentation de la carte). Arrivé à ce stade, vous disposez d un circuit contenant un processeur Nios II, associé à divers périphériques. Nous allons maintenant voir comment compiler et exécuter des programmes pour et sur ce processeur. 3.2 Exécuter un programme sur la carte 3.2.1 Recompiler le programme Pour pouvoir faire exécuter votre programme c par le NIOS implanté sur la carte, vous devez modifier les paramètres de configuration du projet : 1. Cliquez sur le projet test_tp7, bouton droit, active build configuratyion debug S. Derrien 5/6
2. Cliquez sur la librairie test_tp7_syslib, bouton droit, active build configuratyion debug. 3. Cliquez sur la librairie test_tp7_syslib, bouton droit, system library properties décocher la case Modelsim only, no hardware support. 4. Relancez la compilation en cliquant sur le projet test_tp7, puis en selectionnant la commande build project. 3.2.2 Lancer l exécution sur la carte Pour lancer l exécution de votre programme, sélectionnez la commande run as/nios hardware du menu contextuel du projet test_tp7. Cette commande va tout d abord télécharger l image de l exécutable (fichier.elf) sur la carte, puis lancer l exécution. Au bout de quelques secondes (après quelque messages d avertissement), la sous fenêtre console doit alors afficher le résultat de l exécution du programme. 3.2.3 Déboguer le programme sur la carte Il est également possible d utiliser le NIOS en mode debug, l environnement offrant une interface graphique au débogueur gdb, qui permet notamment d ajouter des points d arrêts, de surveiller le contenu d une variable, d exécuter en mode pas à pas, etc. Pour l utiliser, il vous suffit de lancer la commande run as/nios hardware du menu contextuel du projet test_tp7. 4 Travail à effectuer Vous allez tout d abord vérifiez le bon fonctionnement de votre composant à l aide d un petit programme en C qui envoie des données en entrée du filtre et récupère les résultats pour les afficher sur la sortie standard. Vous mesurerez ensuite le gain en performance obtenu grâce au périphérique, en comparant la durée d exécution en version logicielle et en version matérielle d un filtrage d un tableau de 100000 échantillons. S. Derrien 6/6