DE102013014168A1 - Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung - Google Patents

Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung Download PDF

Info

Publication number
DE102013014168A1
DE102013014168A1 DE102013014168.0A DE102013014168A DE102013014168A1 DE 102013014168 A1 DE102013014168 A1 DE 102013014168A1 DE 102013014168 A DE102013014168 A DE 102013014168A DE 102013014168 A1 DE102013014168 A1 DE 102013014168A1
Authority
DE
Germany
Prior art keywords
data elements
memory
dram
sequence
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102013014168.0A
Other languages
English (en)
Other versions
DE102013014168B4 (de
Inventor
Paul Murrin
Adrian John Anderson
Mohammad El-Hajjar
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102013014168A1 publication Critical patent/DE102013014168A1/de
Application granted granted Critical
Publication of DE102013014168B4 publication Critical patent/DE102013014168B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
    • H03M13/2703Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques the interleaver involving at least two directions
    • H03M13/2707Simple row-column interleaver, i.e. pure block interleaving
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
    • H03M13/276Interleaving address generation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing
    • H03M13/6505Memory efficient implementations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Error Detection And Correction (AREA)
  • Static Random-Access Memory (AREA)
  • Dram (AREA)

Abstract

Es wird ein Kachel-basiertes Verschachteln und Entschachteln von in Reihen und Spalten verschachtelten Daten beschrieben. In einem Beispiel wird das Entschachteln in zwei Speichertransferstufen unterteilt, die erste aus einem On-Chip-Speicher in einen DRAM und die zweite aus dem DRAM in einen On-Chip-Speicher. Jede Stufe arbeitet auf einem Teil eines in Reihen und Spalten verschachtelten Datenblocks und ordnet die Datenelemente so um, dass der Ausgang der zweiten Stufe entschachtelte Daten umfasst. In der ersten Stufe werden Datenelemente aus dem On-Chip-Speicher gemäß einer nicht-linearen Sequenz von Speicherleseadressen gelesen und in den DRAM geschrieben. In der zweiten Stufe werden Datenelemente aus dem DRAM gemäß Bursts von linearen Adresssequenzen gelesen, die die DRAM-Schnittstelle effizient nutzen, und gemäß einer nicht-linearen Sequenz von Speicherschreibadressen in den On-Chip-Speicher zurückgeschrieben.

Description

  • Hintergrund
  • Digitale Signalverarbeitung wird in den unterschiedlichsten Anwendungen verwendet. Viele dieser Anwendungen finden in Echtzeit statt, d. h. dass Zeitbeschränkungen für die Verarbeitung der Daten existieren, damit sie für einen Endnutzer sinnvoll oder nützlich sind. Ein Beispiel dafür sind digitale Rundfunk-Streams, wie zum Beispiel digitales Fernsehen und digitales Radio. Das digitale Signalverarbeitungssystem muss in der Lage sein, die Echtzeit-Streams schnell genug zu verarbeiten und zu decodieren, damit die Daten so schnell ausgegeben werden können, wie sie empfangen wurden (abgesehen vom Puffern).
  • Digitale Signalverarbeitungssysteme verwenden neben Allzweck-Digitalsignalprozessoren oftmals noch ein oder mehrere dedizierte Hardware-Peripheriekomponenten. Die Hardware-Peripheriekomponenten sind Verarbeitungsblöcke, die dafür ausgelegt sind, eine bestimmte Signalverarbeitungsaufgabe auf schnelle und effiziente Weise auszuführen. Zum Beispiel ist Verschachteln (engl. interleaving) und Entschachteln (engl. de-interleaving) eine Operation, die üblicherweise für Echtzeitdaten mittels einer Hardware-Peripheriekomponente ausgeführt wird. Verschachteln und Entschachteln sind speicherintensive Operationen, und die Hardware-Peripheriekomponenten, die sie ausführen, verwenden einen zugehörigen dedizierten Speicherbaustein zum Neuordnen der Daten.
  • Jedoch können die Anforderungen verschiedener Arten von Echtzeitdaten erheblich variieren. Zum Beispiel sind bei den verschiedenen unterschiedlichen digitalen Fernseh- und Radiostandards, die auf der ganzen Welt verwendet werden, oftmals die Echtzeitdaten unterschiedlich strukturiert, zum Beispiel unter Verwendung verschiedener Arten oder Parameter zum Codieren, Verschachteln, Entzerren usw. Wenn das digitale Signalverarbeitungssystem flexibel genug sein soll, um mit verschiedenen Standards verwendet zu werden, so muss der dedizierte Speicherbaustein, der zum Verschachteln und Entschachteln verwendet wird, hinreichend groß sein, um den Standard mit dem größten Speicherbedarf verarbeiten zu können. Infolge dessen wird der Speicher, der mit einer Verschachtelungs- und Entschachtelungs-Hardware-Peripheriekomponente verwendet wird, häufig unterbeansprucht.
  • Ein Beispiel eines Speicherbausteins ist ein DRAM(Dynamic Random Access Memory)-Baustein. DRAM-Bausteine organisieren ihren gespeicherten Inhalt in Seiten, die jeweils in der Regel einige tausend Bytes groß sind. Jeder DRAM kann immer nur eine begrenzte Anzahl von Seiten geöffnet haben (in der Regel vier), und viele Verwaltungszyklen sind nötig, um eine Seite zu öffnen und Zugang zu Daten zu bekommen.
  • Die unten beschriebenen Ausführungsformen sind nicht auf Implementierungen beschränkt, die einige oder alle der Nachteile bekannter digitaler Signalverarbeitungssysteme beseitigen.
  • Kurzfassung
  • In dieser Kurzfassung werden einige Konzepte in vereinfachter Form dargestellt, auf die weiter unten in der detaillierten Beschreibung ausführlicher eingegangen wird. Diese Kurzfassung dient weder der Aufzählung von Hauptmerkmalen oder wesentlichen Merkmalen des beanspruchten Gegenstandes, noch soll sie zum Abgrenzen des Schutzumfangs des beanspruchten Gegenstandes herangezogen werden.
  • Es wird ein Kachel(engl. tile)-basiertes Verschachteln und Entschachteln von in Reihen und Spalten verschachtelten Daten beschrieben. In einem Beispiel ist das Entschachteln in zwei Speichertransferstufen unterteilt, die erste von einem On-Chip-Speicher in einen DRAM, und die zweite aus dem DRAM in einen On-Chip-Speicher. Jede Stufe arbeitet auf einem Teil eines in Reihen und Spalten verschachtelten Datenblocks und ordnet die Datenelemente so um, dass der Ausgang der zweiten Stufe entschachtelte Daten umfasst. In der ersten Stufe werden Datenelemente aus dem On-Chip-Speicher gemäß einer nicht-linearen Sequenz von Speicherleseadressen gelesen und in den DRAM geschrieben. In der zweiten Stufe werden Datenelemente gemäß Bursts von linearen Adresssequenzen, die die DRAM-Schnittstelle effizient nutzen, aus dem DRAM gelesen und gemäß einer nicht-linearen Sequenz von Speicherschreibadressen in den On-Chip-Speicher zurückgeschrieben.
  • Ein erster Aspekt stellt ein digitales On-Chip-Signalverarbeitungssystem bereit, das umfasst: einen ersten Speicher, der mehrere Datenelemente speichert, die in einer ersten Sequenz angeordnet sind, wobei jedes Datenelement eine zugehörige Speicheradresse im ersten Speicher aufweist und die mehreren Datenelemente eine Teilmenge eines Blocks aus Datenelementen umfassen; einen zweiten Speicher; und eine Transfer-Engine, die mit dem ersten Speicher und dem zweiten Speicher gekoppelt ist und einen Port zu einem Dynamic Random Access Memory (DRAM) umfasst, wobei die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente direkt aus dem ersten Speicher in den DRAM in einer ersten Speichertransferstufe zu transferieren und die mehreren Datenelemente direkt aus dem DRAM in den zweiten Speicher in einer zweiten Speichertransferstufe zu transferieren, und wobei in der ersten Speichertransferstufe die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente aus dem ersten Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherleseadressen zu lesen und die mehreren Datenelemente in den DRAM zu schreiben, und wobei in der zweiten Speichertransferstufe die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente aus dem DRAM gemäß Bursts von linearen Adresssequenzen zu lesen, wobei jeder Burst von linearen Adresssequenzen eine Länge aufweist, die anhand einer DRAM-Schnittstellenburstgröße ausgewählt wird, und die mehreren Datenelemente in den zweiten Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherschreibadressen zu schreiben, so dass die mehreren Datenelemente in einer zweiten Sequenz im zweiten Speicher angeordnet sind, die sich von der ersten Sequenz unterscheidet, und wobei eine der ersten Sequenz und der zweiten Sequenz in Reihen und Spalten verschachtelte Daten umfasst.
  • Ein zweiter Aspekt stellt ein Verfahren zum Ausführen einer Verschachtelungs- oder Entschachtelungsoperation auf einem Block von Datenelementen in einem digitalen Signalverarbeitungssystem bereit, wobei das Verfahren umfasst: Lesen, aus einem ersten On-Chip-Speicher, von ersten mehreren Datenelementen, die in einer ersten Sequenz gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherleseadressen gespeichert sind, wobei die ersten mehreren Datenelementen eine Teilmenge des Blocks von Datenelementen umfassen; Schreiben der ersten mehreren Datenelementen in einen Dynamic Random Access Memory (DRAM); Lesen, aus dem DRAM, der ersten mehreren Datenelemente gemäß Bursts von linearen Adresssequenzen, wobei jeder Burst von linearen Adresssequenzen eine Länge aufweist, die anhand einer DRAM-Schnittstellenburstgröße ausgewählt wird; und Schreiben der ersten mehreren Datenelemente in einen zweiten On-Chip-Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherschreibadressen, so dass die Datenelemente in einer zweiten Sequenz im zweiten On-Chip-Speicher angeordnet werden, die sich von der ersten Sequenz unterscheidet, und wobei eine der ersten Sequenz und der zweiten Sequenz in Reihen und Spalten verschachtelte Daten umfasst.
  • Ein dritter Aspekt stellt ein Computerprogramm bereit, das ein Computerprogrammcodemittel umfasst, das dafür ausgelegt ist, alle Schritte eines der oben beschriebenen Verfahren auszuführen, wenn das Programm auf einem Computer abgearbeitet wird. Das Computerprogramm kann auf einem computerlesbaren Medium verkörpert sein.
  • Ein vierter Aspekt stellt ein Verfahren zum Ausführen einer Verschachtelungs- oder Entschachtelungsoperation bereit, wie es im Wesentlichen mit Bezug auf eine der 510 der Zeichnungen beschrieben ist.
  • Die im vorliegenden Text beschriebenen Verfahren können durch einen Computer ausgeführt werden, der mit Software in maschinenlesbarer Form konfiguriert ist, die auf einem berührbaren Speichermedium gespeichert ist, zum Beispiel in Form eines Computerprogramms, das Computerprogrammcode umfasst, um einen Computer dafür zu konfigurieren, die einzelnen Abschnitte beschriebener Verfahren auszuführen. Zu Beispielen von berührbaren (oder nicht-transitorischen) Speichermedien gehören Disks, USB-Sticks, Speicherkarten usw., jedoch keine propagierten Signale. Die Software kann zum Ausführen auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Verfahrensschritte in jeder geeigneten Reihenfolge oder gleichzeitig ausgeführt werden können.
  • Damit wird anerkannt, dass Firmware und Software wertvolle, separat marktfähige Handelsgüter sein können. Darunter soll auch Software fallen, die auf ”unintelligenter” oder Standard-Hardware läuft oder diese steuert, um die gewünschten Funktionen auszuführen. Darunter soll ebenso Software fallen, die die Konfiguration von Hardware ”beschreibt” oder definiert, wie zum Beispiel HDL(Hardware Description Language)-Software, wie sie zum Entwerfen von Siliziumchips oder zum Konfigurieren programmierbarer Universalchips verwendet wird, um gewünschte Funktionen auszuführen.
  • Die oben beschriebenen Merkmale können nach Bedarf kombiniert werden, wie dem Fachmann einleuchtet, und können mit jedem der Aspekte der Beispiele kombiniert werden.
  • Kurze Beschreibung der Zeichnungen
  • Es werden Ausführungsformen – beispielhaft und mit Bezug auf die folgenden Zeichnungen – beschrieben, in denen dargestellt ist:
  • 1 veranschaulicht ein digitales Signalverarbeitungssystem;
  • 2 veranschaulicht ein Schaubild einer Transfer-Engine;
  • 3 zeigt Schaubilder, die verschiedene beispielhafte Verfahren zum Entschachteln veranschaulichen;
  • 4 veranschaulicht ein Beispiel von Reihen-Spalten-Operationen, die an zwei Datenblöcken mittels der Transfer-Engine ausgeführt werden;
  • 5 zeigt Schaubilder, die zwei weitere beispielhafte Verfahren zum Entschachteln veranschaulichen;
  • 6 veranschaulicht ein Beispiel der Reihen-Spalten-Operation von 4 mit Optimierungen, um den Beschränkungen von DRAM-Bausteinen entgegenzuwirken;
  • 7 zeigt einen beispielhaften zeitverschachtelten Datenblock;
  • 8 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Entschachteln;
  • 9 zeigt eine Gitternetzdarstellung der im DRAM gespeicherten Datenelemente am Ende der ersten Stufe des Verfahrens von 8 für einen eingegebenen verschachtelten Block, wie in 7 gezeigt; und
  • 10 zeigt eine Gitternetzdarstellung der im On-Chip-Speicher gespeicherten Datenelemente am Ende der zweiten Stufe des Verfahrens von 8 für einen eingegebenen verschachtelten Block, wie in 7 gezeigt.
  • In allen Figuren werden gemeinsame Bezugszahlen zum Bezeichnen ähnlicher Merkmale verwendet.
  • Detaillierte Beschreibung
  • Im Folgenden werden Ausführungsformen lediglich beispielhaft beschrieben. Diese Beispiele stellen die besten Wege zum Praktizieren der Ausführungsformen dar, die dem Anmelder derzeit bekannt sind, auch wenn sie nicht die einzigen Wege sind, auf denen dies erreicht werden kann. Die Beschreibung legt die Funktionen des Beispiels und die Abfolge von Schritten zum Realisieren und Ausführen des Beispiels dar. Jedoch können die gleichen oder gleichwertige Funktionen und Abfolgen auch durch andere Beispiele erreicht werden.
  • Im Folgenden wird ein digitales Signalverarbeitungssystem beschrieben, in dem sowohl Allzweck-Digitalsignalprozessoren (DSPs) als auch spezialisierte Hardware-Peripheriekomponenten verwendet werden. Um eine effiziente Speichernutzung zu ermöglichen, haben die verschiedenen Elemente des Systems Zugriff auf einen gemeinsam genutzten On-Chip-Speicher. Datenelemente können durch eine Transfer-Engine, wie zum Beispiel einen Direct Memory Access(DMA)-Controller, in den On-Chip-Speicher geschrieben oder aus dem On-Chip-Speicher gelesen werden. Der On-Chip-Speicher umfasst Static Random Access Memory (SRAM), und die Transfer-Engine besitzt ferner einen Port zu einem Dynamic RAM (DRAM), der extern oder on-Chip sein kann. Die Transfer-Engine hat ein Adressengenerierungselement, das es ermöglicht, verschiedene Sequenzen von Datenelementen aus dem Speicher zu lesen und/oder in den Speicher zu schreiben, und solche Sequenzen können lineare und nicht-lineare Sequenzen von Datenelementen umfassen.
  • Der Begriff ”linear” wird im vorliegenden Text im Zusammenhang mit dem Lesen und Schreiben von Sequenzen von Datenelementen verwendet, um sich auf das Lesen und Schreiben aufeinanderfolgender (oder aneinandergrenzender) Datenelemente zu beziehen. Im Gegensatz dazu wird der Begriff ”nicht-linear” im vorliegenden Text im Zusammenhang mit dem Lesen und Schreiben von Sequenzen von Datenelementen verwendet, um sich auf das Lesen und Schreiben von nicht-aufeinanderfolgenden (oder nicht-aneinandergrenzenden) Datenelementen zu beziehen. Beispiele von nicht-linearen Sequenzen sind unten beschrieben.
  • Jede Benutzung von DRAM in der folgenden Beschreibung soll sich auf jede Form von DRAM erstrecken, einschließlich synchronen DRAM, Doppeldatenraten(DDR)-DRAM (der als DDR RAM bezeichnet werden kann) und Burst Access-DRAM. Wie oben beschrieben, organisieren DRAM-Bausteine ihren gespeicherten Inhalt in Seiten und können immer nur eine begrenzte Anzahl von Seiten auf einmal geöffnet haben. Beim Zugreifen auf einen DRAM eines beliebigen Typs können Muster eines Datenzugriffs, die häufig auf verschiedene Seiten zugreifen, ineffizient sein, weil es vieler Verwaltungszyklen bedarf, um eine Seite zu öffnen. Bei Burst Access-DRAM liest oder schreibt die DRAM-Schnittstelle Bursts von 4, 8, 16, 32 oder 64 (oder mehr) aufeinanderfolgenden Bytes. Zugriffsmuster, die unvollständige DRAM-Schnittstellenbursts verwenden, sind ebenfalls ineffizient.
  • Die Fähigkeit, verschiedene Sequenzen von Datenelementen zu lesen und zu schreiben, ermöglicht das Durchführen von Umordnungsoperationen, wie zum Beispiel Verschachteln oder Entschachteln, auf den Datenelementen on-the-fly, während die Datenelemente zwischen Speicherorten oder von einem Speicher in einen anderen transferiert werden (zum Beispiel zwischen dem SRAM und dem DRAM). Dadurch entfällt die Notwendigkeit, einen dedizierten (nicht gemeinsam genutzten) Speicher in das digitale Signalverarbeitungssystem zur Verwendung beim Verschachteln oder Entschachteln aufzunehmen, wodurch wiederum die Chipfläche verkleinert wird und die Kosten gesenkt werden. Die verschiedenen verwendeten Sequenzen können so angeordnet werden, dass den Leistungsbeschränkungen bestimmter Arten von Speicherbausteinen, wie zum Beispiel DRAM (dessen Verwendung im Hinblick auf die Fläche und damit auf die Kosten billiger ist als SRAM, so dass größere DRAMs verwendet werden können), entgegengewirkt wird, wie unten ausführlicher beschrieben ist.
  • In der folgenden Beschreibung wird Zeitverschachteln und -entschachteln nur als Beispiel verwendet; es versteht sich jedoch, dass die Verfahren auch auf andere Formen des Verschachtelns und Entschachtelns angewendet werden können, wie zum Beispiel Bitverschachteln und -entschachteln.
  • Wir wenden uns zuerst 1 zu, die die Struktur eines beispielhaften digitalen On-Chip-Signalverarbeitungssystems 100 zeigt. Das System 100 umfasst einen On-Chip-Speicher 102 und einen DRAM 112, die mit einer Transfer-Engine 106 verbunden sind. Beide Speicherbausteine 102, 112 werden zum Speichern von Datenelementen verwendet, und sie können beide gemeinsam genutzte Speicherplätze bereitstellen (zum Beispiel das Speichern von Daten bezüglich des digitalen Signalverarbeitungssystems, sowie MPEG oder sonstige Videostream-bezogene Daten). Der On-Chip-Speicher 102 kann jede beliebige Form von RAM sein, wie zum Beispiel (ohne darauf beschränkt zu sein) SRAM, aber nicht DRAM. Der DRAM 112 kann on-Chip oder Chip-extern sein (in dem Sinne, dass die DSPs 104 nicht direkt darauf zugreifen können), und in der folgenden Beschreibung wird der Begriff ”on-Chip”-Speicher für den On-Chip-Speicher 102 verwendet, der ein Nicht-DRAM-Speicherelement ist, ungeachtet der Tatsache, dass der DRAM 112 ebenfalls ein On-Chip-Speicher sein kann (d. h. ein integraler Teil des On-Chip-Systems 100, da er auf demselben Stück Silizium ausgebildet ist).
  • Mit dem On-Chip-Speicher 102 sind ein oder mehrere DSPs 104 verbunden. Die DSPs 104 sind Prozessoren, die programmiert werden können, Signalverarbeitungsberechnungen auf Daten auszuführen, wie zum Beispiel schnelle Fouriertransformationen und Entzerren (engl. equalisation). Sie gelten zwar nicht als Allzweckprozessoren, doch die DSPs 104 sind konfigurierbarer als die unten beschriebenen Hardware-Peripheriekomponenten. Die DSPs 104 führen Programmcode oder Instruktionen aus, um Daten aus dem On-Chip-Speicher 102 zu lesen, Signalverarbeitungsoperationen auf den Daten auszuführen und Daten zurück in den On-Chip-Speicher 102 zu schreiben.
  • Ferner ist mit dem On-Chip-Speicher 102 die Transfer-Engine 106 verbunden, die den Zugriff auf den On-Chip-Speicher 102 für mehrere Hardware(HW)-Peripheriekomponenten 108 ermöglicht. In einigen Beispielen kann die Transfer-Engine 106 die Form eines Direct Memory Access(DMA)-Controllers haben. Die Transfer-Engine 106 stellt mehrere Speicherzugriffskanäle (zum Beispiel DMA-Kanäle) bereit, die durch die Hardware-Peripheriekomponenten 108 verwendet werden können, um das Lesen oder Schreiben von Daten aus dem oder in den On-Chip-Speicher 102 zu ermöglichen.
  • Wie oben angemerkt, sind die Hardware-Peripheriekomponenten 108 spezialisierte, dedizierte Festfunktions-Hardware-Blöcke, die dafür konfiguriert sind, eine bestimmte Signalverarbeitungsaufgabe auszuführen. Zum Beispiel kann eine Hardware-Peripheriekomponente ein spezialisierter Viterbi-Decodierblock sein, und eine andere kann ein spezialisierter Reed-Solomon-Decodierblock sein. Die Hardware-Peripheriekomponenten können auch als Beschleuniger bekannt sein. Jede der Hardware-Peripheriekomponenten arbeitet unabhängig von allen anderen. Die Hardware-Peripheriekomponenten können hinreichend konfigurierbar sein, um mit Betriebsparametern versehen zu werden, die für ihre Aufgabe spezifisch sind, aber sie sind nicht hinreichend konfigurierbar, um ihre Aufgabe zu ändern (zum Beispiel kann ein Viterbi-Block nicht zu einem Reed-Solomon-Block umkonfiguriert werden). Darum sind die Hardware-Peripheriekomponenten stärker auf eine bestimmte Aufgabe spezialisiert als die DSPs 104. Jedoch sind die Hardware-Peripheriekomponenten dafür ausgelegt, ihre spezialisierten Aufgaben in einer sehr schnellen und effizienten Weise auszuführen. Außerdem ist mit dem On-Chip-Speicher 102 ein allgemeiner Steuerprozessor 110 verbunden, der dafür verwendet werden kann, den Betrieb des digitalen Signalverarbeitungssystems zu initialisieren, zu konfigurieren und zu steuern.
  • Das oben beschriebene digitale Signalverarbeitungssystem bietet Flexibilität bei den Signalverarbeitungsoperationen. Zum Beispiel kann das System dafür ausgelegt sein, so zu arbeiten, dass die verschiedenen DSPs 104 und Hardware-Peripheriekomponenten 108 die Daten in jeder gewünschten Konfiguration oder Sequenz verarbeiten. Jede Hardware-Peripheriekomponente oder jeder DSP kann auf einem oder mehreren Datenblöcken (im vorliegenden Text auch als Datenpuffer bezeichnet) arbeiten, die durch andere Teile des Systems bereitgestellt und im On-Chip-Speicher 102 gespeichert werden, und generiert und speichert einen oder mehrere Datenpuffer, die durch andere Elemente des Systems verwendet werden sollen. Dadurch kann das digitale Signalverarbeitungssystem für eine Vielzahl verschiedener Arten von Signalen verwendet werden, zum Beispiel für verschiedene Ausstrahlungs- oder Telekommunikationsstandards.
  • Die Verwendung eines gemeinsamen Speicherplatzes, der durch den On-Chip-Speicher 102 bereitgestellt wird, ermöglicht es, die Gesamtmenge an Speicherplatz, die im System-on-Chip 100 bereitgestellt wird, zu reduzieren. Ohne die Verwendung eines gemeinsamen Speicherplatzes ist jedes Verarbeitungselement mit seinem eigenen, dedizierten Speicher versehen. Zum Beispiel kann jeder der DSPs 104 seinen eigenen Arbeitsplatzspeicher haben, der allgemeine Steuerprozessor 110 hat einen anderen separaten Speicher zum Speichern von Ausführungscode und Daten, die Hardware-Peripheriekomponenten 108 haben separate Eingabe- und Ausgabepuffer, und ein oder mehrere zusätzliche Speicher können zum Austauschen von Daten zwischen den Verarbeitungselementen verwendet werden.
  • Weil das digitale Signalverarbeitungssystem dafür konfiguriert werden kann, die Implementierung verschiedener Kommunikationsstandards zu gestatten, muss jeder dieser separaten Speicher separat für den jeweiligen Standard bemessen werden, der die größten Ansprüche an jeden Speicher stellt. Oder anders ausgedrückt: der DSP-Speicher muss groß genug sein, um den Standard bewältigen zu können, der die größten Ansprüche an den DSP-Speicher stellt. Gleichermaßen müssen die Puffer der Hardware-Peripheriekomponenten groß genug sein, um den Standard mit den höchsten Anforderungen an die Puffer der Hardware-Peripheriekomponenten bewältigen zu können (der ein anderer Standard sein kann als der Standard mit hohen Anforderungen an den DSP-Speicher). Infolge dessen bleiben allgemein erhebliche Speichermengen durch einige der Verarbeitungselemente ungenutzt.
  • Wenn jedoch ein gemeinsamer Speicherplatz durch den On-Chip-Speicher 102 bereitgestellt wird, so können die Speicheranforderungen der verschiedenen Standards insgesamt berücksichtigt werden (statt ihrer Anforderungen an einzelne Elemente des Systems). Oder anders ausgedrückt: Der On-Chip-Speicher 102 muss groß genug sein, um den größten Gesamtspeicherbedarf der Standards bewältigen zu können. Dadurch werden die unterschiedlichen Speicheranforderungen zwischen den Standards gemittelt (zum Beispiel könnte ein Standard mehr DSP-Speicher benötigen, aber kleinere Puffer, während es bei einem anderen Standard umgekehrt sein kann). Das hat den Effekt, dass bedeutend weniger Gesamtspeicher benötigt wird, wodurch Siliziumfläche eingespart wird.
  • Der gemeinsame Speicherplatz, der durch den On-Chip-Speicher 102 bereitgestellt wird, kann darum alle verschiedenen Arten von Daten aufnehmen, die durch das System verwendet werden, wie zum Beispiel Digitalsignalprozessor-Arbeitsplätze, Ausführungscode und Daten für den allgemeinen Steuerprozessor, Eingabe- und Ausgabepuffer für eine oder mehrere der Hardware-Peripheriekomponenten, ein oder mehrere Puffer für den Datenaustausch zwischen Prozessoren sowie andere Konfigurationsdaten für das digitale Signalverarbeitungssystem.
  • Wir wenden uns nun 2 zu, die ein Schaubild der Transfer-Engine 106 veranschaulicht. Die Transfer-Engine 106 umfasst einen ersten Speicherport 202, der dafür ausgelegt ist, mit dem On-Chip-Speicher 102 verbunden zu werden, und einen zweiten Speicherport 204, der dafür ausgelegt ist, mit dem DRAM 112 verbunden zu werden. Die Transfer-Engine 106 umfasst außerdem mehrere Peripherieports 206, die jeweils dafür ausgelegt sind, mit einer zugehörigen Hardware-Peripheriekomponente 108 verbunden zu werden. Die Speicherports 202, 204 und die Peripherieports 206 sind alle mit einer Kreuzschiene 208 verbunden, die es ermöglicht, jeden dieser Ports mit jedem anderen dieser Ports zu verbinden.
  • Die Transfer-Engine 106 umfasst ferner ein Adressengenerierungselement 210, das mit beiden Speicherports 202, 204 gekoppelt ist und dafür ausgelegt ist, Sequenzen von Lese- und/oder Schreibadressen für einen oder beide Speicher, die mit den Speicherports 202, 204 verbunden sind, zu erzeugen. In einigen Beispielen kann das Adressengenerierungselement 210 einen konfigurierbaren Adressengenerator umfassen, der dafür programmiert werden kann, in einer Anzahl verschiedener Modi zu arbeiten (zum Beispiel einem linearen und einem nicht-linearen Modus), und der dafür konfiguriert sein kann, einen oder mehrere Betriebsmodi aus einer Reihe möglicher Modi auszuwählen. In anderen Beispielen kann das Adressengenerierungselement 210 einen oder mehrere dedizierte Hardware-Blöcke umfassen, die dafür ausgelegt sind, bestimmte Sequenzen von Adressen zu erzeugen (zum Beispiel eine Sequenz, die einen Reihen-Spalten-Modus für eine bestimmte Anordnung von Datenelementen verwendet, und eine Sequenz, die einen Burst-Reihen-Spalten-Modus für eine bestimmte Anordnung von Datenelementen verwendet). In einigen Beispielen kann das Adressengenerierungselement 210 sowohl lineare als auch nicht-lineare Sequenzen erzeugen, und in anderen Beispielen kann eine direkte Verbindung für die linearen Sequenzen verwendet werden, und das Adressengenerierungselement kann dafür verwendet werden, nur die nicht-linearen Sequenzen zu erzeugen.
  • Durch Generieren von nicht-linearen Sequenzen von Lese- und/oder Schreibadressen kann das Adressengenerierungselement 210 eine nicht-lineare Umordnung von Datenelementen ausführen, die in einem Speicher gespeichert sind, der mit einem der Ports der Transfer-Engine 106 verbunden ist (zum Beispiel On-Chip-Speicher 102 oder DRAM 112). Zum Beispiel veranschaulicht 2, wie eine erste Sequenz 212 von Datenelementen, die im On-Chip-Speicher 102 gespeichert sind, während eines Transfers in den DRAM 112 umgeordnet werden können. Im Beispiel von 2 gibt es acht Datenelemente im On-Chip-Speicher 102, die an Speicheradressen gespeichert sind, die mit 0 bis 7 bezeichnet sind. In anderen Beispielen können die Speicheradressen an einer anderen Basisadresse als null beginnen, und/oder jedes einzelne Datenelement kann größer sein als ein einzelner Speicherort im Speicherbaustein. In diesem Beispiel werden diese Datenelemente in den DRAM 112 transferiert, werden aber in einer zweiten Sequenz 214 geordnet, die von der ersten Sequenz 212 verschieden ist. Zur besseren Verständlichkeit werden die Datenelemente in der zweiten Sequenz 214 an Speicheradressen im DRAM 112 gespeichert, die mit 0' bis 7' bezeichnet sind, obgleich diese Adressen in anderen Beispielen an einer anderen Basisadresse als null beginnen können.
  • In einem ersten Beispiel kann das Adressengenerierungselement 210 eine nicht-lineare Lesesequenz von [3, 6, 4, 1, 2, 7, 0, 5] erzeugen und diese Lesesequenz an den ersten Speicherport 202 übermitteln. Das Adressengenerierungselement 210 kann außerdem eine lineare Schreibsequenz von [0', 1', 2', 3', 4', 5', 6', 7'] erzeugen und diese an den zweiten Speicherport 204 übermitteln (wobei die Adressen im DRAM 112 mit 0', 1' usw. bezeichnet sind, um sie – nur zum Zweck der Erläuterung – von den Adressen im On-Chip-Speicher 102 zu unterscheiden). Dies veranlasst den ersten Speicherport 202, zuerst das Datenelement von der ersten Adresse in der Lesesequenz (Adresse 3) zu lesen, das in diesem Beispiel Datenelement ”A” ist. Dieses Datenelement wird über die Kreuzschiene 208 an den zweiten Speicherport 204 weitergeleitet, der dieses Datenelement in die erste Speicheradresse in der Schreibsequenz schreibt (Adresse 0'). Das hat zur Folge, dass Datenelement ”A” vom vierten Datenelement in der ersten Sequenz 212 zum ersten Datenelement in der zweiten Sequenz 214 umgeordnet wird. Diese Operation wiederholt sich durch Lesen der nächsten Adresse in der Lesesequenz (Adresse 6, Adresse 4 usw.) und Schreiben des entsprechenden Datenelements (B, C, ...) in die nächste Adresse in der Schreibsequenz (Adresse 1', Adresse 2', ...). Infolge dessen werden die Datenelemente von der ersten Sequenz (als G, D, E, A, C, H, B, F bezeichnet) nun im DRAM in der zweiten Sequenz (A, B, C, D, E, F, G, H) gespeichert.
  • In einem zweiten Beispiel kann das gleiche Umordnen von Datenelementen auch dadurch erreicht werden, dass das Adressengenerierungselement 210 eine lineare Lesesequenz von [0, 1, 2, 3, 4, 5, 6, 7] und eine nicht-lineare Schreibsequenz von [6', 3', 4', 0', 2', 7', 1', 5'] generiert. In diesem Beispiel wird zuerst das Datenelement ”G” von Adresse 0 im On-Chip-Speicher gelesen und in Adresse 6' im DRAM geschrieben, gefolgt von Datenelement ”D”, das von Adresse 1 im On-Chip-Speicher gelesen und in Adresse 3' im DRAM geschrieben wird, usw. Gleichermaßen kann in einem dritten Beispiel das gleiche Umordnen von Datenelementen auch dadurch erreicht werden, dass das Adressengenerierungselement 210 eine nicht-lineare Lesesequenz und außerdem eine nicht-lineare Schreibsequenz generiert. Ein Beispiel dafür wäre eine Lesesequenz von [0, 2, 4, 6, 1, 3, 5, 7] und eine Schreibsequenz von [6', 4', 2', 1', 3', 0', 7', 5'].
  • In jedem der oben beschriebenen Beispiele wird das Umordnen von der ersten zur zweiten Sequenz on-the-fly während des direkten Transfers von Datenelementen aus dem On-Chip-Speicher 102 in den DRAM 112 durch die Transfer-Engine 106 ausgeführt. Ähnliche Operationen können auch für Transfers aus dem DRAM 112 in den On-Chip-Speicher 102 oder aus dem On-Chip-Speicher an einen anderen Standort im On-Chip-Speicher und gleichermaßen für einen Transfer vom DRAM an eine andere Adresse im DRAM ausgeführt werden.
  • Das obige Beispiel zeigte außerdem, dass die Lese- und Schreibadresssequenzen vollständig generiert werden, bevor der Transfer ausgeführt wird. Jedoch kann dieses Generieren von Adresssequenzen auch gleichzeitig mit dem Transfer ausgeführt werden, zum Beispiel durch Generieren einer oder mehrerer Lese- und Schreibadressen, während ein oder mehrere frühere Datenelemente gelesen oder geschrieben werden.
  • Der oben beschriebene Prozess ermöglicht es, die Datenelemente im On-Chip-Speicher 102 zu einer anderen Sequenz als einen integralen Teil einer Speichertransferoperation in den DRAM 112 umzuordnen, und gleichermaßen können Datenelemente im DRAM 112 zu einer anderen Sequenz als Teil einer Speichertransferoperation in den On-Chip-Speicher 102 umgeordnet werden. Das kann dafür verwendet werden, um ein Verschachteln oder Entschachteln zu implementieren, zum Beispiel unter Verwendung eines Adressengenerierungselements 210, das dafür ausgelegt ist, die Lese- und Schreibadresssequenzen gemäß einem Verschachtelungsregime zu erzeugen.
  • 3 zeigt Schaubilder, die verschiedene beispielhafte Verfahren zum Entschachteln veranschaulichen. Im ersten Schaubild 300 wird das Entschachteln in einem einzelnen Transfer aus dem On-Chip-Speicher 102 zum On-Chip-Speicher 102 ausgeführt. In den anschließenden zwei Schaubildern 302, 304 gibt es zwei Transfers: einen Transfer aus dem On-Chip-Speicher 102 zum DRAM 112, und einen zweiten Transfer aus dem DRAM zurück in den On-Chip-Speicher 102. Im zweiten Schaubild 302 kann das Entschachteln von Datenelementen, die im On-Chip-Speicher 102 gespeichert sind, ausgeführt werden, indem die Datenelemente in den DRAM 112 gemäß einer linearen Schreibsequenz geschrieben und dann aus dem DRAM 112 mittels einer bestimmten nicht-linearen Sequenz zurückgelesen werden, was als ”Reihen-Spalten-Modus” oder ”in Reihen und Spalten verschachtelt” bezeichnet werden kann. Diese nicht-lineare Sequenz wird unten im Detail mit Bezug auf 4 beschrieben. Alternativ kann das Entschachteln von Datenelementen ausgeführt werden, indem Datenelemente in den DRAM 112 mittels des Reihen-Spalten-Modus geschrieben und dann linear zurückgelesen werden, wie im dritten Schaubild 304 in 3 gezeigt.
  • In allen in 3 gezeigten Implementierungen kann der Entschachtelungsprozess erst beginnen, wenn sich alle verschachtelten Daten im Eingangsspeicher befinden (d. h. dem On-Chip-Speicher 102, der auf der linken Seite jedes Schaubildes in 3 gezeigt ist).
  • Im Reihen-Spalten-Modus werden die Datenelemente in einem oder mehreren Gitternetzen oder in einer oder mehreren Tabellen mit mehreren Reihen und Spalten angeordnet. Dies ist in 4 veranschaulicht, die einen ersten Block von Eingangsdatenelementen 402 zeigt, die (nur zu veranschaulichenden Zwecken) aneinandergrenzende Speicheradressen 0 bis 23 haben, und einen zweiten Block von Eingangsdatenelementen 404 zeigt, die (ebenfalls nur zu veranschaulichenden Zwecken) aneinandergrenzende Speicheradressen von 24 bis 47 haben. Wenn wir den Reihen-Spalten-Modus mit Bezug auf das zweite Beispiel 302 in 3 beschreiben, so befinden sich diese Speicheradressen im DRAM 112. Im in 4 gezeigten Beispiel haben die Datenelemente alle sechs Datenelemente einen Spaltenumbruch, wie durch die Strichlinien in 4 angedeutet ist. Das heißt, dass die aufeinanderfolgenden Speicheradressen hier entlang den Spalten eines Gitternetzes angeordnet sind, das sechs Reihen hat (das kann so beschrieben werden, dass die Daten in den Spalten abwärts geschrieben und gelesen werden).
  • Die in Gitternetzform dargestellten Datenelemente sind in 4 gezeigt, die ein erstes Gitternetz 406 für den ersten Block von Eingangsdatenelementen 402 und ein zweites Gitternetz 408 für den zweiten Block von Eingangsdatenelementen 404 zeigt. Sowohl das erste als auch das zweite Gitternetz haben sechs Reihen und vier Spalten. Es ist zu erkennen, dass aufeinanderfolgend adressierte Datenelemente in den Spalten abwärts angeordnet sind. Jedoch können die Datenelemente in anderen Beispielen auch so dargestellt werden, dass aufeinanderfolgende Elemente statt dessen entlang den Reihen angeordnet sind. In diesem Fall gilt die Beschreibung unten nach wie vor, nur dass sich die Verweise auf Reihen und Spalten umkehren.
  • Der Zweck des Reihen-Spalten-Modus ist es, jedes Gitternetz so zu transponieren, dass, wenn die Eingangsdatenelemente (zum Beispiel vom DRAM 112) in der Sequenz angeordnet sind, die quer zu den Spalten den Gitternetzes verläuft, die Ausgangsdatenelemente (die zum Beispiel an den On-Chip-Speicher 102 ausgegeben werden) in der Sequenz angeordnet sind, die quer zu den Reihen des Gitternetzes verläuft. Wenn zum Beispiel in Gitternetz 406 die ersten vier Datenelemente der Eingangsdatensequenz A, B, C, D sind (Lesen von vier Elementen abwärts in der ersten Spalte), so sind die ersten vier Datenelemente der Ausgabedatensequenz A, G, M, S (Lesen von vier Elementen entlang der ersten Reihe). Eine Reihen-Spalten-Operation wie diese ändert darum die Reihenfolge von Datenelementen in Abhängigkeit davon, wie viele Reihen als im Gitternetz vorhanden definiert sind.
  • Um den Reihen-Spalten-Modus zu implementieren, generiert das Adressengenerierungselement 210 eine Lese- und eine Schreibsequenz, was zur Reihen- und Spaltentransposition führt. Das kann erreicht werden, indem man eine nicht-lineare Lesesequenz (zum Beispiel aus dem DRAM 112) und eine lineare Schreibsequenz (wie in 4 veranschaulicht und unten ausführlicher beschrieben) generiert oder indem man eine lineare Lesesequenz (zum Beispiel aus dem On-Chip-Speicher 102) und eine nicht-lineare Schreibsequenz (wie zum Beispiel im dritten Beispiel 304 in 3 gezeigt) generiert. In weiteren Beispielen können auch nicht-lineare Lesesequenzen und nicht-lineare Schreibsequenzen verwendet werden, um einen effizienten Speicherzugriff zu ermöglichen, wie unten mit Bezug auf 6 beschrieben ist.
  • 4 zeigt das Beispiel einer nicht-linearen Lesesequenz 410. Es ist zu sehen, dass sie nicht-aufeinanderfolgende Speicheradressen umfasst. In einem Beispiel kann die Adressensequenz mittels eines Algorithmus generiert werden, der durch den folgenden Pseudocode veranschaulicht wird:
    Figure DE102013014168A1_0002
    Figure DE102013014168A1_0003
    wobei ”rows” (N1) die Anzahl von Reihen im Gitternetz ist (sechs im Beispiel von 4), ”columns” die Anzahl von Spalten im Gitternetz ist (vier im Beispiel von 4), ”numBlocks” die Anzahl von Blöcken von Datenelementen ist (zwei im Beispiel von 4) und ”numItems” die Gesamtzahl von Datenelementen über alle Blöcke ist (48 im Beispiel von 4). Die Variablen ”a”, ”b” und ”0” sind interne Variablen, die innerhalb des Algorithmus verwendet werden, die alle auf null initialisiert werden können, oder es können eine oder mehrere auf Werte ungleich null initialisiert werden, um einen Versatz anzuwenden.
  • Nach dem Berechnen der Anfangswerte für N0 (die Anzahl von Reihen im Gitternetz), N1 (die Anzahl von Reihen, multipliziert mit der Anzahl von Spalten) und N2 (das Produkt der Anzahl von Reihen, der Anzahl von Spalten und der Anzahl von Blöcken von Datenelementen) iteriert der Algorithmus durch die Anzahl von vorhandenen Datenelementen, wobei er bei jeder Iteration die nächste Adresse in der Sequenz (”nextItemAddr”) berechnet. Der Algorithmus überspringt praktisch eine feste Anzahl von Datenelementen von der Eingangssequenz (zum Beispiel sechs in 4), bis das Ende einer Reihe erreicht ist (durch die erste ”if”-Aussage bestimmt), inkrementiert dann den Startpunkt für diese Reihe um eins, und beginnt von vorn. Das Ende eines Blocks wird durch die zweite ”if”-Aussage detektiert, wodurch die Berechnungen zurückgesetzt werden, aber ein Versatz hinzufügt wird, der anhand der Rest-Operation, rem (.), berechnet wird (24 in 4). Der Prozess wird dann wiederholt, bis ”numItems” erreicht ist. Es ist zu beachten, dass ”numItems” auf einen größeren Wert als die Gesamtzahl der vorhandenen Datenelemente gesetzt werden kann und dass der Algorithmus in einem solchen Fall zu dem ersten Block zurückkehrt, sobald auf alle Blöcke zugegriffen wurde.
  • Die vom obigen Algorithmus generierte Lesesequenz 410 ist in 4 gezeigt, wobei die oberste Reihe die Sequenz für den ersten Block zeigt (Gitternetz 406) und die unterste Reihe die Sequenz für den zweiten Block zeigt (Gitternetz 408). Wenn wir die ersten vier Elemente der Lesesequenz 410 als ein Beispiel nehmen, so werden diese von den Adressen 0, 6, 12, 18 gelesen, die den Datenelementen A, G, M, S von den Eingangsdatenelementen 402 entsprechen. Man sieht, dass dies der ersten Reihe des Gitternetzes 406 entspricht.
  • Das Adressengenerierungselement 210 generiert eine lineare Schreibsequenz 412, die aufeinanderfolgende Speicheradressen hat, so dass, wenn die Lesesequenz 410 und die Schreibsequenz 412 durch die Transfer-Engine 106 verwendet werden, die Datenelemente in einer nicht-linearen Sequenz gelesen werden und in einer linearen Sequenz geschrieben werden. Es ist zu beachten, dass die Schreibsequenz in 4 der Einfachheit halber die Adressen 0 bis 47 hat, dass aber in anderen Beispielen die Adressen von jeder Basisadresse aus beginnen können. Das Ergebnis der Kombination der Lesesequenz 410 und der Schreibsequenz 412 ist im ersten Block der Ausgabedatenelemente 414 und im zweiten Block der Ausgabedatenelemente 416 zu sehen. Durch Vergleichen dieser Ausgabedatenelemente mit den Gitternetzen 406 und 408 ist zu erkennen, dass eine Reihen-Spalten-Operation erfolgreich durchgeführt wurde.
  • Das gleiche Ergebnis kann auch erhalten werden, indem man eine lineare Lesesequenz und eine nicht-lineare Schreibsequenz (wie beispielsweise im zweiten Beispiel 304 in 3) wie folgt generiert (im Interesse einer prägnanteren Darstellung ist nur der erste Block gezeigt): Lesesequenz:
    Figure DE102013014168A1_0004
    Schreibsequenz:
    Figure DE102013014168A1_0005
  • Die nicht-lineare Schreibsequenz kann mittels ähnlicher Techniken wie die nicht-lineare Lesesequenz, die oben im Detail beschrieben wurde, generiert werden. Die obigen Beispiele veranschaulichen, wie das Adressengenerierungselement 210 verwendet werden kann, um eine Verschachtelungs- und Entschachtelungsoperation, wie zum Beispiel einen Reihen- und Spaltentausch auf einem Satz von Datenelementen, zu implementieren.
  • 5 zeigt Schaubilder 502, 506, die zwei weitere beispielhafte Verfahren zum Entschachteln veranschaulichen, die insofern effizienter sind, als sie mit dem DRAM 112 interagieren. Beide Verfahren teilen den Zeit-Entschachtelungsprozess in zwei Speicher-zu-Speicher-Transferoperationen (On-Chip-Speicher zu DRAM und dann DRAM zu On-Chip-Speicher), von denen jede wenigstens eine nicht-lineare Adressensequenz verwendet. Beide Verfahren verwenden außerdem eine Kombination aus Reihen-Spalten(R-C)-Modus (wie oben mit Bezug auf 4 beschrieben, Pfeile 521 und 561) und Burst-Reihen-Spalten(B R-C)-Modus (Pfeile 523, 524 und 562564).
  • Obgleich 5 die Datenelemente zeigt, die vom On-Chip-Speicher 102 in den DRAM 112 und dann zurück in den On-Chip-Speicher 102 transferiert werden, ist klar, dass die Datenelemente statt dessen auch aus dem On-Chip-Speicher, aus dem die Datenelemente ursprünglich gelesen wurden, in einen separaten On-Chip-Speicher zurückgeschrieben werden können oder dass die Datenelemente in einen anderen Teil des On-Chip-Speichers 102 zurückgeschrieben werden können. In einem Beispiel können die Datenelemente (in den Operationen, die durch Pfeile 521 und 561 bezeichnet sind) aus einem Teil des On-Chip-Speichers 102 gelesen werden, der als ein Kachelungspuffer (engl. tiling buffer) bezeichnet werden kann, und die Datenelemente können anschließend (in entschachtelter Form) (in den Operationen, die durch Pfeile 524 und 564 bezeichnet sind) in einen separaten Teil des On-Chip-Speichers 102 zurückgeschrieben werden, der als ein Entschachteler-Ausgabepuffer bezeichnet werden kann. Diese zwei Puffer können von unterschiedlicher Größe sein. Wenn in der folgenden Beschreibung davon die Rede ist, dass Datenelemente aus dem On-Chip-Speicher 102 und anschließend in denselben On-Chip-Speicher 102 zurück transferiert werden, so sind dies nur Beispiele; die beschriebenen Verfahren können auch dafür verwendet werden, Datenelemente von einem On-Chip-Speicherelement in ein anderes (über den DRAM) oder aus einem Teil des On-Chip-Speichers 102 in einen anderen Teil des On-Chip-Speichers 102 (über den DRAM) zu transferieren.
  • Der Burst-Reihen-Spalten-Modus kann als eine Variante des oben beschriebenen Reihen-Spalten-Modus angesehen werden, oder alternativ kann der Reihen-Spalten-Modus als ein spezieller Fall des Burst-Reihen-Spalten-Modus mit einer Burstlänge von eins angesehen werden. Beim Burst-Reihen-Spalten-Modus werden die Daten in einem Gitternetz mit Reihen und Spalten angeordnet (wie oben beschrieben); anstatt aber nur ein einziges Datenelement aus jeder Spalte zu lesen, während die Reihe durchquert wird (wie im Reihen- und Spalten-Fall), liest der Burst-Reihen-Spalten-Modus eine zuvor festgelegte Anzahl aufeinanderfolgender Adressen (wobei diese zuvor festgelegte Anzahl als die ”Burst-Länge” L bezeichnet wird), bevor er zur nächsten Spalte entlang der Reihe springt (d. h. durch Überspringen von r-L Datenelementen, wobei r = Anzahl von Reihen im Gitternetz). Wenn zum Beispiel im Gitternetz 406 von 4 die Burst-Länge drei ist, so liest der Burst-Reihen-Spalten-Modus zuerst drei aufeinanderfolgende Elemente in einem Burst (Elemente A, B, C), bewegt sich dann zur nächsten Spalte und liest die nächsten drei aufeinanderfolgenden Elemente (G, H, I), gefolgt von M, N, O und dann S, T, U. Dann kehrt er zur ersten Spalte zurück und liest D, E, F, gefolgt von J, K, L, usw. Der Burst-Reihen-Spalten-Modus kann darum als der gleiche wie der Reihen-Spalten-Modus angesehen werden, außer dass eine Gruppe aufeinanderfolgender Datenelemente gelesen werden statt nur eines einzigen, oder alternativ kann der Reihen-Spalten-Modus als ein Burst-Reihen-Spalten-Modus mit einer Burst-Länge gleich eins angesehen werden.
  • Eine Lesesequenz für den Burst-Reihen-Spalten-Modus kann in einem Beispiel mittels eines Algorithmus veranschaulicht generiert werden, der durch den folgenden Pseudocode veranschaulicht ist:
    Figure DE102013014168A1_0006
    Figure DE102013014168A1_0007
  • Die Variablen in diesem Pseudocode sind so definiert, wie es oben in der Beschreibung des Reihen-Spalten-Modus dargelegt wurde. Zusätzlich ist ”burstLength” (N3) die Anzahl der aufeinanderfolgenden oder aneinandergrenzenden Elemente, die in jedem Burst zu lesen sind, und N4 ist das Produkt der Anzahl von Reihen (N1) und der Anzahl von Spalten minus N3. Es ist zu beachten, dass Schreibsequenzen für eine Burst-Reihen-Spalten-Operation ebenfalls auf ähnliche Weise generiert werden können.
  • Der Burst-Reihen-Spalten-Modus kann dafür verwendet werden, Entschachtelungsoperationen mit bestimmten Arten von Speicherbausteinen effizient auszuführen, wie zum Beispiel dem DRAM 112, insbesondere wenn die Burst-Länge (L) im B R-C Modus die gleiche oder ähnlich ist wie die DRAM-Schnittstellenburstgröße. Durch Auswählen einer Burst-Länge (oder Burst-Größe) anhand einer DRAM-Schnittstellenburstgröße auf diese Weise (oder gemäß den anderen Beispielen, die unten beschrieben werden) kann eine effiziente Nutzung der DRAM-Schnittstelle erreicht werden. Im Gegensatz dazu versuchen viele herkömmliche Entschachteler-Zugriffsmuster, weit voneinander beabstandete Datenelemente aufeinanderfolgend zu lesen oder zu schreiben, was aufgrund sowohl unvollständiger (DRAM-Schnittstellen-)Bursts als auch des Durchquerens vieler DRAM-Seiten zu einem ineffizienten Speicherzugriff mit DRAM-Bausteinen führt.
  • Zum Beispiel liest die Reihen-Spalten-Operation von 4 aufeinanderfolgende Datenelemente, die durch die Anzahl von Reihen im Gitternetz voneinander beabstandet sind. In Beispielen, wo eine große Anzahl von Reihen vorhanden sind, kann dies zu Zugriffen führen, die weit über den Speicherbaustein hinweg voneinander beabstandet sind, was zu ineffizienten Zugriffen von verschiedenen DRAM-Seiten aus führt. Kehren wir zurück zu den in 3 gezeigten Beispielen. Dort ist zu sehen, dass im zweiten Beispiel 302 das Lesen im Reihen-Spalten-Modus aus dem DRAM ineffizient ist und im dritten Beispiel 304 das Schreiben im Reihen-Spalten-Modus in den DRAM ebenfalls ineffizient ist.
  • 6 veranschaulicht ein Beispiel einer Entschachtelungsoperation, die nicht mit den Ineffizienzen des DRAM-Zugriffs behaftet ist, wie man sie beim häufigen Zugriff auf verschiedene Seiten oder dem teilweisen Ausfüllen von Bursts findet. Dieses Beispiel ist auch im ersten Schaubild 502 in 5 gezeigt. Das Beispiel von 6 generiert das gleiche Reihen-Spalten-Ergebnis wie das in 4 (d. h. ein Tausch mit sechs Reihen, vier Spalten und zwei Blöcken), aber tut dies unter Verwendung vieler Durchgänge von linearen sequenziellen Speicherzugriffen, die zu einem effizienten Betrieb eines mit Seiten arbeitenden Bauelements wie dem DRAM führen. Im Beispiel von 6 liest die Transfer-Engine eine Sequenz von Eingangsdatenelementen aus dem On-Chip-Speicher 102, speichert die Datenelemente im DRAM 112, liest dann die Datenelemente aus dem DRAM 112 zurück und schreibt sie in den On-Chip-Speicher 102 (und überschreibt dabei möglicherweise ihre ursprünglichen Positionen), wobei Reihen und Spalten vertauscht sind.
  • Zum Zweck der Erläuterung sind die Eingangsdatenelemente 602 die gleichen wie die, die im Beispiel von 4 verwendet wurden. Es gibt insgesamt 48 Datenelemente mit einer aufeinanderfolgenden Sequenz von Speicheradressen, die bei null beginnt. Zuerst werden die Datenelemente aus dem On-Chip-Speicher 102 im Reihen-Spalten-Modus mit sechs Reihen und zwei Spalten je Block oder Kachel gelesen. Wie in 6 gezeigt, sind die Datenelemente in Kacheln 604 angeordnet, die jeweils sechs Reihen und zwei Spalten haben. Diese Größe einer Kachel wird hier nur als Beispiel verwendet. In vielen Implementierungen kann die Kachel-Größe gleich der DRAM-Schnittstellenburstgrolle eingestellt werden. Eine nicht-lineare Lesesequenz 606, die entlang der Reihen einer jeden dieser Kacheln nacheinander zu lesen ist (d. h. mittels des Reihen-Spalten-Modus), wird durch das Adressengenerierungselement 210 wie oben beschrieben generiert. Eine lineare Schreibsequenz 608 wird ebenfalls durch das Adressengenerierungselement 210 generiert. Die Transfer-Engine 106 liest aus dem On-Chip-Speicher 102 unter Verwendung der nicht-linearen Lesesequenz 606 (Pfeil 521 in 5) und schreibt in den DRAM 112 unter Verwendung der linearen Schreibsequenz 608 (Pfeil 522). Das Schreiben in den DRAM auf diese Weise ist nicht ineffizient, weil es ein lineares Schreiben an aneinandergrenzende Adressen ist, weshalb nur gelegentlich eine DRAM-Seitengrenze überschritten wird, wenn die Anzahl von Datenelementen ausreicht.
  • Es ist zu sehen, dass die Datenelemente 610 im DRAM 112 infolge dieser Operation einem Reihen-Spalten-Tausch der Kacheln 604 entsprechen.
  • Dann wird eine nicht-lineare Lesesequenz 612 durch das Adressengenerierungselement 210 generiert, die diese Datenelemente aus dem DRAM 112 zurück liest. Diese Lesesequenz wird unter Verwendung des Burst-Reihen-Spalten-Modus generiert und ist dafür konfiguriert, einen ineffizienten Zugriff zu vermeiden. Der Burst-Reihen-Spalten-Modus verwendet in diesem Beispiel sechs Elemente je Burst, zwölf Reihen und zwei Spalten. Weil die DRAM-Lesesequenz 612 Bursts von Datenelementen liest, befinden sich diese an aufeinanderfolgenden Adressen im DRAM, so dass es unwahrscheinlich ist, dass sie Seitengrenzen überqueren; außerdem nutzen sie effizient die Bursts, die an der DRAM-Schnittstelle zur Verfügung stehen (insbesondere dann, wenn die Adressengenerator-Burst-Länge L nahe bei der DRAM-Schnittstellenburstgröße liegt). Darum werden bedeutend weniger Seitengrenzen überquert als bei einem (Nicht-Burst-)Reihen-Spalten-Zugriff.
  • Ferner wird eine nicht-lineare Schreibsequenz 614 generiert, um die Datenelemente zurück in den On-Chip-Speicher 102 zu schreiben. Diese Schreibsequenz 614 wird ebenfalls unter Verwendung des Burst-Reihen-Spalten-Modus generiert und verwendet in diesem Beispiel zwei Elemente je Burst, vier Reihen und drei Spalten. Die Kombination aus der Lesesequenz 612 (Pfeil 523 in 5) und der Schreibsequenz 614 (Pfeil 524) ist so, dass sich die Ausgangsdatenelemente 616, die in den On-Chip-Speicher 102 zurückgeschrieben werden, in derselben Sequenz befinden, wie wenn eine Reihen-Spalten-Basisoperation mit sechs Reihen, vier Spalten und zwei Blöcken ausgeführt werden würde (das kann mit 4 verglichen werden), außer dass die Daten im DRAM 112 ohne das Entstehen von Ineffizienzen aufgrund von Seitengrenzen und unvollständigen Bursts gespeichert wurden. Weil ferner das anfängliche Lesen aus dem On-Chip-Speicher 102 (Pfeil 521 in 5) eine Reihen-Spalten-Operation mit Kacheln aus nur zwei Spalten verwendete, ermöglicht dies, den Transfer von Daten in den DRAM zu beginnen, sobald eine ganze Kachel im On-Chip-Speicher 102 angekommen ist, was früher ist, als wenn ein Vier-Spalten-Block wie in 4 verwendet wird. Dies kann die Leistung im Fall von Echtzeitdaten verbessern, wo die Daten in einem Stream im zeitlichen Verlauf eintreffen.
  • 710 veranschaulichen ein Beispiel einer weiteren Entschachtelungsoperation, bei der nicht die Ineffizienzen des DRAM-Zugriffs in Verbindung mit dem Zugriff auf verschiedene Seiten entstehen. Dieses Verfahren ist auch im zweiten Schaubild 506 in 5 gezeigt. Wie aus 5 zu ersehen ist, beinhaltet dieses Verfahren nur lineare Interaktionen mit dem DRAM 112 innerhalb eines Bursts, d. h. unter Verwendung des Burst-Reihen-Spalten-Modus zum Schreiben in den DRAM (Pfeil 562) und zum Lesen aus dem DRAM (Pfeil 563). Wie oben beschrieben, heißt das, dass sehr wenige Seitengrenzen überquert werden und dass DRAM-Schnittstellenbursts effizient verwendet werden, wodurch die Gesamteffizienz des Verfahrens verbessert wird.
  • Nur zu veranschaulichenden Zwecken sind in diesem Verfahren die Datenelemente in einem oder mehreren Gitternetzen oder in einer oder mehreren Tabellen mit mehreren Reihen und Spalten (wie in den früheren Beispielen) angeordnet und wird ferner das Konzept einer Kachel verwendet, die aus einem Satz Daten in der Reihen-Spalten-Struktur gebildet wird. Wie unten beschrieben, kann eine Kachel gemäß dem DRAM-Schnittstellenburst oder der Seitengröße bemessen werden. Es versteht sich, dass die Daten im Speicher an aneinandergrenzenden Speicherorten gespeichert werden.
  • 7 zeigt einen beispielhaften zeitverschachtelten Datenblock 700, der 200 Datenelemente umfasst (Adressen 0–199 sind gekennzeichnet), die in 10 Kacheln 702 (T0–T9) angeordnet sind, die jeweils 20 Elemente umfassen. Wenn der DRAM 112 ein Burst-Modus-Zugriffs-DRAM ist, so kann die Kachel-Größe so gewählt werden, dass sie der DRAM-Schnittstellenburstgröße entspricht, wodurch die Effizienz des Verfahrens weiter verbessert wird, da der Speichertransfer (wie unten beschrieben) die DRAM-Schnittstelle effizient verwendet. Wenn die Kachel-Größe nicht mit der DRAM-Schnittstellenburstgröße übereinstimmt, so kann die Kachel-Größe alternativ kleiner als die DRAM-Schnittstellenburstgröße sein, oder es können mehrere Bursts je Kachel verwendet werden. In vielen Beispielen, wo die Kachel-Größe nicht exakt der DRAM-Schnittstellenburstgröße entspricht, sind die Kacheln auf Seitengrenzen im DRAM ausgerichtet, wodurch die Effizienz der DRAM-Schnittstelle deutlich gesteigert werden kann. Wie weiter unten noch ausführlicher beschrieben wird, bedeutet die Wahl der Kachel-Größe Beschränkungen für die Größe des on-Chip-RAM-Kachelungspuffers (d. h. des On-Chip-Speichers 102, aus dem Daten gelesen werden), weil das Verfahren erst beginnen kann, wenn wenigstens eine gesamte Kachel im Kachelungspuffer gespeichert wird.
  • Es versteht sich, dass zwar der beispielhafte zeitverschachtelte Block 700 in 7 200 Datenelemente umfasst, dass diese Blöcke aber auch deutlich größer sein können und Tausende Datenelemente umfassen können. Ferner kann die Anordnung von Reihen und Spalten innerhalb des zeitverschachtelten Blocks durch das System eingestellt werden, in dem das Verfahren verwendet wird.
  • Der Entschachtelungsprozess in diesem Beispiel ist in mehrere Stufen des Speicher-zu-Speicher-Transfers unterteilt, wobei jeder Transfer (oder ”Kachelungs-Job”) eine Anzahl von Kacheln transferiert, wie mit Bezug auf das in 8 gezeigte Flussdiagramm erklärt werden kann. Das in 8 gezeigte Verfahren transferiert N Kacheln in jedem Kachelungs-Job, und der Wert von N kann so gewählt werden, dass er einer Spalte aus Kacheln entspricht (zum Beispiel N = 2 im in 7 gezeigten Beispiel). In anderen Beispielen hingegen kann ein Kachelungs-Job eine Anzahl von Spalten aus Kacheln umfassen (zum Beispiel mehr als eine Spalte), um die Anzahl der erforderlichen Kachelungs-Jobs zu verringern. Nur zum Zweck der Erläuterung wird das in 8 gezeigte Verfahren mit Bezug auf den in 7 gezeigten zeitverschachtelten Datenblock 700 und mit N = 2 beschrieben. In jenen Beispielen, in denen ein Kachelungs-Job mehr als eine Spalte aus Kacheln umfasst, funktioniert das Verfahren wie unten beschrieben, und nur die Konfiguration des Adressengenerators wird verändert (d. h. diese sagt dem Adressengenerator, dass mehr Daten zu verarbeiten sind).
  • Das Verfahren kann beginnen, sobald ein Minimum von N Kacheln (d. h. wenigstens N Kacheln) aus dem zeitverschachtelten Block im On-Chip-Speicher 102 gespeichert sind (Block 802), zum Beispiel, sobald Kacheln T0 und T1 im On-Chip-Speicher 102 gespeichert sind. Wie oben beschrieben, kann der Teil des On-Chip-Speichers 102, in dem diese verschachtelten Kacheln T0 und T1 gespeichert sind, als ein Kachelungspuffer bezeichnet werden, und da die erste Stufe 81 des Speicher-zu-Speicher-Transfers auf N Kacheln arbeitet, braucht dieser Kachelungspuffer nur so groß zu sein, dass er N Kacheln von Daten speichern kann. In einem Beispiel kann der Kachelungspuffer ein Elastizitätspuffer sein, der so bemessen sein kann, dass je nach Systemdurchsatz, verfügbarer Speicherbandbreite und der DRAM-Schnittstelle ein oder mehrere Kachelungs-Jobs möglich sind.
  • Die erste Kachel, T0, wird unter Verwendung des Reihen-Spalten-Modus aus dem On-Chip-Speicher 102 gelesen (Block 804 und Pfeil 561 in 5). Die nicht-lineare Lesesequenz für diese erste Kachel, die verwendet wird, ist darum:
    Figure DE102013014168A1_0008
    wobei die oben gezeigten Zahlen den Adressen der Datenelemente im On-Chip-Speicher entsprechen, wie in 7 gezeigt. Kehren wir zur früheren Beschreibung des Reihen-Spalten-Modus (und insbesondere dem gezeigten Pseudocode-Beispiel) zurück. Es ist zu sehen, dass ein Datenelement (d. h. ein einzelnes Datenelement) gelesen wird und dann die nächsten 9 Datenelemente übersprungen werden, bevor ein weiteres Datenelement gelesen wird. Das wird wiederholt, bis insgesamt 4 Datenelemente gelesen wurden (die Anzahl von Spalten in einer Kachel), woraufhin der gesamte Prozess mit einem Versatz von einem einzelnen Datenelement wiederholt wird (d. h. Adresse 1 wird gelesen, gefolgt von 11), und so weiter, bis die gesamte Kachel gelesen wurde.
  • Diese Sequenz von Datenelementen wird dann unter Verwendung des Burst-Reihen-Spalten-Modus in den DRAM 112 (Block 806 und Pfeil 562) mit einer Burst-Länge L gleich der Anzahl von Datenelementen in einer Kachel (zum Beispiel L = 20) geschrieben:
    Figure DE102013014168A1_0009
    wobei die erste Reihe den Adressen der Datenelemente im DRAM entspricht, die mit 0'–19' gekennzeichnet sind, um sie von den ursprünglichen Adressen im On-Chip-Speicher 102 zu unterscheiden, von wo die Datenelemente gelesen wurden und die in der zweiten Reihe gezeigt sind.
  • Diese zwei Operationen (die Lese-Operation in Block 804 und die Schreib-Operation in Block 806) werden dann wiederholt, bis alle N Kacheln in den DRAM geschrieben wurden (”Ja” in Block 808). Auf dieser Stufe, nachdem N Kacheln in den DRAM geschrieben wurden, sind möglicherweise alle gespeicherten Datenelemente aus dem On-Chip-Speicher 102 gelesen worden; in diesem Fall kann der On-Chip-Speicher wieder mit weiteren N Kacheln von Datenelementen aus dem zeitverschachtelten Block befüllt werden (Block 810). Wenn bereits weitere Kacheln im On-Chip-Speicher gespeichert sind (zum Beispiel wenigstens N weitere Kacheln), so kann das Verfahren alternativ mit dem Lesen zusätzlicher Kacheln fortfahren (in Block 804) und sie in den DRAM schreiben (in Block 806), ohne ein Nachfüllen des On-Chip-Speichers zu verlangen (d. h. Block 810 wird weggelassen).
  • Diese erste Stufe 81 wird wiederholt, bis der gesamte zeitverschachtelte Block 700 aus dem On-Chip-Speicher 102 gelesen und in den DRAM geschrieben wurde (”Ja” in Block 812), wobei der On-Chip-Speicher 102 bei Bedarf nachgefüllt wird (in Block 810). In diesem Beispiel gibt es fünf Transfers, die jeweils zwei Kacheln transferieren (da N = 2 und der Block 700 10 Kacheln umfasst).
  • 9 zeigt eine Gitternetzdarstellung 902 der Datenelemente (durch die ursprüngliche Adressenposition in Block 700 bezeichnet), die im DRAM am Ende der ersten Stufe 81 für einen eingegebenen zeitverschachtelten Block 700, wie in 7 gezeigt, gespeichert werden. Neben diesem Gitternetz 902 befindet sich ein zweites Gitternetz 904, das die Adressen jedes Datenelements im DRAM 122 identifiziert (mit 0'–199' gekennzeichnet, um sie von den ursprünglichen Adressen 0–199 im On-Chip-Speicher 102 zu unterscheiden). In dieser Gitternetzdarstellung sind die ursprünglichen Kacheln umgeordnet (im Vergleich zu Block 700), wenn auch nicht entschachtelt, und die umgeordneten Datenelemente von einer Kachel belegen aufeinanderfolgende Speicheradressen (zum Beispiel ist T0 in den Adressen 0'–19' gespeichert). Wie aus 9 zu erkennen ist, umfasst das Gitternetz 40 Reihen und 5 Spalten, so dass jede Spalte von Datenelementen (wobei aufeinanderfolgende Datenelemente in Spalten angeordnet sind) zwei Kacheln umfasst. Die Grenze zwischen den Kacheln in einer Spalte ist durch eine gepunktete Linie 906 kenntlich gemacht.
  • In der zweiten Stufe 82 des Verfahrens werden die Datenelemente in den On-Chip-Speicher 102 (oder in ein anderes On-Chip-Speicherelement, wie oben beschrieben) zurück transferiert, und es wird eine weitere Umordnungsoperation verwendet, um das Entschachteln der Daten zu vollenden. Die erste Kachel, T0, wird aus dem DRAM 112 (Block 814 und Pfeil 563 in 5) unter Verwendung des Burst-Reihen-Spalten-Modus mit einer Burst-Länge L, die wieder gleich der Anzahl von Datenelementen in einer Kachel ist (L = 20 in diesem Beispiel), gelesen, d. h. die Lesesequenz ist:
    Figure DE102013014168A1_0010
    wobei die erste Reihe den Adressen der Datenelemente im DRAM 112 entspricht und die zweite Reihe die ursprünglichen Adressen im On-Chip-Speicher 102 zeigt, von wo die Datenelemente gelesen wurden.
  • Die Kachel, T0, wird dann unter Verwendung des Burst-Reihen-Spalten-Modus in den On-Chip-Speicher 102 geschrieben (Block 816 und Pfeil 64). Der Burst-Reihen-Spalten-Modus verwendet eine Burst-Länge L, die gleich der Anzahl von Spalten in einer Kachel im ursprünglichen zeitverschachtelten Block 700 ist, im 7 gezeigten Beispiel z. B. vier. Daten werden darum an vier aufeinanderfolgende Adressen im On-Chip-Speicher geschrieben; die nächsten 16 Adressen (Anzahl von Spalten im ursprünglichen zeitverschachtelten Block = Anzahl von Reihen im transponierten Block = 20, 20 – 4 = 16) werden übersprungen, und dann werden Daten an die nächsten vier aufeinanderfolgenden Adressen geschrieben, und so weiter. Die nicht-lineare Schreibsequenz ist darum:
    Figure DE102013014168A1_0011
    wobei die erste Reihe den Adressen im On-Chip-Speicher entspricht, an die Schreibvorgänge gerichtet werden, und die mit 0'', 1'' usw. gekennzeichnet sind, um sie von den ursprünglichen Adressen im On-Chip-Speicher 102 zu unterscheiden, von wo die Datenelemente in der ersten Stufe 81 gelesen wurden, und diese ursprünglichen Adressen sind in der zweiten Reihe gezeigt.
  • Es ist zu beachten, dass die Burst-Länge, die in den ersten zwei Burst-Reihen-Spalten-Operationen (Pfeile 562 und 563), die in den DRAM schreiben und aus dem DRAM lesen, verwendet wird, die gleiche Burst-Länge (zum Beispiel L = 20) verwendet, und die dritte Burst-Reihen-Spalten-Operation (Pfeil 564), die in den On-Chip-Speicher schreibt, eine andere Burst-Länge (zum Beispiel L = 4) verwendet.
  • Diese zweite Stufe 82 wird dann Kachel für Kachel (und unter Verwendung der gleichen Kachel-Größe wie die erste Stufe 81) wiederholt, bis alle Kacheln in den On-Chip-Speicher 102 geschrieben wurden (”Ja” in Block 818).
  • 10 zeigt eine Gitternetzdarstellung 1002 der Datenelemente (durch die ursprüngliche Adressenposition in Block 700 bezeichnet), die im On-Chip-Speicher am Ende der zweiten Stufe 82 für einen eingegebenen zeitverschachtelten Block 700, wie in 7 gezeigt, gespeichert werden. Neben diesem Gitternetz 1002 befindet sich ein zweites Gitternetz 1004, das die Adressen jedes Datenelements im On-Chip-Speicher 102 identifiziert (mit 0''–199'' gekennzeichnet, um sie von den ursprünglichen Adressen 0–199 im On-Chip-Speicher 102 und den Adressen 0'–199' im DRAM 112 zu unterscheiden). In dieser Gitternetzdarstellung sind die ursprünglichen Datenelemente, wie aus 10 zu erkennen ist, so entschachtelt, dass die erste Kachel T0 nun vier Reihen und fünf Spalten umfasst (anstatt fünf Reihen und vier Spalten, wie in Block 700), wie durch eine gestrichelte Umrisslinie gezeigt. Wie aus 10 zu erkennen ist, umfasst das Gitternetz für einen entschachtelten Block 20 Reihen und 10 Spalten.
  • Es versteht sich, dass, obgleich die 7, 9 und 10 Adressen zeigen, die bei einer Basisadresse 0 beginnen, in anderen Beispielen die Adressen bei jeder beliebigen Basisadresse beginnen können.
  • Aus der obigen Erläuterung und 8 ist zu sehen, dass Lese-/Schreib-Jobs im Verfahren auf einer Anzahl von Kacheln (zum Beispiel einer oder mehreren Kacheln) arbeiten können und nicht am gesamten zeitverschachtelten Block arbeiten müssen. Dadurch ist es möglich, das Verfahren für die konkrete DRAM-Schnittstellenburstgröße zu optimieren. Zum Beispiel kann eine Kachel auf die gleiche Größe eingestellt werden wie ein DRAM-Schnittstellenburst, und ein Kachelungs-Job ist dann eine ganze Zahl von DRAM-Schnittstellenbursts (zum Beispiel zwei im Beispiel, das oben mit Bezug auf die 7, 9 und 10 beschrieben wurde). Die DRAM-Schnittstellenburstgröße, die durch die DRAM-Schnittstelle definiert wird, kann auf eine Seiten- oder Teilseiten-Ebene innerhalb des DRAM eingestellt werden und ist von der Bus-Bandbreite abhängig und kann so eingestellt werden, dass der Beginn eines Bursts auf den Anfang einer Seite ausgerichtet ist und nach Möglichkeit vollständig innerhalb einer Seite abschließt (um Ineffizienzen aufgrund von Speicher-Paging zu verhindern). Wie oben beschrieben, wenn die Kachel-Größe nicht exakt mit der DRAM-Schnittstellenburstgröße übereinstimmt oder ein Mehrfaches der DRAM-Schnittstellenburstgröße ist, können die Kacheln statt dessen auf Seitengrenzen ausgerichtet werden, um die DRAM-Effizienz auf Kosten ungenutzter DRAM-Kapazität zu verbessern.
  • Obgleich die obige Beschreibung und 8 zeigen, dass das Verfahren seriell ausgeführt wird (d. h. die zweite Stufe 82 wird ausgeführt, nachdem die ersten Stufe 81 vollendet wurde), können Aspekte des Verfahrens parallel ausgeführt werden, so dass Kacheln aus einem zeitverschachtelten Block aus dem SRAM gelesen und in den DRAM geschrieben werden können (in der ersten Stufe 81) und gleichzeitig Kacheln aus einem anderen zeitverschachtelten Block aus dem DRAM gelesen und in den SRAM geschrieben werden können (in der zweiten Stufe 82). Dies erlaubt eine Speicherwiederverwendung, weil die Operation des Schreibens in den DRAM (Block 806) denselben Satz Adressen verwenden kann, aus denen in der zweiten Stufe 82 gelesen wird (Block 814), solange der Zeitpunkt so gewählt wird, dass eine bestimmte Adresse (in Block 814) gelesen wird, bevor sie (in Block 806) mit Datenelementen aus einem anderen zeitverschachtelten Block überschrieben wird.
  • Das in 8 gezeigte und oben beschriebene Verfahren teilt die Operation des Transponierens des Gitternetzes aus Datenelementen (zum Ausführen eines Entschachtelns) in zwei separate Teile. Ein erster Teil der Transposition wird ausgeführt, wenn aus dem SRAM gelesen wird (Block 804 und Pfeil 561 in 5) und in den DRAM geschrieben wird (Block 806 und Pfeil 562), und der zweite Teil der Transposition wird ausgeführt, wenn aus dem DRAM gelesen wird (Block 814 und Pfeil 563) und in den SRAM zurück geschrieben wird (Block 816 und Pfeil 564). Alle diese Transponierungen verwenden nicht-lineare Sequenzen von Adressen; es werden jedoch verschiedene nicht-lineare Sequenzen verwendet. Im ersten Teil wird der Reihen-Spalten-Modus für das Lesen aus dem SRAM verwendet (Burst-Länge = 1), und im zweiten Teil wird der Burst-Reihen-Spalten-Modus zum Schreiben in den SRAM verwendet (Burst-Länge = Anzahl von Spalten in einer Kachel). Die Interaktionen mit dem DRAM (Schreiben in Block 806 und Lesen in Block 814) verwenden den Burst-Reihen-Spalten-Modus mit einer Burst-Länge, die gleich der Anzahl von Datenelementen in einer Kachel ist (zum Beispiel L = 20 im in den 710 gezeigten Beispiel).
  • Die Verfahren, die oben mit Bezug auf 5 (Beispiel 506) und 7–10 beschrieben wurden, nutzen die verfügbare Bandbreite des DRAM (und insbesondere des Burst-Zugriffs-DRAM) effizient, weil ein mehrstufiger Prozess verwendet wird, bei dem Kacheln aus Daten (anstelle des gesamten zeitverschachtelten Blocks) transferiert werden, wobei die Kachel-Größe gemäß der DRAM-Schnittstellenburstgröße gewählt wird. Die Anordnung von Kacheln ist für eine bestimmte Implementierung spezifisch, und die oben beschriebenen Verfahren können auf jede Anordnung von Kacheln und jede Anzahl von Datenelementen je Kachel angewendet werden.
  • Wenn das Verfahren beispielsweise in DVB-T2 verwendet wird, so kann die Anzahl von Kacheln in einer Spalte (N) gleich der Anzahl von Forward Error Correction(FEC)-Blöcken eingestellt werden, so dass die in den 710 gezeigten Beispiele einem Szenario entsprechen können, in dem es zwei FEC-Blöcke gibt. In anderen Beispielen können drei FEC-Blöcke vorhanden sein, so dass N = 3 und drei Kacheln aus dem SRAM in den DRAM in einem Kachelungs-Job transferiert und an aufeinanderfolgende Adressen im DRAM geschrieben werden.
  • In den oben beschriebenen Verfahren wird der Entschachtelungsprozess in mehrere Stufen unterteilt. Bei Verwendung der beschriebenen Verfahren ist es nicht notwendig, den gesamten verschachtelten Datenblock im Kachelungspuffer zu speichern, bevor der Entschachtelungsprozess beginnen kann. Wie mit Bezug auf 8 beschrieben, ist es nur erforderlich, N Kacheln im Kachelungspuffer zu speichern, bevor das Verfahren beginnt.
  • Die Verfahren, die oben mit Bezug auf 5 (Beispiel 506) und 7–10 beschrieben wurden, können unter Verwendung eines Adressengenerierungselements 210, wie in 2 gezeigt, implementiert werden. Dieses Adressengenerierungselement 210 kann konfigurierbar sein oder kann bestimmte Hardware-Logik umfassen, die dafür ausgelegt ist, die erforderlichen (vordefinierten) nicht-linearen Adresssequenzen zu generieren, die in einer bestimmten Implementierung des Verfahrens verwendet werden (zum Beispiel für eine bestimmte Anordnung von Kacheln).
  • Die oben beschriebenen Verfahren können zum Entschachteln jedes verschachtelten Datenblocks verwendet werden. Zu beispielhaften Anwendungen gehören OFDM-Signale und insbesondere Digital Terrestrial Television(DTT)-Signale, wie zum Beispiel DVB-T2; jedoch sind die Verfahren nicht auf OFDM, DTT oder DVB-T2 beschränkt. Die oben beschriebenen Verfahren können auch zum Verschachteln von Daten verwendet werden, um einen verschachtelten Datenblock zu bilden. Um die oben beschriebenen Verfahren zum Verschachteln anstatt zum Entschachteln zu verwenden, bleiben die Verfahrensschritte die gleichen, und der Unterschied besteht darin, dass die Eingangsdaten (die zum Beispiel in Block 802 gespeichert sind) entschachtelte Daten (und nicht verschachtelte Daten) umfassen und die Ausgangsdaten (die zum Beispiel in den SRAM am Ende von 8 zurückgeschrieben werden) verschachtelte Daten (und nicht entschachtelte Daten) umfassen.
  • Die Begriffe ”Prozessor” und ”Computer” bedeuten im Sinne des vorliegenden Textes jede Vorrichtung mit einer Verarbeitungsfähigkeit, so dass Instruktionen ausgeführt werden können. Der Fachmann erkennt, dass solche Verarbeitungsfähigkeiten in vielen verschiedenen Vorrichtungen vorhanden sind, weshalb unter den Begriff ”Computer” Set-Top-Boxen, Mediaplayer, digitale Radios, PCs, Server, Mobiltelefone, Personal Digital Assistants und viele andere Vorrichtungen fallen.
  • Der Fachmann erkennt, dass Speichervorrichtungen, die zum Speichern von Programminstruktionen oder Daten genutzt werden, in einem Netz verteilt sein können. Zum Beispiel kann ein entfernter Computer ein Beispiel eines Prozesses speichern, der als Software beschrieben ist. Ein lokaler oder Arbeitsplatz-Computer kann auf den entfernten Computer zugreifen und einen Teil der oder die gesamte Software herunterladen, um das Programm ablaufen zu lassen. Alternativ kann der lokale Computer Stücke der Software nach Bedarf herunterladen oder einige Softwareinstruktionen auf dem lokalen Arbeitsplatz-Computer und einige auf dem entfernten Computer (oder Computernetz) ausführen. Der Fachmann erkennt auch, dass durch Verwendung herkömmlicher, dem Fachmann bekannter Techniken alle, oder ein Teil der, Software-Instruktionen durch einen dedizierten Schaltkreis, ein programmierbares Logik-Array oder dergleichen ausgeführt werden können.
  • Ein konkreter Verweis auf ”Logik” bedeutet eine Struktur, die eine oder mehrere Funktionen ausführt. Ein Beispiel von Logik sind Schaltungen, die dafür ausgelegt sind, diese Funktionen auszuführen. Zum Beispiel können solche Schaltungen Transistoren und/oder andere Hardware-Elemente enthalten, die in einem Fertigungsprozess verfügbar sind. Solche Transistoren und/oder anderen Elemente können verwendet werden, um Schaltungen oder Strukturen zu bilden, die beispielsweise Speicher, wie zum Beispiel Register, Flipflops oder Latches, logische Operatoren, wie zum Beispiel Boolesche Operationen, mathematische Operatoren, wie zum Beispiel Addierer, Multiplizierer oder Schieber, und Interconnects implementieren und/oder enthalten. Solche Elemente können als Custom-Schaltungen oder Standardzellenbibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt werden. Solche Elemente können in einer bestimmten Anordnung miteinander verbunden sein. Logik kann Schaltungen enthalten, die feste Funktionen darstellen, und Schaltungen, die programmiert werden können, um eine oder mehrere Funktionen auszuführen; eine solche Programmierung kann über ein Firmware- oder Software-Update oder einen Steuerungsmechanismus ausgeführt werden. Logik, die dafür vorgesehen ist, eine einzelne Funktion auszuführen, kann auch Logik enthalten, die eine Teilfunktion oder einen Teilprozess implementiert. In einem Beispiel hat Hardware-Logik Schaltungen, die eine oder mehrere Festfunktionsoperationen, Zustandsmaschinen oder Prozesse implementieren.
  • Jeder Bereichs- oder Vorrichtungswert, der im vorliegenden Text genannt sind, kann erweitert oder geändert werden, ohne dass der gewünschte Effekt verloren geht, wie dem Fachmann einleuchtet.
  • Es versteht sich, dass sich die oben beschriebenen Nutzeffekte und Vorteile auf eine einzelne Ausführungsform oder auf mehrere Ausführungsformen beziehen können. Die Ausführungsformen sind nicht auf jene beschränkt, die einige oder alle der beschriebenen Probleme lösen, oder jene, die einen oder alle der beschriebenen Nutzeffekte und Vorteile aufweisen.
  • Verweise auf ”ein” Element beziehen sich auf ein oder mehrere dieser Elemente. Der Begriff ”umfasst” bedeutet im Sinne des vorliegenden Textes ein Einschließen der genannten Verfahrensblöcke oder Elemente, wobei aber solche Blöcke oder Elemente keine exklusive Liste umfassen, und eine Vorrichtung kann weitere Blöcke oder Elemente enthalten, und ein Verfahren kann weitere Operationen oder Elemente enthalten.
  • Die Schritte der im vorliegenden Text beschriebenen Verfahren können in jeder geeigneten Reihenfolge oder gegebenenfalls gleichzeitig ausgeführt werden. Ferner können einzelne Blöcke aus jedem der Verfahren weggelassen werden, ohne vom Wesen und Schutzbereich des im vorliegenden Text beschriebenen Gegenstandes abzuweichen. Aspekte von jedem der oben beschriebenen Beispiele können mit Aspekten von jedem der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne dass der angestrebte Effekt verloren geht.
  • Es versteht sich, dass die obige Beschreibung einer bevorzugten Ausführungsform nur beispielhaft ist und dass der Fachmann verschiedene Modifizierungen vornehmen kann. Obgleich oben verschiedene Ausführungsformen mit einem gewissen Grad an Detailliertheit oder mit Bezug auf eine oder mehrere einzelne Ausführungsformen beschrieben wurden, könnte der Fachmann zahlreiche Änderungen an den offenbarten Ausführungsformen vornehmen, ohne vom Wesen oder Geltungsbereich der Beispiele abzuweichen.

Claims (20)

  1. Digitales On-Chip-Signalverarbeitungssystem, umfassend: einen ersten Speicher (102), der mehrere Datenelemente speichert, die in einer ersten Sequenz angeordnet sind, wobei jedes Datenelement eine zugehörige Speicheradresse im ersten Speicher aufweist; einen zweiten Speicher; und eine Transfer-Engine, die mit dem ersten Speicher und dem zweiten Speicher gekoppelt ist und einen Port zu einem Dynamic Random Access Memory (DRAM) umfasst, wobei die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente direkt aus dem ersten Speicher in den DRAM in einer ersten Speichertransferstufe zu transferieren und die mehreren Datenelemente direkt aus dem DRAM in den zweiten Speicher in einer zweiten Speichertransferstufe zu transferieren, und wobei in der ersten Speichertransferstufe die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente aus dem ersten Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherleseadressen zu lesen und die mehreren Datenelemente in den DRAM zu schreiben, und wobei in der zweiten Speichertransferstufe die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente aus dem DRAM gemäß Bursts von linearen Adresssequenzen zu lesen, wobei jeder Burst von linearen Adresssequenzen eine Länge aufweist, die anhand einer DRAM-Schnittstellenburstgröße ausgewählt wird, und die mehreren Datenelemente in den zweiten Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherschreibadressen zu schreiben, so dass die mehreren Datenelemente in einer zweiten Sequenz im zweiten Speicher angeordnet sind, die sich von der ersten Sequenz unterscheidet, und wobei eine der ersten Sequenz und der zweiten Sequenz in Reihen und Spalten verschachtelte Daten umfasst.
  2. Digitales On-Chip-Signalverarbeitungssystem nach Anspruch 1, wobei der erste Speicher und der zweite Speicher beide Static Random Access Memory sind.
  3. Digitales On-Chip-Signalverarbeitungssystem nach Anspruch 1 oder 2, wobei der erste Speicher und der zweite Speicher derselbe On-Chip-Speicher sind.
  4. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 1–3, das ferner den DRAM umfasst.
  5. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 1–4, wobei die mehreren Datenelementen eine Teilmenge eines Blocks aus Datenelementen umfassen und die Transfer-Engine ferner dafür ausgelegt ist, die erste und die zweite Speichertransferstufe zu wiederholen, bis der gesamte Block aus Datenelementen in den zweiten Speicher geschrieben wurde.
  6. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 1–5, das ferner wenigstens ein Adressengenerierungselement (210) umfasst, das dafür ausgelegt ist, die zuvor festgelegte nicht-lineare Sequenz von Speicherleseadressen und die zuvor festgelegte nicht-lineare Sequenz von Speicherschreibadressen zu generieren.
  7. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 1–6, wobei die mehreren Datenelementen eine Teilmenge eines Blocks aus Datenelementen umfassen und der Block aus Datenelementen so definiert ist, dass er als ein Gitternetz angeordnet ist, das eine Anzahl von Reihen von Datenelementen und eine Anzahl von Spalten von Datenelementen umfasst.
  8. Digitales On-Chip-Signalverarbeitungssystem nach Anspruch 7, wobei das Gitternetz ferner mehrere Kacheln umfasst, wobei jede Kachel einen rechteckigen Abschnitt des Gitternetzes umfasst und ferner R Reihen und C Spalten von Datenelementen umfasst, und wobei die mehreren Datenelemente eine oder mehrere Kacheln umfassen.
  9. Digitales On-Chip-Signalverarbeitungssystem nach Anspruch 8, wobei die zuvor festgelegte nicht-lineare Sequenz von Speicherleseadressen für jede Kachel in den ersten mehreren Datenelementen umfasst: eine Sequenz von nicht-aufeinanderfolgenden Speicheradressen, die durch eine feste Anzahl von Speicheradressen getrennt sind und bei einer anfänglichen Startadresse beginnen, wobei die feste Anzahl der Anzahl von Reihen im Gitternetz minus eins entspricht, bis eine Grenze der Kachel erreicht ist, gefolgt von einer oder mehreren zusätzlichen Sequenzen von nicht-aufeinanderfolgenden Speicheradressen, wobei jede zusätzliche Sequenz bei einer versetzten anfänglichen Startadresse beginnt.
  10. Digitales On-Chip-Signalverarbeitungssystem nach Anspruch 8 oder 9, wobei die zuvor festgelegte nicht-lineare Sequenz von Speicherschreibadressen umfasst: eine Sequenz von Gruppen von C aufeinanderfolgenden Speicheradressen, die durch eine feste Anzahl von Speicheradressen im zweiten Speicher getrennt sind und bei einer anfänglichen Startadresse im zweiten Speicher beginnen, wobei die feste Anzahl C minus der Anzahl von Spalten im Gitternetz entspricht.
  11. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 8–10, wobei die mehreren Datenelementen eine Kachel des Gitternetzes umfassen.
  12. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 8–11, wobei in der zweiten Speichertransferstufe die Bursts von linearen Adresssequenzen eine Sequenz von Bursts von X aufeinanderfolgenden Speicheradressen umfassen, die durch eine feste Anzahl von Speicheradressen im zweiten Speicher getrennt sind und bei einer anfänglichen Startadresse im zweiten Speicher beginnen, wobei X gleich der Anzahl von Datenelementen in einer Kachel des Gitternetzes ist.
  13. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 8–12, wobei in der ersten Speichertransferstufe die Transfer-Engine dafür ausgelegt ist, die mehreren Datenelemente gemäß Bursts von linearen Adresssequenzen in den DRAM zu schreiben, wobei jeder Burst von linearen Adresssequenzen eine Länge aufweist, die anhand einer DRAM-Schnittstellenburstgröße ausgewählt wird.
  14. Digitales On-Chip-Signalverarbeitungssystem nach Anspruch 13, wobei in der ersten Speichertransferstufe die Bursts von linearen Adresssequenzen eine Sequenz von Bursts von X aufeinanderfolgenden Speicheradressen umfassen, die durch eine feste Anzahl von Speicheradressen im zweiten Speicher getrennt sind und bei einer anfänglichen Startadresse im zweiten Speicher beginnen, wobei X gleich der Anzahl von Datenelementen in einer Kachel des Gitternetzes ist.
  15. Digitales On-Chip-Signalverarbeitungssystem nach einem der Ansprüche 8–14, wobei eine Kachel anhand einer Größe des DRAM-Schnittstellenbursts bemessen ist.
  16. Verfahren zum Ausführen einer Verschachtelungs- oder Entschachtelungsoperation auf Datenelementen in einem digitalen Signalverarbeitungssystem, wobei das Verfahren umfasst: Lesen, aus einem ersten On-Chip-Speicher, von ersten mehreren Datenelementen, die in einer ersten Sequenz gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherleseadressen (521, 561, 804) gespeichert sind; Schreiben der ersten mehreren Datenelemente in einen Dynamic Random Access Memory (DRAM) (522, 562, 806); Lesen, aus dem DRAM, der ersten mehreren Datenelemente gemäß Bursts von linearen Adresssequenzen (523, 563, 814), wobei jeder Burst von linearen Adresssequenzen eine Länge aufweist, die anhand einer DRAM-Schnittstellenburstgröße ausgewählt wird; und Schreiben der ersten mehreren Datenelemente in einen zweiten On-Chip-Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherschreibadressen (524, 564, 816), so dass die Datenelemente in einer zweiten Sequenz im zweiten On-Chip-Speicher angeordnet werden, die sich von der ersten Sequenz unterscheidet, und wobei eine der ersten Sequenz und der zweiten Sequenz in Reihen und Spalten verschachtelte Daten umfasst.
  17. Verfahren nach Anspruch 16, wobei die ersten mehreren Datenelemente eine Teilmenge eines Blocks aus Datenelementen umfassen, wobei der Block aus Datenelementen so definiert ist, dass er als ein Gitternetz angeordnet ist, das eine Anzahl von Reihen von Datenelementen und eine Anzahl von Spalten von Datenelementen umfasst, wobei das Gitternetz ferner mehrere Kacheln umfasst, wobei jede Kachel einen rechteckigen Abschnitt des Gitternetzes umfasst und ferner R Reihen und C Spalten von Datenelementen umfasst, und wobei die ersten mehreren Datenelemente eine oder mehrere Kacheln umfassen, und wobei das Lesen, aus einem ersten On-Chip-Speicher, von ersten mehreren Datenelementen, die in einer ersten Sequenz gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherleseadressen gespeichert sind, für jede Kachel in den ersten mehreren Datenelementen umfasst: (i) Lesen eines Datenelements an einer anfängliche Startadresse im ersten On-Chip-Speicher; (ii) Überspringen einer festen Anzahl von Datenelementen, wobei die feste Anzahl der Anzahl von Reihen im Gitternetz minus eins entspricht; (iii) Lesen eines Datenelements; (iv) Wiederholen der Schritte (ii) und (iii), bis eine Grenze der Kachel erreicht ist; (v) Hinzufügen eines Versatzes zur anfänglichen Startadresse; und (vi) Wiederholen der Schritte (i)–(v), bis jedes Datenelement in der Kachel gelesen wurde.
  18. Verfahren nach Anspruch 16 oder 17, wobei die ersten mehreren Datenelemente eine Teilmenge eines Blocks aus Datenelementen umfassen, wobei der Block aus Datenelementen so definiert ist, dass er als ein Gitternetz angeordnet ist, das eine Anzahl von Reihen von Datenelementen und eine Anzahl von Spalten von Datenelementen umfasst, wobei das Gitternetz ferner mehrere Kacheln umfasst, wobei jede Kachel einen rechteckigen Abschnitt des Gitternetzes umfasst und ferner R Reihen und C Spalten von Datenelementen umfasst, und wobei die ersten mehreren Datenelemente eine oder mehrere Kacheln umfassen, und wobei das Schreiben der ersten mehreren Datenelemente in einen zweiten On-Chip-Speicher gemäß einer zuvor festgelegten nicht-linearen Sequenz von Speicherschreibadressen umfasst: (i) Schreiben von C Datenelementen aus den ersten mehreren Datenelementen an mehrere aufeinanderfolgende Adressen im zweiten On-Chip-Speicher, beginnend bei einer anfänglichen Startadresse im zweiten On-Chip-Speicher für die Kachel; (ii) Überspringen einer festen Anzahl von Adressen im zweiten On-Chip-Speicher, wobei die feste Anzahl C minus der Anzahl von Spalten im Gitternetz entspricht; (iii) Schreiben von C Datenelementen aus den ersten mehreren Datenelementen an mehrere aufeinanderfolgenden Adressen im zweiten On-Chip-Speicher; und (iv) Wiederholen der Schritte (ii) und (iii).
  19. Verfahren nach einem der Ansprüche 16–18, wobei die ersten mehreren Datenelemente eine Teilmenge eines Blocks aus Datenelementen umfasst, wobei der Block aus Datenelementen so definiert ist, dass er als ein Gitternetz angeordnet ist, das eine Anzahl von Reihen von Datenelementen und eine Anzahl von Spalten von Datenelementen umfasst, wobei das Gitternetz ferner mehrere Kacheln umfasst, wobei jede Kachel einen rechteckigen Abschnitt des Gitternetzes umfasst und ferner R Reihen und C Spalten von Datenelementen umfasst, und wobei die erste mehreren Datenelementen eine oder mehrere Kacheln umfassen, und wobei das Schreiben der ersten mehreren Datenelemente in den DRAM (562) umfasst: (i) Schreiben von X Datenelementen aus den ersten mehreren Datenelementen an mehrere aufeinanderfolgende Adressen im DRAM, beginnend bei einer anfänglichen Startadresse im DRAM für die Kachel; (ii) Überspringen einer festen Anzahl von Adressen im DRAM; (iii) Schreiben von X Datenelementen aus den ersten mehreren Datenelementen an mehrere aufeinanderfolgende Adressen im DRAM; und (iv) Wiederholen der Schritte (ii) und (iii), wobei X gleich der Anzahl von Datenelementen in einer Kachel des Gitternetzes ist.
  20. Verfahren nach einem der Ansprüche 16–19, wobei die ersten mehreren Datenelemente eine Teilmenge eines Blocks aus Datenelementen umfassen, wobei der Block aus Datenelementen so definiert ist, dass er als ein Gitternetz angeordnet ist, das eine Anzahl von Reihen von Datenelementen und eine Anzahl von Spalten von Datenelementen umfasst, wobei das Gitternetz ferner mehrere Kacheln umfasst, wobei jede Kachel einen rechteckigen Abschnitt des Gitternetzes umfasst und ferner R Reihen und C Spalten von Datenelementen umfasst, und wobei die ersten mehreren Datenelemente eine oder mehrere Kacheln umfassen, und wobei das Lesen der ersten mehreren Datenelemente aus dem DRAM (563) gemäß Bursts von linearen Adresssequenzen umfasst: (i) Lesen von X Datenelementen aus den ersten mehreren Datenelementen aus mehreren aufeinanderfolgenden Adressen im DRAM, beginnend bei einer anfänglichen Startadresse im DRAM; (ii) Überspringen einer festen Anzahl von Adressen im DRAM; (iii) Lesen von X Datenelementen aus den ersten mehreren Datenelementen aus mehreren aufeinanderfolgenden Adressen im DRAM; und (iv) Wiederholen der Schritte (ii) und (iii), wobei X gleich der Anzahl von Datenelementen in einer Kachel des Gitternetzes ist.
DE102013014168.0A 2012-08-30 2013-08-26 Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung Active DE102013014168B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1215425.8A GB2497154B (en) 2012-08-30 2012-08-30 Tile based interleaving and de-interleaving for digital signal processing
GB1215425.8 2012-08-30

Publications (2)

Publication Number Publication Date
DE102013014168A1 true DE102013014168A1 (de) 2014-03-06
DE102013014168B4 DE102013014168B4 (de) 2016-07-07

Family

ID=47074965

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013014168.0A Active DE102013014168B4 (de) 2012-08-30 2013-08-26 Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung

Country Status (6)

Country Link
US (4) US10296456B2 (de)
JP (1) JP5575310B2 (de)
CN (1) CN103678190B (de)
DE (1) DE102013014168B4 (de)
GB (1) GB2497154B (de)
TW (1) TWI604726B (de)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9256531B2 (en) 2012-06-19 2016-02-09 Samsung Electronics Co., Ltd. Memory system and SoC including linear addresss remapping logic
GB2497154B (en) * 2012-08-30 2013-10-16 Imagination Tech Ltd Tile based interleaving and de-interleaving for digital signal processing
US10186236B2 (en) * 2013-05-23 2019-01-22 Intel Corporation Universal codec
KR102354992B1 (ko) 2015-03-02 2022-01-24 삼성전자주식회사 양안 시차 영상에 대한 타일 기반 렌더링 방법 및 장치
KR102341267B1 (ko) 2015-05-04 2021-12-20 삼성전자주식회사 양안 시차 영상에 대한 렌더링 방법 및 장치
CN105681904A (zh) * 2016-01-18 2016-06-15 四川长虹电器股份有限公司 提高电视响应速度的方法
TWI617138B (zh) * 2016-01-26 2018-03-01 晨星半導體股份有限公司 時間解交錯電路與方法
CN107038122A (zh) * 2016-02-04 2017-08-11 晨星半导体股份有限公司 时间解交错电路与方法
US11979340B2 (en) 2017-02-12 2024-05-07 Mellanox Technologies, Ltd. Direct data placement
WO2018152841A1 (en) * 2017-02-27 2018-08-30 Alto Beam (China) Inc. Apparatus for performing deinterleaving of a binary data stream and dvb-t2 receiver
CN109728826B (zh) * 2017-10-27 2023-07-07 深圳市中兴微电子技术有限公司 一种数据交织与解交织方法和装置
GB202008299D0 (en) * 2020-06-02 2020-07-15 Imagination Tech Ltd Manipulation of data in a memory
US20220197653A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Processors, methods, systems, and instructions to select and store data elements from strided data element positions in a first dimension from three source two-dimensional arrays in a result two-dimensional array
US20220206854A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
US20240015217A1 (en) * 2022-07-06 2024-01-11 Mellanox Technologies, Ltd. Patterned Remote Direct Memory Access (RDMA)

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5802387A (en) * 1996-12-27 1998-09-01 Lucent Technologies Inc. Efficient data transfer in a digital signal processor
WO1999007132A1 (en) * 1997-07-31 1999-02-11 British Telecommunications Public Limited Company Generation of voice messages
JP3738134B2 (ja) * 1998-06-19 2006-01-25 三洋電機株式会社 デジタル信号処理装置
JP2000307440A (ja) * 1999-04-23 2000-11-02 Denso Corp データ列変換装置,及びデータ伝送システム
AU5679401A (en) * 2000-05-22 2001-12-03 Yozan Inc. Address converter, interleaver and de-interleaver
US6868519B2 (en) * 2001-04-23 2005-03-15 Lucent Technologies Inc. Reducing scintillation effects for optical free-space transmission
US7177988B2 (en) 2002-01-24 2007-02-13 Broadcom Corporation Method and system for synchronizing processor and DMA using ownership flags
JP3980901B2 (ja) * 2002-02-12 2007-09-26 沖電気工業株式会社 デジタル信号処理装置
JPWO2003085838A1 (ja) * 2002-04-05 2005-08-18 ソニー株式会社 インターリーブ装置及びインターリーブ方法、並びにデインターリーブ装置及びデインターリーブ方法
GB2391337B (en) * 2002-04-26 2005-06-15 Motorola Inc Instruction cache and method for reducing memory conflicts
US7600163B2 (en) * 2003-09-23 2009-10-06 Realtek Semiconductor Corp. Convolutional interleaver and deinterleaver
CN100512361C (zh) 2004-06-22 2009-07-08 中兴通讯股份有限公司 一种非对称数字用户线中卷积交织和解交织的实现装置
CN101032085B (zh) 2004-09-29 2010-06-09 松下电器产业株式会社 数据交织装置
US20060236045A1 (en) 2005-04-13 2006-10-19 Analog Devices, Inc. Apparatus for deinterleaving interleaved data using direct memory access
US20080028188A1 (en) * 2006-07-25 2008-01-31 Legend Silicon Time de-interleaver implementation using sdram in a tds-ofdm receiver
JP2008159109A (ja) 2006-12-21 2008-07-10 Matsushita Electric Ind Co Ltd データ転送装置
US8108648B2 (en) * 2007-06-25 2012-01-31 Sonics, Inc. Various methods and apparatus for address tiling
CN101237240B (zh) 2008-02-26 2011-07-20 北京海尔集成电路设计有限公司 一种利用外部存储器实现卷积交织/解交织的方法及设备
US20090313399A1 (en) 2008-06-13 2009-12-17 Texas Instruments Incorporated Direct memory access channel
US8352834B2 (en) * 2009-11-12 2013-01-08 Broadlogic Network Technologies Inc. High throughput interleaver / deinterleaver
GB2502556B (en) * 2012-05-30 2017-08-02 Imagination Tech Ltd Noise variance estimation and interference detection
GB2499270B (en) * 2012-06-07 2014-07-09 Imagination Tech Ltd Efficient demapping of constellations
GB2505446B (en) * 2012-08-30 2014-08-13 Imagination Tech Ltd Memory address generation for digital signal processing
GB2497154B (en) * 2012-08-30 2013-10-16 Imagination Tech Ltd Tile based interleaving and de-interleaving for digital signal processing
GB2513677B (en) * 2013-10-17 2015-09-02 Imagination Tech Ltd Channel impulse response
GB2531367B (en) * 2015-01-09 2016-12-28 Imagination Tech Ltd Impulsive noise rejection
TWI569587B (zh) * 2015-02-06 2017-02-01 晨星半導體股份有限公司 解迴旋交錯器
GB2536655B (en) * 2015-03-24 2017-09-20 Imagination Tech Ltd Logging events with timestamps
GB2536658B (en) * 2015-03-24 2017-03-22 Imagination Tech Ltd Controlling data flow between processors in a processing system
GB2536069B (en) * 2015-03-25 2017-08-30 Imagination Tech Ltd SIMD processing module
US10216412B2 (en) * 2017-02-14 2019-02-26 Arm Limited Data processing systems
US10387160B2 (en) * 2017-04-01 2019-08-20 Intel Corporation Shared local memory tiling mechanism
US10896043B2 (en) * 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers

Also Published As

Publication number Publication date
US20200242029A1 (en) 2020-07-30
US20140068168A1 (en) 2014-03-06
CN103678190A (zh) 2014-03-26
US20220075723A1 (en) 2022-03-10
US11755474B2 (en) 2023-09-12
US10296456B2 (en) 2019-05-21
US10657050B2 (en) 2020-05-19
CN103678190B (zh) 2016-10-26
US20190236006A1 (en) 2019-08-01
DE102013014168B4 (de) 2016-07-07
TW201419837A (zh) 2014-05-16
JP2014050103A (ja) 2014-03-17
TWI604726B (zh) 2017-11-01
JP5575310B2 (ja) 2014-08-20
US11210217B2 (en) 2021-12-28
GB2497154A (en) 2013-06-05
GB2497154B (en) 2013-10-16
GB201215425D0 (en) 2012-10-17

Similar Documents

Publication Publication Date Title
DE102013014168B4 (de) Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung
DE102013014246A1 (de) Speicheradressgenerierung für digitale Signalverarbeitung
DE102014012138B4 (de) Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte
DE3804938C2 (de) Bildverarbeitungseinrichtung
DE2364408C3 (de) Schaltungsanordnung zur Adressierung der Speicherplätze eines aus mehreren Chips bestehenden Speichers
DE102013106154A1 (de) Speichersystem und Ein-Chip-System mit linearer Adress-Remapping-Logik
DE102017113735B4 (de) Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE202017007434U1 (de) Multicast-Netzwerk und Speichertransferoptimierungen zur Hardwarebeschleunigung neuronaler Netzwerke
DE69907011T2 (de) Verallgemeinerter faltungsver- und -entschachteler
DE2324731A1 (de) Festzustandsspeicher fuer mehrdimensionalen zugriff
DE112011105670B4 (de) Verschiebbarer Speicher, der Ringregister verwendet
DE112005003265T5 (de) Registerdateibereiche für ein Verarbeitungssystem
DE202017101012U1 (de) Compilerverwalteter Speicher für Bildprozessor
DE102013208213A1 (de) System zur Verringerung von Hash-Kollisionen
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE2347387A1 (de) Permutationsschaltung
DE102016109869A1 (de) Eingebetteter Logistikanalysator und integrierte Schaltung mit demselben
DE102014119048A1 (de) Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit
DE112004000140T5 (de) Kodierte Schreibmaske
DE102014010659B4 (de) Speicherzugriff unter verwendung von adressen mit permutation
EP1599794A2 (de) Prozessor mit verschiedenartigen steuerwerken für gemeinsam genutzte ressourcen
DE102016013579A1 (de) Speicherungs-Prozessorarray für wissenschaftliche Berechnungen
DE10313645B4 (de) System mit einer Datenverarbeitungseinrichtung und einer Speichereinrichtung
DE102015114969A1 (de) Effizientes Laden und Speichern von Daten
DE102023121152A1 (de) Halbleitervorrichtung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0013280000

Ipc: G06F0007000000

R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE