Le décodeur de Reed-Solomon utilisé dans la chaîne décode le code (204, 188, 8), version raccourcie du code (255, 239, 8) dont les symboles sont des octets. Il est découpé fonctionnellement en cinq sous-blocs : le calcul des syndromes, la détermination des polynômes localisateur et évaluateur d’erreurs, le calcul des racines du polynôme localisateur d’erreurs, le calcul de la valeur des erreurs et la correction des erreurs, comme l’illustre la Figure 5-6 extraite de [JEG03]. Le développement s’est fait en trois phases : écriture d’un modèle de référence en C, écriture et synthèse avec GAUT des algorithmes de chacun des blocs en VHDL comportemental et validation par simulation des codes RTL générés.
Figure 5-6 : Architecture fonctionnelle du décodeur de Reed-Solomon
L’implantation initiale envisagée est matérielle pour les quatre premiers blocs et logicielle pour le dernier. La raison principale de ce découpage en cinq blocs repose sur le fait que l’algorithme complet est beaucoup trop complexe et génère des architectures trop volumineuses et trop lentes. L’optimisation des fréquences et de la surface nécessite une conception par sous-blocs de tailles plus petites, pour lesquels on maîtrise mieux les performances lors de la synthèse logique et physique.
Ce phénomène s’inscrit dans la démarche de conception des systèmes insensibles à la latence dont le but est de réaliser des systèmes par composition de blocs localement plus performants. L’introduction de la méthodologie LIS dans GAUT permet donc d’envisager le découpage d’un algorithme en plusieurs séquences plus performantes et leur aboutement ultérieur sans pertes de performances dues à la synchronisation inter-blocs.
• Bloc de calcul des syndromes
Figure 5-7 : Interface du bloc de calcul des syndromes
Les résultats de synthèse sont les suivants :
Latence (ns) 32700 16730
Nombre d’états de la FSM = nEtats 1671 3269
Nombre de bus = nBus 41 5
Nombre d’entrées-sorties = nES 221 221
Débit atteint (Mbit/s) 50 97,6
FSM équivalente (nSync/nCalc/nSig) 6/279/41 44/74/41
Surface/Vitesse FSM équivalente (slices/MHz) 623/92 1124/92
Surface/Vitesse du processeur équivalent (slices/MHz) 42/103 45/100
Gains en % -93/+12 -96/+9
Tableau 5-2 : Performances du bloc de calcul des syndromes
On constate que des débits, qui vont quasiment du simple au double, sont atteignables et que le nombre d’états de calcul va de 1671 à 3269 états. La communication avec la chaîne fait apparaître un total de 221 données à recevoir ou à transmettre par itération de l’algorithme sur un nombre de bus qui va d’un minimum de 5 jusqu’à un maximum de 41. Ce bloc est synthétisé avec une unité de communication à base de processeur de synchronisation dont nous estimons le gain en surface et en vitesse. Pour cela nous déterminons les caractéristiques de la FSM la plus petite qui assure la synchronisation des 221 entrées-sorties du bloc. Ainsi, en faisant l’hypothèse que les entrées-sorties transitent en un nombre minimum d’états de synchronisation on obtient les règles de calcul suivantes :
• Bloc de calcul des polynomes
Figure 5-8 : Interface du bloc de calcul des polynomes
De même, pour le bloc de calcul des polynomes, les résultats sont les suivants :
Latence (ns) 3440 2170
Nombre d’états de la FSM = nEtats 343 217
Nombre de bus = nBus 15 6
Nombre d’entrées-sorties = nES 35 35
Débit atteint (Mbit/s) 470 752
FSM équivalente (nSync/nCalc/nSig) 3/114/35 6/36/35
Surface/Vitesse FSM équivalente (slices/MHz) 74/133 80/130
Surface/Vitesse du processeur équivalent (slices/MHz) 34/104 34/104
Gains en % -54/-22 -58/-20
Tableau 5-3 : Performances du bloc de calcul des polynomes
On constate que, dans ce cas précis, la fréquence du processeur de synchronisation est plus faible que celle de la FSM. Cela est du au fait que la FSM n’est pas suffisamment complexe (3 points de synchronisation seulement) pour que sa vitesse chute en dessous des 100 MHz visés.
• Bloc de calcul des racines
Figure 5-9 : Interface du bloc de calcul des racines
De même, pour le bloc de calcul des racines, les résultats sont les suivants :
Latence (ns) 37890
Nombre d’états de la FSM = nEtats 3789
Nombre de bus = nBus 4
Nombre d’entrées-sorties = nES 27
Débit atteint (Mbit/s) 43
FSM équivalente (nSync/nCalc/nSig) 7/541/27
Surface/Vitesse FSM équivalente (slices/MHz) 1569/87
Surface/Vitesse du processeur équivalent (slices/MHz) 37/100
Gains en % -98/+15
Tableau 5-4 : Performances du bloc de calcul des racines
On constate une réduction de la surface et un accroissement de la fréquence du wrapper grâce à l’emploi du processeur de synchronisation..
• Bloc de calcul de la valeur des erreurs
Figure 5-10 : Interface du bloc de calcul de la valeur des erreurs
De même, pour le bloc de calcul de la valeur des erreurs, les résultats sont les suivants :
Latence (ns) 1060
Nombre d’états de la FSM = nEtats 105
Nombre de bus = nBus 18
Nombre d’entrées-sorties = nES 37
Débit atteint (Mbit/s) 1539
FSM équivalente (nSync/nCalc/nSig) 3/35/37
Surface/Vitesse FSM équivalente (slices/MHz) 62/133
Surface/Vitesse du processeur équivalent (slices/MHz) 36/104
Gains en % -42/-22
Tableau 5-5 : Performances du bloc de calcul de la valeur des erreurs
De même que pour le bloc de calcul des polynomes, la fréquence du processeur de synchronisation est inférieure à celle de la FSM car cette dernière n’est pas assez complexe.
• Conclusion
Le Tableau 5-6 résume les résultats obtenus pour le décodeur de Reed-Solomon complet. On constate que, si le processeur de synchronisation n’est pas utilisé, alors le wrapper de synchronisation consomme de l’ordre de 2328 à 2835 slices en surface et fonctionne à une fréquence maximale de seulement 92 MHz à cause du bloc de calcul des syndromes qui est le plus lent. Par contre, l’emploi du processeur de synchronisation consomme de 149 à 152 slices et fonctionne à une fréquence de 100 MHz, malgré les deux « contre-performances » locales pour les blocs de calcul des polynomes et de calcul de la valeur de l’erreur.
Syndromes Polynomes
Cad. min Cad. max Cad. Min Cad. Max
Racines Valeur des erreurs 1124/92 623/92 80/130 74/133 1569/87 62/133 Gains (%) 45/100 42/103 34/104 34/104 37/100 36/104 Surface -96 -93 -58 -54 -97 -42 Fréquence +9 +12 -20 -22 +15 -22
Tableau 5-6 : Résumé des gains obtenus pour le décodeur Reed-Solomon
Le processeur de synchronisation réduit donc la surface du wrapper de synchronisation de deux ordres de grandeur et améliore légèrement la fréquence maximale de fonctionnement. La cible de synthèse étant 100 MHz, nous concluons que le processeur de synchronisation ne pénalise par la synthèse des unités de traitement et de mémorisation et remplit ainsi son rôle.
2.5.3. Viterbi (Sacet)
Le décodeur de Viterbi employé par la norme DVB-DSNG est un décodeur à 64 états supportant les taux de codage de 1/2, 2/3, 3/4, 5/6, 6/7 et 7/8. Il peut fonctionner dans des conditions de densités spectrales différentes et permet d’adapter la puissance de calcul nécessaire à mettre en œuvre (et donc l’aptitude à corriger des erreurs) à la « mauvaise » qualité du canal de transmission satellite. Cette flexibilité est requise car le canal de transmission peut être bruité par des conditions atmosphériques particulières dont les plus contraignantes sont la pluie.
UCom
UT
UC
UM
Si
Sq
M0
M1
M3
M2
Figure 5-11 : Interface du décodeur de Viterbi
Le décodeur de Viterbi de la Sacet est synthétisable en un seul bloc. Ses entrées sorties sont peu nombreuses : 2 entrées et 4 sorties à chaque exécution. Les résultats sont les suivants :
Latence (ns) 10000
Nombre d’états de la FSM = nEtats 699
Nombre de bus = nBus 6
Nombre d’entrées-sorties = nES 6
FSM équivalente (nSync/nCalc/nSig) 3/2/3495
Surface/Vitesse FSM équivalente (slices/MHz) 3002/81
Surface/Vitesse du processeur équivalent (slices/MHz) 25/113
Gains en % -99/+40
Tableau 5-7 : Performances du décodeur de Viterbi
Le décodeur de Viterbi est un exemple de circuit synchrone spécifié par un seul algorithme. Dans ces conditions, les résultats obtenus prouve que le processeur de synchronisation joue son rôle comme convenu et permet d’optimiser la surface et de préserver la vitesse.