1974 entwickelte Hewlett-Packard einen Mikroprozessor zur Steuerung verschiedener Funktionen seiner Produkte, von Diskettenlaufwerken bis zu Voltmetern. Dieser einfache Prozessor entsprach nicht den Standard-Mikroprozessoren - er unterstützte nicht einmal Addition oder Subtraktion - und wurde daher als "Nanoprozessor" bezeichnet. Die Hauptmerkmale des Nanoprozessors waren niedrige Kosten und hohe Arbeitsgeschwindigkeit: Im Vergleich zum modernen Motorola 6800 für 360 USD kostete der Nanoprozessor 15 USD und die Steuerungsvorgänge waren viel schneller.
Obwohl es keine Additionsoperation gab, konnte der Nanoprozessor (langsam) Zahlen hinzufügen, indem er wiederholt inkrementierte oder dekrementierte (die unterstützten Operationen). In anderen Fällen, zum Beispiel mit einem Voltmeter von Hewlett-Packard, wurden dem Produkt ALU-Chips (74LS181) hinzugefügt, die schnell hinzugefügt wurden - sie wurden als E / A-Geräte abgerufen. Da Turing vollständig ist, kann Nanoprocessor theoretisch alles tun, von der Berechnung von Gleitkommafunktionen bis zum Start eines Crysis-Spiels. es wäre nur sehr langsam.
Die Prozessor-Fotomaske kann über den Link (122 MB PSD) heruntergeladen werden .

HP Nanoprocessor, 1820-1691. , -2,5 , – . , .
In den folgenden Jahrzehnten war der Prozessor bis vor kurzem unbekannt. Sein Entwickler Larry Bauer teilte die Fotomasken und die Dokumentation für den Chip mit dem CPU Shack-Projekt. Dort scannten sie die Fotomasken und schrieben einen Artikel über Nanoprozessor. Nachdem Antoine Berkovichi die Bilder zu einem zusammengefügt hatte, schrieb ich eine Rezension des darauf basierenden Nanoprozessors . Dies ist der zweite Teil des Artikels, in dem ich einige Details der Nanoprozessor-Schaltung diskutiere und Reverse Engineering basierend auf Fotomasken durchführe. Es ist interessant, Funktionsblöcke des Nanoprozessors zu untersuchen, da sie die minimale Implementierung der erforderlichen Funktionen umgehen und gleichzeitig ein nützlicher Mikroprozessor bleiben.
Im Nanoprozessor
Wie die meisten Prozessoren dieser Zeit ist der Nanoprozessor 8-Bit. Es wird jedoch kein Direktzugriffsspeicher unterstützt, und der Code wird von einem externen 2-KB-ROM ausgeführt. Es verfügt über 16 8-Bit-Register - mehr als die meisten Prozessoren und genug, um den Speichermangel für viele Anwendungen auszugleichen. Der Nanoprozessor verfügte über 48 Anweisungen - deutlich weniger als die 72 Anweisungen für das Motorola 6800. Der Nanoprozessor verfügte jedoch über einen praktischen Satz von Bit-Set-, Lösch- und Überprüfungsvorgängen, die anderen Prozessoren dieser Zeit fehlten. Es gab auch mehrere E / A-Befehle, die sowohl E / A-Ports als auch Allzweck-E / A-Pins unterstützten, wodurch es einfach war, andere Geräte damit zu steuern.
Der Nanoprozessor verfügte nicht über Anweisungen zur Unterstützung der Speicherbehandlung, da er für Vorgänge konzipiert war, für die keine Datenspeicherung erforderlich war. In einigen Anwendungen verwendete der Nanoprozessor jedoch RAM als E / A-Gerät. Eine Adresse wurde an einen der E / A-Ports gesendet, und ein Datenbyte wurde vom anderen gelesen. Kombinierte Nanoprozessor-Fotomasken (anklickbar) Aus dem obigen Fotomaskenbild können wir schließen, dass der Nanoprozessor einfach ist. Blaue Linien sind Metallleiter auf dem Chip, grüne sind Silizium mit Verunreinigungen. Schwarze Quadrate um den Umfang - 40 Pads für die Kommunikation mit externen Kontakten des IC. Die kleinen schwarzen Bereiche im Inneren sind Transistoren. Wenn Sie genau hinschauen, können Sie 4.639 davon zählen.

Wenn wir berücksichtigen, dass der Befehlsdecoder aus Paaren kleiner Transistoren besteht, was zur Vereinfachung der Anordnung von Komponenten erfolgt, und diese Paare als eins zählen, erhalten wir 3829 Transistoren. Davon sind 1061 Klimmzüge und 2668 aktiv. Zum Vergleich: Der 6502 hatte 4.237 Transistoren, von denen 3.218 aktiv waren. Das 8008 hatte 3.500 Transistoren, während das Motorola 6800 4.100 hatte.
Das folgende Blockdiagramm zeigt die interne Struktur des Nanoprozessors. In der Mitte befinden sich 16 Halteregister. Mit dem Komparator können Sie zwei Werte vergleichen, um eine bedingte Verzweigung bereitzustellen. Die Steuerlogikeinheit befasst sich mit den Inkrement-, Dekrement-, Verschiebungs- und Bitoperationen des Akkumulators. Es verfügt nicht über die arithmetischen und logischen Operationen der Standard-ALU. Der Programmzähler (rechts) ruft einen Befehl aus dem Befehlsregister (links) ab; Interrupts und Unterprogrammaufrufe haben ihre eigenen Einzelelementstapel zum Speichern von Rücksprungadressen.

Flussdiagramm der Arbeit aus den Anweisungen für Nanoprozessor
Lassen Sie mich betonen, dass der Nanoprozessor trotz seiner Einfachheit und des Fehlens arithmetischer Operationen keine Art "Spielzeug" -Prozessor ist, der die Steuerleitungen wechselt. Es ist ein schneller und leistungsstarker Prozessor, mit dem komplexe Vorgänge ausgeführt werden können. Beispielsweise verwendete das Echtzeituhrmodul HP 98035 Nanoprozessor, um zwei Dutzend verschiedene ASCII-Steuerzeichenfolgen zu verarbeiten und die Anzahl der Tage in einem Monat zu zählen.
Ein interessantes Projekt zum Spaß kann die Erstellung einer FPGA-Version von Nanoprocessor sein - da Nanoprocessor möglicherweise die einfachste Version eines echten kommerziellen Prozessors ist. Die Anweisungen dazu beschreiben alle Befehle und geben Beispiele für Code, den Sie ausführen können.
Register
Das Foto des Kristalls unten zeigt, dass ein bedeutender Teil des Nanoprozessors von seinen 16 Registern besetzt ist. Sie kommunizieren mit den übrigen Komponenten über den Datenbus. Die Ketten oben wählen ein bestimmtes Register aus. Register R0 rechts neben dem Komparator.

Ein wesentlicher Teil des Nanoprozessors wird von seinen 16 Registern eingenommen.
Der Baustein eines Registers sind zwei Inverter in der Rückkopplungsschleife, die ein Bit speichern, wie unten gezeigt. Wenn der obere Leiter 0 ist, gibt der rechte Wechselrichter 1 an den unteren Leiter aus, und der linke Wechselrichter gibt eine 0 an den oberen Leiter aus, wodurch der Zyklus abgeschlossen wird. Die Schaltung bleibt stabil, indem 0 „gespeichert“ wird. Wenn der obere Leiter 1 ist, wird er auf der gleichen Weise unten auf 0 und oben wieder auf 1 invertiert. Das Netz kann auf diese Weise 0 oder 1 speichern und so einen 1-Bit-Speicherplatz bilden.

Zwei Wechselrichter in einer stabilen Bitspeicherschaltung
Das folgende Diagramm zeigt, wie dieser Speicher mit zwei Wechselrichtern auf einem Chip implementiert ist. Die physikalische Position der Komponenten wird links anhand einer Fotomaske angezeigt. Das Layout ist so optimiert, dass die Zelle so wenig Platz wie möglich einnimmt. Blaue Linien - Metallschicht, grün - Silizium. In der Mitte ist ein Diagramm der entsprechenden Schaltung mit Transistoren dargestellt. Jeder Wechselrichter besteht aus einem Transistorpaar, wie rechts gezeigt. Transistoren oben und unten - "durch" - bieten Zugriff auf die Speicherzelle.

