PatentDe  


Dokumentenidentifikation DE60010907T2 21.07.2005
EP-Veröffentlichungsnummer 0001214660
Titel SRAM-STEUERUNGVORRICHTUNG FÜR PARALLELE PROZESSORARCHITEKTUR MIT ADRESSEN- UND BEFEHLSWARTESCHLANGE UND ARBITER
Anmelder Intel Corp., Santa Clara, Calif., US
Erfinder ADILETTA, J., Matthew, Worcester, US;
WHEELER, William, Southborough, US;
REDFIELD, James, Hudson, US;
CUTTER, Daniel, Cambridge, US;
WOLRICH, Gilbert, Framingham, US
Vertreter v. Bezold & Sozien, 80799 München
DE-Aktenzeichen 60010907
Vertragsstaaten AT, BE, CH, CY, DE, DK, ES, FI, FR, GB, GR, IE, IT, LI, LU, MC, NL, PT, SE
Sprache des Dokument EN
EP-Anmeldetag 17.08.2000
EP-Aktenzeichen 009541269
WO-Anmeldetag 17.08.2000
PCT-Aktenzeichen PCT/US00/22653
WO-Veröffentlichungsnummer 0001016769
WO-Veröffentlichungsdatum 08.03.2001
EP-Offenlegungsdatum 19.06.2002
EP date of grant 19.05.2004
Veröffentlichungstag im Patentblatt 21.07.2005
IPC-Hauptklasse G06F 13/16
IPC-Nebenklasse G06F 9/46   

Beschreibung[de]

Die vorliegende Erfindung betrifft Speicher-Controller, besonders für die Verwendung in Parallelverarbeitungssystemen.

Parallelverarbeitung ist eine effiziente Form der Informationsverarbeitung von gleichzeitig ablaufenden Events in einem Rechenprozess. Parallelverarbeitung verlangt die gleichzeitige Ausführung vieler Programme in einem Computer, im Gegensatz zur sequenziellen Verarbeitung. Im Zusammenhang mit einem Parallelprozessor beinhaltet Parallelität, dass gleichzeitig mehr als ein Vorgang abläuft. Im Gegensatz zu einem seriellen Paradigma, bei dem alle Tasks nacheinander in einer einzelnen Station oder in einer Pipelining-Maschine ausgeführt werden, bei der Tasks an spezialisierten Stationen ausgeführt werden, sind bei Parallelverarbeitung mehrere Stationen vorhanden, die jeweils alle Tasks ausführen können. Das heißt, im Allgemeinen arbeiten alle oder mehrere Stationen gleichzeitig und unabhängig an demselben oder an gemeinsamen Elementen eines Problems. Bestimmte Probleme sind für eine Lösung mittels Parallelverarbeitung geeignet.

Speichersysteme, die für Parallelverarbeitungstasks eingesetzt werden, können ineffizient sein. Speichersysteme können eine Totzeit, d.h. eine Blase haben, die 1 oder 2 Zyklen lang ist, je nach dem Typ des verwendeten Speichergerätes.

Die US 5,659,687 lehrt ein System zum Steuern des Speicherdatenpfades für ein Massenparallelprozessorsystem, das Speicherzugangsanforderungen von Parallelprozessoren auf eine gemeinsame Speicherbank mittels einer Buswarteschlange und einer Netzwerkwarteschlange speichern.

Gemäß einem Aspekt der vorliegenden Erfindung wird ein Controller für einen Arbeitsspeicher bereitgestellt, wobei der Controller Folgendes umfasst:

eine Adress- und Befehlswarteschlange, die Speicherreferenzen von einer Mehrzahl von Mikrosteuerungsfunktionseinheiten enthält, wobei die Adress- und Befehlswarteschlange eine Lesewarteschlange umfasst;

eine erste Lese-/Schreibwarteschlange, die Speicherreferenzen von einem Kernprozessor enthält, dadurch gekennzeichnet, dass der Controller ferner Folgendes umfasst:

Steuerlogik mit einem Arbiter, der die Fülle jeder der Warteschlangen und einen Komplettheitsstatus von ausstehenden Speicherreferenzen erfasst, um eine Speicherreferenz von einer der Warteschlangen zu wählen.

Einer oder mehrere der folgenden Vorteile können mit einem oder mehreren Aspekten der Erfindung erzielt werden. Der Speicher-Controller sortiert Speicherreferenzen, um Verzögerungen (Blasen) in der Pipeline von einer Schnittstelle zum Speicher minimal zu halten. Das Speichersystem ist so ausgelegt, dass es mit Speicheranforderungen geflutet wird, die von ihrer Natur aus unabhängig sind. Der Speicher-Controller ermöglicht die Sortierung von Speicherreferenzen, so das Totzeit oder eine Blase reduziert wird, die bei Zugriffen auf SRAM auftritt. Mit Speicherreferenzen auf SRAM entsteht beim Umschalten der aktuellen Richtung auf Signalleitungen zwischen Lese- und Schreibvorgängen eine Blase oder Totzeit, während der gewartet wird, bis sich Strom auf Leitern eingeschwungen hat, die den SRAM mit dem SRAM-Controller verbinden. Das heißt, die Treiber, die Strom auf den Bus treiben, müssen sich einschwingen, bevor sie ihren Zustand ändern. So können wiederholte Zyklen eines Lesevorgangs, gefolgt von einem Schreibzyklus, die Spitzenbandbreite herabsetzen. Durch Speicherreferenzsortierung werden Speicherreferenzen organisiert, so dass auf lange Folgen von Lesevorgängen lange Folgen von Schreibvorgängen folgen können. Dies kann genutzt werden, um Totzeit in der Pipeline zu minimieren, um effektiv näher an eine maximale verfügbare Bandbreite heranzukommen. Das Gruppieren von Lese- und Schreibvorgängen verbessert die Zykluszeit, da Totzyklen entfallen. Der Speicher-Controller sortiert Speicherreferenzen auf der Basis einer Lesespeicherreferenz.

Der Speicher-Controller kann auch ein Lock-Lookup-Gerät zum Nachschlagen von Read-Locks beinhalten. Die Adress- und Befehlswarteschlange beinhaltet auch eine Read-Lock-Fail-Warteschlange, um Lesespeicherreferenz-Anforderungen aufzunehmen, die aufgrund einer Sperre erfolglos verlaufen, die auf einem Speicherteil gemäß Ermittlung durch das Lock-Lookup-Gerät vorliegen.

KURZE BESCHREIBUNG DER ZEICHNUNGEN

1 ist ein Blockdiagramm eines Kommunikationssystems, das mit einem Hardware-gestützten Multithread-Prozessor arbeitet;

2 ist ein ausführliches Blockdiagramm des Hardware-gestützten Multithread-Prozessors von 1;

3 ist ein Blockdiagramm einer Mikromaschinen-Funktionseinheit, die in dem Hardware-gestützten Multithread-Prozessor der 1 und 2 eingesetzt wird;

3A ist ein Blockdiagramm einer Pipeline in der Mikromaschine von 3;

3B ist ein Diagramm, das ein Format für eine Kontextschaltanweisung zeigt;

3C ist ein Blockdiagramm, das eine Universalregisteradressanordnung zeigt;

4 ist ein Blockdiagramm eines Speicher-Controllers für einen Betrieb mit größerer Bandbreite in dem Hardware-gestützten Multithread-Prozessor;

4A ist ein Ablaufdiagramm, das eine Zuteilungsrichtlinie in einem SDRAM-Controller von 4 repräsentiert;

4B ist ein Zeitsteuerdiagramm, das Vorteile der Optimierung des SDRAM-Controllers zeigt;

5 ist ein Blockdiagramm eines Speicher-Controllers für latenzbegrenzte Operationen, der in dem Hardware-gestützten Multithread-Prozessor verwendet wird;

5A ist ein Zeitsteuerdiagramm, das Vorteile des Optimierens des SRAM-Controllers zeigt;

6 ist ein Blockdiagramm einer Kommunikationsbusschnittstelle in dem Prozessor von 1.

BESCHREIBUNG Architektur

Gemäß 1 beinhaltet ein Kommunikationssystem 10 einen parallelen, Hardware-gestützten Multithread-Prozessor 12. Der Hardware-gestützte Multithread-Prozessor 12 ist mit einem Bus wie z.B. einem PCI-Bus 14, einem Speichersystem 16 und einem zweiten Bus 18 gekoppelt. Das System 10 ist besonders für Tasks nützlich, die in parallele Subtasks oder Funktionen gegliedert werden können. Insbesondere ist der Hardware-gestützte Multithread-Prozessor 12 für Tasks nützlich, die bandbreiten- anstatt latenzorientiert sind. Der Hardware-gestützte Multithread-Prozessor 12 hat mehrere Mikromaschinen 22, jeweils mit mehreren Hardwaregesteuerten Threads, die gleichzeitig aktiv sein und unabhängig an einer Task arbeiten können.

Der Hardware-gestützte Multithread-Prozessor 12 beinhaltet auch einen Zentralcontroller 20, der beim Laden von Microcode-Control für andere Ressourcen des Hardwaregestützten Multithread-Prozessors 12 assistiert und andere Universal-Computerfunktionen wie die Handhabung von Protokollen, Ausnahmen, zusätzliche Unterstützung für Paketverarbeitung ausführt, wobei die Mikromaschinen die Pakete für eine ausführlichere Verarbeitung wie beispielsweise in Grenzbedingungen weiterleiten. In einer Ausgestaltung ist der Prozessor 20 eine Architektur auf der Basis von Strong Arm® (Arm ist ein Warenzeichen von ARM Limited, GB). Der Universal-Mikroprozessor 20 hat ein Betriebssystem. Durch das Betriebssystem kann der Prozessor 20 Funktionen zum Einwirken auf Mikromaschinen 22a22f veranlassen. Der Prozessor 20 kann ein beliebiges unterstütztes Betriebssystem verwenden, aber es wird vorzugsweise ein Echtzeitbetriebssystem eingesetzt. Für den als Strong Arm Architektur implementierten Kernprozessor können Betriebssysteme wie MicrosoftNT Real-Time, VXWorks und &mgr;CUS, ein über das Internet erhältliches Freeware-Betriebssystem, verwendet werden.

Der Hardware-gestützte Multithread-Prozessor 12 beinhaltet auch eine Mehrzahl von Funktionsmikromaschinen 22a22f. Funktionsmikromaschinen (Mikromaschinen) 22a22f verwalten jeweils eine Mehrzahl von Programmzählern in Hardware sowie Zustände in Verbindung mit den Programmzählern. Effektiv kann eine entsprechende Mehrzahl von Sätzen von Threads gleichzeitig auf jeder der Mikromaschinen 22a22f aktiv sein, während jeweils immer nur eine tatsächlich arbeitet.

