Étape 4: Un véritable bus avec un arbitre

ATTENTION : TAG GIT pour cette ETAPE : "ARBITRE"

1) Introduction

L'architecture réalisée n'est pas très réaliste. Dans la pratique, l'image affichée n'est pas stockée dans la SDRAM de manière statique mais générée par un dispositif extérieur tel qu'un microprocesseur ou un décodeur vidéo. L'accès au contrôleur SDRAM doit donc être partagé entre le bloc VGA et cet autre dispositif. Pour se rapprocher d'une telle structure nous allons mettre en place (dans fpga) l'organisation suivante:

  • Le contrôleur vga est inchangé.
  • Un module mire sera créé. Son seul port d'entrée sortie est une interface Wishbone. Son rôle est d'écrire une mire dans la mémoire SDRAM, et de répéter indéfiniment cette opération.
  • Le module fpga contiendra 3 interfaces Wishbones :

    • wshb_if_mire sera une interface dédiée aux transferts de données effectués par le module mire

    • wshb_if_vga sera une interface dédiée aux transferts de données du module vga

    • wshb_if_0 sera une interface dédiée aux transferts de données du module wb16_sdram16

  • L'accès au contrôleur de SDRAM étant maintenant partagé par deux modules totalement indépendants, il faut intercepter et arbitrer les requêtes des deux blocs. Un nouveau module wshb_intercon aura pour rôle de:
    • Détecter les requêtes en provenance des deux maitres (en se basant sur les signaux cyc des interfaces Wishbone).
    • Élire un maître.
    • Mettre en correspondance les signaux du maître élu avec les signaux de l'interface maître.

2) Travail à réaliser

  1. Créer un module mire chargé d'écrire une mire de manière permanente. Attention, le module mire devra être "fair-play" c'est-à-dire ne pas maintenir une demande d'écriture permanente de manière à permettre à l'arbitre de donner la main au module vga. Pour cela vous pouvez, par exemple, insérer un cycle à vide (avec cyc et stb à 0) toutes les 64 requêtes d'écriture.
  2. Modifiez (si ce n'est pas déjà le cas) le module vga pour que son signal cyc soit identique à stb. Ainsi, le module vga sera lui-même "fair-play". Quand sa fifo est pleine, il laisse le module mire prendre éventuellement la main sur le bus Wishbone.
  3. Créez le module wshb_intercon pour mettre en place le mécanisme d'arbitrage et de sélection des signaux. Pour garantir le bon fonctionnement de la vidéo, l'arbitre devra donner la priorité au contrôleur vga en cas de requêtes simultanées de mire et de vga.
  4. Modifiez enfin le module fpga pour mettre en place les nouvelles interfaces ainsi que les nouveaux modules
  5. Vérifiez par simulation le bon fonctionnement de l'ensemble
  6. Adaptez les fichiers pour la synthèse (file_list.tcl), synthétisez...
  7. Testez sur la carte...

N'OUBLIEZ PAS : TAG GIT pour cette ETAPE : "ARBITRE"