Ein Bit im Nanoprozessor speichern. Jedes Bit ist auf 6 Transistoren (6T SRAM-Zelle) implementiert.
Ein Registersatz besteht aus einer Matrix solcher Bitzellen. Der Registerauswahlbus wählt ein Register (eine Spalte) zum Lesen oder Schreiben aus. Die oberen und unteren Durchgangstransistoren verbinden dann die Wechselrichter mit ihren jeweiligen horizontalen Bitleitungen. Zum Lesen liefert die obere Bitzeile den in der Zelle gespeicherten Wert; Es gibt acht Bitleitungen für die acht im Register gespeicherten Bits. Zum Schreiben wird der Wert in die obere Bitleitung und der invertierte Wert in die untere übertragen. Diese Werte ersetzen die Signale der Wechselrichter, wodurch sie den gewünschten Wert annehmen und dieses Bit speichern. Somit ermöglicht ein Gitter aus horizontalen Bitleitungen und vertikalen Auswahlleitungen, dass ein Wert in ein bestimmtes Register gelesen oder geschrieben wird.
Dekodierungsbefehle
Die Decodierschaltungen sind damit beschäftigt, den Binärcode des Befehls (zum Beispiel 01101010) zu nehmen und zu bestimmen, was der Befehl ist (in diesem Fall "Akkumulator aus Register 10 laden"). Im Vergleich zu vielen Prozessoren sind die Anweisungen des Nanoprozessors recht einfach: Es gibt relativ wenige (48), und der Befehlscode besteht immer aus einem Byte. Das folgende Diagramm zeigt, dass die Befehlsdecodierungslogik (rot) einen signifikanten Teil des Chips einnimmt. Das Befehlsregister (grün) besteht aus acht Latches, die den aktuellen Befehl enthalten. Das Befehlsregister befindet sich neben den Datenpins, zu denen der Befehl vom ROM kommt. In diesem Abschnitt wird die gelb dargestellte Dekodierungskette aufgeschlüsselt.

Die Decodierung erfolgt durch NOR-Gatter. Jedes NOR-Gatter erkennt einen bestimmten Befehl oder eine bestimmte Befehlsgruppe. Das NOR-Gatter akzeptiert Befehlsbits oder deren Komplement als Eingabe. Wenn alle eingehenden Bits Null sind, meldet das NOR-Gatter eine Übereinstimmung. Auf diese Weise können Sie sowohl im gesamten Team als auch in einem Teil des Teams nach Spielen suchen. Beispielsweise hat der Befehl "Akku aus Register R laden" ein Binärformat 0110rrrr, in dem die letzten vier Bits das erforderliche Register angeben. Das NOR-Gatter (Bit7 + Bit6 '+ Bit5' + Bit4) 'entspricht diesem Befehl.
Ein auf diese Weise strukturierter Befehlsdecoder ist insofern gut, als er aus kompakten und sich wiederholenden Schaltungen zusammengesetzt werden kann. Es wird oft als PLM (Programmable Logic Array) bezeichnet. Die Idee ist, dass die eingehenden Signale in die Matrix horizontal und die ausgehenden Signale vertikal eingespeist werden. An jeder Kreuzung kann sich ein Transistor befinden, und dann ist das Eingangssignal Teil des Gates; Wenn kein Transistor vorhanden ist, wird dieser Eingang ignoriert. Das Ergebnis sind kompakt angeordnete NOR-Ventile. In frühen Mikroprozessoren wurde der Decoder häufig aus einer Matrix von NOR-Gattern hergestellt - dies war beispielsweise beim 6502 der Fall.
Das folgende Diagramm zeigt drei vergrößerte Decoder auf der rechten Seite, die im obigen Diagramm gelb eingekreist sind. Dieses Diagramm entspricht dem Decoder ganz links. Achten Sie auf die Übereinstimmung der Transistoren im Diagramm mit den rosa Flecken der Transistoren im Layout. Die Idee ist, dass wenn irgendein Eingangssignal den Transistor aktiviert, der Transistor den Ausgang auf Masse zieht. Andernfalls wird der Ausgang durch einen Widerstand hochgezogen. Die Wechselrichter an der Unterseite verstärken das Signal so, dass genügend Strom für alle acht Teile der Batterie vorhanden ist. Interessanterweise werden bei diesem Layout Transistorpaare mit Masse und Ausgang verwendet - ich sehe keinen Vorteil gegenüber der Verwendung eines einzelnen Transistors. Beachten Sie in jedem Fall, wie das PLM eine dichte Anordnung von Decodern bereitstellt.
Es ist zu beachten, dass der Wechselrichter im Befehlsdecoder auf 12 V und nicht auf 5 V gezogen wird. Dies liegt daran, dass der Nanoprozessor Metall-Gate-Transistoren anstelle der fortschrittlicheren Silizium-Gate-Transistoren verwendet, die in anderen Mikroprozessoren der Ära zu finden sind. Der Nachteil eines Transistors mit einem Metallgatter ist eine erhöhte Schwellenspannung, so dass die Ausgangsspannung des Transistors viel niedriger ist als die Spannung am Gate. Der Ausgang eines herkömmlichen Wechselrichters ist zu klein, um das Gate des Durchgangstransistors zu speisen, da seine Ausgangsspannung wieder abfällt. Die Lösung besteht darin, eine 12-V-Stromversorgung für die Wechselrichter des Decoders zu verwenden, die die Batterie-Durchgangstransistoren steuert. Dann haben die Signale genügend Spannung, um die Durchgangstransistoren zu aktivieren. Mit anderen Worten, der Nanoprozessor benötigt zusätzliche 12+ V,da es Metall-Gate-Transistoren anstelle der fortschrittlicheren Silizium-Gate-Transistoren verwendet.

