Digitale Signalprozessoren (DSPs) sind spezialisierte Mikroprozessoren, die entwickelt wurden, um Echtzeit-Signalverarbeitungsaufgaben mit außergewöhnlicher Effizienz zu bewältigen. Im Gegensatz zu Allzweck-CPUs, die Aufgabenplanung und -verzweigungsvorhersage priorisieren, sind DSPs für deterministische, hochdurchsatz-arithmetische Operationen - typischerweise multi-akkumulierte (MAC) Operationen - bei Datenstreaming konzipiert. Der wichtigste Faktor, der bestimmt, ob ein DSP seine theoretische Spitzenleistung aufrechterhalten kann, ist seine Speicherarchitektur. Das Speicher-Subsystem bestimmt, wie schnell Operanden aus dem Speicher abgerufen werden können, wie Zwischenergebnisse gepuffert werden und wie endgültige Daten ausgeschrieben werden. Eine Diskrepanz zwischen den Recheneinheiten des Prozessors und dem Speichersystem schafft einen Engpass, der die Pipeline blockiert und Strom verschwendet.

Dieser Artikel bietet einen umfassenden Einblick in die Speicherarchitektur moderner DSPs, der die verschiedenen verwendeten Speichertypen, die Architekturmodelle, die sie steuern, erläutert erweiterte hierarchische Strategien und die direkten Auswirkungen auf die Anwendungsleistung. Das Verständnis dieser Prinzipien ist für Systemarchitekten, eingebettete Software-Ingenieure und

Die grundlegende Rolle des Speichers in der Signalverarbeitung Workloads

Die Arbeitslasten für die Signalverarbeitung sind grundsätzlich datenintensiv. Algorithmen wie FIR-Filter (finite impulse response, FIR), FT-Transformationen (fast Fourier transforms, FFT), Faltung und Matrixmultiplikation arbeiten mit großen Arrays von abgetasteten Daten. Diese Algorithmen weisen ein vorhersagbares, sich wiederholendes Zugriffsmuster auf: Eine Sequenz von Koeffizienten (gespeichert) wird wiederholt mit eingehenden Datenproben multipliziert. Die Recheneinheit (ALU) eines DSP kann eine MAC-Operation in einem einzigen Taktzyklus durchführen, aber nur, wenn sowohl der Koeffizient als auch die Datenprobe gleichzeitig verfügbar sind. Wenn das Speicherteil nicht die beiden Operanden pro Zyklus liefern kann, wird die Pipeline blockiert und der effektive Durchsatz sinkt.

Außerdem erfordern Echtzeit-Einschränkungen, dass die Verarbeitung mit der Abtastrate Schritt hält. Für Audio bei 48 kHz muss der Prozessor seinen Algorithmus innerhalb von etwa 20 Mikrosekunden abschließen. Für Video bei 30 Bildern pro Sekunde mit 1080p-Auflösung wird diese Anforderung zu Dutzenden Millisekunden pro Bild - und oft viel enger für die Sub-Frame-Verarbeitung. Speicherlatenz und Bandbreite bestimmen direkt, ob diese Fristen eingehalten werden können. Zusätzlich zur Rohgeschwindigkeit ist der Stromverbrauch ein wichtiges Anliegen.

Jeder Speicherzugriff verbraucht Energie, und Off-Chip-Speicherzugriffe können um Größenordnungen teurer sein als On-Chip-Zugriffe. Daher minimiert eine effiziente Speicherarchitektur die Notwendigkeit, Off-Chip-Zugriffe zu nutzen, indem die Verwendung von schnellem, stromsparendem On-Chip-Speicher maximiert wird.

Kernspeichertypen in DSP-Systemen

Registerspeicher