In einer Ausgestaltung gibt es sechs Mikromaschinen 22a22f wie gezeigt. Alle Mikromaschinen 22a22f haben die Kapazität zur Verarbeitung von vier Hardware-Threads. Die sechs Mikromaschinen 22a22f arbeiten mit gemeinsamen Betriebsmitteln wie dem Speichersystem 16 sowie den Busschnittstellen 24 und 28. Das Speichersystem 16 beinhaltet einen SDRAM-Controller 26a (Synchronous Dynamic Random Access Memory) und einen SRAM-Controller 26b (Static Random Access Memory). Der SDRAM-Speicher 16a und der SDRAM-Controller 26a werden gewöhnlich zum Verarbeiten großer Datenvolumen verwendet, z.B. zum Verarbeiten von Netzwerknutzdaten von Netzwerkpaketen. Der SRAM-Controller 26b und der SRAM-Speicher 16b werden in einer Vernetzungsimplementation für latenzarme Sofortzugriff-Tasks eingesetzt, z.B. zum Zugreifen auf Lookup-Tabellen, Speicher für den Kernprozessor 20 usw.

Die sechs Mikromaschinen 22a22f greifen, je nach den Charakteristiken der Daten, entweder auf den SDRAM 16a oder den SRAM 16b zu. Somit werden die latenzarmen Daten niedriger Bandbreite im SRAM gespeichert und von dort abgerufen, während Daten mit höherer Bandbreite, für die Latenz nicht so wichtig ist, im SDRAM gespeichert und von dort abgerufen werden. Die Mikromaschinen 22a22f können Speicherreferenzanweisungen entweder zum SDRAM-Controller 26a oder zum SRAM-Controller 16b ausführen.

Die Vorteile von Hardware-Multithreading können anhand von SRAM- oder SDRAM-Speicherzugriffen erläutert werden. So bewirkt beispielsweise ein von einem Thread_0 angeforderter SRAM-Zugriff von einer Mikromaschine, dass der SRAM-Controller 26b einen Zugriff auf den SRAM-Speicher 16b einleitet. Der SRAM-Controller steuert die Zuteilung für den SRAM-Bus, greift auf den SRAM 16b zu, ruft die Daten vom SRAM 16b ab und sendet die Daten zu einer anfordernden Mikromaschine 22a22b zurück. Während eines SRAM-Zugriffs wäre die Mikromaschine, z.B. 22a, wenn sie nur einen einzigen Thread hätte, der arbeiten könnte, im Ruhezustand, bis Daten vom SRAM zurückgegeben werden. Mittels Hardware-Kontextumlagerung in den einzelnen Mikromaschinen 22a22f kann ermöglicht werden, dass andere Kontexte mit eindeutigen Programmzählern in derselben Mikromaschine ablaufen. Somit kann ein anderer Thread, z.B. Thread 1, ablaufen, während der erste Thread, z.B. Thread 0, auf die Rückkehr der Lesedaten wartet. Während der Ausführung kann Thread 1 auf den SDRAM-Speicher 16a zugreifen. Während Thread 1 an der SDRAM-Einheit und Thread 0 an der SRAM-Einheit arbeitet, kann jetzt ein neuer Thread, z.B. Thread 2, in der Mikromaschine 22a arbeiten. Thread 2 kann für eine bestimmte Zeit arbeiten, bis er auf Speicher zugreifen oder eine andere Operation mit langer Latenz durchführen muss, wie z.B. die Durchführung eines Zugriffs auf eine Busschnittstelle. Somit kann der Prozessor 12 gleichzeitig einen Busvorgang, einen SRAM-Vorgang und einen SDRAM-Vorgang durchführen, die alle von einer Mikromaschine 22a vollendet oder bearbeitet werden, und noch einen Thread verfügbar haben, um mehr Arbeit im Datenpfad zu verrichten.

Hardware-Kontextumlagerung synchronisiert auch die Vollendung von Tasks. So könnten beispielsweise zwei Threads auf dieselbe Gemeinschaftsressource treffen, z.B. auf SRAM. Jede dieser separaten Funktionseinheiten, z.B. die FBUS-Schnittstelle 28, der SRAM-Controller 26a und der SDRAM-Controller 26b, sendet nach Vollendung einer angeforderten Task von einem der Mikromaschinen-Thread-Kontexten einen Flag zurück, der die Vollendung eines Vorgangs anzeigt. Wenn die Mikromaschine den Flag erhält, kann sie bestimmen, welchen Thread sie einschaltet.

Ein Beispiel für den Einsatz eines Hardware-gestützten Multithread-Prozessors 12 ist als Netzwerkprozessor. Als Netzwerkprozessor hat der Hardware-gestützte Multithread-Prozessor 12 Verbindung mit Netzgeräten wie z.B. einem Media-Access-Controller, z.B. einem 10/100BaseT Octal MAC 13a oder einem Gigabit-Ethernet-Gerät 13b. Im Allgemeinen kann der Hardware-gestützte Multithread-Prozessor 12 als Netzwerkprozessor Verbindung mit jedem beliebigen Kommunikationsgerät- oder Schnittstellentyp haben, der große Datenmengen empfängt/sendet. Das in einer vernetzten Anwendung arbeitende Kommunikationssystem 10 könnte eine Mehrzahl von Netzwerkpaketen von den Geräten 13a, 13b empfangen und diese Pakete auf parallele Weise verarbeiten.

Mit dem Hardware-gestützten Multithread-Prozessor 12 kann jedes Netzwerkpaket unabhängig verarbeitet werden.

Ein weiteres Einsatzbeispiel für den Prozessor 12 ist als Druckmaschine für einen Postscript-Prozessor oder als Prozessor für ein Speichersubsystem, d.h. RAID-Plattenspeicherung. Ein weiterer Einsatzzweck ist als Anpassungsmaschine. So erfordert beispielsweise in der Wertpapierbranche der aufgekommene elektronische Handel den Einsatz von elektronischen Anpassungsmaschinen, um Käufer und Verkäufer für Aufträge zusammenzubringen. Diese und andere parallele Typen von Tasks können mit dem System 10 ausgeführt werden.

Der Prozessor 12 beinhaltet eine Busschnittstelle 28, die den Prozessor mit dem zweiten Bus 18 verbindet. Die Busschnittstelle 28 in einer Ausgestaltung verbindet den Prozessor 12 mit dem so genannten FBUS 18 (FIFO-Bus). Die FBUS-Schnittstelle 28 ist für die Steuerung und Verbindung des Prozessors 12 mit dem FBUS 18 verantwortlich. Der FBUS 18 ist ein 64 Bit breiter FIFO Bus für die Verbindung mit Media-Access-Controllern (MAC).

Der Prozessor 12 beinhaltet eine zweite Schnittstelle, z.B. eine PCI-Busschnittstelle 24, die andere auf dem PCI-Bus 14 befindliche Systemkomponenten mit dem Prozessor 12 verbindet. Die PCI-Busschnittstelle 24 bietet einen schnellen Datenpfad 24a zum Speicher 16, z.B. dem SDRAM-Speicher 16a. Dieser Datenpfad ermöglicht einen schnellen Transfer vom SDRAM 16a durch den PCI-Bus 14 per Direct Memory Access (DMA). Der Hardware-gestützte Multithread-Prozessor 12 unterstützt Bildübertragungen. Der Hardwaregestützte Multithread-Prozessor 12 kann eine Mehrzahl von DMA-Kanälen verwenden. Wenn also ein Ziel eines DMA-Transfers belegt ist, dann kann ein anderer DMA-Kanal den PCI-Bus zum Weiterleiten von Informationen zu einem anderen Ziel übernehmen, um den Prozessor 12 effizient zu halten.

Darüber hinaus unterstützt die PCI-Busschnittstelle 24 Ziel- und Master-Vorgänge. Bei Zielvorgängen handelt es sich um Operationen, bei denen Slave-Geräte auf dem Bus 14 auf SDRAMs über Lese- und Schreibvorgänge zugreifen, die wie Slave-zu-Ziel-Operationen behandelt werden. Bei Master-Operationen sendet der Prozessorkern 20 Daten direkt zur Busschnittstelle 24 oder empfängt sie direkt davon.

Jede der Funktionseinheiten ist mit einem oder mehreren internen Bussen verbunden. Wie nachfolgend beschrieben, sind die internen Busse duale 32-Bit-Busse (d.h. ein Bus zum Lesen und einer zum Schreiben). Der Hardware-gestützte Multithread-Prozessor 12 ist auch so konstruiert, dass die Summe der Bandbreiten der internen Busse im Prozessor 12 größer ist als die Bandbreite von mit dem Prozessor 12 verbundenen externen Bussen. Der Prozessor 12 beinhaltet einen internen Kernprozessorbus 32, z.B. einen ASB-Bus (Advanced System Bus), der den Prozessorkern 20 mit dem Speicher-Controller 26a, 26c sowie mit einem nachfolgend beschriebenen ASB-Translator 30 verbindet. Der ASB-Bus ist eine Teilmenge des so genannten AMBA-Busses, der mit dem Strong Arm Prozessorkern verwendet wird. Der Prozessor 12 beinhaltet auch einen privaten Bus 34, der die Mikromaschineneinheiten mit dem SRAM-Controller 26b, dem ASB-Translator 30 und der FBUS-Schnittstelle 28 verbindet. Ein Speicherbus 38 verbindet den Speicher-Controller 26a, 26b mit den Busschnittstellen 24 und 28 sowie dem Speichersystem 16, einschließlich dem Flashrom 16c, der für Boot-Vorgänge usw. verwendet wird.

Mit Bezug auf 2, jede der Mikromaschinen 22a22f beinhaltet einen Arbiter, der Flags untersucht, um die verfügbaren Threads zu ermitteln, an denen gearbeitet werden kann. Jeder Thread von jeder der Mikromaschinen 22a22f kann auf den SDRAM-Controller 26a, den SDRAM-Controller 26b oder die FBUS-Schnittstelle 28 zugreifen. Die Speicher-Controller 26a und 26b beinhalten jeweils eine Mehrzahl von Warteschlangen zum Speichern von ausstehenden Speicherreferenzanforderungen. Die Warteschlangen können entweder eine Reihenfolge von Speicherreferenzen führen oder Speicherreferenzen so arrangieren, dass die Speicherbandbreite optimiert wird. Wenn beispielsweise ein Thread 0 keine Abhängigkeiten und keine Beziehung zu einem Thread 1 hat, dann gibt es keinen Grund, warum Thread 1 und 0 nicht ihre Speicherreferenzen zur SRAM-Einheit außer der Reihe vollenden könnten. Die Mikromaschinen 22a22f geben Speicherreferenzanforderungen an die Speicher-Controller 26a und 26b aus. Die Mikromaschinen 22a22f fluten die Speichersubsysteme 26a und 26b mit so vielen Speicherreferenzoperationen, dass die Speichersubsysteme 26a und 26b für den Betrieb des Prozessors 12 zu einem Engpass werden.

