DE602004012563T2 - Mehrfädiges DMA - Google Patents

Mehrfädiges DMA Download PDF

Info

Publication number
DE602004012563T2
DE602004012563T2 DE602004012563T DE602004012563T DE602004012563T2 DE 602004012563 T2 DE602004012563 T2 DE 602004012563T2 DE 602004012563 T DE602004012563 T DE 602004012563T DE 602004012563 T DE602004012563 T DE 602004012563T DE 602004012563 T2 DE602004012563 T2 DE 602004012563T2
Authority
DE
Germany
Prior art keywords
port
channel
dma
write
read
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.)
Active
Application number
DE602004012563T
Other languages
English (en)
Other versions
DE602004012563D1 (de
Inventor
Franck Seigneret
Sivayya Plano Ayinala
Nabil Khalifa
Praveen Dallas Kolli
Prabha Plano Atluri
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.)
Texas Instruments France SAS
Texas Instruments Inc
Original Assignee
Texas Instruments France SAS
Texas Instruments Inc
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 Texas Instruments France SAS, Texas Instruments Inc filed Critical Texas Instruments France SAS
Publication of DE602004012563D1 publication Critical patent/DE602004012563D1/de
Application granted granted Critical
Publication of DE602004012563T2 publication Critical patent/DE602004012563T2/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Description

  • Diese Erfindung bezieht sich im Allgemeinen auf das Gebiet der Elektronik und spezifischer auf den Mehrfach-Thread-Direktspeicherzugriff (Mehrfach-Thread-DMA).
  • Der DMA ist eine Technik, die der Hardware in einem Computer erlaubt, unabhängig vom Systemprozessor auf den Systemspeicher zuzugreifen. Weil der Prozessor nicht an der Übertragung der Daten beteiligt ist, ist der DMA normalerweise schnell. Der DMA ist z. B. in Echtzeit-Anwendungen und zum Herstellen von Datensicherungen sehr nützlich. Einige veranschaulichende Beispiele der Hardware, die DMA-Schaltungen verwenden, enthalten Sound-Karten, Festplatten-Controller und Computer-Untersysteme. Herkömmliche DMA-Schaltungen besitzen einen oder mehrere physikalische Kanäle, wobei jeder physikalische Kanal eine Punkt-zu-Punkt-Kommunikationsverbindung ist, die von einem Quell-zu einem Ziel-Port verbunden ist. Obwohl die Punkt-zu-Punkt-Verbindungen nützlich sind, machen sie das System unflexibel und können die Leistung des DMA für einige Anwendungen begrenzen. Folglich gibt es in der Technik einen Bedarf an einer DMA-Schaltung, die die Linderung einiger der in den DMA-Schaltungen des Standes der Technik gefundenen Probleme unterstützen kann.
  • EP-A-1046999 offenbart eine Übertragungssteuereinheit mit einer Hub- und Port-Architektur, die einen Warteschlangenmanager, der alle Datenübertragungsanforderungen empfängt und speichert, und eine Hub-Maschine mit N Kanälen, von denen jeder ein vorgegebenes Prioritätsniveau repräsentiert, umfasst. Die Priorität einer Übertragungsanforderung wird verwendet, um sie in den Warteschlangenmanager für einen Kanal innerhalb eines TCHP-Hubs, der die Warteschlangen dieser Priorität verarbeitet, in eine Warteschlange einzureihen. Wenn ein Kanal in der Hub-Maschine frei wird, fordert die Hub-Maschine einen weiteren Warteschlangeneintrag an, wobei ein Warteschlangenmanager durch das Senden einer Übertragungsanforderung mit dem richtigen Prioritätsniveau für den freien Kanal in die Hub-Maschine antwortet. Folglich kann der Controller N parallele Übertragungen an den Ausgangs-Ports der Vorrichtung ausführen, wobei die Anzahl der ausstehenden Anforderungen zu irgendeiner Zeit nur durch die Größe des Warteschlangenmanager-RAM begrenzt ist.
  • Die Merkmale der vorliegenden Erfindung, die für neuartig gehalten werden, sind in den beigefügten Ansprüchen ausführlich dargelegt. Die Erfindung kann am besten unter Bezugnahme auf die folgende Beschreibung in Verbindung mit der beigefügten Zeichnung, worin in den mehreren Figuren gleiche Bezugszeichen gleiche Elemente identifizieren, verstanden werden, wobei in der Zeichnung:
  • 1 einen Blockschaltplan auf Systemebene gemäß einer Ausführungsform der Erfindung zeigt;
  • 2 einen Blockschaltplan höchster Ebene eines DMA gemäß einer Ausführungsform der Erfindung zeigt;
  • 3 einen ausführlicheren Blockschaltplan des in 2 gezeigten DMA zeigt;
  • 4 eine graphische Darstellung zeigt, die vier am Lese-Port des DMA empfangene Threads gemäß einer Ausführungsform der Erfindung hervorhebt;
  • 5 eine graphische Darstellung zeigt, die zwei Threads im Schreib-Port des DMA gemäß einer Ausführungsform der Erfindung hervorhebt;
  • 6 einen Blockschaltplan einer DMA-Lese-Port-Ablaufsteuerung gemäß einer Ausführungsform der Erfindung zeigt; und
  • 7 einen Blockschaltplan einer DMA-Schreib-Port-Ablaufsteuerung gemäß einer Ausführungsform der Erfindung zeigt.
  • In 1 ist ein Blockschaltplan auf Systemebene eines elektronischen Systems 100 gemäß einer Ausführungsform der Erfindung gezeigt. Das System 100 enthält ein Hauptprozessoreinheit-Untersystem (MPU-Untersystem) 106, das an einen Bus mit offenem Kernprotokoll (Open Core Protocol) (OCP-Bus) oder eine Systemzwischenverbindung 120 gekoppelt ist. Das MPU-Untersystem 106 kann irgendeinen von einer Anzahl von Mikroprozessoren oder Mikrocontrollern oder eine ähnliche Steuerschaltungsanordnung enthalten. Ein Untersystem für die digitale Signalverarbeitung (DSP-Untersystem) 102, ein Kamera-Untersystem 110, ein interner Speicher 114, ein externer Speicher 116 und eine Peripheriezwischenverbindung 118 sind außerdem an den OCP-Bus 120 gekoppelt. Die Peripheriezwischenverbindung 118 schafft eine Zwischenverbindung zu irgend einer von einer Anzahl von Peripherievorrichtungen, wie z. B. Zeitgeber, universeller Eingabe/Ausgabe (GPIO) usw. Das DSP-Untersystem 102 enthält einen DSP-DMA (dDMA) 104, das Kamera-Untersystem 110 enthält einen Kamera-DMA (cDMA) 112 und einen System-DMA (sDMA) 108, alle gemäß Ausführungsformen der Erfindung.
  • Die in dem dDMA 104, dem cDMA 112 und dem sDMA 108 verwendeten DMA-Schaltungen umfassen Mehrpunkt-zu-Mehrpunkt-DMA-Schaltungen, die als Mehrfach-Thread-Initiatioren arbeiten, wobei jeder vier Threads (oder m Threads) an seinem Lese-Port und zwei Threads (oder n Threads) an seinem Schreib-Port besitzt. Die Parameter m und n sind vorzugsweise durch das für jeden Initiator-Port von der OCP-Zwischenverbindung zugewiesene Thread-Budget fixiert. In dieser besonderen Ausführungsform der Erfindung gilt n = 2 und m = 4, obwohl diese Zahlen basierend auf den besonderen Konstruktionsanforderungen eines gegebenen Systems selbstverständlich variieren können. Die Anzahl der Kanäle und die Anzahl der Hardware-Anforderungen kann zum Zeitpunkt der Konfiguration durch den Anwender geändert werden. In einer Ausführungsform ist die Anzahl der Kanäle ≤ 32 und die Anzahl der Anforderungen ≤ 127.
  • In 2 ist ein Blockschaltplan einer DMA-Schaltung 200, wie sie z. B. in der dDMA 104, der sDMA 108 und der cDMA 112, die in 1 gezeigt sind, verwendet wird, gemäß einer Ausführungsform der Erfindung gezeigt. Der DMA 200 enthält einen Lese-Port 202, einen Schreib-Port 204, einen Konfigurations-Port 208 und einen vereinigten Daten-First-in/First-Out (Daten-FIFO 210). Der FIFO 210 in 2 ist in einem logischen Format dargestellt, wobei er als zwischen verschiedenen Kanälen (Ch0–Chn) 212 gemeinsam genutzt gezeigt ist. Der DMA 200 enthält zwei entkoppelte Lese- und Schreib-Kontexte und -Ablaufsteuerungen (die im Folgenden erörtert werden). Der Lese-Port 202 und der Schreib-Port 204 können bis zu m Threads bzw. n Threads unterstützen, wobei jeder Thread entweder einen Einzelzugriff oder einen Burst-Zugriff ausführen kann. Ein Thread ist einem Dienst zugeordnet, wobei ein Dienst eine Einzel- oder Burst-Transaktion umfassen kann. Falls z. B. die Ablaufsteuerung für nur einen Kanal ausgeführt wird, ist dem Kanal nur ein Thread zugeordnet, wobei bis zu vier Bursts ausstehend sein können. Jeder Burst kann z. B. 4 × 32 Bits umfassen.
  • Einige der Merkmale der DMA-Schaltung 200 enthalten:
    • 1). Allgemeine Merkmale: flexible verteilte DMA-Struktur, wobei die Optionen zum Zeitpunkt der Konstruktion fixiert werden, wie z. B. die Anzahl der Kanäle und die Port-Breite, die natürliche OCP-Schnittstelle und die Mehrfach-Threading-Fähigkeit sowohl bei der Quelle als auch beim Ziel.
    • 2). Master-Port-Merkmale: ein Adressengenerator, der mit den logischen Kanalmerkmalen kompatibel ist, eine 32-Bit-Schnittstelle mit einer 64-Bit-Option, die zum Zeitpunkt der Konstruktion fixiert wird, (die mehreren Schnittstellenbreiten können geändert werden, um kleinere oder größere Breiten einzuschließen), die OCP-Burst-Unterstützung, ein dedizierter Lese-Port/ein dedizierter Schreib-Port, die Pack-/Entpackunterstützung, die Byte-Adressierungs-Unterstützung und ein programmierbares Schreibsemantikmodell einschließlich Posted- und Non-Posted-Unterstützung.
    • 3). Logische Kanalmerkmale: die Software-Kanal-Freigabe, die Hardware-Kanal-Auslösung, die Flanken-/Pegel-Hardware-DMA-Anforderungsempfindlichkeit, die programmierbare Anforderungs-/Kanalpaarabbildung, Quelle-/Zieladressengeneratoren (konstante Adressierung, Nachinkrement, einzelne Indexierung und doppelte Indexierung), unterschiedlicher Element-/Rahmenindex für Quelle und Ziel, vereinheitlichter Speicherpuffer, der zwischen allen Kanälen gemeinsam genutzt wird, vereinheitlichter FIFO-Speicher, zum Zeitpunkt der Konstruktion spezifizierte Größe, verknüpfte LCH-Unterstützung, spekulatives Vorabholen für synchronisierte Kanäle, optionale Software-Steuerbarkeit und die Fähigkeit, den Fortschritt der DMA-Übertragung unter Verwendung von Element- und Rahmenzählern zu überwachen.
    • 4). Arbitrierung: Alle aktiven Kanäle können die Ports basierend auf der Arbitrierung und der Priorität gemeinsam nutzen, wobei sie außerdem sowohl die LCH-Abfragegerechtigkeit (first-come-first-served) als auch die Arbitrierung mit fester Priorität unterstützen können.
    • 5). Sicherheit: die durch eine sichere Transaktion gesetzten Sicherheitsattribute pro Kanal und der in der Master-Schnittstelle gesetzte sichere Kennzeichner, wenn die Ablaufsteuerung eines sicheren Kanals ausgeführt wird.
    • 6). DMA-Anforderungssynchronisation: unterstützt die Element-, Paket-, Rahmen- und Blocksynchronisation.
    • 7). Leistungsmanagement: Bereitschaftsbetriebsart und Leerlaufbetriebsart, Fähigkeit zur automatischen Torsteuerung, automatischer Leerlauf und softwaregesteuertes Ausschalten.
    • 8). Unterbrechungen: Einige der verfügbaren Unterbrechungen enthalten den Endrahmen, den Endblock, das Endpaket, den Halbrahmen, den letzten Rahmen, den Transaktions-Zugriffsfehler, den Fehler bei sicherem Zugriff und den Überwacher-Zugriffsfehler.
    • 9). Fehlersuche: Durch den Konfigurations-Port kann ein Anwender den aktuellen Kanalzustand für alle Kanäle, den FIFO-Zustand, den Kanalübertragungszustand, die Datenintegrität usw. überprüfen.
    • 10). FIFO-Entleerung: Wenn ein Kanal gesperrt wird und es im entsprechenden FIFO Daten gibt, werden die Daten auf den Schreib-Port entleert und zu einem programmierten Ziel übertragen.
    • 11). Pufferungssperrung: In dem Fall von quellensynchronisierten Übertragungen kann die Pufferung freigegeben oder gesperrt werden, indem ein Pufferungs-Sperrbit (DMA4_CCR.buffering_disable) jeweils auf 0 oder 1 gesetzt wird. Wenn die Pufferung freigegeben ist, können die bei einer Hardware-Anforderung von der Quellseite geholten Daten nicht vollständig zur Zielseite geräumt/übertragen werden, bis eine nachfolgende Hardware-Anforderung weitere Daten von der Quellseite holt (um zum Ziel packen/bursten zu können). Wenn jedoch die Pufferung gesperrt ist, dann wird kein Packen oder Bursting über die Paketgrenze ausgeführt, wobei die verbleibenden Daten im Paket unter Verwendung kleinerer Transaktionen übertragen werden. Für beide Fälle sind am Ende des Blocks nachfolgende Hardware-Anforderungen, um die Daten auf der Zielseite zu räumen, nicht erforderlich. Wenn die Pufferung gesperrt ist oder nicht, sind sowohl die Quelle als auch das Ziel während der Übertragung synchronisiert (z. B. element-/rahmen-/paket-/blocksynchronisiert). Die letzte Schreibtransaktion in dem Rahmen oder in dem Block ist ein Non-Posted-Schreibvorgang (WRNP), selbst wenn die Schreibbetriebsart auf 2 (WLNP) gesetzt ist. Es sollte jedoch nur im Fall einer Zielsynchronisation eine WRNP am Ende des Pakets geben (selbst wenn die Schreibbetriebsart = 2 ist). Ob die Pufferung gesperrt ist oder nicht, die Paketunterbrechung wird im quellensynchronisierten Fall nicht erzeugt.
    • 12). Andere Merkmale: Farbschlüsselunterstützung (Color-Key-Schlüssel) pro Kanal, optionale feste Farbfüllung pro Kanal und Endian-Umsetzung pro Kanal.
  • Die im Folgenden gezeigte Tabelle 1 hebt einige generische Parameter hervor, die durch die DMA-Schaltung 200 gemäß einer Ausführungsform der Erfindung unterstützt werden. Tabelle 1 Liste der generischen Parameter
    generischer Parameter Typ Wertebereich Beschreibung
    DMA4_FD ganzzahlig [4:8] Dieser liefert die DMA-FIFO-Tiefe. DMA-FIFO-Tiefe = 2FD Einträge. Das unterstützte Maximum beträgt 256 (FD = 8). Das unterstützte Minimum beträgt 32 (FD = 5) für 32-Bit-OCP_WIDTH und 16 (FD = 4) für 64-Bit-OCP_WIDTH. Jeder Eintrag kann in Abhängigkeit von OCP_WIDHT 32 Bits oder 64 Bits breit sein.
    DMA_NUM_HWR ganzzahlig [1:127] Dieser Parameter steht mit der Anzahl der Kanäle in Beziehung und muss zum Zeitpunkt der Konstruktion fixiert werden. Das unterstützte Maximum beträgt 127 Anforderungen.
    DMA4_NUM_CH ganzzahlig [1:32] Fixiert die Anzahl der Kanäle, die für den DMA zu implementieren sind, die von der DMA-Verwendung abhängt. Das unterstützte Maximum beträgt 32 Kanäle.
    DMA4_NUM_CHBITS ganzzahlig [1:5] Dieser sollte immer log(DMA4_NUM_CH) zur Basis 2 sein.
    DMA4_OCP_WIDTH ganzzahlig {32,64} 32 Bits oder 64 Bits. Dieser bestimmt außerdem die Daten-FIFO-Breite.
    DMA4_OCP_BE_WIDTH ganzzahlig {4,8} 4 für 32-Bit-OCP und 8 für 64-Bit-OCP.
    DMA4_OCP_BE_WIDTH ganzzahlig {4,8} 4 für 32-Bit-OCP, 8 für 64-Bit-OCP.
    DMA4_GRAPHICS ganzzahlig {0,1} 0 für keine GRAPHICS-Logik, 1, um die GRAPHICS-Logik einzubeziehen.
    DMA4_PSA_REQUIRED ganzzahlig {0,1} 0 für keine PSA, 1, um die PSA einzubeziehen.
  • Es ist nicht beabsichtigt, dass in den obenerwähnten Merkmalen alles inbegriffen ist, sondern sie sind nur einige der Merkmale, die durch die DMA-Schaltung 200 (die außerdem als DMA4 bezeichnet wird) der vorliegenden Erfindung bereitgestellt werden können. Die flexible Art der DMA-Schaltung 200 erlaubt außerdem ihre Verwendung in mehreren Bereichen der Konstruktion, wie z. B. in einem DSP-Untersystem, als eine System-DMA und einem Kamera-Untersystem, wie in 1 gezeigt ist.
  • In 3 ist ein ausführlicherer Blockschaltplan der DMA-Schaltung 200 gezeigt. Die DMA-Schaltung 200 enthält einen Lese-Port (DMA4-Lese-Port) 202 und einen Schreib-Port (DMA4-Schreib-Port) 204. An den DMA4-Lese-Port 202 sind eine Kanalanforderungs-Ablaufsteuerung (DMA4-Lese-Port-Ablaufsteuerung) 302, ein OCP-Anforderungsgenerator 306 und ein Lese-Port-Antwortmanager 308 gekoppelt. Der Lese-Port 202 ist entweder eine 32-Bit- oder eine 64-Bit-Nurlese-OCP-Master-Schnittstelle. Die Wahl zwischen 32 oder 64 wird zum Zeitpunkt der Konstruktion getroffen.
  • Die DMA4-Lese-Port-Ablaufsteuerung 302 ist für das Auswählen des nächsten zu bedienenden Kanals und für das Zuweisen eines Thread-Identifizierers, der an der OCP-Schnittstelle zu verwenden ist, (MThreadID-Feld) verantwortlich. Einem Kanal wird der Zugriff auf den Lese-Port 202 durch die Arbitrierungs-Logik für einen OCP-Dienst gewährt. Dies kann entweder eine OCP-Einzeltransaktionen oder eine OCP-Burst-Transaktion (4 × 32-Bit/2 × 64-Bit, 8 × 32-Bit/4 × 64-Bit, 16 × 32-Bit/8 × 64-Bit) in Übereinstimmung mit der Kanalprogrammierung für die DMA-Quelle sein. Die Kanalprogrammierung kann basierend auf den Systemkonstruktionsanforderungen modifiziert werden.
  • In einer Ausführungsform kann ein Maximum von 4 Thread-IDs auf der Leseseite von 0 bis 3 (Th0, Th1, Th2 und Th3) zugewiesen werden. Folglich kann die DMA-Schaltung 200 bis zu 4 ausstehende Lese-Transaktionen besitzen, die zu bis zu 4 Kanälen in der Systemzwischenverbindung gehören. Damit ein Arbitrierungs-Zyklus auftritt, müssen zwei Bedingungen erfüllt sein: (a). es gibt wenigstens einen anfordernden Kanal und (b) es gibt wenigstens eine verfügbare freie Thread-ID. Bei einem Arbitrierungs-Zyklus gibt die Ablaufsteuerung 302 dem Kanal mit der höchsten Priorität, der eine aktive Anforderung besitzt, statt, wobei sie die Thread-ID zuweist und diesen Thread als tätig etikettiert. Der Kanallesekontext wird vom gemeinsam genutzten Kanalkontextspeicher 316 wiederhergestellt.
  • Die implementierte Arbitrierungs-Politik ist "First-Come-First-Served" (FCFS). An der Spitze dieser Arbitrierung kann den Kanälen ein Attribut hoher Priorität gegeben werden. Es gibt 2 Warteschlangen, eine Warteschlange mit hoher Priorität und eine Warteschlange mit niedriger Priorität (die in 3 nicht gezeigt sind, siehe die 6 und 7 für eine ausführlichere Ansicht der Ablaufsteuerungen 302 und 304). Jeder Kanal, der für die Ablaufsteuerung bereit ist, wird in Abhängigkeit von einem Prioritätsbit entweder mit regulärer (niedriger Priorität) oder mit hoher Priorität an das Ende der Warteschlange gesetzt. Nicht synchronisierte Kanäle werden in die Warteschlange gesetzt, wenn die Software das Freigabebit setzt. Synchronisierte Kanäle werden in die Warteschlange gesetzt, wenn die Hardware-DMA-Anforderung für sie hereinkommt. Es kann mehrere Kanäle geben, die bereit sind und im selben Zyklus in dieselbe Warteschlange gesetzt werden müssen, einen vom Konfigurations-Port 208 und mehrere DMA-Anforderungen. In diesem besonderen Fall wird in einer Ausführungsform der Erfindung nur ein Kanal entsprechend der folgenden Regel in die Warteschlange (einer in jede Warteschlange) gesetzt: CHi besitzt eine höhere Priorität als CHj, falls j > i gilt. Die anderen werden in nachfolgenden Zyklen verarbeitet. Diese Regel kann selbstverständlich in Abhängigkeit von den Systemkonstruktionsanforderungen modifiziert werden. Der Arbitrierung zwischen den zwei Warteschlangen kann in einem veranschaulichenden Beispiel entsprechend einem Software-Parameter ausgeführt werden, der die Anzahl festlegt, wie oft dem Kanal mit hoher Priorität der Port gewährt wird, bevor der Kanal mit niedriger Priorität den Port gewinnt usw.
  • In jedem Zyklus kann für die Spitze jeder Warteschlange die Ablaufsteuerung ausgeführt werden. Ein software-konfigurierbarer 8-Bit-Prioritäts-Zähler wird verwendet, um der Prioritätswarteschlange die Gewichtung zu geben. Für alle N (1 bis 256) Ablaufsteuerungen von der Prioritätswarteschlange wird für eine die Ablaufsteuerung von der regulären Warteschlange ausgeführt. Ein Kanal, dessen Ablaufsteuerung ausgeführt wird, geht zum Ende der Warteschlange, nachdem er seinen Dienst am Port abgeschlossen hat. Zu einem gegebenen Zeitpunkt kann ein Kanal nicht mehr als einer Thread-ID zugewiesen sein.
  • Es wird angegeben, dass, falls mehr als ein Kanal aktiv ist, jedem Kanal nur für den aktuellen Dienst eine ThreadID gegeben wird und nicht für die ganze Kanalübertragung. Die aktuellen Kanalnummer-/ThreadID-Zuordnungen werden gespeichert und dem Leseantwortmanager 308 verfügbar gemacht. Wenn jedoch nur ein Kanal aktiv ist, dann ist während der Kanalübertragung eine Thread-ID zugewiesen, wobei der antiparallele Dienst (back to back service) (Burst oder Einzel) mit einem Maximum von 4 aufeinanderfolgenden Bursts (z. B. 4 × 32 Bit) ohne erneute Ablaufsteuerung des Kanals am Ende jeder Burst-Übertragung ausgeführt werden kann. Wenn am Anfang der Übertragung eine Nicht-Burst-Ausrichtung auftritt, dann wird für den Kanal für jeden kleineren Zugriff eine erneute Ablaufsteuerung ausgeführt, bis er auf den Burst ausgerichtet ist. Falls außerdem das Ende der Übertragung nicht den Burst ausgerichtet ist, wird für den Kanal für jeden der verbleibenden kleineren Zugriffe eine erneute Ablaufsteuerung ausgeführt.
  • Vom wiederhergestellten Kanalkontext kann die Lese-Port-Logik die nächste OCP-Adresse erzeugen, die an die OCP-Schnittstelle gesendet wird. Durch den OCP-Anforderungsgenerator 306 wird eine OCP-READ-Anforderung erzeugt und dann an die OCP-Schnittstelle ausgegeben. Die Anforderung kann durch Seitenbandsignale qualifiziert werden, einige der Seitenbandsignale enthalten:
    das MThreadID-Feld, basierend auf der Ablaufsteuerungs-Zuweisung;
    das MReqSecure-Attribut, wie es aus dem Kanalkontext gelesen wird;
    das MReqSupervisor-Attribut, wie es aus dem Kanalkontext gelesen wird;
    MReqEndianness, wie es aus dem Kanalkontext gelesen wird;
    MReqDataType, wie es aus dem Kanalkontext gelesen wird (die Elementgröße); der MCmd/SCmdAccept-Quittungsaustausch wird normal ausgeführt, wie es durch das OCP-Protokoll erforderlich ist.
  • Wenn der Leseantwortmanager 308 eine OCP-Leseantwort, z. B. ein SThreadID-Feld empfängt, kann er den Kanal identifizieren, der die Daten besitzt. Diese Daten werden an die gemeinsam genutzte FIFO-Steuerlogik gesendet und an der geeigneten Stelle in den FIFO 314 geschrieben. Sobald die Daten in den FIFO 314 geschrieben worden sind, wird, falls dies die letzten Daten des Kanaldienstes (d. h. eines Einzeldatendienstes oder die letzten Daten eines Burst-Dienstes) sind, die ThreadID abermals frei, wobei ihr Zustand aktualisiert wird. Die letzten Daten einer Antwort werden durch einen "SRespLast-"Kennzeichner identifiziert. Der Kontext für den soeben bedienten Kanal wird unter Verwendung der Schaltungsanordnung 322, die vier Register enthält, eines für jeden Thread, und der notwendigen Auswahl- und Pfadaufbau-Schaltungsanordnung zurück in den gemeinsam genutzten Kanalkontextspeicher gesichert. Die Thread-Antworten können selbst innerhalb der Bursts am Lese-Port 202 verschachtelt sein.
  • Die Lese-Port-Ablaufsteuerung 302 und die Schreib-Port-Ablaufsteuerung 304 arbitrieren hauptsächlich zwischen den Kanälen an einer Thread-Grenze. Ein Thread ist einem DMA-Dienst zugeordnet, wobei ein Dienst eine Einzel- oder eine Burst-Transaktion sein kann, wie vorher erwähnt worden ist.
  • In einer Ausführungsform besteht jeder Kanalkontext aus einem Lesekontext und einem Schreibkontext, wobei die Ablaufsteuerungen der Lese- und Schreibkontexte separat ausgeführt werden. Nachdem am DMA-Anforderungs-Port 206 eine DMA-Anforderung empfangen worden ist, wird die Ablaufsteuerung des zugeordneten Kanals "i" ausgeführt. Der Kanalkontext wird geladen, wobei dann jedesmal, wenn es eine OCP-Leseanforderung gibt, ein Thread m (0 bis 3) während der ganzen Lesetransaktion zugewiesen ist. Während es einen freien Thread gibt, kann entsprechend dem verwendeten Arbitrierungs-Schema die Ablaufsteuerung anderer Kanäle ausgeführt werden. Ein Thread wird frei, sobald die Lesetransaktion des entsprechenden Kanals (z. B. eine Einzeltransaktion, eine Burst-Transaktion von 4 × 32 oder 8 × 32) abgeschlossen ist. Sobald ein Thread frei wird, kann er einem weiteren Kanal zugewiesen werden.
  • Der Konfigurations-Port 208 arbeitet als ein Slave-Port und ist nicht gepuffert. Er erlaubt einem (nicht gezeigten) Host, auf die durch die DMA-Schaltung 200 gebildete Entität zuzugreifen. Der Konfigurations-Port 208 wird für die Konfiguration und den Zugriff auf die Zustandsregister verwendet, die in der DMA-Schaltung 200 gefunden werden. In einer Ausführungsform ist der Konfigurations-Port 208 ein synchroner 32-Bit-Datenbus, der 8-, 16- und 32-bit-ausgerichtete Daten und Nicht-Burst-Zugriffe unterstützt. Der Konfigurations-Port 208 kann außerdem auf Speicherstellen, den logischen Kanalkontext und die Hardware-Anforderungs-Speicherstellen zugreifen. Alle Schreibzugriffe auf irgendein internes Register werden als Non-Posted-Schreibtransaktionen (WRNP) abgewickelt, selbst wenn anstelle des WRNP der verwendete OCP-Befehl WR ist. Eine Antwort wird auf der OCP-Schnittstelle zurückgeschickt, nachdem der Schreibvorgang effektiv abgeschlossen ist. Der Konfigurations-Port 208 kann auf alle globalen und Kanalregister in einer 8-Bit-, 16-Bit- oder 32-Bit-Form zugreifen. An den DMA4-Schreib-Port 204 sind eine DMA4-Schreib-Port-Ablaufsteuerung 304, ein OCP-Anforderungsgenerator 310 und ein Antwortmanager 312 gekoppelt. Der Schreib-Port 204 wird von den Anforderungen, die vom Daten-FIFO 314 kommen, angesteuert. Es gibt keine andere Korrelation zwischen den Kanalkontexten, die auf der Lese-Port-Seite offen sind, und den Kanalkontexten, die auf der Schreib-Port-Seite offen sind. Das meiste der Zeit sind die offenen Lesekanalkontexte und die gleichzeitig offenen Schreibkanalkontexte verschieden. Der OCP-Schreib-Port ist entweder eine 32-Bit- oder eine 64-Bit-Nurschreib-OCP-Master-Schnittstelle, wobei die Wahl zwischen 32 Bits oder 64 Bits zum Zeitpunkt der Konstruktion getroffen wird, obwohl andere Konstruktionen abweichende Bitgrößen besitzen können.
  • Das Gesamtbudget des FIFO 314 wird zum Zeitpunkt der Konstruktion durch die generischen Parameter FD und "OCP_width" fixiert, so dass FIFO_depth = 2FD × OCP_width gilt. Es gibt keine Zuweisung pro Kanal des DMA-Pufferungsbudgets, wobei ein vollständig dynamisches Pufferungsmodell implementiert ist. Das Pufferungsbudget für einen Kanal ist vorzugsweise unter Verwendung eines programmierbaren Schwellenwertes begrenzt, der in einem Register "DMA4_GCR" spezifiziert ist.
  • Die Schreib-Port-Ablaufsteuerung 304 ist für Auswählen des nächsten zu bedienenden Kanals und für das Zuweisen eines Tread-Identifizierers, der an der OCP-Schnittstelle zu verwenden ist, (MThreadID-Feld) verantwortlich. Einem Kanal wird der Zugriff auf den Schreib-Port 204 durch die Arbitrierungs-Logik für einen OCP-Dienst gewährt, wobei dies entweder eine OCP-Einzeltransaktion oder eine OCP-Burst-Transaktion (4 × 32, 8 × 32, 16 × 32) in Übereinstimmung mit der Kanalprogrammierung für das DMA-Ziel sein kann.
  • Es kann ein Maximum von 2 Thread-IDs zugewiesen sein, 0 oder 1 (Th0 und Th1 auf der Schreibseite). Folglich kann in dieser Ausführungsform unter Verwendung der Schaltungsanordnung 320 die DMA-Schaltung 200 bis zu 2 ausstehende Schreibtransaktionen besitzen, die zu bis zu 2 Kanälen in der Systemzwischenverbindung gehören.
  • Damit ein Arbitrierungs-Zyklus auftritt, müssen zwei Bedingungen erfüllt sein: (a). es gibt wenigstens einen anfordernden Kanal; und (b) es gibt wenigstens eine verfügbare freie Thread-ID.
  • Bei einem Arbitrierungs-Zyklus gibt die Schreib-Port-Ablaufsteuerung 304 dem Kanal mit der höchsten Priorität, der eine aktive Anforderung besitzt, statt, wobei sie die Thread-ID zuweist und diesen Thread als tätig etikettiert. Der Kanalschreibkontext wird vom gemeinsam genutzten Kanalkontextspeicher 316 wiederhergestellt. Die implementierte Arbitrierungs-Politik ist "First-Come-First-Served" (FCFS). An der Spitze dieser Arbitrierung kann einigen Kanälen ein Attribut hoher Priorität gegeben werden. Es gibt in dieser Ausführungsform zwei Warteschlangen, eine ist eine Warteschlange mit hoher Priorität, während die andere eine Warteschlange mit niedriger Priorität ist. Jeder Kanal, der für die Ablaufsteuerung bereit ist, wird in Abhängigkeit vom Prioritätsbit entweder mit regulärer (niedriger Priorität) oder mit hoher Priorität an das Ende der Warteschlange gesetzt. Nicht synchronisierte Kanäle werden in die Warteschlange gesetzt, wenn die Software das Freigabebit setzt. Synchronisierte Kanäle werden in die Warteschlange gesetzt, wenn die Hardware-DMA-Anforderung für sie hereinkommt.
  • Es kann mehrere Kanäle geben, die bereit sind und im selben Zyklus in dieselbe Warteschlange gesetzt werden müssen, einen vom Konfigurations-Port 208 und mehrere DMA-Anforderungen. In diesem Fall wird nur ein Kanal entsprechend der folgenden Regel in die Warteschlange (einer in jeder Warteschlange) gesetzt: CHi besitzt eine höhere Priorität als CHj, falls j > i gilt. Die anderen werden in nachfolgenden Zyklen verarbeitet.
  • Wenn nur ein Kanal aktiv ist, dann ist während der Kanalübertragung eine Thread-ID zugewiesen, wobei der antiparallele Dienst (back to back service) (Burst oder Einzel) mit einem Maximum von 4 aufeinanderfolgenden Bursts (z. B. kann jeder Burst 4 × 32 Bit umfassen) ohne erneute Ablaufsteuerung des Kanals am Ende jeder Burst-Übertragung ausgeführt werden kann. Wenn am Anfang der Übertragung eine Nicht-Burst-Ausrichtung vorhanden ist, dann wird für den Kanal für jeden kleineren Zugriff eine erneute Ablaufsteuerung ausgeführt, bis er auf den Burst ausgerichtet ist. Falls außerdem das Ende der Übertragung nicht auf den Burst ausgerichtet ist, wird für den Kanal für jeden der verbleibenden kleineren Zugriffe eine erneute Ablaufsteuerung ausgeführt.
  • In jedem Zyklus kann für die Spitze jeder Warteschlange die Ablaufsteuerung ausgeführt werden. Ein software-konfigurierbarer 8-Bit-Prioritäts-Zähler wird verwendet, um der Prioritätswarteschlange die Gewichtung zugeben. Für alle N (1 bis 256) Ablaufsteuerungen von der Prioritätswarteschlange wird für eine die Ablaufsteuerung von der regulären Warteschlange ausgeführt. Ein Kanal, dessen Ablaufsteuerung ausgeführt wird, geht zum Ende der Warteschlange, nachdem er seinen Dienst am Port abgeschlossen hat. Es wird angegeben, dass, falls mehr als ein Kanal aktiv ist, jedem Kanal nur für den aktuellen Dienst eine ThreadID gegeben wird und nicht für die ganze Kanalübertragung. Die aktuellen Kanalnummer-/ThreadID-Zuordnungen werden gespeichert und dem Schreib-Port-Antwortmanager 312 verfügbar gemacht.
  • Vom wiederhergestellten Kanalkontext kann die Schreib-Port-Logik die nächste OCP-Adresse erzeugen, die an die OCP-Schnittstelle gesendet wird. Durch den OCP-Anforderungsgenerator 310 wird dann eine OCP-WRITE-Anforderung an die OCP-Schnittstelle ausgegeben, die durch Seitenbandsignale qualifiziert werden kann.
  • Der an der OCP-Schnittstelle verwendete Schreibbefehl kann entweder ein Posted-Schreibvorgang (OCP-WR-Befehl) oder ein Non-Posted-Schreibvorgang (OCP-WRNP-Befehl) sein: Die OCP-Schreibschnittstelle wählt den zu verwendenden Schreibbefehl basierend auf den Kanalattributen, wie sie durch den Anwender programmiert worden sind, aus. Es gibt 3 Möglichkeiten:
    • (1). alle Kanaltransaktionen werden auf den WRNP abgebildet (non-posted);
    • (2). alle Kanaltransaktionen werden auf den WR-Befehl abgebildet (posted); oder
    • (3). alle Kanaltransaktionen werden auf den WR-Befehl abgebildet, mit Ausnahme der Letzten, die auf einen WRNP-Befehl abgebildet wird, so dass die Übertragungsende-Unterbrechung verzögert werden kann, bis der Schreibvorgang das Ziel erreicht hat.
  • Alle DMA4-Schreibvorgänge erwarten eine Antwort an der OCP-Schnittstelle. Normalerweise wird, wenn eine Posted-Schreibanforderung ausgegeben wird, die Antwort durch die Systemzwischenverbindung sehr schnell bereitgestellt, wohingegen eine Non-Posted-Schreibtransaktion ihre Antwort später erhält, nachdem der effektive Schreibvorgang am Bestimmungsziel abgeschlossen worden ist. Der Quittungsaustausch wird normal ausgeführt, wie er durch das OCP-Protokoll erforderlich ist.
  • Wenn der Schreib-Port-Antwortmanager 312 eine OCP-Schreibantwort vom SThreadID-Feld empfängt, kann er den Kanal identifizieren, der die Antwort besitzt. Sobald die Daten aus dem FIFO 314 gelesen worden sind, wird, falls dies die letzten Daten des Kanaldienstes (d. h. des Einzeldatendienstes oder die letzten Daten eines Burst-Dienstes) sind, die threadID abermals frei, wobei ihr Zustand aktualisiert wird. Der Kontext für den soeben bedienten Kanal wird über die Schaltungsanordnung 320 zurück in den gemeinsam genutzten Kanalkontextspeicher 316 gesichert. Es sollte angegeben werden, dass die Thread-Antworten selbst innerhalb der Bursts am Schreib-Port 204 verschachtelt sein können.
  • Der Konfigurations-Port 208 kann auf alle globalen 318 und Kanalregister mit 8 Bits, 16 Bits oder 32 Bits zugreifen. Vier der Register benötigen ein Schattenregister, um richtig gelesen zu werden:
    DMA4_CSAC: der Kanalquelladressenzähler,
    DMA4_CDAC: der Kanalzieladressenzähler,
    DMA4_CCEN: die aktuell übertragene Elementnummer des Kanals,
    DMA4_CCFN: die aktuell übertragene Rahmennummer des Kanals.
  • Um die Implementierung leichter zu machen, wird durch die obigen vier Register nur ein Schattenregister verwendet.
  • Das Packen wird auf der Lese-Port-Seite 202 ausgeführt, wenn der Kanalelementtyp schmaler als der Lese-Port 202 ist und falls dieses Merkmal durch den DMA-Programmierer freigegeben worden ist. Das Packmerkmal wird freigegeben, falls die DMA-Quelle als ein nicht gepacktes Ziel qualifiziert ist und das DMA-Ziel als ein gepacktes Ziel qualifiziert ist. Das Packen ist nicht mit den Quell-Burst-Transaktionen kompatibel, nur der Ziel-Burst kann freigegeben werden, wenn das Packen ausgewählt ist. Jedesmal, wenn am Lese-Port 202 die Ablaufsteuerung für einen Kanal, der die Packoperation erfordert, ausgeführt wird, wird mit den gültigen Bytes der aktuellen OCP-Antwort nur ein teilweiser Schreibvorgang in den Speicherpuffer auf den geeigneten Byte-Laufbahnen ausgeführt. Folglich muss der Datenspeicher während der Schreiboperation in den Daten-FIFO 314 eine Byte-Zugriffs-Granularität bereitstellen. Der Bytefreigabespeicher muss außerdem demgemäß aktualisiert werden.
  • Es wird keine neue NextWriteAddress 336 zugewiesen, bis das Speicherwort vollständig ist, d. h., wenn das letzte Byte des Speicherwortes effektiv geschrieben ist. Die Kanal-FIFO-Ebene wird außerdem bei diesem Ereignis aktualisiert. Dieses Aktualisierungsereignis wird basierend auf der aktuellen Byteadresse des Lesezugriffs in Bezug auf den Elementtyp und die Transaktions-Byte-Reihenfolge (transaction endianness) ausgelöst. Basierend auf der Adressenausrichtung und dem Gesamtübertragungs-Zählerstand können das erste und das letzte gepackte Wort teilweise sein. Dies wird der Schreib-Port-Seite unter Verwendung des Bytefreigabespeichers 332 gemeldet.
  • Das Entpacken wird auf der Schreib-Port-Seite ausgeführt, wenn der Kanalelementtyp schmaler als der Schreib-Port 204 ist und falls dieses Merkmal durch den DMA-Programmierer freigegeben worden ist. Das Entpackmerkmal wird frei gegeben, falls die DMA-Quelle als ein gepacktes Ziel qualifiziert ist und das DMA-Ziel als ein nicht gepacktes Ziel qualifiziert ist. Das Entpacken ist nicht mit den Ziel-Burst-Transaktionen kompatibel, nur der Quell-Burst kann freigegeben werden, wenn das Entpacken ausgewählt ist. Wenn sowohl das Quell- als auch das Bestimmungsziel gepackt oder ungepackt sind, dann sind die Pack- und Entpackoperationen gesperrt.
  • Jedesmal, wenn am Schreib-Port 204 die Ablaufsteuerung für einen Kanal, der eine Entpackoperation erfordert, ausgeführt wird, wird ein reguläres Wortlesen vom Speicherpuffer bei der Adresse ausgeführt, die im Register 320 für die aktuelle NextReadAddress gespeichert ist. Es werden nur die gültigen Bytes berücksichtigt, wobei das NextReadAddress-Register nur vom NextReadAddress-FIFO 334 aktualisiert wird, wenn alle Bytes in einem Daten-FIFO-Wort gelesen und an den Schreib-Port 204 gesendet worden sind. In einer konsistenten Weise muss diese NextReadAddress abermals nach dem letzten Lesevorgang in den FIFO als frei deklariert werden (d. h. in den NextWriteAddress-FIFO 336 geschrieben werden).
  • Die Ziele des DMA 200 können verschiedene Endian-Typen besitzen. Ein Endian-Modul 324 wird verwendet, um die Byte-Reihenfolge des Quellziels und des Bestimmungsziels anzupassen. Die Endian-Umsetzung findet statt, falls es eine Endian-Fehlanpassung gibt. Dies wird entsprechend einem Quell- und Ziel-Endian-Steuerbit-Feld (DMA4_CSDP.Src_Endianness = X) und (DMA4_CSDP.Dst_Endianness = Y) ausgeführt. Wenn X = Y gilt, dann wird keine Endian-Umsetzung ausgeführt, wenn jedoch X /= Y gilt, dann wird eine Endian-Umsetzung ausgeführt (Big Endian zu Little Endian oder Little Endian zu Big Endian).
  • Auf der Systemebene kann mehr als ein Endian-Modul die Fähigkeit besitzen, erforderlichenfalls die Byte-Reihenfolge umzusetzen. Es ist möglich, das nächste Modul im Ziel der Lese- und Schreibanforderungswege zu informieren, um die Byte-Reihenfolge zu verriegeln. Dies wird durch ein Inbandsignal (MreqEndiannessLock) qualifiziert, wenn (DMA4_CSDP.Src_Endianness_lock) oder (DMA4_CSDP.Dst_Endianness_lock) auf 1 gesetzt ist. In jedem Fall erzeugt der DMA 200 einen MReqDataType- und einen MREqEndianness-Inband-Kennzeichner.
  • In den DMA4-Adressenprogrammierungsregistern für das Quellziel und das Bestimmungsziel wird angenommen, dass die Anfangsadressen immer auf eine Elementgrößengrenze ausgerichtet sind:
    8-Bit-Elemente, die Anfangsadressen sind auf Bytes ausgerichtet,
    16-Bit-Elemente, die Anfangsadressen sind auf 16-Bit-Speicherwörter ausgerichtet, und
    32-Bit-Elemente, die Anfangsadressen sind auf 32-Bit-Speicherwörter ausgerichtet.
  • Sobald diese Bedingung erfüllt ist, gibt es immer noch eine potentielle Ausrichtungsfehlanpassung zwischen den Quelladressen und den Zieladressen (z. B. wenn ein 16-Bit-Datenpuffer von der Speicherquellen-Anfangsadresse 0x1000 unter Verwendung einer 32-Bit-DMA4-Instanz zu einer Speicherquellen-Zieladresse 0x10002 übertragen wird). Die Adressenausrichtungssteuerung 328 ist erforderlich, so dass irgendein Quellbyte auf irgendeiner Byte-Laufbahn des Lese-Ports (read port byte lane) an irgendeine Byte-Laufbahn des Schreib-Ports (write port byte lane) übertragen werden kann.
  • Ein optionales 2D-Graphikmodul 330 schafft die Hardware-Beschleunigung für zwei im Allgemeinen verwendete Graphikoperationen:
    • (1). die konstante feste Farbfüllung und
    • (2). das transparente Kopieren (das außerdem als Transparent-Blit oder Quell-Farbschlüssel-Kopie bekannt ist).
  • Transparente Farbe:
  • Es ist oft erwünscht, Informationen über unregelmäßige Formen zu übertragen, wobei es insbesondere in Programmen von Software-Spielen üblich ist. Die DMA 200 unterstützt ein COLOR KEY-Merkmal (das in einem als DMA4_COLOR benannten Register pro Kanal definiert ist) für 8 bpp, 16 bpp und 24 bpp (bpp = Bits pro Pixel) von der Quelle zum Ziel, d. h. jedes Element der Kanalquelle wird mit einem Farbschlüsselwert verglichen, wobei jene data_bits (Pixel), die mit dem Farbschlüssel übereinstimmen, nicht in das Ziel geschrieben werden. Für 8 bpp, 16 bpp und 24 bpp ist der im DMA4_CSDP-Register spezifizierte Da tentyp 8 Bits, 16 Bits bzw. 32 Bits. Während der 32-Bit-Datenübertragung (24-bpp-Datenübertragung) sind die Daten [31:24] '0'. Das Farbmuster wird im folgenden Bitfeld des DMA4_Color-Registers geschrieben:
    [7:0] und bedeutungslos bei [23:8] für 8 bpp,
    [15:0] und bedeutungslos bei [23:16] für 16 bpp,
    [23:0] für 24 bpp.
  • Die Burst-/Pack-Transaktionen können ohne Einschränkung verwendet werden. Jedesmal, wenn es eine Farbschlüsselübereinstimmung gibt, wird der Schreibzugriff unter Verwendung des Bytefreigabemusters des Schreib-Ports verworfen, aber die Schreib-OCP-Transaktion wird normal ausgeführt. Folglich gibt es keine Leistungsstrafe, wenn dieses Merkmal freigegeben ist.
  • Die konstante feste Farbfüllung:
  • Dieses Merkmal erlaubt die Füllung eines Bereichs mit einer festen Farbe oder einem festen Muster durch das horizontale und vertikale Wiederholen der Daten in dem Bereich. Weil sich die Funktionen der festen Farbfüllung und des transparenten Kopierens im selben Kanal wechselseitig ausschließen, wird ein "DMA4_COLOR"-Register gemeinsam benutzt, um den konstanten Farbwert basierend auf seinem Datentyp zu setzen. Für 8 bpp, 16 bpp und 24 bpp ist der im DMA4_CSDP-Register spezifizierte Datentyp 8 Bits, 16 Bits bzw. 32 Bits. Während der 32-Bit-Datenübertragung (24-bpp-Datenübertragung) sind die Daten [31:24] "0". Das Farbmuster wird im folgenden Bitfeld des DMA4_Color-Registers geschrieben:
    [7:0] und bedeutungslos bei [23:8] für 8 bpp;
    [15:0] und bedeutungslos bei [23:16] für 16 bpp; und
    [23:0] für 24 bpp.
  • Die Registerdaten kommen nicht vom Lese-Port 202; sondern er ist die Quelle für die Daten für die feste Füllung, die aus dem Schreib-Port 204 herausgehen.
  • Die DMA-Schaltung 200 kann OCP-Bursts sowohl am Lese-Port 202 als auch Schreib-Port 204 erzeugen. Das Burst-Modell entspricht dem OCPIP2.0 mit den folgenden Merkmalen:
    • 1). Inkrementieren, präzise Bursts. Die Burst-Größe kann 16 Bytes, 32 Bytes oder 64 Bytes betragen. Für eine 32-Bit-DMA4-Instanz, bedeutet dies 4 × 32- oder 8 × 32-Bursts oder einen 16 × 32-Burst, während dies für eine 64-Bit-DMA4-Instanz 2 × 64- oder 4 × 64-Bursts oder 8 × 64-Bursts bedeutet. Eine kleinere Burst-Größe als die programmierte Burst-Größe ist außerdem erlaubt. Dies wird normalerweise verwendet, wenn die Anfangsadresse nicht auf die programmierte Burst-Größe ausgerichtet ist oder die verbleibenden Daten, die zu übertragen sind, kleiner als die programmierte Burst-Größe sind. Es wird eine bessere Leistung als durch das Ausführen einzelner Transaktionen erreicht, bis die Adresse auf die programmierte Burst-Größe ausgerichtet ist. Infolgedessen ist ein 2 × 32-Burst an einer 32-Bit-OCP-Schnittstelle erlaubt.
    • 2). Streaming-Burst (OCP-Code = STRM): Er ist gültig, falls die Burst-Betriebsart in der Betriebsart der konstanten Adressierung und bei der nicht gepackten Transaktion freigegeben ist. Das gepackte Ziel muss außerdem freigegeben sein, wenn der Burst in der Betriebsart der nicht konstanten Adressierung freigegeben ist.
    • 3). Es sind Burst-Ende-Kennzeichner erforderlich: MReqLast und SRespLast (die außerdem für Einzel-OCP-Transaktionen verwendet werden).
    • 4). Alle Bursts sind ausgerichtet: Ein Burst beginnt immer an der auf die Burst-Größe ausgerichteten Speicheradresse. Dies bedeutet nicht, dass der OCP-Parameter burst_aligned EIN sein sollte, da dieser Parameter annimmt, dass das Bytefreigabemusters vollständig aus 1en besteht und während des ganzen Bursts konstant ist. Diese Bedingung ist am Schreib-Port 204 nicht immer erfüllt, der in der Transparent-Blit-Betriebsart arbeitet, da das Bytefreigabemuster verwendet wird, um die Pixel zu eliminieren, die nicht in den Speicher geschrieben werden dürfen (wenn es eine Übereinstimmung mit dem Farbschlüssel gibt). Selbst wenn die burst_enable-Option eingeschaltet ist, kann der DMA 200 bei der Kanalprogrammierung am Anfang der Übertragung warten, bis die OCP-Adresse einen Wert erreicht, der auf die Burst-Größe ausgerichtet ist, bevor er Burst- Transaktionen ausgibt. Deshalb können die ersten Kanalzugriffe aus Einzeltransaktionen bestehen.
  • Was auch immer die Übertragungslänge ist, der DMA 200 erzeugt niemals unvollständige Bursts. Am Ende einer Kanalübertragung werden Einzeltransaktionen an den OCP-Schnittstellen ausgegeben, wenn es nicht ausreichend (zu lesende oder zu schreibende Daten) gibt, um einen vollen Burst zu füllen.
  • Wenn der Burst freigegeben ist und die Hardware-DMA-Anforderungssynchronisation freigegeben ist und die Adresse nicht auf die Burst-Grenze ausgerichtet ist, dann spaltet der DMA 200 automatisch diesen Burst-Zugriff in mehrere kleinere Zugriffe (die minimale Anzahl der ausgerichteten Zugriffe) auf, bis die Adresse auf die Burst-Grenze ausgerichtet ist. Wenn die letzte Übertragung nicht auf den Burst ausgerichtet ist, dann werden die verbleibenden Daten in einen minimalen ausgerichteten kleineren Zugriff aufgespaltet.
  • In 4 ist eine graphische Darstellung gezeigt, die ein Mehrfach-Threading-Szenario des Lese-Ports 202 gemäß einer Ausführungsform der Erfindung hervorhebt, wenn der Lese-Port vier Threads (ThreadID0, ThreadID1, ThreadID2 und ThreadID3) 402408 besitzt. Der aktuelle Zustand für jeden der Threads (0–3) ist jeweils in den Zeitleisten 410416 gezeigt. Dabei sind die Leseanforderungen (OCP_Read_Request) und die Leseantworten (OCR_Read_Responses) auf den Zeitleisten 418 bzw. 420 hervorgehoben. Wie bei 422 gezeigt ist, sind ein oder zwei Zyklen erforderlich, um von einem ersten logischen Kanal (LCH(i)) zu einem weiteren logischen Kanal (LCH(j)) umzuschalten.
  • In 5 ist eine graphische Darstellung gezeigt, die ein Mehrfach-Threading-Szenario des Schreib-Ports 204 gemäß einer Ausführungsform der Erfindung hervorhebt. Jedesmal, wenn es eine OCP-Schreibanforderung (OCP_Write_Request) gibt; wird ein Thread n (0 bis 1) während der aktuellen Schreibtransaktion zugewiesen. In 5 sind zwei Threads, Thread0 und Thread1, gezeigt. Während es einen freien Thread gibt, kann die Ablaufsteuerung entsprechend dem in der besonderen Konstruktion verwendeten Arbitrierungs-Schema für die anderen Kanäle ausgeführt werden. Ein Thread wird frei, sobald die entsprechende Kanalschreibtransaktion (z. B. eine Einzeltransaktionen, eine Burst-Transaktionen von 4 × 32 oder 8 × 32) abgeschlossen ist. Sobald ein Thread frei wird, kann er einem weiteren Kanal zugewiesen werden. 5 zeigt vier logische Kanäle LCH(i) 502, LCH(j) 504, LCH( k ) 506 und LCH(l) 508, wobei der aktuelle Zustand der zwei Threads (Thread0 und Thread1) außerdem gezeigt ist. Wie außerdem gezeigt ist, sind ein oder zwei Zyklen vom Ende einer Schreibanforderung erforderlich, um eine neue Schreibanforderung zu beginnen.
  • In 6 ist eine funktionale graphische Darstellung der Lese-Port-Ablaufsteuerung 302 zeigt. Die hardware- 602 und software-freigegebenen Kanalanforderungen 604 werden in der Ablaufsteuerung empfangen und gehen im Block 606 durch eine erste Ebene der Arbitrierung. Im Block 605 werden die Kanalanforderungen in Kanäle mit hoher Priorität und in Kanäle mit niedriger (regulärer) Priorität aufgespaltet. Die Logik zum Bestimmen, was einen Kanal mit hoher Priorität und einen Kanal mit niedriger Priorität charakterisiert, ist von den Systemkonstitutionsanforderungen abhängig. Die Kanäle mit hoher Priorität gehen zur Arbitrierungs-Logik 606, wo die Arbitrierung zwischen gleichzeitigen Kanalanforderungen stattfindet. In Abhängigkeit von den Arbitrierungs-Regeln kann z. B. Chi gegenüber Chj Priorität besitzen, wenn i < j gilt. Die Kanäle mit niedriger Priorität gehen durch die Arbitrierungs-Logik 612 für Kanäle mit niedriger Priorität.
  • Die Ablaufsteuerung und die erneute Ablaufsteuerung für Kanäle mit hoher und niedriger Priorität für die Kanäle mit hoher Priorität treten in 610 auf, während die Ablaufsteuerung und die erneute Ablaufsteuerung für die Kanäle mit niedriger Priorität in 612 auftreten. Eine weitere Arbitrierung zwischen den Kanälen mit hoher und niedriger Priorität tritt in 614 entsprechend dem Gewicht (W) auf, das über den Block 616 den Kanälen mit hoher Priorität gegeben wird. Die verfügbaren Lese-Threads 618 werden der Lesedienstanforderung 620 zugewiesen und bereitgestellt. In 7 ist ein Blockschaltplan einer Schreib-Port-Ablaufsteuerung gezeigt, die zur in 6 gezeigten Lese-Port-Ablaufsteuerung ähnlich ist.

Claims (13)

  1. Direktspeicherzugriff- oder DMA-Schaltung (200), mit: einem Lese-Port (202) zum Lesen von Daten von außerhalb der DMA-Schaltung (200); und einem Schreib-Port (204) zum Schreiben von Daten außerhalb der DMA-Schaltung (200), gekennzeichnet durch eine Lese-Port-Ablaufsteuerung (302), die mit dem Lese-Port (202) gekoppelt ist, um einen nächsten DMA-Kanal, Ch1–ChN, auszuwählen, um Zugriff zu dem Lese-Port zu erhalten, und um dem ausgewählten Kanal einen Thread-Identifizierer zuzuweisen; eine Schreib-Port-Ablaufsteuerung (304), die mit dem Schreib-Port (204) gekoppelt ist, um einen nächsten DMA-Kanal, Ch1–ChN, auszuwählen, um Zugriff zu dem Schreib-Port (204) zu erlangen, und um dem ausgewählten Kanal einen Thread-Identifizierer zuzuweisen; einen Anforderungs-Port (306, 310), der mit der Lese-Port-Ablaufsteuerung (302) und mit der Schreib-Port-Ablaufsteuerung (304) gekoppelt ist; wobei der Lese-Port (202) "m" Threads unterstützen kann und der Schreib-Port (204) "n" Threads unterstützen kann, wobei ein Thread einem ausgewählten Kanal für die Dauer einer vollständigen Einzelzugriff- oder Burst-Zugriff-Transaktion zugewiesen wird, wobei der zugewiesene Thread bei Abschluss einer aktuellen Transaktion für die Zuweisung zu demselben oder einem weiteren Kanal frei wird und wobei der Lese-Port und der Schreib-Port simultan an unterschiedlichen Datenübertragungen arbeiten können.
  2. DMA-Schaltung nach Anspruch 1, wobei die maximale Anzahl von Kanälen mit ausstehenden Transaktionen am Lese-Port (202) zu irgendeiner Zeit gleich "m" und am Schreib-Port (204) zu irgendeiner Zeit gleich "n" ist.
  3. DMA-Schaltung nach Anspruch 1 oder 2, wobei dann, wenn nur ein Kanal bei dem Lese-Port (202) in einer Burst-Zugriff-Transaktion aktiv ist, ein einzelner Thread-ID während der Kanalübertragung zugewiesen wird und maximal "m" antiparallele Bursts (back to back bursts) ohne erneute Ablaufsteuerung des Kanals am Ende jeder Burst-Übertragung übertragen werden.
  4. DMA-Schaltung nach einem vorhergehenden Anspruch, wobei die Lese-Port-Ablaufsteuerung (302) und der Schreib-Port-Ablaufsteuerung (304) jeweils zwischen Kanälen an einer Thread-Grenze arbitrieren.
  5. DMA-Schaltung nach einem vorhergehenden Anspruch, wobei die Lese-Port-Ablaufsteuerung (302) und die Schreib-Port-Ablaufsteuerung (304) jeweils eine Warteschlange mit hoher Priorität für Kanäle mit hoher Priorität und eine Warteschlange mit niedriger Priorität für Kanäle mit regulärer Priorität enthalten.
  6. DMA-Schaltung nach dem vorhergehenden Anspruch, die ferner enthält: einen Speicher (314, 334, 336), der mit dem Lese-Port (202) und mit dem Schreib-Port (204) gekoppelt ist; und einen Konfigurations-Port (208), der mit dem Speicher (314, 334, 336) gekoppelt ist, um Konfigurationsinformationen zu empfangen, um die DMA-Schaltung zu konfigurieren.
  7. DMA-Schaltung nach einem vorhergehenden Anspruch, die ferner enthält: einen Kanalkontextspeicher (316), der von den Kanälen gemeinsam genutzt wird.
  8. DMA-Schaltung nach einem vorhergehenden Anspruch, die ferner enthält: einen Lese-Port-Antwortmanager (308), der mit dem Lese-Port (202) gekoppelt ist; und einen Schreib-Port-Antwortmanager (312), der mit dem Schreib-Port (204) gekoppelt ist.
  9. DMA-Schaltung nach einem vorhergehenden Anspruch, wobei der Leseantwortmanager (308) den Kanal, der bestimmte Daten besitzt, identifiziert.
  10. DMA-Schaltung nach einem vorhergehenden Anspruch, die ferner enthält: einen First-in/First-out- oder FIFO-Speicher (314), der mit dem Lese-Port (202) und mit dem Schreib-Port (204) gekoppelt ist.
  11. DMA-Schaltung nach Anspruch 8, wobei die DMA-Schaltung Mehrfach-Thread-DMA-Übertragungen bereitstellt, die konkurrente Kanalübertragungen zulassen.
  12. DMA-Schaltung nach Anspruch 11, die ferner enthält: eine Adressenausrichtsteuerung (332, 328), die mit dem FIFO-Speicher (314) gekoppelt ist, wobei die Adressenausrichtsteuerung ermöglicht, dass irgendein Quell-Byte auf irgendeiner Byte-Laufbahn des Lese-Ports (read port byte lane) an irgendeine Byte-Laufbahn des Schreib-Ports (write port byte lane) übertragen wird.
  13. DMA-Schaltung nach Anspruch 12, die ferner eine Endian-Umsetzungsschaltung (324), die mit dem Lese-Port (202) gekoppelt ist, enthält.
DE602004012563T 2004-10-11 2004-10-11 Mehrfädiges DMA Active DE602004012563T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP04292406A EP1645968B1 (de) 2004-10-11 2004-10-11 Mehrfädiges DMA

Publications (2)

Publication Number Publication Date
DE602004012563D1 DE602004012563D1 (de) 2008-04-30
DE602004012563T2 true DE602004012563T2 (de) 2009-05-07

Family

ID=34931446

Family Applications (1)

Application Number Title Priority Date Filing Date
DE602004012563T Active DE602004012563T2 (de) 2004-10-11 2004-10-11 Mehrfädiges DMA

Country Status (3)

Country Link
US (1) US7761617B2 (de)
EP (1) EP1645968B1 (de)
DE (1) DE602004012563T2 (de)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546392B2 (en) * 2005-05-13 2009-06-09 Texas Instruments Incorporated Data transfer with single channel controller controlling plural transfer controllers
US7546391B2 (en) * 2005-05-13 2009-06-09 Texas Instruments Incorporated Direct memory access channel controller with quick channels, event queue and active channel memory protection
US7797467B2 (en) * 2005-11-01 2010-09-14 Lsi Corporation Systems for implementing SDRAM controllers, and buses adapted to include advanced high performance bus features
US7779174B2 (en) * 2006-11-03 2010-08-17 Samsung Electronics Co., Ltd. Method and apparatus for dynamically changing burst length using direct memory access control
US7743179B2 (en) * 2007-03-30 2010-06-22 Via Technologies, Inc. Data transmission methods
JP5108690B2 (ja) * 2008-09-08 2012-12-26 ルネサスエレクトロニクス株式会社 Dma装置及びdma転送方法
US8209523B2 (en) * 2009-01-22 2012-06-26 Intel Mobile Communications GmbH Data moving processor
US8881106B2 (en) * 2009-12-26 2014-11-04 Intel Corporation Debugging parallel software using speculatively executed code sequences in a multiple core environment
US8706923B2 (en) * 2010-09-14 2014-04-22 Texas Instruments Incorported Methods and systems for direct memory access (DMA) in-flight status
US9319880B2 (en) * 2010-09-15 2016-04-19 Intel Corporation Reformatting data to decrease bandwidth between a video encoder and a buffer
US8842735B2 (en) * 2010-10-26 2014-09-23 Sony Corporation Method to improve detection of motion with phase correlation
US9858241B2 (en) 2013-11-05 2018-01-02 Oracle International Corporation System and method for supporting optimized buffer utilization for packet processing in a networking device
US8634415B2 (en) 2011-02-16 2014-01-21 Oracle International Corporation Method and system for routing network traffic for a blade server
US20140237170A1 (en) * 2011-09-13 2014-08-21 Kabushiki Kaisha Toshiba Storage device, and read command executing method
US9378045B2 (en) * 2013-02-28 2016-06-28 Oracle International Corporation System and method for supporting cooperative concurrency in a middleware machine environment
US9110715B2 (en) 2013-02-28 2015-08-18 Oracle International Corporation System and method for using a sequencer in a concurrent priority queue
US8689237B2 (en) 2011-09-22 2014-04-01 Oracle International Corporation Multi-lane concurrent bag for facilitating inter-thread communication
US10095562B2 (en) 2013-02-28 2018-10-09 Oracle International Corporation System and method for transforming a queue from non-blocking to blocking
GB2495959A (en) 2011-10-26 2013-05-01 Imagination Tech Ltd Multi-threaded memory access processor
US9489327B2 (en) 2013-11-05 2016-11-08 Oracle International Corporation System and method for supporting an efficient packet processing model in a network environment
CN105706058B (zh) * 2013-11-05 2019-09-20 甲骨文国际公司 用于支持网络环境中高效的分组处理模型和用于分组处理的优化的缓冲区利用的系统和方法
CN106502935A (zh) * 2016-11-04 2017-03-15 郑州云海信息技术有限公司 Fpga异构加速系统、数据传输方法及fpga
US11294678B2 (en) 2018-05-29 2022-04-05 Advanced Micro Devices, Inc. Scheduler queue assignment
US11334384B2 (en) * 2019-12-10 2022-05-17 Advanced Micro Devices, Inc. Scheduler queue assignment burst mode
CN114385528A (zh) 2020-10-16 2022-04-22 瑞昱半导体股份有限公司 直接记忆体存取控制器、使用其之电子装置以及操作其的方法
US11948000B2 (en) 2020-10-27 2024-04-02 Advanced Micro Devices, Inc. Gang scheduling for low-latency task synchronization

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7181548B2 (en) * 1998-10-30 2007-02-20 Lsi Logic Corporation Command queueing engine
US6182183B1 (en) 1998-11-13 2001-01-30 Sonics, Inc. Communications system and method with multilevel connection identification
US6633926B1 (en) * 1998-11-30 2003-10-14 Matsushita Electric Industrial Co., Ltd. DMA transfer device capable of high-speed consecutive access to pages in a memory
GB9909196D0 (en) * 1999-04-21 1999-06-16 Texas Instruments Ltd Transfer controller with hub and ports architecture
JP2000347987A (ja) 1999-06-07 2000-12-15 Matsushita Electric Ind Co Ltd Dma転送装置
CA2388790A1 (en) * 2002-06-03 2003-12-03 Catena Networks Canada Inc. Direct memory access circuit with atm support
US6874054B2 (en) * 2002-12-19 2005-03-29 Emulex Design & Manufacturing Corporation Direct memory access controller system with message-based programming
KR100513398B1 (ko) * 2003-01-08 2005-09-09 삼성전자주식회사 듀얼프로세서의 아이피 공유장치 및 그방법
JP4446373B2 (ja) * 2003-03-19 2010-04-07 パナソニック株式会社 プロセッサ、データ共有装置
US20050223131A1 (en) * 2004-04-02 2005-10-06 Goekjian Kenneth S Context-based direct memory access engine for use with a memory system shared by devices associated with multiple input and output ports
US20060031603A1 (en) * 2004-08-09 2006-02-09 Bradfield Travis A Multi-threaded/multi-issue DMA engine data transfer system

