-
Die
Erfindung betrifft eine Prozessoranordnung und insbesondere eine
umfangreiche Prozessoranordnung, in der eine bidirektionale Multibitkommunikation
mit hoher Bandbreite für
einen Prozessor in einem Zeitabschnitt, für alle Prozessoren zur gleichen
Zeit oder für
eine Untermenge der Prozessoren zur gleichen Zeit benötigt wird.
Diese Kommunikation kann für
eine Datenübertragung
nötig sein,
beispielsweise das Laden eines Programms in einen Prozessor oder
das Zurücklesen
von Status- oder Ergebnisinformation von einem Prozessor oder für das Steuern
der Prozessoranordnung, z. B. das synchrone Starten, Anhalten oder
den Einzelschrittbetrieb der einzelnen Prozessoren.
-
GB-A-2370380 beschreibt
ein umfangreiches Prozessorfeld, in dem jeder Prozessor (Feldelement)
die Befehle speichern muss, die ein Betriebsprogramm bilden, und
anschließend
kontrollierbar sein muss, damit er das Betriebsprogramm wie gewünscht abarbeitet.
Da die Feldelemente Daten von einem Element zum anderen Element
weiterleiten, ist es unerlässlich,
dass die Prozessoren zumindest annähernd synchronisiert sind.
Daher müssen
sie zur gleichen Zeit gestartet werden (d. h. mit dem Ablauf ihrer
Programme beginnen). Werden sie zu einem gewissen Zeitpunkt angehalten
und dann erneut gestartet, so müssen
sie gleichfalls zur gleichen Zeit angehalten werden.
-
Aufgrund
der großen
Anzahl Feldelemente und des relativ großen Umfangs ihrer Befehlsspeicher,
Datenspeicher, Registerdateien usw. ist es vorteilhaft, wenn man
das Programm für
jedes Feldelement rasch laden kann.
-
Wegen
der Größe des Prozessorfelds
ist es schwierig, den Umfang der Taktverschiebung zwischen jedem
Feldelement so gering wie möglich
zu halten. Unter dem Gesichtspunkt der Energieversorgung der Feldelemente
ist es in der Tat vorteilhaft, eine gewisse Taktverschiebung zu
haben. D. h., es ist erforderlich, dass die Feldelemente ungefähr innerhalb
eines Taktzyklus miteinander synchronisiert sind.
-
Für die synchrone
Steuerung einer Prozessoranordnung wäre die einfachste Lösung, die
Steuersignale für
alle Feldelemente in einem parallelen Fächer zu verdrahten. Dies wird
unweigerlich unhandlich, wenn die Anordnung größer ist als ein gewisser Umfang.
Ist die Entfernung, die die Signale durchlaufen müssen, so lang,
dass die Signale länger
brauchen als einen Taktzyklus, um die entferntesten Feldelemente
zu erreichen, so wird es schwierig, die Steuersignale wirkungsvoll
in einer Pipeline unterzubringen und die Ankunftszeiten am Endpunkt
für alle
Betriebszustände
anzugleichen. Dies erlegt der verwendbaren Taktrate und damit der Bandbreite
der Kommunikation eine Obergrenze auf. Zusätzlich eignet sich dieser Ansatz
nur wenig dafür,
zu einem Zeitpunkt nur mit einem einzigen Prozessor in einem Modus
zu kommunizieren und anschließend
sofort mit allen anderen Prozessoren in einem anderen Modus.
-
Für eine Kommunikation
mit hoher Bandbreite zu zahlreichen Endpunkten sind paketvermittelte
oder durchschaltvermittelte Netze eine gute Lösung. Dieser Ansatz hat jedoch
den Nachteil, dass er nicht generell an allen Endpunkten synchron
ist. Die Verzögerungszeit
zu weit entfernten Endpunkten ist länger als zu nahe gelegenen
Endpunkten. Dazu ist auch erforderlich, dass die Knoten des Netzes
ziemlich intelligent und damit kompliziert sind.
-
Es
ist auch erforderlich, den Punkt der Skalierbarkeit in Betracht
zu ziehen. Ein Entwurf, der für
eine Prozessoranordnung ordentlich arbeitet, muss möglicherweise
für eine
geringfügig
größere Anordnung
vollständig überarbeitet
werden, und er kann für
eine kleinere Anordnung relativ unwirksam sein.
-
JP08297652 lehrt eine Prozessoranordnung,
die Primärbusse
und damit verbundene Sekundärbusse umfasst.
Dies hat die Auswirkung, dass die Verdrahtungsfläche geringer wird, die zum
Verbinden aller Prozessorelemente in der Anordnung erforderlich
ist. Es werden jedoch unterschiedliche Verzögerungen zwischen den Elementen,
die näher
am Bustreiber liegen, und weiter entfernten Elementen nicht beachtet.
-
Gemäß der Erfindung
werden Prozessorfelder wie in den Ansprüchen beschrieben bereitgestellt.
-
Es
zeigt:
-
1 eine
Blockdiagrammskizze eines Prozessorfelds der Erfindung;
-
2 eine
Blockdiagrammskizze einer ersten Ausführungsform eines Primärknotens
in dem Feld in 1;
-
3 eine
Blockdiagrammskizze einer zweiten Ausführungsform eines Primärknotens
in dem Feld in 1;
-
4 eine
Blockdiagrammskizze eines Sekundärknotens
in der Anordnung in 1;
-
5 eine
ausführlichere
Blockdiagrammskizze eines Teils der Anordnung in 1;
-
6 eine
ausführlichere
Blockdiagrammskizze eines zweiten Teils der Anordnung in 1;
und
-
7 und 8 Teile
der Anordnung in 1 im Gebrauch.
-
1 zeigt
eine Anordnung von Prozessoren 4, die alle über Busse 5 mit
einem Spaltentreiber 1 verbunden sind. Wie dargestellt
besteht das Feld aus horizontalen Zeilen und vertikalen Spalten
von Feldelementen 4, wenngleich die tatsächlichen
räumlichen
Positionen der Feldelemente für
diese Erfindung unwichtig sind. Jede Zeile von Feldelementen ist
in Untergruppen 6 eingeteilt. Die Feldelemente 4 innerhalb
einer Untergruppe 6 sind auf einem horizontalen Bussegment 7 über entsprechende
Zeilenknoten 3 miteinander verbunden. Die horizontalen
Bussegmente 7 sind über
entsprechende Spaltenknoten 2 mit vertikalen Bussen 8 verbunden.
Jede Untergruppe 6 enthält
Feldelemente, mit denen der Spaltenknoten 2 innerhalb eines
einzigen Taktzyklus leicht kommunizieren kann. Damit wirken die
vertikalen Busse 8 als Primärbusse, die Spaltenknoten 2 wirken
als Primärbusknoten,
die horizontalen Bussegmente 7 wirken als Sekundärbusse,
und die Zeilenknoten 3 wirken als Sekundärbusknoten.
Jeder vertikale Bus 8 wird vom Spaltentreiber 1 einzeln
angesteuert. Dies wird anhand von 5 im Weiteren
ausführlicher
beschrieben. Dieses Vorgehen dient als Teil der Kommunikationsverbindung
und als Mittel zum Einsparen von Energie.
-
Jeder
der Busse 5, 7 und 8 besteht in Wirklichkeit
aus einem Paar unidirektionaler Multibitbusse, einem Bus für jede Richtung,
obwohl sie zur Vereinfachung als einzelne Linie dargestellt sind.
-
Die
Spaltenknoten 2 nehmen zwei unterschiedliche Formen an,
die in 2 bzw. 3 dargestellt sind. 2 zeigt
einen Spaltenknoten ohne vertikale Pipelinestufe. Dagegen zeigt 3 einen
Spaltenknoten mit vertikaler Pipelinestufe.
-
Im
Spaltenknoten 10 in 2 verläuft der
abgehende Teil des vertikalen Busses 8, der Daten vom Spaltentreiber 1 befördert, von
einem Einlass 12 zu einem Auslass 15 geradlinig
durch den Knoten 10. Er ist an einer Verbindung 26 angezapft
und mit einem weiteren Bus 25 verbunden. Der Bus 25 ist
mit einem abgehenden Teil 13 des horizontalen Bussegments 7 über eine
kurze angezapfte Verzögerungsleitung 18 verbunden.
Die angezapfte Verzögerungsleitung 18 erlaubt
es, das Signal zum horizontalen Bussegment 7 um eine vorbestimmte
ganzzahlige Anzahl Taktzyklen zu verzögern. Der Rückführwegabschnitt 14 des
horizontalen Bussegments 7, der Daten an den Spaltentreiber 1 überträgt, wird
ebenfalls durch eine kurze angezapfte Verzögerungsleitung 19 geführt, die
an einen Bus 20 angeschlossen ist. Die Verzögerungsleitung 19 verzögert das
Rückführsignal
um eine vorbestimmte ganzzahlige Anzahl von Taktzyklen. Die Verzögerung in
der Verzögerungsleitung 19 ist
bevorzugt genauso groß wie
die Verzögerung
in der Verzöge rungsleitung 18,
obwohl man die Verzögerung
in der Verzögerungsleitung 19 abweichend
von der Verzögerung
in der Verzögerungsleitung 18 wählen kann,
wobei vorauszusetzen ist, dass die Verzögerungen in den unterschiedlichen
Knoten 10 so eingestellt sind, dass die gleiche Gesamtverzögerung auftritt,
wenn ein Signal an alle Endpunkte gesendet wird und wenn Signale
von allen Endpunkten empfangen werden. Der Bus 20 wird
mit dem Rückführweg des
vertikalen Busses, der an einem Eingang 16 empfangen wird,
mit einer bitweisen logischen ODER-Funktion 17 verknüpft, damit
ein Rückführweg-Vertikalbussignal
für den
Ausgang 11 gebildet wird.
-
3 zeigt
eine alternative Form des Spaltenknotens 22. Merkmale des
Spaltenknotens 22, die die gleichen Funktionen haben wie
die Merkmale des Spaltenknotens 10 in 2 sind
mit den gleichen Bezugszeichen bezeichnet und werden nicht nochmals
beschrieben. Bei Vergleichen mit dem Spaltenknoten 10 weist der
Spaltenknoten 22 eine vertikale Pipelinestufe auf. Es ist
ein Pipelineregister 23 in den abgehenden Teil des vertikalen
Busses 8 eingefügt,
das abgehende Signale um einen Taktzyklus verzögert. Ein Pipelineregister 24 ist
in den Rückführweg des
vertikalen Busses 8 eingefügt, das in gleicher Weise Rückführsignale
um einen Taktzyklus verzögert.
-
Beide
Spaltenknotenarten 10 und 22 liefern eine Verbindung
zwischen dem vertikalen Bus 8 und den horizontalen Bussegmenten 7 für die Untergruppen 6 der
Feldelemente 4. Der Spaltenknoten 22, der eine
vertikale Pipelinestufe aufweist, erlaubt es, dass der gesamte vertikale
Busweg länger
als ein einzelner Taktzyklus ist. Der Spaltenknoten 10 ohne
vertikale Pipelinestufe erlaubt es, die Verbindung bereitzustellen,
ohne dass eine Pipelinestufe in den vertikalen Busweg eingefügt wird.
Verwendet man die beiden Arten von Spaltenknoten in Verbindung miteinander
wie dies im Folgenden genauer beschrieben wird, so erlaubt dies
ein ausreichendes Pipelining, das hohe Kommunikationsbandbreiten
ermöglicht,
ohne dass man die Taktrate verringern muss, jedoch ohne eine unnötig große und damit
ineffiziente Gesamtpipelinetiefe.
-
4 zeigt
ausführlicher
einen Zeilenknoten 3 der in 1 dargestellten
Art. Der abgehende Teil des horizontalen Busses 7 befördert Daten
vom Spaltentreiber 1 und breitet sich geradlinig durch
den Knoten von einem Einlass 51 zu einem Auslass 53 aus.
Er ist an einem Anschluss 50 angezapft und mit einem weiteren Bus 60 verbunden.
Der Bus 60 ist mit einer Feldelement-Schnittstelle 57 verbunden.
-
Die
Feldelement-Schnittstelle 57 verbindet über die Busse 55 und 56 mit
einem der Feldelemente, siehe 1. Die Feldelement-Schnittstelle 57 interpretiert
das Buspro tokoll, um festzustellen, ob empfangene Kommunikationssignale
für das
besondere Feldelement gedacht sind, das an diesen Zeilenknoten angeschlossen
ist. Die Schnittstelle 57 empfängt Information, die von dem
mit diesem Zeilenknoten 3 verbundenen Feldelement zurückgelesen
wird, und gibt sie auf einem Bus 59 aus. Ein Rückführpfadabschnitt
des horizontalen Busses 7, der die Daten zum Spaltentreiber 1 befördert, wird
an einem Eingang 54 empfangen. Der Bus 59 ist
mit dem Rückführpfad des
horizontalen Busses 7 über
eine bitweise logische ODER-Funktion 58 verknüpft, damit
ein Rückführpfad-Horizontalsignal
für den
Ausgang 52 gebildet wird.
-
5 zeigt
ausführlicher
eine der Zeilenuntergruppen 6 in 1. Im dargestellten
Beispiel enthält
die Untergruppe 6 vier Feldelemente 4. Es können jedoch
auch mehr oder weniger als vier Elemente in einer Untergruppe vorhanden
sein, und zwar abhängig
von der Anzahl der Elemente mit denen der Spaltentreiber 1 in einem
einzigen Taktzyklus wirksam kommunizieren kann. Die vier Feldelemente 4 sind über entsprechende Zeilenknoten 3 mit
dem horizontalen Bus 7 verbunden. Die Daten werden auf
dem abgehenden horizontalen Busabschnitt 13 empfangen (dargestellt
in 2 und 3) und auf dem Rückführpfadabschnitt 14 (ebenfalls dargestellt
in 2 und 3) des horizontalen Busabschnitts 13 ausgegeben.
Der abgehende horizontale Busabschnitt bleibt am entfernten Ende 62 unverbunden.
Der horizontale Rückführpfad-Busabschnitt
ist an seinem entfernten Ende 63 überall mit logischen Nullen
abgeschlossen bzw. liegt an Masse. Dies dient dazu, eine Beschädigung irgendwelcher
Rückführpfaddaten
zu vermeiden, die über
irgendeinen horizontalen Knoten 3 auf dem Bus 7 logisch
ODER-verknüpft
werden können.
-
6 zeigt
den Spaltentreiber 1 aus 1 in Einzelheiten.
Im erläuterten
Beispiel beträgt
die Anzahl der Spalten vier. Es können jedoch auch mehr oder
weniger Spalten als vier vorhanden sein. Die abgehenden Daten für die Feldelemente 4 werden
von einem Feldkontrollprozessor (nicht dargestellt) auf einem Bus 31 empfangen,
der parallel zu den abgehenden Abschnitten 33, 35, 37, 39 eines
jeden der vier vertikalen Busse verdrahtet ist, die mit den entsprechenden
Spalten verbunden sind. Der Bus 31 ist mit den abgehenden
Abschnitten 33, 35, 37, 39 über jeweilige
bitweise logische UND-Funktionen 43 verbunden. Die logischen UND-Funktionen 43 empfangen
auch Freigabesignale 44 von einem Protokollabhörblock 42.
Der Protokollabhörblock 42 überwacht
die Kommunikationssignale auf dem Bus 31 und erzeugt ausgehend
von den Adresssignalen in den Daten Freigabesignale, die je nach
dem jede Spalte einzeln oder alle Spalten gemeinsam freigeben.
-
Die
Rückführpfadabschnitte 34, 36, 38, 40 eines
jeden der vier vertikalen Busse, die mit den entsprechenden Spalten
verbunden sind, sind über
eine bitweise logische ODER-Funktion 41 verknüpft, damit
der gesamte Rückführpfadbus 32 erzeugt
wird und Daten von den Feldelementen 4 zum Feldkontrollprozessor übertragen
werden.
-
Der
Spaltentreiber stellt die Verbindung zu vier Spalten her, siehe 6.
Enthält
jedoch das Feld eine große
Anzahl Elemente 4 und/oder enthalten die Untergruppen 6 nur
jeweils eine geringe Anzahl von Elementen 4, so kann die
Anzahl der Spalten sehr hoch werden. in diesem Fall können zusätzliche
Pipelinestufen erforderlich sein, um sicherzustellen, dass die Verzögerungen
von und zu allen Endpunkten gleich bleiben. Man könnte beispielsweise
zusätzliche
Pipelineregister in einem oder mehreren der Zweige 33–40 vorsehen und/oder
in einem oder mehreren der Eingänge
zu dem ODER-Gatter 41 und/oder an den Eingängen zu
einem oder mehreren der UND-Gatter 43.
-
Der
gesamte Bus des abgehenden Pfads ist daher eine einfache Parallelverbindung,
der einige Pipelinestufen zugefügt
sind so wie etliche Vermittlungen auf höherer Ebene. Die Vermittlung
auf höherer
Ebene übernimmt
einen Teil der Feldelement-Adressierungsfunktion
und unterstützt
das Einsparen von Energie.
-
Der
gesamte Bus des Rückführpfads
ist eine einfache logische ODER-Zusammenführung, der
einige Pipelinestufen zugefügt
sind. Wegen der konstanten Busverzögerung ist keine Zuteilung
nötig,
da der Feldkontrollprozessor zu einem Zeitpunkt nur aus einem Feldelement
liest, und da nicht adressierte Feldelemente nur logische Nullen
auf den Bus senden.
-
Dies
erlaubt nach wie vor ein enges Pipelining der Lesezugriffe und macht
es überflüssig, Tri-State-Busse
zu verwenden.
-
7 und 8 zeigen
zwei mögliche
Anordnungen von Spaltenknoten. In beiden Anordnungen fügen die
Spaltenknoten, die näher
am Spaltenbustreiber sind, mit Hilfe ihrer angezapften Verzögerungsleitungen
längere
Verzögerungen
ein als die Spaltenknoten, die weiter vom Spaltenbustreiber entfernt
sind.
-
In 7 ist
der Spaltenknoten, der dem Spaltenbustreiber am engsten benachbart
ist, ein Knoten 22 mit einer vertikalen Pipelinestufe nach 3,
die in 7 durch einen ausgefüllten Kreis dargestellt ist.
Jeder weitere vierte Spaltenknoten weist ebenfalls eine vertikale
Pipelinestufe auf. Die anderen Spaltenknoten sind Knoten 10 nach 2,
die keine vertikale Pipelinestufe besitzen und die in 7 durch
einen leeren Kreis dargestellt sind. In 8 ist der
Spaltenknoten, der dem Spaltenbustreiber am engsten benachbart ist,
ein Knoten 22 mit einer vertikalen Pipelinestufe nach 3,
die in 8 durch einen ausgefüllten Kreis dargestellt ist.
Jeder weitere dritte Spaltenknoten weist ebenfalls eine vertikale
Pipelinestufe auf. Die anderen Spaltenknoten sind Knoten 10 nach 2,
die keine vertikale Pipelinestufe besitzen und die in 8 durch
einen leeren Kreis dargestellt sind. Der tatsächliche Abstand der Knoten
mit einer vertikalen Pipelinestufe hängt von der räumlichen
Implementierung ab. Der Abstand sollte so gewählt werden, dass man mit der
kleinstmöglichen
Anzahl an Knoten mit vertikalen Pipelinestufen auskommt, mit der
sich noch ein korrekter Betrieb des Busses unter allen Betriebsbedingungen
aufrechterhalten lässt.
Die Knoten mit vertikalen Pipelinestufe können in regelmäßigen Abständen auftreten
oder sie können
bei Bedarf unregelmäßige Abstände haben.
Dies zeigt die Skalierbarkeit dieses Ansatzes, da sich nur die Gesamtverzögerungszeit ändert, nicht
jedoch die Bandbreite.
-
7 und 8 zeigen
beispielhafte Anordnungen der angezapften Verzögerungsleitungen 18, 19 in jedem
Spaltenknoten. Beginnend mit dem Spaltenknoten in 7,
der vom Spaltenbustreiber 1 die größte Entfernung aufweist, d.
h. dem Knoten 74, haben die angezapften Verzögerungsleitungen 18, 19 eine
Verzögerungszeit
D, die auf die kleinste Verzögerungszeit
gesetzt ist, nämlich
0 Taktzyklen in diesem Beispiel. Folgt man der Spalte nach oben,
so werden die Verzögerungszeiten
so zugewiesen, dass die Verzögerungszeit
bei jedem Durchgang durch einen Pipelineknoten 22 um einen
Taktzyklus erhöht
wird. Damit haben in 7 die angezapften Verzögerungsleitungen 18, 19 im
Pipelineknoten 75 noch eine Verzögerungszeit D = 0, da der horizontale
Zweig in diesem Knoten nach den Pipelineregistern 23, 24 kommt.
Der folgende Knoten 76 ist mit angezapften Verzögerungsleitungen 18, 19 konfiguriert,
die eine Verzögerungszeit
von D = 1 Taktzyklen haben. Diese Vorgehensweise kann man wiederholen,
bis man den Spaltenknoten erreicht, der dem Spaltenbustreiber am
engsten benachbart ist. Damit haben alle Endpunkte auf den horizontalen
Bussegmenten die gleiche Verzögerung
zum und vom Anfang der Spalte.
-
Ein ähnliches
Muster einer Anordnung von angezapften Verzögerungsleitungen ist in 8 zu
sehen. Im Spaltenknoten 78, der die größte Entfernung vom Spaltenbustreiber 1 aufweist,
haben die angezapften Verzögerungsleitungen 18, 19 eine
Verzögerungszeit
D, die auf die kleinste Verzögerungszeit
gesetzt ist, nämlich 0
Taktzyklen in diesem Beispiel. Wiederum werden die Verzögerungszeiten
beim Emporsteigen in der Spalte zugewiesen, und die Verzögerungszeit
wird jedes Mal um einen Taktzyklus erhöht, wenn ein Pipelineknoten 22 durchlaufen
wird. Damit ist in 8 der Knoten 79 mit
angezapften Verzögerungsleitungen 18, 19 konfiguriert,
die eine Verzögerungszeit
von D = 1 Taktzyklen haben. Diese Vorgehensweise kann man wiederholen, bis
man den Spaltenknoten erreicht, der dem Spaltenbustreiber am engsten
benachbart ist.
-
Ist
die Verzögerungszeit
der angezapften Verzögerungsleitung 18 auf
0 Taktzyklen gesetzt, so werden die Endpunkte, die mit dieser angezapften
Verzögerungsleitung
verbunden sind, effektiv vom vorhergehenden Pipelineregister 23 des
vertikalen Busses angesteuert. Dadurch kann die Belastung des Pipelineregisters
sehr stark wachsen. Daher kann man in der Praxis die kleinste Verzögerungszeit
in den angezapften Verzögerungsleitungen 18, 19 zu
einem Taktzyklus wählen
und nicht zu 0, um diese Belastung zu senken.
-
Die
Adressierung der einzelnen Feldelemente ist in den Signalen codiert,
die über
diese Busstruktur als Zeile, vertikale Busspalte und Untergruppenspalte übertragen
werden. Der Spaltenbustreiber 1 kann die vertikale Busspalteninformation
decodieren und gezielt die Spalten freigeben, oder er kann alle
Spalten freigeben, falls eine alle Empfänger bezeichnende Adresse verwendet
wird. Die Zeilenknoten 3 decodieren die Zeileninformation
und die Untergruppen-Spalteninformation; somit müssen sie abgeleitet aus ihrer
Platzierung mit dieser Information konfiguriert werden. Die Spaltenknoten 2 decodieren
in dieser dargestellten Ausführungsform
der Erfindung die Zeileninformation nicht aktiv, da die Energieeinsparung
die Komplexität
nicht ausgleicht, die mit dieser Unterteilung verbunden ist. In
anderen Ausführungsformen
könnten
die Spaltenknoten jedoch diese Information in der gleichen Weise
wie die Spaltentreiber und die Zeilentreiber decodieren, indem sie
das Busprotokoll mitlesen.
-
Ein
Feldelement wird adressiert, wenn es von der Busaktivität erreicht
wird und alle Adressenaspekte übereinstimmen.
Wird eine Einzeladressierung verwendet, so decodiert das bezeichnete
Feldelement die Kommunikation, falls die Zeilenadresse und die Untergruppen-Spaltenadresse
mit seiner eigenen übereinstimmen.
Wird eine für
mehrere Empfänger
gedachte Adresse verwendet, um mit mehr als einem Feldelement zu kommunizieren,
so müssen
die Zeilenknoten einige andere Kennzeichnungsparameter prüfen, beispielsweise den
Feldelementtyp. Für
mehrere Empfänger
gedachte Adressen können
abhängig
davon, welche Vorgehensweise am wirksamsten ist, entweder über eine
getrennte Steuerleitung gekennzeichnet werden oder indem man "reservierte" Adressen verwendet.
-
Die
Steuerung der Feldelemente, beispielsweise synchronen Start oder
Anhalten und Einzelschrittbetrieb erzielt man durch das Schreiben
besonderer Daten in Steuerregisterplätze in den Feldelementen. Um
diese Register in einer für
alle gedachten Kommunikation zu adressieren, müssen diese Steuerplätze in der
Speicheranordnung eines jeden Feldelements an der gleichen Stelle
liegen. Es ist nützlich,
wenn man einen Einzelschritt-Steuerbefehl ausgeben kann, der das
Feldelement anweist, für
einen Schritt zu starten und anschließend anzuhalten, da der Adressierungstokenumfang
im Kommunikationsprotokoll verhindert, dass Start- und Stopbefehle
so eng beieinander liegen.
-
Um
Probleme durch große
Taktverschiebungen zu vermeiden, beispielsweise Registereinstell-
oder Halteverletzungen, kann es vorteilhaft sein, an gewissen Punkten
in den Knoten Puffer anzuordnen (um Signale zu beschleunigen oder
zu verzögern).
Beispielsweise kann man im Fall des in 2 oder 3 dargestellten
Spaltenknotens Verzögerungspuffer
einfügen,
um Halteverletzungen in den Bussen 20 und 25 zu
vermeiden, und in den vertikalen Bus 8 vor und nach dem
Anzapfungspunkt 26 und nach dem ODER-Gatter 17. Im Fall eines in 4 dargestellten
Zeilenknotens können
Verzögerungspuffer
eingefügt
werden, um Halteverletzungen im Bus 59 zu verhindern.
-
Es
wird daher eine Anordnung bereitgestellt, die eine annähernd konstante
Verzögerungszeit
erzielt. Kommunikationssignale zu und von den am weitesten entfernten
Feldelementen werden in eine für
die Entfernung geeignete Pipeline gegeben. Kommunikationssignale
zu und von näher
gelegenen Feldelementen werden absichtlich "overpipelined", so dass die Verzögerungszeit zu allen Endpunktelementen
die gleiche Anzahl Taktzyklen beträgt. Dies erlaubt es, eine hohe
Bandbreite zu erzielen und ist ohne einen Neuentwurf skalierbar.
-
Die
Kommunikation selbst nimmt die Form eines Token-Stroms an, und die
Prozessoranordnung wird als hierarchisches Speicherverzeichnis betrachtet,
d. h. als Speicherverzeichnis von Feldelementen, wobei jedes Element
sein eigenes Speicherverzeichnis aus Programm-, Daten- und Steuerplätzen besitzt.
Die Tokens werden dazu verwendet, Feldelementadressen, Unteradressen
und Schreib/Lese-Daten zu kennzeichnen. Es sind für Kontrollfunktionen
besondere reservierte Adressen zum parallelen Adressieren aller
Feldelemente (oder Untermengen) vorhanden.
-
Im
Weiteren wird ein mit Tokens arbeitendes Kommunikationsprotokoll,
das in Verbindung mit dieser Prozessoranordnung verwendet werden
kann, ausführlicher
beschrieben.
-
Der
abgehende Bus ist ein 20-Bit-Bus, der vier im High-Zustand aktive
Flags und ein 16-Bit-Datenfeld enthält.
Bit-Bereich | Beschreibung – abgehender
Bus |
[31:20] | Reserviert |
[19] | AEID-Flag.
Dient dem Anzeigen, dass die Nutzdaten die "Kennung" oder Adresse eines Feldelements sind. |
[18] | ADDR-Flag.
Dient dem Anzeigen, dass die Nutzdaten eine Register- oder Speicheradresse
innerhalb eines Feldelements sind. |
[17] | READ-Flag.
Dient dem Anzeigen, dass ein Lesezugriff angefordert wird. Die Nutzdaten
werden ignoriert. |
[16] | WRITE-Flag.
Dient dem Anzeigen, dass ein Schreibzugriff angefordert wird. Die
Nutzdaten sind die zu schreibenden Daten. |
[15:0] | Nutzdaten.
Feldelementadresse, Register- oder Speicheradresse, zu schreibende
Daten. |
-
Der
Rückführpfad ist
ein 17-Bit-Bus, der ein im High-Zustand aktives Valid-Flag und ein
16-Bit-Datenfeld enthält.
Bitbereich | Beschreibung – Rückführpfad-Bus |
[16] | VALID-Flag.
Zeigt an, dass der Lesezugriff ein Feldelement adressiert, das vorhanden
ist. |
[15:0] | Nutzdaten.
Daten, die aus einem Register oder Speicherplatz zurückgelesen
werden. |
-
Das
VALID-Flag wird benötigt,
falls der Adressraum der Feldelemente nicht vollständig belegt
ist. Andernfalls kann es schwierig sein, zwischen einer fehlgeschlagenen
Adresse und Daten zu unterscheiden, die zufällig null sind.
-
Grundlegende
Schreiboperation: – Im
Weiteren wird die Folge der Befehle angegeben, die über den abgehenden
Bus zu senden sind:
AEID, <Feldelementadresse>
ADDR, <Register/Speicherplatz>
WRITE <Datenwort>
-
Der
Benutzer kann auf mehrere Plätze
schreiben, d. h. auf einen Platz nach dem anderen, indem er die
obige Folge so oft wie nötig
wiederholt:
AEID, <Feldelementadresse
1>
ADDR, <Register/Speicherplatz
im Feldelement 1>
WRITE <Datenwort>
AEID, <Feldelementadresse
2>
ADDR, <Register/Speicherplatz
im Feldelement 2>
WRITE <Datenwort>
usw.
-
Verändert sich
die AEID nicht, so braucht man sie nicht zu wiederholen:
AEID, <Feldelementadresse
1>
ADDR, <Register/Speicherplatz
1>
WRITE <Datenwort für Platz
1 im Feldelement 1>
ADDR, <Register/Speicherplatz
2>
WRITE <Datenwort für Platz
2 im Feldelement 1>
usw.
-
In
jedem Fall werden die Daten in den Feldelementplatz geschrieben,
solange das Feldelement existiert und das Register oder der Speicherplatz
existiert und beschreibbar ist (einige Plätze können nur für Lesezugriff zugelassen sein,
und einige Plätze
können
nur dann beschreibbar sein, wenn das Feldelement angehalten ist
und nicht wenn es läuft).
-
Automatisch
inkrementierende Schreiboperation: – Zur Zeitersparnis beim Schreiben
auf mehrere aufeinander folgende zusammenhängende Register oder Speicherplätze innerhalb
eines einzigen Feldelements, wie dies häufig geschieht, wenn man beispielsweise
das Programm eines Feldelements lädt, werden wiederholte WRITE-Befehle
verwendet. Die Schnittstelle im Zeilenknoten inkrementiert die innerhalb
des Feldelements verwendete Adresse automatisch. Ein Beispiel:
AEID, <Feldelementadresse>
ADDR, <Anfangsregister
oder Speicherplatz – "A">
WRITE, <Daten für Platz
A>
WRITE, <Daten für Platz
A + 1>
WRITE, <Daten für Platz
A + 2>
WRITE, <Daten für Platz
A + 3>
usw.
-
Treten
Lücken
in der Speicherbelegung auf oder ist es erforderlich, zu einem anderen
Feldelement zu gehen, so verwendet man das ADDR- oder AEID-Flag
erneut zum Einstellen eines neuen Startpunkts für das automatische Inkrementieren,
z. B.:
AEID, <Feldelementadresse>
ADDR, <Anfangsregister
oder Speicherplatz – "A">
WRITE, <Daten für Platz
A>
WRITE, <Daten für Platz
A + 1>
WRITE, <Daten für Platz
A + 2>
ADDR, <neues Anfangsregister
oder Speicherplatz – "B">
WRITE, <Daten für Platz
B>
WRITE, <Daten für Platz
B + 1>
AEID, <neue Feldelementadresse>
ADDR, <Register oder Speicherplatz>
WRITE, <Datenwort>
usw.
-
Nicht
inkrementierende Schreiboperation: – Ist es erforderlich, das
automatische Inkrementieren der Register- oder Speicherplatzadresse
zu verbieten, so hält
man das ADDR-Flag zusammen mit dem WRITE-Flag:
AEID, <Feldelementadresse>
ADDR, <Registerplatz – "A">
ADDR,
WRITE, <Daten für Platz
A>
ADDR, WRITE, <neue Daten für Platz
A>
-
Man
beachte, dass eine lange Periode mit inaktivem Bus zwischen den
Befehlen 3 und 4 auftreten kann, in der die Prozessoranordnung weiterläuft. Es
ist in der Tat nicht nötig,
dass diese Busoperationen in einem zusammenhängenden Burst auftreten. Es
können
Lücken
von beliebiger Länge
an jedem Punkt auftreten. Das Protokoll arbeitet wie eine Statusmaschine
ohne irgendeine Zeitbegrenzung.
-
Schreiboperation
für alle
Feldelemente: – Es
ist möglich,
in einem Vorgang auf alle Feldelemente oder Untermengen von Feldelementen
gruppenweise zu schreiben. Diese Adressierung für alle Elemente kann mit einem
besonderen Steuersignal bezeichnet werden oder man erreicht sie,
indem man besondere Zahlen für die
AEID-Adresse verwendet.
-
In
der beispielhaften Implementierung, die für die in
GB-A-2370380 beschriebene Prozessoranordnung
verwendet wurde, kann man das gesamte Feld anhand einzelner Elemente
innerhalb von 15 Bit adressieren, so dass man das oberste Bit der
16-Bit-AEID-Adresse
dafür reservieren
kann, anzuzeigen, dass eine Kommunikation für alle Elemente im Gange ist.
-
Zum
Wählen
der Kommunikation an alle Elemente anstelle der Einzelelementadressierung
setzt man das MSB des AEID-Datenfelds. Die unteren Bits können nun
angeben, welche Feldelementtypen adressiert werden sollen. In der
beispielhaften Prozessoranordnung gibt es 8 Feldelementtypen, deren
Bezeichnungen in der Konfiguration ihrer Zeilenknoten fest verdrahtet
sind:
Bits | Beschreibung |
[15] | Wahl
des an alle Elemente gerichteten Adressierungsmodus |
[14:8] | Reserviert |
[7] | Typ
8 |
[6] | Typ
7 |
[5] | Typ
6 |
[4] | Typ
5 |
[3] | Typ
4 |
[2] | Typ
3 |
[1] | Typ
2 |
[0] | Typ
1 |
-
Um
beispielsweise alle Feldelemente des Typs 7 zu adressieren, gilt:
AEID, <0×8040>
ADDR, <...>
usw.
-
Um
alle Feldelemente der Typen 1, 2 und 4 gemeinsam zu adressieren,
gilt:
AEID, <0×800b>
ADDR, <...>
usw.
-
Grundlegende
Leseanforderungsoperationen: – Die
grundlegende Leseoperation ist der grundlegenden Schreiboperation
sehr ähnlich.
Der Unterschied besteht im letzten Flag und darin, dass das Datenfeld
ignoriert wird:
AEID, <Feldelementadresse>
ADDR, <Register- oder Speicherplatz>
READ, <ohne Bedeutung>
-
Von
dem Platz wird erfolgreich gelesen, wenn das Feldelement existiert
und der Register- oder Speicherplatz existiert und lesbar ist (aus
manchen Plätzen
kann nur gelesen werden, wenn das Feldelement angehalten ist und
nicht wenn es läuft).
Das aus dem Feldelement gelesene Datenwort wird über den Rückführpfad zurückgesendet, in diesem Beispiel
damit es für
eine spätere
Abholung in einem FIFO gespeichert wird.
-
Automatisch
inkrementierende Leseoperation: – Diese Operation ist wiederum
der entsprechenden Schreiboperation sehr ähnlich:
AEID, <Feldelementadresse>
ADDR, <Anfangsregisterplatz
oder Speicherplatz – "A">
READ, <ohne Bedeutung> (Daten werden vom
Platz A geholt)
READ, <ohne
Bedeutung> (Daten
werden vom Platz A + 1 geholt)
usw.
-
Nicht
inkrementierende Leseoperation: – Ist es erforderlich, das
automatische Inkrementieren der Register- oder Speicherplatzadresse
zu verbieten, so hält
man das
ADDR-Flag zusammen mit dem READ-Flag:
AEID, <Feldelementadresse>
ADDR, <Registerplatz – "A">
ADDR,
READ, <ohne Bedeutung> (Daten werden vom
Platz A geholt)
ADDR, READ, <ohne
Bedeutung> (Daten
werden vom Platz A geholt)
-
Dies
kann nützlich
sein, falls man ein Register für
Diagnoseinformation zyklisch abfragen will, beispielsweise zum Messen
der Bitfehlerrate.
-
Leseoperation
für alle
Elemente: – Die
Hardware in der beispielhaften Prozessoranordnung schließt einen
Lesevorgang von allen Elementen nicht aus, sein Nutzen ist jedoch
sehr eingeschränkt.
Die zurückgelesenen
Daten von mehreren Feldelementen werden bitweise ODER-verknüpft. Es
ist möglicherweise
nützlich, um
rasch zu prüfen,
ob das gleiche Register in mehreren Feldelementen nicht null ist,
bevor man jedes Register einzeln durchgeht, um festzustellen, um
welches Register es sich handelt.
-
Zusammengesetzte
Operationen: – Wie
man sieht, erlaubt der auf Tokens gegründete Busaufbau zahlreiche
Vertauschungen von Befehlen mit beliebiger Länge, und er erlaubt es auch,
im Befehlsapparat häufig
Abkürzungen
zu verwenden. Es kann beispielsweise nützlich sein, einen Strom zu
erzeugen, um einen Teil einer Speicherprüfung vorzunehmen, d. h. das
Lesen und Schreiben von jedem bzw. auf jeden aufeinander folgenden
Platz eines Speichers:
AEID, <Feldelementadresse>
ADDR, <Anfangsspeicherplatz – "A">
ADDR,
READ, <ohne Bedeutung> (Daten werden vom
Platz A geholt, die Adresse WIRD NICHT inkrementiert)
WRITE, <Datenwort> (das Datenwort wird
auf den Platz A geschrieben, die Adresse WIRD inkrementiert)
ADDR,
READ, <ohne Bedeutung> (Daten werden vom
Platz A + 1 geholt, die Adresse WIRD NICHT inkrementiert)
WRITE, <weiteres Datenwort> (das weitere Datenwort
wird auf den Platz A + 1 geschrieben, die Adresse WIRD inkrementiert)
usw.
-
Es
wird eine Prozessoranordnung und ein Kommunikationsprotokoll zum
Gebrauch in der Anordnung beschrieben, die einen wirksam synchronisierten
Betrieb der Elemente der Anordnung erlauben.