Wenn das Speichersubsystem 16 mit Speicheranforderungen geflutet wird, die von ihrer Natur aus unabhängig sind, dann kann der Prozessor 12 Speicherreferenzen sortieren. Durch Sortieren von Speicherreferenzen wird die erzielbare Speicherbandbreite verbessert. Speicherreferenzsortierung reduziert, wie nachfolgend beschrieben, Totzeit oder eine Blase, die mit Zugriffen auf SRAM auftritt. Mit Speicherreferenzen auf SRAM wird durch Umschalten der aktuellen Richtung auf Signalleitungen zwischen Lese- und Schreibvorgängen eine Blase oder eine Totzeit erzeugt, während der gewartet wird, bis sich Strom auf Leitern einschwingt, die den SRAM 16b mit dem SRAM-Controller 26b verbinden.

Das heißt, die Treiber, die Strom auf dem Bus treiben, müssen sich einschwingen, bevor sie ihre Zustände ändern. So können wiederholte Zyklen eines Lesevorgangs, gefolgt von einem Schreibvorgang, die Spitzenbandbreite senken. Speicherreferenzsortierung erlaubt es dem Prozessor 12, Referenzen auf Speicher so zu organisieren, dass auf lange Folgen von Lesevorgängen lange Folgen von Schreibvorgängen folgen können. Damit kann die Totzeit in der Pipeline minimiert werden, um effektiv näher an die maximale verfügbare Bandbreite heranzukommen. Referenzsortierung hilft beim Verwalten paralleler Hardware-Kontextthreads. Am SDRAM ermöglicht Referenzsortierung das Verbergen von Vorladungen von einer Bank zu einer anderen Bank. Spezifisch ausgedrückt, wenn das Speichersystem 16b in eine ungeradzahlige Bank und eine geradzahlige Bank organisiert ist, während der Prozessor an der ungeradzahligen Bank arbeitet, dann kann der Speicher-Controller mit dem Vorladen der geradzahligen Bank beginnen. Ein Vorladen ist dann möglich, wenn Speicherreferenzen zwischen ungeradzahligen und geradzahligen Banken alternieren. Indem Speicherreferenzen so geordnet werden, dass sie zwischen Zugriffen auf entgegengesetzte Bänke alternieren, verbessert der Prozessor 12 die SDRAM-Bandbreite. Darüber hinaus können weitere Optimierungen verwendet werden. So können z.B. Mischoptimierungen, bei denen Operationen, die gemischt werden können, vor einem Speicherzugriff gemischt werden, Offene-Seiten-Optimierungen, bei denen aufgrund einer Untersuchung von Adressen eine offene Speicherseite nicht neu geöffnet wird, Verkettung wie nachfolgend beschrieben und Auffrischmechanismen verwendet werden.

Die FBUS-Schnittstelle 28 unterstützt Sende- und Empfangsflags für jeden Port, den ein MAC-Gerät unterstützt, zusammen mit einem Interrupt-Flag, das anzeigt, wenn ein Service gerechtfertigt ist. Die FBUS-Schnittstelle 28 beinhaltet auch einen Controller 28a, der eine Kopfzeilenverarbeitung an eingehenden Paketen vom FBUS 18 durchführt. Der Controller 28a extrahiert die Paketkopfzeilen und führt einen mikroprogrammierbaren hash-codierten Quelle/Ziel/Protokoll-Lookup-Vorgang (wird für Adressglättung verwendet) im SRAM durch. Wenn sich der Hash-Code nicht erfolgreich auflöst, dann wird die Paketkopfzeile zum Prozessorkern 20 zur Weiterverarbeitung gesendet. Die FBUS-Schnittstelle 28 unterstützt die folgenden internen Datentransaktionen:

Der FBUS 18 ist ein standardmäßiger Industriebus und beinhaltet einen Datenbus, z.B. 64 Bit breit, und Seitenbandsteuerung für Adress- und Lese-/Schreibsteuerung. Die FBUS-Schnittstelle 28 bietet die Möglichkeit, große Datenmengen über eine Reihe von Ein- und Ausgabe-FIFOs 29a29b einzugeben. Von den FIFOs 29a29b rufen die Mikromaschinen 22a22f Daten vom SDRAM-Controller 26a ab oder weisen ihn an, Daten von einem Empfangs-FIFO, in dem Daten von einem Gerät auf dem Bus 18 gekommen sind, zur FBUS-Schnittstelle 28 zu verschieben. Die Daten können durch den Speicher-Controller 26a über einen Direct-Memory-Access zum SDRAM-Speicher 16a gesendet werden. Ebenso können die Mikromaschinen Daten vom SDRAM 26a zur Schnittstelle 28, zum FBUS 18, über die FBUS-Schnittstelle 28 übertragen.

Datenfunktionen werden unter den Mikromaschinen verteilt. Die Konnektivität zu SRAM 26a, SDRAM 26b und FBUS 28 ist über Befehlsanforderungen gegeben. Eine Befehlsanforderung kann eine Speicheranforderung oder eine FBUS-Anforderung sein. So kann eine Speicheranforderung beispielsweise Daten von einem Register in einer Mikromaschine 22a zu einer Gemeinschaftsressource senden, z.B. einer SDRAM-Stelle, einer SRAM-Stelle, zu einem Flash-Speicher oder zu einer MAC-Adresse. Die Befehle werden zu den einzelnen Funktionseinheiten und zu den Gemeinschaftsressourcen gesendet. In den Gemeinschaftsressourcen ist jedoch keine lokale Pufferung der Daten nötig, sondern die Gemeinschaftsressourcen greifen auf verteilte Daten in den Mikromaschinen zu. Dadurch haben die Mikromaschinen 22a22f lokal Zugang zu Daten, ohne dass Buszugriffsberechtigungen zugeteilt werden müssten oder die Gefahr einer Konkurrenz auf dem Bus gegeben wäre. Mit dieser Funktion gibt es einen 0-Zyklus-Aufenthalt zum Warten auf Daten innerhalb der Mikromaschinen 22a22f.

Die Datenbusse, z.B. ASB-Bus 30, SRAM-Bus 34 und SDRAM-Bus 38, die diese Gemeinschaftsressourcen verbinden, z.B. Speicher-Controller 26a und 26b, haben eine ausreichende Bandbreite, so dass es keine internen Engpässe gibt. Somit hat der Prozessor 12 zur Vermeidung von Engpässen eine Bandbreitenanforderung, bei der jede der Funktionseinheiten wenigstens das Zweifache der maximalen Bandbreite der internen Busse erhält. Zum Beispiel, der SDRAM kann einen 64 Bit breiten Bus mit 83 MHz betreiben. Der SRAM-Datenbus könnte separate Lese- und Schreibbusse haben, z.B. einen Lesebus von 32 Bit Breite mit 166 MHz und einen Schreibbus von 32 Bit Breite mit 166 MHz. Das heißt im Wesentlichen, dass 64 Bit mit 166 MHz laufen, was effektiv das Zweifache der Bandbreite des SDRAM ist.

Der Kernprozessor 20 kann ebenfalls auf die Gemeinschaftsressourcen zugreifen. Der Kernprozessor 20 hat eine Direktkommunikation mit dem SDRAM-Controller 26a, der Busschnittstelle 24 und dem SRAM-Controller 26b über den Bus 32. Zum Zugreifen auf die Mikromaschinen 22a22f und Transferregister in beliebigen der Mikromaschinen 22a22f greift der Kernprozessor 20 jedoch über den ASB-Translator 30 über den Bus 34 auf die Mikromaschinen 22a22f zu. Der ASB-Translator 30 kann sich physisch in der Busschnittstelle 28 befinden, ist aber logisch getrennt. Der ASB-Translator 30 führt eine Adressumsetzung zwischen Transferregisterstellen der FBUS-Mikromaschinen und Kernprozessoradressen (d.h. ASB-Bus) durch, so dass der Kernprozessor 20 auf Register zugreifen kann, die zu den Mikromaschinen 22a22c gehören.

Mikromaschinen 22 können zwar den Registersatz zum Austauschen von Daten wie nachfolgend beschrieben verwenden, aber es ist auch ein Notizblockspeicher 27 vorgesehen, damit Mikromaschinen Daten auf den Speicher ausschreiben können, damit sie von anderen Mikromaschinen gelesen werden. Der Notizblockspeicher 27 ist mit dem Bus 34 gekoppelt.

Der Prozessorkern 20 beinhaltet einen RISC-Kern 50, der in einer fünfstufigen Pipeline implementiert ist, die eine Ein-Zyklus-Verschiebung von einem Operanden oder zwei Operanden in einem einzigen Zyklus durchführt und Multiplikationssupport sowie 32-Bit-Barrel-Shift-Support bietet. Dieser RISC-Kern 50 ist eine standardmäßige Strong Arm® Architektur, ist aber aus Leistungsgründen mit einer fünfstufigen Pipeline ausgeführt. Der Prozessorkern 20 beinhaltet auch einen 16-KB-Befehlscache 52, einen 8-KB-Datencache 64 und einen Prefetch-Stream-Puffer 56. Der Kernprozessor 20 führt arithmetische Vorgänge parallel zu Speicherschreib- und Anweisungsabrufvorgängen durch. Der Kernprozessor 20 hat über den ARM-definierten ASB-Bus Verbindung mit anderen Funktionseinheiten. Der ASB-Bus ist ein bidirektionaler 32-Bit-Bus 32.

Mikromaschinen

