2010-09-14 8 views
38

Ich habe in den letzten 3 - 5 Jahren in C und CPython gearbeitet. Betrachten Sie das hier als meine Basis des Wissens.Wie ändert sich eine Montageanweisung in Spannungsänderungen an der CPU?

Wenn ich eine Assembler-Anweisung wie MOV AL, 61h an einen Prozessor verwenden würde, der sie unterstützt, was genau ist in dem Prozessor, der diesen Code interpretiert und als Spannungssignale ausgibt? Wie könnte eine solche einfache Anweisung ausgeführt werden?

Assembly fühlt sich sogar wie eine Hochsprache an, wenn ich an die Vielzahl von Schritten denke, die in MOV AL, 61h oder sogar XOR EAX, EBX enthalten sind.

EDIT: Ich lese ein paar Kommentare fragen, warum ich dies als eingebettet, wenn die x86-Familie ist nicht üblich in eingebetteten Systemen. Willkommen zu meiner eigenen Ignoranz. Jetzt denke ich, dass, wenn ich das ignoriere, wahrscheinlich andere es auch nicht wissen.

Es war schwierig für mich, eine Lieblingsantwort zu wählen, wenn man bedenkt, wie viel Mühe Sie alle in Ihre Antworten gesteckt haben, aber ich fühlte mich gezwungen, eine Entscheidung zu treffen. Keine verletzten Gefühle, Jungs.

Ich finde oft, dass je mehr ich über Computer lerne, desto weniger merke ich, dass ich es tatsächlich weiß. Danke, dass Sie meine Gedanken zur Mikrocode- und Transistorlogik geöffnet haben!

EDIT # 2: Dank dieses Threads habe ich gerade verstanden, warum XOR EAX, EAX schneller als MOV EAX, 0h ist. :)

+2

Btw, das ist eine fantastische Frage. Überraschenderweise sind sich nur wenige Entwickler bewusst, wie ein Transistor in ihre Welt eindringt oder nachforschen lässt. Du bist auf dem Weg, sich deiner eigenen Unwissenheit bewusst zu werden, was dich in eine sehr gute Gesellschaft versetzt. –

+0

Was mit deinem Kopf wirklich durcheinander kommt, ist * wie * die Schaltungsherstellung nicht weit entfernt von den 100 Jahre alten Fotografietechniken ist. –

+0

