Générateur de flux vidéo

Format des images:

Les images que vous aurez à manipuler ont le format suivant:

  • Les images sont en niveaux de gris
    • 8 bits soit 256 niveaux de gris
  • Le format des images est de 640x480 pixels

Le flux vidéo a les caractéristiques suivantes:

  • Une fréquence pixel de 25MHz
  • Une zone valide de 640x480
  • Une zone de "blanking" de 160 colonnes et de 40 lignes

Les trames vidéo ont une durée de 800x520x40ns ce qui donne une cadence vidéo de 60 trames par seconde.

Format du flux vidéo

Physiquement, l'interface vidéo est composée des trois signaux suivants:

  • pixel : les pixels sur 8 bits
  • line_valid : un signal indiquant que nous sommes dans une partie valide de la ligne.
  • frame_valid : un signal indiquant que la ligne actuelle est valide.

Le module de génération des images:

Ce module SystemC, destiné à la simulation, génère un flux vidéo au format décrit précédemment. Ce flux est généré à partir d'une série d'image au format PNG.

Le module SystemC (C++ class) correspondant est VideoGen.

Le code correspondant à ce module se trouve dans le dossier:

IPs/video_gen

Vous y trouverez:

  • Le fichier d'en-tête définissant le module
  • Le code SystemC
  • Le fichier de méta-données SocLib
  • Un exemple de configuration de l'environnement de compilation

Ce module utilise la bibliothèque libpng pour ouvrir les images, il faudra donc changer la configuration du compilateur pour la prendre en compte.

Constructeur du module:

 VideoGen(
           sc_module_name insname,            // nom du module SystemC
           const char *bn = "images/bbb/bbb", // nom de base et chemin vers images png
           const int w = 640,                 // largeur de la zone valide de l'image
           const int h = 480,                 // hauteur de la zone valide de l'image
           const int lsync = 160,             // largeur de la synchro. horizontale
           const int fsync = 40               // hauteur de la synchro. verticale
       );

Remarques:

  • Les paramètres du constructeur ont des valeurs par défaut correspondant au format vidéo utilisé.
  • Le paramètre bn correspond au nom de base des images utilisées et au chemin vers les fichiers PNG, relativement à l'executable de simulation.

Vous devriez aussi avoir une série d'image au bon format dans le dossier images/bbbb

L'interface SystemC du module:

            sc_in<bool>           clk;
            sc_in<bool>           reset_n;
            sc_out<bool>          line_valid;
            sc_out<bool>          frame_valid;
            sc_out<unsigned char> pixel_out;

En plus des signaux correspondant aux flux vidéo (tous en sortie) ce module nécessite les deux signaux suivants:

  • une horloge clk correspondant à l'horloge pixel.
  • un signale de remise à zéro reset_n actif sur niveau bas.

Configuration de l'environnement de compilation:

Ce module utilise la bibliothèque libpng il faut donc ajouter le chemin vers les fichiers d'en-tête pour la compilation et la bibliothèque pour l'édition de liens.

La commande libpng-config vous permet de trouver les paramètres adéquats.

# Pour obtenir les paramètres de compilation
libpng-config --cflags
# Pour obtenir les paramètres d'édition de liens
libpng-config --libs

Inspirez vous du fichier soclib.conf.example pour adapter la configuration des outils SocLib.