Die meisten DSP-Kerne haben einen dedizierten Satz von Akkumulatoren (z. B. 40-Bit- oder 64-Bit-Register, um einen Überlauf in MAC-Operationen zu verhindern) und einen Satz von Adressregistern für die Zeigerarithmetik. Die Zugriffslatenz beträgt einen Taktzyklus oder weniger, aber die Gesamtkapazität ist sehr klein - normalerweise weniger als 256 Bytes. Die Registerzuweisung steht vollständig unter Programmiererkontrolle (oder Compileroptimierung), und eine effiziente Registernutzung ist ein Kennzeichen von Hochleistungs-DSP-Code.

Cache Memory

Der Cache-Speicher ist ein kleiner, schneller SRAM, der Kopien von häufig aufgerufenen Daten oder Anweisungen aus dem Hauptspeicher speichert. DSPs können separate Instruktions-Caches (I-Cache) und Daten-Caches (D-Cache) enthalten, um Konflikte zu vermeiden. Allerdings führen Caches Unvorhersehbarkeit ein - ein Cache-Ausfall kann die Pipeline für Dutzende oder Hunderte von Zyklen blockieren - was für harte Echtzeitsysteme problematisch ist. Infolgedessen deaktivieren viele hochzuverlässige DSP-Anwendungen Caches oder verwenden sie nur in einem "Lock" -Modus, in dem kritischer Code und Daten im Cache festgehalten werden. Wenn Caches verwendet werden, beeinflussen ihre Größe, Assoziativität und Zeilengröße dramatisch die Trefferraten.

Typische DSP-Caches reichen von 4 KB bis 512 KB pro Level, mit den Leveln Null bis zwei (L0, L1, L2).

On-Chip-SRAM (Scratchpad-Speicher)

Ein statischer On-Chip-RAM (SRAM), der oft als Scratchpad-Speicher bezeichnet wird, bietet einen vorhersehbaren Speicher mit geringer Latenz direkt auf dem Prozessor-Die. Im Gegensatz zu Caches wird der Scratchpad-Speicher explizit von Software verwaltet - Daten müssen vom Programmierer oder Compiler ein- und ausgeschoben werden. Dieses deterministische Verhalten macht Scratchpad zur bevorzugten Wahl für Echtzeit-Signalverarbeitung, bei der die Worst-Case-Ausführungszeit (WCET) bekannt sein muss. On-Chip-SRAM kann in mehrere Banken aufgeteilt werden, die jeweils von verschiedenen funktionalen Einheiten parallel zugänglich sind. Typische Größen reichen von 32 KB bis zu mehreren Megabyte, abhängig von der DSP-Familie (z. B. Texas Instruments C6000-Serie bietet bis zu 8 MB On-Chip-SRAM).

Externer Speicher (DRAM/Flash)

Externer Speicher, normalerweise DDR SDRAM (insbesondere LPDDR für mobile/embedded), bietet große Kapazität - Gigabyte - auf Kosten hoher Latenz (Zehn Nanosekunden bis 100 ns) und höherer Energie pro Zugriff. Für viele DSP-Anwendungen enthält externer Speicher große Datenfelder, die den On-Chip-Speicher übersteigen, wie z. B. Videorahmen, Audiopuffer oder Nachschlagtabellen. Flash-Speicher (NOR oder NAND) wird zum Speichern von Programmcode und konstanten Daten verwendet, die über Leistungszyklen hinweg bestehen. Der Zugriff auf externen Speicher erfordert die Verwendung von Speichercontrollern, die Busarbitrierung, Aktualisierungszyklen und Datenbestellung verwalten. Erweiterte DSPs verfügen über mehrere externe Speicherschnittstellen (z. B. EMIF, DDR2/3/4, LPDDR4), um die verfügbare Bandbreite zu erhöhen.

Speicherarchitekturmodelle in DSPs

Harvard Architektur

