Schaltungen

So erstellen Sie einen 8-Bit-Computer: 18 Schritte (mit Bildern)

EightZero: Building an 8-bit Computer From Zero

EightZero: Building an 8-bit Computer From Zero

Inhaltsverzeichnis:

Anonim

Einen 8-Bit-TTL-Computer zu bauen, klingt nach einer entmutigenden und komplizierten Aufgabe, oder zumindest, als ich mich auf den Weg machte, die Architektur einer Basis-CPU zu verstehen. Im Grunde genommen ist eine CPU relativ einfach zu bedienen, sobald Sie die Grundlagen aller ihrer Prozesse erlernt haben. Dieses Projekt soll allen helfen, die daran interessiert sind, ihren eigenen Computer zu bauen und das wunderbare Wissen zu erlangen, das mit dem Prozess einhergeht. Hab keine Angst es zu versuchen, du kannst nur lernen.
In diesem Projekt werden zunächst die Grundlagen der Elektronik beschrieben. Danach werden die Grundlagen der binären und booleschen Logik beschrieben. Zuletzt werden wir uns mit der Funktion der verschiedenen Teile eines möglichst einfachen Computers befassen (mit einigen Änderungen), wie in Malvinos Text beschrieben Digitale Computerelektronik . Dies bedeutet, dass das Endprodukt dieses Instructable ein Computer ist, den Sie mit einem eindeutigen Befehlssatz programmieren können. Dieses Projekt überlässt Ihnen auch viele Designaspekte des Computers und dient als Leitfaden für den Bau Ihres eigenen Computers. Dies liegt daran, dass es viele Möglichkeiten gibt, sich diesem Projekt zu nähern. Wenn Sie bereits ein fundiertes Verständnis der Booleschen Logik und der Funktionsweise der Binärfunktion haben, können Sie direkt zum Inhalt des Projekts springen. Ich hoffe, dass ihr alle Spaß daran habt und etwas aus einem Build wie diesem herausholt. Ich weiß, dass ich es wirklich getan habe.
Für dieses Projekt benötigen Sie:
1.) Ein Netzteil
2.) Steckbretter + viele Drähte
3.) LEDs für den Ausgang
4.) Verschiedene Logik-ICs (später besprochen)
5.) Freizeit
6.) Die Bereitschaft, Fehler zu vermasseln und daraus zu lernen
7.) Viel Geduld
Optional (aber sehr nützlich):
1.) Oszilloskop
2.) Digitalmultimeter
3.) EEPROM-Programmierer
4.) Schallschraubendreher
Nützliche Links für ein Projekt wie dieses:
Digitale Computerelektronik:
http://www.amazon.com/Digital-computer-electronics-Albert-Malvino/dp/007039861
TTL Kochbuch: http://www.amazon.com/TTL-Cookbook-Understanding-Transistor-Transistor-Integrated/dp/B0049UUV38

Zubehör:

Schritt 1: Was ist ein Computer?

Dies mag wie eine sehr vereinfachte Frage erscheinen, die nicht beantwortet werden muss, obwohl es sich tatsächlich um eine Frage handelt, auf die viele Menschen die wahre Antwort nicht kennen. Computer existieren in mechanischer und theoretischer Form schon viel länger als der Transistor. Die eigentliche Definition eines Computers hat sich ein sehr intelligenter Mensch namens Alan Turing ausgedacht. Er beschrieb eine Maschine, die Turing-Maschine genannt wurde. Jeder Computer, den wir heute verwenden, von dem Computer oder Handy, auf dem Sie dies lesen, bis zu Supercomputern, kann in seiner einfachsten Form als Turing-Maschine eingestuft werden.
Was ist eine Turingmaschine? Eine Turingmaschine besteht aus 4 Teilen: dem Band, dem Kopf, der Tabelle und dem Zustandsregister. Um den Betrieb einer solchen Maschine zu visualisieren, muss man sich zunächst einen Filmstreifen vorstellen, der sich unendlich in jede Richtung erstreckt. Stellen Sie sich nun vor, dass jede Zelle dieses Filmstreifens nur eines einer definierten Menge von Symbolen enthalten kann (wie ein Alphabet). Stellen wir uns für dieses Beispiel vor, dass jede Zelle nur entweder eine "0" oder eine "1" enthalten kann. Diese Zellen können unendlich lange umgeschrieben werden, behalten jedoch ihre Informationen unbegrenzt bei, bis sie erneut geändert werden. Der als Kopf bekannte Teil der Turing-Maschine kann Symbole in die Zellen schreiben sowie seine Position auf dem Filmstreifen um eine bestimmte ganze Zahl von Zellen erhöhen oder verringern. Der nächste Teil ist die Tabelle, die einen gegebenen Befehlssatz enthält, den der Kopf ausführen soll, wie "4 Zellen nach rechts bewegen" und "Zelle auf 1 setzen". Der vierte und letzte Teil einer Turingmaschine ist ihr Zustandsregister, dessen Zweck es ist, den aktuellen Zustand der Maschine zu halten. Der Status enthält die Anweisung sowie die aktuellen Daten auf dem Band.
So einfach ist die Bedienung eines Computers. Wenn Ihr Computer arbeitet, arbeitet er tatsächlich als Turing-Maschine. Es verarbeitet Daten, die auf Ihrem Computer gespeichert sind, anhand einer Reihe von Anweisungen und Algorithmen. Der in diesem Instructable beschriebene Computer ist ein sehr vereinfachtes Modell eines Computers, funktioniert jedoch immer noch wie ein Computer, den Sie mit einer Reihe von Anweisungen programmieren können, die befolgt und ausgeführt werden.
Nützliche Links:
Wikipedia über Turing Machines:
http://en.wikipedia.org/wiki/Turing_machine

Schritt 2: Eine Einführung in die Elektronik

Bevor Sie einen 8-Bit-Computer bauen, ist es äußerst hilfreich, sich mit den grundlegenden Eigenschaften von Elektrizität und analogen Schaltkreisen vertraut zu machen. Es gibt Teile auf dem Computer, für die Sie analoge Komponenten benötigen. Es gibt viele elektronische Selbstlernanleitungen, die für minimale Kosten einen Crashkurs in Elektrotechnik anbieten. Ich persönlich fand Elektronik Selbstlernanleitung von Harry Kybet und Earl Boysen als wundervolles Buch für die Erforschung der Welt der analogen Elektronik.
Elektronik-Autodidaktische Anleitung : http://www.amazon.com/Electronics-Self-Teaching-Guide-Teaching-Guides/dp/0470289619/
Gemeinsame Komponenten:
Widerstand - Strombegrenzung, gemessen in Ohm.
Kondensator - Speichert die Ladung, kann entweder polar oder unpolar sein (polar bedeutet, dass er in der richtigen Arbeitsrichtung platziert werden muss). Gemessen in Faraden.
Diode - Lässt nur Strom in eine Richtung fließen und bricht bei einer bestimmten Spannung ab, wenn er in die falsche Richtung gelegt wird.
Transistor - Ein Stromgate, das von einem dritten Pin gesteuert wird, der als Vermittler fungiert. Es gibt viele Arten von Transistoren, aber hier werden wir über den BJT (Bipolar Junction Transistor) sprechen, der in zwei Arten erhältlich ist: NPN und PNP.

Strom, Spannung und Widerstand gehen in einem Stromkreis Hand in Hand. Die Beziehung zwischen den drei kann mit dem Ohmschen Gesetz ausgedrückt werden: V = IR. Mit anderen Worten, die Spannung entspricht dem Strom in Ampere multipliziert mit dem Widerstand in Ohm. Das Ohmsche Gesetz ist eine der wichtigsten Formeln in der Elektronik und es lohnt sich, es aus der Vogelperspektive zu kennen.
Um das Ohmsche Gesetz anzuwenden, müssen Sie den Widerstand eines Stromkreises kennen. Um den Wert eines Widerstands zu ermitteln, müssen Sie dessen Farbcode verwenden. Der Widerstandsfarbcode basiert auf dem sichtbaren Spektrum und kann auf viele verschiedene Arten gespeichert werden. Für diejenigen, die sich das nicht merken möchten, gibt es eine Vielzahl von Werkzeugen, mit denen Sie den richtigen Wert für Ihren Widerstand finden können. Um den Gesamtwiderstand in einer Schaltung zu berechnen, benötigen Sie zwei Formeln für zwei unterschiedliche Konfigurationen von Widerständen: Serien- und Parallelwiderstand. In Reihe folgt ein Widerstand dem anderen, während sie parallel nebeneinander arbeiten. In der Serie ist die Formel sehr einfach:
Widerstände in Reihe: R (gesamt) = R (1) + R (2) +. . . + R (N)
Das heißt, Sie müssen nur die Werte der Widerstände addieren.
Parallele Widerstände: R (gesamt) = 1 / {1 / R (1) + 1 / R (2) +. . . + 1 / R (N)}
Ein gutes Werkzeug, um den Widerstand des Farbcodes zu ermitteln: http://www.csgnetwork.com/resistcolcalc.html
Es ist einfacher, die Formel für parallele Widerstände zu verstehen, wenn Sie sich die Widerstände so vorstellen, als würden zwei Personen an einem Projekt zusammenarbeiten. Dieselbe Formel wird für Wortprobleme verwendet, bei denen Sie die Rate erhalten, mit der zwei Personen arbeiten, und Sie müssen herausfinden, wie schnell ihr Projekt abgeschlossen sein wird, wenn die Arbeit zusammenarbeitet.
Um herauszufinden, wie viel Strom einem bestimmten Bauteil mit einem bestimmten Widerstandswert zugeführt wird, müssen Sie einfach die Widerstands- und Spannungswerte in das Ohmsche Gesetz einfügen und nach I auflösen. Zum Beispiel:
Ein Licht befindet sich in einem Stromkreis, und zwei 1K-Widerstände (eintausend Ohm) sind parallel davor angeordnet. Wie viel Strom wird bei einer Stromversorgung von 9 Volt an die Leuchte geliefert?
1.) Berechne R (gesamt):
R (gesamt) = 1 / (1/1000 + 1/1000) = 1 / (2/1000) = 1000/2 = 500 Ohm
2.) Berechnen Sie den Strom mit dem Ohmschen Gesetz:
9 = I * 500
I = 9/500 = 0,018 A = 18 mA (Milliampere)
Sie können auch Widerstände in einer Schaltung anordnen, um die Spannung zu regeln. Dies wird Spannungsteiler genannt und umfasst zwei in Reihe geschaltete Widerstände. Der Spannungsausgang der beiden Widerstände liegt an ihrer Verbindungsstelle. Schauen Sie sich für eine bessere Vorstellung das Bild an, das ich angehängt habe. In dieser Anordnung lautet die Formel für die Spannungsausgabe:
V (out) = V (source) · R (2) / {R (1) + R (2)}
Kondensatoren werden bei der Konstruktion der Uhr in Ihrem Computer nützlich sein. Die Uhr ist einfach eine Schaltung, die mit einer konstanten Geschwindigkeit ein- und ausgeschaltet wird. Kondensatoren haben wie Widerstände zwei Formeln, um den Gesamtwert sowohl für serielle als auch für parallele Konfigurationen zu ermitteln.
Serie: C (gesamt) = 1 / {1 / C (1) + 1 / C (2) +. . . + 1 / C (N)}
Parallel: C (gesamt) = C (1) + C (2) +. . . + C (N)

Die Geschwindigkeit, mit der sich ein Kondensator auflädt, hängt vom Widerstand des Stromkreises vor (oder nach dem Entladen) des Kondensators sowie von seiner Kapazität ab. Das Laden eines Kondensators wird in Zeitkonstanten gemessen. Es dauert 5 Zeitkonstanten, um einen Kondensator vollständig zu laden oder zu entladen. Die Formel zum Ermitteln der Zeitkonstante eines Kondensators in Sekunden lautet:
T (konstant) = Widerstand * Kapazität
Dioden sind einfach zu bedienen und beim Bau eines TTL-Computers nützlich. Sie lassen nur Strom in eine Richtung fließen. Wenn sie in die richtige Richtung gebracht werden, sind sie vorwärts vorgespannt. Wenn sie umgekehrt werden, brechen sie bei einer bestimmten Spannung zusammen. Wenn eine Diode gegen den Strom arbeitet, ist sie in Sperrrichtung vorgespannt.
Ein Transistor arbeitet wie ein Ventil, das mit Strom betrieben wird. Ein BJT hat drei Pins: den Kollektor, den Emitter und die Basis. Der Einfachheit halber werde ich in diesem Schritt einen NPN-Transistor beschreiben, bei dem Strom vom Kollektor zum Emitter fließt. Der an der Basis angelegte Strom steuert, wie viel Strom vom Kollektor zum Emitter fließt. Transistoren sind aufgrund ihrer Fähigkeit, ein Signal zu verstärken, ideal für viele Anwendungen. Dies liegt daran, dass der an der Basis des Transistors angelegte Strom erheblich geringer sein kann als der geregelte Strom. Diese Stromverstärkung wird als Stromverstärkung des Transistors oder Beta bezeichnet. Die Formel für Beta lautet:
Beta = Aktuell (Sammler) / Aktuell (Basis)
Wenn ein Transistor vollständig eingeschaltet ist, wird er als gesättigt bezeichnet. Ein Boolescher Transistor ist ein Transistor, der sich entweder im gesättigten oder im ausgeschalteten Zustand befindet und niemals dazwischen liegt. Dies ist die Art von Transistor, mit der Sie sich hauptsächlich in der digitalen Elektronik beschäftigen werden. Transistoren bilden die logischen Gatter, die ein Computer benötigt, um zu funktionieren. Diese werden später beschrieben.
Nützliche Links:
http://en.wikipedia.org/wiki/Resistor
http://en.wikipedia.org/wiki/Capacitor
http://en.wikipedia.org/wiki/Diode
http://en.wikipedia.org/wiki/Transistor

Schritt 3: Binärzahlen

