Intel 8086-Prozessorregister: Vom Chip zu den Transistoren

Der Intel 8086 ist einer der einflussreichsten Computerchips, die jemals hergestellt wurden. Er schuf die x86-Architektur, die moderne Desktop- und Servercomputer dominiert. Ich habe einen 8086 basierend auf Bildern von Kristallen rückentwickelt und in diesem Artikel werde ich die Implementierung einer Registerdatei (Registersatz) beschreiben.





Crystal 8086. Der Speicherort der Register ist markiert. Die oberen Register werden vom Busschnittstellenblock für den Speicherzugriff verwendet, und die unteren Allzweckregister werden vom Ausführungsblock verwendet. Der Befehlspuffer ist eine 6-Byte-Warteschlange mit vorab angeforderten Befehlen.



Das Foto zeigt ein Bild des 8086-Prozessors unter einem Mikroskop. Auf dem Chip ist eine Metallschicht sichtbar, unter der Silizium verborgen ist. An der Außenkante der Verbindungsdrähte befinden sich die Pads auf dem Chip mit den äußeren 40 Pins des Chips.



In der Box sind fünfzehn 16-Bit-8086-Register und sechs Bytes der Befehlsvoranforderungswarteschlange ( Code-Prefetch ) aufgeführt. Register nehmen einen bedeutenden Teil des Kristalls ein, obwohl sie insgesamt nur in 36 Bytes eingegeben werden. Aus Platzgründen hatten die frühen Mikroprozessoren relativ wenige Register. Im Vergleich dazu haben moderne Prozessorchips Kilobyte Register und Megabyte Caches.



Der 8086 war einer der frühesten Mikroprozessoren, die Code-Prefetch implementierten, aber das Motorola 68000 (1979) hatte etwas früher einen 4-Byte-Prefetch-Puffer. In Mainframes war Prefetch mit IBM Stretch (1961), CDC 6600 (1964) und IBM System / 360 Model 91 (1966) verfügbar.



Die Anzahl der Register in einem modernen Prozessor ist schwer zu berechnen. Die einzige genaue Zahl, die ich fand, war im Buch Anatomie eines Hochgeschwindigkeits-Mikroprozessors"(1997), in dem der AMD K6-Prozessor ausführlich beschrieben wird. Aufgrund der Umbenennung von Registern haben moderne Prozessoren viel mehr physikalische Register als architektonische (für den Programmierer sichtbare), und die Anzahl der physikalischen Register ist in der Dokumentation nicht angegeben. K6 hat außer acht x86-Registern Für allgemeine Zwecke mussten 16



mikroarchitektonische Arbeitsregister umbenannt werden. Prozessoren mit AVX-512-Unterstützung verfügen über 32 512-Bit-Register, dh 2 KB Register sind für diese Funktion reserviert. In solchen Fällen ist die Größe der Register noch schwieriger zu berechnen. Bei fortgeschrittenen Prozessoren erreicht das Volumen 77 MB .



Wie Register in Silizium implementiert werden



Ich werde zunächst beschreiben, wie der 8086 aus N-MOS-Transistoren aufgebaut ist. Dann werde ich erklären, wie ein Inverter hergestellt wird, wie einzelne Bits mit Invertern gespeichert werden und wie ein Register hergestellt wird.



Der 8086 basierte wie andere Chips der Ära auf N-MOS-Transistoren. Diese Chips bestanden aus einem Siliziumsubstrat, in das Arsen- oder Borverunreinigungen diffundiert wurden, um Transistoren zu bilden. Oberhalb des Siliziums bildeten Polysiliziumleiter die Gates der Transistoren und verbanden alle Komponenten miteinander. Die noch höher gelegene Metallschicht enthielt zusätzliche Leiter. Im Vergleich dazu verwenden moderne Prozessoren die CMOS- Technologie , die N-MOS- und P-MOS-Transistoren kombiniert und viele Metallschichten enthält.



Das folgende Diagramm zeigt einen Wechselrichterbestehend aus einem N-MOS-Transistor und einem Widerstand. Wenn die Eingangsspannung niedrig ist, ist der Transistor ausgeschaltet, sodass der Pull-up-Widerstand den Ausgang nach oben zieht. Wenn die Eingangsspannung hoch ist, schaltet sich der Transistor ein, verbindet Masse und Ausgang und zieht den Ausgang nach unten. Somit wird das eingehende Signal invertiert.



Tatsächlich ist der Pull-up-Widerstand in einem N-MOS-Ventil eine spezielle Art von Transistor. Ein verarmter Transistor verhält sich wie ein Widerstand und ist gleichzeitig kompakter und effizienter.





Das Diagramm zeigt, wie ein Wechselrichter aus einem Transistor und einem Widerstand besteht. Das Foto zeigt die Implementierung auf dem Chip. Die Metallschicht wurde entfernt, um das Silizium und das Polysilizium freizulegen.



Das Foto oben zeigt, wie der 8086-Wechselrichter physikalisch hergestellt wird. Die rosafarbenen Bereiche bestehen aus Silizium mit Verunreinigungen, die ihn leitfähig machen, und die kupferfarbenen Linien sind oben aus Polysilizium. Der Transistor erscheint dort, wo Polysilicium mit Silizium schneidet. Polysilicium bildet das Gate des Transistors, und Siliziumabschnitte auf beiden Seiten stellen eine Source und einen Drain bereit. Ein großes Rechteck aus Polysilicium bildet einen Pull-up-Widerstand zwischen + 5V und dem Ausgang. Die Schaltung des Chips ist also die gleiche wie die des Wechselrichters. Schaltungen wie diese können unter einem Mikroskop betrachtet und rückentwickelt werden.



Der Baustein des Registers sind zwei Inverter in der Rückkopplungsschleife, die ein Bit speichern (siehe unten). Wenn der obere Leiter 0 ist, gibt der rechte Wechselrichter 1 an den unteren Leiter aus. Der linke Wechselrichter gibt dann 0 an den oberen Leiter aus und beendet den Zyklus. Somit ist die Schaltung stabil und "erinnert" sich an 0. Und umgekehrt, wenn der obere Leiter 1 ist, wird er auf dem unteren Leiter auf 0 und auf dem oberen auf 1 zurückgeschaltet. Infolgedessen kann die Kette 0 oder 1 speichern und einen Ein-Bit-Speicher bilden.





Der 8086 verfügt über zwei gepaarte Inverter, die ein Bit in einem Register speichern. Die Schaltung befindet sich stabil im Zustand 0 oder 1.



Dem Wechselrichterpaar werden drei Transistoren hinzugefügt, um eine verwendbare Registerzelle zu erstellen. Ein Transistor wählt eine Zelle zum Lesen aus, der zweite wählt eine Zelle zum Schreiben aus und der dritte verstärkt das Signal beim Lesen. In der Mitte der unteren Schaltung speichern zwei Wechselrichter das Bit. Zum Lesen des Bits wird der Strom an den roten Bus angelegt. Dies verbindet den Ausgang des Wechselrichters über einen Verstärkungstransistor mit der Bitleitung. Um ein Bit zu schreiben, wird Strom an die rote Leitung angelegt, die die Bitleitung mit den Wechselrichtern verbindet. Durch Anlegen von Hochstromsignalen von 0 oder 1 an die Bitleitung (und entsprechend an das gespeicherte Bit) zwingen wir die Wechselrichter, auf den gewünschten Wert umzuschalten. Beachten Sie, dass die Bitleitung sowohl zum Lesen als auch zum Schreiben verwendet wird.



Andere Prozessoren verwenden leicht unterschiedliche Registerpositionen. Der 6502 verwendet einen zusätzlichen Transistor in der Inverter-Rückkopplungsschleife, um die Schaltung zu unterbrechen, wenn ein neuer Wert geschrieben wird. Der Z80 schreibt gleichzeitig auf beide Wechselrichter, was das Wechseln "erleichtert", zum Schreiben jedoch zwei Drähte erfordert. Der 8086 verfügt an jedem Registerort über einen Verstärkungstransistor zum Lesen, während andere Prozessoren den Ausgang beider Wechselrichter lesen und einen externen Differenzverstärker verwenden, um das Signal zu verstärken. Die Basiszelle des Registers 8086 besteht aus 7 Transistoren (7T), was mehr als eine typische statische RAM-Zelle mit 6 oder 4 Transistoren ist, aber nur eine Bitleitung verwendet, nicht zwei verschiedene. Der dynamische Speicher (DRAM) ist viel effizienter und verwendet einen einzelnen Transistor und Kondensator.Ohne Aktualisierung der Daten gehen diese jedoch verloren.





Schematische Darstellung einer Registerzelle, die ein Bit speichert. Die Registerdatei besteht aus einem Array solcher Zellen.



Die Registerdatei besteht aus einer Matrix von Registerzellen ähnlich der oben beschriebenen. Die Matrix ist 16 Zellen breit, da die Register 16-Bit-Werte speichern. Jedes Register befindet sich horizontal, sodass der Lese- oder Schreibbus alle Zellen eines bestimmten Registers auswählt. Die 16 vertikalen Bitleitungen bilden einen einzelnen Bus, sodass alle 16 Bits im ausgewählten Register parallel gelesen und geschrieben werden.



Das Foto unten zeigt eine vergrößerte allgemeine Registerdatei 8086, die eine Matrix von Registerzellen zeigt: 16 Spalten und 8 Zeilen, 8 16-Bit-Register. Dann wird das Inkrement eines Registerorts in der Datei angegeben. Ich werde erklären, wie diese Zelle implementiert ist.





8086 ( 16- ), . , .



Der 8086 besteht aus dotierten Silizium- und Polysiliziumleitern mit Metallleitern darüber. Das linke Foto unten zeigt die vertikalen Metallleiter der Registerzelle. Erdungs-, Strom- und Bitbuskabel sind markiert (das verbleibende Kabel kreuzt die Registerdatei, berührt sie jedoch nicht). Auf dem Foto rechts ist die Metallschicht aufgelöst, so dass Polysilicium und Silizium sichtbar sind. Die Lese- und Schreibbusse sind horizontale Polysiliciumleiter. Da der Chip nur eine Metallschicht aufweist, wird Metall in den Registern für vertikale Busse und Polysilizium für horizontale Busse verwendet, damit sie sich nicht schneiden. Metall und Silizium durch Fugen erscheinen als hellere Kreise auf dem Metallfoto und als Kreise auf dem Siliziumfoto.





Speicherort registrieren. Das Foto links zeigt die Metallschicht und rechts die entsprechenden Schichten aus Polysilicium und Silizium.



Das folgende Diagramm zeigt die Entsprechung des physikalischen Schemas der Registerzelle mit dem Hauptschema. Wechselrichter bestehen aus Transistor A und B und Registern. Die Transistoren C, D und E werden durch markierte Polysiliciumstücke gebildet. Die Bitlinie ist nicht sichtbar, da sie sich in der Metallschicht befindet. Beachten Sie, dass das Speicherzellenlayout stark optimiert ist, um die Größe zu minimieren. Beachten Sie auch, dass der Transistor A viel kleiner als die anderen ist. Der Wechselrichter A hat einen ziemlich niedrigen Ausgangsstrom, so dass die Bitleitung ihn beim Schreiben überwinden kann.





Registrieren Sie die Zelle von 8086 mit der entsprechenden Schaltung



Unterstützung für 8-Bit-Register



Wenn Sie sich den Kristall genau ansehen, können Sie sehen, dass einige der Registerzellen eine etwas andere Struktur haben. Links ist der Registerort, den wir bereits besprochen haben, und rechts ist ein Paar Registerorte mit zwei Schreibbussen anstelle von einem. Auf dem linken Foto kreuzt der Schreibbus das Silizium in beiden Registerzellen. Auf dem rechten Foto kreuzt der "rechte Schreib" -Bus das Silizium auf der rechten Seite, verläuft jedoch zwischen dem Silizium auf der linken Seite. Umgekehrt kreuzt die "linke Schreiblinie" das Silizium auf der linken Seite und verläuft zwischen den Siliziumbereichen auf der rechten Seite. Somit steuert ein Bus das Schreiben des rechten Bits, während der andere das Schreiben des linken Bits steuert. In einem 16-Bit-Register können die verschachtelten 8-Bit-Teile auf diese Weise separat geschrieben werden.



Die Registerzelle auf dem Kristall wird nicht gleichmäßig wiederholt - jede zweite Zelle ist ein Spiegelbild der vorherigen. Dies erhöht die Dichte der Registerzelle - die zwischen den beiden gespiegelten Zellen verlaufende Stromschiene kann beide mit Strom versorgen (das gleiche gilt für Masse). Gespiegelte Wiederholungen reduzieren die Anzahl der benötigten Strom- und Bodenschienen um die Hälfte.



Obwohl die Blockdiagramme normalerweise zeigen, wie 16-Bit-Register in linke und rechte Hälften unterteilt sind, sind in der realen Welt die Bits auf jeder Seite verschachtelt, anstatt immer den ersten 8-Bit-Teil links und den zweiten rechts zu belassen. Diese Implementierung vereinfacht die manchmal auftretende Aufgabe, zwei Hälften eines 16-Bit-Wortes auszutauschen. Ein solcher Fall ist das Lesen oder Schreiben eines Speichers ohne Ausrichtung. Eine andere ist eine ALU-Operation, die den oberen Teil des Registers verwendet - zum Beispiel AH. Das Vertauschen der Bits zwischen der rechten und der linken Hälfte würde das Ziehen langer Drähte zwischen allen Bits der Worthälften erfordern. In einer abwechselnden Anordnung ist es jedoch erforderlich, jedes Paar benachbarter Bits auszutauschen, um zwei Worthälften auszutauschen, was keine langen Drähte erfordert. Mit anderen Worten,Das verschachtelte Register des 8086 erleichtert das Auslegen der Leiter, um zwei Worthälften auszutauschen.





Zwei Paare von Speicherzellen mit unterschiedlichen Schaltungen. Die Zellen auf der linken Seite haben einen Schreibbus, und die rechten haben separate Schreibbusse für das linke und das rechte Bit.



Warum haben einige Register zwei Schreibbusse und andere einen? Der Grund dafür ist, dass der 8086 über 16-Bit-Register verfügt, auf vier davon jedoch wie unten gezeigt als 8-Bit-Register zugegriffen werden kann. Beispielsweise kann auf ein 16-Bit-Akkumulator A als 8-Bit-AH- (hoher Teil des Akkumulators) und 8-Bit-AL- (niedriger Teil) Register zugegriffen werden. Die Implementierung von Registern mit zwei Schreibsteuerungsbussen ermöglicht das separate Schreiben in jede Registerhälfte.



Wenn die Registerdatei nur 16-Bit-Register anstelle von 8-Bit-Registern unterstützt, funktioniert der Prozessor möglicherweise, jedoch weniger effizient. Das Schreiben in die 8-Bit-Hälften erfolgt durch Lesen aller 16 Bits, Ändern der 8-Bit-Hälfte und Schreiben aller 16 Bits. Anstatt auf ein Register zuzugreifen, würde der Anruf an drei gehen. In diesem Fall muss die Registerdatei das Lesen von 8 Bit nicht besonders unterstützen, da die unnötige Hälfte einfach ignoriert werden kann.





Allzweckregister im 8086. Die Register A, B, C und D können in zwei 8-Bit-Hälften unterteilt werden.



Multiport-Register



Bisher haben wir acht allgemeine „untere Register“ behandelt. Der 8086 verfügt außerdem über sieben "obere Register", die für den Speicherzugriff verwendet werden, einschließlich der berüchtigten Segmentregister . Diese Register haben ein komplexeres Multiport-Betriebsschema, mit dem mehrere Lese- und Schreibvorgänge gleichzeitig ausgeführt werden können. Mit einer Multiport-Registerdatei können Sie beispielsweise gleichzeitig einen Programmzähler und ein Segmentregister lesen und ein anderes Segmentregister schreiben.



Das folgende Blockdiagramm unterscheidet sich von den meisten Blockdiagrammen.für 8086, weil es die reale physische Implementierung des Prozessors zeigt und nicht das, was sich der Programmierer vorstellt. Insbesondere zeigt das Diagramm zwei "interne Kommunikationsregister" unter den Registern des Busschnittstellenmoduls (rechts) zusammen mit Segmentregistern, die mit den 7 Registern übereinstimmen, die auf dem Chip zu sehen sind. Die unten gezeigten temporären Register sind physisch Teil der ALU, daher werde ich sie in diesem Artikel nicht behandeln.







Das Buch " Designing Modern Processors " behandelt komplexe Registersysteme in einem Prozessor seit den 2000er Jahren. Es heißt, dass die Komplexität der Schaltkreise schnell über drei Ports hinausgeht und einige fortschrittliche Prozessoren Registerdateien mit 20 oder mehr Ports haben.



Die folgende Multiport-Registerzelle basiert auf derselben Zwei-Inverter-Schaltung, hat jedoch drei Bitleitungen (nicht eine wie im vorherigen Fall) und fünf Steuerleitungen (anstelle von zwei). Mit drei Lesebussen können Sie den Inhalt einer Registerzelle auf einer der drei Bitleitungen lesen, und mit zwei Schreibbussen können Bit A oder C in eine Registerzelle schreiben.





Multiport-Registerzelle im 8086-Prozessor



Auf den ersten Blick sieht die 8086-Registerdatei wie ein homogener Registersatz aus. Bei näherer Betrachtung zeigt sich jedoch, dass jedes Register in Abhängigkeit von seiner Funktion optimiert ist. Einige von ihnen sind einfache 16-Bit-Register und befinden sich am kompaktesten. Auf die anderen 16-Bit-Register kann als zwei 8-Bit-Register zugegriffen werden, für die ein weiterer Steuerbus erforderlich ist. Die komplexesten Register haben zwei bis drei Ports zum Lesen und einen oder zwei zum Schreiben. In jedem Fall ist die physikalische Implementierung der Registerzelle sorgfältig so ausgelegt, dass sie so wenig Platz wie möglich einnimmt, und daher ist die Form der Transistoren häufig komplex. Die Ingenieure von Intel drückten das Registerlayout so eng wie möglich zusammen, um alle in den ihnen zur Verfügung stehenden Platz zu passen.



Die oberen Register haben eine unterschiedliche Anzahl von Lese- und Schreibports: zwei Register mit 3 Lese- und 2 Schreibbussen, ein Register mit 2 Lese- und 2 Schreibbussen, vier Register mit 2 Lese- und 1 Schreibbussen. Die ersten drei Register sind wahrscheinlich der Programmzähler, ein indirektes temporäres Register und ein temporäres Operandenregister. Die letzten vier sind wahrscheinlich die Segmentregister SS, DS, SS und ES. Es gibt auch drei Befehlsvorabrufpufferregister mit jeweils einem Lese- und einem Schreibbus.



Der in den ursprünglichen IBM PCs verwendete 8088-Prozessor war praktisch identisch mit dem 8086, außer dass er einen externen 8-Bit-Bus anstelle eines 16-Bit-Busses hatte, sodass das System kostengünstiger war. Der Prefetch-Puffer des 8088 war 4 Bytes statt 6 - wahrscheinlich, weil 4 Bytes für den langsameren Speicherbus des 8088 ausreichten.



Im Gegensatz zum 8086 unterstützen die Prefetch-Register des 8088 das unabhängige Schreiben in 8-Bit-Hälften (ähnlich wie die A-, B-, C- und D-Register des 8088 sehen nur diese Zellen unterschiedlich aus). Dies liegt daran, dass der angeforderte 8088 aufgrund des schmalen Busses jeweils ein Byte und nicht jeweils ein Wort befiehlt. Daher müssen Prefetch-Register das Schreiben von Bytes unterstützen, während der 8086 das Prefetch von Wörtern unterstützt.





Obere Registerdatei bestehend aus zehn 16-Bit-Registern. Das Foto zeigt Silizium und Polysilizium. Vertikale rote Linien - Reste der entfernten Metallschicht. Klickbar.



Fazit



Obwohl der 8086-Prozessor 42 Jahre alt ist, hat er immer noch erhebliche Auswirkungen auf moderne Computer, da die x86-Architektur heute noch sehr häufig verwendet wird. Die Register 8086 existieren noch in modernen x86-Computern, obwohl sie heute bereits 64 Bit lang sind, und neben diesen Registern gibt es viele andere.



Der 8086-Kristall ist sehr interessant zu untersuchen, da seine Transistoren unter einem Mikroskop betrachtet werden können. Zu einer Zeit war es ein komplexer Prozessor, da er 29.000 Transistoren enthält, aber einfach genug, um alle Schaltungen zu verfolgen und zu verstehen, wie sie funktionieren.



Siehe auch:






All Articles