-
Aussage zu bundesstaastlich unterstützer Forschung
-
Die
vorliegende Anmeldung erhielt möglicherweise
finanzielle Unterstützung
gemäß US Government Grant
No. DAAH-04-94-G-0274 durch die Department of Army.
-
Die
vorliegende Spezifikation beschreibt die Kommunikation von sequentiellen
Prozessen (CSP), die als quasi verzögerungsunempfindliche asynchrone
Schaltungen ausgeführt
sind. Spezieller lehrt die vorliegende Erfindung das Umordnen von
Kommunikationssequenzen und das Kombinieren von Rechnen mit Pufferung,
um Pipelinestrukturierte Schaltungen zu erzeugen.
-
HINTERGRUND
-
Asynchrone
Prozessoren sind aus dem
US-Patent
Nr. 5,752,050 bekannt. Diese Prozessoren verarbeiten einen
Informationsstrom ohne einen den Betrieb synchronisierenden globalen
Takt.
-
Ein
Pipeline-Ansatz mit asynchronen Prozessoren benutzt das in 1 gezeigte
Grundlayout. Ein erster Prozess 100 kommuniziert mit einem
zweiten Prozess 110, der wiederum eine Meldung zum nächsten Prozess
sendet. Die Meldungen erfolgen über
einen vierphasigen Quittungsaustausch. In der ersten Phase hebt der
Sender die Anforderungsleitung; in der zweiten Phase hebt der Empfänger die
Quittungsleitung; in der dritten Phase senkt der Sender die Anforderungsleitung;
in der vierten Phase senkt der Empfänger die Quittungsleitung.
In der HSE-(Handshaking
Expansion Language)-Sprache wird der Quittungsaustausch auf Kanal
X als X+; Xa+; X-; Xa- beschrieben.
In 1 ist die Anforderung zwischen 100 und 110 die
L-Leitung (102). Die Quittung für diese Kommunikation ist La
(108). Die Anforderung zwischen 110 und 120 ist
die R-Leitung (104), die Quittung ist Ra (106).
-
Dies
ist ein einfaches Anforderungs-/Quittungssystem. Die Anforderung
[L] wird quittiert (La), dann ausgeführt R↑ dann wieder quittiert (Ra).
-
Pipelinestrukturierte
asynchrone Schaltungen sind als „Bundled-Data" oder „Micropipelines" bekannt und haben
einen synchronen Datenpfad, der durch asynchrone, selbstgetaktete
Steuerelemente „getaktet" wird. Diese Steuerelemente
führen
einen Quittungsaustauch zwischen Pipeline-Stufen mit einem Anforderung/Quittung-Paar
durch. Die Verzögerung
der Datenpfadlogik wird mit einem Verzögerungselement in der Steuerung
geschätzt,
so dass die Anforderung zum nächsten
Pipeline-Zustand erst dann erfolgt, wenn die Daten als gültig angenommen
werden.
-
Die
alternative Art und Weise beinhaltet (quasi) verzögerungsunempfindliche
Schaltungen, für
die keine Verzögerungsannahmen
gemacht werden. In diesem Stil ist der Stand der Technik im Caltech-Patent
Asynchronous Microprocessor ausgestaltet. Datenpfade sind weiterhin
von der Steuerung getrennt, wie im Bundled-Data-Fall, aber anstatt
Verzögerungsleitungen
wird eine Endeerfassungsschaltung addiert, um zu erfassen, wann
die Daten gültig
sind. Kommunikationen zwischen Prozessoren erfolgen über verzögerungsunempfindliche
Kanäle
mit einem 4-phasigen Quittungsaustausch. Zwischen Signalspeichern
oder Puffern kann Logik mit nicht Pipeline-strukturierten Schwachzustands-Logikbausteinen
ausgeführt
werden.
-
Die
WO92-07361 offenbart die
Anwendung von selbstgetakteter iterativer Overhead-Logik, CMOS-Dominologik wird
gewöhnlich
nur in zwei Phasen verwendet, Precharge und Logikbewertung. Die
WO92-07361 verwendet eine
dritte Phase zum Speichern von Daten, die es zulässt, Dominologikgatter zu kaskadieren
und ohne Interventions-Signalspeicher
zu Pipeline-strukturieren. Die Eingänge (data in) zu diesem System
müssen
in der Logikbewertungsphase streng monotone Übergänge haben und das Precharge-Signal darf
nur während
der Precharge-Phase aktiv sein.
-
Die
US 5,434,520 offenbart ein
Synchronisationssystem und Verfahren für Pipeline-strukturierte, selbstgetaktete
dynamische Logikschaltungen. Solche Synchronisationssysteme arbeiten
mit zwei oder mehr unterschiedlichen Taktsignalen für jeweilige
Gruppen oder Stufen von selbstgetakteten dynamischen Logikgattern.
Jedes Taktsignal definiert ein Precharge-Zeitintervall und ein Bewertungszeitintervall
für seine
jeweilige Gruppe oder Stufe von selbstgetakteten dynamischen Logikgattern.
-
ZUSAMMENFASSUNG
-
Das
vorliegende System lehrt eine Art der Pipeline-Strukturierung dieses Quittungsaustauschs,
damit bestimmte Prozesse näher
an gleichzeitig ablaufen können.
Das offenbarte System ist ein verzögerungsunempfindliches System,
das eine Kombination aus Logik und Pufferung zum Neusequenzieren
bestimmter Operationen anwendet.
-
Demgemäß stellt
die vorliegende Erfindung eine asynchrone Schaltung bereit, die
einen ersten Prozess und einen mit dem ersten Prozess kommunizierenden
zweiten Prozess umfasst, wobei der erste Prozess Folgendes beinhaltet:
einen L-Kanal zum Kommunizieren mit einer vorherigen Stufe durch
Warten auf Eingabedaten auf dem L-Kanal, Aufdrücken eines Eingabebestätigungssignals
als Reaktion auf die Eingabedaten, Warten, bis der L-Kanal auf neutral
gesetzt ist, und Wegnehmen des Eingabebestätigungssignals als Reaktion darauf,
dass der L-Kanal
auf neutral gesetzt wird, wobei der erste Prozess auch beinhaltet,
dass ein R-Kanal mit dem zweiten Prozess kommuniziert, indem er
wartet, bis ein mit dem zweiten Prozess assoziiertes Ausgabebestätigungssignal
weggenommen wird, Übertragen
von Ausgabedaten auf dem R-Kanal als Reaktion auf das Wegnehmen
des Ausgabebestätigungssignals,
Warten auf das Aufdrücken
des Ausgabebestätigungssignals
und Neutralsetzen des R-Kanals als Reaktion auf das Aufdrücken des
Ausgabebestätigungssignals,
dadurch gekennzeichnet, dass der erste Prozess eine Zustandshalteeigenschaft
beinhaltet, die direkt mit einer Dominologikberechnung kombiniert
wird, um Steuerung und Daten zu kombinieren und die Notwendigkeit
für eine
zusätzliche
Zustandshalteschaltung zwischen dem ersten und dem zweiten Prozess
zu eliminieren.
-
Es
wird eine neue Art der Pipeline-Strukturierung von quasi verzögerungsunempfindlichen
Schaltungen offenbart, bei der die Steuerung nicht explizit vom
Datenpfad getrennt ist. Es werden zwischen Logikbausteinen keine
zusätzlichen
Puffer oder Signalspeicher addiert. Stattdessen wird die Zustandshalteeigenschaft eines
Puffers direkt mit einer Zweischienen-Dominologikberechnung kombiniert.
Die Tokens laufen durch die Pipeline wie bei einfachen Puffern.
Die Tokens führen
auch Werte, an denen gerechnet wird. Indem die Steuerung nicht von
Daten getrennt wird und indem die Schaltungsteile, die die Quittungsaustausche
handhaben, sorgfältig
entworfen werden, können
höhere
Durchsätze
erwartet werden. Der zusätzliche
Quittungsaustausch-Schaltkomplex
addiert gewöhnlich
nicht mehr als 50% Fläche.
-
Der
Unterstützungsschaltkomplex,
der den Quittungsaustausch handhabt, erfolgt in Precharge-Dominologik eines
Typs, der für
synchrones Design üblich
ist. Zusätzliche
Schaltungen erkennen die Gültigkeit
der Ein- und Ausgangskanäle
(in asynchronem Design üblich).
Eine Quittungsschaltung quittiert die Eingänge und lädt die Logik vor.
-
Die
im vorliegenden Patent offenbarten Schaltungsausführungen
beinhalten Komponenten für
eine Logikberechnung plus Komponenten zum Erfassen der Validität der Ein-
und Ausgangsdaten sowie eine weitere Komponente zum Erzeugen der
Quittungen und zum Vorladen der Logik. Details und Zusammensetzung dieser
Teile ergeben schnelle, quasi verzögerungsunempfindliche Schaltungen,
die dem Stand der Technik überlegen
sind.
-
Das
vorliegende Patent beinhaltet auch weitere Verbesserungen dieser
kombinierten Puffer/Logik-Zelle. Dazu gehört die Fähigkeit, auf Eingängen oder
Ausgängen
konditionell zu kommunizieren, um Leitwegfunktionalität zu implementieren.
Es werden auch Mechanismen beschrieben, um interne Zustandsvariablen
effizient zu implementieren.
-
Kurzbeschreibung der Zeichnungen
-
Diese
und andere Aspekte werden nun ausführlich mit Bezug auf die Begleitzeichnungen
beschrieben. Dabei zeigt:
-
1 ein
einfaches Pipeline-Strukturierungssystem und einige der in diesem
System verwendeten Signale;
-
1A einen
einfachen Precharge-Puffer in Blockdiagrammform;
-
2 eine
einfache Schwachzustands-Halbpufferschaltung;
-
3 die
Transistordiagramme für
den Schwachzustands-Halbpuffer;
-
4 einen
Precharge-Puffer mit der Transistoranordnung oben und der Gatteranordnung
unten;
-
5 eine
Teilungs-Precharge-Schaltung;
-
6 eine
Vereinigungs-Precharge-Schaltung;
-
7 eine
Reg-Precharge-Schaltung.
-
Beschreibung der Ausgestaltung
-
Das
vorliegende System basiert auf einer Art der Pipeline-Strukturierung
der Informationen in der Zeichnung von 1 unter
Verwendung von Precharge-Logik, die einen parallelen Ablauf der
Operationen zulässt.
Eine Pipeline-Strukturierung
lässt es
zu, dass ein System mehr als eine Operation gleichzeitig ausführt. Anders
ausgedrückt,
ein Pipeline-strukturiertes System braucht nicht auf den Abschluss
einer Aktion zu warten, bevor die andere Aktion ausgeführt wird.
Wenn jedoch versucht wird, Daten vor ihrer Benutzung zurückzusetzen,
dann gehen die Daten verloren.
-
Die
vorliegende Erfindung lehrt eine Möglichkeit, dieses Problem anzugehen,
indem die Kommunikationssequenz umgeordnet wird, bestimmte Informationen
innerhalb der Sequenz gespeichert werden und eine effizientere Pipeline-Strukturierung von
Informationen ermöglicht
wird.
-
Eine „Pipeline" ist eine lineare
Sequenz von Puffern, wobei der Ausgang eines Puffers mit dem Eingang
des nächsten
Puffers wie in 1 gezeigt verbunden wird. „Tokens" 99 werden
zum Eingangsende der Pipeline gesendet und durchlaufen jeden Puffer
zum Ausgangsende. Die Tokens bleiben in FIFO-(First-In-First-Out)-Reihenfolge.
-
Für synchrone
Pipelines durchlaufen die Tokens gewöhnlich bei jedem Taktzyklus
eine Stufe. Für asynchrone
Pipelines gibt es keinen globalen Takt zum Synchronisieren der Bewegung.
Stattdessen bewegt sich jedes Token durch die Pipeline vorwärts, wo
sich eine leere Zelle davor befindet; ansonsten stoppt der Token.
Die Tokens haben effektiv ein ähnliches
Verhalten wie Fahrzeuge auf einer Autobahn.
-
Die
Pufferkapazität
(„Slack" = Reserve) einer
asynchronen Pipeline ist proportional zur Höchstzahl der Tokens, die in
die Pipeline gepackt werden können,
ohne das Eingangsende der Pipeline anzuhalten. Der „Durchsatz" ist die Zahl der
Tokens pro Sekunde, die eine bestimmte Stufe der Pipeline durchlaufen.
Die „Vorwärtslatenz" ist die Zeit, die
ein Token zum Durchlaufen der Länge
der Pipeline braucht.
-
Pufferumordnung
-
Ein
Einschienenpuffer hat die „CSP"-(Communication Sequential
Process)-Spezifikation *[L; R]. Mit einem passiven Protokoll für L und
einem Lazy-Active-Protokoll für
R hat der Puffer die Quittungsaustauscherweiterung (HSE):
-
In
Englisch ist die Quittungsaustauscherweiterung für diesen Puffer wie folgt:
Warten, bis L wahr wird; La auf wahr setzen; warten, bis L falsch
wird; La auf falsch setzen; warten, bis Ra falsch wird; R auf wahr
setzen; warten, bis Ra wahr wird; R auf falsch setzen; unendlich
oft wiederholen.
-
Das
vorliegende System erkennt, dass bestimmte Sequenzen unter diesen
Sequenzen am interessantesten sind. Die vorliegende Anmeldung ordnet
die Sequenz um, um diese zuerst abzuarbeiten.
-
In
der Tat repräsentiert
Gleichung 1 ein Vierphasenprotokoll. Die ersten beiden Aktionen
[L]; La↑ repräsentieren
das Warten, bis L aktiv wird, und eine Bestätigung dieser Tatsache. Die
zweiten zwei Aktionen repräsentieren,
dass L inaktiv wird. Die dritten zwei Aktionen repräsentieren
das Warten, bis R aktiv wird. Die vierten zwei Aktionen repräsentieren
R inaktiv.
-
Die
Umgebung führt
Folgendes aus: *[[¬La]; L↑;
[La]; L↓]
und *[[R]; Ra↑; [¬R]↑; Ra↓]. Das Warten
auf L oder [L] wird als die Ankunft eines Eingangstokens interpretiert
und der Übergang
R↑ ist
der Anfang des Ausgangstokens. Puffer werden hierin verwendet, um
die gewünschte
FIFO-Reihenfolge und Eigenschaften einer Pipeline zu bewahren.
-
Eine
direkte Implementation dieses Quittungsaustauschausdrucks kann eine
Zustandsvariable benutzen, um die erste Hälfte von der zweiten Hälfte zu
unterscheiden. Dies repräsentiert
einen großen
Betrag an Sequenzierung in jedem Zyklus.
-
Eine
andere Option besteht darin, die Wartezeiten und Events zum Reduzieren
des Sequenzierungsbetrags und der Anzahl der Zustandsvariablen umzuordnen,
um den Durchsatz zu maximieren und die Latenz der Pipeline zu minimieren.
-
Die
erste Anforderung für
ein gültiges
Umordnen ist, dass der Quittungsaustauschausdruck die Quittungsaustauschprotokolle
auf L und R hält.
Das heißt,
die Projektion auf dem L-Kanal ist *[[L]; La↑; [–, L]; La↓], die
Projektion auf dem R Kanal *[[¬Ra]; R↑;
[Ra]; R↓].
Zusätzlich
sollte die Zahl der fertigen Lt minus die Zahl der fertigen R↑ (die Pufferreserve)
wenigstens null betragen, um die Zahl der Tokens in der Pipeline
zu konservieren. Ebenso sollte, da dies ein „Puffer" ist, eine Reserve von ungleich null
eingeführt
werden. Daher sollte La↑ nicht auf das entsprechende
[Ra] warten, da die Umordnung sonst keine
Reserve hat. Dies ist die „konstante
Ansprechzeit"-Anforderung.
-
Diese
drei Anforderungen reichen zwar aus, um eine korrekte Implementation
zu garantieren, aber eine weitere ist nützlich. Die L- und R-Kanäle können zum
Codieren von Daten expandiert werden. Wenn beim Umordnen R↑ am entsprechenden
La↑ vorbei
bewegt wird, dann würden
die "L"-Daten verschwinden, bevor R↑ fertig
ist. Die Daten werden hier in einem Puffer gespeichert, hier als
interne Zustandsvariable proportional zur Anzahl der Bits auf R
oder L ausgeführt.
Diese Daten müssten
in internen Zustandsbits gespeichert werden, da die L-Daten verschwinden
können,
sobald La+ erfolgt. Diese zusätzlichen
internen Zustandsbits sind unerwünscht,
daher folgt La↑ R↑.
-
Es
gibt neun gültige
Umordnungen, die jeweils nachfolgend angegeben sind:
-
Es
sind zwei Zustandsvariablen nötig,
um die MSFB-Umordnung
zu implementieren. Die Umordnungen PCFB, B1, B2, B3, B4 und B5 benötigen alle
eine Zustandsvariable en (kurz für
Enable), wobei en↓ nach La↓ und
en↑ vor
dem Ende eingeführt
werden.
-
Bei
der Wahl, welche dieser Umordnungen die beste ist, kann davon ausgegangen
werden, dass das Ziel weniger Transistoren und ein schnellerer Betrieb
ist. Gemäß dieser
Metrik sind die vorliegenden Erfinder der Ansicht, das B3, B4 und
B5 gegenüber
PCFB immer unterlegen sind. Sie benötigen alle dieselbe Zustandsvariable.
Sie produzieren nur eine Teilmenge des PCFB-Kompromisses, mit zusätzlichen
Wartezeiten, die evtl. unnötig
sind. Diese Wartezeiten addieren zusätzliche Transistoren und verlangsamen
die Schaltungen im Vergleich zu PCFB. Sie verlangsamen auch die Schaltung
im Vergleich zu PCFB, so dass zusätzliche Transistoren hinzukommen.
-
B1
und B2 sind PCFB auch sehr ähnlich,
mit der Ausnahme, dass sie mehr Sequenzierung haben. Diese zusätzliche
Sequenzierung vereinfacht jedoch die Produktionsregel für en: auf ¬R→en↑ anstatt ¬R^¬La→en↑ im Fall
von PCFB. Die Erfinder sind daher nicht der Ansicht, dass dies PCFB
immer unterlegen ist. Aufgrund der zusätzlichen Sequenzierung und
der zusätzlichen
Transistoren anderswo werden diese Umordnungen jedoch nur selten,
wenn überhaupt
jemals, besser als PCFB sein.
-
MSFB
hat die geringstmögliche
Sequenzierung aller dieser Umordnungen. MSFB braucht jedoch zwei Zustandsvariablen
und hat kompliziertere Produktionsregeln als PCFB. Sie hat evtl.
einen Geschwindigkeitsvorteil, da sie zulässt, dass R↓ etwas früher stattfindet. Wenn man Übergänge zählt, stellt
sich heraus, dass der nächste
Puffer in der Pipeline (wenn er ähnlich
umgeordnet ist) Ra überhaupt erst dann hebt, wenn
La↓ erfolgt.
Dies ist möglicherweise überhaupt
kein Vorteil.
-
Damit
bleiben noch drei interessantesten Umordnungen, WCHB, PCHB und PCFB.
Die Namen sind von den Eigenschaften der Schaltungsimplementationen
abgeleitet. WC bedeutet Schwachzustandslogik an, PC zeigt eine Precharge-Logik
an, HB bedeutet einen Halbpuffer (Reserve ½) und FB einen Vollpuffer
(Reserve 1).
-
In
den Halbpufferumordnungen kann nur jede zweite Stufe einen Token
auf ihrem Ausgangskanal haben, da ein Token auf diesem Kanal verhindert,
dass die vorherige Stufe einen Ausgangstoken erzeugt. In der Praxis
hat jede dieser Umordnungen Vorteile für bestimmte Anwendungen, daher
sind alle nützlich.
Mit eingefügten
Zustandsvariablen sind die drei besten Umordnungen wie folgt:
-
Man
beachte, dass die ersten drei Teile der Umordnung gleich sind.
-
1A zeigt
ein Kasten- und Pfeilediagramm der Standardkomponenten einer PCHB-
oder PCFB-Zelle. Die verschiedenen Teile der Schaltung können als
Logik, Eingangsvollzug, Ausgangsvollzug und Enable-Erzeugung angesehen
werden. Die Logik ist als Precharge-Zweischienen-Dominologik mit zwei Aktivierungsgates
dargestellt, wobei das interne Enable und das Ausgangs-Enable von
der nächsten
Zelle in der Pipeline zurückkommen.
Auf die invertierte Logik folgen Inverter, um sie zur normalen Richtung
zurückzubringen.
Die Vollzugsschaltungen sind standardmäßige NOR- oder NAND-Gates und
C-Element-Baumstrukturen, die
die Gültigkeit
der Eingänge
und die Gültigkeit
der Ausgänge
berechnen. Schließlich
erzeugt die „Enable"-Schaltung die Eingangsquittung(en)
und das interne Enable (en) der Zelle. PCHB und PCFB unterscheiden sich
nur in der genauen Ausführung
dieser Enable-Schaltung.
-
Logik mit Pufferung
-
Man
nehme an, es soll eine Einheit mit CSP der folgenden Form implementiert
werden:
-
Dabei
bedeutet A?a den Empfang von Daten a auf Kanal A und y!g bedeutet
das Senden von Daten g auf Kanal y.
-
Bei
jedem Zyklus empfängt
P einige Eingänge
und sendet dann von diesen Eingängen
berechnete Funktionen aus. Die Kanäle A, B, X und Y müssen einige
Daten codieren. Dies erfolgt gewöhnlich
durch die Verwendung von Sätzen
von 1-von-N-Schienen
für jeden
Kanal. So könnte
man z.B. zum Senden von zwei Bits zwei 1-von-2-Schienen mit einer
Quittung oder eine 1-von-4-Schienen mit einer Quittung verwenden.
-
Als
Notationskonvention wird eine Schiene durch den Kanalnamen mit einer
Hochstellung für
die 1-von-N-Leitung, die aktiv ist, und einer Tiefstellung für die Gruppe
von 1-von-N-Leitungen
identifiziert, zu der er gehört
(wenn sich im Kanal mehr als eine Gruppe befindet). Die entsprechende
Quittung ist der Kanalname mit einer Hochstellung „a" oder eine Hochstellung „e", wenn sie im umgekehrten
Sinne verwendet wird.
-
Wie
im Falle des Einschienenpuffers, könnte P durch Expandieren jeder
Kanalkommunikation zu einer Quittungsaustauscherweiterung expandiert
werden. Eine direkte Implementation dieser Quittungsaustauscherweiterung
verlangt Zustandsvariablen für
die Variablen a, b und mehr. Sie könnte eine äußerst große und langsame Schaltung produzieren.
Es wird etwas Umordnen gewünscht.
Die PCFB-, PCHB- und WCHB-Umordnungen sind die nützlichsten.
-
Die
Korrespondenz zwischen den Einschienen„Schablonen" für PCFB,
PCHB und WCHB und ein Vorgang wie P lauten wie folgt. L und La repräsentieren
alle Eingangsdaten und Quittungen. R und Ra repräsentieren
alle Ausgangsdaten und Quittungen. [L] zeigt eine Wartezeit für die Gültigkeit
aller Eingänge,
[¬L] eine Wartezeit
für die
Neutralität
aller Eingänge
an. [¬R]
zeigt eine Wartezeit an, bis alle Ausgangsquittungen falsch sind,
[Ra] zeigt eine Wartezeit an, bis alle Ausgangsquittungen
wahr sind. La↑ bedeutet, dass alle Eingangsquittungen
parallel wahr gemacht werden, und La↓ zeigt an,
dass sie falsch gemacht werden. R↑ bedeutet, dass alle Ausgänge parallel
in ihre gültigen
Zustände
gesetzt werden. Wenn R↓ erfolgt,
dann bedeutet dies, dass alle Ausgänge in ihre neutralen Zustände gesetzt
werden. Wenn R↑ auftritt,
dann bedeutet dies, dass bestimmte Schienen der Ausgänge wahr
gemacht werden, je nachdem, welche Schienen von L wahr sind. Dies
expandiert R↑ zu
einem Satz von parallel ablaufenden Exklusiv-Auswahlstatements.
-
Die
Erfinder haben erkannt, dass diese einfache Umsetzung leider mehr
Sequenzierung einfügen kann
als nötig.
Von den verschiedenen Aktionen, die parallel auftreten, wie z.B.
das Gültigsetzen
aller Ausgänge
(R↑), könnte jede
Aktion auf nur einen Teil des vorangegangenen Schutzes ([¬Ra ∧ L])
warten müssen.
Zum Anheben von X0↑ oder X1↑ muss [¬Xa] geprüft, [¬Ya] aber
nicht geprüft
werden. Ebenso könnten
die Semikolons zwischen Aktionen (R↑; La↑) zu einer Übersequenzierung
führen.
Dies lässt
sich aber bei fortgesetzter Benutzung der Quittungsaustausch-Erweiterungssprache
nicht leicht beheben. So könnte
es beispielsweise in der Sequenz X↑, Y↑; Aa↑, Ba↑ nötig sein,
dass Aa↑ auf
[X] wartet, nur (wenn Y↑ den
Wert von A nicht benutzt hat) während
Bat auf [X ∧ Y]
warten müsste.
Dieser Fall könnte
als X↑,
Y↑, [X];
Aa↑),
[X ∧ Y];
Ba↑)
geschrieben werden. Dies könnte
jedoch die geschriebene Software schwerer verständlich machen. Wenn die nächsten Aktionen
nicht voll sequenziert werden, dann könnte es noch schlimmer werden.
Im Grenzfall spiegelt die Quittungsaustaucherweiterung den eigentlichen
Produktionsregelsatz (PRS) einfach wieder. Um das Problem zu umgehen,
könnte
eine Quittungsaustauscherweiterung verwendet werden. Diese könnte etwas übersequenziert
sein, mit dem Verständnis,
dass die unnötige
Sequenzierung bei der Kompilation zu Produktionsregeln optimiert
wird.
-
Die
PCFB-Version eines P mit Zweischienenkanälen würde daher wie folgt lauten:
-
Bei
dieser Quittungsaustauscherweiterung sind f0,
f1, g0 und g1 boolesche Erweiterungen in den Datenschienen
der Eingangskanäle.
Sie werden von f und g der CSP abgeleitet und zeigen die Bedingungen
zum Heben der verschiedenen Datenschienen der Ausgangskanäle an. Man
beachte, dass jeder Ausgangskanal nur auf seine eigene Quittung
wartet, was weniger sequenziert ist, als es eine direkte Umsetzung
der PCFB-Schablone wäre.
-
In
P ist ersichtlich, dass Aa und Ba dazu neigen, etwa gleichzeitig zu schalten.
Sie könnten
tatsächlich zu
einem einzelnen ABa kombiniert werden, das
auf die Konjunktion der Schutzsignale auf Aa und
Ba warten würde. Ein Kombinieren der Quittungen
neigt dazu, die Fläche
der Schaltung zu reduzieren, könnte
sie aber verlangsamen. Die beste Entscheidung ist von den Umständen abhängig.
-
Beispiele
für Logik
mit Pufferung Um den vorherigen Abschnitt in die Praxis umzusetzen,
werden mehrere CSP-Prozesse mit derselben Form wie P zu Pipeline-strukturierten
Schaltungen kompiliert. Der einfachste CSP-Puffer, der Daten codiert,
hat einen Doppelschieneneingang L und einen Doppelschienenausgang
R.
-
Die
CSP ist *[L?x; R!x]. Drei Quittungsaustauscherweiterungsumordnungen
für diesen
Prozess lauten:
-
Nach
der Blasenumordnung (die die Verwendung der invertierten Quittungen
Le und Re nahelegt)
folgen die Produktionsregeln für
WCHB-BUF. Der Schaltplan für
einen WCHB ist in 2 dargestellt.
-
-
Die
anderen Quittungsaustauscherweiterungen können ebenso ausgeführt werden,
aber sie sind beide etwas größer. Für diese
Umordnung implizieren Gültigkeit
und Neutralität
der Ausgangsdaten R die Neutralität der Eingangsdaten L. Logik
mit dieser Eigenschaft wird als „weck condition" (Schwachzustand)
bezeichnet. Es bedeutet, dass L nirgendwo anders als in R geprüft zu werden
braucht. Auch WCHB erhält
einige seine Semikolons kostenlos implementiert. Das Semikolon zwischen
La↑;
[Ra ∧ ¬L] wird durch
die Umgebung implementiert, da dies das implizite Semikolon am Ende
der Schleife ist. WCHB hat einige inhärente Vorzüge. Es stellt sich jedoch heraus,
dass WCHB zwar gut für
Puffer funktioniert, aber die "Schwachzustand"-Anforderung kann
Probleme mit anderen Schaltungen verursachen.
-
Diese
WCHB_BUF Blasenumordnung hat zwei Übergänge Vorwärtslatenz und drei Übergänge „Rückwärts"-Latenz (für den Pfad
von der rechten Quittung zur linken Quittung). Wenn man dies für den gesamten Quittungsaustausch
kombiniert, dann ergeben sich 2 + 3 + 2 + 3 = 10 Übergänge pro
Zyklus.
-
Es
können
zusätzliche
Inverter zu WCHB_BUF hinzugefügt
werden, um 10 Übergänge pro
Zyklus zu erhalten. Diese Inverter können den Durchsatz tatsächlich beschleunigen,
trotz der höheren Übergangszahl, weil
Inverter eine hohe Verstärkung
haben. Ebenso würden
die 6 Übergänge pro
Zykluspuffer die Richtungen der Daten und Quittungen nach jeder
Stufe umkehren, was äußerst unpraktisch
ist, wenn unterschiedliche Pipeline-strukturierte Zellen erstellt
werden. Als Standardpraxis haben die meisten Pipelinestrukturierten
Logikzellen zwei Übergänge mit
Vorwärtslatenz,
aber kompliziertere Schaltungen haben 5, 7 oder sogar 9 Übergänge Rückwärtslatenz,
was 10 bis 22 Übergänge pro
Zyklus ergibt (natürlich
immer gerade Zahlen).
-
Wir
betrachten als Nächstes
einen Volladdierer mit der CSP *[A?a, B?b, C?c; S!XOR(a, b, c),
D!MAJ(a, b, c)]. Die Kanäle
A, B, C, S und D sind doppelschienig. Die Quittungen für A, B und
C werden zu einem einzelnen F
e kombiniert.
Von Anfang an werden invertierte Quittungen benutzt. Die drei Quittungsaustauscherweiterungsumordnungen
lauten:
-
In
der WCHB_FA impliziert die Gültigkeit
der Ausgänge
S und D die Gültigkeit
der Eingänge,
weil S alle A, B und C prüfen
muss. Der Neutralitätstest
der Eingänge
wird zwischen S↓ und
D↓ aufgeteilt.
Dies funktioniert, solange sowohl S↓ als auch D↓ die Neutralität von wenigstens
einem Eingang vollständig
prüfen
und beide Schienen von S und D auf dieselbe Erweiterung warten.
In PCHB_FA und PCFB_FA ist die Erweiterung für die Neutralität der Eingänge offensichtlich
zu groß,
um sie als eine einzelne Produktionsregel zu implementieren. Stattdessen
muss der Neutralitätstest
in mehrere Operatoren zerlegt werden. Die gewöhnliche Zerlegung ist 'NOR'-Gates für jeden Doppelschieneneingang,
gefolgt von einem 3-Eingang-C-Element.
Fe↓ muss jetzt
auf die Gültigkeit
der Eingänge
warten, einfach um die internen Übergänge zu quittieren.
Dies bedeutet jedoch, dass die Logik für S und D die Gültigkeit
der Eingänge
nicht mehr voll zu prüfen
braucht; sie braucht kein Schwachzustand zu sein.
-
Die
blasenumgeordneten und zerlegten Produktionsregeln für WCHB_FA
lauten:
-
Der
Schaltplan ist in 3 zu sehen. Die Pullup-Logik für S0, S1, D0 und D1 hat 4 Transistoren des P-Typs in Reihe.
Dies kann recht schwach sein, aufgrund der geringeren Mobilität von Löchern. Andere WCHB-Schaltungen
können
noch schlechter sein. Da alle Eingänge vor dem Reset der Ausgänge auf
Neutralität
geprüft
werden, hätte
ein Vorgang mit drei Eingängen
und nur einem Ausgang zur Folge, dass 7 p-Transistoren in Reihe
diesen Ausgang zurücksetzen.
-
Die
vorliegenden Systeme arbeiten mit den „Precharge-Logik"-Umordnungen PCHB_FA oder PCFB_FA. Diese
testen die Neutralität
der Eingänge
an einer anderen Stelle, die sich leichter in verwaltbare Gatter
zerlegen lässt,
und verlangsamen die Vorwärtslatenz
nicht. Die PCHB_FA Umordnung hat die folgenden Produktionsregeln:
-
Diese
Schaltung kann dadurch beschleunigt werden, dass zwei Inverter zu
Fe und zwei weitere zum Erzeugen des intern
verwendeten Fe addiert werden (das jetzt
en genannt wird). Diese Schaltung ist in 4 zu sehen.
-
Eine
PCFB_FA Umordnung hätte
nur geringfügig
andere Produktionsregeln:
-
Wenn
man die drei Volladdierer-Umordnungen vergleicht, dann hat WCHB_FA
nur 10 Übergänge pro Zyklus,
während
PCHB_FA 14 und PCFB_FA 12 hat (7 in der Set-Phase, 5 in der Reset-Phase,
da L und R Quittungsaustausche parallel zurückgesetzt werden). WCHB_FA
hat zwar weniger Transistoren, aber um eine sinnvolle Geschwindigkeit
zu erzielen, müssen
die 4 P-Transistoren in Reihe sehr groß sein. Trotz der geringeren Übergangszahl
der Fliese WCHB_FA sind sowohl PCHB_FA als auch PCFB_FA im Hinblick
auf Durchsatz und Latenz erheblich schneller. PCFB_FA ist die schnellste
von allen, da sie stark auf n-Transistoren beruht und in der Reset-Phase
2 Übergänge spart.
PCFB_FA kann jedoch größer sein
als PCHB_FA, aufgrund der zusätzlichen
Zustandsvariablen en und dem zusätzlichen
Vollzug SDV. Wenn die Geschwindigkeit des
Volladdierers nicht wesentlich ist, dann scheint PCHB_FA die beste
Wahl zu sein.
-
Die
WCHB Umordnung ist im Allgemeinen nur für Puffer und Kopien ([L?x;
R!x, S!x]) am besten. PCHB ist für
die meisten Anwendungen das Arbeitspferd; sie ist sowohl klein als
auch schnell. Wenn außergewöhnliche
Geschwindigkeit verlangt wird, dann dominiert PCFB. Sie ist auch
besonders gut beim Vollziehen von 1-von-N-Codes, wo N sehr groß ist, da
der Vollzug durch eine Schaltung erfolgen kann, die wie eine „Tied-or Pulldown" ist, im Gegensatz
zu vielen Kombinationslogikstufen. Die Umordnung kann tatsächlich vermischt werden,
wobei jeder Kanal in der Zelle eine andere benutzt. Dies ist im
Allgemeinen dann nützlich,
wenn eine Zelle an einigen Eingängen
mit PCHB rechnet, aber auch einige Eingänge direkt mit WCHB auf Ausgänge kopiert.
In diesem Fall ist die Neutralitätserfassung
für die
WCHB-Ausgänge nur
ein p-Gate, was nicht schlechter ist als ein zusätzliches en-Gate.
-
Eine
andere übliche
Logikschaltungsklasse arbeitet mit gemeinsamen Steuereingängen zum
Verarbeiten von Multibit-Wörtern. Dies
ist ähnlich
wie ein Volladdierer. Die Steuerung ist lediglich ein anderer Eingang,
der zufällig
einen großen
Fallout zu vielen Ausgangskanälen
hat. Da die Ausgänge
nur spärlich
von den Eingängen
abhängig
sind (gewöhnlich
mit einer Bit-zu-Bit-Entsprechung), wird die Zahl der Gates in Reihe
in der Logik häufig
nicht zu groß.
Wenn die Zahl der Bits jedoch groß ist, z.B. 32, dann erfordert
der Vollzug aller Eingänge
und Ausgänge
viele Stufen in einer c-Element-Baumstruktur, was die Zykluszeit
erhöht,
wie auch die Last auf dem Broadcast der Steuerdaten. Zur Erzielung
einer Datenpfadlogik mit hohem Durchsatz kann es besser sein, den
Datenpfad in verwaltbare Portionen (vielleicht 4 oder 8 Bits) zu
zerlegen und gepufferte Kopien der Steuertokens zu jeder Portion
zu senden. Dadurch wird die Zykluszeit verkürzt, aber dies ändert nicht die
High-Level-Bedeutung, mit der Ausnahme, dass zusätzliche Reserve eingeführt wird.
-
Konditionelles Erzeugen von Ausgängen
-
Die
im vorangegangenen Abschnitt erörterten
Zellen können
zwar als Turing-komplett angezeigt werden (sie können zu einer VonNeumann-Statusmaschine
gemacht werden, wobei einige Ausgänge durch Puffer zurück zum Speicherzustand
gemeldet werden), aber sie sind für viele Anwendungen eindeutig
ineffizient. Eine sehr nützliche
Erweiterung ist die Fähigkeit,
eine Kommunikation auf einem Kanal auf einem bestimmten Zyklus zu überspringen.
Man stellt fest, dass dies nur ein paar geringfügige Modifikationen am bisher
vorgestellten Ansatz erfordert.
-
Man
nehme an, der Prozess vollzieht höchstens eine Kommunikation
pro Zyklus auf den Ausgängen, aber
empfängt
immer alle seine Eingänge.
Die CSP wäre:
-
Wie
oben, kann dies wie WCHB, PCHB oder PCFB umgeordnet werden. Die
Auswahlstatements für die
Ausgänge
expandieren in Exklusiv-Auswahlen zum Setzen der Ausgangsschienen,
plus ein neuer Fall, bei dem überhaupt
kein Ausgang auf dem Kanal produziert wird. Eine Doppelschienenversion
von P1 mit einer PCFB-Umordnung lautet:
-
Man
beachte, dass das Rücksetzen
der Ausgangskanäle
und Y die Fälle
aufnehmen muss, in denen diese Kanäle nicht benutzt wurden. Da
sie keine Ausgänge
erzeugen, dürfen
sie nicht auf die Quittung warten. Das Addieren in den ¬X0 ∧ ¬X1 Termen lässt es zu, die Wartezeit leer
zu vollziehen. Dies erzeugt tatsächlich keine
Produktionsregeln. Diese Quittungsaustauscherweiterung kann zu Produktionsregeln
kompiliert werden, aber es gibt einige heikle Details.
-
Eine
interessante Wahl entsteht aus der Verwendung des Skip (Sprung).
Ein Skip verursacht keine sichtbare Zustandsänderung, daher müssen die
nächsten
Statements in Folge (Aa↑,
Ba↑, ...)
tatsächlich
direkt auf die boolesche Expansion für ¬do_x(A, B, ...) und -do_y(AB,
...) zusätzlich
zu den Ausgangsschienen X0, X1,
Y0, Y1 blicken.
-
Die
Vollzugsbedingung zum Setzen der Ausgänge wäre en ∧ (X0vX1v¬do_x(A,
B, ...)) ∧ (Y*vY1v¬do_y(A,
B, ...)). Diese Expansion kann jedoch nicht hier in den Schutzfunktionen
für Aa↑ und
Ba↓ verwendet
werden, denn wenn einer zuerst auslöst, dann könnte er den anderen destabilisieren.
(Dies würde dann
funktionieren, wenn Aa und Ba zu
einer Quittung kombiniert würden.)
-
Ein
weiterer Ansatz ist die Einführung
einer neuen Variablen, die die Fälle ¬do_x und ¬do_y repräsentiert.
Angenommen, die Skip's
werden jeweils mit no_x↑ und
no_y↑ ersetzt
und no x↓ werden
zu X0↓,
X1↓ und no
y↓ zu Y0↓,
Y1↓ addiert.
Jetzt werden die Produktionsregeln einfach so erzeugt, als wenn
X und Y 1-von-3-Kanäle
anstatt 1-von-2-Kanäle wären, mit
der Ausnahme, dass die zusätzliche
Schiene nicht die richtige Quittung prüft oder in der Tat die Zelle
verlässt.
-
Schließlich gibt
es viele Fälle,
bei denen eine Erweiterung der Ausgänge ausreicht, um die Ausgangsvollzugserweiterung
ohne Bezug auf die Eingänge
zu erzeugen. Wenn beispielsweise ein Eingang benutzt wird, um zu
entscheiden, ob ein bestimmter Ausgang benutzt wird, aber auch auf
den anderen Ausgang kopiert wird, dann könnte der kopierte Ausgang zum
Prüfen
des Vollzugs des optionalen Ausgangs verwendet werden. Ebenso, wenn
zwei Ausgangskanäle
exklusiv benutzt werden, so dass der eine oder der andere in jedem Zyklus
benutzt wird, dann ist der Vollzug für beide lediglich das ODER
des Vollzugs des anderen.
-
Um
diese Erörterung
in die Praxis umzusetzen, wird ein Split implementiert, ein fundamentaler
Leitwegprozess, der einen Steuereingang zum Leiten eines Dateneingangs
zu einem von zwei Ausgangskanälen benutzt.
Die einfache Einzelbit-CSP
ist *[S?s, L?x; [¬s→A!x[]s→B!x]]. Die
PCHB-Umordnung lautet:
-
Die
ersten beiden Auswahlstatements werden bekanntlich beendet, wenn
A
0vA
1vB
0vB
1v. Dies wird als Schutz für SL
e↓ benutzt.
Die blasenumgeordneten Produktionsregeln lauten:
-
Die
Schaltung ist in 5 dargestellt.
-
Konditionelles Lesen von Eingängen
-
Es
ist auch äußerst nützlich,
Eingänge
konditionell lesen zu können.
Normalerweise wird die Bedingung auf einem separaten unkonditionellen
Kanal eingelesen, aber im Allgemeinen könnte es jede Erweiterung der
Schienen der Eingänge
sein. Eine CSP-Schablone für
den Typ von Zelle wäre
dies [sic]:
-
Das
A in diesem Kontext bezieht sich auf eine Probe des Wertes von A,
nicht nur auf die Verfügbarkeit. Dies
ist in der CSP nicht Standard, sondern eine nützliche Erweiterung, die sich
in der Quittungsaustauscherweiterung leicht implementieren lässt. Grundsätzlich können die
Bools für
do_a, do_b, no_a und no_b die Schienen von A und B prüfen, um
zu entscheiden, ob sie tatsächlich
von den Kanälen
empfangen sollen. Die Auswahlstatements werden unterbrochen, bis
entweder do a oder no a wahr ist. Diese Erweiterungen müssen stabil
sein; d.h. wenn zusätzliche
Eingänge
auftreten, dürfen
sie deshalb nicht falsch werden.
-
Für die Quittungsaustauscherweiterung
untersuchen die f und g Erweiterungen die Eingänge direkt, anstatt einer internen
Variablen „unbenutzt" zuzuordnen. Die
Ergebnisse der Erweiterungen do_a/no a und do_b/no b müssen in
internen Variablen u und v zwischengespeichert werden, so dass A
und B parallel quittiert werden können, ohne die Schutzfunktionen
von do a und dergleichen zu destabilisieren. Die PCFB-Version der
Quittungsaustauscherweiterung lautet:
-
Ebenso
wie die konditionelle Ausgangs-Quittungsaustauscherweiterung
werden die Schutzfunktionen für
Aa↓ und
Ba↓ geschwächt, um
den leeren Fall zuzulassen. Der Sprung kann wieder ein Problem verursachen,
da keine Zustandsänderung
erfolgt. Mit den Variablen u0 und v0 ist es jedoch möglich, den Sprung zu inferieren
und den richtigen Schutz für
en zu erzeugen. In der Reset-Phase müssen u und v in den neutralen Zustand
zurückkehren.
Es gibt mehrere Orte, um dies unterzubringen, aber die symmetrische
Platzierung, die sie mit Aa↓ und Ba↓ sequenziert,
vereinfacht PRS.
-
In
vielen Fällen
kann diese allgemeine Schablone stark vereinfacht werden. Wenn beispielsweise
ein Satz von unkonditionellen Eingängen die Bedingungen zum Lesen
der anderen komplett steuert, dann können diese als „Steuer"-Eingänge
angesehen werden. Wenn das Heben der Quittungen der verschiedenen
Eingänge
so sequenziert wird, dass die konditionellen den Steuereingängen vorangehen,
dann können
die Variablen u und v eliminiert werden, ohne dass Stabilitätsprobleme
verursacht werden. Ebenso können
in einigen Fällen u
und v durch eine Erweiterung der Ausgänge substituiert anstatt separat
gespeichert zu werden.
-
Als
konkretes Beispiel kehrt die Schaltung für den Merge-Prozess die Teilung
des letzten Abschnitts durch konditionelles Lesen von einem von
zwei Dateneingangskanälen
(A und B) auf den einzelnen Ausgangskanal R auf der Basis eines
Steuereingangs M um. Die CSP ist *[M?m; [¬m→A?x[]m→B?x]; X!x]. Hier wird die Vereinfachung
der Quittierung der Dateneingänge
A und B vor dem Steuereingang M benutzt. Die PCHB-Umordnung lautet:
-
Eine
hier verwendete subtile Vereinfachung ist die, dass A
e↑ und B
e↑ veranlasst
werden, die entsprechenden ¬M
0 und ¬M
1 zu prüfen.
Dies reduziert den Schutzzustand für M
e↑ und macht
die Reset-Phase mit der Set-Phase symmetrisch. Es folgt eine gewisse
Zerlegung zum Addieren von A
V, B
V und X
V, um Validitäts- und
Neutralitätschecks
auszuführen.
Nach der Blasenumordnung lautet PRS:
-
Wie
für PCHB-Umordnung üblich, erfolgt
die Arbeit in einem großen
Netzwerk von n Transistoren. Die Schaltung ist in 6 dargestellt.
-
Interner Zustand
-
Eine
weitere Erweiterung dieses Design-Stils ist die Fähigkeit,
den internen Zustand von einem Zyklus zum nächsten zu speichern. Eine CSP-Schablone
für einen
Zustandshalteprozess mit der Zustandsvariablen s lautet:
-
Dies
wird auf eine Reihe verschiedener Weisen implementiert. Die einfachste,
die keine neuen Schaltungen erfordert, besteht darin, einen Ausgang
einer normalen, Pipeline-strukturierten Zelle zurück um einen Eingang über mehrere
Pufferstufen zu speisen. Einer dieser Feedback- Puffer wird initialisiert und enthält einen Token
mit dem Wert des Anfangszustands. Es müssen genügend Puffer verwendet werden,
um eine Blockierung zu vermeiden, und es werden noch mehr benötigt, um
den Durchsatz zu maximieren. Daher kann diese Lösung recht groß sein.
Für einen
Steuerschaltkomplex, bei dem Fläche
von geringerer Bedeutung ist, reicht dies häufig aus. Als zusätzlicher
Vorzug kann der Vorwärtsspeiseteil
der Zustandsmaschine als mehrere sequentielle Stufen von Pipeline-strukturierter
Logik implementiert werden, was die Zahl der nötigen Feedback-Puffer reduziert
und auch weitaus kompliziertere Funktionen zulässt.
-
Abgesehen
von der Verwendung von Feedback-Puffern, gibt es drei Hauptansätze zur
Zustandsbeibehaltung mit zunehmender Generalität und Komplexität. Zunächst speichern
Pipeline-Strukturierungskanäle an
sich den Zustand. Diese Werte werden gewöhnlich in der Pipeline weitergeleitet
und passieren jede Stufe nur einmal. Wenn eine Stufe jedoch ihren
Eingang benutzt, aber nicht quittiert, dann ist der Eingangswert
weiterhin im nächsten
Zyklus. Im Wesentlichen wird der Token gestoppt und viele Male abgetastet.
In der CSP kann dies mit der Probe des Wertes des Kanals ausgedrückt werden.
Es wird ein konditioneller Schaltungseingangstyp verwendet, der
einen Eingang zum Ereugen von Ausgängen ohne Quittierung dieses
Eingangs benutzt. Diese Technik kann für bestimmte Probleme verwendet
werden. Zum Beispiel könnte
ein Loop-Unroller einen Befehl auf dem Eingangskanal nehmen und
viele Kopien davon auf einem Ausgangskanal auf der Basis eines Steuereingangs
produzieren. Dieser Typ von Zustandsvariable kann natürlich niemals
gesetzt werden, er kann nur ein oder mehrere Male von einem Eingang
gelesen werden.
-
Wenn
die Zustandsvariable exklusiv in einem Zyklus gesetzt oder benutzt
wird, dann reicht eine einfache Modifikation der standardmäßigen Pipelinestrukturierten
Umordnung aus. Die Zustandsvariable s wird einem Zweischienenwert
zur selben Zeit zugewiesen, wie die Ausgänge erzeugt werden. In der
Reset-Phase bleibt er stabil. Im Gegensatz zu den gewöhnlichen
Zurück-zu-null-Variablen geht s
nur kurz durch Neutralität zwischen
gültigen
Zuständen über. Wenn
s sich nicht ändert,
dann geht es überhaupt
nicht durch einen Neutralzustand. Die CSP für dieses Verhalten wird genau
wie P3 ausgedrückt,
mit der Ausnahme, dass das Semikolon vor der Zuweisung zu s durch
ein Komma ersetzt wird. Dies wird durch die Annahme ermöglicht,
dass s sich nur dann ändert,
wenn die Ausgänge
X und Y nicht davon abhängen;
dadurch werden Stabilitätsprobleme vermieden.
-
Die
einzige schwierige Sache beim Ableiten der Quittungsaustauscherweiterung
dafür ist
das Zuweisungsstatement. Grundsätzlich
erfolgt die Zuweisung dadurch, dass zunächst die entgegengesetzte Schiene gesenkt
und dann die gewünschte
Schiene gehoben wird. Dadurch wird garantiert, dass die Variable
beim Ändern
durch neutral geht und auch eine gute Blasenumordnung erzielt wird.
-
Vollzugserfassung
dieser Zuweisung ist grundsätzlich äquivalent
mit dem Prüfen,
dass der Wert von s den Eingängen
zu s entspricht. So wird s:x zu [x0→s↓; s
1↑[]x
1→s
0↓s
1↑];
[x
0 ∧ s
0vx
1 ∧ s
1]. Die PCFB-Version der Quittungsaustauscherweiterung
für diesen
Typ von Zustandshalteprozess lautet:
-
Es
ist häufig
wünschenswert,
die Vollzugserfassung der Zustandsvariablen in eine 4-Phasen-Vollzugsvariable
sV zu zerlegen, die den Vollzug der Zuweisung
auf der Set-Phase erfasst und in der Reset-Phase gelöscht wird.
Dies macht es leichter, mehrere Zustandsvariablen zu haben. Eine
bemerkenswerte Sache ist, dass die Zuweisungssequenz und der Vollzug
3 Übergänge haben,
wenn sich der Zustand ändert,
und daher häufig
mehr Übergänge haben
als ein typischer Ausgangskanal. Bei der Reset-Phase oder wenn der
Zustand unverändert
bleibt, erfordert dies jedoch nur 1 Übergang. Ein anderer Vorbehalt
ist, dass die hier gezeigte Zustandsvariable am besten nur für doppelschienige
1-Bit-Zustandsvariablen
funktioniert.
-
Als
ein Beispiel für
diesen Typ von Zustandsvariablen betrachte man den "Register"-Prozess x: = 0; *[C?c;
[c→R!x[]¬c→L?x]]. Dieser
verwendet einen Steuerkanal C, um zu entscheiden, ob das Zustandsbit
x über
die Ein- und Ausgangskanäle
L und R gelesen oder geschrieben werden soll. Das Zustandsbit wird
offensichtlich ausschließlich
auf einem beliebigen gegebenen Zyklus benutzt oder gesetzt. Dieser
Vorgang kommuniziert auch konditionell auf L und R.
-
Die
PCHB-Version der Quittungsaustauscherweiterung lautet:
-
PRS
hat mehrere heikle Merkmale. Aufgrund des Exklusiv-Musters der Kommunikationen
können
die Regeln für
Ce vereinfacht werden. Es folgt das zerlegte und blasenumgeordnete
PRS. Die Schaltung ist in 7 dargestellt.
-
-
Die
allgemeinste Form der Zustandshaltezelle ist eine, bei der die Zustandsvariable
in einem beliebigen Zyklus benutzt und gesetzt werden kann. Dazu
ist es notwendig, separate Speicherstellen für den neuen Zustand und den
alten Zustand zu haben. Dies kann durch Einführen einer zusätzlichen
Zustandsvariablen t erfolgen, die den neuen Zustand hält, bis
s benutzt wird. Die CSP hierfür
lautet:
-
Wenn
dies in eine Quittungsaustauscherweiterung umgewandelt wird, dann
gibt es mehrere Auswahlmöglichkeiten
dafür,
wo die Zuweisung s: = t gesetzt werden soll. Es ist am besten, diese
Zuweisung in der Reset-Phase der Kanalquittungsaustausche durchzuführen. Nach
der Zuweisung s: = t kehrt t genau wie ein Kanal zu neutral zurück. Die
PCFB-Version dieses Zellentyps ist:
-
Die
Zuweisungsstatements können
wie zuvor zu Produktionsregeln kompiliert werden. Von besonderem
Interesse ist die Kompilation der Sequenz [t
0→s
1↓;
s
0↑;
t
0↓[]t
1→s
0↓;
s
1↑;
t
1↓].
Aufgrund von Korrelationen der Daten wird dies zu den einfachen
(blasenumgeordneten) Produktionsregeln kompiliert:
-
s0 und s1 sollten
auch auf den richtigen Anfangswert zurückgesetzt werden. Der Vollzug
dieser Sequenz ist der normale Check für zu [sic] t 0 t 1. Wenn sich die
Zustandsvariable nicht ändert,
dann braucht diese Sequenz nur 1 Übergang, da die ersten 4 Regeln
leer sind. Wenn sich der Zustand ändert, dann sind 3 Übergänge nötig. Dies
ist 2 Übergänge länger als
das Reset eines normalen Ausgangskanals, daher sollte dies so angesehen
werden, dass die Low-Level-Produktionsregelzerlegung optimiert wird.
Dieser Strukturtyp funktioniert nur dann gut, wenn s und t doppelschienig
sind, obwohl mehrere Zweischienen-Zustandsvariablen parallel zum Codieren
mehrerer Zustände
verwendet werden können.
-
Zusätzlich wurden
Erweiterungen zu diesen Zellen erläutert, die einen konditionellen
Empfang von Eingängen
und ein konditionelles Senden von Ausgängen erlauben. Schließlich werden
verschiedene Ansätze zum
Speichern des internen Zustands in den Zellen offenbart.
-
Der
Stand der Technik bestand darin, nicht Pipelinestrukturierte Schwachzustandslogik
zu verwenden. Es wurden zusätzliche
Puffer oder Register zwischen Logikbausteinen hinzugefügt, um etwas
Pipeline-Strukturierung hinzuzufügen.
Dieser Ansatz war kleiner, aber wesentlich langsamer. Die zusätzlichen
Puffer erhöhten
auch die Vorwärtslatenz.
Im Wesentlichen sollten sie, innerhalb der Grenzen der Verwendung
von mehr und mehr Puffern, irgendwann in die Logik integriert werden
und alle Zellen sollten „maximal" Pipeline-strukturiert
werden. Das heißt,
jeder diskrete Logikzustand erhält
seine eigene Pipeline-Strukturierung, so dass keine weitere Reserve
hinzugefügt
werden könnte,
ohne einfach überschüssige Puffer
zu addieren. In der Praxis belaufen sich die Kosten für eine solche
feine Pipeline-Strukturierung auf eine 50 bis 100%ige Flächenzunahme
gegenüber
einer völlig
nicht Pipelinestrukturierten Schaltung. Sie reduziert die Latenz
(da keine separaten Puffer hinzugefügt werden) und erhöht natürlich den
Durchsatz. Bei dieser natürlichen
Grenze der Pipeline-Strukturierung erfordern alle Quittungsaustausche
zwischen Nachbarzellen eine geringe Zahl von Übertragungen pro Zyklus, typischerweise
14 bis 18. Die internen Zyklen halten gewöhnlich Schritt. Dies ergibt
einen sehr hohen Spitzendurchsatz (vergleichbar mit 14 Übergängen pro
Zyklus an Hyper-Pipeline-strukturierten synchronen Designs wie dem DEC
Alpha), lässt
sich aber leichter zusammensetzen. Eine Zusammensetzung schneller
Pipeline-strukturierter Zellen in verschiedenen Mustern kann weitaus
niedrigere Systemdurchsätze
ergeben, wenn nicht besondere Maßnahmen getroffen werden, um
die Latenzen sowie die Durchsätze der
Einheiten abzustimmen.
-
Mehrere
einfache Modifikationen an diesen Pipelinestrukturierten Schaltungsschablonen
sind ebenfalls nützlich
und neu.
-
1. GO-SIGNAL
-
In
der PCHB ist es möglich,
die „en & re" Ausdrücke für das Logik-Pulldown
und „-en & -re" für das Logik-Pullup
in ein Zweieingangs-c-Element von „en" und „re" aufzuteilen, das ein einzelnes „Go"-Signal erzeugt,
das für
Precharge und Enable der Logik verwendet wird. Dies verbessert die
Vorwärtslatenz
und die Analogsicherheit der Logik, obwohl 4 Übergänge zum Quittungsaustausch
auf dem Ausgangskanal hinzukommen.
-
Mit
mehr Aufmerksamkeit könnte
dieses „Go"-Signal auch zu einer
PCFB hinzugefügt
werden. In diesem Fall muss das „Go"-Signal auch geprüft werden, bevor die linken
Enables erzeugt werden, da es sonst zu Unstabilitäten kommt.
Dies hat den Nebeneffekt, dass Reserve auf eine Hälfte reduziert
wird, aber dies ist irrelevant, wenn das Ziel hohe Geschwindigkeit
ist.
-
Wenn
ein „Go"-Signal mit konditionellen
Ausgängen
verwendet wird, dann darf das „Go-„ nicht
warten, bis das rechte Enable (re) tief geht, da es dies sonst nicht
tut (da keine Daten im letzten Zyklus gesendet werden). Anstatt
eines c-Elementes ergibt dies das PRS: "en & re & ~no_r → go+" und "-en & (no_r; -re) → go-".
-
2. GEMEINSAMER EIN-/AUSGANGSVOLLZUG
-
In
den meisten dieser Beispiele erfolgt der Ausgangsvollzug vor den
Invertern, da so ein NAND-Gate anstatt eines NDR-Gates benutzt werden
und der Vollzug einen Übergang
früher
erfolgen kann. Es ist jedoch möglich,
auch von hinter den Invertern zu vollziehen. Dies ist besonders
dann nützlich,
wenn die Ausgangsvollzugsschaltung einer Zelle mit dem Eingangsvollzug
der nächsten
Zelle in der Pipeline gemeinsam genutzt werden kann.
-
3. TIMING-ANNAHMEN
-
Das
vorliegende Patent präsentiert
zwar vornehmlich asynchrone Schaltungen in einem quasi verzögerungsunempfindlichen
Rahmen, aber es kann sich als wünschenswert
erweisen, Timing-Annahmen einzuführen,
um die Schaltung zu vereinfachen oder zu beschleunigen. Es können mehrere
nützliche Non-QDI-Schaltungen
einfach dadurch abgeleitet werden, dass Transistoren von einer QDI
WCHB, PCHB oder PCFB Schaltung weggelassen werden. Es wird bevorzugt,
wenn die eingeführten
Timing-Annahmen gänzlich
durch Schätzen
der Verzögerungen
in der Zelle erfüllt
werden können,
ohne Annahmen über
die Verzögerungen
ihrer Umgebung zu machen. Diese Eigenschaft kann durch mehrere einfache
Modifikationen erzielt werden.
-
So
kann beispielsweise in einem PCFB mit einem einzigen „Go"-Signal angenommen
werden, dass der Ausgang sehr bald vorgeladen wird, nachdem das „Go"-Signal tief gegangen
ist. Die Tatsache, dass das „Go"-Signal tief geht,
kann als eine Anzeige dafür
gesehen werden, dass die Ausgangsdaten vorgeladen sind oder es bald
sein werden. Diese Timing-Annahme der „implizierten Neutralität" kann viele Übergänge einer Vollzugserfassung
eliminieren und es zulassen, dass der nächste Zyklus früher beginnt.
Auf ähnliche
Weise kann die Eingangsvalidität
zuweilen ignoriert werden, wenn die Ausgangsvalidität impliziert,
dass alle Eingangskanäle
gültig
sind.
-
Von
den verschiedenen Typen von Zustandshaltezellen haben die eingeschränkteren
Versionen im Allgemeinen einfachere und schnellere Implementationen
und sollten daher nach Möglichkeit
verwendet werden. Für
den allgemeinsten Fall sollte entweder ein Paar Zustandsvariablen
oder, wenn Fläche
keine Frage ist, eine Feedback-Schleife von Puffern verwendet werden.
-
Drei
Haupttypen von Quittungsaustauschumordnung haben sich für verschiedene
Umstände
als überlegen
erwiesen. Die Schwachzustands-Halbpufferversion funktioniert gut
für Puffer
und Kopien ohne Logik. Die Precharge-Logik-Halbpufferung ist der einfachste gute
Weg, um die meisten Logikzellen zu implementieren. Die Precharge-Logik-Vollpufferung hat
Vorteile im Hinblick auf die Geschwindigkeit und ist gut beim Abkoppeln der
Quittungsaustausche von Nachbareinheiten. Sie sollte dann angewendet
werden, wenn der Durchsatz verbessert werden muss.
-
Es
wurden zwar oben nur ein paar Ausgestaltungen ausführlich beschrieben,
aber weitere Ausgestaltungen sind vom Erfinder vorgesehen und sollen
in den Rahmen der folgenden Ansprüche fallen. Darüber hinaus
sind andere Modifikationen vorgesehen und sollen hierin abgedeckt
sein.