Heute sind wir an ein weltweites Nummerierungssystem gewöhnt, das auf der Zahl zehn basiert. Damit meine ich, dass wir in unserem Zahlensystem keine Zahl haben, die den Wert zehn hat, und daher ist unser Zahlensystem die Basis zehn.
Stellen Sie sich unser Zahlensystem als Kilometerzähler vor. Ein Kilometerzähler zählt von der niedrigsten zur höchsten Stelle und zwingt dann den nächsten Rotor der Reihe nach, um eine Stelle vorzurücken. Zum Beispiel:
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 0 <- Weiter zur nächsten Ziffer
Binär ist Basis zwei, was bedeutet, dass es nur zwei Ziffern und keine Ziffer für 2 hat. Binär hat nur die Ziffern 0 und 1 oder "aus" und "an". Um in binären Zahlen zu zählen, wenden Sie einfach die Kilometerzählertechnik an:
0001b - 1
0010b - 2
0011b - 3
0100b - 4
0101b - 5
0110b - 6
0111b - 7
1000b - 8
usw . . .
Es gibt einen weiteren Faktor in unserem Zahlensystem, der es zur Basis zehn macht. Wenn wir uns in den Ziffern nach oben bewegen, erhöht sich das Gewicht der Ziffern um eine Zehnerpotenz. Zum Beispiel 1 = 10 ^ 0, 10 = 10 ^ 1, 100 = 10 ^ 2 usw. . . Im Binären sind die Dinge natürlich die Basis zwei, und als solche ist jede aufeinanderfolgende Ziffer eine andere Zweierpotenz. 1b = 1 = 2 ^ 0, 10b = 2 = 2 ^ 1, 100b = 4 = 2 ^ 2 usw. . .
Um eine Dezimalzahl in eine Binärzahl umzuwandeln, gibt es einen einfachen Trick, der als Double-Dabble bezeichnet wird und den Vorgang erheblich vereinfacht:
Angenommen, wir möchten 13 in eine Binärzahl umwandeln, teilen 13 zunächst durch zwei und schreiben den Rest auf. Dann notieren Sie direkt darüber die resultierende Zahl ohne den Rest (in diesem Fall 6) und dividieren diese durch zwei und notieren den Rest über der vorherigen Zahl. Sie setzen diesen Vorgang fort, bis Sie entweder eine 1 oder eine 0 erreichen. Am Ende lesen Sie von oben nach unten, um das Ergebnis zu erhalten.
1/2 = 0 R1 <Von oben nach unten lesen. Das Ergebnis ist 1101 oder 2 ^ 0 + 0 + 2 ^ 2 + 2 ^ 3 = 1 + 0 + 4 + 8 = 13. Dies wird als binäres Wort bezeichnet.
3/2 = 1 R1 <
6/2 = 3 R0 <
13/2 = 6 R1 <
Hexadezimal wird sehr oft mit Binär verwendet. Hexadezimal ist die Basis 16 und enthält die Ziffern 0-9 und a-f. Eine Hexadezimalzahl wird verwendet, um ein Halbbyte oder vier Datenbits zu beschreiben. Ein Bit ist eine einzelne 1 oder 0 von binär. Ein Nibble kann von 0 bis 15 (0000 bis 1111) zählen, bevor das nächste Bit im nächsten Nibble liegt. Zwei Halbbytes zusammen sind ein Byte oder 8 Bits. Da die erste Ziffer 2 ^ 0 ist, wird die letzte Ziffer mit 2 ^ 7 gewichtet. Daher kann ein Byte irgendwo im Bereich von 0 bis 255 liegen. Um das Byte 00101110 (46 dezimal) hexadezimal auszudrücken, müssen Sie zuerst die beiden Halbbytes in 0010 und 1110 trennen. Das erste Halbbyte hat den Wert 2 und das zweite man hat einen Wert von E (oder 14 in Dezimal). Das hexadezimale Byte 00101110 wäre daher 2E.
Nützliche Links:
http://en.wikipedia.org/wiki/Binary_numeral_system
http://en.wikipedia.org/wiki/Hexadecimal

Schritt 4: Logikgatter

Ein Computer besteht aus Tausenden von Logikgattern, die zur Ausführung bestimmter Funktionen angeordnet sind. Ein Logikgatter ist eine Komponente in der digitalen Elektronik, deren Ausgang vom Zustand seiner Eingänge abhängt. Die meisten Logikgatter haben zwei Eingänge und einen Ausgang. Sie können sich Logikgatter als Entscheidungsträger in der digitalen Elektronik vorstellen. Die sechs wichtigsten in der digitalen Elektronik verwendeten Logikgatter sind:
AND Gate: Ausgang ist High, wenn alle Eingänge High sind.
ODER-Gatter: Der Ausgang ist hoch, wenn einer seiner Eingänge hoch ist.
NOT Gate: Hat nur einen Eingang. Ausgang ist hoch, wenn sein Eingang niedrig ist.
NAND-Gatter: Der Ausgang ist hoch, es sei denn, alle Eingänge sind hoch.
NOR Gate: Ausgang ist High, wenn keiner seiner Eingänge High ist.
XOR-Gatter: Der Ausgang ist hoch, wenn eine ungerade Anzahl von Eingängen hoch ist.

Tri-State-Puffer: Ein Puffer, der von einem dritten Logiksignal gesteuert wird.
Es ist wichtig, jetzt den Unterschied zwischen einem hohen "1" -Signal und einem niedrigen "0" -Signal zu erwähnen. Ein High-Signal kann entweder eine Verbindung zur positiven Spannung oder ein potentialfreier Eingang sein. Ein potentialfreier Eingang ist ein Eingang, der mit keinem Ausgang verbunden ist. Ein Beispiel für einen potentialfreien Eingang wäre ein nicht verbundener Eingang oder ein nicht aktivierter Ausgang eines Puffers mit drei Zuständen. Ein niedriges Signal liegt an, wenn ein Eingang auf Masse liegt.
Logikgatter können ineinander eingespeist werden, um nahezu jede erdenkliche Funktion zu erzeugen. Beispielsweise können zwei NOR-Gatter ineinander eingespeist werden, um ein Datenbit in einem RS_NOR-Latch zu speichern, während die Schaltung mit Strom versorgt wird.

Schritt 5: Binäres Zählen (Der Programmzähler)

Einer der wichtigsten Bestandteile eines Computers ist der Programmzähler. Der Programmzähler liefert dem Computer die aktuelle Adresse des auszuführenden Befehls. Damit der Programmzähler funktioniert, muss er jedoch binär zählen. Dazu werden JK-Flip-Flops verwendet. Ein Flip-Flop ist eine Anordnung von Logikgattern, die ein Bit speichert (wie das im Schritt "Logikgatter" beschriebene RS_NOR-Latch). Ein JK-Flip-Flop ändert seinen Zustand, wenn sein Taktimpulseingang hoch und dann wieder niedrig geht (seine J- und K-Eingänge müssen ebenfalls hoch sein). Mit anderen Worten, wenn ein JK-Flip-Flop die fallende Flanke eines Taktimpulses erhält, ändert sich sein Zustand entweder von einer "0" auf eine "1" oder von einer "1" auf eine "0".
Wenn Sie den Ausgang eines JK-Flip-Flops mit einem anderen verbinden und diese kaskadieren, erhalten Sie einen Binärzähler, der wie ein Kilometerzähler funktioniert. Dies liegt daran, dass wenn das erste JK-Flip-Flop in der Sequenz hoch und dann niedrig geht, es das nächste in der Sequenz auslöst. Die Frequenz der Uhr (wie oft sie pro Sekunde ein- und ausgeschaltet wird) wird mit jedem nachfolgenden Hinzufügen eines JK-Flip-Flops halbiert. Aus diesem Grund wird ein JK-Flip-Flop auch als Division-by-Two-Schaltung bezeichnet. Das resultierende Muster für vier JK-Flip-Flops ist 0000, 0001, 0010, 0011, 0100 usw. . .
Für den in diesem Instructable beschriebenen möglichst einfachen Computer sind jedoch einige weitere Funktionen erforderlich, um den Computer betriebsbereit zu machen. Damit der Computer sein Programm neu starten kann, muss er alle Ausgänge auf Null setzen oder löschen können. Der Programmzähler benötigt auch die Fähigkeit, ein Binärwort für den JMP-Operationscode zu laden, wodurch der Computer zu einer bestimmten Anweisung springen kann. Logikgatter werden verwendet, um dieses Ziel zu erreichen. Zum Glück gibt es für uns Binärzähler in praktischen Chips mit allen Funktionen, die Sie benötigen.

Schritt 6: Register

Register:

Register könnten möglicherweise der wichtigste Teil eines Computers sein. Ein Register speichert vorübergehend einen Wert während des Betriebs eines Computers. Der in diesem Instructable beschriebene 8-Bit-Computer hat zwei an seine ALU angehängte Register, ein Register zum Speichern des aktuellen Befehls und ein Register für die Ausgabe des Computers.

Je nach Chip verfügt ein Register über 2 oder 3 Steuerpins. Die Register, die wir verwenden werden, haben zwei Steuerpins: Ausgangsfreigabe und Eingangsfreigabe (beide aktiv, wenn sie niedrig sind). Wenn der Ausgabefreigabepin mit Masse verbunden ist, wird das aktuell gespeicherte Binärwort über die Ausgabepins gesendet. Wenn der Eingangsstift mit Masse verbunden ist, wird das an den Eingangsstiften vorhandene Binärwort in das Register geladen.

Ein Beispiel für die Verwendung eines Registers in einem Computer ist der Akkumulator in der ALU (arithmetische Logikeinheit, die mathematische Operationen ausführt). Der Akku gleicht dem Notizblock für den Computer, auf dem die Ausgabe der ALU gespeichert ist. Der Akku ist auch der erste Eingang für die ALU. Das B-Register ist der zweite Eingang. Für eine Additionsoperation wird der erste Wert in den Akkumulator geladen. Danach wird der zweite Wert, der zum ersten Wert addiert werden soll, in das B-Register geladen. Die Ausgänge des Akkumulators und des B-Registers sind durchgeschmolzen und speisen ständig in die ALU ein. Der letzte Schritt zum Hinzufügen besteht darin, die Ausgabe der Operation in den Akkumulator zu übertragen.

Alle Register arbeiten auf einer gemeinsam genutzten Datenleitung, die als Bus bezeichnet wird. Der Bus ist eine Gruppe von Drähten, deren Anzahl der Architektur einer CPU entspricht. Dies stellt das Pferd wirklich vor den Wagen, da die Busbreite das bestimmende Maß für die CPU-Architektur ist. Da eine digitale 1 eine positive Spannung und eine 0 eine Erdung bedeutet, ist es unmöglich, dass sich alle Register den gleichen Bus teilen, ohne dass sie selektiv den Bus verbinden und vom Bus trennen können. Glücklicherweise gibt es einen dritten Zustand zwischen 1 und 0, der dem aktuellen Eingabewert zwiespältig entspricht, und der hierfür hervorragend geeignet ist. Geben Sie den Tri-State-Buffer ein: Ein Chip, mit dem Sie Gruppen von Drähten selektiv an einen Bus anschließen können. Mit einigen dieser Tri-State-Puffer können Sie dafür sorgen, dass jedes Register und jeder Chip auf dem gesamten Computer, der Kommunikation benötigt, die gleichen Drähte wie ein Bus verwendet. Bei meinem Computer war es ein 8-adriges Band von Steckplätzen für Steckbretter, die die unteren Stifte des Steckbretts überspannten. Experimentieren Sie mit Bussen, da sie alle Informationen von Stück zu Stück im Computer transportieren. Ein fehlerhafter Bus kann zu fehlerhaften Daten führen, die die Leitung durcheinander bringen.

Schritt 7: Die ALU

Die ALU (Arithmetic Logic Unit) eines Computers ist der Teil, der mathematische Operationen ausführt. Für den SAP-Computer sind lediglich zwei Funktionen erforderlich: Addition und Subtraktion. Das Addieren und Subtrahieren in Binärform funktioniert sehr ähnlich wie das Addieren und Subtrahieren in Dezimalform, zum Beispiel:
1 <- Trage 1 1 <- Trage Bits
05 0101
+05 +0101
10 1010
Um eine Binärdatei hinzuzufügen, benötigen wir einen sogenannten Volladdierer. Ein Volladdierer addiert effektiv ein Bit der Binärzahl mit einem Übertrag und einem Übertrag zu einem anderen. Der Übertrag eines Volladdierers ist wie eine dritte Eingabe für den Additionsprozess. Sie werden verwendet, um mehrere Volladdierer miteinander zu verketten. Die Ausführung eines Volladdierers erfolgt, wenn sich zwei Addierer im Additionsprozess befinden. Der Übertrag eines Volladdierers wird in den Übertrag eingespeist, um mehrere Binärbits zu addieren. Um einen Volladdierer zu konstruieren, benötigen Sie zwei XOR-Gatter, zwei AND-Gatter und ein OR-Gatter.
Um die Binärzahl zu subtrahieren, müssen wir eine Zahl in ihr negatives Gegenstück umwandeln und zu der Zahl addieren, von der wir subtrahieren. Dazu verwenden wir das sogenannte 2er-Kompliment. Um das 2-Kompliment eines Binärworts zu nehmen, invertieren Sie jedes Bit (ändern Sie jede 0 in eine 1 und jede 1 in eine 0) und addieren Sie eine.
5 = 0101, -5 = 1010+1 = 1011
Nicht belegt -> 1 1
10 1010
+(-5) +1011
5 0101
Um die Inversion von Bits zu steuern, verwenden wir XOR-Gatter mit einem normalerweise niedrigen Eingang. Bei einem normalerweise niedrigen Eingang entspricht der Ausgang dem anderen Eingang. Wenn Sie den Steuereingang hoch einstellen, invertieren Sie den anderen Eingang. Wenn wir diese Inversion mit einem Bit koppeln, das zum Einspielen der Volladdierer gesendet wird, ist eine Subtraktionsoperation das Ergebnis.

Schritt 8: Programmspeicher und RAM

Der Programmspeicher Ihres Computers speichert die auszuführenden Anweisungen. Es fungiert auch als RAM, in dem während des Betriebs des Computers Werte gespeichert werden können. Der Programmspeicher besteht aus drei Hauptteilen: dem Speicher, dem Speicheradressregister (MAR) und dem Multiplexer. Der Speicher ist ein Chip mit 16 Byte Speicherplatz. Es gibt eine 4-Bit-Adresse, die in den Speicher eingespeist wird und angibt, welches Byte gelesen oder geschrieben werden soll. Der MAR speichert die aktuelle Adresse für das zu lesende oder zu schreibende Byte aus dem Speicher. Es wird ständig in den Speicherchip eingespeist, es sei denn, der Computer befindet sich im Programmierzustand. Mit einem Multiplexer können Sie zwischen zwei Eingängen wählen und den angegebenen Eingang ausgeben. Mit dem in meinem Computer verwendeten Multiplexer können Sie zwischen zwei Vier-Bit-Eingängen (dem MAR und einem manuellen Eingang) wählen. Wenn sich der Computer im Programmierzustand befindet, wird die manuelle Adresse in den Speicher eingegeben, und Sie können unter der von Ihnen festgelegten Adresse Bytes in den Computerspeicher programmieren.

Schritt 9: Anweisungsregister

Das Befehlsregister eines Computers speichert den aktuellen Befehl sowie eine Adresse, an der der Befehl ausgeführt wird. Es ist eine sehr einfache Komponente mit einem sehr wichtigen Zweck. Während des Betriebs des Computers wird der Inhalt einer gegebenen Adresse im Speicher in das Befehlsregister übertragen. In meinem Computer sind die am weitesten links stehenden Bits der auszuführende OP-Code oder die aktuelle Anweisung. Die rechten vier Bits oder die niedrigsten vier Bits teilen dem Computer mit, welche Adresse für die Operation verwendet werden soll. Die ersten vier Bits führen den OP-Code ständig der Steuermatrix zu, die dem Computer mitteilt, was für eine gegebene Anweisung zu tun ist. Die vier ganz rechten Bits werden in den Computer zurückgeführt, damit die Adresse in den MAR- oder Programmzähler übertragen werden kann.

Schritt 10: Ausgaberegister

Wenn ein Computer nur die Ausgabe des Busses an den Bediener weiterleitet, macht das Auslesen wenig bis gar keinen Sinn. Aus diesem Grund gibt es ein Ausgaberegister, in dem die für die Ausgabe bestimmten Werte gespeichert werden. Die Ausgabe für Ihren Computer können entweder einfache LEDs sein, die unformatierte Binärdateien anzeigen, oder Sie können eine Anzeige haben, die die tatsächlichen Zahlen auf Siebensegmentanzeigen ausliest. Es kommt darauf an, wie viel Arbeit Sie in Ihren Computer stecken möchten. Für meinen Computer verwende ich einige IV-9 Russian Numitron-Röhren für die Ausgabe meines Computers, gekoppelt mit einem Arduino, um die Konvertierung von binär in dezimal durchzuführen.

Schritt 11: Uhr

Jedes Teil im Computer muss vollständig synchronisiert sein, damit es richtig funktioniert. Zu diesem Zweck benötigt Ihr Computer eine Uhr oder einen Schaltkreis mit einem Ausgang, der mit einer konstanten Geschwindigkeit ein- und ausgeschaltet wird. Der einfachste Weg, dies zu tun, ist die Verwendung eines 555-Timers. Der Timer 555 ist ein äußerst beliebter Timer, der in der Ära der Entstehung des Computers erfunden wurde, der heute bei Hobbyisten äußerst beliebt ist. Um die 555-Schaltung zu bauen, müssen Sie wissen, wie man funktioniert.
Die Uhr für Ihren Computer sollte zunächst relativ langsam sein. 1 Hz oder ein Zyklus pro Sekunde ist ein guter Startwert. Auf diese Weise können Sie den Betrieb Ihres Computers anzeigen und nach Fehlern suchen. Der 555-Chip benötigt zum Betrieb zwei Widerstände und einen Kondensator. Die beiden Widerstände bestimmen, wie lang die hohen und niedrigen Impulse sind sowie die Gesamtfrequenz. Der Kondensator ändert die Pulslänge für beide. Wenn Sie noch keine Erfahrung mit 555 Timern haben, empfehle ich, mit ihnen zu experimentieren.
Nützliche Links:
http://en.wikipedia.org/wiki/555_timer_IC

Schritt 12: Architektur

Dies ist der Schritt, bei dem alles zusammenkommt. Es ist Zeit, die Architektur Ihres Computers zu entwerfen. Die Architektur ist, wie die Register und verschiedenen Komponenten Ihres Computers organisiert sind. Der Designaspekt liegt ganz bei Ihnen, auch wenn Sie ein Ziel (was Ihr Computer tun soll) und ein Modell im Auge behalten müssen. Wenn Sie Ihren Computer nach meinem entwerfen möchten, ist es völlig in Ordnung. Ich habe die Architektur des SAP-1 in geändert Digitale Computerelektronik für meinen 8-Bit-Computer.
Ein Designaspekt, den Sie immer berücksichtigen sollten, ist die Art und Weise, wie Daten zwischen den verschiedenen Komponenten Ihres Computers übertragen werden. Die gebräuchlichste Methode ist es, einen gemeinsamen "Bus" für alle Daten auf dem Computer zu haben. Die Ein- und Ausgänge der Register, der ALU, des Programmzählers und des RAM sind alle mit dem Bus des Computers verbunden. Die Drähte sind in der Reihenfolge vom niedrigstwertigen Bit (1) zum höchstwertigen Bit (128) angeordnet.
Alle Ausgänge, die mit dem Bus verbunden sind, müssen inaktiv vollständig getrennt werden, da sie sonst miteinander verschmelzen und zu einer fehlerhaften Ausgabe führen würden. Zu diesem Zweck verwenden wir Tri-State-Puffer, um die Ausgabe bestimmter Elemente zu steuern, die standardmäßig ausgegeben werden, wie Akkumulator, ALU und tatsächliche Eingabe für die Programmierung des Computers.

Schritt 13: Kontrollmatrix

Die Steuermatrix eines Computers teilt jedem einzelnen Teil mit, wann er seinen Wert eingeben und ausgeben soll. Es gibt mehrere Zustände für jeden Vorgang in einem Computer. Diese Zustände werden von einem Zählertyp ausgelöst, der als Ringzähler bezeichnet wird. Ein Ringzähler hat jeweils nur ein Bit hoch und durchläuft seine Ausgänge nacheinander. Wenn ein Ringzähler beispielsweise 4 Ausgänge hat, ist zuerst der erste Ausgang aktiv. Beim nächsten Takt wird der zweite Ausgang hoch (und der erste niedrig) gesetzt. Der nächste Takt erhöht das Bit um einen Ausgang und so weiter. Diese Stufen werden T-Zustände genannt. Der Computer in diesem Instructable verwendet 6 T-Zustände für die Ausführung eines Befehls. Die ersten drei T-Zustände sind der sogenannte Abrufzyklus, in dem der aktuelle Befehl abgerufen und in das Befehlsregister gestellt wird. Der Programmzähler wird ebenfalls um eins erhöht. Der zweite Satz von drei T-Zuständen hängt davon ab, welcher OP-Code aus dem Befehlsregister in die Steuermatrix eingespeist wird. Die T-Zustände sind wie folgt:
T1: Der Inhalt des Programmzählers wird in das Speicheradressregister übertragen. (Adressstatus)
T
2: Der Programmzähler wird um eins erhöht. (Inkrementierungsstatus)
T3: Das adressierte Byte im Programmspeicher wird in das Befehlsregister übertragen. (Speicherzustand)
T4: Abhängig davon, welcher Befehl ausgeführt wird.
T5: Abhängig davon, welcher Befehl ausgeführt wird.
T6: Abhängig davon, welcher Befehl ausgeführt wird.
Es gibt zwei Möglichkeiten, eine Steuermatrix zu erstellen: mit diskreter Logik und mit ROMs. Die ROM-Methode ist die einfachste und effizienteste. Bei der Verwendung von diskreter Logik wird ein umfangreiches Logikschema entworfen, das die richtigen Steuerwörter für Ihren Computer basierend auf einer OP-Code-Eingabe ausgibt. ROM steht für Nur-Lese-Speicher. Es gibt verschiedene Arten von ROMs, die Sie für die Verwendung in Ihrem Build in Betracht ziehen können. Für meinen Computer habe ich ursprünglich EEPROM (elektronisch löschbares, programmierbares ROM) verwendet, bin dann aber auf NVRAM (nichtflüchtigen Arbeitsspeicher) umgestiegen, nachdem die EEPROM-Chips nicht mehr beschrieben werden konnten. Ich empfehle NVRAM nicht, da es für Direktzugriffsspeicher und nicht für permanenten Speicher gedacht ist. EEPROM ist meiner Meinung nach die effizienteste Lösung.
Die Steuermatrix weist drei ROM-Chips mit jeweils mindestens 32 Adressen eines 8-Bit-Speichers (sowie die Zeitsteuerungs- und Zählelemente) auf. Das binäre Wort, das von der Steuermatrix ausgesendet wird, wird als Steuer-ROM bezeichnet und enthält alle Steuerbits für jede Komponente Ihres Computers. Sie möchten sicher sein, die Steuerbits zu organisieren und ihre Reihenfolge zu kennen. Für keine Operation möchten Sie ein Steuerwort, das jeden Teil des Computers inaktiv macht (außer natürlich die Uhr). Das Steuerwort für den in diesem Instructable beschriebenen Computer hat eine Länge von 16 Bit und ist in zwei der Steuer-ROM-Chips gespeichert. Die ersten drei Adressen der Steuer-ROM-Chips enthalten die Steuerwörter für den Abrufzyklus. Die restlichen Adressen auf dem Chip enthalten die Steuerwörter in Dreierpaaren für jeden OP-Code. Der dritte ROM-Chip enthält für jeden OP-Code den Speicherplatz für den Beginn der Steuerwortfolge und wird vom OP-Code selbst angesprochen. Wenn Sie der Steuerung in meinem Computer beispielsweise den OP-Code 0110 geben, wird die Binärdatei 21 ausgegeben, die die Adresse für den Start des JMP-Befehls ist. Zwischen dem OP-ROM und den Steuer-ROMs befindet sich ein 8-Bit-Zähler, der von 0 bis 2 (die ersten drei T-Zustände) zählt, dann im dritten T-Zustand die vom OP-ROM ausgegebene Adresse lädt und von dieser Position bis zum T1 zählt state löscht den Zähler erneut. Der Ring und der Binärzähler für die Steuermatrix werden durch eine Inversion des Takts gesteuert, so dass Steuerwörter vorhanden sind, wenn der ansteigende Takt zu den Elementen des Computers gelangt. Der gesamte Prozess in der Reihenfolge ist wie folgt:
1.) Zustand T1 löscht den Zähler auf 0, das bei 0 gespeicherte Steuerwort wird ausgesendet
2.) Die Uhr geht hoch und der Adressstatus findet statt
3.) Die Uhr geht nach unten und der Steuerzähler erhöht sich und Steuerwort 1 wird gesendet
4.) Die Uhr geht hoch und der Inkrementzyklus findet statt
5.) Die Uhr geht nach unten und der Steuerzähler erhöht sich auf 2, Steuerwort 2 wird gesendet
6.) Die Uhr geht nach oben und der Speicherzustand findet statt und der OP-Code kommt im Befehlsregister an, T3 ist ebenfalls aktiv, was bedeutet, dass beim nächsten niedrigen Takt die OP-Steueradresse geladen wird
7.) Die Uhr geht auf LOW und lädt den Zähler mit der Adresse für das erste der drei Steuerwörter für den angegebenen OP-Code
8.) T4, T5 und T6 führen den OP-Code aus
9.) T1 setzt den Zähler zurück, der Vorgang wird fortgesetzt, bis ein HLT-OP empfangen wird. Der HLT-Befehl stoppt die Uhr.