Also Published As

Publication number Publication date
EP1645968B1 (de) 2008-03-19
US20060080478A1 (en) 2006-04-13
US7761617B2 (en) 2010-07-20
DE602004012563D1 (de) 2008-04-30
EP1645968A1 (de) 2006-04-12

Similar Documents

Publication Publication Date Title
DE602004012563T2 (de) Mehrfädiges DMA
DE602004012106T2 (de) Multikanal-DMA mit gemeinsamem FIFO-Puffer
DE19900325B4 (de) Vorrichtung und Verfahren zum Senden und Empfangen von Daten in eine und aus einer universellen seriellen Buseinrichtung
DE19580707C2 (de) PCI-ZU-ISA-Interrupt-Protokoll-Konverter und -Auswahlmechanismus
DE19900345B4 (de) Schnittstellenmodul für einen Universellen Seriellen Bus (USB) zur Verbindung mit einem USB über eine Programmierschnittstelle für eine USB-Funktion und Vorrichtung zum Anschluß an einen universellen seriellen Bus
DE60037065T2 (de) Übertragungsteuerung mit Naben- und Torachitektur
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE60011797T2 (de) Ausführung von mehreren fäden in einem parallelprozessor
DE60030767T2 (de) Datenzuweisung zu threads in einem multi-threaded netzwerkprozessor
DE102018006546A1 (de) Plattformschnittstellenschicht und protokoll für beschleuniger
DE69634182T2 (de) Direktspeicherzugriffssteuerung mit programmierbarer Zeitsteuerung
DE69735575T2 (de) Verfahren und Vorrichtung zur Unterbrechungsverteilung in einem skalierbaren symmetrischen Mehrprozessorsystem ohne die Busbreite oder das Busprotokoll zu verändern
DE19983745B9 (de) Verwendung von Seitenetikettregistern um einen Zustand von physikalischen Seiten in einer Speichervorrichtung zu verfolgen
DE112016005910T5 (de) Architechtur für Software-Definierten Interconnect-Switch
DE202010017669U1 (de) Befehls- und Interrupt-Gruppierung bei einer Datenspeichervorrichtung
DE112005000219T5 (de) Verfahren und Vorrichtung zum Verwalten von Speicherzugriffsanforderungen
DE4018481C2 (de)
DE102015102135A1 (de) Unterbrechbares Exklusivspeichern
DE102018127751A1 (de) Einheitlicher Adressraum für mehrere Verbindungen
DE69531270T2 (de) Unterbrechungssteuerungsgeräte in symmetrischen Mehrprozessorsystemen
DE102013113262A1 (de) Auslöser-Leitwegeinheit
DE10335643B4 (de) Vorrichtung und Verfahren zum Steuern des Zugriffs von mehreren Datenverarbeitungseinrichtungen auf einen Speicher
DE102017124078A1 (de) Ordinale modifikation der dienstgüte
DE112017004907T5 (de) System, Vorrichtung und Verfahren zur Durchführung einer verteilten Arbitration
DE60032805T2 (de) Vorrichtung zur arbitrierung eines speicherressources basiert auf zuteilung von zeitschlitzen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition