Enjeux de Performence et Approche DA
Dans le domaine du traitement vidéo numérique, la contrainte principale réside dans la capacité à effectuer un grand nombre d'opérations arithmétiques dans des délais stricts. Les architectures conventionnelles reposant sur des unités de multiplication-accumulation (MAC) consomment considérablement de ressources silicium. L'arithmétique distribuée (Distributed Arithmetic, DA) propose une alternative structurelle en substituant les multiplications dynamiques par des accès à des tables de correspondance (LUT) combinés à des décalages binaires.
Le concept fondamental repose sur la précalculation exhaustive des combinaisons possibles. Prenons l'exemple d'une opération linéaire de type α·I₁ + β·I₂ + γ·I₃. Si les entrées sont codées sur 8 bits, l'approche classique mobilise trois multiplicateurs matériels. En revanche, la méthode DA génère beforehand les résultats pour chaque combinaison de bits (soit 2³ configurations), les stocke en mémoire, et reconstruit le résultat final par accumulation pondérée. Cette technique est particulièrement adaptée aux architectures FPGA, où les LUT sont abondantes contrairement aux blocs DSP dédiés.
Pour un flux vidéo exigeant, tel qu'un format 4K, le nombre de pixels à traiter par seconde impose une parallélisation massive. L'usage de multiplicateurs classiques saturerait rapidement la surface du die et la budget énergétique. La solution DA échange une faible quantité de mémoire contre une réduction drastique de la logique combinatoire.
Les benchmarks sur silicium montrent qu'un filtre implémenté via DA réduit l'utilisation des ressources logiques de 40 à 60 % par rapport à une architecture MAC standard, tout en permettant une fréquence d'horloge supérieure de 25 % environ.
Fondements Mathématiques et Décomposition
Principe de Décomposition Binaire
Pour illustrer le mécanisme, considérons un filtre à réponse impulsionnelle finie (RIF) de 4 taps. La sortie S[n] s'exprime traditionnellement comme une somme pondérée des échantillons d'entrée E :
S[n] = w₀·E[n] + w₁·E[n-1] + w₂·E[n-2] + w₃·E[n-3]
Ici, w₀ à w₃ représentent les coefficients constants du filtre. En décomposant chaque échantillon E selon sa représentation binaire complémentée sur une largeur B, on obtient :
E[n-i] = -2^(B-1)·bit_{B-1} + Σ_{j=0}^{B-2} 2^j · bit_j
En injectant cette décomposition dans l'équation du filtre et en regroupant les termes par poids binaire, la formule se transforme en :
S[n] = -2^(B-1)·Term_{B-1} + Σ_{j=0}^{B-2} 2^j · Term_j
Le terme Term_j correspond à la somme partielle des coefficients activés par le bit j de chaque entrée :
Term_j = w₀·E[n]_j + w₁·E[n-1]_j + w₂·E[n-2]_j + w₃·E[n-3]_j
L'avantage décisif est que pour un filtre à 4 taps, il n'existe que 16 combinaisons possibles de bits d'entrée (2⁴). Ces 16 valeurs de Term_j sont calculées une fois et stockées. Le calcul en temps réel se réduit à une adresse LUT formée par les bits courants des 4 entrées, suivie d'un processus de décalage et d'accumulation.
Architecture Matérielle Cible
La conception hardawre d'un moteur DA s'articule autour de trois sous-systèmes interdépendants :
- Bloc de Mémoire Précalculée (LUT) : Contient les sommes partielles prédéfinies. Pour un filtre d'ordre N, la profondeur mémoire est de 2^N. L'optimisation peut nécessiter une hiérarchisation de la mémoire ou l'usage de Block RAM pour respecter les contraintes de timing.
- Unité d'Accumulation Décalée : Effectue la reconstruction du résultat. Cette unité doit gérer :
- L'extension de signe pour éviter les dépassements de capacité lors des additions successives.
- L'insertion de registres de pipeline pour maximiser la fréquence de fonctionnement.
- La logique de troncature ou d'arrondi pour maintenir la précision numérique requise.
- Logique de Séquençage : Pilote le flux de données. Ses responsabilités incluent :
- La sélection itérative des bits de poids significatif vers les moins significatifs.
- La génération des adresses pour la table de consultation.
- La gestion des signaux de reset et de validation de la sortie finale.