Eine der Nanoprozessor-Decoderschaltungen. Das Diagramm links entspricht dem am weitesten links stehenden Decoder der drei rechts gezeigten.
Diese Schaltung erzeugt ein Inkrement / Dekrement-Signal, das in die Akkumulatorschaltung eingespeist wird. Der Strompfad erkennt eine Übereinstimmung, wenn der Signalpegel von Takt, Anforderung, 6. Befehlsbit und 2. Befehlsbit niedrig ist - eine Übereinstimmung wird während der Ausführungsphase als x0xxx0xx gefunden. Diese Befehle umfassen "Increment Binary" (00000000), "Increment BCD" (00000010), "Decrement Binary" (00000001) und "Decrement BCD" (00000011).
Die im Diagramm gezeigte Kette sucht nach Übereinstimmungen mit Befehlen der Form x0xxx0xx, sodass die Übereinstimmung mit viel mehr Befehlen als nur Inkrementieren und Dekrementieren gefunden wird. Warum sucht es nicht nach einem vollständigen Match? Der Grund ist, dass die Aktivierung des Inkrementierungs- / Dekrementierungssignals keine Rolle spielt, wenn der Akku nicht verwendet wird. Durch Erweitern der Liste der Übereinstimmungsoptionen könnten die Entwickler einige der Transistoren in der Schaltung entfernen. Es ist wichtig, dass die Kette andere akkumulatorbezogene Anweisungen wie "Akku löschen" (00000100) oder "Akku aus Register laden" (0110rrrr) überschreibt.
Komparator
Eine wichtige Nanoprozessorschaltung ist ein Komparator, der den im Akkumulator gespeicherten Wert mit dem Wert im Register R0 vergleicht. Der Komparator verwendet eine einzelne, aber schwierige Schaltung, um sie zu vergleichen. Im Wesentlichen vergleicht der Algorithmus zwei Zahlen, beginnend mit den höchstwertigen Bits. Wenn die Bits gleich sind, fahren Sie mit den unteren fort. Die erste Bitdifferenz bestimmt, welcher Wert größer ist (im Fall von 10101010 und 10100111 bestimmt dies das 4. Bit von rechts).
Der Algorithmus wird schrittweise in acht Schritten implementiert, beginnend mit dem höchstwertigen Bit unten. Jeder Schritt besteht aus zwei symmetrischen Teilen - einer bestimmt, ob die Ungleichung A> R0 gilt, und sein zusätzlicher Teil prüft die Ungleichung A <R0. Wenn die Zahlen noch gleich waren, aber zu diesem Zeitpunkt ein Unterschied festgestellt wurde, erzeugt die Stufe ein Signal "mehr" oder "weniger". Andernfalls wird die Entscheidung an eine niedrigere Ebene weitergeleitet. Die endgültige Entscheidung trifft die oberste Sprosse. Bitte beachten Sie, dass der Gleichheitsvergleich im Komparator "kostenlos" erfolgt - wenn am Ausgang keine Signale "mehr" oder "weniger" vorhanden sind, sind die Werte gleich.