Schritt 14: Mikroprogrammierung

Jetzt entscheiden Sie, zu welchen Befehlen Ihr Computer fähig sein soll. Ich gab meinem Computer 6 einzigartige Operationen, die ihm die grundlegenden Programmierfunktionen geben würden, die ich benötigen würde. Die Befehle, die Sie in Ihren Computer programmieren, werden als Assemblersprache bezeichnet. Assembly ist eine der frühesten Programmiersprachen und kann noch heute auf Computern verwendet werden. Befehle in der Sprache umfassen das Laden des Akkumulators, das Hinzufügen, Verschieben, Ausgeben und Speichern von Variablen. Jeder Befehl hat in diesem 8-Bit-Computer einen eigenen 4-Bit-OP-Code. Die Befehle, die ich für meinen Computer gewählt habe, sind:
NOP: Keine Operation. (0000)
LDA: Laden Sie den Akku mit dem Wert an dieser Adresse. (0001)
ADD: Addiert den Wert an der angegebenen Adresse zum Wert im Akkumulator. (0010)
SUB: Subtrahiert den Wert an der angegebenen Adresse vom Wert im Akkumulator. (0011)
STO: Speichern Sie den Inhalt des Akkus an der angegebenen Adresse. (0100)
OUT: Speichern Sie den Inhalt des Akkus im Ausgaberegister, damit der Bediener ihn sehen kann. (0101)
JMP: Springt zu einer bestimmten Anweisung im Speicher an der angegebenen Adresse. (0110)
HLT: Stoppen Sie den Betrieb des Computers. (0111)
Um zu bestimmen, welche Steuerwörter für jedes OP ausgesendet werden müssen, müssen Sie wissen, welche Bits während jedes T-Zustands aktiv sein müssen. Für meinen Computer habe ich die Bits wie folgt organisiert (eine Unterstreichung kennzeichnet ein aktiv-niedriges Bit):
CE CO J MI RO II IO OI BI EO SU AI AO RI HLT X
CE - Count Enable (aktiviert den Takteingang des Programmzählers)
CO - Clock Out aktivieren
J - Sprungfreigabe
MI - MAR Eingang
RO - Programmspeicher erschöpft
II - Befehlsregister in
IO - Befehlsregister aus
OI - Ausgangsregister in
BI - B registrieren in
EO - ALU-Ausgabefreigabe
SU - Subtrahieren
AI - Akku in
AO - Speicherausgangsfreigabe
RI - Programmspeicher in
HLT - Halt
X - Wird nicht verwendet
Hier sind die Bits, die für jeden T-Zustand für einen gegebenen Befehl aktiv sein sollten, sowie die Adresse, die sie im Steuer-ROM sein sollten:
Holen:
0: CO, MI - Der Programmzähler gibt in den MAR aus
1: CE - Der Zähler ist für den nächsten Takt freigegeben
2: RO, II - Das adressierte Byte wird vom RAM in das Befehlsregister ausgegeben
NOP:
3: X
4: X
5: X
LDA:
6: IO, MI - Die Adresse im Befehlsregister wird zum MAR übertragen (niedrigste vier Bits)
7: RO, AI - Das adressierte Byte wird aus dem Speicher in den Akkumulator ausgegeben
8: X
HINZUFÜGEN:
9: IO, MI - Die Adresse im Befehlsregister wird zum MAR übertragen (niedrigste vier Bits)
10: RO, BI - Das adressierte Byte wird vom Speicher in den Akkumulator ausgegeben
11: EO, AI - Die Summe aus Akku und B-Register wird in den Akku geladen
SUB:
12: IO, MI - Die Adresse im Befehlsregister wird zum MAR übertragen (niedrigste vier Bits)
13: RO, BI - Das adressierte Byte wird vom Speicher in den Akkumulator ausgegeben
14: AI, SU, EO - Die Differenz zwischen dem Akkumulator und dem B-Register wird in den Akkumulator geladen
STO:
15: IO, MI - Die Adresse im Befehlsregister wird zum MAR übertragen (niedrigste vier Bits)
16: AO, RO, RI - Der Akku gibt an der adressierten Stelle in den Programmspeicher aus (RO und RI müssen aktiv sein, damit auf den von mir verwendeten Chip geschrieben werden kann)
17: X
AUS:
18: OI, AO - Der Akku gibt in das Ausgangsregister aus
19: X
20: X
JMP:
21: J, IO - Das Befehlsregister lädt den Programmzähler mit den niedrigsten vier Bits
22: X
23: X
HLT:
24: HLT - Ein Haltesignal wird an die Uhr gesendet
25: X
26: X
Ihr OP-ROM enthält an jedem Speicherplatz ein Vielfaches von drei. Dies liegt natürlich daran, dass jeder Zyklus drei Ausführungszustände einnimmt. Daher lauten die adressierten Daten für Ihr OP-ROM:
0 - 3
1 - 6
2 - 9
3 - 12
4 - 15
5 - 18
6 - 21
7 - 24
Um Ihre Chipauswahl zu programmieren, haben Sie viele verschiedene Möglichkeiten. Sie könnten einen EEPROM- und einen EPROM-Programmierer kaufen, aber diese kosten normalerweise eine beträchtliche Menge Geld. Ich habe einen Breadboard-Programmierer für mein ROM gebaut, der durch Bewegen von Drähten und Steuern der Schreib- und Lesefreigabestifte durch Drucktasten betrieben wird. Später vereinfachte ich den Prozess und entwarf speziell für meinen NVRAM einen Arduino-Programmierer. Ich werde den Code anhängen, da er leicht geändert werden kann, um fast jeden parallelen Speicherchip zu programmieren, den Sie für dieses Projekt verwenden würden.

Schritt 15: Teile kaufen

Das Tolle am Aufbau eines 8-Bit-Computers ist, dass die meisten Teile weniger als einen Dollar pro Stück kosten, wenn Sie sie an der richtigen Stelle kaufen. Ich habe 90% meiner Teile bei Jameco Electronics gekauft und bin mit deren Dienstleistungen rundum zufrieden. Die einzigen Teile, die ich wirklich von irgendwo anders gekauft habe, sind die Steckbretter und Steckdrähte (und die Numitron-Röhren). Diese sind auf Websites wie Amazon deutlich günstiger zu finden. Stellen Sie immer sicher, dass die Teile, die Sie bestellen, die richtigen sind. Für jedes von Ihnen gekaufte Teil sollte ein Datenblatt online verfügbar sein, in dem alle Funktionen und Einschränkungen des von Ihnen gekauften Artikels erläutert werden. Stellen Sie sicher, dass diese organisiert sind, da Sie beim Aufbau Ihres Computers viele Datenblätter verwenden werden. Um Ihnen bei Ihrem Computer behilflich zu sein, liste ich die Teile auf, die ich für meinen verwendet habe:
4-Bit Zähler:
74161 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74161&langId=-1&storeId=10001&productId=49664&search_type=jamecoall&catalogId=10001&ddkey=http:StoreViewDr
4-Bit-Register (ich verwende zwei für jedes 8-Bit-Register):
74LS173 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS173&langId=-1&storeId=10001&productId=46922&search_type=jamecoall&catalogId=10001&ddkey=http:Store
2-1 Multiplexer:
74LS157 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_46771_-1
16x8 RAM (Ausgang muss invertiert werden):
74189 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74189&langId=-1&storeId=10001&productId=49883&search_type=jamecoall&catalogId=10001&ddkey=http:StoreViewDr
Volladdierer:
74LS283 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS283&langId=-1&storeId=10001&productId=47423&search_type=all&catalogId=10001&ddkey=http:StoreDownCatalog
Tri-State-Puffer:
74S244 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_910750_-1

XOR-Gatter:
74LS86 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295751_-1
UND Tore:
74LS08 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295401_-1
NOR-Tore:
74LS02 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283741_-1
Wechselrichter:
74LS04 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283792_-1
Ringzähler:
CD4029 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=4029&langId=-1&storeId=10001&productId=12925&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDr
JK Flip-Flops:
74LS10 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295427_-1

Schritt 16: Aufbau

Hier kommt die Geduld wirklich ins Spiel. Ich habe mich dafür entschieden, ein Steckbrett für den eigentlichen Computer zu verwenden, aber es gibt auch viele andere Methoden (wie das Umwickeln von Kabeln), die genauso gut funktionieren. Zur Vereinfachung habe ich ein Blockdiagramm für den tatsächlichen Schaltplan meines Computers eingefügt. Ich habe jedoch keine Teilenummern oder Pin-Nummern angegeben. Ich glaube, dass dies die Dinge einfacher und offener für Kreativität machen wird. Der 4-Bit-Programmzählerausgang, der MAR-Eingang und der Befehlsregisterausgang sind alle mit den vier niedrigstwertigen Bits des Computerbusses verbunden.
Das zweite gezeigte Diagramm ist die Steuerlogik für das Betriebsende des Computers. Die Steuerelemente sind so konzipiert, dass das Umschalten eine Eingabe für den Computer sein kann. RS_NOR-Latches werden vor den Kippschaltern platziert, um sie zu entprellen. Kippschalter haben oft verschmutzte Verbindungen, die von einem Ein-zu-Aus-Zustand springen können und mehr Impulse liefern, als Sie möchten. Durch Hinzufügen eines Flip-Flops zum Ausgang eines Umschalters werden die zusätzlichen Impulse eliminiert. Dies ist äußerst nützlich, wenn Sie die manuelle Uhrzeitoption verwenden. Sie möchten den Schalter nicht umlegen und 8 Taktimpulse einleiten. Die Lese- / Schreibtaste schreibt das aktive Eingangsbyte in den adressierten Speicher. Durch Ändern des in den RAM eingegebenen Standardsteuerworts auf zwei niedrige RO- und RI-Bits wird ein Schreibzyklus eingeleitet. Der Run / Program-Schalter ändert, welcher Eingang am Speicheradressen-Multiplexer aktiv ist. Das JK-Flip-Flop nach dem 555 bedeutet, dass der Computer beim Starten nicht mitten in einem Taktimpuls gestartet wird. Ein niedriges HLT-Signal verhindert, dass die Uhr entweder die manuelle Uhr oder die manuelle Uhr 555 weitergibt. Schließlich ist der Run / Clear-Schalter an alle Clear-Pins des Computers angeschlossen, z. B. an die Register und Zähler.

Schritt 17: Programmierung

Nachdem der Computer fertig ist, kann er für die Ausführung von Anweisungen programmiert werden. Dazu müssen Sie zuerst den Computer in seine Programmeinstellung versetzen, indem Sie den Run / Program-Kippschalter in die Programmposition bringen. Danach wählen Sie Adressen ab 0 bis 15 aus und geben die erforderlichen Daten für Ihr Programm ein. Wenn Sie beispielsweise mit 5 beginnen und bei jeder Ausgabe 4 hinzufügen, sieht das Programm folgendermaßen aus:
Adresse - Daten:
0000 - 00010111 LDA 7: Laden Sie den Akku mit dem unter der Speicheradresse 7 (5) gespeicherten Wert.
0001 - 00101000 ADD 8: Wert hinzufügen, der unter der Speicheradresse 8 (4) gespeichert ist
0010 - 01010000 OUT: Ausgabe des Akkus
0011 - 01100001 JMP 1: Springe zu Anweisung 1
0100 - X
0101 - X
0110 - X
0111 - 00000101 5
1000 - 00000100 4
1001 - X
1010 - X
1011 - X
1100 - X
1101 - X
1110 - X
1111 - X

Schritt 18: Weiter gehen

Ich hoffe, Sie haben dieses Instructable genossen und vor allem hoffe ich, dass Sie etwas davon haben. Sie können all diese harte Arbeit als eine unglaublich wertvolle Lernerfahrung betrachten, die Ihnen ein besseres Verständnis von Elektronik, Computern und Programmierung vermittelt. Am Ende wirst du auch für all deine harte Arbeit etwas sehr Cooles zu zeigen haben.
Nachdem Sie Ihren ersten 8-Bit-Computer erstellt haben, können Sie weitere Funktionen hinzufügen. Die in diesem Computer verwendete ALU ist sehr einfach zu bedienen und echte ALUs verfügen heute über eine Vielzahl von Funktionen wie Bitverschiebung und logische Vergleiche. Ein weiterer wichtiger Aspekt ist die bedingte Verzweigung. Bedingte Verzweigung bedeutet, dass ein Befehl vom aktuellen Status der von der ALU gesetzten Flags abhängt. Diese Flags ändern sich, wenn der Inhalt des Akkus negativ wird oder gleich Null ist. Dies ermöglicht eine weitaus umfangreichere Möglichkeit für die Anwendung Ihres Computers.
Wenn Sie Fragen zu diesem Projekt haben, können Sie dieses Instructable oder meine Website unter http://8-bitspaghetti.com kommentieren. Ich wünsche Ihnen viel Glück bei diesem Projekt.

