Jetzt, da wir wissen, wie Prozessoren auf hohem Niveau arbeiten, ist es an der Zeit, sich eingehender mit dem Entwurf ihrer internen Komponenten zu befassen. Dies ist der zweite Artikel in einer Reihe zur Prozessorentwicklung. Ich empfehle Ihnen, zuerst den ersten Teil zu studieren, damit Sie die unten beschriebenen Konzepte verstehen.
Teil 1: Grundlagen der Computerarchitektur (Befehlssatzarchitekturen, Caching, Pipelines, Hyperthreading)
Teil 2: CPU-Entwurfsprozess (elektrische Schaltungen, Transistoren, Logikelemente, Synchronisation)
Teil 3: Aufbau und physikalische Herstellung des Chips (VLSI- und Siliziumherstellung)
Teil 4: Aktuelle Trends und wichtige zukünftige Richtungen in der Computerarchitektur (Meer von Beschleunigern, dreidimensionale Integration, FPGA, Near Memory Computing)
Wie Sie vielleicht wissen, bestehen Prozessoren und die meisten anderen digitalen Geräte aus Transistoren. Der einfachste Weg, den Transistor als gesteuerten Schalter mit drei Kontakten wahrzunehmen. Wenn der Verschluss eingeschaltet ist, kann elektrischer Strom durch den Transistor fließen. Wenn der Verschluss ausgeschaltet ist, kann kein Strom fließen. Der Verschluss ist wie ein Lichtschalter in einem Raum, nur ist er viel kleiner, schneller und kann elektrisch gesteuert werden.
In modernen Prozessoren werden hauptsächlich zwei Arten von Transistoren verwendet: pMOS (PMOS) und nMOS (NMOS). Der nMOS-Transistor lässt Strom durch, wenn das Gate geladen ist oder eine hohe Spannung aufweist, und der pMOS-Transistor leitet Strom durch, wenn das Gate entladen ist oder eine niedrige Spannung aufweist. Durch komplementäre Kombination dieser Transistortypen können CMOS-Logikelemente erstellt werden. In diesem Artikel werden wir die Merkmale des Betriebs von Transistoren nicht im Detail analysieren, aber wir werden dies im dritten Teil der Serie ansprechen.
Ein Logikelement ist ein einfaches Gerät, das Eingangssignale empfängt, eine Operation ausführt und ein Ergebnis ausgibt. Beispielsweise schaltet das UND-Element (UND) sein Ausgangssignal genau dann ein, wenn alle Gate-Eingänge eingeschaltet sind. Der Wechselrichter oder das Element NOT (NOT) schaltet seinen Ausgang ein, wenn der Eingang deaktiviert ist. Sie können diese beiden Verschlüsse kombinieren und ein NAND-Element erhalten, das den Ausgang genau dann einschaltet, wenn keiner der Eingänge eingeschaltet ist. Es gibt andere Elemente mit ihrer logischen Funktionalität, z. B. OR (OR), OR-NOT (NOR), exklusives OR (XOR) und exklusives OR mit Inversion (XNOR).
Das Folgende zeigt, wie zwei einfache Elemente aus Transistoren zusammengesetzt werden: ein Wechselrichter und ein NAND. Im Wechselrichter ist der pMOS-Transistor (oben) mit Strom und der nMOS-Transistor (unten) mit Masse verbunden. Bei der Bezeichnung von pMOS-Transistoren ist ein kleiner Kreis mit dem Gate verbunden. Wir haben gesagt, dass pMOS-Geräte Strom ausschalten, wenn der Eingang ausgeschaltet ist, und nMOS-Geräte Strom leiten, wenn der Eingang eingeschaltet ist. Daher ist es leicht zu erkennen, dass das Ausgangssignal (Out) immer das Gegenteil des Eingangssignals (In) ist. Wenn wir uns das NAND-Element ansehen, sehen wir, dass es vier Transistoren benötigt und dass der Ausgang immer deaktiviert wird, wenn mindestens einer der Eingänge ausgeschaltet ist. Das Verbinden von Transistoren auf diese Weise zu einfachen Netzwerken ist der gleiche Prozess, der zum Entwerfen komplexerer Logikelemente und anderer Schaltungen innerhalb von Prozessoren verwendet wird.

Bausteine in Form logischer Elemente sind so einfach, dass es schwer zu verstehen ist, wie sie sich in einen funktionierenden Computer verwandeln. Der Entwurfsprozess besteht aus der Kombination mehrerer Elemente, um ein kleines Gerät zu erstellen, das eine einfache Funktion ausführen kann. Sie können dann viele dieser Geräte kombinieren, um etwas zu erstellen, das eine komplexere Funktion ausführt. Der Prozess der Kombination einzelner Komponenten zur Schaffung einer Arbeitsstruktur ist genau der Prozess, der heute zur Herstellung moderner Chips verwendet wird. Der einzige Unterschied besteht darin, dass ein moderner Chip aus
Milliarden von Transistoren besteht.
Nehmen wir als kleines Beispiel einen einfachen Addierer - einen 1-Bit-Volladdierer. Es empfängt drei Eingangssignale - A, B und Carry-In (Übertragungseingangssignal) und erzeugt zwei Ausgangssignale - Summe (Summe) und Carry-Out (Übertragungsausgangssignal). Die einfachste Schaltung verwendet fünf Logikelemente, die miteinander verbunden werden können, um einen Addierer beliebiger Größe zu erzeugen. In modernen Schemata wird dieser Prozess verbessert, indem ein Teil der Logik- und Übertragungssignale optimiert wird, aber die Grundprinzipien bleiben dieselben.
Der Ausgang von Sum ist entweder A oder B, aber niemals für beide, oder es gibt ein Eingangsübertragungssignal, und dann werden A und B entweder eingeschaltet oder beide ausgeschaltet. Die Übertragungsausgabe ist etwas komplizierter. Es ist aktiv, wenn entweder A und B gleichzeitig eingeschaltet sind oder ein Carry-In vorliegt und eines von A oder B eingeschaltet ist. Um mehrere 1-Bit-Addierer zu verbinden, um einen breiteren Addierer zu erstellen, müssen Sie nur den Carry-Out des vorherigen Bits mit dem Carry-In des aktuellen Bits verbinden. Je komplizierter die Schaltungen werden, desto verwirrender ist die Logik, aber dies ist der einfachste Weg, zwei Zahlen zu addieren. Moderne Prozessoren verwenden anspruchsvollere Addierer, aber ihre Schaltungen sind für eine solche Überprüfung zu kompliziert. Neben Addierern enthalten Prozessoren auch Geräte zum Teilen, Multiplizieren und Versionen all dieser Gleitkommaoperationen.

Eine solche Kombination von Elementsequenzen zur Ausführung einer Funktion an den Eingangssignalen wird als
kombinatorische Logik bezeichnet . Dies ist jedoch nicht die einzige Art von Logik, die in Computern verwendet wird. Es wird nicht viel nützen, wenn wir keine Daten speichern oder den Status verfolgen können. Um Daten speichern zu können, benötigen wir sequentielle Logik.
Sequentielle Logik wird aufgebaut, indem Wechselrichter und andere Logikelemente sauber miteinander verbunden werden, so dass ihre Ausgänge Rückkopplungssignale an den Eingang der Elemente senden. Solche Rückkopplungsschleifen werden zum Speichern eines Datenbits verwendet und als
statisches RAM oder SRAM bezeichnet. Dieser Speicher wird im Gegensatz zum dynamischen RAM (DRAM) als statischer RAM bezeichnet, da die gespeicherten Daten immer direkt mit positiver Spannung oder Masse verbunden sind.
Die Standardmethode zum Implementieren eines SRAM-Bits ist die unten gezeigte 6-Transistor-Schaltung. Das oberste als WL (
Word Line ) gekennzeichnete Signal ist die Adresse, und wenn es eingeschaltet wird, werden die in dieser 1-Bit-Zelle gespeicherten Daten auf die als BL gekennzeichnete Bitleitung übertragen. Der BLB-Ausgang heißt
Bit Line Bar . Dies ist nur der invertierte Wert der Bitleitung. Sie müssen die beiden Transistortypen erkennen und verstehen, dass M3 mit M1 wie M4 mit M2 einen Wechselrichter bilden.
SRAM wird verwendet, um ultraschnelle Caches und Register in Prozessoren zu erstellen. Dieser Speicher ist sehr stabil, benötigt jedoch sechs bis acht Transistoren, um jedes Datenbit zu speichern. Daher ist es im Vergleich zu DRAM in Bezug auf Kosten, Komplexität und Fläche auf dem Chip extrem teuer. Der dynamische RAM hingegen speichert Daten in einem winzigen Kondensator, anstatt Logikgatter zu verwenden. Es wird als dynamisch bezeichnet, da die Spannung am Kondensator erheblich variieren kann, da er nicht an Strom oder Masse angeschlossen ist. Es wird nur ein Transistor verwendet, um auf die im Kondensator gespeicherten Daten zuzugreifen.
Da DRAM nur einen Transistor pro Bit benötigt und hoch skalierbar ist, kann es dicht und kostengünstig gepackt werden. Der Nachteil von DRAM ist, dass die Ladung des Kondensators so gering ist, dass sie ständig aktualisiert werden muss. Aus diesem Grund werden nach dem Ausschalten des Computers alle Kondensatoren entladen und Daten im RAM gehen verloren.
Unternehmen wie Intel, AMD und Nvidia veröffentlichen keine Schaltpläne ihrer Prozessoren, so dass es für moderne Prozessoren unmöglich ist, eine solche vollständige Schaltung zu zeigen. Mit diesem einfachen Addierer können Sie jedoch auf die Idee kommen, dass selbst die komplexesten Teile des Prozessors in logische und Speicherelemente und dann in Transistoren unterteilt werden können.
Nachdem wir nun wissen, wie einige Prozessorkomponenten hergestellt werden, müssen wir herausfinden, wie alles zusammengesetzt und synchronisiert werden kann. Alle Schlüsselkomponenten des Prozessors sind mit einem
Taktsignal verbunden . Es hat abwechselnd Hoch- und Niederspannung und ändert diese mit einem bestimmten Intervall, das als
Frequenz bezeichnet wird . Die Logik im Prozessor schaltet normalerweise die Werte um und führt die Berechnungen durch, wenn das Taktsignal die Spannung von niedrig nach hoch ändert. Durch die Synchronisierung aller Teile können wir sicherstellen, dass die Daten immer zum richtigen Zeitpunkt eintreffen, damit der Prozessor keine Störungen aufweist.
Möglicherweise haben Sie gehört, dass Sie die Taktrate erhöhen können, um die Prozessorleistung zu erhöhen. Diese Leistungssteigerung ist auf die Tatsache zurückzuführen, dass das Umschalten von Transistoren und Logik innerhalb des Prozessors häufiger als beabsichtigt auftritt. Da es mehr Zyklen pro Sekunde gibt, kann mehr Arbeit geleistet werden und der Prozessor hat eine verbesserte Leistung. Dies gilt jedoch bis zu einem gewissen Grad. Moderne Prozessoren arbeiten normalerweise mit Frequenzen von 3,0 GHz bis 4,5 GHz, und dieser Wert hat sich in den letzten zehn Jahren nicht wesentlich geändert. So wie eine Metallkette nicht stärker als ihr schwächstes Glied ist, kann ein Prozessor nicht schneller als sein langsamster Teil laufen. Am Ende jedes Taktzyklus sollte jedes Prozessorelement seine Arbeit abschließen. Wenn einige Teile es noch nicht fertiggestellt haben, ist das Taktsignal zu schnell und der Prozessor funktioniert nicht. Designer nennen diesen langsamsten Teil den
kritischen Pfad, und er bestimmt die maximale Frequenz, mit der der Prozessor arbeiten kann. Ab einer bestimmten Frequenz haben Transistoren einfach keine Zeit, schnell genug zu schalten und zu versagen oder falsche Ausgangswerte zu erzeugen.
Durch Erhöhen der Prozessorspannung können wir das Schalten von Transistoren beschleunigen, dies funktioniert jedoch auch bis zu einer bestimmten Grenze. Wenn zu viel Spannung angelegt wird, besteht die Gefahr, dass der Prozessor verbrannt wird. Wenn wir die Frequenz oder Spannung des Prozessors erhöhen, strahlt er immer mehr Wärme aus und verbraucht mehr Strom. Dies liegt daran, dass die Prozessorleistung direkt proportional zur Frequenz und proportional zum Quadrat der Spannung ist. Um den Stromverbrauch des Prozessors zu bestimmen, betrachten wir jeden Transistor als einen kleinen Kondensator, der geladen oder entladen werden muss, wenn sich sein Wert ändert.
Die Stromversorgung ist ein so wichtiger Bestandteil des Prozessors, dass in einigen Fällen bis zur Hälfte der physischen Kontakte auf dem Chip nur zur Stromversorgung oder Erdung verwendet werden können. Einige Chips bei Volllast können mehr als 150 Ampere verbrauchen, und bei all diesem Strom müssen Sie äußerst sorgfältig gesteuert werden. Zum Vergleich: Der Zentralprozessor erzeugt mehr Wärme pro Flächeneinheit als ein Kernreaktor.
Das Taktsignal in modernen Prozessoren beansprucht etwa 30-40% seiner Gesamtleistung, da es sehr komplex ist und viele verschiedene Geräte verwalten muss. Um Energie zu sparen, deaktivieren die meisten Prozessoren mit geringem Stromverbrauch Teile des Chips, wenn sie nicht verwendet werden. Dies kann durch Ausschalten der Uhr (diese Methode wird als Clock Gating bezeichnet) oder Ausschalten der Stromversorgung (Power Gating) erfolgen.
Taktsignale verursachen eine weitere Schwierigkeit beim Design des Prozessors: Da ihre Frequenzen ständig zunehmen, beginnen die Gesetze der Physik, die Arbeit zu beeinflussen. Trotz der extrem hohen Lichtgeschwindigkeit ist es für Hochleistungsprozessoren nicht groß genug. Wenn Sie ein Taktsignal an ein Ende des Chips anschließen, ist das Signal bis zum Erreichen des anderen Endes um einen erheblichen Betrag nicht mehr synchron. Um alle Teile des Chips zu synchronisieren, wird das Taktsignal über den sogenannten H-Tree verteilt. Dies ist eine Struktur, die sicherstellt, dass alle Endpunkte genau den gleichen Abstand vom Zentrum haben.

Es scheint, dass das Design jedes einzelnen Transistors, Taktsignals und Leistungskontakts im Chip eine äußerst monotone und schwierige Aufgabe ist, und dies ist in der Tat so. Obwohl Tausende von Ingenieuren für Unternehmen wie Intel, Qualcomm und AMD arbeiten, können sie nicht jeden Aspekt des Chips manuell entwerfen. Um Chips dieser Größenordnung zu entwerfen, verwenden sie viele hochentwickelte Werkzeuge, die automatisch Entwürfe und elektrische Schaltkreise erzeugen. Solche Tools erhalten normalerweise eine allgemeine Beschreibung der Funktionsweise der Komponente und ermitteln die beste Hardwarekonfiguration, die diese Anforderungen erfüllt. Vor kurzem ist eine Entwicklungsrichtung namens
High Level Synthesis entstanden, die es Entwicklern ermöglicht, die erforderlichen Funktionen im Code anzugeben, wonach Computer bestimmen, wie sie in den Geräten am besten erreicht werden können.
Auf die gleiche Weise, wie Sie Computerprogramme durch Code beschreiben können, können Designer Hardwaregeräte mit Code beschreiben. Mit Sprachen wie Verilog und VHDL können Geräteentwickler die Funktionalität aller von ihnen erstellten Schaltkreise ausdrücken. Nach der Durchführung von Simulationen und der Überprüfung solcher Projekte können sie zu spezifischen Transistoren synthetisiert werden, aus denen der Stromkreis bestehen wird. Obwohl die Überprüfungsphase möglicherweise nicht so aufregend erscheint wie das Entwerfen eines neuen Caches oder Kernels, ist sie viel wichtiger als diese. Für jeden von einem Unternehmen beauftragten Konstrukteur können fünf oder mehr Verifizierungsingenieure vorhanden sein.
Die Überprüfung eines neuen Projekts erfordert häufig mehr Zeit und Geld als die Erstellung des Chips selbst. Unternehmen investieren so viel Zeit und Geld in die Überprüfung, weil der Chip nach dem Versand in die Produktion nicht repariert werden kann. Im Falle eines Fehlers in der Software können Sie den Patch freigeben, aber das Gerät funktioniert anders. Beispielsweise entdeckte Intel einen
Fehler im Gleitkommadivisionsmodul einiger Pentium-Chips, der zu Verlusten in Höhe von derzeit 2 Milliarden US-Dollar führte.
Es ist schwer zu verstehen, dass ein Chip mehrere Milliarden Transistoren enthalten kann, und zu verstehen, was sie alle tun. Wenn Sie den Chip in seine einzelnen internen Komponenten zerlegen, wird dies etwas einfacher. Logikelemente bestehen aus Transistoren, Logikelemente werden zu Funktionsmodulen kombiniert, die eine bestimmte Aufgabe ausführen, und diese Funktionsmodule werden miteinander verbunden, um die Computerarchitektur zu bilden, die wir im ersten Teil der Serie besprochen haben.
Der Großteil der Entwurfsarbeiten ist automatisiert, aber anhand der obigen Ausführungen können wir erkennen, wie komplex die neue CPU ist, die wir gerade gekauft haben.
Im zweiten Teil der Serie habe ich über den CPU-Designprozess gesprochen. Wir diskutierten Transistoren, Logikgatter, Leistungs- und Taktsignale, Entwurfssynthese und Verifikation. Im dritten Teil werden wir herausfinden, was für die physikalische Herstellung des Chips erforderlich ist. Alle Unternehmen geben gerne an, wie modern ihr Herstellungsprozess ist (Intel - 10 nm, Apple und AMD - 7 nm usw.), aber was bedeuten diese Zahlen wirklich? Wir werden im nächsten Teil darüber sprechen.
Empfohlene Lektüre