TPs SoC

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 14

Responsable : Pr.

Amine SADDIK Faculté des sciences Appliquées -Ait Melloul


Module : System On Chip Université Ibn Zohr
M1 : SESN 2023-2024

System On Chip
Travaux pratiques

TP 1: Utilisation du processeur nios II pour


afficher hello world from NIOS II

1. Objectif: L’objectif de ce TP est de générer un système qui permet d’afficher hello


world.

2. Introduction:
● System on Programmable Chip (SOPC):

Un SOPC est un système sur puce (ou SoC) avec des “composants virtuels”.C’est un système
complet embarqué sur une puce reprogrammable de type FPGA. On a alors besoin d’une
conception conjointe logicielle/matérielle (ou codesign). Rupture dans la méthodologie
classique ! La partie matérielle est généralement implémentée dans le FPGA par un
programme (VHDL, Verilog) à l'aide d'outils spécifiques (Quartus II d'Altera ). Le logiciel est
généralement écrit (en règle générale en C ou C++) et compilé à l'aide d'un outil (Altera's
Integrated Development Environment for Nios II).

● Qu’est ce qu’un processeur NIOS II ?

Le Nios II est un processeur 32-bits soft-core qui est implémenté dans les FPGAs. Soft-core
signifie que le processeur est décrit dans un langage de description du matériel (HDL) tel que
VHDL, Verilog, etc.
➔ Facile à comprendre
➔ Plus flexible: peut-être modifier en modifiant le code source ou certains
paramètres
➔ Portable: peut être synthétisé pour toute technologie de circuit intégré
Le processeur Nios II prend en charge donc toutes les familles FPGA et SoC Intel.
Lorsque vous réalisez un design avec Nios II, il faut encore ajouter un bus, une mémoire et des
périphériques.

● Qsys:

Le SOPC Builder est une application qui fait partie de Quartus II et qui permet de définir et
générer un SOPC. Qsys est le nouvel outil Altera SOPC Builder permettant la configuration
d’un système avec un processeur NIOS II et des périphériques (PIO, Timers, UART, USB,
composants propriétaires, ...) et de la mémoire. Qsys permet de générer automatiquement le
code HDL pour l’instanciation du processeur dans le système

● Bus Avalon:

Avalon est un bus informatique développé par la société Altera et destiné à l’implémentation
sur du matériel programmable (FPGA).

Objectif = Assurer l’interconnexion entre le processeur (NIOS II) et des circuits périphériques
(embarqués dans le FPGA ou non)

3. Présentation de la carte:
Un FPGA Altera Cyclone II
- Horloge de 50, 27 et 24 MHz
- 10 interrupteurs SW0..SW9
- 10 LEDs rouges LEDR0..LEDR9
- 8 LEDs vertes LEDG0..LEDG7
- 4 afficheurs 7 segments
- 1 port JTAG
- 4 Mbyte de mémoire Flash
- 512-Kbyte SRAM
- 8-Mbyte SDRAM

4. Génération du système:
Étape 1:

- Lancer QUARTUS II.


- Aller dans file → New project wizard.
- Dans la fenêtre qui apparaît, cliquer sur Next.
- Créer un répertoire propre dans votre pc où seront stockés tous les fichiers du projet
et spécifier son emplacement dans "what is the working directory for this project ?"
- Définir le nom du projet dans "what is the name of the project ? "et puis quand la
fenêtre Add Files apparaît recliquer sur Next.
- Dans Device family → Family, choisir Cyclone II.
- Dans Available devices → Name filter, écrire EP2C20F484C7.
- Cliquer sur Finish.

Étape 2:

- Dans Tools, lancer Qsys.


- Dans IP catalog, rechercher puis ajouter Nios II processor.
- Choisir Nios II/e dans Main → Nios II core.

Le processeur Nios II possède un certain nombre de caractéristiques qui peuvent être


configurées par l'utilisateur pour répondre aux exigences d'un système souhaité. Le
processeur peut être mis en œuvre dans trois configurations différentes :

Nios II/e : Utilisation minimale des ressources


Nios II/s : Équilibre entre performances et ressources
Nios II/f : Performances élevées

- Ajouter on-chip Memory (RAM or ROM) Intel FPGA IP et dans Size, entrer 20000
Bytes.

- Ajouter JTAG UART Intel FPGA IP


- Dans System, cliquer sur Assign Base Addresses.
- Lier les connections entre les différents composants de la manière suivante:

La valeur de l’IRQ du composant jtag_uart_0 doit être différente de 0.

- Cliquer sur le processeur nios, choisir onchip_memory dans Reset Vectors → Reset
vector memory et dans Exception Vectors → Exception vector memory

- Dans System, cliquer sur Assign Base Addresses.


- Dans file, cliquer sur Save As.
- Dans Nom du fichier, écrire myfirstnios2.
- Toujours dans Qsys, dans Generation, choisir VHDL dans synthesis et cliquer sur
Generate.
- La compilation dure plusieurs minutes et elle n’est pas terminée tant que le message
suivant n’est pas affiché :Generate Completed. 0 errors.
- Fermer Qsys.

Étape 3:

- Dans QUARTUS II, aller dans file dans le Project Navigator.


- Clic droit puis "Add Files in Project".

- Ajouter le fichier .qip situé dans le dossier synthesis du projet.


- Clic droit sur le fichier .qip ajouté dans le project navigator → Set as Top level
entity.
- Dans Task, cliquer sur Analysis and Synthesis.

- Aller dans Assignments → Pin planner.


- Écrire pour clk le pin correspondant dans la case Location: Pin_L1 pour 50Mhz. Dans
la colonne Node Name, apparaît les entrées-sorties définies dans le schéma.
- Dans Task, cliquer sur Compile Design. S’il n’y a pas d’erreur, le système peut alors
être chargé dans le FPGA.

Étape 4:

- Dans Tools, cliquer sur Nios II Software Build Tools for Eclipse pour lancer Nios II
- Eclipse.
- Dans le menu file → New, cliquer sur NIOS II Application and BSP from Template.
- Dans la fenêtre qui apparaît, dans le champ Target Hardware Information, ajouter le
fichier qui se trouve dans votre répertoire de travail, et contient l’extension .sopcinfo.
- Dans Project name, spécifier un nom de projet.
- Dans templates, sélectionner Hello World Small et cliquer sur Finish.
- Dans la fenêtre Projet Explorer, ouvrir sur le fichier que vous venez de créer.
- Double cliquer sur hello_world_small.c.
- Clic droit sur le projet dans project explorer.
- Cliquer sur Build Project.

5. Chargement et test:
Étape 1:

- Brancher la carte.
- Dans le menu Démarrer, accéder au gestionnaire de périphériques.
- Clic droit sur USB-Blaster → Propriétés → Mettre à jour →
C:\altera\13.0sp1\quartus\drivers.

Étape 2:

- Aller dans Tools → Programmer.


- Dans Hardware Setup, et ajouter USB-Blaster.
- Cliquer sur Add File…
- Ajouter le fichier dont l’extension est .sof et se trouve dans le dossier output_files et
cocher la case Program/Configure.

- Cliquer sur Start.


- Progress doit être 100%(Successful).

Étape 3:

- Dans Eclipse, Dans la fenêtre Run As, cliquer sur Nios II Hardware puis sur OK.
- Dans la fenêtre nommée Console, doit s’afficher Hello from Nios II !
TP 2 : Utilisation du processeur nios II pour
allumer les leds

1. Objectif: L’objectif de ce TP est de générer entièrement un nouveau système qui


permettra d’allumer les leds de la carte.

2. Introduction:
Dans le Qsys, il existe ce qu’on appelle un PIO (Parallel Input/Output). Ce composant
représente dans ce TP les leds et les TPs suivants les switchs et les 7 segments.

● Configuration des PIOs:

Le mode (input, output ou bidirectionnel) est spécifié au moment de la génération du


système et ne peut être modifié en cours d'exécution.

Chaque PIO a 4 registres:

- Data
- Direction
- Interrupt Mask
- Edge Capture

Dans ce TP seul le registre Data sera utilisé.

● Le registre Data:

La lecture depuis le registre Data renvoie la valeur des ports.


Si le PIO est configuré en mode Output, la lecture du registre renvoie une valeur indéfinie.
L'écriture sur le registre stocke la valeur des ports. (Ex: Leds)
Si le PIO est configuré en mode Input, l'écriture dans les données n'a aucun effet. (Ex:
Switchs)
Si le PIO est en mode bidirectionnel, la valeur enregistrée n'apparaît que sur un port de sortie
si le bit correspondant du registre de direction est réglé sur 1.

● Software files:
- #include <Altera_avalon_pio_regs.h>

Pour lire le registre data du PIO (Ex: Switchs), on affecte à une variable de type entier la valeur
de: IORD_ALTERA_AVALON_PIO_DATA(NOM_PIO) où NOM_PIO est le nom du pio entré
lors de l’ajout du composant dans le Qsys.

Pour écrire dans le registre data du PIO (Ex: Leds), on utilise:


IOWR_ALTERA_AVALON_PIO_DATA(NOM_PIO, valeur) où NOM_PIO est le nom du pio
entré lors de l’ajout du composant dans le Qsys et valeur est la valeur en décimale que l’on
souhaite affecter au PIO.

- #include <System.h>
Fournit une description logicielle complète du matériel du système NIOS II et décrit pour
chaque périphérique du système: la configuration matérielle du périphérique, l'adresse de
base et les informations sur les demandes d'interruption (IRQ).

3. Travail à faire:
Au système généré dans le TP 1, on souhaite ajouter:

- Ajouter PIO (Parallel I/O) Intel FPGA IP avec 10 output et le renommer avec
ledr_pio.
- Ajouter PIO (Parallel I/O) Intel FPGA IP avec 8 output et le renommer avec
ledg_pio.

- Dans System Contents, double cliquer sur la case de la connexion interne qui
correspond à Export pour chaque pio.

Les connections entre les différents composants sont faites de la manière suivante:

Nous avons ajouté deux PIOs au système précédent. Dans pin planner, il faut faire les
affectations suivantes pour les signaux LEDG[7..0]: Y21, Y22, W21, W22, V21, V22, U21, U22
et pour les signaux LEDR[9..0]: R17, R18, U18, Y18, V19, T18, Y19, U19, R19, R20.

1. Générer et charger le nouveau système dans la carte.


2. Tester si le système fonctionne bien en affichant Hello from Nios II !
3. Quel niveau logique faut-il appliquer pour allumer une led?
4. Écrire un programme simple qui permet d’allumer une LED rouge.
5. Écrire un programme qui permet de faire clignoter une LED verte de votre
choix.
La fonction qui permet de créer une temporisation s’appelle usleep(valeur du
retard).
6. Écrire un programme qui permet de faire afficher sur les LEDs rouges la
valeur d’une variable cmpt qui sera incrémentée toute les demi-secondes.
TP 3 : Contrôle des leds avec des switchs en
utilisant le processeur nios II
1. Objectif: L’objectif de ce TP est de générer entièrement un nouveau système qui
permettra d’utiliser les leds et les switchs de la carte.

2. Travail à faire:
Au système généré dans le TP 2, on souhaite ajouter:
- Ajouter PIO (Parallel I/O) Intel FPGA IP avec 10 output et le renommer avec swi_pio.

- Dans System Contents, double cliquer sur la case de la connexion interne qui
correspond à Export pour le PIO.
- Les connections entre les différents composants sont faites de la manière suivante:

Nous avons ajouté un PIO au système précédent. Dans pin planner, il faut faire les affectations
suivantes pour les signaux SW[9..0]: L2, M1, M2, U11, U12, W12 , V12, M22, L21, L22.
1. Générer et charger le nouveau système dans la carte.
2. Tester si le système fonctionne bien en affichant Hello from Nios II !
3. Écrire un programme qui permet d’afficher la valeur du registre DATA de
SWI_PIO et interpréter.
4. Écrire un programme où chaque switch permet d’allumer une seule LED rouge.

TP 4 : Contrôle des afficheurs 7 segments en


utilisant le processeur nios II
1. Objectif: L’objectif de ce TP est de générer entièrement un nouveau système qui
permettra d’utiliser les afficheurs 7 segments de la carte.

2. Travail à faire:
Au système généré dans le TP 1, on souhaite ajouter:
- Ajouter PIO (Parallel I/O) Intel FPGA IP avec 7 output et le renommer avec
seg1_pio.

- Ajouter PIO (Parallel I/O) Intel FPGA IP avec 7 output et le renommer avec
seg2_pio.
- Dans System Contents, double cliquer sur la case de la connexion interne qui
correspond à Export pour chaque pio.
Les connections entre les différents composants sont faites de la manière suivante:
Nous avons ajouté deux PIOs au système précédent. Dans pin planner, il faut faire les
affectations suivantes pour les signaux SEG1[6..0]: E2, F1, F2, H1, H2, J1, J2 et pour les
signaux SEG2[6..0]: D1, D2, G3, H4, H5, H6, E1.

1. Générer et charger le nouveau système dans la carte.


2. Tester si le système fonctionne bien en affichant Hello from Nios II !
3. Quel niveau logique faut-il appliquer pour allumer un segment de l’afficheur?
4. Écrire un sous-programme AFFICHE(CHAR chiffre) qui affiche le code
correct sur l’afficheur 7 segments SEG1_PIO d’une variable de type CHAR,
passée en paramètre de sous-programme, qui peut varier entre 0 et 9. Tester
cette routine en incrémentant dans le programme principal, chaque seconde,
une variable et en appelant votre routine.
5. Réaliser un chronomètre sur deux afficheurs 7 segments (SEG1_PIO et
SEG2_PIO,) qui permet de compter de 00 à 99, en utilisant le sous-programme
AFFICHE(CHAR chiffre).

Vous aimerez peut-être aussi