Introduction
Contexte¶
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.