3 zeigt ein Beispiel für eine der Mikromaschinen 22a22f, z.B. Mikromaschine 22f. Die Mikromaschine hat einen Steuerspeicher 70, der in einer Implementation einen RAM von hier 1024 Wörtern von je 32 Bit beinhaltet. Der RAM speichert ein Mikroprogramm. Das Mikroprogramm kann vom Kernprozessor 20 geladen werden. Die Mikromaschine 22f beinhaltet auch Controller-Logik 72. Die Controller-Logik beinhaltet einen Anweisungsdecoder 73 sowie Programmzähler-(PC) Einheiten 72a72d. Die vier Mikroprogrammzähler 72a-72d sind in Hardware ausgeführt. Die Mikromaschine 22f hat auch Kontextevent-Umschaltlogik 74. Kontexteventlogik 74 empfängt Meldungen (z.B. SEQ_#_EVENT_RESPONSE; FBI_EVENT_RESPONSE; SRAM EVENT_RESPONSE; SDRAM _EVENT_RESPONSE; und ASB _EVENT_RESPONSE) von jeder der Gemeinschaftsressourcen, z.B. SRAM 26a, SDRAM 26b oder Prozessorkern 20, Steuer- und Statusregister usw. Diese Meldungen geben Informationen darüber, ob eine angeforderte Funktion vollendet wurde. Je nach dem, ob eine von einem Thread angeforderte Funktion vollendet und die Vollendung signalisiert ist, muss der Thread auf dieses Vollendungssignal warten, und wenn der Thread für den Betrieb freigegeben ist, dann wird er auf eine Verfügbare-Threads-Liste (nicht dargestellt) gesetzt. Die Mikromaschine 22f kann maximal z.B. 4 Threads zur Verfügung haben.

Zusätzlich zu Event-Signalen, die lokal zu einem laufenden Thread sind, verwenden die Mikromaschinen 22 Signalisierungszustände, die global sind. Beim Signalisieren von Zuständen kann ein laufender Thread einen Signalzustand zu allen Mikromaschinen 22 rundsenden. Nach dem Empfang eines Anforderung-verfügbar-Signals können beliebige und alle Threads in den Mikromaschinen an diesen Signalisierungszuständen verzweigen. Anhand dieser Signalisierungszustände kann die Verfügbarkeit einer Ressource oder die Fälligkeit einer Ressource für einen Service ermittelt werden.

Die Kontexteventlogik 74 hat eine Zuteilung für die vier (4) Threads. In einer Ausgestaltung erfolgt die Zuteilung auf zyklische Weise. Es können auch andere Techniken zum Einsatz kommen, wie z.B. die Einreihung in eine Prioritätswarteschlange oder eine Gewichtete-Fairness-Warteschlange. Die Mikromaschine 22f beinhaltet auch einen Ausführungsbox- (EBOX) Datenpfad 76, der eine Arithmetik-Logik-Einheit 76a sowie einen Universalregistersatz 76b beinhaltet. Die Arithmetik-Logik-Einheit 76a führt Rechen- und Logikfunktionen sowie Verschiebungsfunktionen durch. Der Registersatz 76b hat eine relativ große Zahl von Universalregistern. Wie in 3B illustriert, gibt es in dieser Implementation 64 Universalregister in einer ersten Bank, Bank A, und 64 in einer zweiten Bank, Bank B. Die Universalregister haben eine Fensterstruktur, wie nachfolgend beschrieben wird, so dass sie relativ und absolut adressierbar sind.

Die Mikromaschine 22f beinhaltet auch einen Schreibtransferregisterstapel 78 und einen Lesetransferstapel 80. Auch diese Register haben eine Fensterstruktur, so dass sie relativ und absolut adressierbar sind. Der Schreibtransferregisterstapel 78 ist dort, wo sich Daten zu einer Ressource befinden. Ebenso ist der Leseregisterstapel 80 für die Rückgabe von Daten von einer Gemeinschaftsressource. Im Anschluss an die oder gleichzeitig mit der Ankunft von Daten wird ein Event-Signal von der jeweiligen Gemeinschaftsressource, z.B. SRAM-Controller 26a, SDRAM-Controller 26b oder Kernprozessor 20, zum Kontexteventarbiter 74 gesendet, der dann den Thread darüber in Kenntnis setzt, dass die Daten zur Verfügung stehen oder gesendet wurden. Beide Transferregisterbänke 78 und 80 sind durch einen Datenpfad mit der Ausführungsbox (EBOX) 76 verbunden. In einer Implementation hat das Lesetransferregister 64 Register und das Schreibtransferregister hat 64 Register.

Wie in 3A gezeigt, verwaltet der Mikromaschinen-Datenpfad eine 5-stufige Mikropipeline 82. Diese Pipeline beinhaltet Nachschlagen von Mikrobefehlswörtern 82a, Bilden der Registerdateiadressen 82b, Lesen von Operanden von der Registerdatei 82c, ALU, Verschiebe- oder Vergleichsoperationen 82d sowie Zurückschreiben von Ergebnissen auf Register 82e. Durch die Bereitstellung einer Writeback-Datenumgehung in die ALU/Schieber-Einheiten und indem angenommen wird, dass die Register als Registerdatei (und nicht als RAM) implementiert werden, kann die Mikromaschine die Registerdatei gleichzeitig lesen und beschreiben, so dass der Schreibvorgang vollkommen verborgen wird.

Die SDRAM-Schnittstelle 26a sendet ein Signal über Lesevorgänge zurück zur anfordernden Mikromaschine, das anzeigt, ob ein Paritätsfehler an der Leseanforderung aufgetreten ist. Der Mikromaschinen-Microcode prüft den SDRAM-Leseparität-Flag, wenn die Mikromaschine Rückgabedaten verwendet. Nach dem Prüfen des Flags wird dieser, wenn er gesetzt ist, durch Verzweigen darauf entfernt. Der Paritätsflag wird nur dann gesendet, wenn der SDRAM zum Prüfen aktiviert und der SDRAM paritätsgeschützt ist. Die Mikromaschinen und die PCI-Einheit sind die einzigen Requestoren, die über Paritätsfehler in Kenntnis gesetzt werden. Wenn also der Prozessorkern 20 oder der FIFO Paritätsschutz benötigt, dann assistiert eine Mikromaschine bei der Anforderung. Die Mikromaschinen 22a-22f unterstützen konditionelle Verzweigungen. Die ungünstigste konditionelle Verzweigungslatenz (ohne Jumps) tritt dann auf, wenn die Verzweigungsentscheidung die Folge von Bedingungscodes ist, die von der vorherigen Mikrosteuerungsanweisung gesetzt wurden. Die Latenz ist nachfolgend in Tabelle 1 dargestellt:

wobei nx ein Vor-Verzweigung-Mikrowort ist (n1 setzt cc's)

cb eine konditionelle Verzweigung ist

bx ein Nach-Verzweigung-Mikrowort ist

XX ein abgebrochenes Mikrowort ist

Wie in Tabelle 1 gezeigt, werden die Konditionscodes von n1 erst bei Zyklus 4 gesetzt, und die Verzweigungsentscheidung kann getroffen werden (die in diesem Fall bewirkt, dass der Verzweigungspfad in Zyklus 5 nachgeschlagen wird). Die Mikromaschine verursacht einen 2-Zyklus-Verzweigungslatenz-Mehraufwand, weil sie Vorgänge n2 und n3 (die beiden Mikrowörter direkt hinter der Verzweigung) in der Pipe abbrechen muss, bevor der Verzweigungspfad damit beginnt, die Pipe mit Operation b1 zu füllen. Erfolgt die Verzweigung nicht, dann werden keine Mikrowörter abgebrochen und die Ausführung wird normal fortgesetzt. Die Mikromaschinen haben mehrere Mechanismen, um die effektive Verzweigungslatenz zu reduzieren oder zu eliminieren.

Die Mikromaschinen unterstützen verschobene Verzweigungen. Eine Verschiebung von Verzweigungen ist dann gegeben, wenn es eine Mikromaschine zulässt, dass 1 oder 2 Mikrowörter nach der Verzweigung auftreten, bevor die Verzweigung wirksam wird (d.h. der Effekt der Verzweigung wird zeitlich „verschoben"). Wenn also gefunden wird, dass nützliche Arbeit die verschwendeten Zyklen nach dem Verzweigungsmikrowort füllt, dann kann die Verzweigungslatenz verborgen werden. Eine um 1 Zyklus verschobene Verzweigung ist unterhalb der Stelle zu sehen, wo n2 nach cb, aber vor b1 ablaufen kann:

Eine um 2 Zyklen verschobene Verzweigung wird nachfolgend dargestellt, wo n2 und n3 vor dem Auftreten der Verzweigung zu b1 fertig werden können. Man beachte, dass eine um 2 Zyklen verschobene Verzweigung nur dann zulässig ist, wenn die Bedingungscodes an dem Mikrowort vor der Verzweigung gesetzt sind.

Die Mikromaschinen unterstützen auch Bedingungscode-Beurteilung. Wenn die Bedingungscodes, an denen eine Verzweigungsentscheidung getroffen wird, 2 oder mehr Mikrowörter vor der Verzweigung gesetzt werden, dann kann 1 Zyklus der Verzweigungslatenz eliminiert werden, weil die Verzweigungsentscheidung 1 Zyklus früher getroffen werden kann:

In diesem Beispiel setzt n1 die Bedingungscodes und n2 setzt die Bedingungscodes nicht. Daher kann die Verzweigungsentscheidung in Zyklus 4 (anstatt 5) getroffen werden, um 1 Zyklus Verzweigungslatenz zu eliminieren. In dem Beispiel unten wird die Verzweigungsverschiebung von 1 Zyklus und das frühzeitige Setzen von Bedingungscodes kombiniert, um die Verzweigungslatenz völlig zu verbergen: Bedingungscodes (cc's) werden 2 Zyklen vor einer um 1 Zyklus verzögerten Verzweigung gesetzt:

In dem Fall, in dem die Bedingungscodes nicht frühzeitig gesetzt werden können (d.h. sie werden in dem Mikrowort vor der Verzweigung gesetzt), unterstützt die Mikromaschine eine Verzweigungsschätzung, die versucht, den verbleibenden 1 Zyklus von exponierter Verzweigungslatenz zu reduzieren. Durch „Schätzen" des Verzweigungspfades oder des Folgepfades liest der Mikrosequencer den geschätzten Pfad einen Zyklus, bevor er definitiv weiß, welchen Pfad er abarbeitet. Wenn er richtig schätzt, dann wird 1 Zyklus Verzweigungslatenz wie nachfolgend gezeigt eliminiert:

Schätzung: Verzweigung genommen / Verzweigung wird genommen

Wenn der Mikrocode eine genommene Verzweigung falsch schätzt, dann verschwendet die Mikromaschine nur 1 Zyklus:

Schätzung: Verzweigung genommen / Verzweigung wird NICHT genommen

Der Latenzmehraufwand wird jedoch anders verteilt, wenn der Mikrocode schätzt, dass eine Verzweigung nicht genommen wird:

Für ein Schätzung Verzweigung NICHT genommen / Verzweigung wird NICHT genommen, gibt es keine verschwendeten Zyklen, wie nachfolgend gezeigt wird.

Für eine Schätzung Verzweigung NICHT genommen / Verzweigung wird genommen gibt es jedoch 2 verschwendete Zyklen.

Die Mikromaschine kann Verzweigungsschätzung mit einer 1-Zyklus-Verzweigungsverschiebung kombinieren, um das Ergebnis noch weiter zu verbessern. Für "Schätzung: Verzweigung genommen mit um 1 Zyklus verschobener Verzweigung / Verzweigung wird genommen" sieht das Ergebnis so aus:

In dem obigen Fall werden die beiden Zyklen an Verzweigungslatenz durch die Ausführung von n2 und durch korrektes Schätzen der Verzweigungsrichtung verborgen. Wenn Mikrocode falsch schätzt, dann bleibt 1 Zyklus Verzweigungslatenz wie nachfolgend gezeigt exponiert:

Schätzung: Verzweigung mit um 1 Zyklus verschobener Verzweigung genommen / Verzweigung NICHT genommen

Wenn Mikrocode ein "Verzweigung NICHT genommen" richtig schätzt, dann fließt die Pipeline sequentiell im normalen ungestörten Fall. Wenn Mikrocode "Verzweigung NICHT genommen" falsch schätzt, dann exponiert die Mikromaschine wieder 1 Zyklus an unproduktiver Ausführung, wie nachfolgend gezeigt wird:

Schätzung: Verzweigung NICHT genommen / Verzweigung wird genommen
wobei nx Vor-Verzweigungs-Mikrowort ist (n1 setzt cc's)

cb konditionelle Verzweigung ist

bx Nach-Verzweigung-Mikrowort ist

XX abgebrochenes Mikrowort ist

Im Falle einer Jump-Anweisung werden 3 zusätzliche Latenzzyklen verursacht, weil die Verzweigungsadresse erst am Ende des Zyklus bekannt ist, in dem der Jump in der ALU-Stufe ist:

Kontextschalter:

3B zeigt ein Format von einer Kontextschaltanweisung. Ein Kontextschalter ist eine spezielle Form einer Verzweigung, die bewirkt, dass ein anderer Kontext (und zugehöriger PC) gewählt wird. Auch Kontextschaltung verursacht ein gewisses Maß an Verzweigungslatenz. Man betrachte den folgenden Kontextschalter:

wobei ox der alte Kontextfluss ist

br Verzweigungs-Mikrowort in altem Kontext ist

ca Kontext-Neuzuteilung (verursacht Kontextumschaltung) ist

nx neuer Kontextfluss ist

XX abgebrochenes Mikrowort ist

In einem Kontextschalter wird das Mikrowort „br" abgebrochen, um die Steuer- und Timing-Komplexitäten zu vermeiden, die durch Speichern des richtigen alten Kontext-PC entstehen könnten.

Konditionelle Verzweigungen, die an ALU-Bedingungscodes arbeiten, die vor der Verzweigung am Mikrowort gesetzt werden, können Verzweigungsverschiebungen von 0, 1 oder 2 Zyklen wählen. Bedingungscodes, die 2 oder mehr Mikroworte vor der daran tätigen konditionellen Verzweigung gesetzt werden, können eine Verzweigungsverschiebung von 0 oder 1 Zyklus wählen. Alle anderen Verzweigungen (inkl. Kontextneuzuteilung) können eine Verzweigungsverschiebung von 0 oder 1 Zyklus wählen. Die Architektur könnte so ausgelegt werden, dass sie ein Kontextzuteilungsmikrowort in einem Verzweigungsverschiebungsfenster eines vorherigen Verzweigungs-, Jump- oder Kontextzuteilungsmikrowortes zu einer illegalen Option macht. Das heißt, in einigen Ausgestaltungen würde eine Kontextumschaltung während eines Verzweigungsübergangs in der Pipeline nicht zugelassen, weil dies, wie erwähnt, das Speichern des alten Kontext-PC zu sehr verkomplizieren würde. Die Architektur könnte auch so ausgelegt werden, dass sie die Verzweigung in dem Verzweigungsverschiebungsfenster eines vorherigen Verzweigungs-, Jump- oder Kontextzuteilungsmikrowortes illegal macht, um kompliziertes und möglicherweise unvorhersehbares Verzweigungsverhalten zu vermeiden.

Jede Mikromaschine 22a22f unterstützt eine Multithread-Ausführung von vier Kontexten. Ein Grund hierfür ist zuzulassen, dass ein Thread mit der Ausführung beginnt, unmittelbar nachdem ein anderer Thread eine Speicherreferenz ausgibt, und warten muss, bis diese Referenz beendet ist, bevor weitere Arbeiten durchgeführt werden. Dieses Verhalten ist kritisch, um die Hardware-Ausführung der Mikromaschinen effizient zu halten, weil die Speicherlatenz signifikant ist. Oder anders ausgedrückt, wenn nur eine einzige Thread-Ausführung unterstützt wurde, dann würden die Mikromaschinen für eine signifikante Anzahl von Zyklen untätig sitzen und auf die Rückkehr von Referenzen warten und dadurch den Rechendurchsatz insgesamt reduzieren. Eine Multithread-Ausführung lässt es zu, dass Mikromaschinen Speicherlatenz verbergen, indem sie nützliche unabhängige Arbeit über mehrere Threads durchführen. Es werden zwei Synchronisationsmechanismen vorgesehen, damit ein Thread eine SRAM- oder SDRAM-Referenz ausgeben kann und dann nachfolgend auf den Zeitpunkt synchronisiert wird, an dem diese Referenz vollendet ist.

Ein Mechanismus ist Sofortsynchronisation. Bei Sofortsynchronisation gibt die Mikromaschine die Referenz aus und lagert den Kontext sofort aus. Dem Kontext wird mitgeteilt, wenn die entsprechende Referenz beendet ist. Nach der Mitteilung wird der Kontext wieder zur Ausführung eingelagert, wenn ein Kontextumlagerungsevent auftritt und er an der Reihe ist. Somit wird, vom Standpunkt des Anweisungsstroms eines einzigen Kontexts her gesehen, das Mikrowort nach der Ausgabe der Speicherreferenz erst nach Vollendung der Referenz ausgeführt.

Ein zweiter Mechanismus ist verzögerte Synchronisation. In verzögerter Synchronisation gibt die Mikromaschine die Referenz aus und führt dann weiter andere nützliche Arbeit unabhängig von der Referenz durch. Einige Zeit später könnte es notwendig werden, den Ausführungsstrom des Thread auf die Vollendung der ausgegebenen Referenz zu synchronisieren, bevor weitere Arbeit durchgeführt wird. An dieser Stelle wird ein Synchronisierungsmikrowort ausgeführt, das entweder den aktuellen Thread auslagert und ihn irgendwann später zurücklagert, wenn die Referenz fertig ist, oder mit der Ausführung des aktuellen Threads fortfährt, weil die Referenz bereits fertig ist. Verzögerte Synchronisation erfolgt mit zwei verschiedenen Signalisierungsschemata:

Wenn die Speicherreferenz mit einem Transferregister assoziiert ist, wird das Signal, von dem der Thread ausgelöst wird, generiert, wenn das entsprechende Transferregister-Gültig-Bit gesetzt oder gelöscht ist. Zum Beispiel würde ein SRAM-Lesevorgang, der Daten im Transferregister A ablegt, dann signalisiert, wenn das Gültig-Bit für A gesetzt ist. Wenn die Speicherreferenz mit dem Transfer-FIFO oder dem Empfangs-FIFO anstatt einem Transferregister assoziiert ist, dann wird das Signal generiert, wenn die Referenz im SDRAM-Controller 26a fertig ist. Im Mikromaschinen-Scheduler wird nur ein Signalzustand pro Kontext gespeichert, und daher kann in diesem Schema nur ein ausstehendes Signal existieren.

Es gibt wenigstens zwei allgemeine Betriebsparadigmen, von denen Microcontroller-Mikroprogramme entwickelt werden könnten. Eines wäre, dass der gesamte Microcontroller-Rechendurchsatz und die gesamte Speicherbandbreite auf Kosten einer einzelnen Thread-Ausführungslatenz optimiert werden. Dieses Paradigma wäre dort sinnvoll, wo das System mehrere Mikromaschinen hat, die mehrere Threads pro Mikromaschine an nicht zueinander gehörigen Datenpaketen ausführt.

Ein zweites ist, Mikromaschinen-Ausführungslatenz auf Kosten von Mikromaschinen-Gesamtrechendurchsatz und Gesamtspeicherbandbreite zu optimieren. Dieses Paradigma könnte die Ausführung eines Thread mit einer Echtzeitbeschränkung beinhalten, d.h. einer Beschränkung, die diktiert, dass einige Arbeit unbedingt zu einer bestimmten Zeit ausgeführt werden muss. Eine solche Beschränkung erfordert, dass einer Optimierung der Einzelthread-Ausführung Priorität gegenüber anderen Faktoren wie Speicherbandbreite oder Gesamtrechendurchsatz gegeben wird. Ein Echtzeit-Thread würde implizieren, dass eine einzelne Mikromaschine nur einen Thread ausführt. Es würden nicht mehrere Threads gehandhabt, weil es das Ziel ist zuzulassen, dass der einzelne Echtzeit-Thread so bald wie möglich ausgeführt wird – eine Ausführung mehrerer Threads würde diese Möglichkeit behindern.

Die Codierungsweise dieser beiden Paradigmen könnte sich in Bezug auf die Ausgabe von Speicherreferenzen und Kontextumschaltung erheblich unterscheiden. Im Echtzeitfall besteht das Ziel darin, so bald wie möglich möglichst viele Speicherreferenzen auszugeben, um die Speicherlatenz zu minimieren, die von solchen Referenzen verursacht wird. Nach der frühestmöglichen Ausgabe möglichst vieler Referenzen wäre es das Ziel, so viele Rechenvorgänge als die Mikromaschinen wie möglich [sic] parallel zu den Referenzen durchzuführen. Ein Rechenablauf, der einer Echtzeitoptimierung entspricht, lautet:

  • – Ausgabe mem ref 1
  • – Ausgabe mem ref 2
  • – Ausgabe mem ref 3
  • – Ausführung von Arbeit unabhängig von mem refs 1, 2 und 3
  • – Synch auf Vollendung von mem ref 1
  • – Ausführung von Arbeit abhängig von mem ref 1 und unabhängig von mem refs 2 und 3
  • –Ausgabe neuer mem refs auf der Basis von vorheriger Arbeit
  • – Synch auf Vollendung von mem ref 2
  • – Ausführung von Arbeit abhängig von mem refs 1 und 2, unabhängig von mem ref 3
  • –Ausgabe neuer mem refs auf der Basis vorheriger Arbeit
  • – Synch auf Vollendung von mem ref 3
  • – Ausführung von Arbeit abhängig von Vollendung aller 3 refs
  • – Ausgabe neuer mem refs auf der Basis von vorheriger Arbeit

Im Gegensatz dazu wäre der Ansatz für die Optimierung für Durchsatz und Bandbreite anders. Bei Optimierung für Mikromaschinen-Rechendurchsatz und Gesamtspeicherbandbreite würde der Einzelthread-Ausführungslatenz weniger Bedeutung eingeräumt. Um dies zu erzielen, wäre es das Ziel, Speicherreferenzen über das Mikroprogramm für jeden Thread gleichmäßig zu beabstanden. Dies ergäbe einen gleichmäßigen Strom von Speicherreferenzen zu den SRAM- und SDRAM-Controllern und würde die Wahrscheinlichkeit maximieren, dass ein Thread immer verfügbar ist, um die Speicherlatenz zu verbergen, die entsteht, wenn ein anderer Thread ausgelagert wird.

Registerdatei-Adresstypen

Gemäß 3C sind die beiden existierenden Registeradressräume alle lokal zugängige Register und global zugängige Register, auf die alle Mikromaschinen zugreifen können. Die Universalregister (GPR) werden als zwei separate Bänke (Bank A und Bank B) implementiert, deren Adressen auf einer Wort-für-Wort-Basis verschachtelt sind, so dass A-Bank-Register lsb=0 und B-Bank-Register lsb=1 haben. Jede Bank kann gleichzeitig Lese- und Schreibvorgänge an zwei verschiedenen Wörtern in der Bank durchführen.

Über die Bänke A und B ist der Registersatz 76b auch in vier Fenster 76b076b3 von 32 Registern organisiert, die pro Thread relativ adressierbar sind. Somit findet thread_0 sein Register 0 bei 77a (Register 0), thread_1 findet sein Register 0 bei 77b (Register 32), thread_2 findet sein Register 0 bei 77c (Register 64) und thread_3 bei 77d (Register 96). Relative Adressierung wird unterstützt, so dass mehrere Threads genau denselben Steuerspeicher und dieselben Stellen verwenden können, aber auf andere Registerfenster zugreifen und andere Funktionen ausführen. Die Anwendung von Registerfensteradressierung und Bankadressierung ergibt die benötigte Lesebandbreite unter Verwendung von nur Zwei-Port-RAMs in der Mikromaschine 22f.

Diese Fensterregister brauchen keine Daten von einer Kontextumschaltung zur nächsten zu speichern, so dass das normale „push and pop" einer Kontextumlagerungsdatei oder eines Stapels wegfällt. Kontextumschaltung hat hier einen 0-Zyklus-Overhead für den Wechsel von einem Kontext zu einem anderen. Relative Registeradressierung unterteilt die Registerbänke in Fenster über die Adressbreite des Universalregistersatzes. Relative Adressierung erlaubt den Zugriff auf beliebige der Fenster relativ zum Ausgangspunkt des Fensters. Absolute Adressierung wird auch in dieser Architektur unterstützt, wo beliebige der Threads auf beliebige der absoluten Register zugreifen können, indem die exakte Adresse des Registers bereitgestellt wird.

Die Adressierung von Universalregistern 78 kann in 2 Modi je nach Mikrowortformat auftreten. Die beiden Modi sind absolut und relativ. Im Absolutmodus wird die Adressierung einer Registeradresse direkt im 7-Bit-Quellfeld (a6–a0 oder b6–b0) vorgegeben:

Registeradressen, die direkt im 8-Bit-Zielfeld (d7–d0) vorgegeben sind:

Wenn <a6:a5>=1,1, <b6:b5>=1,1 oder <d7:d6>=1,1 ist, dann werden die tieferen Bits als kontextrelatives Adressfeld (nachfolgend beschrieben) interpretiert. Wenn eine nicht-relative A- oder B-Quelladresse im A, B Absolutfeld vorgegeben wird, dann kann nur die untere Hälfte der SRAM/ASB- und SDRAM-Adressräume adressiert werden. Effektiv hat das Lesen von absoluten SRAM/SDRAM-Geräten den effektiven Adressraum; da jedoch diese Beschränkung nicht auf das Zielfeld zutrifft, benutzt der SRAM/SDRAM-Schreibvorgang weiterhin den vollen Adressraum.

Im Relativmodus werden Addressen eine vorgegebene Adresse [sic] im Kontextraum gemäß Definition durch ein 5-Bit-Quellfeld (a4–a0 oder b4–b0) versetzt:

oder gemäß Definition im 6-Bit-Zielfeld (d5–d0):

Wenn <d5:d4>=1,1 ist, dann adressiert die Zieladresse kein gültiges Register, und somit wird kein Zieloperand zurückgeschrieben.

Auf die folgenden Register kann von den Mikromaschinen und den Speicher-Controllern global zugegriffen werden:

Hash-Einheitsregister

Notizblock- und gemeinsame Register

Empfangs-FIFO und Empfangs-Status-FIFO

Sende-FIFO

Sende-Steuer-FIFO

Die Mikromaschinen sind nicht Interrupt-gesteuert. Jeder Mikrofluss wird bis zur Vollendung ausgeführt, dann wird ein neuer Fluss auf der Basis des Zustands gewählt, der von anderen Geräten im Prozessor 12 signalisiert wird.

Gemäß 4 beinhaltet der SDRAM-Speicher-Controller 26a Adress- und Speicherreferenzwarteschlangen 90, bei denen Speicherreferenzanforderungen von den verschiedenen Mikromaschinen 22a22f ankommen. Der Speicher-Controller 26a beinhaltet einen Arbiter 91, der die nächsten der Mikromaschinen-Referenzanforderungen auswählt, die zu einer der Funktionseinheiten gehen sollen. Unter der Annahme, dass eine der Mikromaschinen eine Referenzanforderung gibt, kommt die Referenzanforderung durch die Adress- und Befehlswarteschlange 90 im SDRAM-Controller 26a. Wenn in der Referenzanforderung ein Bit mit der Bezeichnung „optimiertes MEM-Bit" gesetzt ist, dann wird die eingehende Referenzanforderung entweder in die geradzahlige Bankwarteschlange 90a oder in die ungeradzahlige Bankwarteschlange 90b sortiert. Wenn in der Speicherreferenzanforderung kein Speicheroptimierungsbit gesetzt ist, dann geht die Anforderung vorgabemäßig in eine Order-Warteschlange 90c. Der SDRAM-Controller 26 ist ein von FBUS-Schnittstelle 28, Kernprozessor 20 und PCI-Schnittstelle 24 gemeinsam genutztes Betriebsmittel. Der SDRAM-Controller 26 führt auch eine Zustandsmaschine zum Durchführen atomarer READ-MODIFY-Write-Operationen. Der SDRAM-Controller 26 führt auch eine Byte-Ausrichtung für Anforderungen von Daten vom SDRAM durch.

Die Order-Warteschlange 90c verwaltet die Reihenfolge von Referenzanforderungen von den Mikromaschinen. Bei einer Serie von ungeradzahligen und geradzahligen Bankreferenzen ist es möglicherweise erforderlich, dass ein Signal nur nach Abschluss einer Sequenz von Speicherreferenzen zu ungeradzahligen und geradzahligen Bänken zurückgegeben wird. Wenn die Mikromaschine 22f die Speicherreferenzen in ungeradzahlige und geradzahlige Bankreferenzen sortiert und einer der Bänke, z.B. der geradzahligen Bank, die Speicherreferenzen vor der ungeradzahligen Bank ausgehen, aber das Signal auf der letzten geradzahligen Referenz aufgedrückt wird, dann wäre es denkbar, dass der Speicher-Controller 26a einer Mikromaschine signalisiert, dass die Speicheranforderung fertig ist, auch wenn die ungeradzahlige Bankreferenz noch nicht bearbeitet wurde. Dies könnte ein Kohärenzproblem verursachen. Die Situation wird dadurch vermieden, dass die Order-Warteschlange 90c bereitgestellt wird, so dass eine Mikromaschine mehrere ausstehende Speicherreferenzen haben kann, von denen nur die letzte Speicherreferenz einen Abschluss zu signalisieren braucht.

Der SDRAM-Controller 26a beinhaltet auch eine Hohe-Priorität-Warteschlange 90d. In der Hohe-Priorität-Warteschlange 90d geht eine eingehende Speicherreferenz von einer der Mikromaschinen direkt zur Hohe-Priorität-Warteschlange und wird mit einer höheren Priorität bearbeitet als andere Speicherreferenzen in den anderen Warteschlangen. Alle diese Warteschlangen, die Geradzahlige-Bank-Warteschlange 90a, die Ungeradzahlige-Bank-Warteschlange 90b, die Order-Warteschlange 90c und die Hohe-Priorität-Warteschlange, werden in einer einzigen RAM-Struktur implementiert, die logisch in vier verschiedene Fenster segmentiert ist, wobei jedes Fenster seinen eigenen Anfangs- und Endezeiger hat. Da Füll- und Leer-Operationen nur eine einzige Eingabe und eine einzige Ausgabe sind, können sie in dieselbe RAM-Struktur gesetzt werden, um die Dichtigkeit von RAM-Strukturen zu erhöhen.

Der SDRAM-Controller 26a beinhaltet auch Kernbusschnittstellenlogik, d.h. ASB-Bus 92. Die ASB-Busschnittstellenlogik 92 verbindet den Kernprozessor 20 mit dem SDRAM-Controller 26a. Der ASB-Bus ist ein Bus mit einem 32-Bit-Datenpfad und einem 28-Bit-Adresspfad. Auf die Daten wird zu und von dem Speicher durch das MEM-ASB-Datengerät 98 zugegriffen, z.B. ein Puffer. Das MEM-ASB-Datengerät 98 ist eine Warteschlange für Schreibdaten. Wenn Daten vom Kernprozessor 20 über die ASB-Schnittstelle 92 ankommen, dann werden die Daten im MEM-ASB-Gerät 98 gespeichert und nachfolgend aus dem MEM ASB Gerät 98 durch die SDRAM-Schnittstelle 110 zum SDRAM-Speicher 16a entfernt. Obwohl nicht dargestellt, kann dieselbe Warteschlangenstruktur für die Lesevorgänge vorgesehen werden. Der SDRAM-Controller 26a hat auch eine Maschine 97 zum Holen von Daten aus den Mikromaschinen und dem PCI-Bus.

Zusätzliche Warteschlangen sind u.a. die PCI-Adresswarteschlange 94 und die ASB-Lese/Schreib-Warteschlange 96, die eine Reihe von Anforderungen verwalten. Die Speicheranforderungen werden über den Multiplexer 106 zur SDRAM-Schnittstelle 110 gesendet. Der Multiplexer 106 wird vom SDRAM-Arbiter 91 gesteuert, der den Füllegrad der einzelnen Warteschlangen sowie den Status der Anforderungen erfasst und davon ausgehend eine Prioritätsentscheidung auf der Basis eines programmierbaren Wertes trifft, der in einem Prioritätsservice-Steuerregister 100 gespeichert ist.

Wenn die Steuerung zu Multiplexer 106 eine Speicherreferenzanforderung wählt, dann wird die Speicherreferenzanforderung zu einem Decoder 108 gesendet, wo sie decodiert und eine Adresse erzeugt wird. Die decodierte Adresse wird zur SDRAM-Schnittstelle 110 gesendet, wo sie in Reihen- und Spaltenadress-Strobes zerlegt wird, um auf den SDRAM 16a zuzugreifen und um Daten über Datenleitungen 16a, die Daten zum Bus 112 senden, zu schreiben oder zu lesen. In einer Implementation ist der Bus 112 tatsächlich zwei separate Busse anstatt eines einzelnen Busses. Die separaten Busse würden einen Lesebus, der die verteilten Mikromaschinen 22a22f koppelt, und einen Schreibbus beinhalten, der die verteilten Mikromaschinen 22a22f verbindet.

Ein Merkmal des SDRAM-Controllers 26a ist, dass es, wenn eine Speicherreferenz in den Warteschlangen 90 gespeichert wird, zusätzlich zu dem optimierten MEM-Bit, das gesetzt werden kann, ein „Verkettungsbit" gibt. Ein gesetztes Verkettungsbit ermöglicht eine spezielle Handhabung von benachbarten Speicherreferenzen. Wie zuvor erwähnt, steuert der Arbiter 12, welche Mikromaschine dafür ausgewählt wird, Speicherreferenzanforderungen über den Befehlsbus zur Warteschlange 90 (4) zu senden. Das Aufdrücken des Verkettungsbits steuert den Arbiter so, dass er die Funktionseinheit wählt, die zuvor diesen Bus angefordert hat, weil das Setzen des Verkettungsbits anzeigt, dass die Mikromaschine eine Verkettungsanforderung ausgegeben hat.

Benachbarte Speicherreferenzen werden in die Warteschlange 90 aufgenommen, wenn das Verkettungsbit gesetzt ist. Diese benachbarten Referenzen werden typischerweise in der Oder-Warteschlange 90c gespeichert, weil die benachbarten Speicherreferenzen mehrere Speicherreferenzen von einem einzigen Thread sind. Zur Erzielung von Synchronisation braucht der Speicher-Controller 26a nur am Ende der verketteten Speicherreferenzen zu signalisieren, wenn sie fertig sind. In einer optimierten Speicherverkettung (z.B. dann, wenn das optimierte MEM-Bit und das Verkettungsbit gesetzt sind) könnten die Speicherreferenzen jedoch in verschiedene Bänke gehen und potentiell an einer der Bänke enden und das Signal „fertig" ausgeben, bevor die andere Bank völlig leer ist, wodurch die Kohärenz zerstört wird. Daher wird das Verkettungsbit vom Controller 110 benutzt, um die Speicherreferenzen von der aktuellen Warteschlange zu verwalten.

4A zeigt eine Ablaufdarstellung der Zuteilungsrichtlinie im SDRAM-Controller 26a. Die Zuteilungsrichtlinie favorisiert verkettete Mikromaschinen-Speicheranforderungen. Der Prozess 115 beginnt mit dem Untersuchen auf verkettete Mikromaschinen-Speicherreferenzanforderungen 115a. Der Prozess 115 bleibt so lange bei den verketteten Anforderungen, bis das Verkettungsbit entfernt wird. Der Prozess untersucht ASB-Busanforderungen 115b, dann PCI-Busanforderungen 115c, Hohe-Priorität-Warteschlangenservice 115d, Entgegengesetzte-Bank-Anforderungen 115e, Order-Warteschlangenanforderungen 115f und Selbe-Bank-Anforderungen 115g. Verkettete Anforderungen werden vollständig bearbeitet, während Services 115b115d in zyklischer Folge bearbeitet werden. Erst wenn Services 115a115d völlig leer sind, bearbeitet der Prozess Services 115e115g. Verkettete Mikromaschinen-Speicherreferenzanforderungen erfolgen dann, wenn in der vorherigen SDRAM-Speicheranforderung das Verkettungsbit gesetzt ist. Wenn das Verkettungsbit gesetzt ist, dann bearbeitet die Zuteilungsmaschine einfach die Services derselben Warteschlange nochmal, bis das Verkettungsbit entfernt wird. Der ASB hat eine höhere Priorität als PCI wegen des hohen Leistungsmehraufwands, der am Strong-Arm-Kern entsteht, wenn sich der ASB im Wartezustand befindet. Der PCI hat eine höhere Priorität als die Mikromaschinen wegen der Latenzanforderungen von PCI. Bei anderen Bussen könnte die Zuteilungspriorität jedoch anders sein.

4B zeigt eine typische Zeitsteuerung eines Speichers ohne aktive Speicheroptimierung und mit aktiver Speicheroptimierung. Wie ersichtlich ist, maximiert die Verwendung von aktiven Speicheroptimierungen die Auslastung des Busses und verbirgt somit die inhärente Latenz in physikalischen SDRAM-Geräten. In diesem Beispiel kann ein nicht optimierter Zugriff 14 Zyklen erfordern, während ein optimierter Zugriff 7 Zyklen erfordern kann.

5 zeigt den Speicher-Controller 26b für den SRAM. Der Speicher-Controller 26b beinhaltet eine Adress- und Befehlswarteschlange 120. Während der Speicher-Controller 26a (4) eine Warteschlange für die Speicheroptimierung auf der Basis von geradzahligen und ungeradzahligen Banken hat, wird der Speicher-Controller 26b auf der Basis des Speicheroperationstyps optimiert, d.h. Lesen oder Schreiben. Die Adress- und Befehlswarteschlange 120 beinhaltet eine Hohe-Priorität-Warteschlange 120a, eine Lesewarteschlange 120b, die die vorherrschende Speicherreferenzfunktion ist, die ein SRAM ausführt, und eine Order-Warteschlange 120c, die im Allgemeinen alle Schreibvorgänge auf SRAM beinhaltet und liest, die nicht-optimiert sein sollen. Obwohl nicht dargestellt, könnte die Adress- und Befehlswarteschlange 120 auch eine Schreibwarteschlange beinhalten.

Der SRAM-Controller 26b beinhaltet auch Kernbusschnittstellenlogik, d.h. den ASB-Bus 122. Die ASB-Busschnittstellenlogik 122 verbindet den Kernprozessor 20 mit dem SRAM-Controller 26b. Der ASB-Bus ist ein Bus mit einem 32-Bit-Datenpfad und einem 28-Bit-Adresspfad. Auf die Daten wird zu und von dem Speicher durch das MEM ASB Datengerät 128 zugegriffen, z.B. ein Puffer. Das MEM ASB Datengerät 128 ist eine Warteschlange für Schreibdaten. Wenn Daten vom Kernprozessor 20 über die ASB-Schnittstelle 122 eingehen, dann können die Daten im MEM ASB Gerät 128 gespeichert und nachfolgend durch die SRAM-Schnittstelle 140 aus dem MEM ASB Gerät 128 zum SRAM-Speicher 16b entfernt werden. Obwohl nicht dargestellt, kann dieselbe Warteschlangenstruktur auch für Lesevorgänge vorgesehen werden. Der SRAM-Controller 26b beinhaltet auch eine Maschine 127 zum Holen von Daten aus den Mikromaschinen und dem PCI-Bus.

Die Speicheranforderungen werden über den Multiplexer 126 zur SRAM-Schnittstelle 140 gesendet. Der Multiplexer 126 wird vom SRAM-Arbiter 131 gesteuert, der den Füllegrad der Warteschlangen sowie den Status der Anforderungen erfasst und der davon ausgehend die Priorität auf der Basis eines programmierbaren Wertes entscheidet, der im Prioritätsservice-Steuerregister 130 gespeichert ist. Wenn die Steuerung zum Multiplexer 126 eine Speicherreferenzanforderung gewählt hat, dann wird die Speicherreferenzanforderung zu einem Decoder 138 gesendet, wo sie decodiert und eine Adresse generiert wird. Die SRAM-Einheit verwaltet die Steuerung von Memory Mapped Off-Chip SRAM und Expansion-ROM. Der SRAM-Controller 26b kann z.B. 16 MB adressieren, z.B. 8 MB für SRAM 16b gemappt und 8 MB für Sonderfunktionen reserviert, wie z.B.: Boot-Raum über Flashrom 16c; und Konsolenport-Zugang für MAC-Geräte 13a, 13b und Zugang zu assoziierten (RMON) Zählern. Der SRAM wird für lokale Lookup-Tabellen und Warteschlangenmanagementfunktionen verwendet.

Der SRAM-Controller 26b unterstützt die folgenden Transaktionen:

Der SRAM-Controller 26b sortiert Speicherreferenzen, um Verzögerungen (Blasen) in der Pipeline von der SRAM-Schnittstelle 140 zum Speicher 16b minimal zu halten. Der SRAM-Controller 26b sortiert Speicherreferenzen auf der Basis der Lesefunktion. Eine Blase kann 1 oder 2 Zyklen lang sein, je nach dem verwendeten Speichergerätetyp.

Der SRAM-Controller 26b beinhaltet ein Lock-Lookup-Gerät 142, das ein acht (8 Eingabeadressinhalt adressierbarer Speicher zum Nachschlagen von Read-Locks ist [sic]. Jede Position hat ein gültiges Bit, das von nachfolgenden Read-Lock-Anforderungen untersucht wird. Die Adress- und Befehlswarteschlange 120 beinhaltet auch eine Read-Lock-Fail-Warteschlange 120d. Die Read-Lock-Fail-Warteschlange 120d dient zum Speichern von Lese-Speicherreferenzanforderungen, die aufgrund einer Sperre an einem Teil des Speichers erfolglos verlaufen. Das heißt, eine der Mikromaschinen gibt eine Speicheranforderung aus, die eine Read-Lock-Anforderung hat, die in der Adress- und Steuerwarteschlange 120 verarbeitet wird. Die Speicheranforderung wirkt auf der Order-Warteschlange 120c oder der Lesewarteschlange 120b und erkennt sie als Read-Lock-Anforderung. Der Controller 26b greift auf das Lock-Lookup-Gerät 142 zu, um zu ermitteln, ob diese Speicherstelle bereits gesperrt ist. Wenn diese Speicherstelle gegen eine vorherige Read-Lock-Anforderung gesperrt ist, dann verläuft die Speicher-Lock-Anforderung erfolglos und wird in der Read-Lock-Fail-Warteschlange 120d gespeichert. Wenn sie entsperrt ist oder wenn 142 keine Sperre an dieser Adresse zeigt, dann wird die Adresse dieser Speicherreferenz von der SRAM-Schnittstelle 140 zum Durchführen einer traditionellen SRAM-Adress-Lese/Schreib-Anforderung auf Speicher 16b verwendet. Der Befehls-Controller und der Adressgenerator 138 geben die Sperre ebenfalls in das Lock-Lookup-Gerät 142, so dass nachfolgende Read-Lock-Anforderungen die Speicherstelle gesperrt vorfinden. Eine Speicherstelle wird durch Ausführen der Microcontroller-Anweisung in einem Programm entsperrt, wenn die Notwendigkeit für die Sperre nicht mehr besteht. Die Stelle wird durch Entfernen des Gültig-Bits im CAM entriegelt. Nach einer Entsperrung wird die Read-Lock-Fail-Warteschlange 120d zur Warteschlange mit der höchsten Priorität, so dass alle Lese-Lock-Misses in der Warteschlange die Möglichkeit erhalten, eine Speicher-Lock-Anforderung auszugeben.

5A zeigt eine typische Zeitsteuerung eines statischen Direktzugriffsspeichers ohne aktive Speicheroptimierung und mit aktiver Speicheroptimierung. Wie ersichtlich ist, wird durch Gruppieren von Lese- und Schreibvorgängen die Zykluszeit verbessert und Totzyklen entfallen.

6 zeigt die Kommunikation zwischen den Mikromaschinen 22 und der FBUS-Schnittstellenlogik (FBI). Die FBUS-Schnittstelle 28 in einer Netzwerkanwendung kann die Kopfzeilenverarbeitung von eingehenden Paketen vom FBUS 18 durchführen. Eine Schlüsselfunktion, die die FBUS-Schnittstelle ausführt, ist die Extraktion von Paketkopfzeilen, und ein mikroprogrammierbares hash-codiertes Quell/Ziel/Protokoll-Lookup im SRAM. Wenn sich die Hash-Codierung nicht richtig auflöst, dann wird die Paketkopfzeile für eine weitergehende Verarbeitung zum Kernprozessor 28 weitergeleitet.

FBI 28 enthält einen Sende-FIFO 182, einen Empfangs-FIFO 183, eine HASH-Einheit 188 sowie FBI-Steuer- und Statusregister 189. Diese vier Einheiten kommunizieren mit den Mikromaschinen 22 über einen zeitmultiplexierten Zugriff auf den SRAM-Bus 38, der mit den Transferregistern 78, 80 in den Mikromaschinen verbunden ist. Das heißt, alle Kommunikationen zu und von den Mikromaschinen erfolgen über die Transferregister 78, 80. Die FBUS-Schnittstelle 28 beinhaltet eine Push-Zustandsmaschine 200 zum Pushen von Daten in die Transferregister während der Zeitzyklen, in denen der SRAM den SRAM-Datenbus (Teil von Bus 38) NICHT benutzt, und eine Pull-Zustandsmaschine 202 zum Abrufen von Daten aus den Transferregistern in der jeweiligen Mikromaschine.

Die Hash-Codiereinheit beinhaltet ein Paar FIFOs 188a, 188b. Die Hash-Einheit stellt fest, dass der FBI 28 eine FBI_hash-Anforderung empfangen hat. Die Hash-Einheit 188 holt die Hash-Codierschlüssel aus der abrufenden Mikromaschine 22. Nach dem Holen und Hash-Codieren der Schlüssel werden die Anzeigen zurück zur abrufenden Mikromaschine 22 gesendet. Unter einer einzigen FBI hash-Anforderung sind bis zu drei Hash-Codiervorgänge möglich. Die Busse 34 und 38 sind jeweils unidirektional: SDRAM_push/pull_data und Sbus_push/pull_ data. Jeder dieser Busse benötigt Steuersignale, die Lese/Schreib-Controls zu den geeigneten Transferregistern der Mikromaschine 22 senden.

Im Allgemeinen benötigen Transferregister Schutz vor dem sie steuernden Kontext, um die Lesekorrektheit zu garantieren. Insbesondere darf thread_1, wenn ein Schreibtransferregister von einem thread_1 benutzt wird, um Daten zum SDRAM 16a zu senden, dieses Register erst dann überschreiben, wenn das Rücksignal vom SDRAM-Controller 26a anzeigt, dass dieses Register fertig ist und jetzt wieder verwendet werden kann. Es braucht nicht jeder Schreibvorgang ein Rücksignal vom Ziel, das besagt, dass die Funktion abgeschlossen ist, weil, wenn der Thread auf dieselbe Befehlswarteschlange an diesem Ziel mit mehreren Anforderungen schreibt, die Reihenfolge der Vollendung innerhalb dieser Befehlswarteschlange garantiert wird, so dass nur der letzte Befehl eine Signalisierung zurück zum Thread erfordert. Wenn der Thread jedoch mehrere Befehlswarteschlangen (Order und Lesen) benutzt, dann müssen diese Befehlsanforderungen in separate Kontexttasks untergliedert werden, so dass die Reihenfolge über Kontextumlagerung erhalten bleibt. Der zu Beginn des vorliegenden Absatzes angedeutete Ausnahmefall bezieht sich auf eine bestimmte Klasse von Operationen unter Verwendung eines unerwünschten PUSH zu Transferregistern vom FBI um FBUS-Statusinformationen. Um den Lese/Schreib-Determinismus an den Transferregistern zu schützen, erzeugt der FBI ein spezielles Push_protect-Signal, wenn diese speziellen FBI-Push-Operationen eingerichtet werden.

Jede Mikromaschine 22, die die vom FBI unerwünschte Push-Technik anwendet, muss vor dem Zugreifen auf die von FBUS-Schnittstelle und Mikromaschine vereinbarten Transferregister den Schutzflag prüfen. Wenn der Flag nicht gesetzt ist, dann kann die Mikromaschine auf die Transferregister zugreifen. Wenn der Flag gesetzt ist, muss der Kontext N Zyklen lang warten, bevor auf die Register zugegriffen wird. Diese Zahl wird zuvor anhand der Zahl der gepushten Transferregister ermittelt, plus einem Frontend-Schutzfenster. Die Grundidee ist, dass die Mikromaschine diesen Flag testen und die Daten, die sie von den Lesetransferregistern lesen möchte, schnell zu GPRs in aneinandergrenzenden Zyklen bewegen muss, damit die Push-Maschine nicht mit dem Mikromaschinenlesevorgang kollidiert.

Weitere Ausgestaltungen

Es ist zu verstehen, dass die Erfindung zwar in Verbindung mit der ausführlichen Beschreibung davon beschrieben wurde, dass die obige Beschreibung den Umfang der Erfindung jedoch lediglich illustrieren und nicht einschränken soll. Dieser Umfang wird durch die beiliegenden Ansprüche definiert. Weitere Aspekte, Vorteile und Modifikationen liegen innerhalb des Umfangs der nachfolgenden Ansprüche.


Anspruch[de]
  1. Controller (26b) für einen Arbeitsspeicher, wobei der Controller Folgendes umfasst:

    eine Adress- und Befehlswarteschlange (120), die Speicherreferenzen von einer Mehrzahl von Mikrosteuerungsfunktionseinheiten (22a–f) enthält, wobei die Adress- und Befehlswarteschlange (120) eine Lesewarteschlange (120b) umfasst;

    eine erste Lese-/Schreibwarteschlange, die Speicherreferenzen von einem Kernprozessor enthält, dadurch gekennzeichnet, dass der Controller ferner Folgendes umfasst:

    Steuerlogik mit einem Arbiter (131), der die Fülle jeder der Warteschlangen (120) und einen Komplettheitsstatus von ausstehenden Speicherreferenzen erfasst, um eine Speicherreferenz von einer der Warteschlangen (120) zu wählen.
  2. Controller (26b) nach Anspruch 1, wobei die Steuerlogik ferner eine Speicherreferenz von einer der Warteschlangen (120) auswählt, um eine nächste Speicherreferenz auf der Basis einer Priorität der Speicherreferenz bereitzustellen, die durch einen programmierbaren wert repräsentiert wird, der in einem Prioritätsservice-Steuerregister (130) gespeichert ist.
  3. Controller (26b) nach Anspruch 1, wobei die Adress- und Befehlswarteschlange (120) ferner Folgendes umfasst:

    eine Hohe-Priorität-Warteschlange (120a), die Speicherreferenzen von Tasks mit hoher Priorität enthält.
  4. Controller (26b) nach Anspruch 1, wobei eine Mikromaschine (22a22f) Speicherreferenzen in Lese- und Schreibspeicherreferenzen einordnet.
  5. Controller (26b) nach Anspruch 1, wobei die Adress- und Befehlswarteschlange (120) ferner eine Anweisungswarteschlange (120c) umfasst, die Schreibspeicheranforderungen enthält, wobei der Controller (26b) eingehende Speicherreferenzanforderungen untersucht und die eingehenden Speicherreferenzanforderungen je nach einem vorgegebenen Adressmodus entweder in die Lesewarteschlange (120b) oder in die Anweisungswarteschlange (120c) einordnet.
  6. Controller (26b) nach Anspruch 1, wobei die Adress- und Befehlswarteschlange (120) ferner Folgendes umfasst:

    eine Anweisungswarteschlange (120c); und

    wobei die Speicherreferenzanforderung, wenn sie kein Speicheroptimierungsbit gesetzt hat, in der Anweisungswarteschlange (120c) gespeichert wird.
  7. Controller (26b) nach Anspruch 1, wobei die Adress- und Befehlswarteschlange (120) in einer einzelnen Speicherstruktur implementiert wird und ferner Folgendes umfasst:

    eine Anweisungswarteschlange (120c) zum Speichern von Speicherreferenzen;

    die Lesewarteschlange (120b) zum Speichern von Speicherreferenzen;

    eine Hohe-Priorität-Warteschlange (120a) zum Speichern von Speicherreferenzen;

    eine Readlock-Fail-Warteschlange (120d) zum Aufnehmen von Lesesperren-Speicherreferenzanforderungen, die aufgrund einer bereits existierenden Sperre an einem Teil eines Arbeitsspeichers erfolglos verlaufen, der von dem Controller (26b) gesteuert wird; und

    wobei die Speicherstruktur in vier verschiedene Warteschlangenregionen segmentiert ist, wobei jede Region ihren eigenen Anfangs- und Ende-Zeiger hat.
  8. Controller (26b) nach Anspruch 7, wobei die Adress- und Befehlswarteschlange (120) ferner Folgendes umfasst:

    eine In-Warteschlange-einfügen-Steuer- und Aus-Warteschlange-entfernen-Zuteilungslogik zum Steuern des jeweiligen Einfügens und Wegnehmens von Speicherreferenzen in die bzw. aus den Warteschlangen.
  9. Controller (26b) nach Anspruch 1, der ferner Folgendes umfasst:

    einen Befehlsdecoder und Adressgenerator (138), der auf eine Adresse von einem ausgewählten Speicher reagiert;

    Referenz von einer der Warteschlangen zum Erzeugen von Adressen und Befehlen zum Steuern einer Speicherschnittstelle.
  10. Controller (26b) nach Anspruch 1, der ferner Folgendes umfasst:

    eine Speicherschnittstelle, die auf generierte Adressen und Befehle reagiert, um Speichersteuersignale zu erzeugen.
  11. Controller (26b) nach Anspruch 9, wobei der Controller ferner Folgendes umfasst:

    einen adressierbaren Lock-Lookup-Inhaltsspeicher für Lookups von Lesesperren.
  12. Controller (26b) nach Anspruch 10, wobei die Adress- und Befehlswarteschlange ferner Folgendes umfasst:

    eine Readlock-Fail-Warteschlange (120d) zum Aufnehmen von Lesesperren-Speicherreferenzanforderungen, die aufgrund einer bereits existierenden Sperre an einem Teil eines von dem Controller (26b) gesteuerten Arbeitsspeichers erfolglos verlaufen.
  13. Controller (26b) nach Anspruch 12, wobei der Befehlsdecoder (138) reagiert, wenn eine der Mikrosteuerungsfunktionseinheiten (22a22f) eine Lesesperrenanforderung ausgibt, indem sie auf den Lock-Lookup-Speicher zugreift, um zu ermitteln, ob eine in der Lesesperrenanforderung vorgegebene Speicherstelle bereits gesperrt ist.
  14. Controller (26b) nach Anspruch 13, wobei, wenn die Speicherstelle von einer vorherigen Lesesperrenanforderung gesperrt ist, die ausgegebene Speichersperrenanforderung erfolglos verläuft und in der Readlock-Fail-Warteschlange (120d) gespeichert wird.
  15. Controller (26b) nach Anspruch 14, wobei, wenn die Speicherstelle nicht gesperrt ist, die ausgegebene Lesereferenz in Adresssignale für den Speicher durch eine Speicherschnittstelle konvertiert wird.
  16. Controller (26b) nach Anspruch 15, wobei der Befehlsdecoder und Adressgenerator (138) in die Sperre für die Speicheradresse für die ausgegebene Lesereferenz in den Lock-Lookup-Speicher eintritt.
  17. Controller (26b) nach Anspruch, 1, wobei der Controller (26b) so konfiguriert ist, dass er statischen Arbeitsspeicher, auch als SRAM bekannt, steuert.
Es folgen 18 Blatt Zeichnungen






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com