Mire digitale


Conditions techniques du projet :

Utilisations prévues :


Remerciements :




  mire_draft.jpg

 

Introduction


La description suivante décrit les outils mis en oeuvre pour aboutir à la réalisation d'une mire au pompeux format DVB-A (Digital Video Broadcast Amateur = format  DVB-S pour le moment).
Par mire il faut entendre une sequence quelconque fixe ou non d'une durée limitée par la taille de l'EPROM utilisée.
En théorie on pourrait même "jouer" un transport stream composé de plusieurs flux vidéo et audio (PES) mais alors la durée de chaque programme diminue d'autant.

Il est à noter qu'une mire "digitale" est bien plus simple à réaliser qu'une mire "analogique", contrairement à ce que certains pourraient croire.

Généralités

En Télévision digitale, il y a 3 étapes pour aller de la source vidéo/son à l'antenne :

blocs constitutifs de DVB-A
Figure 1 : Constitution d'une mire et élaboration du transport Stream (TS)

A partir d'une image, d'un film, il existe des outils de constitution d'un TS,  on supposera que l'on dispose d'un tel flux de transport (voir logiciel tels que Manzanita, tmpenc)

La constitution du TS est une chose, mais il faut pouvoir rejouer la séquence à l'infini, là se pose le problème des synchronisations, en effet le TS est constitué de 1 (notre cas) ou plusieurs PES (programm elementary stream)

Chacun dispose de sa propre synchronisation au moyen de repères de temps glissés dans les trames.
Il s'agit donc de reboucler la mire au bon endroit, pour éviter des sautes de synchronisation TS (et donc indirectement vidéo) trop brutales et permettre au decodeur MPEG de digérer la transition sans effect pour le téléspectateur.
C'est encore plus vrai pour des séquences courtes, car la transition apparaît plus souvent.

La mire proposée en exemple est constituée en TS avec le PID (Programm Identifier) , et les différentes tables (merci Evariste)

Une fois rebouclée (sa constitution le permet) elle passe dans le codeur canal d'Evariste F5OEO (basé sur le code de Thomas Sailer et confronté à nos blocs VHDL).

En sortie on a les 2 séries de bits qui sont destinées aux voies I et Q du modulateur (paires de bits regroupés en octets dans un fichier binaire)

La mire de test fournie en exemple fut construite par F5OEO et contient les informations suivantes :

Processus de création du fichier mémoire :

Pour éditer les fichiers binaires j'utilise hexedit (freeware dispo à http://www.expertcomsoft.com/)

voici le fichier mire d'origine (à jouer avec un media player ou autre), d'autres TS peuvent bien sur être utilisés pour permettre à chacun de mettre son propre contenu.

on le transforme grâce à l'outil en cours de developpement de F5OEO

Les fichiers intermédiaires permettent de vérifier le codage canal, on y trouve le résultat après brouilleur d'entrée, après le codeur RS (qui augmente la taille du fichier d'un rapport 208/188), après l'entrelacement et le codeur FEC de sortie.

En répétant la mire d'origine une 10ne de fois dans un éditeur et en appliquant la séquence obtenue dans le codeur canal, on recherche le motif répété et on obtient le fichier suivant qu'il s'agit de charger dans l'EPROM et de lire 2 bit par 2 bits.

Pourquoi faire la recherche du motif de répétition : car au début le motif n'est pas en place, en effet l'entrelaceur est initialisé par des octets nuls, et il faut donc "attendre" qu'il se remplisse à 100% avec des données utiles.
On cherche donc le motif à partir du milieu du fichier (en gros quand on commence à voir beaucoup moins de 0x00 dans les trames)
Evariste a prévu d'améliorer son code pour eviter cette étape manuelle.

La taille du fichier fourni en exemple fait exactement 283968 octets.
On note que la mire faisait 130848 octets (soit 87 trames constituées de 8 paquets de 188 octets)
après RS on est passé à 141984 octets, puis on double avec codeur de sortie en mode 1/2 => 283968 octets.