Die Harvard-Architektur trennt den Befehlsspeicher und den Datenspeicher in physikalisch unterschiedliche Busse, so dass gleichzeitiger Zugriff auf beide während eines einzigen Taktzyklus möglich ist. Ein typischer DSP mit Harvard-Architektur kann eine Anweisung aus dem Programmspeicher abrufen (oft On-Chip-Flash oder SRAM), während er zwei Datenwörter aus dem Datenspeicher liest - eines für den Koeffizienten und eines für den Sample. Dies ist die Grundlage für die MAC-Ausführung im Einzelzyklus. Die meisten modernen DSPs (z. B. Analog Devices SHARC, TI C55x, C6000) verwenden eine modifizierte Harvard-Architektur, bei der die Anweisung und die Datenbusse getrennt sind, aber aus Gründen der Flexibilität miteinander verbunden werden können.

Von Neumann Architektur

Die von Neumann (oder Princeton)-Architektur nutzt einen einzigen gemeinsamen Speicherplatz für Anweisungen und Daten, der von einem Bus bedient wird. Dies vereinfacht das Systemdesign und die Speicherabbildung, schafft jedoch einen grundlegenden Engpass (oft als "von Neumann-Engpass" bezeichnet). Rein von Neumann wird im DSP-Kontext selten gesehen, da er nicht sowohl eine Anweisung als auch zwei Datenoperanden pro Zyklus liefern kann. Einige kostengünstige DSPs oder Mikrocontroller, die für einfache Signalverarbeitungsaufgaben verwendet werden (wie der Cortex-M4F), verwenden jedoch eine von Neumann-ähnliche Speicherabbildung mit separaten Bussen nur für eng gekoppelten Speicher. Der Kompromiss ist eine reduzierte Leistung, aber geringere Siliziumkosten.

Modified Harvard Architecture (mit Instruction und Data Caches)

Um die Lücke zwischen Harvards Parallelität und von Neumanns Flexibilität zu schließen, implementieren viele DSPs eine modifizierte Harvard-Architektur. Diese verwendet separate Befehls- und Datenbusse auf Kernebene, aber die Speicherhierarchie (einschließlich Caches und Hauptspeicher) ist vereinheitlicht. Zum Beispiel sitzt ein L1-Befehls-Cache auf dem Befehlsbus und ein L1-Daten-Cache auf dem Datenbus, aber beide beziehen ihre Leitungen aus einem gemeinsamen L2-Cache oder externen Speicher. Dies ermöglicht es dem Kern, Anweisungen und Daten parallel aus den Caches abzurufen, während der Backing-Speicher der Einfachheit halber vereinheitlicht ist. Diese Architektur wird in Hochleistungs-DSP + ARM-SoCs wie dem TI OMAP oder Qualcomm Hexagon verwendet.

VLIW und SIMD Implikationen

Um die VLIW-Parallelität aufrechtzuerhalten, muss die Speicherarchitektur genügend Speicherports bereitstellen, um alle funktionalen Einheiten zu versorgen. Dies bedeutet oft mehrere Speicherbänke mit jeweils eigenem Leseport. Beispielsweise hat der C6000 zwei Datenspeicherbänke (A-Seite und B-Seite), die mit zwei Datenpfaden verbunden sind, so dass gleichzeitige Lasten von beiden Banken möglich sind. Ebenso erfordern SIMD-Einheiten (Single Instruction Multiple Data) breite Datenbusse (z. B. 128-Bit oder 512-Bit), um mehrere Datenwörter in einem Zyklus zu laden. Speicherarchitekturen müssen auf die Breite des Datenpfads zugeschnitten sein.

Advanced Memory Hierarchien und Strategien

Multi-Level Cache und Scratchpad Hybride

Moderne DSPs kombinieren oft einen kleinen L1-Cache (z. B. 16 KB Befehl + 16 KB Daten) mit einem größeren L2-SRAM (z. B. 256 KB), der als Cache oder Scratchpad konfiguriert werden kann. Beispielsweise ermöglicht der TI C66x Kern die Partitionierung des L2-Speichers zwischen Cache und SRAM auf Block-für-Block-Basis. Dieser hybride Ansatz gibt dem Entwickler die Kontrolle über die leistungskritischsten Daten, während weniger kritische Daten vom Caching profitieren können. Der L2 kann auch zwischen mehreren Kernen in einem Multicore-DSP geteilt werden.

DMA (Direct Memory Access) Engines

DMA-Controller sind ein wesentlicher Bestandteil der DSP-Speichereffizienz. Sie ermöglichen Datenübertragungen zwischen externem Speicher und On-Chip-Speicher ohne CPU-Eingriff. Ein typisches Muster ist die Verwendung eines Doppelpuffer-Schemas (Ping-Pong): Während der DSP Daten aus Puffer A verarbeitet, füllt der DMA Puffer B aus externem Speicher, und sobald die Verarbeitung auf A abgeschlossen ist, tauschen die Rollen aus. Dies verbirgt die Latenz des externen Speicherzugriffs und hält die DSP-Pipeline beschäftigt. DMA-Funktionen wie 2D-Adressierung, Schrittlänge und programmierbare Priorität ermöglichen eine effiziente Handhabung von multidimensionalen Arrays (z. B. Videorahmen).

Memory Banking und Interleaving

Um eine hohe Bandbreite zu bieten, wird ein On-Chip-SRAM häufig in mehrere Banken (z. B. 8 oder 16) aufgeteilt. Jede Bank hat ihren eigenen Lese-/Schreibanschluss, so dass mehrere gleichzeitige Zugriffe möglich sind, solange sie auf verschiedene Banken abzielen. Durch Interleaving - das Verbreiten aufeinanderfolgender Adressen über Banken - werden Bankkonflikte für sequentielle Zugriffsmuster (in DSP-Schleifen üblich) reduziert. Beispielsweise könnte ein 512 KB-SRAM als 8 Banken mit jeweils 64 KB Adressen organisiert sein, wobei die Adressen modulo 8 über Banken verteilt sind. Für ein FIR-Filter können Koeffizienten von einer Bank und Samples von einer anderen parallel gelesen werden.

Loop Buffers (Null-Overhead Loop Support)

Viele DSPs enthalten kleine, schnelle Speicherpuffer, die speziell für Softwareschleifen entwickelt wurden. Ein Schleifenpuffer kann einen kleinen Kernel (z. B. 128 bis 2048 Anweisungen) enthalten, der wiederholt ausgeführt wird, ohne aus dem Hauptspeicher abzurufen. In Kombination mit Adressierungsmodi für die zirkulare Pufferung entfällt der Speicherzugriff für enge Schleifen - ein häufiges Ereignis bei der Signalverarbeitung. Beispielsweise verfügt der TI C5500 über einen 4 KB Befehlscache, der auch als Schleifenpuffer arbeiten kann. Diese Architektur reduziert den Stromverbrauch drastisch, da der Hauptspeicherbus während der Schleifenausführung im Leerlauf ist.

Cache-Kohärenz in Multicore-DSPs

Wenn mehrere DSP-Kerne Daten gemeinsam nutzen (z. B. in einer Radar- oder MIMO-Anwendung), verhindern Cache-Kohärenzprotokolle veraltete Daten. Hardware-Snooping oder softwaregesteuerte Kohärenz (z. B. mit Cache-Ungültigkeiten) werden verwendet. Einige DSPs vermeiden Cache ganz zugunsten von Scratchpad, um die Kohärenz zu umgehen Overhead. Zum Beispiel verwendet Freescale MSC8156 (jetzt NXP) einen "No Cache" -Ansatz mit einem 512 KB gemeinsamen SRAM. Der Kompromiss ist erhöhter Programmieraufwand, um Datenbewegungen zu verwalten, aber deterministisches Echtzeitverhalten.

Auswirkungen der Speicherarchitektur auf die wichtigsten Leistungsmetriken

