DE69727465T2 - Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung - Google Patents

Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung Download PDF

Info

Publication number
DE69727465T2
DE69727465T2 DE69727465T DE69727465T DE69727465T2 DE 69727465 T2 DE69727465 T2 DE 69727465T2 DE 69727465 T DE69727465 T DE 69727465T DE 69727465 T DE69727465 T DE 69727465T DE 69727465 T2 DE69727465 T2 DE 69727465T2
Authority
DE
Germany
Prior art keywords
burst
memory
buffer
data
command
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.)
Expired - Lifetime
Application number
DE69727465T
Other languages
English (en)
Other versions
DE69727465D1 (de
Inventor
Dominic Paul Mccarthy
Victor Stuart Chalfont St Peter Bucks Quick
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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Co
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
Priority claimed from EP97300113A external-priority patent/EP0853283A1/de
Priority claimed from GBGB9723704.4A external-priority patent/GB9723704D0/en
Application filed by Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of DE69727465D1 publication Critical patent/DE69727465D1/de
Application granted granted Critical
Publication of DE69727465T2 publication Critical patent/DE69727465T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2806Space or buffer allocation for DMA transfers

Description

  • Diese Erfindung bezieht sich auf Computersysteme und insbesondere, aber nicht ausschließlich, auf derartige Systeme zu einem Verarbeiten von Mediendaten.
  • Eine optimale Computerarchitektur ist eine, die die Leistungsanforderungen derselben einhält, während minimale Kosten erreicht sind. Bei einem medienintensiven Anwendungssystem ist gegenwärtig ein Speicher der Haupthardwarekostenbeitragende. Der Speicher muß genügend Kapazität aufweisen, um die Mediendaten zu halten, und genügend Zugriffsbandbreite bereitstellen, damit die Berechnungsdurchsatzerfordernisse eingehalten werden können. Ein derartiges Anwendungssystem muß den Datendurchsatz gegenüber einem normalen Prozessor maximieren, der gewöhnlicherweise den Befehlsdurchsatz maximieren muß. Die vorliegende Erfindung betrifft insbesondere, aber nicht ausschließlich, ein Extrahieren einer hohen Leistung aus einem kostengünstigen Speicher, die Beschränkungen eines Verarbeitens von medienintensiven Algorithmen vorausgesetzt.
  • Die vorliegende Erfindung bezieht sich insbesondere auf ein Computersystem des Typs, der folgende Merkmale aufweist: ein Verarbeitungssystem zum Verarbeiten von Daten; einen Speicher (der beispielsweise durch einen dynamischen RAM („DRAM") bereitgestellt ist) zu einem Speichern von Daten, die durch das Verarbeitungssystem verarbeitet werden oder verarbeitet werden sollen; eine Speicherzugriffssteuerung zum Steuern eines Zugriffs auf den Speicher; und einen Datenpuffer (der beispielsweise durch einen statischen RAM („SRAM") bereitgestellt ist) zu einem Puffern von Daten, die auf den Speicher geschrieben oder von demselben gelesen werden sollen.
  • Gegenwärtig ist die kostengünstigste Form eines symmetrischen Schreiben-Lesen-Speichers ein DRAM. (Mit symmetrisch ist gemeint, daß Lesen- und Schreiben-Zugriffe identische Zeiten einnehmen, nicht wie Lese- und Schreib-Operationen bei einem Flash-Speicher). Ein DRAM wird gegenwärtig extensiv bei Personalcomputern als der Hauptspeicher verwendet, wobei schnellere (und teurere) Technologien, wie beispielsweise ein statischer SRAM, für Datenpuffer oder Cache-Speicher näher an dem Prozessor verwendet werden. Bei einem kostengünstigen System besteht ein Bedarf, den kostengünstigsten Speicher zu verwenden, der ermöglicht, daß die Verhaltens-(und Leistungs-)Ziele eingehalten werden. Bei dem Herstellen der vorliegenden Erfindung wurde eine Analyse der billigsten DRAM-Technologien durchgeführt, um die maximalen Datenbandbreiten in Erfahrung zu bringen, die erhalten werden könnten, und es ist klar, daß bestehende Systeme die verfügbare Bandbreite nicht benutzen. Die vorliegende Erfindung betrifft ein Erhöhen der Verwendung der verfügbaren Bandbreite und daher ein Erhöhen der Gesamteffizienz des Speichers bei einem derartigen Computersystem und bei ähnlichen Systemen.
  • Die WO 91 11767 zeigt ein DMA-Speichersteuersystem, das einen Hochgeschwindigkeits-Burst-Transfer von Datenblöcken von einer Datenquelle zu einem Bestimmungsort bereitstellt. D1 ist keiner speziellen Datenquelle oder einem Bestimmungsort zugeordnet, sondern ist auf eine Optimierung eines Verhaltens des Bus gerichtet. D1 legt die spezifische Anordnung nicht nahe, wie dieselbe beansprucht ist.
  • Die GB 2 250 615 zeigt eine DMA-Steuerung zu einem Übertragen von Datenblöcken zwischen einem Rahmenpuffer und einem Hauptspeicher für eine Anzeige. D2 betrifft keine Datenbursteigenschaften.
  • Ein typischer Prozessor kann auf einen SRAM-Cache in 10 ns zugreifen. Jedoch kann ein Zugriff auf einen DRAM-Hauptspeicher bei einem eingebetteten System 200 ns dauern, bei dem Speicherkosten minimiert sein müssen, was eine zwanzigfache Erhöhung ist. Um somit einen hohen Durchsatz sicherzustellen, ist es notwendig, so viele Daten in dem Lokalcachespeicherblock zu plazieren, bevor dieselben benötigt werden. Dann sieht der Prozessor lediglich die Latenz von Zugriffen auf den schnellen Lokalcachespeicher und nicht die längere Verzögerung zu einem Hauptspeicher.
  • „Latenz" ist die Zeit, die benötigt wird, um ein Datum aus einem Speicher abzurufen. Es ist bei Systemen von höchster Wichtigkeit, die „rechengebunden" sind, d. h. bei denen das Verhalten des Systems durch den Prozessor diktiert ist. Der große Faktor zwischen einer Lokal- und einer Hauptspeichergeschwindigkeit kann bewirken, daß das Verarbeiten durch das Verhalten des Speichersystems bestimmt ist. Dieser Fall ist „bandbreitengebunden" und ist letztlich durch die Bandbreite des Speichersystems begrenzt. Falls der Prozessor verglichen mit dem Speicher schnell genug geht, kann derselbe Anforderungen mit einer schnelleren Rate erzeugen, als der Speicher dieselben zufriedenstellen kann. Viele Systeme gehen heute davon, rechengebunden zu sein, dazu über, bandbreitengebunden zu sein.
  • Ein Verwenden eines schnelleren Speichers ist eine Technik zu einem Vermindern des Verhaltensproblems. Dies fügt jedoch Kosten hinzu. Ein alternativer Ansatz ist es, zu erkennen, daß existierende Speicherchips ineffizient verwendet werden, und neue Verfahren zu entwickeln, um auf diesen Speicher effizienter zuzugreifen.
  • Ein Merkmal eines herkömmlichen DRAM-Aufbaus ist es, daß derselbe einen Zugriff in „Bursts" ermöglicht. Ein DRAM weist ein Array von Speicherpositionen in einer quadratischen Matrix auf. Um auf ein Element in dem Array zuzugreifen, muß zuerst eine Zeile ausgewählt (oder 'geöffnet') werden, gefolgt durch eine Auswahl der geeigneten Spalte. Wenn jedoch eine Zeile ausgewählt wurde, können nachfolgende Zugriffe auf Spalten in dieser Zeile lediglich durch ein Bereitstellen der Spaltenadresse durchgeführt werden. Das Konzept eines Öffnens einer Zeile und eines Durchführens einer Sequenz von Zugriffen lokal zu dieser Zeile wird ein „Burst" genannt.
  • Der Ausdruck „Bursteffizienz", der in dieser Beschreibung verwendet wird, ist ein Maß des Verhältnisses von (a) der minimalen Zugriffszeit auf den DRAM zu (b) der durchschnittlichen Zugriffszeit auf den DRAM. Ein DRAM-Zugriff betrifft einen langen Zugriff und (n – 1) kürzere Zugriffe, um n Datenelemente zu bursten. Je länger somit der Burst, desto reduzierter die durchschnittliche Zugriffszeit (und somit desto höher die Bandbreite). Typischerweise verwendet ein Cache-basiertes System (aus Gründen einer Cachearchitektur und einer Busbreite) Bursts von vier Zugriffen. Dies bezieht sich auf etwa 25 bis 40% Bursteffizienz. Für eine Burst-Länge von 16 bis 32 Zugriffen ist die Effizienz in etwa 80%, d. h. etwa das Doppelte.
  • Der Ausdruck „Sättigungseffizienz", der in dieser Beschreibung verwendet wird, ist ein Maß dafür, wie häufig es einen Verkehr an dem DRAM-Bus gibt. Bei einem prozessorgebundenen System befindet sich der Bus in einem Leerlauf, bis es einen Cache-Fehltreffer gibt, und dann gibt es einen 4-Zugriff-Burst, um eine neue Cache-Zeile abzurufen. In diesem Fall ist eine Latenz sehr wichtig. Somit gibt es eine niedrige Sättigungseffizienz, da der Bus selten verwendet wird. Bei einem Test an einem eingebetteten System wurde eine Sättigungseffizienz von 20% gemessen. Somit gibt es eine Gelegenheit zu einem Erhalten von einer bis zu fünffachen Erhöhung bei einem Verhalten von dem Bus.
  • Wenn die möglichen Erhöhungen bei einer Bursteffizienz und einer Sättigungseffizienz kombiniert werden, ist es vielleicht möglich, eine etwa zehnfache Verbesserung bei einem Durchsatz für den gleichen gegenwärtig verwendeten Speicher zu erhalten.
  • Ein erster Aspekt der vorliegenden Erfindung ist gekennzeichnet durch: eine Einrichtung zum Erteilen von Burstbe fehlen an die Speicherzugriffssteuerung, wobei die Speicherzugriffssteuerung auf einen derartigen Burstbefehl anspricht, um eine Mehrzahl von Datenwörtern zwischen dem Speicher und dem Datenpuffer in einer einzigen Speichertransaktion zu übertragen; und eine Einrichtung zum Inwarteschlangestellen derartiger Burstbefehle, so daß ein derartiger Burstbefehl zu einer Ausführung durch die Speicherzugriffssteuerung verfügbar gemacht werden kann, sofort nachdem ein vorhergehender Burstbefehl ausgeführt wurde.
  • Ein zweiter Aspekt der Erfindung ist gekennzeichnet durch: eine Einrichtung zum Erteilen von Burstbefehlen an die Speicherzugriffssteuerung, wobei jeder derartige Burstbefehl einen Parameter umfaßt oder demselben zugeordnet ist, der eine Beabstandung zwischen Positionen in dem Speicher definiert, auf die ansprechend auf diesen Burstbefehl zugegriffen werden soll, und wobei die Speicherzugriffssteuerung auf einen derartigen Burstbefehl anspricht, um eine Mehrzahl von Datenelementen zwischen dem Speicher, bei gemäß dem Beabstandungsparameter beabstandeten Positionen, und dem Datenpuffer in einer einzigen Speichertransaktion zu übertragen.
  • Ein dritter Aspekt der vorliegenden Erfindung stellt ein Verfahren zum Betreiben eines Computersystems bereit, wie es oben angegeben ist, das folgende Schritte aufweist: Identifizieren von Berechnungselementen im Quellcode, die geeignet sind für eine Kompilierung zu und einer Ausführung mit Unterstützung von dem zumindest einen Datenpuffer; Transformieren der identifizierten Berechnungselemente im Quellcode in eine Folge von Operationen, die je eine Speichertransaktion betreffen, die nicht größer ist als die Größe des zumindest einen Datenpuffers, und Ausdrücken derartiger Operationen als Burstbefehle; und Ausführen des Quellcodes durch das Verarbeitungssystem, wobei die identifizierten Berechnungselemente durch das Verarbeitungssystem durch Zugriffe auf den zumindest einen Datenpuffer verarbeitet werden.
  • Andere bevorzugte Merkmale der Erfindung sind in den beigefügten Ansprüchen definiert.
  • Die vorliegende Erfindung ist insbesondere, aber nicht ausschließlich, lediglich für bestimmte Algorithmusklassen anwendbar, die „medienintensive" Algorithmen genannt werden. Damit ist ein Algorithmus gemeint, der eine reguläre Programmschleife verwendet, die auf lange Arrays ohne ein jegliches datenabhängiges Adressieren zugreift. Diese Algorithmen zeigen eine hohe räumliche Lokalität und Regelmäßigkeit, aber eine niedrige zeitliche Lokalität. Die hohe räumliche Lokalität und Regelmäßigkeit ergibt sich, da, falls ein Arrayelement n verwendet wird, es dann höchstwahrscheinlich ist, daß ein Arrayelement n + s verwendet wird, wobei s eine konstante Schrittweite zwischen Datenelementen in dem Array ist. Die niedrige zeitliche Lokalität besteht aufgrund der Tatsache, daß auf ein Arrayelement n typischerweise lediglich einmal zugegriffen wird.
  • Gewöhnliche Caches sind vorherrschend entworfen, um eine hohe zeitliche Lokalität durch ein Halten von Daten auszunutzen, die häufig nahe dem Prozessor verwendet werden. Eine räumliche Lokalität wird oft benutzt, aber lediglich auf eine sehr beschränkte Weise durch den Zeilenabrufmechanismus. Dies ist normalerweise eine Einheitsschrittweite und relativ kurz. Diese zwei Gründe bedeuten, daß Caches bei einem Handhaben von Mediendatenströmen nicht sehr gut sind. In Betrieb ersetzen redundante Daten oft nützliche Daten in dem Cache und die DRAM-Bandbreite ist nicht maximiert. Herkömmliche Caches sollen für bestimmte Datentypen idealer geeignet sein, aber nicht für Mediendaten.
  • Der Hauptunterschied zwischen den Burstpuffern der Erfindung und herkömmlichen Caches sind die Füllrichtlinien, d. h. wann (der erste Aspekt der Erfindung) und wie (der zweite Aspekt der Erfindung) der Inhalt des Puffers zu füllen/leeren ist.
  • Gemäß der Erfindung werden daher neue Speicherschnittstellenstrukturen (d. h. Burstpuffer) vorgeschlagen, die einen herkömmlichen Datencache vergrößern (d. h. längsseits sitzen) und zu einem Zugreifen auf insbesondere, aber nicht ausschließlich, Mediendaten verwendet werden können. Die Verwendung eines DRAM oder dergleichen kann dann durch ein Ausnutzen der Mediendatencharakteristika optimiert werden und der Datencache kann an anderen Datentypen wirksam sein, die typischerweise zu einer Steuerung verwendet werden. Es scheint auch, daß die Datencachegröße reduziert werden kann, wenn es weniger wahrscheinlich ist, daß die Mediendaten Konflikte mit den Daten in dem Cache bewirken, ohne ein Opfern eines Verhaltens. Möglicherweise kann es sich als der Fall erweisen, daß der gesamte zusätzliche Speicher, der für die Burstpuffer erforderlich ist, von dem gleichen Betrag wie die Einsparungen bei einem Speicher ist, der für den Datencache erforderlich ist.
  • Ein System kann mehrere Burstpuffer enthalten. Typischerweise ist jeder Burstpuffer einem jeweiligen Datenstrom zugewiesen. Da Algorithmen eine variierende Anzahl von Datenströmen aufweisen, wird vorgeschlagen, eine feste Größe eines SRAM zu haben, die den Burstpuffern verfügbar ist. Diese Größe kann in gleichgroße Größen unterteilt werden, gemäß der Anzahl von erforderlichen Puffern. Falls z. B. die Größe eines festen SRAM 2 kByte beträgt und falls ein Algorithmus vier Datenströme aufweist, könnte die Speicherregion in vier Burstpuffer von 512 Byte partitioniert werden. Ein anderer Algorithmus mit sechs Strömen könnte durch ein Teilen des Speichers in acht Burstpuffer mit je 256 Bytes Größe unterstützt werden. In anderen Worten, wo die Anzahl von Datenströmen keine zweite Potenz ist, ist die Anzahl von Burstpuffern vorzugsweise die nächsthöhere zweite Potenz.
  • Bei Architekturen gemäß der Erfindung weist ein Burst den Satz von Adressen auf, definiert durch: Burst = {B + S × i | B, S, i ∈ N ∧ 0 ≤ i < L}wobei B die Basisadresse (base address) der Übertragung ist, S die Schrittweite (stride) zwischen Elementen ist, L die Länge (length) und N der Satz von natürlichen Zahlen ist. Obwohl es in dieser Gleichung nicht explizit definiert ist, ist die Burstordnung durch i definiert, das von 0 zu L – 1 inkrementiert. Somit kann ein Burst definiert sein durch das 3-Tupel von:
    (base_address, length, stride)
  • Bei einer Software kann ein Burst auch durch die Elementgröße definiert sein. Dies impliziert, daß ein Burst in Bytes, Halbwörtern oder Wörtern proportioniert sein kann. Die Einheiten einer Schrittweite müssen dies berücksichtigen. Ein „proportionierter Burst" ist definiert durch ein 4-Tupel in der Form:
    (base_address, length, stride, size)
  • Ein „Kanal-Burst" ist ein proportionierter Burst, bei dem die Größe die Breite (width) des Kanals zu einem Speicher ist. Der Kompilierer ist für das Abbilden von proportionierten Softwarebursts in Kanalbursts verantwortlich. Der Kanalburst kann definiert sein durch das 4-Tupel:
    (base_address, length, stride, width)
  • Falls die Kanalbreite 32 Bits (oder 4 Bytes) beträgt, ist der Kanalburst immer in der Form:
    (base_address, length, stride, 4)
    oder abgekürzt zu dem 3-Tupel (base_address, length, stride)
  • Die Steuerung dieses Speichers und die Zuteilung (und ein Freilassen) von Burstpuffern kann entweder durch einen Software- oder einen Hardwareprozeß bei einem höheren Pegel gehandhabt werden. Dieser Prozeß kann andere Architekturmerkmale umfassen, wie beispielsweise das automatische Umbenennen von Burstpuffern.
  • Ein spezifisches Ausführungsbeispiel der Erfindung wird nun durch ein nicht-einschränkendes Beispiel mit Bezug auf die beiliegenden Zeichnungen beschrieben, in denen:
  • 1 ein Blockdiagramm eines ersten Ausführungsbeispiels eines Computersystems gemäß der vorliegenden Erfindung ist;
  • 2A bis 2D vier Weisen zeigen, auf die ein Burstpufferspeicher und eine Burstbefehlswarteschlange in dem System von 1 unter einer Hardware- oder einer Softwaresteuerung konfiguriert sein können;
  • 3 ein schematisches Diagramm einer Burstpufferarchitektur bei einem zweiten Ausführungsbeispiel eines Computersystems gemäß der vorliegenden Erfindung ist;
  • 4 ein schematisches Diagramm der Puffersteuerung von 3 ist;
  • 5 ein schematisches Diagramm ist, das die Funktion von Steuerregistern in der Burstpufferarchitektur von 3 darstellt;
  • 6 ein Diagramm ist, das die unterschiedlichen Schritte bei der Ausführung eines Burstbefehls durch die Burstpufferarchitektur von 3 darstellt; und
  • 7 ein Abhängigkeitsgraph ist, der einem Quellcode zugeordnet ist, der zu einer Kompilierung zu einem Computersystem gemäß der Erfindung transformiert ist.
  • Unter Bezugnahme auf 1 weist das Computersystem, wie es bekannt ist, folgende Merkmale auf: einen Prozessor 10, wie beispielsweise einen i960; einen Haupt-DRAM-Speicher 14, wie beispielsweise einen EDO DRAM, mit einer Hauptspeicherschnittstelle oder einer Zugriffssteuerung 16; einen kleinen SRAM-Befehlscache 18 mit einem Weg 20a von der Speicherschnittstelle 16 und einem Weg 20b zu dem Prozessor; einen SRAM-Datencache 19 mit einem Weg 21a zwischen dem Datencache 19 und der Speicherschnittstelle 16 und einem Weg 21b zwischen dem Datencache 19 und dem Prozessor 10; und einen Weg 22 zwischen dem Prozessor 10 und Speicherschnittstellen 16 für Cache-Umgehung-Prozessor-Lade- und -Speicher-Operationen. Einem bekannten Computersystem unähnlich ist auch ein Burstpuffersystem 24 bereitgestellt, wie dasselbe in der Zeichnung durch eine gestrichelte Linie eingeschlossen ist.
  • Das Burstpuffersystem 24 umfaßt: (1) eine Prozessorschnittstelle 12, z. B. einen Coprozessor für den Prozessor 10; (2) einen Burstpufferspeicher 26, der durch eine feste Größe eines SRAM bereitgestellt ist, z. B. 2 kBytes; (3) einen Bereichskomparator 28, der Speicheranforderungen von dem Prozessor 10 annehmen und (für den Prozessor 10) transparent bestimmen kann, ob die erforderlichen Daten in dem Burstpufferspeicher 26 gelegen sind, oder ob ein Zugriff auf den Hauptspeicher 14 einzuleiten ist, um die Daten abzurufen; (4) eine Burstbefehlswarteschlange 30 in der Form von zumindest einem FIFO, der Burstbefehle von dem Prozessor 10 empfangen kann; (5) eine Burststeuerung 32, die betreibbar ist, um den aktuellen Systemstatus zu bewerten, den nächsten relevanten Burstbefehl aus der Burstbefehlswarteschlange 30 zu extrahieren und diesen Befehl oder diese Anforderung zu dem Hauptspeicher 14 auszugeben; (6) einen Parameterspeicher 34, der Parameter hält, die sich auf Burstübertragungen beziehen und die durch einige spezifische Burstbefehle aktualisiert werden können; (7) Datenwege 36a bis 36d für die Bewegung von Daten zwischen dem Burstpufferspeicher 26 und dem Prozessor und Speicherschnittstellen 12, 16, einschließlich eines Datenwegs 36d, der den Burstpufferspeicher 26 für verfehlte Daten umgeht; und (8) Steuerwege 38a bis 38f für die Bewegung von Statusinformationen und Burstbefehlen innerhalb des Burstpuffersystems 24 und zu dem Prozessor und zu Speicherschnittstellen 12, 16.
  • Wie es in 2A bis 2D gezeigt ist, ist der Burstpufferspeicher 26 als eine auswählbare Anzahl von Puffern 40 konfigurierbar: Z. B. als ein einziger 2-kByte-Puffer 40(0), wie es in 2A gezeigt ist; als ein Paar von 1-kByte-Puffern 40(0), 40(1), wie es in 2B gezeigt ist; als vier 512-Byte-Puffer 40(0) bis 40(3), wie es in 2C gezeigt ist; und als acht 256-Byte-Puffer 40(0) bis 40(7), wie es in 2D gezeigt ist. Ferner kann jeder Puffer als ein Eingangspuffer von dem Hauptspeicher 14 zu dem Prozessor 10 (z. B. wie für die Puffer 40(2), 40(3) in 2C), als ein Ausgangspuffer von dem Prozessor 10 zu dem Hauptspeicher 14 (z. B. wie für die Puffer 40(0), 40(1) in 2C) oder als ein bidirektionaler Puffer (z. B. wie für den Puffer 40(0) in 2A) angeordnet sein. Die Burstbefehlswarteschlange 30 ist konfiguriert, um die gleiche Anzahl von FIFOs 42 wie die Anzahl von Burstpuffern 40 aufzuweisen, einen für jeden Burstpuffer 40. Die Konfiguration von 2A würde verwendet, wenn es einen Datenstrom gibt, von 2B, wenn es zwei Datenströme gibt, von 2C, wenn es drei oder vier Datenströme gibt, und von 2D, wenn es zwischen fünf und acht Datenströme gibt. Bei einer alternativen Anordnung kann ein einziger Burstbefehlswarteschlange-FIFO 42 verwendet werden, wie auch immer die Anzahl von Burstpuffern 40 ist.
  • Der Prozessor 10 kann an normalen i960-Befehlen wirksam sein, wie beispielsweise dem Laden-Befehl „ld", der mit den Parametern desselben folgende Form annimmt:
    ld (g5), r4
  • Dies befiehlt dem Prozessor, das Datenwort abzurufen, auf das durch die Adresse in dem Register desselben g5 gezeigt wird, und dieses Datenwort in das Register r4 desselben zu plazieren. Bei einem Ausführungsbeispiel der Erfindung jedoch ist der Befehlssatz erweitert, um einen äquivalenten „Loadburst"-Befehl (Ladeburst-Befehl) zu umfassen, der mit den Parametern desselben folgende Form annimmt:
    Loadburst src, stride, size, buf
  • Dies bewirkt, daß ein Burst von size (Größe) Datenwörtern in dem Speicher 14 zu demjenigen der Eingangs- oder bidirektionalen Burstpuffer 40(buf) übertragen wird, der die Identität buf aufweist, beginnend bei einer Adresse src in dem Speicher 14, und wobei Adressen durch stride (Schrittweite) Speicherpositionen inkrementieren. Es gibt auch einen entsprechenden „Storeburst"-Befehl (Speicherburst-Befehl), der mit den Parametern desselben folgende Form annimmt:
    Storeburst buf, src, stride, size
  • Dies bewirkt, daß ein Burst von size Datenwörtern von demjenigen der Ausgangs- oder bidirektionalen Burstpuffern 40(buf), der die Identität buf aufweist, zu dem Speicher 14 übertragen wird, beginnend bei einer Adresse src in dem Speicher 14, und wobei Adressen um stride Speicherpositionen inkrementieren.
  • Die Befehle Loadburst und Storeburst unterscheiden sich von normalen Laden- und Speichern-Befehlen dadurch, daß dieselben in einem einzigen Zyklus abschließen, selbst wenn die Übertragung nicht aufgetreten ist. Im wesentlichen sagen der Loadburst- und der Storeburst-Befehl der Speicherschnittstelle 16, den Burst durchzuführen, aber dieselben warten nicht darauf, daß der Burst abschließt.
  • Bei dem obigen System muß die Speicherschnittstelle 16 innerhalb einer Vernunft in der Lage sein, Burstanforderungen mit einer jeglichen Größe und Schrittweite zu bedienen. Es muß ferner einen hohen Grad einer Kopplung zu dem Mikroprozessor 10 geben, wobei die beste Lösung eine kombinierte Integration auf dem gleichen Chip ist. Speicheranforderungen von dem Prozessor 10 können auf mehrere Weisen durchgeführt werden, wobei zwei sind: (a) ein Verwenden eines speicherabgebildeten Registers für die Burstbefehlswarteschlange 30; und (b) ein Verwenden einer Coprozessorschnittstelle, um die Laden-/Speichern-Mechanismen zu umgehen. Die letztere derselben ist bevorzugt, aber erfordert Architekturmerkmale, die nicht immer in einem Prozessor vorliegen. Ein Verwenden des letzteren Modells erfordert auch die Definition und Verwendung von neuen Prozessorbefehlen.
  • Einer der Hauptvorteile eines Cache ist derselbe einer transparenten Korrektheit. Die korrekten Daten werden immer zu dem Prozessor gegeben und in dem Hauptspeicher aktualisiert, wann immer es geeignet ist, wobei Hardwareverfahren verwendet werden, die für den Prozessor unsichtbar sind. Das Burstpuffersystem 24 liefert ebenfalls eine ähnliche Funktionalität.
  • Bei dem obigen System sind die Daten in einem Burstpuffer 40 von einer Region des Hauptspeichers 14 kopiert. Die Positionsinformationen (d. h. Adresse, Schrittweite, etc.) werden mit einer jeglichen Speicheranforderung von dem Prozessor 10 verglichen, um zu bestimmen, ob dieselbe in den jeweiligen Puffer 40 trifft. Der Vergleich kann auf mehrere Weisen durchgeführt werden: Alle Adressen in dem Puffer 40 könnten gehalten und assoziativ durch den Be reichskomparator 28 mit einer Prozessoradresse (wie für normale Cache-Kennungen) verglichen werden; und eine Gleichung, die die Adressen in dem Puffer spezifiziert, kann durch den Bereichskomparator 28 unter Verwendung der Prozessoradresse untersucht werden, um zu sehen, ob dieselbe eine Lösung ist. Das erstere ist teuer (und wird für eine höhere Geschwindigkeit noch teuerer), während das letztere kostengünstig und schnell ist, aber die Schrittweite auf zweite Potenzen beschränkt, um ein zufriedenstellendes Verhalten zu erhalten.
  • Eine Lese-Operation trifft in einen Puffer 40, falls der Adreßbereichsvergleich wahr ist. In diesem Fall wird das Datum sehr schnell von dem Puffer zu dem Prozessor zurückgegeben. Ein Lesen-Fehltreffer jedoch bewirkt, daß das erforderliche Datum direkt von dem Hauptspeicher 14 extrahiert wird, wobei der Burstpufferspeicher 26 umgangen wird. Falls jedoch das Datum in einem Bereich liegt, der aktuell geladen wird, wird die Lese-Operation „angehalten" oder „blockiert", bis der Bereich geladen ist, und dann wird dasselbe von dem Puffer 40 extrahiert und zu dem Prozessor 10 weitergegeben. (Bei einer Modifizierung würde das Datum weitergegeben, sobald dasselbe empfangen wurde, um eine Latenz einzusparen). Falls das Datum sich in einem Burst befände, der erteilt werden soll, dann kann die Lese-Operation wieder blockiert werden, bis der Burst durchgeführt ist, um zu verhindern, daß das Datum zweimal in naher Aufeinanderfolge gelesen wird.
  • Ein Schreiben-Treffer bewirkt, daß das Datum in dem jeweiligen Puffer 40 aktualisiert wird. Der Hauptspeicher 14 wird zu dieser Zeit nicht aktualisiert, aber eine Kohärenz mit dem Hauptspeicher 14 wird unter einer Softwaresteuerung durch ein Durchführen eines Storeburst irgendwann später erreicht. Ein Schreiben-Fehltreffer bewirkt jedoch, daß das Datum in dem Hauptspeicher 14 direkt aktualisiert wird, wenn nicht ein Storeburst, der das gleiche Datum enthält, ansteht oder aktiv ist. In diesem Fall wird die Schreib- Operation blockiert, bis nachdem der Storeburst abgeschlossen hat.
  • Die Burststeuerung 32 zu einem Erteilen von Befehlen an die Speicherschnittstelle 16 kann einen Mechanismus verwenden, der als „Verschiebung" bezeichnet wird. Dies bedeutet, daß die Zeit, zu der der Befehl erteilt wird, bis zu einer gewissen späteren Zeit oder einem Ereignis verschoben wird. Falls z. B. der nächste Befehl ein Storeburst-Verschoben-16Zugriff wäre, würde dieselbe warten, bis 16 Zugriffe in den Burstpuffer abgeschlossen wurden, und dann automatisch das Speichern erteilen. Andere Verschiebungsmechanismen können basieren auf: Einer Zeit (d. h. Zählzyklen); Ereignissen, wie beispielsweise externen Unterbrechungen; und Puffer-Voll/Leer-Indikatoren. Ein Verwenden einer Verschiebung an einem Zugriffszählwert ist ein starkes Merkmal des Burstpuffersystems 24, weil dasselbe ein Entkoppeln des Programmflusses und die Erteilung von Befehlen an die Speicherschnittstelle 16 erlaubt.
  • Die Burstpuffersteuerung 32 liefert Statusinformationen zurück zu dem Prozessor 10 auf einem Weg 38f. Dieselbe liefert auch einen eindeutigen Pufferidentifizierer, so daß eine softwaregesteuerte Pufferzuteilung und ein logisches Pufferumbenennen implementiert werden können.
  • Falls die Länge eines Burst länger als die Größe des jeweiligen Puffers 40 ist, besteht eine Prozedur darin, die Burstlänge abzuschneiden, so daß dieselbe die gleiche wie diese des Puffers 40 ist. Bei einer modifizierten Prozedur jedoch wird ein viel längerer Strom durch den Puffer in Bursts eingebracht. Ein einziger Befehl, wie beispielsweise loadstream-Verschoben-32Zugriff, könnte verwendet werden, um einen viel längeren Strom in Brocken der Größe des Burstpuffers einzubringen, wobei jeder Brocken durch den nächsten ersetzt wird, nachdem die spezifizierte Anzahl von Zugriffen vorgenommen wurde.
  • Es kann auch ein Zugriffsmodus unterstützt werden, der für den Prozessor 10 nicht transparent ist. Es ist am einfachsten, dies als einen Zuerst-Hinein-Zuerst-Hinaus-(FIFO- = first-in-first-out)Puffer zu beschreiben. In diesem Fall greift der Prozessor 10 auf den Puffer 40 unter Verwendung einer einzigen Adresse zu, die bei Lese-Operationen das erste Element von dem Burstpuffer 40 „entnimmt". Nachfolgende Lese-Operationen arbeiten nach unten durch den gesamten Puffer. Begriffe von voll und leer kommen nun ins Spiel. Eine allgemeinere Erweiterung davon ist, ein „Fenster" an dem Puffer 40 bereitzustellen. Dieses Fenster erlaubt wirksam einen relativen Zugriff auf den Puffer. Nach einer festen Anzahl von Zugriffen in diesem Fenster (oder bei einem gewissen anderen Auslöser) wird das Fenster vorbewegt, derart, daß die Position desselben über einem anderem Datum zentriert ist. Die Größe einer Vorbewegung kann programmiert sein. Dies kann ein „Drehfenster"-Verfahren genannt werden und viele Implementierungen sind möglich.
  • Es folgt nun eine genauere Beschreibung der Operation des Burstpuffersystems 24.
  • Die Daten in dem Puffer 40 werden durch ein Vergleichen der angeforderten Adresse mit dem Ergebnis aus Berechnungen unter Verwendung von Startadreß-, Längen- und Schrittweiteninformationen geprüft, um gültig zu sein. Es gibt keine Beschränkungen auf Längen- und Schrittweitenwerte (außer einer Registergröße). Bei normalen Loadburst- und Storeburst-Befehlen jedoch, wird, falls die Länge größer als die Puffergröße ist, dieselbe abgeschnitten. Der aus dem Register zurückgelesene Wert ist der abgeschnittene Wert. Der Bereichsvergleich kann ziemlich langsam sein, wenn nicht auch Adreßkennungen verwendet werden. Ein Bereichsprüfen betrachtet lediglich die Wortadresse, so daß Bits 0 und 1 ignoriert werden.
  • Ein Lesen-Treffer in dem Puffer 40 bewirkt, daß das Datenelement wiedergewonnen wird. Ein Fehltreffer bewirkt einen Abruf von dem Hauptspeicher 14.
  • Ein Schreiben-Treffer bewirkt, daß der geeignete Puffer 40 aktualisiert wird. Ein Schreiben-Fehltreffer aktualisiert den Hauptspeicher 14 direkt. Eine Kohärenz ist dadurch beibehalten, daß schließlich der komplette Puffer 40 zurück zu dem Hauptspeicher 14 geschrieben wird.
  • Alle Daten, die einen Puffer 40 verwenden können, können als „nicht-cachebar" markiert sein, um Kohärenzpunkte zu verhindern, die sich ergeben würden, falls diese Daten auch in einem Datencache wären. Dies bedeutet, daß der Datencache von Zeilenzugriffen in der gleichen Region eines Speichers eingeschränkt sein muß, die Daten für die Puffer 40 enthält.
  • Jedem Puffer 40 ist ein Statusregister zugeordnet, das gelesen werden kann. Dies enthält ein gültiges Bit, das angibt, ob der Puffer in Verwendung ist oder nicht. Die Software kann diese Flags untersuchen, um zu bestimmen, welche Puffer verfügbar sind. Andere Statusinformationen, einschließlich eines aktuellen Operationsstatus, sind auch verfügbar.
  • Zugriffe auf ungültige Puffer bewirken einfach, daß normale Speicher-Lade- und -Speicher-Operationen erzeugt werden. Der Gültigkeitsmechanismus ist für eine Software transparent.
  • Ein Loadburst-Befehl, der zu der Warteschlange 30 geschrieben ist, bewirkt, daß der Zielpuffer mit einem Burst der spezifizierten Charakteristika gefüllt wird. Bei einem Erteilen des Loadburst-Befehls wird der Puffer für vollständig ungültig erklärt, bis die Füll-Operation abgeschlossen ist. Jegliche Daten, die in dem Puffer gehalten sind, sind unwiedergewinnbar verloren.
  • Ein Storeburst-Befehl bewirkt, daß der Zielpuffer mit einem Burst der spezifizierten Charakteristika geleert wird. Bei einem Erteilen des Storeburst-Befehls wird der Puffer verriegelt (d. h. alle Zugriffe sind verhindert) und wird zu einem Speicher kopiert. Der Puffer wird dann für ungültig erklärt.
  • Sowohl der Loadburst- als auch der Storeburst-Befehl können verschoben werden. Dies bedeutet, daß jedem Befehl ein Zählwert zugeordnet ist, der die Anzahl von Lese- und Schreib-Operationen beschreibt, die durchgeführt werden müssen, um die Operation auszulösen. (Andere Optionen umfassen Takt-Ticks und Befehlszählwerte). Dies bedeutet, daß ein Storeburst, der um 16 Zugriffe verschoben ist, einem Puffer erteilt werden könnte. Die Puffersteuerung würde dann 16 Zugriffe auf den Puffer warten, an welchem Punkt der Puffer geleert wird.
  • Ein Puffer kann durch einen „Allocbuffer"-Befehl gültig gemacht werden. Dieser Befehl ist dem Loadburst-Befehl darin ähnlich, daß derselbe Adreßinformationen zu dem Bereichsberechner liefert, aber keine Lade-Operation jeglicher Daten bewirkt. Dies ermöglicht es, daß ein Puffer gefüllt wird, wobei Prozessor-Schreib-Operationen verwendet werden, anstelle daß ein vorhergehender Loadburst benötigt wird. Der Allocbuffer-Befehl resultiert darin, daß der Puffer gültig gemacht wird. Die in dem Puffer enthaltenen Daten bleiben unverändert, dies bedeutet, Puffer voll von Daten können über einer unterschiedlichen Speicherregion wieder abgebildet werden.
  • Es gibt einen äquivalenten „Freebuffer"-Befehl. Dies erklärt den Puffer einfach für ungültig, wobei der Inhalt desselben unverändert gelassen wird. Ein nachfolgender Allocbuffer-Befehl könnte den Puffer zu dem vorhergehenden Zustand desselben wiederherstellen.
  • Der Prozessor hält unter mehreren Bedingungen an: (1) Die Pufferbefehlswarteschlange ist voll und ein Burstbefehl ist erteilt; (2) ein Burstbefehl ist in Ablauf und ein Zugriff auf den Zielpuffer ist angefordert; (3) ein Burstbefehl fehlt in dem Puffer und ein normaler Speicherzugriff muß durchgeführt werden.
  • Falls die für eine Übertragung spezifizierte Länge geringer als die Länge des Puffers ist, dann wird ein teilweiser Zugriff durchgeführt und die unbenutzten Positionen in dem Puffer sind undefiniert.
  • Burstübertragungen sind darin eingeschränkt, daß dieselben sich immer in der Reihenfolge leeren, die durch den Burstbefehl impliziert ist. Teilweise Zugriffe beginnen immer bei der ersten Position in dem Puffer.
  • Da Schrittweiten eine mit Vorzeichen versehene Größe sind, ist die Reihenfolge der Burstdaten immer sequentiell, aber entweder aufsteigend oder absteigend.
  • Die Anzahl von durch eine spezielle Anwendung oder ein System erforderlichen Puffern variiert abhängig von den Verhaltensbedürfnissen, der Anzahl von Strömen, die unterstützt werden müssen, etc.
  • Befehle werden lediglich bei einem Abschluß des vorherigen ausgeführt.
  • Ein „Storeburst-Value-0"-Befehl kann ausgegeben werden, der bewirkt, daß die Zielspeicherregion mit Nullen gefüllt wird. Der Burstpuffer selbst wird nicht auf Null gesetzt, sondern ein getrennter Datenweg schreibt den Wert 0 zu dem Hauptspeicher. Bei einer Erweiterung dazu kann es ermöglicht sein, daß ein jeglicher Wert spezifiziert wird, und ein Register ist bereitgestellt, das auf den erforderlichen Wert gesetzt ist.
  • Ein „Loadburst-Value-0"-Befehl bewirkt, daß der Puffer mit Nullen gefüllt (d. h. gelöscht) wird. Obwohl kein Speicherverkehr erzeugt wird, wird diese Operation auf die gleiche Weise ausgeführt und dauert länger als ein Zyklus. Als solches sollte dieselbe genau wie ein jeglicher anderer Loadburst-Befehl gehandhabt werden.
  • Vorausgesetzt, die Anwendung kann garantieren, daß ein Datenstrom die folgenden Bedingungen einhält, kann derselbe automatisch in einen Speicher gebracht werden, wobei die Speichersteuerung den Strom in Bursts zergliedert. Die Bedingungen sind: (1) Jedes Datenelement wird sequentiell eingebracht; (2) jedes Datenelement wird entweder genau einmal oder gemäß einem vorbestimmten Verwendungsmuster verwendet; (3) ein Verarbeiten des Stroms in Brocken der Puffergröße ist aufgenommen. Falls diese Bedingungen eingehalten werden, kann ein Schreiben-Strom oder ein Lesen-Strom in Burstbefehle zerlegt werden, die durch die geeignete Anzahl von Zugriffen verschoben sind. Während die der Burstübertragung zugeordnete Länge normalerweise zu der Puffergröße abgeschnitten ist, interpretiert ein Verwenden der Loadburst-Strom- und Storeburst-Strom-Befehle die Länge als die Stromlänge. Diese Befehle können auch anfänglich verschoben werden, aber dies beeinflußt lediglich den Anfang der ersten Burstübertragung. Nachfolgende Bursts werden automatisch um die Größe des Puffers verschoben.
  • Ein „Burstabort"-Befehl kann verwendet werden, um eine Burstübertragung abzubrechen. Die Funktionalität desselben ist darin eingeschränkt, daß derselbe einen im Gange befindlichen Burst nicht beenden kann. Falls jedoch der Burst anstehend ist (d. h. verschoben), wird derselbe abgebrochen. In einem jeglichen Fall wird der Puffer immer ungültig gemacht. Der echte Gebrauch desselben ist zu einem Beenden eines Stromzugriffs, in welchem Fall der Strom bei dem Ende des aktuellen Bursts oder sofort wenn der Burst anstehend ist, beendet wird.
  • Unter jetziger Betrachtung der Firmware-Schnittstelle des Systems sind jedem Burstpuffer 40 vier Register zugeordnet. Diese Register sind speicherabgebildet und auf dieselben kann durch den Prozessor mit Einzel-Zyklus-Lade-Operationen und -Speicher-Operationen zugegriffen werden. Die Registernamen sind: 1. Basis_Adresse (base_address); 2. Länge (length); 3. Schrittweite (stride); und 4. Steuerung/Status (control/status). Die ersteren drei Register enthalten die Parameter, die für Burstbefehle verwendet werden. Die Burstbefehle werden zu dem Steuerregister geschrieben und Statusinformationen können durch ein Lesen des Steuerregisters erhalten werden. Alle Register sind ein Wort breit (d. h. 32 Bit bei dieser Implementierung). Jedes Register wird unten nacheinander beschrieben. Um die Relevanz der Register zu verstehen, ist es notwendig, die Funktion zu definieren, die verwendet wird, um Daten in einem Burst abzurufen. Jedes Element, i, in einer Burstübertragung wird von einer Adresse in dem Hauptspeicher abgerufen, gegeben durch die folgende Gleichung: Address[i] = base_address + (i – 1)*stride (Gleichung 1)wobei i von 1 bis Länge reicht.
  • Bevor ein jeglicher Burstbefehl erteilt wird, muß mit Bezug auf das Basis_Adresse-Register das Basis_Adresse-Register initialisiert werden. Wenn ein Burstbefehl erteilt wird, wird die Basisadresse verwendet, um die Datenadressen zu berechnen. Die Basisadresse wird niemals automatisch geändert, selbst für Stromzugriffe.
  • Schreib-Operationen zu dem Basis_Adresse-Register, wenn ein Puffer gültig ist, machen diesen Puffer ungültig. Das Register selbst ist durch eine Hardware beschattet, um sicherzustellen, daß jegliche aktive Bursts korrekt abgeschlossen werden, selbst wenn dieselben nachfolgend für ungültig erklärt werden.
  • Die Basisadresse ist in Bytes spezifiziert und muß wortausgerichtet sein. Falls dieselbe es nicht ist, wird der Wert automatisch abgeschnitten und kein Runden wird durchgeführt. Der von dem Register gelesene Wert ist unverändert.
  • Bevor ein jeglicher Burstbefehl erteilt wird, muß mit Bezug auf das Länge-Register das Länge-Register initialisiert werden. Wenn ein Burstbefehl erteilt wird, wird die Länge verwendet, um die Datenadressen zu berechnen. Für Nicht-Strom-Bursts ist das Länge-Register auf Längen beschränkt, die weniger als oder gleich der Burstpufferlänge sind. Falls ein Burstbefehl erteilt wird und der Wert des Länge-Registers dieses Kriterium überschreitet, wird dieselbe automatisch zu der Pufferlänge abgeschnitten. Diese Abschneidung tritt auf, wenn der Burstbefehl erteilt wird, nicht wenn die Schreib-Operation zu dem Länge-Register auftritt. Der abgeschnittene Wert ist der Wert, der nachfolgend von diesem Register gelesen wird.
  • Für Stromzugriffe spezifiziert das Länge-Register die Länge der Gesamtstromübertragung.
  • Schreib-Operationen zu dem Länge-Register, wenn ein Puffer gültig ist, machen diesen Puffer ungültig. Das Register selbst ist durch eine Hardware beschattet, um sicherzustellen, daß jegliche aktive Bursts korrekt abgeschlossen werden, selbst wenn dieselben nachfolgend für ungültig erklärt werden.
  • Die Übertragungslänge wird in Bytes gemessen, aber ist darauf beschränkt, ein mehrfaches von Wörtern zu sein (d. h. 4 Bytes). Werte, die nicht mit Wortgrenzen ausgerichtet sind, werden abgeschnitten und kein Runden wird durchgeführt. Der von dem Register gelesene Wert ist unverändert.
  • Bevor ein jeglicher Burstbefehl erteilt wird, muß mit Bezug auf das Schrittweite-Register das Schrittweite-Register initialisiert werden. Wenn ein Burstbefehl erteilt wird, wird die Schrittlänge verwendet, um die Datenadressen zu berechnen. Die Schrittlänge wird niemals automatisch verändert, selbst für Stromzugriffe.
  • Schreib-Operationen zu dem Schrittweite-Register, wenn ein Puffer gültig ist, machen diesen Puffer ungültig. Das Register selbst ist durch eine Hardware beschattet, um sicherzustellen, daß jegliche aktive Bursts korrekt abgeschlossen werden, selbst wenn dieselben nachfolgend für ungültig erklärt werden.
  • Die Schrittlänge wird in Bytes gemessen, aber ist darauf beschränkt, ein mehrfaches von Wörtern zu sein (d. h. 4 Bytes). Werte, die nicht mit Wortgrenzen ausgerichtet sind, werden abgeschnitten und kein Runden wird durchgeführt. Der von dem Register gelesene Wert ist unverändert.
  • Mit Bezug auf das Steuerung/Status-Register sind alle Burstbefehle Aliase von Schreib-Operationen zu dem Steuerregister. Die bei diesen Zugriffen verwendeten Daten sind gemäß den für jeden Befehl definierten Formaten organisiert. Die ersten drei Bits des Wortes werden verwendet, um den Befehl zu identifizieren.
  • Nun wird eine Beschreibung der verschiedenen Burstbefehle abgegeben. Zuerst wird ein „Allocbuffer"-Befehl verwendet, um einen Puffer zu konfigurieren, um einen Bereich eines Speichers abzubilden. Kein Burst wird durchgeführt, aber der Puffer wird gültig gemacht und ein Bereichsprüfen wird durchgeführt. Die Länge der Übertragung muß geringer als oder gleich der Größe des Puffers sein. Werte, die größer als dies sind, werden automatisch auf die Puffergröße abgeschnitten. Ein Bereichsprüfen führt einen Vergleich mit dem Satz von Adressen, der gemäß Gleichung 1 oben erzeugt ist, durch. Das Format des Datenworts, das verwendet wird, um diesen Befehl zu erteilen, ist:
    Allocbuffer: [000][29 reservierte Bits]
  • Weil die Daten in einem Puffer durch eine Ungültigkeitserklärung in einem Puffer verbleiben, kann ein Puffer durch ein Ändern der Pufferparameter und Erteilen eines zweiten Allocbuffer-Befehls „neu abgebildet" werden.
  • Ein „Burstabort"-Befehl („Burstabbruch") wird verwendet, um Burstbefehle abzubrechen. Ein Burst von einem Speicher in einen Puffer kann nicht abgebrochen werden, wenn derselbe in Gang ist. Ein verschobener Burst kann jedoch abgebrochen werden, während derselbe anstehend ist, und ein Loadstream-Befehl kann an einer Burstgrenze abgebrochen werden. In allen Fällen wird der Puffer ungültig gemacht. Jegliche Daten in dem Puffer bleiben unverändert. Das Format für diesen Befehl ist:
    Burstabort: [001][29 reservierte Bits]
  • Ein „Freebuffer"-Befehl wird verwendet, um den zugeordneten Puffer für ungültig zu erklären. Keine Parameter werden verwendet. Das Format ist:
    Freebuffer: [010][29 unbenutzte Bits]
  • „Loadburst"- und „Storeburst"-Befehle werden verwendet, um einen Burst von Daten in den Burstpuffer abzurufen bzw. um einen Burst von Daten in einen Hauptspeicher zu schreiben. Die Länge der Übertragung muß geringer als oder gleich der Größe des Puffers sein. Werte, die größer als dies sind, werden automatisch auf die Puffergröße abgeschnitten. Die Burstadressen werden gemäß der Gleichung 1 oben erzeugt. Die Formate der Datenwörter, die verwendet werden, um diese Befehle auszugeben, sind:
    Loadburst: [011][V][12 reservierte Bits][16 Bit Verschiebung_Zählwert]
    Storeburst: [100][V][12 reservierte Bits][16 Bit Verschiebung-Zählwert]
    wobei V ein Wertbit ist und angibt, ob die Daten, die in den Puffer geladen sind, alle Nullen (V = 1) oder echte Daten von einem Speicher (V = 0) sind. Die unteren 16 Bits sind der Verschiebungszählwert. Falls dieser Wert größer als 0 ist, wird die Burstoperation verschoben, bis verschiebung_Zählwert-Zugriffe auf den Puffer gemacht wurden. Diese Zugriffe sind entweder Lese-Operationen oder Schreib-Operationen. Übertragungen sind immer wortausgerichtet, sowohl in Startadresse, Länge als auch Schrittweite.
  • „Loadstream"- und „Storestream"-Befehle („Ladestrom" bzw. „Speicherstrom") werden verwendet, um einen kompletten Datenstrom in den Puffer zu bringen bzw. einen kompletten Datenstrom von dem Puffer zu kopieren. Die Länge des Stroms ist in dem Länge-Register definiert und auf 232 Bytes begrenzt. Die Pufferverwaltungseinrichtung zergliedert den Strom automatisch in einen Satz von Bursts, die von einem Speicher zu dem Puffer bzw. zu einem Speicher von dem Puffer übertragen werden. Das Füllen des Puffers ist automatisch durch eine Hardware koordiniert. Burstgrenzen werden unter Verwendung des Verschiebungszählwerts erfaßt. Dies bedeutet, daß ein Puffer durch den nächsten Puffer in der Sequenz nach einer vordefinierten Anzahl von Zugriffen ersetzt wird. Es ist kein anderer Mechanismus zu einem Durchlaufen des Stroms verfügbar, aber es ist möglich, Mechanismen zu betrachten, die den Strom unter Verwendung eines anderen Befehls vorbewegen. Für einen Strom einer Länge von L Bytes gibt es L/4S Bursts einer Länge S über einem Speicherbus mit einer Breite von 4 Bytes plus einen Burst, um den Rest einzubringen bzw. um den Rest hinauszukopieren. Die Länge muß ein Mehrfaches von 4 Bytes sein oder wird zu dem nächsten Mehrfachen abgerundet. Ein Loadstream-Wert 0 lädt kontinuierlich Nullen in den Puffer und bewirkt keine echten Speicherzugriffe. Ein Storestream-Wert 0 lädt kontinuierlich Nullen in einen Speicher. Die Formate für diese Befehle sind:
    Loadstream: [101][V][12 reservierte Bits][16 Bit Verschiebung_Zählwert]
    Storestream: [110][V][12 reservierte Bits][16 Bit Verschiebung_Zählwert]
    wobei V ist, wie es oben definiert ist. Die unteren 16 Bits sind der Verschiebungszählwert.
  • Ein „Querystatus"-Befehl („Abfragestatus") wird verwendet, um die Bedingung des zugeordneten Burstpuffers zu bewerten. Es ist der einzige Lesen-Befehl, der für die Puffer unterstützt wird. Der zurückgegebene Wert ist 0, falls der Puffer nicht zugeteilt ist, und 1, falls es derselbe ist. Informationen bezüglich der aktuellen Abbildung können durch ein Lesen der anderen Register erhalten werden. Keine anderen Informationen sind verfügbar.
  • Ein zweites Ausführungsbeispiel eines Computersystems gemäß der vorliegenden Erfindung ist in 3 und 4 gezeigt. Bei diesem Ausführungsbeispiel ist die Cache-ähnliche Schnittstelle des ersten Ausführungsbeispiels durch eine Schnittstelle ersetzt, die um ein Paar von Tabellen basiert: Eine Speicherzugriffstabelle (MAT = Memory Access Table), die Regionen eines Hauptspeichers zu einem Bursten zu und von dem Burstpufferspeicher beschreibt, und eine Pufferzugriffstabelle (BAT = Buffer Access Table), die Bereiche eines Burstpufferspeichers beschreibt. Bei diesem Ausführungsbeispiel wird ein homogener Bereich eines Doppeltor-SRAM für die Burstpuffer verwendet.
  • Die Hauptmerkmale der Architektur des zweiten Ausführungsbeispiels sind in 3 gezeigt. Wo Merkmale im wesentlichen denselben des ersten Ausführungsbeispiels ähnlich sind, wurden die gleichen Bezugszeichen verwendet. Burstbe fehle werden von der Prozessorschnittstelle 12 mittels einer Burstbefehlswarteschlange 30 geliefert. Befehle von der Burstbefehlswarteschlange 30 werden durch eine Puffersteuerung 54 verarbeitet, um auf Schlitze in der MAT 65 und der BAT 66 Bezug zu nehmen. Die Puffersteuerung empfängt auch Steuereingangssignale von acht Burststeuerregistern 52. In diesen zwei Tabellen enthaltene Informationen werden bei einer Ausführungszeit zusammengebunden, um eine komplette Hauptspeicher-zu-Burstpuffer-Transaktion zu beschreiben. Ausgangssignale werden der Puffersteuerung 54 zu einer Direktspeicherzugriff-(DMA-)Steuerung 56 (DMA = Direct Memory Access) und somit zu einer Speicher-Datenweg-Entscheidungseinheit 58 geliefert, um Transaktionen zwischen dem Hauptspeicher 14 und dem Burstpufferspeicher 26 zu bewirken.
  • Bei diesem Ausführungsbeispiel ist der Burstpufferspeicher 26 als ein Doppeltor-SRAM mit 2 KB bereitgestellt. Ein Tor des SRAM liegt in dem Prozessorspeicherraum und kann für einen schnellen Prozessorzugriff verwendet werden. Damit diese Architektur vorteilhaft ist, ist es lediglich notwendig, daß ein Zugriff von dem Burstpufferspeicher 26 erheblich schneller als ein Zugriff von dem Hauptspeicher 14 ist: Ein Einzel-Zyklus-Prozessorzugriff auf den Burstpufferspeicher 26 ist jedoch besonders vorteilhaft. Die Funktion des anderen Tors besteht darin, Direktspeicherzugriffsübertragungen zwischen einem Hauptspeicher und dem SRAM zu erlauben, wie es oben angegeben ist. Einzelne Puffer innerhalb des Burstpufferspeichers 26 sind in Pufferregionen gehalten, die durch die Pufferadresse und die Länge desselben definiert sind. Es ist erwünscht, daß ein Byte-, Halbwort- und Wort-Zugriff (Dynamic Bus Sizing) an dem Prozessortor unterstützt wird: Dies ist auch an dem DMA-Tor erwünscht aber weniger notwendig. Diese Doppelübertragung ermöglicht es, daß Bursts zu und von einem Hauptspeicher gleichzeitig mit Zugriffen von dem Prozessor betrieben werden. Falls es keine geeigneten Sperrungen oder einen Prioritätsmechanismus gibt, muß eine Software Schreiben-Konflikte zu der gleichen SRAM-Position verhindern.
  • Der SRAM muß proportioniert sein, um mehrere Ströme in einer Berechnung zu handhaben und um die mit langen Bursts verbundenen Bedürfnisse zu handhaben. Es ist herausgefunden, daß für eine große Anzahl von Anwendungen ein Bereitstellen von Betriebsmitteln, um acht Ströme zu handhaben, ausreichend ist: Wie es anderswo erörtert ist, ist es erwünscht, für jeden Strom zwei Puffer aufzuweisen: Einen für eingehende und ausgehende Ströme und den anderen für Ströme, die berechnet werden. Dies legt nahe, Platz für 16 Bursts zu finden. Es ist auch herausgefunden, daß 32 Bursts in etwa 80% der verfügbaren Bandbreite unter Verwendung von SDRAMs erreichen – bei einem 32-Bit breiten Weg zu einem Speicher resultiert dies in 128 Byte pro Burstpuffer und insgesamt 2 Kbytes eines SRAM, um 16 derartiger Puffer aufzunehmen.
  • Die Burststeuerregister 52 sind unten beschrieben.
  • Das Hauptpuffersteuerregister ist bufcntl. Dieses Register stellt eine zentralisierte Steuerung der Burstpufferarchitektur bereit. Die jedem Bit dieses Registers zugeordnete Funktionalität ist in Tabelle 1 unten dargelegt.
  • Figure 00280001
  • Figure 00290001
    Tabelle 1: Puffersteuerregisterdefinitionen
  • Das version-Register ist nur-Lesen und der Zweck desselben ist selbsterklärend.
  • Das sync-Register ist ein Nur-Lesen-Register, das verwendet wird, um den Prozessor absichtlich anzuhalten, bis die Burstbefehlswarteschlange leer wird. Ein Lesen dieses Register ist zu einem Synchronisieren zwischen Prozessorbefehlen und Burstbefehlen, die gleichzeitig ausführen, nützlich. Die praktische Verwendung des sync-Registers ist weiter unten beschrieben. Ein Lesen dieses Registers gibt einen von vier Werten zurück, wie es in Tabelle 3.4 gezeigt ist. Dieser Wert bezieht sich auf den letzten Burstbefehl, der vor dem sync-Befehl ausgeführt wird.
  • Figure 00300001
    Tabelle 2: sync-Register-Lesewerte
  • Der vorgegebene Wert ist 0x0. Es ist zu bemerken, daß dies impliziert, daß lediglich Bits 2:0 verwendet werden, und daß alle anderen Bits immer 0 sind. (Bit 0 gibt an, ob ein Anhalten erforderlich war, und Bits 2:1 geben den Befehl an, wobei Bits 31:30 des Befehlsformats in Übereinstimmung gebracht werden, was unten beschrieben ist. Es ist zu bemerken, daß der sync-Befehl die Lese-Operation dieses Registers nicht anhalten kann, so daß derselbe zu einer Verwendung hier nicht definiert ist).
  • Es ist auch eine Kapazität bereitgestellt, um eine Schreib-Operation zu diesem Register bei außergewöhnlichen Umständen zu erlauben: Genauer gesagt, um es zu ermöglichen, daß eine Ausnahmehandhabungseinrichtung den Zustand des sync-Registers vor einem Zurückgeben wiederherstellt.
  • Die nächsten vier Register werden verwendet, um ein Burstbefehlsfortschreiten von der Burstbefehlswarteschlange zu der Speichersteuerung zu verfolgen. 5 zeigt die Struktur und Position dieser Register.
  • Das currcmd-Register hält den Befehl, der aktuell durch die Speichersteuerung ausgeführt wird. Dasselbe ist ein Nur-Lesen-Register. Dasselbe ist lediglich gültig, wenn bufcntl.transfer 1 ist. In dem Leerlaufzustand desselben jedoch gibt dieses Register den null-Befehl zurück, was bedeutet, daß ein Lesen eines Laden- oder Speichern-Burstbefehls automatisch impliziert, daß ein Burst im Gange ist.
  • lastcmd ist ein Lesen/Schreiben-Register. Bei einer normalen Operation ist es Nur-Lesen, da dasselbe den letzten Befehl überbringt, der durch die Speichersteuerung ausgeführt wird. Dasselbe weist jedoch eine Schreiben-Fähigkeit auf, da das Register nach einem Zurückgeben von einem Kontextschalter neu beschrieben werden muß (weiter unten erörtert), damit der Zustand zu der Zeit des Kontextschalters vollständig wiederhergestellt werden kann. Anfänglich ist dieses Register auf den null-Befehl gesetzt.
  • Das queuetop-Register wird zu einem Leeren der Burstbefehlswarteschlange bei einem Kontextschalter verwendet. Wenn eine Burstbefehlsausführung durch ein Schreiben von 0 zu bufcntl.enable gesperrt wurde, kann der Inhalt der Warteschlange Befehl für Befehl gelesen werden, bis die Warteschlange leer ist. Ein Lesen von queuetop hat die Wirkung eines Entfernens des obersten Befehls (d. h. nicht des Befehls, der ausführt) von der Warteschlange. Dieses Register kann jederzeit gelesen werden und gibt immer den Befehl zurück, den dasselbe von dem oberen Ende der Warteschlange entfernt hat. Dieser Befehl wird nicht ausgeführt.
  • Die Tiefe der Warteschlange ist in bufcntl.pending gehalten. ein Lesen des null-Befehls impliziert auch, daß die Warteschlange leer ist.
  • Burstbefehle werden zu dem „Burstbefehlswarteschlange"-Register biq geschrieben. Befehle werden wirksam in den Beginn der Warteschlange plaziert. Ein Lesen des biq-Registers, wie ein Lesen des queuetop-Registers gibt den Befehl an dem oberen Ende der Burstbefehlswarteschlange zurück (d. h. den nächsten Befehl, der durch die Speichersteuerung ausgeführt werden soll). Dies ist jedoch bei diesem Fall alles, was ein Lesen des Registers macht. Im Gegensatz zu Befehlen, die aus queuetop gelesen wurden, wird auch ein Befehl ausgeführt, der von biq gelesen wird. Ein Lesen eines Null-Befehls impliziert, daß die Warteschlange leer ist oder daß eine Initialisierung gerade abgeschlossen hat. Es ist zu bemerken, daß es, weil das biq-Register logisch eine Warteschlange ist, wahrscheinlich ist, daß Schreib-Operationen gefolgt durch Lese-Operationen nicht den gleichen Wert zurückgeben, außer die Warteschlange war leer.
  • Das letzte Register ist debug. Ein Bereinigen (Debugging) wird hier nicht detailliert erörtert, aber die Registerdefinitionen sind in Tabelle 3 unten bereitgestellt.
  • Figure 00320001
  • Figure 00330001
    Tabelle 3: debug-Register-Definitionen
  • Die Burstbefehlswarteschlange 30 weist wie zuvor einen FIFO-Speicher auf. Burstbefehle werden durch den Prozessor geliefert: Eine Kompilierung eines Quellcodes zu dieser Struktur ist weiter unten beschrieben. Bei diesem Ausführungsbeispiel sind vier Felder in dem Burstbefehl bereitgestellt. Diese sind:
    • 1. Befehl
    • 2. Auto-Schrittweite-Indikator für MAT (block_increment bit)
    • 3. Index zu Eintrag in MAT, verwendet, um eine Übertragung zu steuern
    • 4. Index zu Eintrag in BAT, verwendet, um eine Übertragung zu steuern.
  • Die grundlegende Operation besteht darin, einen Befehl auszugeben, der zu zwei Tabelleneinträgen indexiert, einer in jeder der Speicherzugriffs- und der Pufferzugriffstabelle. Der Index zu der Speicherzugriffstabelle erlangt die Basisadresse, die Erstreckung und die Schrittweite wieder, die bei dem Speicherende der Übertragung verwendet werden. Der Index zu der Pufferzugriffstabelle erlangt die Basisadresse innerhalb der Burstpufferspeicherregion wieder. Es ist zu bemerken, daß die Indizes, die in dem Burstbefehl bereitgestellt sind, bei dem beschriebenen Ausführungsbeispiel nicht selbst Adreßwerte sind (obwohl dieselben es bei alternativen Ausführungsbeispielen sein können). Bei dem vorliegenden Ausführungsbeispiel sind ein Maskieren und Versätze durch eine Kontexttabelle zu den Indexwerten geliefert, wie es weiter unten erörtert wird. Der Direktspeicherzugriff-(DMA-)Steuerung werden die Parameter von den zwei Tabellen übermittelt und dieselbe verwendet dieselben, um die erforderliche Übertragung zu spezifizieren.
  • Es sind zwei alternative Formate bereitgestellt, wie es in Tabelle 4 unten angegeben ist:
  • Figure 00340001
    Tabelle 4: Befehlsformatoptionen
  • Das Format wird durch das bufcntl.swap-Bit in dem Puffersteuerregister ausgewählt. Der vorgegebene Wert von 0 wählt Format A aus, während ein Wert von 1 Format B auswählt. Die Verwendung dieser Umschichtungseinrichtung, die ein vorteilhaftes und kein notwendiges Merkmal ist, besteht darin, daß dieselbe ermöglicht, daß der Kompilierer den Befehl einfach inkrementiert und einen DMA sowohl für die Puffer als auch für den Hauptspeicher zu einer unterschiedlichen Region bewirkt. Ohne die Umschichtungseinrichtung wäre es lediglich möglich, dies für den einen oder den anderen zu erreichen (und so den Mehraufwand zu einer Schleifen-Pipelineverarbeitung zu einem Befehl zu reduzieren).
  • Die Burstbefehle sind im wesentlichen so wie bei dem ersten Ausführungsbeispiel, aber sind in Anbetracht der unterschiedlichen Architektur in einer Syntax und einer Operation verändert.
  • Storeburst ist durch ein Setzen von Bits 31:30 zu 00 erreicht. Dieser Befehl indexiert Parameter in der MAT und der BAT, die die Charakteristika der erforderlichen Übertragung definieren. Falls das block_increment-Bit gesetzt ist, wird das memaddr-Gebiet des indexierten Eintrags in der MAT automatisch aktualisiert, wenn die Übertragung abschließt.
  • Loadburst ist durch ein Setzen von Bits 31:30 zu 01 erreicht. Dieser Befehl indexiert auch Parameter in der MAT und der BAT, die wieder die Charakteristika der erforderlichen Übertragung definieren. Falls wie zuvor das block_increment-Bit gesetzt ist, wird das memaddr-Gebiet des indexierten Eintrags in der MAT automatisch aktualisiert, wenn die Übertragung abschließt.
  • Sync, und auch Null, ist durch ein Setzen von Bits 30:30 zu 11 und Bits 29:0 zu 0xFFFF_FFFF erreicht. Der Hauptzweck dieses Befehls ist es, einen Synchronisationsmechanismus zwischen der Ausführung der Software und der Burstbefehle bereitzustellen. Ein Schreiben eines sync-Befehls zu der Burstbefehlswarteschlange 30 verhindert, daß ein jeglicher anderer Burstbefehl in die Warteschlange eintritt: Dasselbe schließt dieselben aus. Dies bedeutet, daß es lediglich einen sync-Befehl zu einer Zeit in der Warteschlange geben kann und auch daß ein Lesen eines sync-Befehls angibt, daß die Warteschlange leer ist. Der sync-Befehl leitet keinen DMA-Zugriff ein, aber aktiviert die dem sync-Register zugeordneten Synchronisationsmechanismen. Die Verwendung von sync-Befehlen wird weiter unten erörtert.
  • Die Speicherzugriffstabelle (MAT = Memory Access Table) 65 wird nun mit Bezug auf 4 beschrieben. Dies ist eine Speicherbeschreibungselementtabelle, die Informationen hält, die auf Hauptspeicherpositionen bezogen sind, die bei Burst-Transaktionen betroffen sind. Jeder Eintrag in der MAT ist ein indexierter Schlitz, der eine Transaktion zu einem Hauptspeicher beschreibt. Bei diesem Ausführungsbeispiel weist die MAT 65 16 Einträge auf, obwohl unterschiedliche Implementierungen natürlich möglich sind. Jeder Eintrag weist drei Bereiche auf:
    • 1. Speicheradresse (memaddr) – Die Startadresse der relevanten Region in einem Hauptspeicher. Idealerweise befindet sich diese Position in einem physischen Speicherraum, da eine Virtuell-Adresse-Translation darin resultieren kann, daß eine Burstanforderung zwei physische Seiten überspannt, was Schwierigkeiten für die Speichersteuerung bewirken würde.
    • 2. Erstreckung (extent) – Die Erstreckung der Übertragung. Dies ist die Länge der Übertragung multipliziert mit der Schrittweite und ergibt die letzte übertragene Adresse plus eins. Die Länge der Übertragung wird berechnet durch die Teilung der Erstreckung durch die Schrittweite und dies wird automatisch zu dem bufsize-Gebiet der verwandten BAT 66 (siehe unten) kopiert, nachdem eine Übertragung abgeschlossen hat.
    • 3. Schrittweite (stride) – Das Intervall zwischen aufeinanderfolgenden Elementen in einer Übertragung.
  • Jedes der Gebiete kann als ein normales speicherabgebildetes Register gelesen werden. Jedes Register ist 32 Bits breit, aber lediglich ausgewählte Gebiete sind beschreibbar, wie es in Tabelle 5 unten angegeben ist:
  • Figure 00370001
    Tabelle 5: Beschreibbare Gebiete innerhalb von MAT-Registern
  • memaddr: Dies ist die nicht mit Vorzeichen versehene, wortausgerichtete 32-Bit-Adresse des ersten Elements des Kanal-Bursts. Unzulässig ausgerichtete Werte können automatisch durch eine Abschneidung ausgerichtet werden. Lese-Operationen dieses Registers geben den Wert zurück, der für den Burst verwendet wird (falls also eine Abschneidung notwendig war, wird der abgeschnittene Wert zurückgegeben).
  • extent: Der Parameter in dem extent-Register ist der Adreßversatz, der den Bereich der Burst-Übertragung abdeckt. Falls die Übertragung L Elemente getrennt durch eine Schrittweite von S erfordert, dann ist die Erstreckung S*L. Wenn ein Burst durch die Speichersteuerung ausgeführt wird, wird, falls dieser Wert plus dem memaddr-Wert größer als die Größe des Pufferbereichs ist, dann wird ein bufcntl.buffer_overrun_warn-Flag gesetzt. Der resultierende Burst wickelt sich um den Anfang des Pufferbereichs. Der vorgegebene Wert ist 0, gleich keiner Übertragung.
  • stride: Der Parameter stride ist die Anzahl von zwischen Zugriffen ausgelassenen Bytes. Werte des Übertragungsschrittweite-Intervalls sind in dem Bereich von 1 bis 1024 beschränkt. Werte, die größer als 1024 sind, werden automatisch zu 1024 abgeschnitten und ein bufcntl.stride_overrun_warn-Flag wird gesetzt. Lese-Operationen dieses Registers geben den Wert zurück, der für den Burst verwendet wird (d. h. falls eine Abschneidung notwendig war, dann wird der abgeschnittene Wert zurückgegeben). Ferner müssen Schrittweiten Mehrfache der Speicherbusbreite sein, was in diesem Fall 4 Bytes ist. Eine automatische Abschneidung (ohne ein Runden) wird durchgeführt, um diese Ausrichtung durchzusetzen. Der bereitgestellte vorgegebene Wert ist 0, gleich einer Schrittweitenlänge von 1.
  • Ein Beispiel von durch einen MAT-Schlitz enthaltenen Werten könnte sein:
    {0x1feelbad, 128, 16},
    was in einem 32-Wort-(32-4-Byte-Wörter-)Burst resultiert, wobei jedes Wort durch 4 Wörter getrennt ist (4-4-Byte-Wörter).
  • Das Auto-Schrittweite-Indikator-Bit eines Burstbefehls weist auch eine Relevanz für die MAT 65 auf. Falls dieses Bit bei dem Burstbefehl gesetzt ist, wird der Startadresseneintrag erhöht, um zu der nächsten Speicherposition zu zeigen, sollte der Burst an 32 vorbei fortgefahren sein. Dies spart einen Prozessormehraufwand bei einem Berechnen der Startadresse für den nächsten Burst bei einer langen Sequenz von Speicherzugriffen ein.
  • Die Pufferzugriffstabelle (BAT = Buffer Access Table) 66 wird nun mit Bezug auf 4 beschrieben. Dies ist wieder eine Speicherbeschreibungselementtabelle, die in diesem Fall Informationen hält, die sich auf den Burstpufferspei cherbereich 26 beziehen. Jeder Eintrag in der BAT 66 beschreibt eine Transaktion zu dem Burstpufferspeicherbereich 26. Wie bei der MAT 65, weist die BAT 66 16 Einträge auf, obwohl dieselben natürlich wie bei MAT 65 variiert werden können. Jeder Eintrag weist bei diesem Fall zwei Gebiete auf:
    • 1. Pufferadresse (buffaddr) – der Anfang des Puffers in dem Pufferbereich.
    • 2. Puffergröße (bufsize) – die Größe des bei der letzten Übertragung verwendeten Pufferbereichs.
  • Wieder kann jedes der Gebiete gelesen und geschrieben werden wie ein normales speicherabgebildetes Register. Wie bei der MAT 65, ist jedes Register 32 Bits breit, aber lediglich ausgewählte Gebiete innerhalb des Registers sind beschreibbar, wie es in Tabelle 6 unten dargelegt ist. Alle unbeschreibbaren Bits werden immer als Null gelesen.
  • Figure 00390001
    Tabelle 6
  • Der Pufferadreßparameter bufaddr ist die Versatzadresse für das erste Element des Kanalbursts in dem Pufferbereich. Der Burstpufferbereich ist durch eine Hardware physisch in eine Region des Speicherraums des Prozessors abgebildet. Dies bedeutet, daß der Prozessor absolute Adressen verwenden muß, wenn derselbe auf den Burstpufferbereich zugreift.
  • DMA-Übertragungen verwenden jedoch einfach den Versatz, so daß es notwendig ist, daß eine Hardware eine jegliche erforderliche Adreßauflösung verwaltet. Unzulässig ausgerichtete Werte können durch eine Abschneidung automatisch ausgerichtet werden. Lese-Operationen dieses Registers geben den Wert zurück, der für den Burst verwendet wird (d. h. falls eine Abschneidung notwendig war, dann wird der abgeschnittene Wert zurückgegeben). Der vorgegebene Wert ist 0.
  • Der Parameter bufsize ist die Größe der Region innerhalb des Pufferbereichs, die durch den jüngsten Burst belegt wird. Bei dem Abschluß einer Burstübertragung, die auf den Eintrag desselben zielte, wird dieses Register automatisch gesetzt. Es ist zu bemerken, daß der gespeicherte Wert die Burstlänge ist, da ein Wert von 0 einen unbenutzten Puffereintrag angibt. Dieses Register kann beschrieben werden, aber dies ist nur nach einem Kontextschalter nützlich, wenn Puffer gesichert und wiederhergestellt sind. Der vorgegebene Wert ist wieder 0.
  • Das verbleibende Merkmal der Puffersteuerung 54 ist die Kontexttabelle 62, die in 4 gezeigt ist. Dies nimmt als ein Eingangssignal die Indizes des Burstbefehls und liefert als ein Ausgangssignal die entsprechenden Schlitze, die bei der MAT 65 und der BAT 66 verwendet werden sollen. Einträge in der Kontexttabelle 62 werden verwendet, um die Region von Einträgen zu steuern, auf die durch Burstbefehle zugegriffen wird. Merkmale der Kontexttabelle 62 können bei alternativen Ausführungsbeispielen in einer Software ausgeführt sein: Eine Verwendung der Kontexttabelle ist vorteilhaft für eine effiziente Verwaltung der Pufferarchitektur.
  • Die Kontexttabelle ist besonders nützlich in dem Fall von „Kontextschaltern". Drei Ereignisse, die den Bedarf angeben, um den Kontext eines Systems zu verändern, sind eine interne Programmunterbrechung (Trap) oder eine Ausnahme, ein Thread-Schaltsignal und eine externe Unterbrechung (Ein Thread ist die grundlegende Einheit einer Prozessorausführung. Es besteht allein aus dem Prozessorzustand, der für eine einzige Berechnungssequenz benötigt wird.). Ein jegliches dieser kann einen Bedarf einrichten, um Betriebsmittel in der Burstpufferschnittstelle durch ein neues Thread zu verwenden. Die Kontexttabelle minimiert die Auswirkung derartiger Ereignisse durch ein Hinzufügen eines zusätzlichen Pegels einer Umleitung zwischen einer Systemsteuerung und der MAT 65 und der BAT 66. Zwei oder mehr Code-Threads können zu einer Kompilierungszeit konfiguriert sein, um identische Schlitzregionen in der MAT 65 und der BAT 66 zu verwenden, und damit dieselben ohne gegenseitige Beeinflussung ausführen können, kann denselben durch das Betriebssystem ein unterschiedlicher Kontextidentifizierer gegeben werden. Der Kontextidentifizierer wird in das Steuerregister geschrieben, wenn das Thread aktiviert ist und unter Verwendung dieses Mechanismus wird ein dem Indexwert hinzugefügter Versatz bei einer Kompilierungszeit konfiguriert, so daß jedes Thread unterschiedliche Schlitzregionen innerhalb der Tabellen verwendet. Vorausgesetzt, daß genug Tabellenbetriebsmittel verfügbar sind, verhindert dies ein Austreten und Wiederherstellen des Zustands von Tabellen zwischen Kontextschaltern.
  • Bei dem beschriebenen Ausführungsbeispiel weist die Kontexttabelle 62 acht Einträge auf, obwohl gemäß einer Implementierung ein jeglicher positiver ganzzahliger Wert möglich ist. Jeder Eintrag weist die folgenden vier Gebiete auf:
    • 1. Speicherversatz (memoffset) – dies ist der Versatz, der zu der MAT eines Burstbefehls nach einem Maskieren hinzugefügt wird (siehe unten). Dies ist der Wert, der verwendet wird, um die MAT 65 zu indexieren.
    • 2. Speichermaske (memmask) – dies ist die Maske, die auf das MAT-Indexgebiet eines Burstbefehls vor einer Hinzufügung eines Versatzes angewendet wird.
    • 3. Pufferversatz (bufoffset) – dies ist der Versatz, der zu der BAT eines Burstbefehls nach einem Maskieren hinzugefügt wird (siehe unten). Dies ist der Wert, der verwendet wird, um die BAT 66 zu indexieren.
    • 4. Puffermaske (bufmask) – dies ist die Maske, die auf das BAT-Indexgebiet eines Burstbefehls vor einer Hinzufügung eines Versatzes angewendet wird.
  • Die Versatz- und Maskenregister ermöglichen, daß ein zusammenhängender Satz von Schlitzen in der MAT und der BAT definiert wird, was erwünscht ist, da mehr als eine Burstpufferberechnung zu einer Zeit in der MAT 65 und der BAT 66 gelegen sein kann. Die Erheblichkeit des Maskenmerkmals der Kontexttabelle 62 wird am besten mit einem Beispiel betrachtet. Ein spezieller Kontext kann die Verwendung von Einträgen 2, 3, 4 und 5 der Pufferzugrifftabelle erfordern. Ein Inkrementieren des Burstbefehls resultiert in Werten, die sich von beispielsweise 10 auf 20 erhöhen. Ein Verwenden einer Puffermaske von 3 bewirkt dann ein Muster der Form 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0. Ein Verwenden eines Versatzes von 2 bewirkt dann, daß das Muster den erforderlichen Bereich von Einträgen indexiert: 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2. Ein anderer Kontext kann einen anderen Bereich von Einträgen verwenden, auf die unter Verwendung eines getrennten Kontexttabelleneintrags zugegriffen werden kann. Dieses Verfahren ermöglicht ein schnelles Schalten zwischen Kontexten, was eine äußere und eine innere Schleife umfassen kann. Wie es oben beschrieben ist, sind derartige Kontextschalter in den Steuerregistern 52 und anderswo in der Puffersteuerung 54 bereitgestellt. Es ist jedoch zu bemerken, daß diese Pufferbetriebsmittel-Verwaltungsmerkmale bei alternativen Ausführungsbeispielen in einer Software realisiert sein könnten.
  • Die Kontexttabellenparameter sind wie folgt definiert:
  • memoffset: Dieser Parameter definiert den Versatz, der verwendet wird, um auf einen Eintrag in der MAT 65 zuzugreifen. Wenn die Tabellengröße 16 ist, ist der maximale Wert 16. Höhere Werte werden eventuell automatisch auf 16 abgeschnitten und negative Werte werden eventuell zugelassen.
  • memmask: Dieser Parameter definiert die Maske, die verwendet wird, um auf einen Eintrag in der MAT 65 zuzugreifen. Wenn die Tabellengröße 16 ist, ist der gestattete maximale Wert 15. Dies entspricht einem Verwenden der unteren vier Bits des Werts und jegliche andere Bitsätze werden ignoriert.
  • bufoffset: Dieser Parameter definiert den Versatz, der verwendet wird, um auf einen Eintrag in der BAT 66 zuzugreifen. Wenn die Tabellengröße 16 ist, ist der Maximalwert 16. Höhere Werte werden eventuell automatisch zu 16 abgeschnitten und negative Werte werden eventuell zugelassen.
  • bufmask: Dieser Parameter definiert die Maske, die verwendet wird, um auf einen Eintrag in der BAT 66 zuzugreifen. Wenn die Tabellengröße 16 ist, ist der gestattete maximale Wert 15. Dies entspricht einem Verwenden der unteren vier Bits des Werts und jegliche andere Bitsätze werden ignoriert.
  • Die DMA-Steuerung 56 empfängt daher von der Puffersteuerung 54 Befehle, die aus einer Lade-Operation oder einer Speicher-Operation bestehen, mit einer angebrachten Hauptspeicheradresse, einer Schrittweite und einer Übertragungslänge von der MAT 65 und einer Pufferadresse von der BAT 66. Die Erfordernisse der Speichersteuerungsanordnungen sind, daß Burstanforderungen der für die MAT 65 definierten maximalen Größe und Schrittweite unterstützt werden können, daß Seitengrenzübertritte auf eine transparente Weise gehandhabt werden können und daß ein Handshake-Signal bereitge stellt werden kann, um anzugeben, wann die Übertragung abgeschlossen hat.
  • Das System, wie dasselbe hier beschrieben ist, unterstützt keinen virtuellen Speicher. Einem Fachmann auf dem Gebiet ist jedoch klar, daß bei einer DMA-Steuerung, die angepaßt ist, um einen virtuellen DMA zu unterstützen, Burstpufferarchitekturen, wie dieselben beschrieben sind, angepaßt werden könnten, um wirksam zu sein. Ein System, das im wesentlichen ist, wie es hier beschrieben ist, könnte auch in einer Architektur betrieben werden, die Speicher-Caches enthält: Es müßten jedoch geeignete Schritte unternommen werden, um eine Kohärenz zwischen jeglichen derartigen Caches und einem Hauptspeicher bei dem Ereignis von Burstpufferoperationen sicherzustellen.
  • Ein System von Unterbrechungen kann bereitgestellt sein, falls z. B. eine Burstpufferoperation suspendiert werden muß, um einen DMA-Prozeß höherer Priorität aufzunehmen. Warn-Flags können zu einer Unterstützung bei einem Bereinigen (Debugging) gesetzt werden.
  • Da die Architektur programmiert sein kann, um simultan Daten zu bursten, während der Prozessor berechnet, ist es vorteilhaft, in der Lage zu sein, die Burstpuffer nach jedem aufeinanderfolgenden Burst umzubenennen. Dies ermöglicht es, daß der Prozessor automatisch von einem Puffer zu einem anderen Puffer schaltet. In einem derartigen Fall würde der eine Puffer für die Berechnung verwendet, während der andere Puffer für den nächsten Block einer Berechnung (über einen Burstbefehl) gefüllt wird. Nachdem der Burst und die Berechnung abgeschlossen haben, werden die Puffer umbenannt (umgeschichtet) und der Prozeß fährt wieder fort.
  • Dazu kann die BAT-Tabelle erweitert werden, um drei zusätzliche Registergebiete zu umfassen:
    Ursprüngliche Gebiete: buffer_start_address, buffer_size,
    Neue Gebiete: buffer_offset_A, buffer_offset_B, Select_bit
  • Hier sind buffer_offset_A (Puffer_Versatz_A) und buffer_offset_B (Puffer_Versatz_B) durch den Kompilierer programmiert, um zwei Startadressen von zwei Puffern gleicher Größe zu enthalten. Diese Puffer müssen in dem Doppeltor-Burstpufferspeicher 26 existieren. Das Select_bit-Register (Auswahl_Bit-Register) enthält 1 oder 0; 1 bedeutet, daß eine buffer_offset_B-Adresse ausgewählt ist, und 0 in diesem Gebiet bedeutet, daß buffer_offset_A ausgewählt ist. Falls ein Befehl erteilt wird, der auf diesen BAT-Schlitz Bezug nimmt, dann wird durch die Burstpuffersteuerung, sofort nachdem derselbe in die Burstbefehlswarteschlange 30 geschrieben wurde, select_bit automatisch invertiert (oder umgeschaltet). Die Burstpuffersteuerung kopiert dann die neue ausgewählte buffer_offset_X-Adresse zu dem buffer_start_address-Gebiet (in den ursprünglichen BAT-Gebieten). Es ist dieser Eintrag, der durch das auf dem Prozessor ausführende Programm gelesen wird, um anzugeben, welchen Puffer dasselbe für eine Berechnung verwenden wird. Der Befehl, der erteilt wurde, wird irgendwann später von der Burstbefehlswarteschlange 30 genommen und durch die Burstpufferarchitektur verarbeitet. Zu dieser Zeit wird die Pufferadresse, die zu der DMA-Steuerung 56 übermittelt wird, von dem anderen buffer_offset_X-Adreßregister kopiert, das nicht durch select_bit ausgewählt ist.
    d. h.
  • Figure 00450001
  • Figure 00460001
  • Das Verarbeiten von Burstbefehlen bei dem zweiten Ausführungsbeispiel der Architektur der Erfindung wird unten mit Bezug auf 6 erörtert.
  • Ein Burst wird durch eine Erteilung eines Burstbefehls eingeleitet. Wie es oben angegeben ist, enthält dies einen Index zu einem Eintrag in der MAT 65 und einen Index zu einem Eintrag in der BAT 66. Wie es vorhergehend angegeben ist, enthalten MAT-Einträge eine Startadresse in einem Hauptspeicher, eine Erstreckung der Übertragung und die Schrittweite, während BAT-Einträge eine Zieladresse in der Pufferregion 26 zusammen mit der Länge der letzten abgeschlossenen Übertragung unter Verwendung dieses Eintrags enthalten (der die Puffergröße gibt).
  • Dieser Befehl wird in die Burstbefehlswarteschlange 30 plaziert, die einem Zuerst-Hinein-Zuerst-Hinaus-(FIFO-)Speicher ähnelt. Diese Struktur ermöglicht, daß das Entkoppeln zwischen einem Bursten von Daten von einem DRAM und einem Zugriff von Daten durch den Prozessor auftritt. Dieses Entkoppeln ist notwendig, um die Verhaltensgewinne eines „Vorabrufens" zu erreichen – der Prozeß eines Erhaltens von Daten von dem Hauptspeicher, bevor dieselben durch den Prozessor benötigt werden, wobei der Prozessor simultan an früher erhaltenen Daten handelt. Der Prozessor übermittelt Befehle in einem einzigen Zyklus zu der Warteschlange und fährt dann mit einer Operation fort. Burstbefehle können somit als „nicht-blockierend" beschrieben werden: Sie zwingen den Prozessor nicht, bis zu einem Abschluß anzuhalten (bei einigen Ausführungsbeispielen kann der Prozessor jedoch in einem Fall angehalten werden, bei dem die Burstbefehlswarteschlange 30 voll ist, wenn ein neuer Burstbefehl erteilt wird, bis Platz für den neuen Burstbefehl verfügbar wird). Die Burstbefehlswarteschlange 30 wird durch die DMA-Steuerung 56 gelesen, die, wenn dieselbe bereit ist, um auf den Hauptspeicher DRAM 14 im Namen der Burstbefehle (d. h. wenn die Burstpufferschnittstelle eine Priorität aufweist) zuzugreifen, den nächsten Befehl in der Warteschlange liest und ein Ausführen dieses Befehls beginnt.
  • Wie es in 6 gezeigt ist, führt diese Anordnung zu vier gesonderten Phasen bei einer Burstbefehlsausführung. Zuerst gibt es die „Anstehend"-Phase direkt nachdem der Befehl erteilt wurde: Der Befehl befindet sich in der Burstbefehlswarteschlange 30. Wenn der Befehl die Warteschlange nach unten durchgelaufen ist und durch die DMA-Steuerung 56 erkannt ist, wird der DMA-Prozeß durchgeführt: Dies ist die „Übertragung"-Phase. Nachdem die Übertragung-Phase abgeschlossen ist, sind die Inhalte des Burstpuffers in der Pufferregion 26 und der entsprechenden Region des Hauptspeichers 14 identisch (und jegliche Warn-Flags, die für die Transaktion relevant sind, sind gesetzt): Es heißt dann, der Burstpuffer ist „gültig", und dies leitet die „Gültig"-Phase einer Ausführung ein. Dies geht weiter, bis ein gewisses Ereignis auftritt, um die Beziehung des Burstpuffers in der Burstpufferregion 26 zu dem entsprechenden Bereich des Hauptspeichers 14 zu verändern: Nun heißt es, der Burstpuffer ist „ungültig" und die Ausführung befindet sich bei der endgültigen „Ungültig"-Stufe.
  • Ein Erteilen des Befehls definiert eine Zuordnung zwischen einem physischen Puffer und einer Region eines Hauptspeichers, wobei dieses Binden somit lediglich zu einer Ausführungszeit auftritt, wenn der Befehl ausgeführt wird. Dieses Binden zu einer Ausführungszeit ist für die Flexibilität und den niedrigen Prozessorbefehlsmehraufwand zentral, die bei einem Verwenden dieser Architektur auf sich geladen werden. Es gibt keine beibehaltene Zuordnung zwischen den zwei, was eine Pufferumbenennung und Wiederverwendung ermöglicht.
  • Während der Übertragungsphase etikettiert die Architektur den Befehl gemäß dem bufcntl.transfer-Bit. Andere Phasen sind durch die Software verfolgt oder verfolgbar.
  • Ein Eintritt in die Gültig-Phase ist, wie es oben angegeben ist, die Angabe, daß die Burstübertragung, die in dem relevanten Burstbefehl angegeben ist, abgeschlossen hat. Dies kann durch die Software durch die Erteilung eines sync-Befehls sofort nach dem Burstbefehl erfaßt werden. Wie es oben angegeben ist, kann die Burstbefehlswarteschlange 30 lediglich einen sync-Befehl zu einer Zeit enthalten und keine weiteren Burstbefehle können zu der Warteschlange geschrieben werden, während dieselbe einen sync-Befehl enthält. Es gibt somit drei Verfahren, die zu einem Durchführen einer Synchronisation unter Verwendung von sync verfügbar sind:
    • 1. einen sync-Befehl erteilen und das sync-Register lesen. Die Lese-Operation ist blockiert, bis alle Burstbefehle in der Warteschlange abgeschlossen wurden und der sync-Befehl auftaucht.
    • 2. Einen sync-Befehl erteilen und dann einen anderen Burstbefehl zu der Warteschlange schreiben. Dieses Mal ist die Schreib-Operation blockiert, bis alle Burstbefehle in der Warteschlange abgeschlossen haben und der sync-Befehl auftaucht.
    • 3. Einen sync-Befehl erteilen und das lastcmd-Register nach dem sync-Befehl abfragen.
  • Verfahren 1 und 2 blockieren den Prozessor, während Verfahren 3 es nicht macht.
  • Wenn sich die Pufferregion in der Gültig-Phase derselben befindet, kann der Prozessor an den Daten, die dieselbe enthält, wirksam sein. Bei diesem Ausführungsbeispiel kann der Prozessor auf die Daten in dem Puffer unter Verwendung von Byte-, Halbwort- und Wort-Zugriffen zugreifen.
  • Ein Prozeß zu einem Kompilieren eines Quellcodes zu dem zweiten Ausführungsbeispiel des Computersystems gemäß der Erfindung wird nun beschrieben (dieser Prozeß ist ein Ausführungsbeispiel eines weiteren Aspekts der Erfindung).
  • Die identifizierte Burstpufferarchitektur ist besonders wirksam zum Handhaben regulärer einfacher Schleifenstrukturen, die einfache Operationen betreffen, die an großen Arrays von Daten wiederholt werden: derartige Schleifenstrukturen sind z. B. häufig bei einer Medienberechnung zu finden. Eine Kompilierung eines relevanten Codes zu der Burstpufferarchitektur betrifft eine Identifizierung von relevanten Schleifen in einem Quellcode und eine Rekonstruktion der Schleifen, so daß dieselben die ursprüngliche Operation korrekt unter Verwendung von Burstpuffern durchführen.
  • Relevante Schleifen können mit der Hand identifiziert werden. Alternativ können geeignete Schleifen durch bekannte Techniken identifiziert werden (siehe z. B. „Compiler Transformations for High-Performance Computing", David F. Bacon, Susan L. Graham und Oliver J. Sharp. Technical Report Nr. UCB/CSD-93-781, University of California, Berkeley). Wenn dieselben identifiziert sind, ist es notwendig, daß die Schleifen korrekt in eine Form translatiert werden, die durch die Burstpuffer benutzt werden kann.
  • Der identifizierte Code ist in der Form einer Schleife. Um durch die Burstpuffer verarbeitet zu werden, muß die Schleife in eine Reihe von Brocken „entrollt" werden, von denen jeder die Größe eines Bursts aufweist. Es ist dann möglich, ein Handhaben der Schleife durch die Architektur angesichts einer Reihe von Burst-Lade-Operationen und -Speicher-Operationen zu definieren. Wenn jedoch Burstpuffer ein durch eine Software gesteuertes Betriebsmittel sind, ist es notwendig, Puffer zuzuteilen, bevor ein Laden- oder Speichern-Burst-Befehl erteilt wird und auch bevor ein Puffer als ein Ziel für eine Berechnung verwendet wird. Nach den Lade-Operationen und Zuteilungen kann die Berechnung durchgeführt werden: Diese können an der entrollten Version der identifizierten Schleifen sein, oder, falls die Schleifen klein genug sind (nicht größer als ein Burst), an den Schleifen selbst. Sofort nach einer Berechnung können Storebursts verwendet werden, um die Puffer zu speichern, und die Eingangspuffer freigegeben werden. Wenn die Storebursts abgeschlossen sind, können auch die Ausgangspuffer freigegeben werden.
  • Der folgende Code zum Beispiel:
    Figure 00500001
    der drei Eingangsströme, a[i], b[i] und c[i], und zwei Ausgangsströme, x[i] und y[i], enthält, wobei angenommen wird, daß imax sehr groß und typischerweise größer als die Burstgröße ist, transformiert wie folgt:
  • Figure 00500002
  • Figure 00510001
  • Der diesem transformierten Code zugeordnete Abhängigkeitsgraph ist in 7 gezeigt. Es ist z. B. zu bemerken, daß die Berechnung, die auf Puffer 04 zielt, nicht nur von den Loadbursts von Puffern 01, 02 und 03 abhängt, sondern auch von der Zuteilung des Ausgangspuffers 04 selbst. Die Zahlen in Klammern in 7 sind Knotenidentifizierer.
  • Der wie hier transformierte Code liefert einen einfachen aber relativ ineffizienten Plan. Dies ist so, weil der verfügbare Parallelismus nicht ausgenutzt wurde (wenn der Code Bursts erteilt, werden keine Berechnungen durchgeführt und umgekehrt). Eine Analyse des Abhängigkeitsgraphen kann verwendet werden, um ein Planungsprogramm zu treiben, das bessere Pläne erzeugt, wobei die Verbesserung durch eine Verwendung von zusätzlichen Burstpuffern geliefert wird. Die minimale Anzahl von erforderlichen Burstpuffern ist einer für jeden Eingangsstrom plus einen anderen zum Durchführen einer Berechnung (der, nachdem die Berechnung abgeschlossen ist, geleert, freigegeben und für die nächste Berechnung zugeteilt werden kann). Durch eine Betrachtung einer Listenplanung und einer Pufferzuteilung können verbesserte Pläne gefunden werden. Die Lösungen können gemessen werden, um eine Bursteffizienz zu optimieren, um die DRAM-Speicherbandbreite so effizient wie möglich zu verwenden. Dies unterscheidet sich von einer normalen Berechnungsstrategie, die auf ein Maximieren einer Berechnungseffizienz gerichtet ist: Der unterschiedliche Ansatz ergibt sich, wenn die Hauptbeschränkung für die betrachteten Systeme ist, daß dieselben „bandbreitengebunden" sind.
  • Zusätzlich zu einem Verwalten der Pufferzuteilung unterstützen die Speicher- und die Pufferzugriffstabelle ein Pufferumbenennen. Eines der Ziele des Kompilierers ist es, Schleifen unter Verwendung eines als „Strip-Mining" bezeichneten Prozesses zu transformieren, um mögliche Bursts freizulegen. Wenn die Streifen tagebaumäßig verarbeitet wurden, kann ein weiterer Prozeß angewendet werden, der Modulo-Planung (oder Software-Pipelineverarbeitung) genannt wird. Dieser letztere Prozeß erfordert, daß die Puffer innerhalb der teilweise entrollten Schleife bei speziellen Punkten umbenannt werden. Zum Beispiel kann eine Schleifenberechnung erfordern, daß ein logischer Puffer, genannt 'A', zyklisch von einem physischen Puffer '2' zu einem Puffer '5' abgebildet wird. Bei diesem Beispiel könnte ein physischer Puffer zu einem Bursten zu einem Speicher verwendet werden, während auf den anderen Puffer durch den Prozessor zu einer Berechnung zugegriffen wird. Die Burstoperation und -berechnung sind gleichzeitig wirksam, daher ein Verbessern eines Verhaltens.
  • Eine weitere Funktion, die durch den Kompilierer durchgeführt werden muß, ist die Umwandlung von Proportioniert-Bursts in der Software zu Kanal-Bursts, da lediglich Bursts mit der Breite der Speicherbusbreite (bei dem vorliegenden Fall 32 Bits) durch die Burstpufferarchitektur verarbeitet werden können. Während einer Kompilierung müssen die in der Software gefundenen Proportioniert-Bursts zu Kanal-Bursts abgebildet werden, wobei für Eckfälle eine spezielle Vorkehrung getroffen wird, falls erforderlich.
  • Typische einfache Beispiele der Verwendung des Burstpuffersystems 24 werden nun beschrieben. Erstens kann dasselbe als ein lokaler Datenpuffer verwendet werden, wobei eine Region eines Speichers von der Größe des Puffers direkt in einen Burstpuffer 40 abgebildet ist. Dies kann auf zwei Weisen gemacht werden: (1) Falls die Daten uninitialisiert sind, dann kann der allocbuffer-Befehl verwendet werden, um einen Puffer 40 zu bekommen und die Adreßabbildung durchzuführen; und (2) falls die Daten in dem Hauptspeicher 14 initialisiert sind, dann muß ein Loadburst-Befehl verwendet werden, um die Daten in den Burstpuffer 40 zu kopieren. Wenn das Abbilden gemacht ist, kann der Prozessor 10 fortfahren, auf die gleichen Adressen zuzugreifen, und dieselben werden durch den Puffer 40 aufgenommen. Bei einem Abschluß oder wenn das System kohärent gemacht werden muß, wird ein Storebuffer-Befehl verwendet. Zweitens kann das Burstpuffersystem 24 als eine Nachschlagtabelle verwendet werden. Auf die weitgehend gleiche Weise wie der lokale Datenpuffer kann der Burstpuffer 40 mit Nachschlagtabellendaten unter Verwendung eines Loadburst-Befehls initialisiert werden. Bezüge zu Adressen, die in den Puffer treffen, geben die geeigneten Daten zurück. Die Tabellengröße ist begrenzt, obwohl es keinen Grund gibt, warum eine größere Tabelle nicht teilweise in dem Puffer 40 und der Rest in dem Hauptspeicher 14 gelegen sein könnte. Falls der in dem Puffer 40 gehaltene Bereich der am häufigsten verwendete ist, dann wird dies ein Verhalten verbessern helfen. Eine Kohärenz ist in diesem Fall kein Punkt. Wenn daher die Verwendung der Tabelle abgeschlossen wurde, sollte ein Freebuffer-Befehl erteilt werden.
  • Eine mögliche Beschränkung an dem oben beschriebenen System ist, daß die Burstpuffer 40 eventuell nicht als einfache FIFOs verwendet werden können. Es müssen immer Adressen verwendet werden, um auf Daten in den Puffern zuzugreifen.
  • Es wäre möglich, einen Software-„Umhüller" (-„Wrapper") zu schreiben, der den Puffer erscheinen lassen würde, als wäre derselbe ein FIFO. Der Verschiebungszählwert kann jedoch verwendet werden, um eine FIFO-Funktionalität darin zu emulieren, daß Laden- und Speichern-Bursts um die Puffergröße verschoben werden können, was bedeuten würde, daß ein Speichern-Burst erteilt würde, wenn der Puffer logisch gefüllt wurde.
  • Bei einem typischen Betrieb der oben beschriebenen Ausführungsbeispiele wird ein Burst von Daten von dem Hauptspeicher 14 in den Burstpufferspeicher 26 gelesen, durch den Prozessor 10, die Prozessorschnittstelle 12 verarbeitet und zu dem Burstpufferspeicher 26 zurückgegeben und dann zu dem Hauptspeicher 14 geschrieben. Bei einem anderen Ausführungsbeispiel wird, anstelle daß das Verarbeiten durch den Prozessor 10/die Prozessorschnittstelle 12 durchgeführt wird, dasselbe anstelle dessen durch eine zweckgebundene Berechnungsmaschine durchgeführt, die mit dem Burstpufferspeicher 26 verbunden ist.
  • Es ist klar, daß viele andere Modifikationen an den oben beschriebenen Ausführungsbeispielen der Erfindung und innerhalb des Schutzbereichs der Erfindung vorgenommen werden können.

Claims (18)

  1. Ein Computersystem das folgende Merkmale aufweist: ein Verarbeitungssystem (10, 12) zum Verarbeiten von Daten; einen Speicher (14) zum Speichern von Daten, die durch das Verarbeitungssystem (10, 12) verarbeitet werden oder verarbeitet werden sollen; eine Speicherzugriffssteuerung (16) zum Steuern eines Zugriffs auf den Speicher; und einen Burstpufferspeicher, der zumindest einen Datenpuffer (40) zum Puffern von Daten umfaßt, die auf den Speicher (14) geschrieben oder von demselben gelesen werden sollen; dadurch gekennzeichnet, daß der Speicher (14) ein dynamischer Direktzugriffsspeicher ist und der Burstpufferspeicher (26) ein schnellerer zugreifbarer Cache-Speicher ist und daß das Computersystem ferner folgende Merkmale aufweist: eine Burstbefehlssteuerung (32) zum Erteilen von Burstbefehlen an die Speicherzugriffssteuerung, wobei die Speicherzugriffssteuerung (16) auf einen Burstbefehl anspricht, um in einem Datenburst eine Mehrzahl von Datenwörtern zwischen dem Speicher (14) und dem Datenpuffer (40) zu übertragen, wobei in einem Datenburst eine Reihe von Speicherpositionen in dem Speicher ausgewählt wird und eine Sequenz von Zugriffen lokal für diese Reihe durchgeführt wird; und eine Burstbefehlswarteschlange (30) zum in eine Warteschlange-Stellen von Burstbefehlen, so daß ein Burstbefehl für eine Ausführung durch die Speicherzugriffssteuerung (16) verfügbar gemacht werden kann, sofort nachdem ein vorhergehender Burstbefehl ausgeführt wurde.
  2. Ein Computersystem gemäß Anspruch 1, bei dem zumindest einer der Burstbefehle einen Verzögerungsparameter umfaßt und bei dem die Burstbefehlssteuerung (32) betreibbar ist, um ein Erteilen eines Befehls an die Speicherzugriffssteuerung (16) in Abhängigkeit von dem Verzögerungsparameter zu verzögern.
  3. Ein Computersystem gemäß Anspruch 1 oder Anspruch 2, bei dem jeder derartige Burstbefehl einen Parameter umfaßt oder demselben zugeordnet ist, der eine Beabstandung zwischen Positionen in dem Speicher (14) definiert, auf die ansprechend auf den Burstbefehl zugegriffen werden soll.
  4. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, das ferner eine Vergleichseinrichtung (28) aufweist, die ansprechend auf eine Speicheranforderung von dem Verarbeitungssystem (10, 12) betreibbar ist, um zu bestimmen, ob eine entsprechende Speicherposition auf den Datenpuffer (40) abgebildet ist, und falls dem so ist, auf die abgebildete Position in dem Burstpufferspeicher (26) zuzugreifen.
  5. Ein Computersystem gemäß einem der Ansprüche 1 bis 4, bei dem die Burstbefehlssteuerung (32) folgende Merkmale aufweist: eine Speicherzugriffstabelle (65) für eine Beschreibung von Transaktionen zu dem Speicher (14); und eine Pufferzugriffstabelle (66) für eine Beschreibung von Transaktionen zu dem zumindest einen Datenpuffer (40); wobei jeder Burstbefehl Indexe für sowohl die Speicherzugriffstabelle (65) als auch die Pufferzugriffstabelle (66) erteilt.
  6. Ein Computersystem gemäß Anspruch 5, bei dem für einen Burstbefehl eine Transaktion zwischen dem Speicher (14) und dem zumindest einen Datenpuffer (40) mit Bezug auf einen Schlitz in der Speicherzugriffstabelle (65) und einen Schlitz in der Pufferzugriffstabelle (66) definiert ist.
  7. Ein Computersystem gemäß Anspruch 5 oder Anspruch 6, bei dem die Burstbefehlssteuerung (32) ferner eine Kontexttabelle (62) aufweist, um gemäß einem Kontext das Indexieren der Speicherzugriffstabelle (65) und der Pufferzugriffstabelle (66) durch einen Burstbefehl zu modifizieren.
  8. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, bei dem zumindest einer der Burstbefehle sich auf eine Anzahl von Datenelementen bezieht, die größer ist als die, die in dem Datenpuffer (40) zu einer Zeit gespeichert sein kann, und bei dem ansprechend auf einen derartigen Befehl das System betreibbar ist, um eine Sequenz von Burstbefehlen durchzuführen.
  9. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, bei dem die Anzahl von Datenpuffern (40) durch das Computersystem unter einer Hardware- oder Softwaresteuerung konfigurierbar ist.
  10. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, bei dem der zumindest eine Datenpuffer (40) mit einem Doppeltor-Burstpufferspeicher (26) versehen ist, wobei auf ein Tor durch das Verarbeitungssystem (10, 12) zugegriffen wird und auf das andere Tor durch den Speicher (14) zugegriffen wird.
  11. Ein Computersystem gemäß Anspruch 10, bei dem auf den Doppeltor-Burstpufferspeicher (26) zu der gleichen Zeit durch das Verarbeitungssystem (10, 12) und den Speicher (14) zugegriffen werden kann.
  12. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, bei dem das Verarbeitungssystem einen Hauptmikroprozessor (10) und einen Coprozessor (12) umfaßt, der angeordnet ist, um die Daten in dem Datenpuffer (40) zu liefern.
  13. Ein Computersystem gemäß einem der Ansprüche 1 bis 11, bei dem das Verareitungssystem einen Hauptmikroprozessor (10) und eine getrennte Berechnungsmaschine umfaßt, wobei die Berechnungsmaschine angeordnet ist, um die Daten in dem Datenpuffer zu verarbeiten.
  14. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, bei dem der zumindest eine Datenpuffer einen statischen Direktzugriffsspeicher aufweist.
  15. Ein Computersystem gemäß einem der vorhergehenden Ansprüche, bei dem der zumindest eine Datenpuffer konfigurierbar ist, derart, daß Daten gepuffert werden können, bevor dieselben in den Speicher (14) geschrieben werden oder nachdem dieselben von demselben gelesen werden.
  16. Ein Verfahren zum Betreiben eines Computersystems, bei dem ein betriebener Computer folgende Merkmale umfaßt: einen Prozessor (10); einen Speicher (14), der ein dynamischer Direktzugriffsspeicher ist; zumindest ei nen Burstpufferspeicher (26), der ein schnellerer zugreifbarer Cache-Speicher ist; eine Burstbefehlssteuerung (32), die auf Burstbefehle anspricht, um einer Speicherzugriffssteuerung (16) anzuordnen, eine Mehrzahl von Datenwörtern in einem einzigen Datenburst zwischen einem Speicher und zumindest einem Datenpuffer (40) zu übertragen, wobei bei einem Datenburst eine Reihe von Speicherpositionen in dem Speicher (14) ausgewählt wird und eine Sequenz von Zugriffen lokal für diese Reihe durchgeführt wird; und eine Burstbefehlswarteschlange (30) zum in Warteschlange-Stellen von Burstbefehlen, so daß ein derartiger Burstbefehl für eine Ausführung durch die Speicherzugriffssteuerung (16) verfügbar gemacht werden kann, sofort nach dem ein vorhergehender Burstbefehl ausgeführt wurde; wobei das Verfahren folgende Schritte aufweist: Identifizieren von Berechnungselementen im Quellcode, die geeignet sind für eine Kompilierung zu und einer Ausführung mit Unterstützung von dem zumindest einen Datenpuffer (40); Transformieren der identifizierten Berechnungselemente im Quellcode in eine Folge von Operationen, die je eine Speichertransaktion betreffen, die nicht größer ist als die Größe des zumindest einen Datenpuffers, und Ausdrücken derartiger Operationen als Burstbefehle; und Ausführen eines Quellcodes durch das Verarbeitungssystem, wobei die identifizierten Berechnungselemente durch das Verarbeitungssystem durch Zugriffe auf den zumindest einen Datenpuffer (40) verarbeitet werden.
  17. Ein Verfahren zum Betreiben eines Computersystems gemäß Anspruch 16, bei dem Daten, die durch ein identifiziertes Berechnungselement angefordert werden, von dem Speicher (14) zu dem zumindest einen Datenpuffer (40) abgerufen werden, bevor dieselben durch das Verarbeitungssystem (10, 12) angefordert werden.
  18. Ein Verfahren zum Betreiben eines Computersystems gemäß Anspruch 16 oder Anspruch 17, bei dem eine Einrichtung bereitgestellt ist, um das Verarbeitungssystem (10, 12) zu blockieren, bis eine Transaktion zwischen dem Speicher (14) und dem zumindest einen Datenpuffer (40) abgeschlossen ist.
