Introduction

Le NIOS est un processeur softcore propriétaire de Altera. Il est basé sur un cœur RISC 32 bits. Le processeur NIOS ce programme sur Quartus avec l’interface Qsys.

Il est doté du bus Avalon.Le processeur NIOS possède plusieurs verison possibles : NIOS II  fast, NIOS II/e standard et NIOS II/E economy. Ces différentes version permettent d’avoir différente optimisation du processeur afin d’uitliser le processeur NIOS II correspondant le mieux à ce que vous souhaitez faire.On va voir plus en détails les différences entre ces différentes versions.

Version du Processeur NIOS

Le processeur NIOs possède différente version qui va faire varier le niveau d’optimisation de celui-ci. L’optimisation va permettre de faire les calculs plus rapidement. On va voir les différences entre chaque   versions :

Paramètre Nios II/e economy NIOS/s standard NIOS/f fast
Objectif Taille minimal du processeur Petite taille du processeur Exécution la plus rapide au détriment de la taille
DMPIS/Mhz 0.15 0.74 1.16
Max DMIPS 31 127 218
Fréquence maximum 200 Mhz 165 Mhz 185 Mhz
Pipeline 1 étage 5 étages 6 étages
Espace d’adressage externe 2 Gbytes 2 Gbytes 4 GBytes avec MMU
Cache bus d’instruction Pas de cache 512 octets à 64 kilo-octets 512 octets à 64 kilo-octets
Prédiction de branchement pour le bus d’instruction pas de prédiction Prédiction statique Prédiction dynamique
Multiplication matériel non disponible 3 cycles 1 cycle
Division matériel Non disponible Optionnel Optionnel
Total en comparant à la version fast : Taille réduit de 50% et performance réduite de 500% Taille réduit de 20% et Performance réduite de 40%

Bus Avalon

L’interface Avalon permet de relier un nombre quelconque d’éléments maîtres et d’éléments esclaves et de garantir de bons échanges de données entre eux, s’ils respectent les interfaces. 

Il permet de faire l’interface entre les composants du processeurs NIOS II. On va voir les 6 interfaces possibles :

  • Avalon-MM : Liaison permettant des opérations lecture/écrite basée sur des adresses en mode maître/esclave pour des éléments interne du FPGA
  • Avalon-MM Tristate : Liaison permettant des opérations lecture/écriture basée sur des adresses en mode maître/esclave pour des éléments externes partageant les bus.
  • Avalon-ST : liaison permettant des envoies de données unidirectionnnels éventuellement multiplexées
  • Avalon-clock : liaison permettant de recevoir ou d’envoyer des signau d’horloge et de reset pour synchroniser les éléments du système
  • Avalon-interrupt : liaison permettant à des composants de signaler des événements
  • Avalon-conduit : liaison permettant des accès directs aux composants interne d’un système Qsys.

 

A) Avalon-MM

La liaison Avalon-MM est une liaison permettant des échanges entre un ou plusieurs maîtres et un ou plusieurs esclaves à travers un système d’interconnexions spécifique.

Il y a trois types de liaison Avalon-MM :

  • Avalon MM Slave
  • Avalon MM Master
  • Avalon MM Tristate Slave

Pour l’interface Avalone MM Master, il y a deux types de transfert :

Read/write classique : On attend que le maître soit prêt à lire seulement une partie d’un mot dans une mémoire.

Write burst et Read burst : Faire des lectures et écriture en rafale. Signaux supplémentaire qui permet de dire combien de case de la mémoire on va récupérer. Contrairement au read witre classique ou on va tous lire la mémoire.

  • Décodage de l’adresse

Il n’y a pas de décodage d’adresse au sein des composants du processeur NIOS. Un chipselect généré par composant. Le décodeur d’adresse est généré autmatiquement pour respecter le plan mémoire, ce qui permet de ne pas recompiler votre programme si vous le modifier.

Le multiplexage du chemin de donnée permet de créer le chemin de donnée en écriture à partir du maître actif vers les esclaves et le chemin de données de lecture des esclaves vers le maître.

  • Insertion d’états d’attente

Permet de rallonger la durée d’un transfert d’un ou plusieurs coups d’horloge. Permet de gérer des esclaves avec des temps de réponse long : Informe le maître qu’il doit attendre que l’esclave soit prêt.

  • Lecture pipelinées