Die Speicherarchitektur beeinflusst direkt vier kritische Leistungsmetriken: Durchsatz (Operationen pro Sekunde), Latenzzeit (Zeit bis zum ersten Ergebnis), Stromverbrauch und Echtzeit-Determinismus. Um dies zu veranschaulichen, betrachten Sie ein FIR-Filter der Länge N. Bei einer idealen Speicherarchitektur (Harvard + zwei Leseports + Einzelzykluszugriff) benötigt jeder Abgriff einen Zyklus für Koeffizientenlast, einen für Abtastlast und einen für MAC - effektiv drei Zyklen pro Abgriff. Durch Verwendung einer Doppellastanweisung, die auf einen Zyklus pro Abgriff reduziert werden kann. Wenn der Speicher nicht beide Operanden pro Zyklus versorgen kann, sinkt der Durchsatz proportional. Für 1000-Tap-FIR bei 48 kHz-Abtastung beträgt der erforderliche Durchsatz 48 Millionen MACs pro Sekunde - leicht erfüllt durch einen 100 MHz-DSP mit ausreichender Speicherbandbreite.

Für die FFT-Verarbeitung beinhaltet der Cooley-Tukey-Algorithmus Butterfly-Operationen, die zwei komplexe Werte und einen Zwielichtfaktor lesen und dann zwei Ergebnisse schreiben. Mit einem einzigen Speicheranschluss sind vier Lesevorgänge und zwei Schreibvorgänge pro Butterfly erforderlich, wobei mindestens sechs Zyklen erforderlich sind. Mit einer Dual-Bank-Architektur (eine für Daten, eine für Koeffizienten) können die Lesevorgänge überlappen und auf drei Zyklen pro Butterfly reduziert werden. Der Stromverbrauch wird mit Speicherzugriffen pro Operation ungefähr linear skaliert. Eine gut abgestimmte Speicherhierarchie kann die Gesamtzugriffe um den Faktor 10-100 reduzieren im Vergleich zu naiven Implementierungen, die ständig aus dem externen Speicher stammen.

In der Telekommunikation erfordern Symbolerkennungsalgorithmen (Viterbi, MLSE) ein umfangreiches Backtracking mit zufälligem Zugriff auf Zustandsmetriken. Hier ist SRAM mit geringer Latenz unerlässlich, um die Echtzeit-Symbolrate zu erhalten. Ein einzelner Cache-Ausfall könnte eine Timing-Verletzung verursachen, so dass Designer die Zustandsmetriktabelle oft in Scratchpad anheften.

Design Überlegungen für System Engineers

Bei der Entwicklung eines DSP-basierten Systems müssen die Ingenieure die Daten der Anwendung in der Speicherhierarchie partitionieren.

  • Datenplatzierung: Welche Arrays werden im On-Chip-SRAM vs. externen DRAM platziert? Typischerweise muss der Arbeitssatz für den am häufigsten ausgeführten Algorithmus (z. B. Filterkoeffizienten, Zustandsvariablen) in den On-Chip-Speicher passen. Weniger häufig aufgerufene Tabellen (z. B. Look-up-Tabellen für Companding) können außerhalb des Chips liegen.
  • Memory Mapping: Verwenden Sie die Speicherattributregister des DSP, um Caching-Richtlinien zu definieren (z. B. Write-through, Write-back, non-cacheable).
  • Verwenden von Linker-Skripten: Definieren Sie Speicherabschnitte in der Linker-Befehlsdatei. Platzieren Sie beispielsweise .text im internen SRAM für schnelle Ausführung und .data im externen DRAM für große Puffer. Einige DSPs unterstützen DMA, um kritische Daten während des Bootens von Flash in SRAM zu kopieren.
  • Double-Puffering mit DMA: Verteilen Sie zwei Puffer im On-Chip-SRAM. Konfigurieren Sie einen DMA-Kanal, um einen zu füllen, während der DSP den anderen verarbeitet. Stellen Sie sicher, dass die DMA-Übertragungsgröße und die Quell-/Zieladressen auf die Busbreiten ausgerichtet sind, um den Durchsatz zu maximieren.
  • Auswahl des externen Speichers: Für hohe Bandbreiten sollten Sie LPDDR4 oder HBM (Speicher mit hoher Bandbreite) für speicherintensive Anwendungen wie Radar oder 5G-Basisband in Betracht ziehen.
  • Power-Management: Verwenden Sie Clock Gating auf Speicherbänken, die nicht verwendet werden (z. B. können im Leerlauf arbeitende externe Schnittstellen in Selbsterfrischung versetzt werden). Viele DSPs ermöglichen eine Spannungsskalierung für On-Chip-SRAM, um die dynamische Leistung zu reduzieren.