On détermine ainsi l'adresse 0d283967 = 0x4553F de la fin de mémoire pour assurer le rebouclage (à mettre dans le FPGA pour l'instant mais on pourra plus tard envisager de la placer au début de la mémoire en automatique)

A la suite de l'EPROM j'avais placé 2 séquences de test canal qui proviennent de trames contenant des octets de valeurs 0xFF ou 0x55 (à part le mot de synchro qui vaut toujours 0x47) et auxquelles j'ai fait subir le même sort que le mire.
De cette manière par 2 bits de selection je choisissais la mire F5OEO, les 47FFFFFFFFFFF... ou les 47555555555555...... et je pouvais regarder facilement à l'oscillo si mon TS correspondait bien.
En effet c'est facile de prendre 2 bits du bus TS (qui est sur 8 bits) et de voir passer le 47 suivi de 187 FF ou 187 55 selon le mode.

Voici le fichier contenant les 3 motifs : mire, octets état hauts, alternance de 0 et de 1 (cela nécessite l' EPM7128)

Il est à charger dans une mémoire d'au moins 2.2Mbits, j'ai choisi 4 Mbits.

La période de répétition de la mire élémentaire transmise à 2Mbauds soit 1MBits/s par voies I ou Q, est donc de 1.13 seconde.

Le VHDL de lecture de la mémoire :

Pour la mise au point du vhdl, j'ai utilisé le fichier de memoire suivant qui contient une série de 0 à 255 en début de mémoire, une série de 0x00 puis un 0xFF à la fin, pour me convaincre que je savais lire des adresses de 0 à 255 et reboucler et pour tester mon bus d'adresse.

L'analyse du fichier (à compiler et charger dans le CPLD selon le processus décrit lors de la réunion de Cap Couronne du 4 decembre 2004)

Il est constitué d'une partie declarative de l'ensemble des connections du composant programmable.

A noter ici que nous sommes limités par le nombre de pins du CPLD EPM 7064 (disponible chez Electronique Diffusion pour un peu plus de 10 euros à ce jour) , en effet il nous faut 19 bits pour l'adressage mémoire (car on utilise une EPROM classique, 8 bits de données, 2 sorties IQ, 2 pins de test (reglage modulateur avec 2 signaux en quadrature).

J'ai donc du sacrifier le reset et les trames de tests par rapport à mes premier essais avec le 7128 en CMS.

Viennent ensuite les déclarations des signaux internes

Puis la logique combinatoire et les processus qui se déclenchent sur les listes de sensibilités (pratiquement les horloges uniquement ds notre cas)

enfin le dernier processus concerne la machine d'état qui cadence l'ensemble des quelques opérations à effectuer.

Il est à noter que je ne suis pas un professionnel du VHDL, et à part mon générateur de test DVB-S, ce n'est donc que mon deuxième essai concluant, attention donc de ne pas prendre comme exemple ce type de codage ou les parties logiques et processus sont abusivement mélangées.

Je me suis fais expliqué qu'il serait préfarable de n'avoir ds les processus que des affectations de type bascules et de traiter en dehors les combinaisons de signaux.

Il y a également une amélioration facile pour synchroniser les 2 sorties IQ sur l'horloge, car actuellement on peut observer à l'oscillo quelques ns d'écart.

Schéma et routage: Revus et corrigés par F1HPR et F1ULQ

Voici un exemple de fichier qui permet d'éviter de se re »taper » toutes les pinoches sous quartus.

Conclusion :

Ce que nous avons réalisé n'est ni plus ni moins qu'un générateur digital bon marché.
Il est dédié à notre application, et son principe général, permet l'extension à d'innombrables autres applications.

Le principe est applicable à un TS (en lieu et place des dibits) pour vérifier le fonctionnement du codeur canal.

En employant un FPGA avec de la mémoire interne on peut bien sur rendre le système plus adaptatif et étendre les possibilités en le couplant à un PC.

Retour maison