Il est possible de pipeliner un transfert d’un maître à un esclave pour améliorer le flux de données entre les deux.

  • Gestion de la taille de donnée

Il y a deux modes de gestion d’adresse qui peuvent être utilisés :

Taille de bus dynamique : Permet à un maître d’accéder à n’importe quelle mémoire esclave.

Alignement d’adresse : Un mot de l’esclave correspond exactement à un mot du maître. Un suel transfert est effectué. Cela affecte les mots de l’esclave aux bits de poids faible du maître et complète avec des 0. Ne marche que pour un maître plus large que l’esclave.

  • Arbitrage des systèmes à plusieurs maîtres

Chaque maître dispose de parts de partage d’un esclave donné. L’arbitre accorde successivement à chaque maître un nombre de trasnferts égal à son nombre de parts puis passe au suivant. Un port esclave peut avoir un nombre de parts minimal qui représente le nombre minimal de transferts effectués avec ce composant.

  • Gestion de système à horloges mutiples

Plusieurs ports peuvent fonctionner avec des horloges différentes. Chaque port est lié à une seule horloge.

  1. Maître impose l’adresse, l’horloge et les données
  2. Handshake capture les signaux de contrôle et met le maître en attente
  3. Demande de transfert au handshake esclave
  4. Synchronisation avec l’horloge esclave
  5. Requête effectuée par le handshake esclave
  6. Quand le transfert esclave est terminé, acquiescement envoyé au handshake maître
  7. Synchronisation avec l’horloge maître
  8. Handshake maître supprime condition d’attente

5 coups d’horloge sont nécessaire dans chaque domaine par transfert.

Métastabilité : Front d’horloge qui arrive quand la donné arrive avec le maître et l’esclave qui ne fonctionne pas avec la même horloge. Pour éviter ça on transmet une donnée au rythme du maître puis de l’esclave.

  • Gestion des interruptions

Si les ports esclave fenèrent des demadnes d’interruption, des contrôleurs d’interruption sont insérés pour chaque port maître qui accepte les interruptions. Deux types de contrôleurs sont possibles : Priorité soft et hard. Ceci permet de choisir l’interruption la plus importante et de la gérer en priorité.

 

B) Avalon ST

Liaisons unidirectionnelles à grande bande passante et faible latence (transmission de paquets éventuellement entremêmés).

Interface streaming : liaison unidirectionnel entre un émetteur et un récepteur. Il doit acquérir la donnée au prochian coups d’horloge. Permet de gérer un paquet, une image.

Il y a différent types de transfert :

  • Transfert sans backpressure
  • Transferts de paquets
  • Transfert avec backpressure

Accélération des traitements : Une séquence d’instructions

C) Les différents types d’instructions

  • Instruction combinatoire : Bloc logique pouvant effectuer son opération en un coup d’horloge
  • Instruction à cycles multiple : Bloc logique nécessitant plusieurs coup d’horloge pour effctuer son opération
  • Instruction étendue : Bloc logique pouvant réaliser plusieurs instructions sur les entrés dataa datab
  • Instruction sur registre interne : Bloc logique pouvant réaliser plusieurs instructions à partir des registres du processeur

 

 

Quartus Qsys

On va maintenant voir le bus en Avalon en pratique sur Quartus. Pour cela on va ouvrir la partie Qsys de quartus. Pour cela il faut que vous aiez ouvert ou créer un nouveau projet sur quartus. si vous ne savez pas comment créer un projet sur quartus ou bien comment installer ce logiciel vous pouvez regarder notre dediez à celui-ci. Une fois le projet ouvert vous devez cliquer sur tools dans la barre d’outils puis Plateform designer.

Voici la page qui s’ouvre :

On clique sur “New component” pour voir tous les composants disponible :

Sur cette première page on donne le nom qu’aura notre composant , ici composant_cours :

Dans la partie Files on va charger un fichier vhdl ou verilog décrivant le comportement de notre composant. Le fichier doit faire partie de notre projet  précédement crée. Ici on a chargé le fichier tp_A2 qui va décrire le comportement de notre composant :

On va maintenant voir comment créer une interface et des signaux pour notre composants. si vous avez des erreurs, notament pour l’horloge, vérifier bien que le fichier vhdl que vous avez fournit n’est pas vide et contient bien le comportement de votre composant sinon vous aurez quelques erreurs lors de la génération de   l’interface :