DE69727465T 1997-01-09 1997-11-26 Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung Expired - Lifetime DE69727465T2 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
EP97300113 1997-01-09
EP97300113A EP0853283A1 (de) 1997-01-09 1997-01-09 Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung
GBGB9723704.4A GB9723704D0 (en) 1997-11-11 1997-11-11 Computer systems
GB9723704 1997-11-11

Publications (2)

Publication Number Publication Date
DE69727465D1 DE69727465D1 (de) 2004-03-11
DE69727465T2 true DE69727465T2 (de) 2004-12-23

Family

ID=26147251

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69727465T Expired - Lifetime DE69727465T2 (de) 1997-01-09 1997-11-26 Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung

Country Status (3)

Country Link
US (2) US6321310B1 (de)
JP (1) JP4142141B2 (de)
DE (1) DE69727465T2 (de)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1061439A1 (de) * 1999-06-15 2000-12-20 Hewlett-Packard Company Speicher und Befehlen in Rechnerarchitektur mit Prozessor und Coprozessor
EP1061438A1 (de) * 1999-06-15 2000-12-20 Hewlett-Packard Company Rechnerarchitektur mit Prozessor und Coprozessor
JP4354583B2 (ja) * 1999-09-09 2009-10-28 独立行政法人科学技術振興機構 アクセス方法及びアクセス処理プログラムを記録した記録媒体
GB2366426B (en) * 2000-04-12 2004-11-17 Ibm Coprocessor data processing system
US6807587B1 (en) * 2000-09-18 2004-10-19 Xilinx Inc. Methods and apparatuses for guaranteed coherency of buffered direct-memory-access data
US6862653B1 (en) * 2000-09-18 2005-03-01 Intel Corporation System and method for controlling data flow direction in a memory system
US6711646B1 (en) * 2000-10-20 2004-03-23 Sun Microsystems, Inc. Dual mode (registered/unbuffered) memory interface
US6557090B2 (en) * 2001-03-09 2003-04-29 Micron Technology, Inc. Column address path circuit and method for memory devices having a burst access mode
JP2002366509A (ja) * 2001-06-06 2002-12-20 Mitsubishi Electric Corp ダイレクトメモリアクセスコントローラおよびそのアクセス制御方法
US7139873B1 (en) * 2001-06-08 2006-11-21 Maxtor Corporation System and method for caching data streams on a storage media
CN1280734C (zh) * 2001-09-07 2006-10-18 皇家菲利浦电子有限公司 用于分段存取控制的控制装置和方法和具有该控制装置的视频存储器装置
JP2003140886A (ja) * 2001-10-31 2003-05-16 Seiko Epson Corp インストラクションセット及びコンパイラ
US20030126591A1 (en) * 2001-12-21 2003-07-03 Youfeng Wu Stride-profile guided prefetching for irregular code
US7389315B1 (en) * 2002-02-28 2008-06-17 Network Appliance, Inc. System and method for byte swapping file access data structures
US7222170B2 (en) * 2002-03-14 2007-05-22 Hewlett-Packard Development Company, L.P. Tracking hits for network files using transmitted counter instructions
JP2003281084A (ja) * 2002-03-19 2003-10-03 Fujitsu Ltd 外部バスへのアクセスを効率的に行うマイクロプロセッサ
GB0221464D0 (en) * 2002-09-16 2002-10-23 Cambridge Internetworking Ltd Network interface and protocol
CN1602499A (zh) * 2002-10-04 2005-03-30 索尼株式会社 数据管理系统、数据管理方法、虚拟存储设备、虚拟存储器控制方法、阅读器/写入器装置、 ic模块访问设备、以及ic模块访问控制方法
US7191318B2 (en) * 2002-12-12 2007-03-13 Alacritech, Inc. Native copy instruction for file-access processor with copy-rule-based validation
CN100416494C (zh) * 2003-04-15 2008-09-03 威盛电子股份有限公司 显示控制器读取系统存储器中的存储数据的方法
US7478016B2 (en) * 2003-04-16 2009-01-13 The Mathworks, Inc. Block modeling input/output buffer
US7055000B1 (en) 2003-08-29 2006-05-30 Western Digital Technologies, Inc. Disk drive employing enhanced instruction cache management to facilitate non-sequential immediate operands
US20050063008A1 (en) * 2003-09-24 2005-03-24 Perry Lea System and method of processing image data
US7725665B2 (en) * 2004-06-30 2010-05-25 Renesas Technology Corp. Data processor
US7962731B2 (en) * 2005-10-20 2011-06-14 Qualcomm Incorporated Backing store buffer for the register save engine of a stacked register file
US7844804B2 (en) * 2005-11-10 2010-11-30 Qualcomm Incorporated Expansion of a stacked register file using shadow registers
US9201819B2 (en) * 2005-12-26 2015-12-01 Socionext Inc. Command processing apparatus, method and integrated circuit apparatus
US8572302B1 (en) * 2006-10-13 2013-10-29 Marvell International Ltd. Controller for storage device with improved burst efficiency
US7617354B2 (en) * 2007-03-08 2009-11-10 Qimonda North America Corp. Abbreviated burst data transfers for semiconductor memory
KR100891508B1 (ko) * 2007-03-16 2009-04-06 삼성전자주식회사 가상 디엠에이를 포함하는 시스템
US8806461B2 (en) * 2007-06-21 2014-08-12 Microsoft Corporation Using memory usage to pinpoint sub-optimal code for gaming systems
US7730244B1 (en) * 2008-03-27 2010-06-01 Xilinx, Inc. Translation of commands in an interconnection of an embedded processor block core in an integrated circuit
US8386664B2 (en) * 2008-05-22 2013-02-26 International Business Machines Corporation Reducing runtime coherency checking with global data flow analysis
US8281295B2 (en) * 2008-05-23 2012-10-02 International Business Machines Corporation Computer analysis and runtime coherency checking
US8285670B2 (en) 2008-07-22 2012-10-09 International Business Machines Corporation Dynamically maintaining coherency within live ranges of direct buffers
JP2010146084A (ja) * 2008-12-16 2010-07-01 Toshiba Corp キャッシュメモリ制御部を備えるデータ処理装置
US9417685B2 (en) * 2013-01-07 2016-08-16 Micron Technology, Inc. Power management
KR102449333B1 (ko) * 2015-10-30 2022-10-04 삼성전자주식회사 메모리 시스템 및 그것의 읽기 요청 관리 방법
US9965326B1 (en) * 2016-06-27 2018-05-08 Rockwell Collins, Inc. Prediction and management of multi-core computation deration
US10108374B2 (en) * 2016-07-12 2018-10-23 Nxp Usa, Inc. Memory controller for performing write transaction with stall when write buffer is full and abort when transaction spans page boundary
US10175912B1 (en) * 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4099236A (en) 1977-05-20 1978-07-04 Intel Corporation Slave microprocessor for operation with a master microprocessor and a direct memory access controller
JPS5840214B2 (ja) 1979-06-26 1983-09-03 株式会社東芝 計算機システム
US4589067A (en) 1983-05-27 1986-05-13 Analogic Corporation Full floating point vector processor with dynamically configurable multifunction pipelined ALU
US5121498A (en) 1988-05-11 1992-06-09 Massachusetts Institute Of Technology Translator for translating source code for selective unrolling of loops in the source code
JPH02250138A (ja) 1989-01-18 1990-10-05 Fujitsu Ltd メモリ制御装置
JPH02250137A (ja) 1989-01-18 1990-10-05 Fujitsu Ltd メモリ制御装置
US5175825A (en) 1990-02-02 1992-12-29 Auspex Systems, Inc. High speed, flexible source/destination data burst direct memory access controller
DE69132300T2 (de) 1990-03-12 2000-11-30 Hewlett Packard Co Durch Anwender festgelegter direkter Speicherzugriff mit Anwendung von virtuellen Adressen
GB2250615B (en) 1990-11-21 1995-06-14 Apple Computer Apparatus for performing direct memory access with stride
EP0549924A1 (de) 1992-01-03 1993-07-07 International Business Machines Corporation Verfahren und Vorrichtung zur Datenübertragung durch einen Asynchronzusatzprozessor
US6438683B1 (en) 1992-07-28 2002-08-20 Eastman Kodak Company Technique using FIFO memory for booting a programmable microprocessor from a host computer
US5708830A (en) 1992-09-15 1998-01-13 Morphometrix Inc. Asynchronous data coprocessor utilizing systolic array processors and an auxiliary microprocessor interacting therewith
JP3220881B2 (ja) 1992-12-29 2001-10-22 株式会社日立製作所 情報処理装置
US5590307A (en) * 1993-01-05 1996-12-31 Sgs-Thomson Microelectronics, Inc. Dual-port data cache memory
JP3417984B2 (ja) 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
US5603007A (en) * 1994-03-14 1997-02-11 Apple Computer, Inc. Methods and apparatus for controlling back-to-back burst reads in a cache system
US5627994A (en) * 1994-07-29 1997-05-06 International Business Machines Corporation Method for the assignment of request streams to cache memories
US5537620A (en) 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
US5664230A (en) * 1995-05-26 1997-09-02 Texas Instruments Incorporated Data processing with adaptable external burst memory access
US6209071B1 (en) * 1996-05-07 2001-03-27 Rambus Inc. Asynchronous request/synchronous data dynamic random access memory
US5884050A (en) 1996-06-21 1999-03-16 Digital Equipment Corporation Mechanism for high bandwidth DMA transfers in a PCI environment
US6085261A (en) * 1996-07-29 2000-07-04 Motorola, Inc. Method and apparatus for burst protocol in a data processing system
JPH10124447A (ja) * 1996-10-18 1998-05-15 Fujitsu Ltd データ転送制御方法及び装置
US5784582A (en) * 1996-10-28 1998-07-21 3Com Corporation Data processing system having memory controller for supplying current request and next request for access to the shared memory pipeline
US6006289A (en) * 1996-11-12 1999-12-21 Apple Computer, Inc. System for transferring data specified in a transaction request as a plurality of move transactions responsive to receipt of a target availability signal
EP0853283A1 (de) 1997-01-09 1998-07-15 Hewlett-Packard Company Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung

Also Published As

Publication number Publication date
US6336154B1 (en) 2002-01-01
JPH10232826A (ja) 1998-09-02
DE69727465D1 (de) 2004-03-11
JP4142141B2 (ja) 2008-08-27
US6321310B1 (en) 2001-11-20

Similar Documents

Publication Publication Date Title
DE69727465T2 (de) Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung
DE60035151T2 (de) Hardware-Anordnung zur Verwaltung von Cachespeicherstrukturen in einem Datenspeichersystem
DE3151745C2 (de)
DE69629140T2 (de) Cachefähigkeitsattribut für virtuelle Adressen in Cachespeichern mit sowohl virtuellen als auch physikalischem Index
DE602004011018T2 (de) Ungültigkeitserklärung eines speichers und löschen von puffereinträgen
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE69838367T2 (de) Paralleles Dateiensystem und Verfahren zur unabhängigen Aufzeichnung von Metadaten
DE60204687T2 (de) Speicherkopierbefehl mit Angabe von Quelle und Ziel, der in der Speichersteuerung ausgeführt wird
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
DE69721590T2 (de) Ein bereichsbasiertes seiten-table-walk-bit verwendendes verfahren sowie vorrichtung
DE69637294T2 (de) Mikro-tlb mit parallelem zugriff zum beschleunigen der adressübersetzung
DE102015007709A1 (de) Invalidationsdatenbereich für einen Cache
DE19516937A1 (de) Hierarchisches Cachesystem für einen Computer
DE19807872A1 (de) Verfahren zur Verwaltung von Konfigurationsdaten in Datenflußprozessoren sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstruktur (FPGAs, DPGAs, o. dgl.
DE19506734A1 (de) Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
DE3390323T1 (de) Ermittlung eines sequentiellen Datenstroms
DE112006002565T5 (de) Befehlsunterstützte Cache-Verwaltung für den effizienten Einsatz von Cache und Speicher
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE10056827A1 (de) Duale Verwendung von Cache-Verbindungen
DE60225473T2 (de) Verfahren zur datenverarbeitung
DE102019106126A1 (de) Massenspeicherungsvorrichtung mit vom Host eingeleiteter Pufferausräumung
DE112017005782T5 (de) Warteschlange für Speichervorgänge
DE112019002587T5 (de) Verfahren und vorrichtung für eine streu-/sammelverarbeitungsmaschine in einer speichersteuerung für zwischenspeicherungsanwendungen
DE112021001345T5 (de) On-demand speicherzuweisung
DE102012212183A1 (de) Verfahren und Speichercontroller zur Bestimmung einer Zugriffscharakteristik einer Datenentität

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE