Aller au contenu

Un squelette de code

Le code départ

Le code de départ est le suivant:

`default_nettype none
module avalon_bram #(parameter RAM_ADD_W = 8, BURSTCOUNT_W = 4 ) (
      // Avalon  interface for an agent
      avalon_if.agent avalon_a
      );
      // a vous de jouer a partir d'ici


endmodule
  • Le code (avalon_bram.sv) du contrôleur de mémoire n'a qu'un seul port d'entrée/sortie: le bus Avalon, défini par une interface SystemVerilog.

  • Le code agit comme un agent Avalon et se connecte en conséquence au modport agent de l'interface avalon_if. La définition complète de l'interface se trouve dans le fichier avalon_if.sv.

  • Le port de connection à l'interface Avalon est nommé avalon_a. Tous les signaux de l’interface seront donc accessibles par la syntaxe avalon_a.xxx ou xxx est le nom du signal voulu.

  • Enfin, le code doit être paramètrable:

    • RAM_ADD_W définit le nombre de bits nécessaires à l'addressage de la mémoire BRAM interne du module. La taille de la mémoire (nombre de motes de 32 bits) devra donc être calculée à partir de cette valeur.
    • BURST_COUNT définit le nombre de bits utilisés pour coder la longueur maximale du burst dans l'interface Avalon.

La liste des entrées/sorties

Le tableau suivant indique les signaux accessibles par l’agent Avalon. Le signal burstcount sera ignoré dans la partie 1.

Nom Type Bits Commentaire Utilisation
clk input 1 Horloge du bus
reset input 1 Initialisation du bus (actif à l’état haut)
address input 32 Adresse
byteenable input 4 Masque de sélection des octets à écrire
read input 1 Requête de lecture
write input 1 Requête d’écriture
writedata input 32 Donnée écrite par l’hôte
burstcount input BURSTCOUNT_W Longueur du burst (1 si pas de burst)
readdata output 32 Donnée renvoyée par l’agent
waitrequest output 1 Demande d’attente de l’agent
readdatavalid input 1 Signalement, par l’agent, du retour d’une donnée lue