Aller au contenu

Introduction

Contexte

Vue artistique du projet
Contrôleur mémoire avec interface Avalon

Il s’agit de coder un agent Avalon pour contrôler une mémoire BRAM synchrone interne d’un FPGA. Le travail contient:

  • Une première partie qui consiste à coder un contrôleur mémoire simple capable de transférer une donnée unique via le bus AVALON.
  • Une deuxième partie qui consiste à étendre les fonctionnalités du contrôleur pour supporter un mode de transfert en rafale de manière à augmenter ses performances.

ATTENTION : DEUX TAG GIT pour cet exercice : avalon_single_bram pour la première partie et avalon_burst_bram pour la deuxième partie

Mise en place de l’environnement de travail

  • Placez-vous dans votre dépot git personnel (cd ...).
  • Importez les codes et le banc de test de votre futur bloc:
    • git checkout main
    • git remote add interface_avalon git@gitlab.enst.fr:se204/interface_avalon.git
    • git remote update
    • git merge --allow-unrelated-histories interface_avalon/main

La hiérarchie chargée est structurée de la façon suivante :

  • Le répertoire controleur_memoire contient:
    • Un script Makefile permettant de tester votre code.
    • Un répertoire avalon_bram_tb_src contenant les sources d’un banc de test de votre futur contrôleur.
    • Un répertoire avalon_bram contenant les sources d’un squelette de module qui inclura votre futur code.
    • Un répertoire avalon_bram_syn_src contenant les codes nécessaires aux opérations de synthèse FPGA.
    • Trois scripts Makefile_syn, synthesis.tcl, stats.awk utilisés pour les opérations de synthèse FPGA.
  • Le répertoire avalon_if contient:
    • Une définition en SystemVerilog de l’interface Avalon utilisée.
    • Une documentation de l’interface Avalon.

Simulation du contrôleur

Le Makefile permet de lancer la simulation qui indique directement les erreurs de transfert. La commande de Makefile permet les choix suivants :

  • make compile : compilation des codes (module à tester et banc de test)
  • make simu_batch : simulation en mode terminal avec simple affichage des résultats des tests
  • make exam_packets : examen détaillé des éventuelles erreurs de lecture et d’écriture
  • make simu_gui : simulation en mode graphique pour faire un debug de votre code
  • make syn : test de synthèse de votre module avalon_bram
  • make info : ce message
  • make clean : nettoyage des fichiers inutiles
  • make all : équivalent à simu_batch

Le banc de test est basé sur la lecture ou l'écriture de paquets de données consécutives dans l'espace mémoire du bus Avalon. La taille (nombre de mots) et les addresses de ces paquets sont aléatoires. La mémoire est lue avant écriture, puis relue après écriture de manière à vérifier toutes les situations possibles.

La console principale affiche:

  • Les messages d’erreur liés au respect du protocole.
  • Une information globale de réussite ou d’échec de transfert des paquets.

Le détail des erreurs sur les paquets peut être obtenu par la commande: make exam_packets.

Le résultat a la forme suivante:

Packet size is 12 words
Start times: Initial Read (1530.000ns), Write (2030.000ns), Read (2290.000ns)
 Address  Initial Data  Write Data/Mask Read Data
00003498      c6850a16    d2b7a156 1100  d2b7a156
0000349c      805c3d5c    7353288f 1111  7353288f
000034a0      c5afa02b    0f19d3c2 1111  0f19d3c2
000034a4      xxxxxxxx    436e8970 0011  xxxxxxxx
000034a8      xxxxxxxx    888fca9a 0000  xxxxxxxx
000034ac      xxxxxxxx    7815619f 0100  7815619f
000034b0      f13a1424    1af2e4da 1111  1af2e4da
000034b4      xxxxxxxx    70899ffb 1111  70899ffb
000034b8      xxxxxxxx    befd3d7e 1111  befd3d7e
000034bc      xxxxxxxx    e0ea4fbd 0100  e0ea4fbd
000034c0      xxxxxxxx    bf10f799 0001  xxxxxxxx
000034c4      xxxxxxxx    aa455aaf 1000  xxxxxxxx
#-----Check 2   Failed. Current Check has 12 errors

Sont indiqués:

  • Address: L’adresse Avalon d’écriture d'un mot du paquet de données.
  • Initial Data: Le mot lu en mémoire (via le protocole Avalon) avant tentative d'écriture.
  • Write Data: Le mot écrit en mémoire (via le protocole Avalon).
  • Mask: Le masque indiquant les octets sélectionnés.
  • Read Data: Le mot relu (via le protocole Avalon) après écriture.

Il y a erreur (en rouge) dans les 2 cas suivants :

  • L’octet relu n’est pas identique à l’octet écrit alors que le bit de masque d’écriture était 1.
  • L’octet relu n’est pas identique à l’octet lu initialement alors que le bit de masque d’écriture était 0.
  • Les octets indiqués xx sont des octets qui n’ont jamais étés initialisés en mémoire.

ATTENTION : Les messages d’erreur sont dirigés vers le terminal, que la simulation soit en mode batch ou interactive. Vérifiez donc systématiquement les messages apparaissant dans le terminal.