Étape 5: Un flux vidéo réaliste

TAG pour cette étape: FLUX

0) Introduction

Cette dernière étape consiste à supprimer le générateur de mire et de récupérer à sa place le flux vidéo en provenance du tampon d'images standard provenant du système Linux tournant sur le HPS. Nous devrions alors disposer d'un gestionnaire de fenêtres classique. L'écran LCD étant tactile nous pourrons de plus interagir avec l'affichage.

1) Adaptation du module Top

  • Supprimez ou commentez l'instanciation du module mire dans le module Top
  • Supprimez ou commentez l'instanciation de l'interface wshb_mire dans le module Top
  • Nous allons utiliser un flux vidéo provenant de l'interface stream. Cette interface est pour le moment neutralisée. Il faut supprimer cette neutralisation. Pour cela, commentez la zone de code où l'on assigne des valeurs constantes aux signaux de wshb_if_stream.
  • Enfin, connectez le port  wsb_ifs_mire  du module wshb_intercon à l'interface wshb_if_stream déjà présente dans Top.

2) Simulation

Le testbench contient tout ce qui est nécessaire, faites simplement la simulation et examinez les images obtenues pour vérifier le bon fonctionnement.

3) Synthèse et test sur la maquette

  • Relancez une synthèse complète.
  • Programmez votre maquette.
  • N'oubliez pas de faire un redémarrage de Linux en utilisant le bouton WARM_RST.
  • Vous devriez avoir l'affichage du  gestionnaire de fenêtre. Avec une souris active...

Vous constaterez probablement que l'image générée est stable, mais pas convenablement synchronisée. Nous allons tenter de résoudre cela 

4) Causes des problèmes de synchronisation

Comme indiqué précédemment, la mémoire SDRAM est partagée entre le HPS et le système que vous avez développé. Ainsi, pendant le démarrage du système, la mémoire est fortement sollicitée, il est possible alors que le module vga ne soit pas capable de récupérer les données à un rythme suffisant.

5) Amélioration du module vga

Pour éviter les décalages de l'image affichée il faut donner plus de temps au module vga pour récupérer des données à afficher.  En effet, la lecture d'un paquet de données en mémoire souffre de la latence de l'accès à la mémoire (plus d'une dizaine de cycles par paquet de données). En conséquence, plus la taille du paquet est élevée, plus le débit moyen est élevé. 

La FIFO asynchrone, de votre module vga possède un signal supplémentaire nommé walmost_full qui indique si la FIFO est "presque" pleine en se basant sur un paramètre ALMOST_FULL_THRESHOLD.

Nous allons mettre en place un dispositif à hysteresis:

  • Forcez le paramètre ALMOST_FULL_THRESHOLD à la valeur 224 (soit 256-32). Ainsi le signal walmost_full sera à 0 lorsque la FIFO disposera d'au moins 32 places vides.
  • Modifiez le signal cyc pour qu'il soit synchrone et suive le comportement suivant:
    • Si la FIFO a suffisemment de places vides alors cyc passe à 1.
    • Si la FIFO est pleine alors cyc passe à 0

Ainsi, nous aurons la garantie que lorsque vga a le jeton, vga fera une requête d'au moins 32 données dans la mémoire. 

  • Faites ces modifications et vérifiez que la nouvelle version de l'architecture est moins sensible aux erreurs de fifo.

6) Test de robustesse

Nous pouvons forcer la mémoire du système à être plus sollicitée, et vérifier ainsi la robustesse de notre contrôleur vidéo.  Pour cela:

  • Sélectionnez le choix Autre dans le menu en bas à gauche de l'écran.
  • Sélectionnez le choix bigbuckbunny

Cela lance une séquence vidéo.  Refaites plusieurs fois cette opération, au bout d'un certain temps votre image devrait de nouveau se désynchroniser...

N'oubliez pas le TAG pour cette étape: FLUX