Contrairement aux processeurs de signaux numériques qui priorisent la programmation des tâches et la prévision des branches, les processeurs de signaux numériques sont conçus pour des opérations arithmétiques déterministes et à haut débit, généralement des opérations de traitement de signaux en temps réel, sur des données de diffusion. Le seul facteur le plus important qui dicte la capacité d'un DSP à maintenir sa performance théorique de pointe est son architecture de mémoire. Le sous-système mémoire détermine la rapidité avec laquelle les opérandes peuvent être récupérés du stockage, la façon dont les résultats intermédiaires sont tamponnés et la façon dont les données finales sont écrites.

Le rôle fondamental de la mémoire dans le traitement des signaux charge de travail

Les algorithmes tels que les filtres à réponse par impulsion finie (FIR), les transformations rapides de Fourier (FFT), la convolution et la multiplication matricielle fonctionnent sur de vastes séries de données échantillonnées. Ces algorithmes présentent un modèle d'accès prévisible et répétitif : une séquence de coefficients (stockés en mémoire) est multipliée à plusieurs reprises par des échantillons de données entrants. L'unité logique arithmétique (ALU) d'un DSP peut effectuer une opération MAC dans un cycle d'horloge unique, mais seulement si le coefficient et l'échantillon de données sont disponibles simultanément. Si le sous-système mémoire ne peut pas livrer les deux opérandes par cycle, les décrochages de pipelines et le débit efficace baissent.

En outre, les contraintes en temps réel exigent que le traitement soit conforme au taux d'échantillonnage. Pour l'audio à 48 kHz, le processeur doit terminer son algorithme en 20 microsecondes environ. Pour la vidéo à 30 images par seconde avec une résolution de 1080p, cette exigence devient des dizaines de millisecondes par image, et souvent beaucoup plus serrée pour le traitement sous-cadre. La latence de la mémoire et la bande passante dictent directement si ces délais peuvent être respectés.

Types de mémoire de base dans les systèmes DSP

Enregistrer la mémoire

Les registres sont la mémoire la plus rapide de tous les DSP. Généralement mis en œuvre comme des flower-flops ou petits tableaux SRAM dans le cœur du processeur, les registres détiennent des opérandes qui sont activement calculés. La plupart des DSP ont un ensemble dédié d'accumulateurs (par exemple, des registres 40-bit ou 64-bit pour empêcher le débordement dans les opérations MAC) et un ensemble de registres d'adresses pour l'arithmétique pointeur. La latence d'accès est un cycle d'horloge ou moins, mais la capacité totale est très petite – généralement moins de 256 octets.

Mémoire cache

La mémoire cache est un petit SRAM rapide qui stocke des copies de données fréquemment consultées ou des instructions à partir de la mémoire principale. Les DSP peuvent inclure des caches d'instructions séparés (I-cache) et des caches de données (D-cache) pour éviter toute contestation. Cependant, les caches introduisent une imprévisibilité – un cache-décrochage peut bloquer le pipeline pendant des dizaines ou des centaines de cycles – ce qui pose problème pour les systèmes en temps réel.

Mémoire sur le bouton (Scratchpad Memory)

Contrairement aux caches, la mémoire de la mémoire de la mémoire de la puce est explicitement gérée par un logiciel. Les données doivent être déplacées dans et hors du programmeur ou du compilateur. Ce comportement déterministe fait de la scratchpad le choix préféré pour le traitement en temps réel des signaux où le temps d'exécution le plus mauvais (WCET) doit être connu. La SRM de la puce peut être partitionnée dans plusieurs banques, chacune accessible par différentes unités fonctionnelles en parallèle. Les tailles typiques vont de 32 Ko à plusieurs mégaoctets, selon la famille DSP (par exemple, la série Texas Instruments C6000 fournit jusqu'à 8 Mo de SRAM de la puce).

Mémoire externe (DRAM/Flash)