Zukünftige Richtungen in der DSP-Speicherarchitektur

Aufkommende DSP-Anwendungen wie Deep Learning Inference auf Edge-Geräten, Echtzeit-4K/8K-Videoverarbeitung und Software-Defined Radio (SDR) pushen Speicheranforderungen weiter.

  • 3D-Stacked-Memory (HBM, HBM2E): Bereits in High-End-GPUs eingesetzt, wird HBM in DSPs und FPGAs für Systeme integriert, die eine massive Bandbreite benötigen (bis zu 460 GB/s pro Stack).
  • On-Chip-nichtflüchtiger Speicher (eNVM): Neue Technologien wie MRAM oder ReRAM können On-Chip-SRAM für die Codespeicherung ersetzen, wodurch die Bootzeit reduziert und externer Flash eliminiert wird.
  • Neuronale Netzwerkbeschleuniger mit lokalem Gewichtsspeicher: DSPs, die für KI-Inferenz entwickelt wurden, enthalten einen lokalen Gewichtspuffer (oft SRAM oder SRAM-ähnlich), der Gewichtsmatrizen halten kann, um wiederholte Lesevorgänge aus dem externen Speicher zu vermeiden.
  • Adaptive Speicherhierarchien: Zukünftige DSPs können rekonfigurierbaren Speicher bereitstellen (z. B. eFPGA mit eingebettetem Speicher), der je nach Arbeitslast als Cache, Scratchpad oder FIFO umfunktioniert werden kann.
  • Software-verwalteter Cache:** Einige Forschungsarchitekturen schlagen vor, den Hardware-Cache durch softwaregesteuerte Speicher für kritische Abschnitte zu ersetzen, während der Cache für nicht-kritische Abschnitte beibehalten wird. Dieser hybride Ansatz könnte das Beste aus beiden Welten bieten.

Schlussfolgerung

Speicherarchitektur ist das Rückgrat der DSP-Prozessoreffizienz. Ein tiefes Verständnis der Kompromisse zwischen Register, Cache, On-Chip-SRAM und externem Speicher ermöglicht es Systementwicklern, die Latenz von Datenzugriffen zu minimieren, den Durchsatz zu maximieren und den Stromverbrauch zu reduzieren. Die Wahl des Architekturmodells (Harvard vs. modifiziertes Harvard vs. von Neumann), die Verwendung fortschrittlicher Strategien wie DMA, Banking und Loop-Buffer und eine sorgfältige Partitionierung von Daten über die Speicherhierarchie hinweg sind wichtige Schritte, um Echtzeit-Signalverarbeitungsziele zu erreichen. Da Anwendungen anspruchsvoller werden - mit höheren Bildraten, größeren Bandbreiten und komplexeren Algorithmen - werden innovative Speicherdesigns wie HBM, On-Chip-NVM und adaptive Hierarchien die DSP-Leistung weiter vorantreiben. Ingenieure, die diese Prinzipien beherrschen, werden gut ausgestattet sein, um Systeme zu entwerfen, die sowohl leistungsstark als auch effizient sind.