Betreff: letzter Absatz: Wenn Sie wirklich wissen wollen, wie xor-Zeroing auf verschiedenen modernen Intel- und AMD-Mikroarchitekturen (neben der reinen Codegröße) funktioniert, lesen Sie [diese Antwort] (http://stackoverflow.com/a/33668295/224132). –

Antwort

26

Ich habe vor kurzem begonnen, Charles Petzolds Buch mit dem Titel Code zu lesen, das bisher genau die Dinge behandelt, von denen ich annehme, dass Sie neugierig sind. Aber ich habe nicht den ganzen Weg durchgemacht, also blättern Sie zuerst durch das Buch, bevor Sie kaufen/leihen.

Dies ist meine relativ kurze Antwort, nicht Petzolds ... und hoffentlich im Einklang mit dem, worüber Sie neugierig waren.

Sie haben von dem Transistor gehört, den ich vermute. Die ursprüngliche Art, einen Transistor zu verwenden, war für Dinge wie ein Transistorradio. es ist im Grunde genommen ein Verstärker, der das winzige Funksignal in der Luft schwebt und es in den Eingang des Transistors einspeist, der den Stromfluss auf einer Schaltung neben ihm öffnet oder schließt. Und Sie verdrahten diese Schaltung mit höherer Leistung, so können Sie ein sehr kleines Signal nehmen, es verstärken und es zum Beispiel einem Lautsprecher zuführen und der Radiostation zuhören (es gibt mehr dazu, die Frequenz zu isolieren und den Transistor im Gleichgewicht zu halten, aber Sie bekommen die Idee, ich hoffe).

Jetzt, wo der Transistor existiert, war eine Möglichkeit, einen Transistor als Schalter zu verwenden, wie ein Lichtschalter. Das Radio ist wie ein Dimmer-Lichtschalter, den Sie von überall bis weit in die gewünschte Position drehen können. Ein nicht gedimmter Lichtschalter ist entweder alle an oder alle aus, es gibt einen magischen Ort in der Mitte des Schalters, wo er umschaltet. Wir verwenden Transistoren auf die gleiche Weise in der digitalen Elektronik. Nehmen Sie den Ausgang eines Transistors und führen Sie ihn in einen anderen Transistoreingang. Der Ausgang des ersten ist sicherlich kein kleines Signal wie die Radiowelle, er zwingt den zweiten Transistor ganz auf oder ganz weg. das führt zum Konzept der TTL- oder Transistor-Transistor-Logik. Im Grunde genommen hast du einen Transistor, der eine hohe Spannung treibt oder wir nennen ihn eine 1, und darauf sinkt eine Nullspannung, wir nennen das eine 0. Und du ordnest die Eingänge mit einer anderen Elektronik an, damit du AND-Gatter erzeugen kannst (wenn beide Eingänge sind eine 1, dann ist der Ausgang eine 1) ODER-Gatter (wenn entweder der eine oder der andere Eingang eine 1 ist, dann ist der Ausgang eine Eins). Inverter, NAND, Gatter, NOR-Gatter (ein oder mit einem Inverter) usw. Früher gab es ein TTL-Handbuch und man konnte 8 oder so Pin-Chips kaufen, die ein oder zwei oder vier einer Art Gate hatten (NAND, NOR, UND, usw.) Funktionen innerhalb, zwei Eingänge und ein Ausgang für jeden. Jetzt brauchen wir nicht, dass es billiger ist, programmierbare Logik oder dedizierte Chips mit vielen Millionen von Transistoren zu erstellen. Aber wir denken immer noch in AND, OR und NOT Gates für Hardware-Design. (in der Regel mehr wie Nand und Nor).

Ich weiß nicht, was sie jetzt lehren, aber das Konzept ist das gleiche, für Speicher kann ein Flip-Flop als zwei dieser TTL-Paare (NANDS) zusammen mit dem Ausgang von einem zum Eingang des anderen gehen . Lass es dabei sein. Das ist im Grunde ein einzelnes Bit in dem, was wir SRAM oder statischen RAM nennen. sram benötigt grundsätzlich 4 Transistoren. Dram oder Dynamic Ram die Speicher-Sticks, die Sie in Ihren Computer stecken, nehmen Sie einen Transistor pro Bit, so für den Anfang können Sie sehen, warum dram ist das, was Sie Gigabytes wert kaufen. Sram-Bits erinnern sich an das, worauf Sie sie setzen, solange die Energie nicht ausgeht. Dram beginnt zu vergessen, was du ihm gesagt hast, sobald du es erzählst, im Grunde benutzt dram den Transistor in einer dritten anderen Art und Weise, es gibt etwas Kapazität (wie im Kondensator, werde hier nicht eingehen), die wie eine kleine wiederaufladbare Batterie ist. Sobald Sie es aufladen und das Ladegerät abziehen, beginnt es zu entwässern. Denken Sie an eine Reihe von Gläsern auf einem Regal mit kleinen Löchern in jedem Glas, das sind Ihre dram Bits, Sie wollen, dass einige von ihnen eins sind, also haben Sie einen Assistenten, der die Gläser füllt, die Sie sein wollen. Dieser Assistent muss den Krug ständig füllen und die Reihe hinuntergehen und die "eine" Bit-Brille voll genug mit Wasser halten und die "Null" Bit-Brille leer lassen. Damit Sie zu jeder Zeit sehen können, was Ihre Daten sind, können Sie die Einsen und Nullen durch Suchen nach Wasserständen, die definitiv über der Mitte liegen und eine Ebene unter der Mitte sind, als Null betrachten Wenn der Assistent bei eingeschaltetem Gerät nicht in der Lage ist, die Gläser voll genug zu halten, um eine Eins von Null zu unterscheiden, werden sie schließlich alle wie Nullen aussehen und auslaufen. Es ist der Kompromiss für mehr Bits pro Chip. Eine kurze Geschichte hier ist, dass wir außerhalb des Prozessors Dram für unseren Massenspeicher verwenden, und es gibt eine Hilfslogik, die dafür sorgt, dass die Einsen eins bleiben und Null ist. Aber im Inneren des Chips halten das AX-Register und DS-Register zum Beispiel Ihre Daten mit Flip-Flops oder Sram. Und für jedes Bit, das Sie kennen, wie die Bits im AX-Register, gibt es wahrscheinlich Hunderte oder Tausende oder mehr, die verwendet werden, um die Bits in das AX-Register hinein und aus diesem heraus zu bekommen.

Sie wissen, dass Prozessoren mit einer gewissen Taktrate laufen, in diesen Tagen etwa 2 Gigahertz oder zwei Milliarden Uhren pro Sekunde. Denken Sie an die Uhr, die von einem Kristall erzeugt wird, ein anderes Thema, aber die Logik sieht diese Uhr als eine Spannung, die hoch und Null hoch und Null bei dieser Taktrate 2ghz oder was auch immer geht (Gameboy Fortschritte sind 17 MHz, alte iPods um 75 MHz, Original IBM PC 4,77 MHz).

Die Transistoren, die als Schalter verwendet werden, ermöglichen es uns, Spannung zu nehmen und sie in die Einsen und Nullen zu verwandeln, die wir sowohl als Hardware-Ingenieure als auch als Softwareingenieure kennen und die uns UND-, ODER- und NICHT-Logikfunktionen geben . Und wir haben diese magischen Kristalle, die uns eine genaue Oszillation der Spannung ermöglichen.

So können wir jetzt Dinge wie sagen, wenn die Uhr eine Eins ist, und meine Statusvariable sagt, ich bin in der Fetch-Anweisung Staat, dann muss ich einige Tore umschalten, so dass die Adresse der Anweisung ich will was im Programmzähler ist, geht auf den Speicherbus hinaus, so dass die Speicherlogik mir meinen Befehl für MOV AL, 61h geben kann. Sie können dies in einem x86-Handbuch nachschlagen und feststellen, dass einige dieser Opcode-Bits sagen, dass dies eine mov-Operation ist und das Ziel die unteren 8 Bits des EAX-Registers ist und die Quelle des mov ein unmittelbarer Wert ist, was es bedeutet ist in der Speicherstelle nach dieser Anweisung. Also müssen wir diesen Befehl/Opcode irgendwo speichern und den nächsten Speicherplatz im nächsten Taktzyklus holen. Also haben wir jetzt die Bewegung gespeichert, sofort und wir haben den Wert 61h aus dem Speicher gelesen und können eine Transistorlogik schalten, so daß das Bit 0 dieses 61h im Bit 0 Flipflop von al und Bit 1 bis Bit 1 gespeichert wird .

Wie passiert alles, was Sie fragen? Denken Sie an eine Python-Funktion, die eine mathematische Formel ausführt. Sie beginnen am Anfang des Programms mit einigen Eingaben in die Formel, die als Variablen eingehen, Sie haben einzelne Schritte durch das Programm, die hier eine Konstante hinzufügen können, oder rufen Sie die Quadratwurzelfunktion aus einer Bibliothek usw. auf. Und ganz unten Sie gib die Antwort zurück. Hardware-Logik wird auf die gleiche Weise gemacht, und heute werden Programmiersprachen verwendet, von denen eine viel wie C aussieht. Der Hauptunterschied besteht darin, dass Ihre Hardware-Funktionen Hunderte oder Tausende von Eingängen haben und der Ausgang ein einzelnes Bit ist. Bei jedem Taktzyklus wird das Bit 0 des AL-Registers mit einem großen Algorithmus berechnet, abhängig davon, wie weit Sie ausschauen möchten. Denken Sie an die Quadratwurzelfunktion, die Sie für Ihre mathematische Operation aufgerufen haben. Diese Funktion selbst ist eine dieser Eingaben, die eine Ausgabe erzeugen, und sie kann andere Funktionen aufrufen, vielleicht eine Multiplikation oder Division. Sie haben also wahrscheinlich irgendwo ein Stück, das Sie sich als letzten Schritt vor dem Bit 0 des AL-Registers vorstellen können, und seine Funktion ist: wenn Takt eins ist, dann AL [0] = AL_next [0]; sonst AL [0] = AL [0]; Aber es gibt eine höhere Funktion, die das nächste al-Bit enthält, das von anderen Eingaben berechnet wird, und eine höhere Funktion und eine höhere Funktion, und viele davon werden vom Compiler auf dieselbe Weise erzeugt wie Ihre drei Zeilen von python in hunderte oder tausende von Assemblerlinien. Ein paar Zeilen HDL können Hunderte oder Tausende oder mehr Transistoren werden. Hardware-Leute schauen normalerweise nicht auf die niedrigste Formel für ein bestimmtes Bit, um alle möglichen Eingaben und alle möglichen ANDs und ORs und NOTs zu finden, die es braucht, um mehr zu berechnen, als Sie wahrscheinlich den Assembler überprüfen, der von Ihren Programmen erzeugt wird. aber du könntest, wenn du willst.

Ein Hinweis auf Microcoding, verwenden die meisten Prozessoren keine Mikrocodierung. Sie kommen mit dem x86 zum Beispiel, weil es eine gute Anleitung für seinen Tag war, aber auf der Oberfläche kämpft, um mit der modernen Zeit Schritt zu halten. andere Befehlssätze benötigen keine Mikrocodierung und verwenden die Logik direkt wie oben beschrieben. Sie können sich das Mikrocodieren als einen anderen Prozessor vorstellen, der eine andere Befehlssatz-/Assemblersprache verwendet, die den Befehlssatz emuliert, den Sie auf der Oberfläche sehen. Nicht so kompliziert wie beim Versuch, Windows auf einem Mac oder Linux unter Windows zu emulieren. Die Mikrocodierschicht ist speziell für diesen Job entwickelt worden. Sie können sich vorstellen, dass dort nur die vier Register AX, BX, CX, DX vorhanden sind sind viel mehr drin. Und natürlich kann dieses eine Assemblerprogramm irgendwie auf mehreren Ausführungspfaden in einem Kern oder mehreren Kernen ausgeführt werden.Genau wie der Prozessor in Ihrem Wecker oder Ihrer Waschmaschine ist das Mikrocode-Programm einfach und klein und debuggt und brannte in die Hardware ein, die hoffentlich nie ein Firmware-Update benötigt. Zumindest ideal. aber wie dein ipod oder dein telefon zum beispiel willst du manchmal einen bug fix oder was auch immer und es gibt eine möglichkeit deinen prozessor zu aktualisieren (das bios oder andere software lädt beim booten einen patch). Sagen wir, Sie öffnen das Batteriefach zu Ihrer TV-Fernbedienung oder Ihrem Taschenrechner, vielleicht sehen Sie ein Loch, wo Sie einige Bare-Metal-Kontakte in einer Reihe sehen können, vielleicht drei oder fünf oder viele. Für einige Fernbedienungen und Taschenrechner, wenn Sie es wirklich programmieren wollten, aktualisieren Sie die Firmware. Normalerweise nicht, im Idealfall ist diese Fernbedienung perfekt oder perfekt genug, um das Fernsehgerät zu überleben. Microcoding bietet die Möglichkeit, das sehr komplizierte Produkt (Millionen, Hunderte von Millionen von Transistoren) auf den Markt zu bringen und die großen und reparierbaren Fehler im Feld auf der Straße zu beheben. Stellen Sie sich ein 200-Millionen-Zeilen-Python-Programm vor, das Ihr Team in etwa 18 Monaten geschrieben hat und das es liefern muss oder das Unternehmen wird das Wettbewerbsprodukt nicht schaffen. Gleiches gilt nur für einen kleinen Teil des Codes, den Sie im Feld aktualisieren können. Der Rest muss in Stein gemeißelt bleiben. für den Wecker oder Toaster, wenn es einen Fehler gibt oder das Ding Hilfe braucht, werfen Sie es einfach aus und holen Sie sich einen anderen.

Wenn Sie durch Wikipedia oder nur Google stöbern, können Sie sich die Befehlssätze und die Maschinensprache für Dinge wie 6502, z80, 8080 und andere Prozessoren ansehen. Es kann 8 Register und 250 Instruktionen geben und Sie können ein Gefühl von der Anzahl von Transistoren bekommen, dass diese 250 Assembly-Instruktionen immer noch eine Sprache mit sehr hohem Level sind, verglichen mit der Sequenz von logischen Gattern, die jedes Bit in einem Flip-Flop pro Takt berechnet Zyklus. Sie haben diese Annahme richtig. Mit Ausnahme der mikrocodierten Prozessoren ist diese Low-Level-Logik in keiner Weise neu programmierbar. Sie müssen die Hardware-Fehler mit Software beheben (für Hardware, die geliefert wird und nicht verschrottet wird).

Schauen Sie sich dieses Petzold-Buch an, er leistet ausgezeichnete Arbeit, Dinge zu erklären, die allem, was ich jemals schreiben könnte, weit überlegen sind.

+1

Schöne Antwort. Obwohl ich es nicht "relativ kurz" nennen würde ;-). – sleske

+3

@sleske Es ist relativ kurz; relativ zu der Länge, die eine Diskussion dieses Themas nehmen könnte, wie meine Antwort, die auf drei Lehrbücher und ein Laborhandbuch verweist. Im Vergleich dazu ist diese Antwort kurz. –

16

Edit: Hier ist ein Beispiel für CPU (6502), die Python/javascript auf Transistorebene wurde simuliert http://visual6502.org Sie Ihren Code in setzen können, um zu sehen, wie es zu tun, was es tut.

Edit: Excellent 10 000m View: Soul of a New Machine - Tracy Kidder

Ich hatte große Mühe, diese Vorstellungsvermögen, bis ich tat Mikrokodierung. Dann ergab alles (abstrakt) Sinn. Dies ist ein komplexes Thema, aber auf sehr hohem Niveau.

Denken Sie im Wesentlichen so.

Eine CPU-Anweisung ist im Wesentlichen ein Satz von Ladungen, die in elektrischen Schaltkreisen gespeichert sind, die den Speicher ausmachen. Es gibt eine Schaltung, die bewirkt, dass diese Ladungen aus dem Speicher in das Innere der CPU übertragen werden. Sobald sie in der CPU sind, werden die Ladungen als Eingabe für die Verdrahtung der CPU-Schaltung eingestellt. Dies ist im Wesentlichen eine mathematische Funktion, die bewirkt, dass mehr elektrische Leistung auftritt, und der Zyklus wird fortgesetzt.

Moderne CPUs sind weit weit komplexer und enthalten viele Schichten von Mikrocodierung, aber das Prinzip bleibt gleich. Speicher ist eine Reihe von Gebühren. Es gibt eine Schaltung, um die Ladungen und andere Schaltungen zur Ausführung der Funktion zu bewegen, was dazu führt, dass andere Ladungen (Ausgaben) in den Speicher oder eine andere Schaltung eingespeist werden, um andere Funktionen auszuführen.

Um zu verstehen, wie der Speicher funktioniert, müssen Sie Logikgatter verstehen und wie sie von mehreren Transistoren erzeugt werden. Dies führt zu der Erkenntnis, dass Hardware und Software insofern äquivalent sind, als dass sie im Wesentlichen Funktionen im mathematischen Sinne ausführen.

13

Diese Frage erfordert mehr als eine Antwort auf StackOverflow zu erklären.

Um mehr darüber zu erfahren, von den grundlegendsten elektronischen Komponenten bis zum grundlegenden Maschinencode, lesen Sie The Art of Electronics, by Horowitz and Hill. Um mehr über die Computerarchitektur zu erfahren, lesen Sie Computer Organization and Design by Patterson and Hennessey. Wenn Sie weiterführende Themen kennenlernen möchten, lesen Sie Computer Architecture: A Quantitative Approach, by Hennessey and Patterson.

Übrigens, The Art of Electronics hat auch einen Begleiter lab manual. Wenn Sie die Zeit und die Ressourcen zur Verfügung haben, würde ich sehr empfehlen, die Labors zu machen; Ich nahm tatsächlich die von Tom Hayes gelehrten Klassen, in denen wir eine Vielzahl analoger und digitaler Schaltkreise bauten, mit dem Ziel, einen Computer aus einem 68k-Chip, etwas RAM, einigen PLDs und einigen diskreten Komponenten zu bauen. Sie würden den Maschinencode direkt in den RAM eingeben, indem Sie eine hexadezimale Tastatur benutzen; Es war eine tolle Zeit und eine großartige Möglichkeit, Erfahrungen auf den niedrigsten Ebenen eines Computers zu sammeln.

+0

Die Kunst der Elektronik rockt. – Anycorn

+0

Schade, dass es in letzter Zeit nicht aktualisiert wurde. Es wird etwas altmodisch. :-(Ansonsten eine ausgezeichnete Ressource! –

+0

Ich würde auch spätere Kapitel in SICP empfehlen (http://mitpress.mit.edu/sicp/full-text/book/book-ZH-30.html#%_chap_5) – SingleNegationElimination

6

Eine einfachere Einführung aber immer noch sehr gute Einführung in einen Computer der Draht nach oben
http://img.amazon.com/images/I/31GBgcA5PML._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU15_.jpg

Charles' Petzold's code

+0

I <3ed dieses Buch; es ist wirklich sehr angenehm zu lesen. –

+0

+1 Dies ist das Buch OP muss gelesen werden. – claws

1

Das grundlegendste Element in einer digitalen Schaltung sollte die Logic Gate sein. Logische Gatter können verwendet werden, um logische Schaltungen zu bauen, um boolean arithmetic oder Decoder auszuführen, oder sequential Schaltungen wie Flip-Flops. Der Flip-Flop kann an einen 1-Bit-Speicher gedacht werden. Es ist die Grundlage für komplexere sequentielle Schaltungen wie Zähler oder Register (Bit-Arrays).

Eine microprocessor ist nur eine Reihe von Sequenzern und Registern. "Anweisungen" zu einem Mikroprozessor sind nicht mehr als nur Muster von Bits, die sequentiell auf einige der Register geschoben werden, um bestimmte Sequenzen auszulösen, um Berechnungen auf "Daten" durchzuführen . Daten werden als Arrays von Bits dargestellt ... und jetzt sind wir auf einer höheren Ebene.

0

hier ist eine Well schrecklich geschlachteten Zusammenfassung :-)

A MOV AL, 61h wiederum eine vom Menschen lesbare Form von Code, die in die assembler.The Assembler gespeist wird, erzeugt die äquivalente hexcode der im Wesentlichen eine Folge von Bytes ist Die eingebetteten Systemumgebungen geben Ihnen mit den Linker-Skripts eine feinkörnige Kontrolle darüber, wo diese Bytes (separate Bereiche für Programme/Daten usw.) im Speicher abgelegt werden müssen.

Der Prozessor enthält im Wesentlichen eine endliche Zustandsmaschine (Mikrocode), die mit Flip-Flops implementiert ist. Die Maschine liest den Hex - Code für 'MOV' aus dem Speicher aus (Zyklus holen), entziffert (Dekodierzyklus), dass sie einen Operanden benötigt, der in diesem Fall 61h ist, holt ihn erneut aus dem Speicher und führt ihn aus (dh Kopien 61 in die und aus der Schieberegister unter Verwendung von digitalen Schaltkreisen wie Addierern, Subtrahierern, Multiplexer in den Akkumulator register.'Read ‚‚holen‘, ausführen‘ etc alles Mittel werden die Bytes verschoben/hinzugefügt etc

0

, was genau das ist im Inneren Prozessor, der diesen Code und sendet es als Spannungssignale

I ‚Hardware‘, sondern eine richtige Antwort ‚microcode‘.

interpretiert möchte sagen,
+0

RISC- und VLIW-Architekturen sind nicht mikrocodiert und sind in eingebetteten Systemen vorherrschend. – Clifford

+0

@Clifford 'MOV AL, 61h' und' XOR EAX, EBX' sind Anweisungen der x86-Familie. – ChrisW

+0

Ich nahm das nur als generisches Beispiel für eine typische Anweisung; die Frage schien breiter (vielleicht zu breit!); Aber der richtige Punkt, beide Beispiele sind x86-Anweisungen. Ich frage mich also, warum es mit "embedded" getaggt wurde, da die Frage auch breiter ist (und x86 ist in Embedded-Systemen nicht üblich). – Clifford

11

das ganze System im Detail zu erklären ist unmöglich, ohne ganze Bücher zu tun, aber hier ist ein sehr hohes Niveau Überblick über einen simplen Computer:

  • Auf der untersten Ebene gibt es Physik und Materialien (zB Transistoren hergestellt aus dotiertem Silizium).
  • Mit Physik und Materialien können Sie die NAND logic gate ableiten.
  • Mit dem NAND-Gatter können Sie alle anderen grundlegenden Logikgatter (AND, OR, XOR, NOT usw.) ableiten oder aus Gründen der Effizienz direkt aus Transistoren bauen, einschließlich Versionen mit mehr als 2 Eingängen.
  • Mit den grundlegenden Logikgattern können Sie kompliziertere Schaltungen wie die adder, die multiplexer usw. ableiten.
  • Mit den grundlegenden Logikgattern können Sie auch digitale State-Schaltungselemente wie flip flop, clock usw. ableiten.
  • Ihre kompliziertere stattliche Schaltungen verwenden, können Sie auf höherer Ebene Stücke wie counters, memory, registers, die arithmetic-logic-unit usw.
  • Jetzt leiten Sie müssen nur Ihre hohe Stücke zusammen, so dass kleben:
    • Ein Wert kommt aus dem Speicher
    • Der Wert wird als Anweisung interpretiert, indem er an die entsprechende Stelle (z. B. die ALU oder den Speicher) mit Multiplexern usw. gesendet wird (Grundlegende Anweisungstypen sind Read-from-Memory-In- register, write-from-register-in-speicher, perform-operation-on-register und ju mp-zu-Anweisung-in-Bedingung.)
    • Der Vorgang wiederholt sich mit der nächsten Anweisung

Um zu verstehen, wie eine Montageanleitung eine Spannungsänderung verursacht, müssen Sie einfach zu verstehen, wie jede dieser Ebenen durch das Niveau unten dargestellt wird. Zum Beispiel bewirkt eine ADD-Anweisung, dass sich der Wert von zwei Registern zur ALU ausbreitet, die Schaltungen aufweist, die alle logischen Operationen berechnen. Dann wählt ein Multiplexer auf der anderen Seite, der das ADD-Signal von dem Befehl zugeführt wird, das gewünschte Ergebnis, das sich zu einem der Register ausbreitet.

+0

Normalerweise bauen Sie nicht alle Schaltungen aus nur NAND auf; Sie verwenden einige Kombinationen, die nicht vollständig folgen (für Effizienz). Und der wichtigste Teil einer jeden CPU ist der, den Sie weglassen: den Latch, der typischerweise von einem Taktsignal gesteuert wird. (Es ist auch der Kern, wie ein CPU-Register funktioniert.) –

+2

@ Donal Dies ist für einen vereinfachten Computer, kein praktischer Computer. Auch auf den anderen Ebenen musste ich viele Informationen abschneiden. Außerdem sagte ich Flip-Flop statt Latch. –

+1

@ Strilanc, vergessen Sie zu erwähnen, FSM nach 'Zähler, Speicher, Register, etc ..'. Das sind die "Gehirne" hinter der Mauer !!!. Natürlich sind alle Hardwaresysteme nichts anderes als "DATAPATH" (Zähler, Speicher, Register, Multiplexer usw.) und "FSM" (Kombinationslogik + Flip-Flops). – fante

1

Der Rohentwurf des Buches "Microprocessor Design" is currently online bei Wikibooks.

Ich hoffe, dass es irgendwann eine ausgezeichnete Antwort auf diese Frage enthalten wird. In der Zwischenzeit können Sie vielleicht noch etwas aus dem aktuellen Rohentwurf einer Antwort auf diese Frage lernen und uns helfen, Verbesserungen vorzunehmen oder zumindest Dinge aufzuzeigen, die wir zu erklären vergessen haben, und Bereiche, in denen die Erklärung verwirrend ist.

3

ganz kurz

Ein Befehlscode Maschine ist innerhalb des Prozessors als eine Reihe von Bits gespeichert. Wenn Sie im Prozessordatenblatt MOV nachschlagen, sehen Sie, dass es einen hexadezimalen Wert hat, wie zum Beispiel 0xA5, der für die MOV Anweisung spezifisch ist. (Es gibt verschiedene Arten von MOV Anweisungen mit unterschiedlichen Werten, aber lass uns das für den Moment ignorieren).

0xA5 hex == 10100101 binary.

* (dies ist kein echter Opcodewert für MOV auf einem X86 - Ich bin nur ein Wert zu Veranschaulichungszwecken Kommissionierung).

Innerhalb des Prozessors, dies in einem gespeichert wird "Register", die eigentlich eine Reihe von Flip-Flops oder Latches ist, die Speicherung einer Spannung:

+50+500+50+5

Jede dieser Spannungen wird in den Eingang eines Gatters oder einer Sammlung von Gattern eingespeist.

Bei der nächsten Taktflanke aktualisieren diese Gatter ihre Ausgabe basierend auf den Eingangsspannungen aus dem Register.

Der Ausgang des jenen Gattern speist in eine andere Ebene von Gattern oder auf sich selbst zurück. Diese Ebene führt in die nächste, die in die nächste einfließt, und so weiter.

Schließlich wird ein Gate-Ausgang Weg auf der Linie wird zurück zu einem anderen Latch/Flip-Flop (interner Speicher) oder einer der Ausgangspins auf dem Prozessor verbunden sein.

Register->(clock)->Gate A->(clock)->Gate B->pin 
              ->latch 

(ignorierend Rückmeldung für verschiedene Gate-Typen und Strukturen höherer Ebene)

Diese Operationen parallel zu einem gewissen Grad passieren, wie durch die Core-Architektur definiert sind. Einer der Gründe, dass "schnellere" Prozessoren sagen, 2,0 GHz vs 1.0 GHz - Leistung besser ist, dass eine schnellere Taktgeschwindigkeit (der GHz-Wert) zu einer schnelleren Übertragung von einer Sammlung von Gattern zu der nächsten führt.

Es ist wichtig zu verstehen, dass bei einem sehr hohen hohen Pegel alle Prozessoren die Pinspannungen ändern. Die ganze glorreiche Komplexität, die wir bei der Verwendung eines Geräts wie eines PCs sehen, ist von dem internen Muster von Gattern und den Mustern in den an den Prozessor angeschlossenen externen Geräten/Peripheriegeräten wie anderen CPUs, RAM usw. abgeleitet Prozessor ist die Muster und Sequenzen, in denen seine Pins Spannungen ändern, und die interne Rückmeldung, die den Zustand der CPU in einem Moment zu seinem Zustand bei der nächsten beitragen kann. (Im Assembly wird dieser Zustand durch Flags, den Befehlszeiger/Zähler, Registerwerte usw. dargestellt)

In einer sehr realen Weise sind die Bits jedes Opcodes (Maschinencode-Befehls) physisch mit der internen Struktur verbunden des Prozessors (obwohl dies bis zu einem gewissen Grad mit einer internen Nachschlagetabelle/Anweisungskarte abstrahiert werden kann, wo dies notwendig ist).

Hoffe, dass hilft. Ich habe auch eine schöne EE-Ausbildung und viel Erfahrung in der Embedded-Entwicklung, daher sind diese Abstraktionen für mich sinnvoll, aber für einen Neuling vielleicht nicht sehr nützlich.

-1

Ich habe darüber nachgedacht und googlen wie verrückt. Leute antworten auf Dinge wie "das Bla Bla schreibt in RAM", aber ich bin wirklich interessiert, was das "Schreiben" bedeutet.

Sie beginnen immer mit der Eingabe von Code, richtig? Was wird dann kompiliert, Montage, Maschinencode usw. usw ... Wie wird es in Spannungen auf Transistoren? Aber warte! Lass uns ein bisschen zurücktreten. Wenn Sie Code eingeben, sagen Sie, dass Sie "print 'Hello World'" in welcher Sprache auch immer schreiben möchten. In der Sekunde, in der Sie "p" (den ersten Buchstaben von "print") auf Ihrer Tastatur drücken, leiten Sie tatsächlich den elektrischen Strom um, der von der Wandsteckdose über einen bestimmten Pfad zu einer bestimmten Gruppe von Transistoren geliefert wird. Sie speichern also in diesem Schritt bereits die 0V und + 5V. Es wird nicht später generiert!

Wie diese Spannungen in späteren Schritten umgespült werden, ist gut ... Elektrotechnik auf allen Ebenen.

Hoffe das beantwortet Ihre Frage.

Verwandte Themen