La mémoire externe, généralement DDR SDRAM (en particulier LPDDR pour mobile/embuded), fournit une grande capacité — gigaoctets — au coût de la latence élevée (teneur de nanosecondes à 100+ ns) et une énergie plus élevée par accès. Pour de nombreuses applications DSP, la mémoire externe contient de grands tableaux de données qui dépassent le stockage sur puce, comme les cadres vidéo, les tampons audio ou les tables de recherche. La mémoire Flash (NOR ou NAND) est utilisée pour stocker le code de programme et les données constantes qui persistent sur les cycles de puissance. L'accès à la mémoire externe nécessite l'utilisation de contrôleurs de mémoire qui gèrent l'arbitrage des bus, les cycles de rafraîchissement et la commande des données.

Modèles d'architecture de mémoire dans les DSP

Architecture Harvard

L'architecture Harvard sépare la mémoire d'instruction et la mémoire de données en bus physiquement distincts, permettant un accès simultané à la fois pendant un cycle d'horloge unique. Un DSP typique avec l'architecture Harvard peut obtenir une instruction de la mémoire de programme (souvent flash sur puce ou SRAM) tout en lisant deux mots de données de la mémoire de données – un pour le coefficient et un pour l'échantillon.

Von Neumann Architecture

L'architecture von Neumann (ou Princeton) utilise un espace mémoire partagé unique pour les instructions et les données, desservi par un bus. Cela simplifie la conception du système et la cartographie de la mémoire, mais crée un goulot d'étranglement fondamental (souvent appelé le goulot d'étranglement ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Architecture Harvard modifiée (avec instruction et caches de données)

Pour combler l'écart entre le parallélisme de Harvard et la flexibilité de von Neumann, de nombreux DSP mettent en place une architecture modifiée de Harvard. Ceci utilise des bus d'instruction et de données séparés au niveau du noyau, mais la hiérarchie de la mémoire (y compris les caches et la mémoire principale) est unifiée. Par exemple, un cache d'instruction L1 est installé sur le bus d'instruction, et un cache de données L1 est installé sur le bus de données, mais ils proviennent tous deux de leurs lignes d'un cache L2 partagé ou d'une mémoire externe. Cela permet au noyau de récupérer des instructions et des données en parallèle des caches, tandis que la mémoire de soutien est unifiée pour la simplicité.

Incidences de la VLIW et du SIMD

Pour soutenir le parallélisme VLIW, l'architecture de mémoire doit fournir suffisamment de ports mémoire pour alimenter toutes les unités fonctionnelles. Cela signifie souvent plusieurs banques de mémoire, chacune avec son propre port de lecture. Par exemple, le C6000 a deux banques de mémoire de données (side A et côté B) connectées à deux chemins de données, permettant des charges simultanées des deux banques. De même, les unités SIMD (Single Instruction Multiple Data) nécessitent des bus de données larges (p. ex. 128-bit ou 512-bit) pour charger plusieurs mots de données dans un cycle. Les architectures de mémoire doivent être adaptées à la largeur du chemin de données.

Hiérarchies et stratégies de mémoire avancées

Cache multiniveaux et égratignures hybrides

Les DSP modernes combinent souvent un petit cache L1 (p. ex., 16 KB instruction + 16 KB data) avec un L2 SRAM plus grand (p. ex., 256 KB) qui peut être configuré comme cache ou scratchpad. Par exemple, le noyau TI C66x permet de partitionner la mémoire L2 entre cache et SRAM sur une base bloc par bloc. Cette approche hybride donne au développeur le contrôle sur les données les plus performantes tout en laissant moins de données critiques bénéficier de la mise en cache.

Moteurs DMA (Accès direct à la mémoire)

Les contrôleurs DMA font partie intégrante de l'efficacité de la mémoire DSP. Ils permettent le transfert de données entre la mémoire externe et la mémoire sur puce sans intervention du CPU. Un modèle typique est d'utiliser un schéma double tampon (ping-pong) : tandis que le DSP traite les données du tampon A, le DMA remplit le tampon B de la mémoire externe, et une fois le traitement sur A effectué, les rôles swap. Cela masque la la latence de l'accès à la mémoire externe et maintient le pipeline DSP occupé.

Mémoire bancaire et interleaving

Pour fournir une bande passante élevée, le SRAM sur puce est souvent divisé en plusieurs banques (p. ex., 8 ou 16). Chaque banque a son propre port de lecture/écriture, de sorte que de multiples accès simultanés sont possibles tant qu'ils ciblent différentes banques. Interleaving – diffusion d'adresses successives dans les banques – réduit les conflits bancaires pour des schémas d'accès séquentiels (communs dans les boucles DSP). Par exemple, un SRAM de 512 KB pourrait être organisé comme 8 banques de 64 KB chacune, avec des adresses modulo 8 réparties entre les banques.

Boufferes de boucle (Support de boucles de boucles hors-tête)

Un tampon de boucle peut contenir un petit noyau (p. ex. 128 à 2048 instructions) qui est exécuté à plusieurs reprises sans récupérer de mémoire principale. Combiné avec les modes d'adressage pour le tampon circulaire, cela élimine les frais généraux d'accès à la mémoire pour les boucles serrées – une occurrence courante dans le traitement des signaux. Par exemple, le TI C5500 dispose d'un cache d'instructions de 4 KB qui peut également fonctionner comme un tampon de boucle. Cette architecture réduit considérablement la consommation d'énergie parce que le bus mémoire principal est inactif pendant l'exécution de la boucle.

Cohérence de cache dans les PSD multicore

Lorsque plusieurs cœurs DSP partagent des données (par exemple, dans une application radar ou MIMO), les protocoles de cohérence du cache empêchent les données inexistantes. On utilise le snooping matériel ou la cohérence gérée par logiciel (par exemple, en utilisant des caches invalidées). Certains DSP évitent les caches en faveur du scratchpad pour contourner les frais généraux de cohérence. Par exemple, Freescale , MSC8156 (maintenant NXP) utilise une approche -no cache , avec un SRAM partagé de 512 KB.

Impact de l'architecture de mémoire sur les principales performances

Pour illustrer, considérez un filtre FIR de longueur N. Avec une architecture de mémoire idéale (Harvard + deux ports de lecture + accès à un cycle), chaque robinet nécessite un cycle pour la charge de coefficient, un pour la charge d'échantillon, et un pour MAC – efficacement trois cycles par robinet. En utilisant une instruction de double charge, qui peut être réduite à un cycle par robinet. Si la mémoire ne peut pas fournir les deux opérandes chaque cycle, le débit chute proportionnellement. Pour 1000 tap FIR à 48 kHz, le débit requis est de 48 millions de MAC par seconde, facilement atteint par un DSP de 100 MHz avec une bande passante de mémoire adéquate.

Pour le traitement FFT, l'algorithme Cooley-Tukey implique des opérations papillons qui lisent deux valeurs complexes et un facteur de rotation, puis écrivent deux résultats. Avec un seul port mémoire, cela nécessite quatre lectures et deux écritures par papillon, prenant au moins six cycles. Avec une architecture à double banque (un pour les données, un pour les coefficients), les lectures peuvent être recoupées, réduisant à trois cycles par papillon.

Dans les télécommunications, les algorithmes de détection de symboles (Viterbi, MLSE) nécessitent un retour en arrière avec un accès aléatoire aux mesures de l'état. Ici, SRAM avec faible latence est essentiel pour maintenir le taux de symbole en temps réel.

Considérations de conception pour les ingénieurs du système

Lors de la conception d'un système basé sur le DSP, les ingénieurs doivent partager les données de l'application dans toute la hiérarchie de la mémoire.

  • Position des données: Quels tableaux sont placés dans la mémoire sur puce SRAM vs DRAM externe? Généralement, le jeu de travail pour l'algorithme le plus fréquemment exécuté (par exemple, coefficients de filtre, variables d'état) doit s'intégrer dans la mémoire sur puce.
  • Mémoires : Utilisez les registres d'attributs mémoire DSP="s pour définir les politiques de cache (p. ex., écriture, écriture-retour, non-cacheable). Pour les données partagées, utilisez non-cacheable ou répartissez dans la SRAM partagée pour éviter les problèmes de cohérence.
  • Utilisation de scripts de linker:[ Définir des sections de mémoire dans le fichier de commande de linker. Par exemple, placer .text dans le SRAM interne pour une exécution rapide, et .data dans le DRAM externe pour les grands tampons. Certains DSP supportent DMA pour copier des données critiques du flash vers SRAM pendant le démarrage.
  • Double tampon avec DMA: Allouer deux tampons dans le SRAM sur puce. Configurer un canal DMA pour remplir l'un tandis que le DSP traite l'autre. S'assurer que la taille du transfert DMA et les adresses source/destination sont alignées sur les largeurs du bus pour maximiser le débit.
  • Choisir la mémoire externe:[ Pour une bande passante élevée, considérer LPDDR4 ou HBM (mémorisation à haute bande) pour des applications à forte intensité de mémoire comme le radar ou le bandeau de base 5G. Pour une faible puissance, utiliser le flash série NOR pour le code et exécuter en place (XIP) si le DSP le supporte.
  • Gestion de la puissance:[ Utilisez une horloge sur des banques de mémoire qui ne sont pas en service (p. ex., les interfaces externes au ralenti peuvent être mises en auto-réfraîchissement). De nombreux DSP permettent une échelle de tension pour les SRAM sur puce pour réduire la puissance dynamique.

Orientations futures de l'architecture mémoire DSP

Les applications DSP émergentes, comme l'inférence d'apprentissage profond sur les périphériques de bord, le traitement vidéo en temps réel 4K/8K et les besoins de mémoire de radio (SDR) définis par logiciel, sont plus visibles.

  • 3D mémoire empilée (HBM, HBM2E):[ Déjà utilisée dans les GPU haut de gamme, HBM est intégrée dans les DSP et les FPGA pour les systèmes nécessitant une bande passante massive (jusqu'à 460 Go/s par pile). La proximité réduit la latence et la puissance.
  • Mémoire non volatile sur puce (eNVM):[ Les technologies émergentes comme le RAMM ou le ReRAM peuvent remplacer le SRAM sur puce pour le stockage de code, réduisant le temps de démarrage et éliminant le besoin de flash externe. Ces mémoires sont presque aussi rapides que SRAM mais conservent des données sans puissance.
  • Les accélérateurs réseau neuronaux avec mémoire de poids locale: Les DSP conçus pour l'inférence AI comprennent un tampon de poids local (souvent SRAM ou SRAM-like) qui peut tenir des matrices de poids pour éviter les lectures répétées de la mémoire externe.
  • Hiérarchies de mémoire adaptives : Les futurs DSP peuvent déployer une mémoire reconfigurable (p. ex. eFPGA avec mémoire intégrée) qui peut être réutilisée comme cache, scratchpad ou FIFO selon la charge de travail.
  • Caisse de cache gérée par logiciel:** Certaines architectures de recherche proposent de remplacer le cache matériel par des mémoires contrôlées par logiciel pour les sections critiques tout en conservant le cache pour les sections non critiques.

Conclusion

L'architecture de mémoire est l'épine dorsale de l'efficacité du processeur DSP. Une compréhension approfondie des compromis entre le registre, le cache, le SRAM sur puce et la mémoire externe permet aux concepteurs de système de minimiser la latence d'accès aux données, de maximiser le débit et de réduire la consommation d'énergie. Le choix du modèle d'architecture (Harvard vs modifié Harvard vs von Neumann), l'utilisation de stratégies avancées comme les tampons DMA, les banques et les boucles, et la partition soigneuse des données dans la hiérarchie de la mémoire sont autant d'étapes essentielles pour atteindre les objectifs de traitement en temps réel des signaux.