-
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) 402–408 besitzt. Der
aktuelle Zustand für
jeden der Threads (0–3)
ist jeweils in den Zeitleisten 410–416 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.