Eine der Stufen eines 8-Bit-Komparators
Das folgende Diagramm zeigt das physikalische Layout der beiden Stufen des Komparators. Ein Trick im Komparatorlayout besteht darin, dass es zwischen dem Register 0 links und dem Akkumulator rechts liegt, wodurch die Länge der Drähte minimiert wird. Der Komparator greift direkt auf Register 0 zu und umgeht dabei den üblichen Register- und Datenbusauswahlpfad.

Zwei Stufen des Komparators - wie auf der Fotomaske angegeben
Bedingte Verzweigungsbefehle für Nanoprozessoren können die Komparatorausgabe überprüfen. Bedingte Verzweigungsschaltungen sind ziemlich einfach: Einige Bits des Verzweigungsbefehls wählen eine bestimmte Prüfung durch den Multiplexer aus. Dann entscheidet das 7. Bit des Befehls, ob "dieser Zweig, wenn wahr" oder "dieser Zweig, wenn falsch" ausgewählt wird. Im Gegensatz zu den meisten Prozessoren erlaubt der Nanoprozessor keine Verzweigung zu einer Adresse. Es werden einfach zwei Befehlsbytes übersprungen, wenn die Bedingung erfüllt ist (und normalerweise enthalten diese beiden Bytes den Befehl, zum gewünschten Ziel zu gelangen, aber manchmal gibt es andere Befehle). Das Überspringschema ist einfach: Der Programmzähler wird erneut aufgerufen, während der Wert nicht um 1, sondern um 2 erhöht wird, wobei zwei Befehle übersprungen werden. Es stellt sich heraus, dass der Nanoprozessor eine Vielzahl von bedingten Überprüfungen für eine relativ kleine Anzahl von Netzen durchführt.
Der Nanoprozessor hat eine große Anzahl von Verzweigungsbedingungen - überraschend groß für einen so einfachen Prozessor. Sie können die folgenden Bedingungen überprüfen: A> R0, A> = R0, A <R0, A <= R0, A == R0 oder A! = R0. Darüber hinaus kann die bedingte Verzweigung davon abhängen, ob der Wert im Akkumulator Null ist oder nicht, ob ein bestimmtes Bit des im Akkumulator gespeicherten Werts gleich Null ist, ob das Überlaufflag gesetzt ist oder ob ein bestimmtes Bit des E / A-Registers gesetzt ist.
Batterie- und Steuerlogikgerät
Der Akkumulator ist ein spezielles 8-Bit-Register, in dem das gerade verarbeitete Byte gespeichert ist. Operationen mit der Batterie werden von einem Steuerlogikgerät (ULU) ausgeführt, das in den Anweisungen für den Prozessor als "Herz des Nanoprozessors" bezeichnet wird. ULU entspricht in den meisten Prozessoren einer arithmetischen Logikeinheit (ALU), führt jedoch keine arithmetischen oder logischen Operationen aus. Gleichzeitig ist ULU nicht so nutzlos, wie es auf den ersten Blick scheint. Es kann den Wert im Akkumulator erhöhen oder verringern, entweder in binärer oder in binär codierter Dezimalzahl (BCD). Der BCD speichert zwei Dezimalstellen in einem Byte. Dies ist ein sehr nützlicher Modus für E / A oder Anzeigen. Die ULU kann auch das Binärkomplement des Akkumulators finden oder zurücksetzen sowie ein bestimmtes Bit setzen und löschen. Schließlich,Es unterstützt Links- und Rechtsverschiebungsvorgänge.

Batteriebezogene Schaltkreise
Das obige Diagramm zeigt die Batterie- und ULD-Schaltkreise. Im ersten Abschnitt befinden sich verschiedene Netze, die einen Nullwert definieren, BCD unterstützen und eine Übertragsschlupf-schnelle Erzeugung eines Übertrags aus den niedrigstwertigen 4 Bits bereitstellen. Der zweite Abschnitt enthält die Hauptbatterie- und ULU-Schaltkreise. Der dritte Abschnitt verteilt Steuersignale von der obigen Decodierungslogik auf die acht Teile des Akkumulators. Der letzte Abschnitt enthält die Befehlsdecodierungslogik, die die Bitoperationen decodiert und das Signal an den gewünschten Teil des Akkumulators sendet.
Der Hauptteil des Akkumulators / der ULU besteht aus 8 Teilen, einer pro Bit, wobei sich das niedrigstwertige Bit oben befindet. Wir werden vier Schaltungen von jedem Teil betrachten: einen Übertragsgenerator für Inkrementierungs- / Dekrementierungsoperationen, einen Bitgenerator für Inkrementierungs- / Dekrementierungsoperationen, einen Multiplexer zum Auswählen eines neuen Akkumulatorwerts und einen Latch, in dem der Akkumulatorwert gespeichert ist.
Jeder Teil der Inkrementierungs- / Dekrementierungsvorrichtung (unten) wird unter Verwendung eines Halbaddierers implementiert. Die Richtung der Inkrementierungs- / Dekrementierungskette bestimmt den Opcode: 0 im niederwertigen Bit des Opcodes sagt Inkrement und 1 für Dekrement. Die Übertragskette links erzeugt ein Übertragssignal. Erstellen Sie für ein Inkrement einen Übertragsausgang, wenn ein Übertragseingang empfangen wird und das aktuelle Bit 1 ist (seitdem wird es auf Binär 10 erhöht). Zum Dekrementieren signalisiert die Übertragsleitung ein Ausleihen , so dass ein Übertragsausgang erzeugt wird, wenn ein Übertragseingang (dh Ausleihen) vorhanden ist und das aktuelle Bit 0 ist.

Ein Teil der Inkrementierungs- / Dekrementierungskette
Der Strompfad rechts aktualisiert das aktuelle Bit mit einem Inkrement oder Dekrement. Das aktuelle Bit wird umgeschaltet, wenn ein Übertragseingang vorhanden ist - im Wesentlichen eine XOR-Implementierung über drei NOR-Gatter. Eine der Schwierigkeiten ist die Anpassung an BCD. Für die BCD-Inkrementierungsoperation tritt der Übertrag auf, wenn die Ziffer 9 inkrementiert wird, und für die BCD-Dekrementierungsoperation verringert sich die Ziffer 0 auf 9 anstelle von binär 1111.
Der Multiplexer verwaltet die verschiedenen Batteriebetriebe. Je nach Betrieb wird ein Durchgangstransistor aktiviert und der gewünschte Wert ausgewählt. Beispielsweise wählt der obere Transistor für eine Inkrementierungs- / Dekrementierungsoperation den Ausgang aus der oben beschriebenen Inkrementierungs- / Dekrementierungsschaltung aus. Der Transistor aktiviert den zuvor beschriebenen Befehlsdecoder, der den entsprechenden Inkrement / Dekrement-Befehl gefunden hat. Ebenso aktiviert ein Rechtsverschiebungsbefehl den Rechtsverschiebungstransistor durch Anlegen von n + 1 Batteriebits an jeden der Akkumulatorteile, um den Wert zu verschieben.

Schaltung für einen Latch, der ein Bit der Batterie speichert, und einen Multiplexer, der den Eingang für die Batterie auswählt
Der Latch hält ein Bit für den Akkumulator. Wenn der Batteriehaltetransistor aktiviert ist, bilden die beiden NOR-Gatter eine Halteschleife. Wenn stattdessen der Batterielasttransistor aktiviert ist, lädt die Batterie den gewünschten Wert vom Multiplexer. Die Zeilen zum Löschen des n-Bits und zum Setzen des n-Bits ermöglichen es Befehlen, einzelne Bits des Akkumulators zu ändern. Der Multiplexer aktualisiert dann alle Bits des Akkumulators auf einmal.
Zähler- und Programmadressierung
Ein weiterer großer Kettenblock ist der 11-Bit-Programmzähler in der unteren linken Ecke des Nanoprozessors. Auch in diesem Block gibt es einen Latch, der die Rücksprungadresse von der Unterroutine speichert, und einen anderen Latch, der den Programmzähler nach einer Unterbrechung speichert. Stellen Sie sich diese als einen Stapel aus einem Element vor. Der Softwarezähler verfügt über ein Inkrementierungsgerät, das für den Übergang zum nächsten Befehl verantwortlich ist. Es weiß auch, wie man um zwei gleichzeitig inkrementiert, wodurch bedingte Verzweigungsbefehle zwei Befehle überspringen können (eine solche Inkrementierungsvorrichtung wird einfach durch Erhöhen des 1. Bits anstelle des 0. implementiert). Um den Betrieb des Inkrementiergeräts zu beschleunigen, verfügt es über eine Übertragsfunktion. Wenn alle sechs niedrigstwertigen Bits 1 sind, wird das 6. Bit sofort erhöht, ohne darauf zu warten, dass der Übertrag alle niedrigstwertigen Bits durchläuft.
Steuer- und Taktfrequenz
Der letzte Teil des Nanoprozessors ist der Steuerkreis. Im Vergleich zu anderen Mikroprozessoren scheint das Nanoprozessor-Steuerungsschema fast trivial zu sein: Der Prozessor wechselt vom Anforderungstakt zum Ausführungstakt und zurück (mit periodischen Interrupts). Die Steuerschaltung besteht nur aus ein paar Flip-Flops und Gates, daher gibt es nicht viel zu sagen.
Fazit
Das folgende Diagramm zeigt die Hauptfunktionsblöcke des Nanoprozessors. Der Nanoprozessor hat es geschafft, sie sehr eng zu montieren, viel besser als ich es von der veralteten Metallverschlusstechnologie erwarten würde. Reverse Engineering zeigt, dass diese Funktionsblöcke mit einfachen, aber sorgfältig entworfenen Schaltungen implementiert werden.
Der Nanoprozessor verwendete Metall-Gate-Transistoren, während andere Mikroprozessoren seit mehreren Jahren auf Silizium-Gate-Transistoren umstellen. Der Unterschied mag unverständlich erscheinen, hat jedoch erhebliche Auswirkungen auf die Position der Komponenten: Bei der Herstellung eines Transistors mit Siliziumgattern wird eine Schicht aus Polysilizium mit Leitern hinzugefügt. Infolgedessen wird die Platzierung der Komponenten viel einfacher, da Ihnen zwei Schichten mit Leitern zur Verfügung stehen, die die benachbarte Schicht passieren können. Wenn Sie nur eine Metallschicht haben, ist es viel schwieriger, die Komponenten zu positionieren, da die Leiter im Weg sind. In anderen Chips habe ich untersucht, dass Metall-Gate-Transistortechnologie verwendet wird.Das Layout der Komponenten war widerlich - ein Bündel verwickelter Drähte, die Signale zu jedem Transistor brachten, hielt die Dichte der Transistoren niedrig. Andererseits sind die Nanoprozessor-Funktionsblöcke sehr sorgfältig entworfen und alle Signale kommen gut miteinander aus. Es gibt zum Beispiel etwas zusätzlichen Platz für den Datenbus, aber insgesamt bin ich von der Dichte des Nanoprozessor-Layouts beeindruckt.

Nanoprozessor-Funktionskomponenten basierend auf meinem Reverse Engineering-
Nanoprozessor - der Prozessor ist ungewöhnlich. Auf den ersten Blick schien es mir sogar ein "gefälschter Prozessor" zu sein, da es an grundlegenden arithmetischen Operationen mangelte. Nachdem ich es genauer studiert hatte, war ich dennoch beeindruckt. Durch sein einfaches Design kann es schneller als andere Prozessoren der Zeit ausgeführt werden. Der Befehlssatz kann mehr als man denkt. Hewlett-Packard verwendete Nanoprozessor in vielen seiner Produkte in den 1970er und 1980er Jahren in komplexeren Rollen als erwartet, z. B. beim Parsen von Strings und beim Durchführen von Berechnungen. Nachdem seine Masken veröffentlicht wurden, können wir alle Geheimnisse der Ketten kennenlernen, dank derer Nanoprozessor gearbeitet hat.

Nanoprozessor (weißer Chip) als Teil des Hewlett-Packard-Präzisions-Timing-Moduls. Beachten Sie die handschriftliche Spannung; Jeder Chip benötigte eine eigene Vorspannung.