3 Leute haben dieses Projekt gemacht!

  • JamesP383 hat es geschafft!

  • xdola hat es geschafft!

  • realhet hat es geschafft!

Hast du dieses Projekt gemacht? Teile es mit uns!

Empfehlungen

  • Vintage Look Media PC von einem alten Laptop

  • Digi-Comp II Replica

  • Klasse Internet der Dinge

  • Farben des Regenbogenwettbewerbs

  • Klassenzimmer-Wissenschaftswettbewerb

  • Fandom Contest

173 Diskussionen

0

AtomicFerryt

vor 1 Jahr

Glauben Sie, Sie könnten ein digitales Diagramm für das Motherboard erstellen? Ich habe noch nie ein Steckbrett benutzt, interessiere mich aber sehr für alte Computer.

0

FarsinHamza

vor 1 Jahr

Eines der schönsten instructable, die ich je gesehen habe …. Ich weiß deine Geduld zu schätzen … :)

0

bob491

vor 1 Jahr

Dies ist eine sehr gut geschriebene und detaillierte Anleitung und auch sehr cool. Vielen Dank.

0

champ12345

vor 1 Jahr

sieht ein wenig komplex aus

0

mkpeker

vor 1 Jahr

schön gebaut. Vielleicht möchten Sie meine einfachste 4-Bit-TTL-CPU (MP-4) überprüfen, um die Grundlagen zu verstehen:

http://www.instructables.com/id/Simplest-4-Bit-TTL-CPU/

0

mkpeker

vor 2 Jahren

nettes projekt vielleicht möchtest du meins ausprobieren;

Endlich ist mein Monitortyp OS (mit Inline Assembler und Disassembler) fertig
Bitte installieren und testen Sie diese Version 1.0b
Sie finden alle notwendigen Informationen auf meinen Efex-Seiten.

http://mkpeker.wixsite.com/efex

Bitte senden Sie mir Ihre Kommentare, damit ich die Software verbessern kann
Vielen Dank

0

TheMrCode

vor 2 Jahren

Was ist, wenn Sie es mit LEDs anstelle von Drähten gemacht haben? Könntest du sehen, wohin die Signale gehen?

0

GeorgeW134

vor 2 Jahren

Wie würden Sie eine if-Anweisung programmieren?

2 Antworten 0

JuliaS87GeorgeW134

Antworten vor 2 Jahren

Sie brauchen keinen neuen Opcode. Was Sie brauchen, ist ein Wert, der wahr und falsch als 1 und 0 darstellt. Sie laden diesen Wert in den Akkumulator und subtrahieren 1. Dann machen Sie einen bedingten Sprung. Wenn der Wert 1 (wahr) war, führt die Subtraktion zu einem Überlauf und der bedingte Sprung wird ausgeführt. Wenn der Wert 0 (falsch) war, tritt kein Überlauf und somit kein Sprung auf.

0

calebj20GeorgeW134

Antworten vor 2 Jahren

Da es ein Register (Akkumulator) gibt, das die vorherige Summe aus der ALU speichert, können Sie prüfen, ob das Ergebnis eine negative, positive oder Null-Zahl ergibt. Dann können Sie einen neuen Opcode hinzufügen, der diesen Zustand prüft und springt, wenn die Bedingung erfüllt ist wahr.
zum Beispiel

4 - 10 = -6 -> -6 ist negativ, daher würde jeder Verzweigungsbefehl mit dem auf 1 gesetzten N-Bit springen

assembly: BRN RA Dies würde vom Negativ zum Speicherort in A verzweigen

Binär unter der Annahme, dass der Opcode 1000: 10001000 ist

Wobei dies die Bitaufteilung des Opcodes ist

BR: 1000

N: 1 | 0

Z: 1 | 0

P: 1 | 0

0: 0 | 0

Wenn Sie es vielseitiger machen möchten, können Sie versuchen, die Fähigkeit für B hinzuzufügen, den Buswert einzustellen, dann könnte das letzte Bit '0' für A oder B 0 oder 1 sein.

0

T0BY

vor 2 Jahren

Crikey, du hast etwas Geduld!

0

SuperNovaa41

vor 2 Jahren

Ich habe eine Frage. Alle Teile in der Liste sind dort mit Ausnahme von 2.
Die Tri-State-Puffer und die JK-Flip-Flops
Es gab eine andere Website mit demselben Modell wie die Tri-State-Puffer
aber
Es gab keinen JK-Flip-Flop-Ersatz, muss ich den genauen verwenden?
dasselbe Modell wie Sie oder kann ich ein anderes Modell verwenden? und wenn ja welche
Modell soll ich benutzen?

0

SuperNovaa41

vor 2 Jahren

Hallo! Ich weiß, dass dies ein älterer Beitrag ist, aber könntest du mir ein paar aktualisierte Links für die Tri State Buffers und die JK Flip Flops geben? Ich habe versucht, die Produkte zu recherchieren, weiß aber nicht, welche Modelle ich verwenden soll. Danke im Voraus!

0

BartH19

vor 2 Jahren

Ich bin daran interessiert, eine einfache CPU zu entwickeln, mit der ich auf einem LED- oder sogar LCD-Bildschirm schreiben kann. Ist das das Projekt für mich oder kannst du mir bitte eine bessere Richtung weisen?

Ich bin ein absoluter Neuling in diesem Bereich. Ich bin ein Tischler, der versucht, einen Holzcomputer zu bauen!

5 Antworten 0

FinnW3BartH19

Antworten vor 2 Jahren

Anstatt eine CPU zu bauen, solltest du einfach einen Computer mit einem Holzkasten bauen. Computer können eine ganze Menge kosten, aber Sie können sie tatsächlich unter 300 US-Dollar bekommen. Versuchen Sie, diese Website zu verwenden: pcpartpicker.com

0

BartH19FinnW3

Antworten vor 2 Jahren

Danke dafür. Ich hoffe, es gibt Teile, die dünn genug sind. Ich möchte, dass es wie ein Taschenrechner für Wörter ist. Ich werde den Link überprüfen: D

0

KyleF45BartH19

Antworten vor 2 Jahren

Wenn Sie nur als Taschenrechner fungieren möchten, sollten Sie sich mit Raspberry Pi befassen. Es wird viel kleiner und billiger sein, Pi ist wie die Größe eines Telefons.

0

KyleF45KyleF45

Antworten vor 2 Jahren

Nun, da ich darüber nachdenke, kann der Pi so ziemlich alles, was ein vollständiger Desktop-Computer kann, er ist nur viel kleiner. Es gibt wahrscheinlich irgendeine Art von Software, die Sie dafür verwenden können.

0

BartH19KyleF45

Antworten vor 2 Jahren

Vielen Dank für Ihre Antwort: D

Kurz nach meinem ursprünglichen Kommentar habe ich tatsächlich diesen Typen gefunden: http: //www.etsy.com/shop/writeotron? Ref = unav_lis …

Wir werden zusammen an einem neuen arbeiten. Es ist ein Pi!

0

Bharathis

vor 2 Jahren

Es ist wunderbar und ermutigend für mich, eines meiner eigenen zu machen.

Ich werde auf "Ich habe es geschafft" klicken. Ich bin gerade dabei, es zu bauen. hee hee seine fantastische digitale Elektronik