Hallo,
ich würde gerne eine CPU mit einer eigenen Architektur, die möglichst
wenige Transistoren benötigt, diskret selber bauen, um die grundlegende
Funktionsweise besser zu verstehen.
Natürlich In-Order-Execution und nur ein diskreter Halb-Addierer neben
AND/OR/XOR/NOT. Also eher minimal, aber dennoch nutzbar. Der Einfachheit
halber sollen die Befehle nicht in einem RAM landen, sondern direkt aus
dem ROM.
Da EEPROM Chips wie der 24AA16I/P mit diskreter Logik wahrscheinlich nur
schwer anzusteuern wären, würde ich wahrscheinlich eine Matrix aus
steckbaren Drähten als EPROM-Ersatz nutzen.
Und aufgrund des Transistorbedarfs nur 1-bit Register -> nur
Halb-Addierer nötig. Die Befehle sind sicher länger als 1 bit, den
Befehlszähler würde ich 3bit oder 4bit lang machen, also 8 oder 16
Befehle max.
Wie sieht es denn mit den Zyklen aus? Warum werden nicht
fetch->decode->execute in einem Schritt erledigt? Also im Sinne
Befehlszähler erhöht sich->Adresse neu->neuer Befehl->Dekoder->ALU, denn
der Dekoder müsste doch logisch arbeiten können, also mit minimaler
Verzögerung, ohne Takt, die ALU ebenso logisch ohne Takt...
Hat jemand Schaltungstipps, wie ich die ALU u.ä. Teile mit wenig
Transistoren realisieren kann? Oder wie grundlegend simple Architekturen
aufgebaut sind?
Danke im Voraus
cpubuilder
cpu_builder schrieb:> Hat jemand Schaltungstipps, wie ich die ALU u.ä. Teile mit wenig> Transistoren realisieren kann? Oder wie grundlegend simple Architekturen> aufgebaut sind?https://de.wikipedia.org/wiki/Intel_4004cpu_builder schrieb:> Da EEPROM Chips wie der 24AA16I/P mit diskreter Logik wahrscheinlich nur> schwer anzusteuern wären, würde ich wahrscheinlich eine Matrix aus> steckbaren Drähten als EPROM-Ersatz nutzen.
Die zugehörige 4001 hat ein 2048 bit ROM.
Viel Spass mit den Drähten ;-/
Hmmm... mit wenigen Transistoren wird das wohl nix. Ein paar 1000 wirst
du auch für die einfachste 4 Bit CPU brauchen. Würde eher versuchen das
mit den 74xx Logikbausteinen zu machen, das hat noch eher Aussicht auf
Erfolg.
Grüsse
Das mit Transistoren zu bauen ist viel zu aufwendig. Dabei lernst du
nichts außer löten und das Projekt wird am Ende aus Zeit- und
Kostengründen scheitern.
Mindest mit 4-bit ALU und Flashspeicher für die Statemaschine solltets
du starten.
https://www.bigmessowires.com/nibbler/
Wenn du eh VHDL gelernt hast, dann entwickle und simuliere das in VHDL.
Das ist eigentlich der beste Weg.
Ich wuerd's mit einem FPGA probieren. Resp ohne FPGA. Bei den FPGA
Herstellern kann man einen Simulator herunterladen, und das Design bis
zur Funktionsreife durchziehen. Dann schreibst du noch einen Assembler,
resp Compiler fuer einen CPU Simulator und hast nachher wahrscheinlich
gar keine Lust mehr das Alles effektiv auch laufen zu lassen.
Teo D. schrieb:> Schau mal hier rein:> Beitrag "Rechner aus einzelnen BC547 Transistoren"
Sieht interessant aus!
Wegstaben V. schrieb:> cpu_builder schrieb:> Hat jemand Schaltungstipps, wie ich die ALU u.ä. Teile mit wenig> Transistoren realisieren kann? Oder wie grundlegend simple Architekturen> aufgebaut sind?>> https://de.wikipedia.org/wiki/Intel_4004>
Interessanter Chip...
> cpu_builder schrieb:> Da EEPROM Chips wie der 24AA16I/P mit diskreter Logik wahrscheinlich nur> schwer anzusteuern wären, würde ich wahrscheinlich eine Matrix aus> steckbaren Drähten als EPROM-Ersatz nutzen.>> Die zugehörige 4001 hat ein 2048 bit ROM. Viel Spass mit den Drähten ;-/
... wobei das Takten über einen Taster und Eingeben des Befehls ebenso
über Taster möglich wäre
Vielleicht kaufe ich mir den
Teo D. schrieb:> Schau mal hier rein:> Beitrag "Rechner aus einzelnen BC547 Transistoren"
Ich dachte da eher an eine CPU, die nicht nur addieren, sondern auch
logische Operationen, je nach Befehl, ausführen kann. Sehe ich mir
dennoch an.
Ich weiß, FPGAs und CPLDs sind verlockend... aber ich würde es gerne
erstmal bare metal mäßig machen. Einfach weil auch das Bauen spaß macht.
Nur 1bit. Und später 4 oder 8bit im FPGA
Als einfache Architektur werfe ich mal die "Turing Maschine" in den
Raum.
https://hackaday.com/2018/03/08/mechanical-wooden-turing-machine/
Das geht bestimmt mit weniger als 100 Transistoren, wenn du den Speicher
nicht mit zählst. Ist allerdings schwierig, darauf etwas Sinnvolles zu
programmieren.
Ich glaube Dir ist nicht klar wie groß das wird.
Hier hat das mal jemand für den MOS6502 gemacht, das ist ein noch recht
einfacher Prozessor (z.B. aus dem C64): https://monster6502.com/
Das sind >3k Transistoren. Mit 4 Bits spart man da kaum was, 1-Bit wäre
IHMO entweder nicht turing-mächtig oder spart nix gegenüber 4-Bit.
cpu_builder schrieb:> Wie sieht es denn mit den Zyklen aus? Warum werden nicht> fetch->decode->execute in einem Schritt erledigt?
Weil Du dann Taktraten im niedriegen kHz Bereich hättest, und keine MHz.
Außerdem müsste man sich ernsthaft Gedanken über Glitches machen.
aus dem Wiki:
"Zum 35. Jahrestag des 4004 wurde im November 2006 in Santa Clara die
Ausstellung „Intel Museum“ nahe der Firmenzentrale eröffnet. Intel hat
im Zuge dessen einen 4004 aus 2300 diskret aufgebauten Transistoren im
Maßstab 130:1 nachgebaut.[4] Das voll funktionsfähige Modell verarbeitet
zur Demonstration Programme aus dem Jahre 1971"
2300 Transistoren sind überschaubar....
hier gibt es Schaltbilder vom 4004:
http://www.4004.com/
@cpu_builder
Ich bin allerdings der Ansicht, dass Dich die praktischen Probleme beim
Aufbau aus realen Bauelementen auf Transistorebene sehr in Anspruch
nehmen werden.
Energie, Zeit und Nervenaufwand beim Aufbau (und glaube mir, Du wirst
schimpfen wie ein Rohrspatz) sind (in etwa) vergleichbar mit dem Aufwand
für das Verständnis von CPUs.
Ich würde Dir daher doch raten, so eine Schaltung lieber zu simulieren.
Das hätte den Vorteil, dass Du Dich auf die logische Funktion
konzentrieren kannst.
Thomas V. schrieb:> aus dem Wiki:> "Zum 35. Jahrestag des 4004 wurde im November 2006 in Santa Clara die> Ausstellung „Intel Museum“ nahe der Firmenzentrale eröffnet. Intel hat> im Zuge dessen einen 4004 aus 2300 diskret aufgebauten Transistoren im> Maßstab 130:1 nachgebaut.[4] Das voll funktionsfähige Modell verarbeitet> zur Demonstration Programme aus dem Jahre 1971">> 2300 Transistoren sind überschaubar....>> hier gibt es Schaltbilder vom 4004:> http://www.4004.com/
Da werden reine MOS-Transistoren verwendet. Wer glaubt er könnte da
billige VDMOS-Transistoren einsetzen der irrt, denn hier wird ein Teil
der Transistoren als Transfergate verwendet. Dazu werden echte
MOS-Transistoren benötigt die heutzutage fast niemand mehr einsetzt und
entsprechend teuer wird das.
Wenn man das dann nur nachbaut hat man übrigens noch gar nichts über die
Funktion gelernt. Die muss man erst mit "reverse engineering" aus dem
Schaltplan herausfinden. Wer das kann der spendiert besser gleich die
Zeit in seine eigene CPU.
Wahrscheinlich hast du Recht. Dennoch habe ich Probleme beim Erstellen
eines Blockschaltbildes.. Was genau benötigt eine CPU?
Taktquelle, Befehlszähler, ALU, Register inkl. Befehlsregister,
Befehlsdekoder, etwas zum Ansteuern des Speichers...
Kann mir jemand da helfen?
Theor schrieb:> Wobei ... Naja ... Ich erinnere mich, dass wir damals (schon länger her)> auch solche "Träume" hatten. :-)
Ja, ich will's nicht leugnen. :) Gemacht habe ich's aber nicht. (Und
das ist auch gut so!)
Zum Verständnisgewinn würde ich einen anderen Weg empfehlen:
- Bau auf Transistorebene einzelne Gatter und Flipflops auf.
- Bilde daraus kleine (nicht zu komplexe) Systeme.
- komplexere Systeme würde ich dann aus Logik-ICs zusammenbasteln,
und wenn es dann richtig komplex werden soll:
- Doch FPGAs.
Aus meiner Sicht ist das der effizienteste Weg, um Erkentnisse zu
gewinnen.
Eine komplette CPU aus Einzeltransistoren: Ich würd's lassen (aber jedem
das seine!).
PS: Eine CPU auf der Basis von Logik-ICs, solche Projekte gibt es/gab es
schon. Z.B. dieses:
http://www.mycpu.eu/
(Einer Life-Vorführung davon durfte ich vor Jahren auf dem
Bralug-Treffen an der Uni-Potsdam beiwohnen.)
> Was genau benötigt eine CPU?> Taktquelle, Befehlszähler, ALU, Register inkl. Befehlsregister,> Befehlsdekoder, etwas zum Ansteuern des Speichers...
Damit bist du bei den bekannten Architekturen. Aber du wolltest doch
eine komplett eigene bauen. Dann lies Dich wirklich mal zum Turing
Automat ein, nur so als Anreiz, dass man auch völlig anders "Computen"
kann, als es die derzeit üblichen Mikrocomputer tun.
M.A. S. schrieb:> - Bau auf Transistorebene einzelne Gatter und Flipflops auf.> - Bilde daraus kleine (nicht zu komplexe) Systeme.> - komplexere Systeme würde ich dann aus Logik-ICs zusammenbasteln,> und wenn es dann richtig komplex werden soll:> - Doch FPGAs
So mache ich es! Zurzeit habe ich keine Elektronik zur Hand, deshalb
denke ich gerade über eine eigene, eher exotische Architektur nach...
Nur muss es ja am Ende funktionieren... i2c habe ich schon gebitbanged,
aber wie man den Sendeablauf in Hardware macht... ein Mysterium
cpu_builder schrieb:> Wahrscheinlich hast du Recht. Dennoch habe ich Probleme beim Erstellen> eines Blockschaltbildes.. Was genau benötigt eine CPU?>> Taktquelle, Befehlszähler, ALU, Register inkl. Befehlsregister,> Befehlsdekoder, etwas zum Ansteuern des Speichers...>> Kann mir jemand da helfen?
Ich würde Dir raten, an dieser Stelle nicht vom Ganzen ins Einzelne zu
gehen, sondern umgekehrt.
Und zwar weil: (Ich gehe da von meinen eigenen Lernfortschritten aus.
Das muss für Dich nicht so sinnvoll sein.) Ich vermute mal, Du hast Dir
solche Blockschaltbilder von CPUs schon angeschaut. Du weisst, -
vermutlich -, an sich, wie eine Taktquelle im Detail aufgebaut ist; ein
Zähler, ein Register. Auch eine ALU ist Dir zumindest grundsätzlich
klar. Ich vermute weiter, Dir ist "im Prinzip" klar, wann, welche Daten
woher und wohin transportiert werden. (Falls nicht, schreibe das bitte).
Es gibt an dieser Stelle mindestens zwei Wege auf denen Du, meiner
Meinung nach, sinnvoll weitermachen kannst. Die ALU oder der
Datentransport.
Der Datentransport ist deswegen interessant, weil er relativ schnell zu
den Grundlagen der Befehlsabarbeitung (also dem Befehlsdekoder) führt.
Nimm einmal an, Du hast drei Register, einen Eingabeport, einen
Ausgabeport und eine Taktquelle. Die Aufgabe ist, die Daten vom
Eingabeport, zu dem ersten Register, von dort zu dem zweiten, von dort
zu dem dritten und von dort zum Ausgabeport zu leiten.
Ich würde Dir raten, sowas in einer Simulation zu versuchen.
Dann die ALU. Beschränke Dich vielleicht zunächst auf einfache
Operationen wie die Negation und im zweiten Schritt auf Operationen wie
"Oder", "Und" oder "XOR".
Versuche mal, in Simulation, eine Schaltung zu bauen, die eine von Vier
Operationen ausführt. Im Falle der Negation mit nur einem Operanden,
sonst mit zwei Operanden.
Dann: Ausgehend von den Versuchen über den Datentransport, nimm an, Du
hast einen zweiten und einen dritten Eingangsport, nimm an, Du müsstest
Daten von zwei Eingangsports zu zwei Register und im zweiten Schritt von
dort zur ALU transportieren. Gleichzeitig wird am dritten Eingangsport
die Operation der ALU ausgewählt und in einem Register gespeichert (muss
also von dort zur ALU weitergegeben werden).
Vielleicht fängst Du, bevor Du Simulationen aufbaust, in beiden Fällen
mit einem Blockdiagramm an und überlegst Dir einen zeitlichen Ablauf.
Wenn Du das hier postest, werde ich das kommentieren und Fragen dazu
beantworten. (Je nachdem wie ich Zeit habe, allerdings).
Viel Erfolg.
Für solche Spielereien bietet sich das kostenlose aber mächtige Logisim
an.
Das bietet alle erdenklichen Gatter, Tasten, Taktquellen, RAM und ROM.
Man kann auch einzelne Schaltungen zu einer Blackbox kapseln, welche
dann wieder mit anderen verbunden werden kann.
So kann man beispielsweise erst die ALU, dann RAM, dann Statemachine und
was noch so dazu gehört ans Laufen kriegen und separat "durchspielen".
Daraus kann man, wenn man DANN noch Lust hat, recht einfach mit 74er
Logik auf die Platinenebene wechseln.
Es gibt auch Modelle von fast allen 74er zum Download, frag mal Google
nach dem Link dazu - ich habe in gerade nicht parat.
Alle Jahre wieder...
Ich hatte beruflich viel mit auszubildenden Elektrotechnikern zu tun,
und darunter waren auch immer einige Hypergeeks, die den Biss für solche
Projekte und mehrere Jahre Zeit in der Reserve hatten.
Ich mach's mal kurz: Die Komplexität wird so klassischerweise zu 90%
überschätzt, der Frustration zu 75% nachgegeben.
Optionen:
a) Du machst dir die Sache so einfach wie möglich:
- Modelliere den Kram erst mal funktional in Python/MyHDL
- Mach die Sache synthesefähig für's FPGA (Ausgabe in Verilog oder VHDL)
und lass es auf einem Billigboard (30€) laufen
b) Mach dir das Leben schwer und beginne mit asynchronen TTL-Designs a
la MyCPU, dabei wirst du viele schmerzhafte Lernprozesse durchmachen
Dazwischen gibt es eine Menge andere Wege, mit denen man sich gehörig
verzetteln kann. Dementsprechend performen viele der Hyper-Geeks in der
Industrie schlecht, weil sie sich mit ihrem ganz eigenen Schädel in
Details verzetteln. Schadet nicht, wenn du klar weisst, wo du
stehst/stehen willst.
Wenn du mit a) angefangen hast, und dein Konzept verifiziert hast,
kannst du immer noch den Weg gehen, alles mit diskreter Logik aufzubauen
- und dich dann entscheiden, ob du es als Lötübung oder als Geekprojekt
aufziehst (a la 'because I can').
Lustig ist das schon, einem einfachen 6502-Redesign auf einem
pizzagrossen PCB beim Blinken zuzusehen. Aber es gibt SO viele davon...
Danke Theor!
Deine Beschreibung dessen, was ich weiß und was nicht, ist exakt
zutreffend! Nur eine Frage bevor ich die Situationen versuche zu lösen:
[Frage 1]
Was ist der große Datenbus, mit dem fast alles in CPUs verbunden ist, in
realen Schaltungen?
bidirektional? Viele kleine Verbindungen, deren Gesamtheit den Bus
ergibt? Oder zapfen die vielen Teile die Informationen im Bus an, um zu
funktionieren?
[Frage 2]
Und werden Befehl+Daten parallel oder nacheinander über den Bus
gesendet?
[letzte Frage 3]
Was für Arten von Registern sind sinnvoll?
Also dass ich, auch wenn Addition das einzige hardwareseitig vorhandene
außer Logik ist, Subtraktion, Multiplikation,... dennoch machen kann?
Brauche ich Carry-Bits,...? Wieviele?
Diese Fragen habe ich mir schon lange gestellt. Antworten darauf würden
mir sehr helfen.
Und jetzt mache ich erstmal die Hausaufgaben von Theor ;)
Theor schrieb:> Dir ist "im Prinzip" klar, wann, welche Daten woher und wohin> transportiert werden. (Falls nicht, schreibe das bitte).
Im Prinzip Ja, im Detail nein...
Der Gigatron ist nen vollständiger Computer (inkl CPU) aus TTL-ICs
(74er):
https://gigatron.io/
Gibt auch einiges dazu auf YouTube (unter anderem im EEVBlog[1]).
MMn ist es nicht so sinnvoll, nen Computer ausschließlich aus diskreten
Transistoren aufzubauen. Nach den ersten paar Logikgattern ist einem
klar, wie sie aufgebaut sind und danach ist es nur noch mühsam. Mittels
der 74er-Logik-ICs kann man sich mehr auf den Aufbau eines Computers
konzentrieren als auf den der einzelnen Gatter.
[1] https://www.youtube.com/watch?v=6vbI-r5aXJI
cpu_builder schrieb:> Danke Theor!>> Deine Beschreibung dessen, was ich weiß und was nicht, ist exakt> zutreffend! Nur eine Frage bevor ich die Situationen versuche zu lösen:>
Gut. Danke für die Antwort.
> [Frage 1]> Was ist der große Datenbus, mit dem fast alles in CPUs verbunden ist, in> realen Schaltungen?>> bidirektional?
Das ist eine der Möglichkeiten. Soweit mein Überblick reicht, die
häufigste, weil platzsparendste. Andererseits macht das eine
Ablaufsteuerung notwendig.
> Viele kleine Verbindungen, deren Gesamtheit den Bus> ergibt?
Nein.
> Oder zapfen die vielen Teile die Informationen im Bus an, um zu> funktionieren?
Ja. Wer wann "anzapft" ist eine Aufgabe der Ablaufsteuerung oder in
anderen Wort der "Befehlsdekodierung".
> [Frage 2]> Und werden Befehl+Daten parallel oder nacheinander über den Bus> gesendet?
Sowohl als auch. Beides kommt vor. Im AVR z.B. sind Konstanten Teil
bestimmter Befehle. Das muss aber nicht zwingend so sein. Der 6502 z.B.
hat das nicht.
> [letzte Frage 3]> Was für Arten von Registern sind sinnvoll?> Also dass ich, auch wenn Addition das einzige hardwareseitig vorhandene> außer Logik ist, Subtraktion, Multiplikation,... dennoch machen kann?> Brauche ich Carry-Bits,...? Wieviele?
Das ist zu summarisch gefragt um es abschliessend zu beantworten.
Im Prinzip lassen sich alle denkbaren Funktionen aus einer Kombination
von zwei Operationen zusammensetzen. 1. Der Negation und 2. entweder
"Und" oder "Oder" oder "Exklusiv-Oder".
Es müsste also z.B. kein Übertragsbit physisch als Flip-Flop existieren.
Sinnvoll ist allerdings, einiges in Hardware zu ermöglichen. Das geht
einfach schneller. Nur kann man diese Absicht nicht endlos weit treiben,
da die CPU damit immer grösser und teurer wird.
Auch Sand (oder eher Silizium) kostet Geld.
> Diese Fragen habe ich mir schon lange gestellt. Antworten darauf würden> mir sehr helfen.>> Und jetzt mache ich erstmal die Hausaufgaben von Theor ;)
Gut. Da wird sich, wenn Du über Deine Ergebnisse nachdenkst, einiges von
selbst beantworten.
cpu_builder schrieb:> Zum Datentransport:
Also "formal" ist die Aufgabe damit erfüllt. :-)
Allerdings zeigt das nicht, wie und wann der Transport zwischen den
Registerstufen gesteuert wird. Das ist aber gerade das, was
interessiert, weil es zur Befehlsausführung führt.
Nimm mal folgende Vorlage bitte:
+------+
| Takt +->-
+------+
+----------+
-->-+ Register +->--
+----------+
Welche Signale brauchst Du noch am Register und wie erzeugst Du sie aus
der Taktquelle?
Theor schrieb:> Allerdings zeigt das nicht, wie und wann der Transport zwischen den> Registerstufen gesteuert wird. Das ist aber gerade das, was> interessiert, weil es zur Befehlsausführung führt.
An sich doch nur die 3 FlipFlops im Schieberegister. Oder?
Welche weiteren Signale? Sorry, aber im Gebiet von Registern/CPUs/...
bin ich Anfänger, keine Ahnung was da fehlt. Ich könnte die FlipFlips,
die das Schieberegister bilden, zeichnen, aber das bringt ja kein
weiteres Signal hervor
cpu_builder schrieb:> Theor schrieb:>> Allerdings zeigt das nicht, wie und wann der Transport zwischen den>> Registerstufen gesteuert wird. Das ist aber gerade das, was>> interessiert, weil es zur Befehlsausführung führt.>> An sich doch nur die 3 FlipFlops im Schieberegister. Oder?>> Welche weiteren Signale? Sorry, aber im Gebiet von Registern/CPUs/...> bin ich Anfänger, keine Ahnung was da fehlt. Ich könnte die FlipFlips,> die das Schieberegister bilden, zeichnen, aber das bringt ja kein> weiteres Signal hervor
Hm. Mit dem Ziel einer CPU im Auge sollte der Mechanismus universeller
als ein Schieberegister sein. Ein Schieberegister ist eine
spezialisierte Form bei der bei genau einem Ereignis des Taktes, die
Daten vom Eingang in das erste FF, vom ersten FF in das zweite etc.
übernommen werden und das gleichzeitig für alle FFs.
In einer CPU ist aber die Abfolge möglicherweise zeitlich voneinander
getrennt. Oder es sollen nur Daten vom Eingang ins erste Register und
zwei Sekunden später Daten vom zweiten ins dritte Register übernommen
werden ohne das die anderen Register verändert werden.
Man muss also die Erzeugung der Steuersignale für die Register von der
Struktur des Datenflusses trennen. Im Effekt muss es möglich sein, die
Signale zur Datenübernahme (und später auch zur Ausgabe) getrennt
voneinander zu steuern. Ein Schieberegister ist aber per Definition ein
Ganzes, bei dem das nicht möglich ist.
Was Register und Flip-Flops betrifft, solltest Du Dich informieren.
Allgemein gibt es mindestens ein Signal, das bei einer Flanke oder einem
Zustand die Eingangssignale speichert. Im Detail sind das die
verschiedenen Flip-Flops. Also RS-FF, oder D-FF oder andere. Gehe mal
von einem flankengesteuerten D-FF aus.
>Was für Arten von Registern sind sinnvoll?>Also dass ich, auch wenn Addition das einzige hardwareseitig vorhandene>außer Logik ist, Subtraktion, Multiplikation,... dennoch machen kann?>Brauche ich Carry-Bits,...? Wieviele?
Rein theoretisch braucht man sehr wenig, nämlich einen Speicher und eine
ALU, die lediglich eine einzige Instruktion ausführen kann, etwa
"subleq" für "SUBtract and branch if Less-than or EQual to zero" [*].
Wie Patterson und Hennessy zeigten ist ein solcher OISC (one instruction
set computer) turing-vollständig und damit prinzipiell genauso mächtig
wie Dein PC. Ein Programm, das etwas "Vernünftiges" tut, etwa Primzahlen
berechnet, würde allerdings in einem aberwitzig großen Code resultieren.
Hier findest Du mehr Infos dazu, einschließlich einiger Beispiele für
die Synthese höherer Instruktionen aus "subleq"s:
https://en.wikipedia.org/wiki/One_instruction_set_computerhttps://esolangs.org/wiki/OISC
-------------------
[*] Subleq is a simple one instruction language. Each implied subleq
instruction has 3 memory address operands "A, B, C". The execution of
one instruction subtracts the value in memory address A from the value
in memory address B, assigning the result into memory address B. If the
subtraction result assigned into memory address B is less than or equal
to zero, the execution jumps to the memory address C; otherwise it
continues to the next instruction. Each value has its own address so
each instruction is three addresses long.
(Quelle: https://esolangs.org/wiki/Subleq)
LostInMusic schrieb:> Subleq
Sehr interessant. Auch wenn ich das mit Turing nicht ganz verstanden
habe. Vielleicht kann mir jemand das ja so erklären als wäre ich ein
2jähriger? :)
Was die Aufgabe von Theor betrifft:
Ich schreibe jetzt einfach mal was ich denke (sonst kommen nur
unlogische Resultate meiner Gedankengänge an):
Register sind FlipFlops
D-FlipFlops
Und übernehmen bei einer Taktflanke den aktuellen Wert am D-Eingang
3 davon habe ich
Jetzt brauche ich einen Multiplexer der je einen D-Eingang nach "außen"
führt und einen zweiten Multiplexer, der den Port oder das vorherige
Register auswählt.
Am Ende wird das Register 3 über den einen Multiplexer an Port B
(Ausgabe) geführt.
Jetzt müssen die Multiplexer gesteuert werden. Aber ich weiß ja nicht ob
die einfach von 1-4 durchlaufen oder ob sie eine andere Art Steuersignal
brauchen... Die sind auch eine Art Mysterium für mich
Jetzt ist G. schrieb:> Ich empfehl mal das Studium einer ALU : SN74xx181, SN74xx283, und dann> sollte deren Funktionalitaet klar sein
Das ist jetzt mein nächster Schritt, aber die Register beschäftigen mich
noch
cpu_builder schrieb:> So sehr ich solche Rätselaufgaben auch mag, bin ich jetzt ratlos und> benötige einen Tipp..
Das mag auch an meinem didaktischen Ansatz liegen. Vielleicht passt er
für Dich nicht.
Ich bin nämlich gerade versucht zu sagen: "Mach es nicht so
kompliziert". Aber zuvor habe ich gesagt: "Mach es ein wenig
komplizierter". Und das geht doch nicht! Oder doch? :-)
Naja.
Also ich habe mir das so vorgestellt.
Den Zähler mit Logik hätte ich mir vielleicht etwas detaillierter
gewünscht, als ich ihn gezeichnet habe, aber das ist nebensächlich.
[Mod] ASCII-Zeichnungen neu formatiert.
Aus den Zeichnungen werde ich nicht ganz schlau.. was || oder ||| z.B.
bedeutet
Aber du meinst
Eingabeport->-Register1->-Register2->-Register3->-Ausgabeport
Und Übernahmesteuerung über einen durch FlipFlops als Zähler verzögerten
Takt
Oder?
cpu_builder schrieb:> Aus den Zeichnungen werde ich nicht ganz schlau.. was || oder ||| z.B.> bedeutet
Öh. Wo kommt da "||" oder "|||" vor?
Wie auch immer. "|", "_" und "-" sind einfach Linien einer Zeichnung.
"^" und ">" sind Pfeile. "+" sind Ecken.
> Aber du meinst>> Eingabeport->-Register1->-Register2->-Register3->-Ausgabeport>> Und Übernahmesteuerung über einen durch FlipFlops als Zähler verzögerten> Takt>> Oder?
Richtig.
Ich will auch eine CPU bauen. Am besten einen Pentium...
Habe aber null Ahnung. Reicht eine 9V Batterie oder bruuche ich ein
AKW?
Oh Gott ...schmeiß Hirn!
Roger
cpu_builder schrieb:> ich würde gerne eine CPU mit einer eigenen Architektur, die möglichst> wenige Transistoren benötigt, diskret selber bauen, um die grundlegende> Funktionsweise besser zu verstehen
Kann man machen, ist eher doof. Ich empfehle dir stattdessen einen
Simulator. Vor vielen Jahren gab es mal KLogic (als Teil von KDE), mit
dem man sowas machen konnte.
Das wäre deinem Wissensstand angemessen, und wenn du in diesem Simulator
den gesamten digitalen Kram verstanden und korrekt umgesetzt hast,
kannst du dich in die analoge Welt mit echten Transistoren begeben. Und
du musst dazu nichts wegschmeißen.
cpu_builder schrieb:> Der Einfachheit halber sollen die Befehle nicht in einem RAM> landen, sondern direkt aus dem ROM.
Das spielt aus Sicht der CPU keine Rolle. Die eigentliche Logik kippt
eine Adresse und ein paar Steuerdaten auf den Bus und erwartet, dass die
restliche Schaltung damit klarkommt.
Ein ROM wird genauso angesprochen wie ein SRAM.
cpu_builder schrieb:> Da EEPROM Chips wie der 24AA16I/P
Ja, den zu benutzen wäre reichlich bescheuert.
Nimm ein paralleles EEPROM (oder EPROM), damit ist das kein Problem. Du
kannst da sogar einen Großteil deiner Logik reinstopfen.
Das ROM (bzw. das RAM) diskret aufbauen zu wollen, ist größenwahnsinnig.
cpu_builder schrieb:> Und aufgrund des Transistorbedarfs nur> 1-bit Register -> nur Halb-Addierer nötig.
Damit ist das Teil nicht nur extrem aufwändig, sondern auch extrem
ineffizient. Du brauchst nämlich viele Befehle, um deine winzigen
Register auszugleichen.
> Die Befehle sind sicher länger als 1 bit, den Befehlszähler> würde ich 3bit oder 4bit lang machen, also 8 oder 16> Befehle max.
Damit ist das Teil nicht nur extrem aufwändig und extrem ineffizient,
sondern auch extrem nutzlos. Denn du verbietest die Möglichkeit, "viele
Befehle" auszuführen.
Daraus folgt, dass du effektiv auch keine Peripherie ansteuern kannst.
Ohne Ein- und Ausgaben bringt der Spaß aber auch nichts...
cpu_builder schrieb:> Wie sieht es denn mit den Zyklen aus? Warum werden nicht> fetch->decode->execute in einem Schritt erledigt?
Das kann man schon machen. Ergibt halt eine geringere Auslastung der
Hardwareeinheiten und eine geringe Taktfrequenz. Für dich wäre das ein
besserer Ansatz.
cpu_builder schrieb:> Hat jemand Schaltungstipps, wie ich die ALU u.ä. Teile mit wenig> Transistoren realisieren kann? Oder wie grundlegend simple Architekturen> aufgebaut sind?
Eine CPU ist ein großer Zustandsautomat.
Vorne fallen einige Dinge rein (z.B. aktuelle Instruktion, die
Operanden, irgendwelche Flags, die derzeitigen Registerwerte, ...) und
hinten fallen einige Dinge raus (z.B. die Adresse der nächsten
Instruktion und die Steuersignale, die Rechenergebnisse, die nächsten
Flags, die folgenden Registerwerte, ...)
Eine 2 Bit-CPU mit 4 simplen Befehlen und 2 Registern sollte sich in ein
paar EPROMs implementieren lassen. Da braucht man dann keine große Logik
für. Im Prinzip trägst du in die EPROMs alle möglichen Ein- und Ausgaben
ein, statt irgendwas zu berechnen.
Für "mehr Bits", "mehr Register", "mehr Befehle" usw. explodiert der
Zustandsraum aber so schnell, dass man aber lieber Logik benutzen
möchte.
Habe gerade keinen PC zur Hand. Auf dem Smartphone sieht es seltsam aus.
Also ... Nächste Aufgabe für mich der Teil mit der ALU? Logikgatter
kenne ich in- und auswendig. Inzwischen ist mein Ziel zu "CPU aus
Logik-ICs und ALU-IC bauen" mutiert. Welche ALU-ICs sind denn heutzutage
leicht zu bekommen?
Dann wird das Projekt realistischer.
Zumindest weiß man bei denen was drin ist.
Meine Ziele:
1. Theor's zweite Aufgabe lösen (undzwar diesmal richtig)
2. Architektur entwickeln (Blockschaltbild)
3. Schaltplan (mit Logikgattern) entwickeln
4. Auf Steckbrettern Teile aufbauen und auf Funktionalität prüfen
5. Zusammenbauen
Dabei benötige ich weiterhin Hilfe von euch. Danke auf jeden Fall dass
ihr mich bis hierher gebracht habt (v.a. Theor)!
Bevor du dich beim Entwickeln deiner eigenen CPU Architektur in noch
mehr Anfängerfragen verzettelst, empfehle ich Dir dringend, zunächst
wenigstens eine einfache bestehende CPU zu analysieren.
Ich empfehle den 6502, Z80 oder 8051. Die sind noch gut überschaubar.
cpu_builder schrieb:> Habe gerade keinen PC zur Hand. Auf dem Smartphone sieht es seltsam aus.
Ach so.
> Also ... Nächste Aufgabe für mich der Teil mit der ALU? [...]
Das würde ich so nicht sehen.
Ich empfehle Dir, Dich erst mal ausführlich mit der ersten Aufgabe zu
beschäftigen. Variiere die Struktur. Nimm z.B. an Du hättest einen Bus
statt einer einfachen sequentiellen Struktur.
Also ein Eingang, drei Register, ein Ausgang. Was fehlt noch an
Einheiten? Welche Steuersignale brauchst Du?
Oder einen Baum.
Dann: Was müsstest Du tun, damit Du die Datenpfade mit einem binären
Wort steuern kannst? D.h. Du gibst einen der möglichen Datenpfade vor
und die vom Takt getriebene Logik durchläuft die erforderlichen
Schritte. Das nennt übrigens einen Sequenzer. Deine Idee mit den
Multiplexern oben lässt sich für so etwas verwenden.
Dann würde ich mir mal konkrete, einfach CPUs anschauen. Vom AVR gibts
es glaube ich so eine Blockzeichnung und von einigen anderen CPUs auch.
Spiel da mal gedanklich ein paar Daten-Transporte zwischen Registern
durch.
cpu_builder schrieb:> Habe gerade keinen PC zur Hand. Auf dem Smartphone sieht es seltsam aus.
Das liegt daran, dass die Webseite bei Smartphones eine
Proportionalschrift verwendet.
Aus diesem Grunde solltest Du ASCII-Zeichnungen in
1
[pre]
2
.....
3
[/pre]
einfassen. Damit werden sie mit einem Font fester Schriftbreite
ausgegeben und auch weitestgehend nicht umbrochen.
Ich habe Deinen obigen Beitrag mal dementsprechend angepasst, s.o.
Theor schrieb:> Bus statt einer einfachen sequentiellen Struktur
Okay
Theor schrieb:> Also ein Eingang, drei Register, ein Ausgang.
Wie zum Anfang
Theor schrieb:> Was fehlt noch an Einheiten? Welche Steuersignale brauchst Du?
Also alle hängen an demselben Bus.
Dann brauche ich AND-Gatter.
Die schalte ich zwischen die Ein- und Ausgänge der FlipFlops (Register)
und den Bus
und mit einer Control Unit / Steuerwerk sende ich entsprechend an den
zweiten AND-Eingang "HIGH", wenn ich den dort befindlichen Eingabe-Port
z.B. mit einem Register-Eingang verbinden möchte.
Und damit das nicht so kompliziert in Logikform gebaut werden muss, bzw.
es updatefähig ist, gibt es den Mikrocode, oder?
Wenn das alles richtig bis hier ist, habe ich es verstanden
> Dann brauche ich AND-Gatter.> Die schalte ich zwischen die Ein- und Ausgänge der FlipFlops (Register)
Wieso das? Die D-Register übernehmen die Daten vom Bus bei einer
Taktflanke bzw. Impuls. Und sie liefern den gespeicherten Wert ab, wenn
der Output-Enable Pin aktiviert wird.
Sag bloß, du kennst den 74HC573 nicht? Den würde ich jedenfalls als
Register benutzen.
cpu_builder schrieb:> Theor schrieb:>> Bus statt einer einfachen sequentiellen Struktur>> Okay>> Theor schrieb:>> Also ein Eingang, drei Register, ein Ausgang.>> Wie zum Anfang>> Theor schrieb:>> Was fehlt noch an Einheiten? Welche Steuersignale brauchst Du?>> Also alle hängen an demselben Bus.> Dann brauche ich AND-Gatter.>> Die schalte ich zwischen die Ein- und Ausgänge der FlipFlops (Register)> und den Bus>> und mit einer Control Unit / Steuerwerk sende ich entsprechend an den> zweiten AND-Eingang "HIGH", wenn ich den dort befindlichen Eingabe-Port> z.B. mit einem Register-Eingang verbinden möchte.>> Und damit das nicht so kompliziert in Logikform gebaut werden muss, bzw.> es updatefähig ist, gibt es den Mikrocode, oder?>> Wenn das alles richtig bis hier ist, habe ich es verstanden
Naja. Wie gesagt. Mach eine Zeichnung. Dann sieht man es ja, ob Du es
verstanden hast.
Das mit dem Mikrocode lassen wir mal am besten aussen vor. Das ist ein
späterer Schritt.
Du solltest um Schaltwerke realisieren zu können in boolscher Algebra
mindestens befriedigend fähig sein.
D.h. eine Wertetabelle aufstellen können, eine boolsche Gleichung
aufstellen oder aus der Wertetabelle gewinnen können, die disjunktive
und konjunktive Normalform aufstellen können, sie vereinfachen können,
ein Karnaugh-Diagramm aufstellen und in Gleichungen umsetzen können.
Einfache Fälle bis zu drei oder vier Variablen sollten Dir irgendwann in
wenigen Minuten von der Hand gehen. Das ist Basis-Handwerk wie das
Schraubendrehen.
Theor schrieb:> Was müsstest Du tun, damit Du die Datenpfade mit einem binären Wort> steuern kannst?
Die einzelnen Bits des Wortes mit den AND-Gattern (2. Eingang, wie eine
Art "enable") verbinden? Bzw. bei dem zweiten verbundenen AND-Gatter,
das low-aktiv sein soll, noch NOT davor?
Theor schrieb:> Du gibst einen der möglichen Datenpfade vor und die vom Takt getriebene> Logik durchläuft die erforderlichen Schritte.
Und das Steuerwerk muss noch im Programmzähler den Zyklus (fetch,
decode, execute, store) berücksichtigen
cpu_builder schrieb:> Theor schrieb:>> Was müsstest Du tun, damit Du die Datenpfade mit einem binären Wort>> steuern kannst?>> Die einzelnen Bits des Wortes mit den AND-Gattern (2. Eingang, wie eine> Art "enable") verbinden? Bzw. bei dem zweiten verbundenen AND-Gatter,> das low-aktiv sein soll, noch NOT davor?>> Theor schrieb:>> Du gibst einen der möglichen Datenpfade vor und die vom Takt getriebene>> Logik durchläuft die erforderlichen Schritte.
Ein Bild sagt mehr als tausend Worte! :-)
Im übrigen wirst Du vermutlich mit dem AND nicht glücklich. Das siehst
Du dann wahrscheinlich schon von selbst in der Skizze.
Verbal ist so vieles möglich, was in einer Skizze ganz offensichtlich
nicht geht, weil dort der Gesamtzusammenhang offenbar wird. Verbal kann
man immer nur einen Teilaspekt in den Focus rücken.
Versuche es mit der Skizze. Das sind alles Schritte, die Du machen
solltest, denke ich.
Jürgen S. schrieb:> Ben Eater hat ein schönes Projekt, eine CPU aus Logikbausteinen:> https://eater.net/8bit/
Hmm. Videos über Videos. Schaltpläne "coming soon".
Wo wird das hinführen?
cpu_builder schrieb:> Welche weiteren Signale? Sorry, aber im Gebiet von Registern/CPUs/...> bin ich Anfänger, keine Ahnung was da fehlt.> "eine CPU mit einer eigenen Architektur"
Meinst du, du bist bereit dafür?
Du versuchst einen Hürdenlauf bevor du überhaupt stehen kannst.
fang an, AND OR NOT ... "diskret selber [zu] bauen"
in einer Art "die möglichst wenige Transistoren benötigt"
dann einen HA
dann FlipFlops, SR/D/JK/T
dann Register, dann einen n*m Speicher
weiter mit Schieberegister, Zähler (Up/Down)
MUX/DeMUX
dann den ganzen Packen nochmal, diesmal aber taktgesteuert
dann klöter das peu a peu beisammen
erst n*HA->VA
dann die Register davor und dahinter, Speicher dran, Zähler dran,
Taktgenerator dran
und dann im 0,x Hz Takt alle Varianten durchprobieren, viel GLÜCK dabei!
Und wenn du das hast, darfst du Steckbrücken als Eingabe durch ne
Tastatur und LEDs als Ausgaben durch LCDs ersetzen, vorher
DBC/BCD-Wandler zusammenlöten
Ich empfehle dann noch einen Blick auf
https://www.youtube.com/watch?v=z71h9XZbAWYhttps://www.youtube.com/watch?v=lNa9bQRPMB8
und www.megaprocessor.com
wenn du das alles beisammen hast, hast du noch nicht mal einen 4001.
Ich wünsch Dir aber viel Erfolg und Ausdauer und eine steile Lernkurve.
Theor schrieb:> Ein Bild sagt mehr als tausend Worte! :-)
Ich habe heute nicht mwhr genug Zeit dafür. Morgen sende ich ein Bild
davon, was ich gezeichnet habe.
Wieso geht AND nicht? Nicht dass ich alles umsonst zeichne...
cpu_builder schrieb:> Theor schrieb:>> Ein Bild sagt mehr als tausend Worte! :-)>> Ich habe heute nicht mwhr genug Zeit dafür. Morgen sende ich ein Bild> davon, was ich gezeichnet habe.>> Wieso geht AND nicht? Nicht dass ich alles umsonst zeichne...
Naja. So viel ist das ja nicht. Ausserdem sind Fehler wesentlich
lehrreicher als auf Anhieb Funktionierendes.
Aber wenn ich Dich richtig verstehe, und Du die Bus-Version zeichnen
willst, dann werden die Ausgänge mehrerer AND-Gatter zusammen
geschaltet.
Falls das so ist: Was passiert, wenn ein AND-Gatter eine log. '1' und
ein anderes eine log. '0' ausgeben will? Das gibt Aua!
Stefanus F. schrieb:> getaktete Speicherzellen in der richtigen Reihenfolge taktet
Also so etwas wie
1000
0100
0010
0001
1000
0100
was immer weiterläuft?
Theor schrieb:> Falls das so ist: Was passiert, wenn ein AND-Gatter eine log. '1' und> ein anderes eine log. '0' ausgeben will? Das gibt Aua!
Aber nur wenn man einen IC als Vorlage für den diskreten Aufbau
verwendet. Praktisch ausgeführte RTL / DTL wie sie in den 60er Jahren
gebaut wurde kann ausgangsseitig problemlos wired -OR oder -ANDs bilden.
Theor schrieb:> Naja. So viel ist das ja nicht. Ausserdem sind Fehler wesentlich> lehrreicher als auf Anhieb Funktionierendes.
Dann sieh nochmal vor 20 Uhrvorbei. Ich mache den Schaltplan noch heute.
MIT ANDs!!
Theor schrieb:> Aber wenn ich Dich richtig verstehe, und Du die Bus-Version zeichnen> willst, dann werden die Ausgänge mehrerer AND-Gatter zusammen> geschaltet.
Nein, je Ausgang+Eingang wie benötigt
Ja mach das mal. Nach der Zeichnung siehst die Situation vielleicht
schon viel besser aus. Deine Textbeiträge stimmen mich bisher eher
hoffnungslos, ich habe nämlich nicht das Gefühl, dass du weißt, wovon du
da schreibst. Aber das könnte auch schlicht eine sprachliche Sache sein.
Die primäre Sprache der Elektronik ist jedenfalls der Schaltplan, darin
kann man solche Zusammenhänge gewiss deutlicher formulieren.
Hast du schon einmal ein flankengesteuertes Flipflop aus Transistoren
oder Relais gebaut? Also selber entwerfen, nicht einfach nur nachbauen.
Mach das mal, könnte sehr lehrreich sein.
https://de.wikipedia.org/wiki/Flipflop#Taktzustands-_und_taktflankengesteuerte_Flipflops
cpu_builder schrieb:> Und das Steuerwerk muss noch im Programmzähler den Zyklus (fetch,> decode, execute, store) berücksichtigen
Vorhin schriebst du von "fetch, decode, execute" und jetzt von "fetch,
decode, execute, store". Lege dich mal irgendwo fest.
Und nein, du brauchst überhaupt keine Zyklen machen.
Du kannst die drei Dinge auch gnadenlos hintereinanderschalten.
cpu_builder schrieb:> Ich habe heute nicht mwhr genug Zeit dafür. Morgen sende ich ein Bild> davon, was ich gezeichnet habe.
Du wirst noch echt viel Zeit für dein Projekt brauchen...
cpu_builder schrieb:> Wieso geht AND nicht? Nicht dass ich alles umsonst zeichne...
...und dabei noch so dermaßen viele Fehler und falsche Zeichnungen
machen, dass es auf ein Bild mehr oder weniger auch nicht ankommt.
Ich verweise nochmals auf Programme wie z.B. KLogic, wo man Gatter
einfach verdrahten kann und sieht, was eigentlich passiert.
Stefanus F. schrieb:> Hast du schon einmal ein flankengesteuertes Flipflop aus Transistoren> oder Relais gebaut? Also selber entwerfen, nicht einfach nur nachbauen.> Mach das mal, könnte sehr lehrreich sein.> https://de.wikipedia.org/wiki/Flipflop#Taktzustands-_und_taktflankengesteuerte_Flipflops
Leider noch nicht. Das mache ich demnächst mal.
Stefanus F. schrieb:> Deine Textbeiträge stimmen mich bisher eher hoffnungslos, ich habe> nämlich nicht das Gefühl, dass du weißt, wovon du da schreibst.
Ich bin auch irgendwie hoffnungslos gestimmt. Denn in der Schule hat man
nicht mal annähernd etwas mit Elektronik gemacht, im Studium beschäftige
ich mich nicht mit CPUs und ähnlichem,... Und woher soll ich all das mal
schnell lernen? Ich weiß nur wie AND OR XOR NOT NAND NOR XNOR, RS JK D
FlipFlop, Zähler,... funktionieren... Aber wie Schaltungen in "echten"
nicht erträumten CPUs aussehen... Keine Ahnung.
S. R. schrieb:> Vorhin schriebst du von "fetch, decode, execute" und jetzt von "fetch,> decode, execute, store". Lege dich mal irgendwo fest.
Woher soll ich wissen wie CPUs das machen? Ich habe beides schonmal
gelesen
S. R. schrieb:> Ich verweise nochmals auf Programme wie z.B. KLogic, wo man Gatter> einfach verdrahten kann und sieht, was eigentlich passiert.
Ohne PC auf Android schwer machbar...
S. R. schrieb:> Vorhin schriebst du von "fetch, decode, execute" und jetzt von "fetch,> decode, execute, store". Lege dich mal irgendwo fest.
Woher soll ich wissen wie CPUs das machen? Ich habe beides schonmal
gelesen
S. R. schrieb:> Ich verweise nochmals auf Programme wie z.B. KLogic, wo man Gatter> einfach verdrahten kann und sieht, was eigentlich passiert.
Ohne PC auf Android schwer machbar... Deshalb morgen
cpu_builder schrieb:> Woher soll ich wissen wie CPUs das machen?
Es gibt Bücher, da steht sowas drin.
cpu_builder schrieb:> Ich habe beides schonmal gelesen
Das ist eine super Grundlage, um etwas völlig anderes selbst zu
entwickeln...
cpu_builder schrieb:> Ohne PC auf Android schwer machbar... Deshalb morgen
Ich fürchte, du hast mehr als ein Problem.
Allerdings würde es mich wundern, wenn es keine App für sowas gäbe.
Andererseits habe ich nicht das Gefühl, dass es dir helfen würde, wenn
ich jetzt nach sowas suche.
cpu_builder schrieb:> Kann es sein dass Prozessoren heutzutage unnötig kompliziert sind?
Das hängt davon ab, was du unter "unnötig" verstehst.
@ cpu_builder
Bleib einfach mutig und hartnäckig.
Das Ganze ist sicher etwas schwerer als Du es Dir vorgestellt hast, aber
das ist nichts Ungewöhnliches. Geht uns allen so.
S. R. schrieb:> Andererseits habe ich nicht das Gefühl, dass es dir helfen würde, wenn> ich jetzt nach sowas suche.
Du hast Recht. Ich muss dieses Zeugs mit Ablaugsteuerung,... verstehen.
S. R. schrieb:> Das ist eine super Grundlage, um etwas völlig anderes selbst zu> entwickeln...
Soll das ironisch gemeint sein?
> Denn in der Schule hat man nicht mal annähernd etwas mit Elektronik> gemacht, im Studium beschäftige ich mich nicht mit CPUs und ähnlichem> Keine Ahnung.
Was treibt Dich dann dazu, als Anfangsprojekt einen Mikrocontroller
designen zu wollen? Ich komme doch auch nicht auf Idee, ein ganzes Haus
bauen zu wollen, bloß weil ich eins bewohnen kann und weiß wie man Gips
anrührt.
> Kann es sein dass Prozessoren heutzutage unnötig kompliziert sind?
Auf jeden Fall. Jeder Mikroprozessor ist universell und kann daher mehr
als im jeweiligen Anwendungsfall nötig. Niemand würde einen
Mikroprozessor verwenden, der gerade eben ausreicht. Denn dann müsste
man ihn Anwendungsspezifisch designen und könnte später keine Änderungen
vornehmen.
Es gibt anwendungsspezifische Logikschaltungen, zum Beispiel digitale
Armbanduhren. Und es gibt programmierbare Logikschaltungen. Früher PAL
und GAL, heute eher FPGA. Das ist eher etwas für die Entwicklungsphase.
Wenn die Anwendung fertig ist, kann man sie immer noch in eine physische
Schaltung (Mikrochip) übertragen.
cpu_builder schrieb:> Soll das ironisch gemeint sein?
Ja. Du wirfst mit Worten umher, die du offensichtlich selbst nicht
verstehst. Auf Erklärungen dazu reagierst du nicht, weil du sie auch
nicht verstehst (oder trollst).
Besorge dir ein paar gute Bücher zum Thema Digitaltechnik,
Zustandsautomaten (denn nichts anderes ist eine CPU) und CPUs selbst.
Die Entwicklungen der letzten 30 Jahre spielen für dein Projekt keine
Rolle.
Beschäftige dich mit Projekten wie MyCPU oder HomebrewCPU und
verstehe, was die gemacht haben, wie sie es gemacht haben und vor
allem: warum sie es so gemacht haben, wie sie es gemacht haben.
Schau dir Projekte wie den Jugend+Technik-Computer ("JU+TE Computer",
"TINY", "COMP JU+TER"), Z1013 oder andere Selbstbau-Systeme an. Da ist
zwar eine fertige CPU drin, aber eine CPU ohne "Rest des Systems" ist
auch wertlos. Verstehe die CPUs, die in solchen Projekten verbaut sind.
Das sollte dich ein paar Wochen beschäftigen. Komme dann wieder, zeige,
dass du verstanden hast, und du hast eine Chance. Sonst ist das Projekt
jetzt schon tot.
Ich kann Dir nur dringend raten, dieses flankengesteuerte Flipflop
selbst du entwerfen. Dabei lernst du einiges über Logik Schaltungen.
Außerdem solltest du irgend einen Mikrocontroller in Assembler
programmieren lernen, denn dabei lernt man auch eine Menge über seine
Funktionsweise. Erst danach scheint es mir sinnvoll, sich mit
Blockschaltbildern von CPU's zu beschäftigen.
Theor schrieb:> @ cpu_builder>> Bleib einfach mutig und hartnäckig.> Das Ganze ist sicher etwas schwerer als Du es Dir vorgestellt hast, aber> das ist nichts Ungewöhnliches. Geht uns allen so.
Na gut. Aber nur im Gegenzug für einen Tipp:
Soll die Taktquelle für die Aufgabe (1 Bus, 3 Register, Ein- &
Ausgabeport) direkt an die CLK-Pins am FlipFlop? Wie ungefähr ist das
Gerüst außenherum um diese Teile? Was genau ist eine Ablaufsteuerung?
Stefanus F. schrieb:> Außerdem solltest du irgend einen Mikrocontroller in Assembler> programmieren lernen, denn dabei lernt man auch eine Menge über seine> Funktionsweise. Erst danach scheint es mir sinnvoll, sich mit> Blockschaltbildern von CPU's zu beschäftigen.
Genau das habe ich gemacht, mit ATtinies! Und um eben das innere
VOLLKOMMEN zu verstehen, ohne dass ich daraus Industriegeheimnisse
mache, möchte ich eine CPU selbst bauen
S. R. schrieb:> . Du wirfst mit Worten umher, die du offensichtlich selbst nicht> verstehst. Auf Erklärungen dazu reagierst du nicht, weil du sie auch> nicht verstehst (oder trollst).
Ich versuche, so sehr es geht, alles zu verstehen! Worauf habe ich nicht
reagiert? Es sind seeehr viele Beiträge.
Ich habe definitiv ein ernstes Anliegen. Der Typ mit seinem Pentium ist
ein Troll, ich keineswegs!
Die Ablaufsteuerung erzeugt die Taktsignale für sämtliche
Funktionseinheiten. Sie interpretiert den aktuellen Befehl und erzeugt
je nach Befehl eine andere Sequenz von Taktsignalen.
Du musst Dir eine ausreichende Menge von Befehlen ausdenken.
Wenn der Befehl "ld a,b" zum Beispiel den Wert von Register a ins
Register b übertragen würde, dann müsste die Ablaufsteuerung die
Ausgänge von Register a auf den Bus legen (Output-Enable aktivieren) und
dann dem Register b einen Taktimpuls senden, damit es die Daten lädt.
Wenn der Befehl lauten würde "jmp +12" bedeuten würde, dass der
Programmzähler um 12 erhöht werden soll, dann muss die Ablaufsteuerung
entweder 12 Taktimpulse an den Programmzähler senden oder den aktuellen
Wert als Operand 1 in die ALU laden, dann 12 als Operand 2 in die ALU
laden, dann die beiden Werte addieren, dann das Ergebnis zurück in den
Programmzähler übertragen. Auch dazu sind eine Menge Taktimpulse nötig,
die in der richtigen Reihenfolge an viele Einheiten gesendet werden
müssen.
Bei den ersten Mikrocontrollern konnte man noch nicht beliebig viele
Transistoren unterbringen, deswegen haben die Hersteller viel Grips
hinein gesteckt, diese Logik zu optimieren. Dennoch kannst du im Foto
des 6502 sehen, dass die Ablaufsteuerung gut ein drittel der ganzen CPU
ausmacht, also einige tausend Transistoren.
Diese Logik kann man hier nicht in ein paar Zeilen Text erklären. Es
würde mich nicht wundern, wenn die Details dieser Schaltung bei den
allermeisten Prozessoren geheim gehalten wird.
Aber schau Dir ruhig mal diese Projekte mit den selbstgebauten CPUs an.
Da wird sicher eins dabei sein, welches die Ablaufsteuerung im Detail
zeigt.
Und schau Dir doch mal die oben genannten Varianten Turing Maschine an,
die enthalten nämlich auch Ablaufsteuerungen. Die originale Turing
Maschine enthält die einfachste denkbare Ablaufsteuerung. Davon
ausgehend kann man sich komplexere ausdenken, was ja auch getan wurde.
Stefanus F. schrieb:> Ich kann Dir nur dringend raten, dieses flankengesteuerte Flipflop> selbst du entwerfen.
Ist ja albern, das beherrscht du selbst nicht!
Ich habe jetzt eh vor mit ICs zu arbeiten, wenn einer mit 4 Gattern oder
programmierbarem 4-bit-Zähler genauso viel wie ein einzelner Transistor
kostet.
Theor, kann es sein dass du Lehrer bist?
cpu_builder schrieb:> Vielen Dank Stefanus F.!>> Das hilft mir deutlich beim Verstehen.>> Hier meine Lösung mit AND-Gattern:
Ja. Schon nicht schlecht. Die Ablaufsteuerung kommt noch, oder?
Jedenfalls ist das Problem mit den ANDs, wie ich erwartet habe,
vorhanden.
Du hast mir auf meinen Einwand, dass die Ausgänge mehrerer ANDs zusammen
geschaltet werden, geantwortet, dass: "Nein, je Ausgang+Eingang wie
benötigt".
Tatsächlich ist aber ist das dennoch der Fall. In der Skizze sehe ich,
dass die Ausgänge aller AND Gatter auf die Busleitung gehen. Damit sind
sie "zusammengeschaltet" und es entstehen Konflikte wenn ein AND eine
'1' und ein anderes eine '0' ausgibt.
Siehst Du es?
> Ist ja albern, das beherrscht du selbst nicht!
Doch tue ich. Ich habe so etwas aus Transistoren und Relais selbst
entwickelt und dabei viel gelernt.
Mache das mal ohne Kondensatoren, damit es mit annähernd beliebigen
Taktfrequenzen funktioniert.
cpu_builder schrieb:> Theor schrieb:>> dass die Ausgänge aller AND Gatter auf die Busleitung gehen>> Verdammt, hast Recht... Wie sonst?!
Dafür gibt es mehrere Lösungen:
Eine hast Du im Prinzip schon genannt.
Ein Multiplexer. Im Prinzip je Eingang ein AND-Gatter, - insofern hast
Du schon in die richtige Richtung gedacht, prima -, aber dazu ein
OR-Gatter mit mehreren Eingängen an den Ausgängen der ANDs.
Ein andere Lösung sind besondere Gatter die sich in einen Hochohmigen
Zustand, genannt 'Z' schalten lassen. Gibts als "Bustreiber" mit einem
Enable-Eingang. Die kann man beliebig kombinieren, solange man dafür
sorgt, dass immer nur ein Treiber zur Zeit aktiviert ist.
Es gibt noch andere Varianten. Lasse ich aber erstmal aussen vor.
Versuch mal die Multiplexer-Lösung, wenn Du magst.
Soll ich jetzt eine Schaltung mit MOSFETs oder bipolaren Transistoren
zeichnen? Wie realisiere ich hier eine Ablaufsteuerung? Das bekomme ich
ohne Hilfe nicht hin...
Ein Blick auf
https://www.mikrocontroller.net/topic/2069927
(gläserner 65C02 aus Standardgattern inkl. Schaltplan, Dokumentation
und lauffähiger Simulation) könnte für den Anfang ganz hilfreich
sein.
Gruß microprocessor
cpu_builder schrieb:> Soll ich jetzt eine Schaltung mit MOSFETs oder bipolaren Transistoren> zeichnen? Wie realisiere ich hier eine Ablaufsteuerung? Das bekomme ich> ohne Hilfe nicht hin...
Ich würde Dir raten, auch diese Frage erst einmal zu vertagen. Es geht
zunächst mal darum die Strukturen zu verstehen. Im Prinzip ist jedes
Gatter lediglich eine gewisse, immer gleich bleibende Kombination von
Transistoren/MOSFETs. Die zu zeichnen heisst in gewisser Weise erstmal
einen Wald zu zeichnen, wenn Du ein Holzhaus bauen willst.
Tut mir leid, aber wenn Du Dir vorstellst, in drei Tagen mit der CPU
anzufangen, halte ich das für illusorisch. Setze mal, wenn ich von dem
Tempo heute ausgehe, ein paar Wochen an, ehe Du Dich an einen ersten
Entwurf wagen kannst, der von Anfang an einen gewissen praktischen Wert
hat und in dem die deutlich überwiegende Zahl der Details sinnvoll ist.
Theor schrieb:> Versuch mal die Multiplexer-Lösung, wenn Du magst.
Nur mal eine Frage: was hast du demnächst noch mit mir vor, bis ich eine
eigene CPU-Architektur entwerfen kann? (ich mag deine didaktische
Methode ;-))
Ich mache die Multiplexerschaltung heute noch.
Theor schrieb:> Tut mir leid, aber wenn Du Dir vorstellst, in drei Tagen mit der CPU> anzufangen, halte ich das für illusorisch
Hatte ich nicht vor (naja doch :-P )
Ich folge deiner Anleitung
cpu_builder schrieb:> Theor schrieb:>> Versuch mal die Multiplexer-Lösung, wenn Du magst.>> Nur mal eine Frage: was hast du demnächst noch mit mir vor, bis ich eine> eigene CPU-Architektur entwerfen kann? (ich mag deine didaktische> Methode ;-))>> Ich mache die Multiplexerschaltung heute noch.
Ach, mein Lieber.
Immer schon beim Morgen und kaum im Hier-Und-Jetzt. :-) Warts ab.
So. Aber für heute mal Schluss.
War leider sowieso ein Glückstag, dass ich heute so oft Zeit hatte.
Damit Du was zu tun hast, suche mal nach Bustreiber mit
Tri-State-Ausgang und versuche das als zweite Lösung. Auch kannst Du
Dich mal nach einer Simulation umschauen.
> Wie realisiere ich hier eine Ablaufsteuerung?
Zum Beispiel mit einer Diodenmatrix.
Ich bin erstaunt, wie schnell du die genannten Dokumente und Webseiten
studiert hast. Es wundert mich aber gar nicht, dass davon nichts hängen
geblieben ist so dass du die selbe Frage immer wieder wiederholst.
Das ist jetzt mein letzter Versuch, eine mögliche Ablaufsteuerung zu
skizzieren. Bedenke, dass es auch andere Methoden gibt.
Sagen wir mal, dein Mikrocontroller hat zwei Register A und B, die man
lesen (rd) und schreiben (wr) kann. Dann gibt es für die ALU noch die
beiden Operanden (auch Register) X und Y. Die ALU unterstützt vier
Operationen: add, sub, mul und div. Das Ergebnis der ALU sei Z. Der
Datenaustausch zwischen den Komponenten findet über einen Bus statt, mit
dem sie alle bidirektional verbunden sind. Als Register werden 74HC573
verwendet.
Wie die Register A und B initial befüllt werden, lasse ich hier mal aus.
Das Programm soll die Zahlen in A und B addieren und das Ergebnis in A
speichern.
A = A + B
Die Diodenmatrix erzeugt für jeden Arbeitsschritt das nötige Signal:
1
Schritt Mikrocode
2
rdA rdB wrA wrB wrX wrY rdZ add sub mul div
3
0 1 0 0 0 1 0 0 0 0 0 0 Übertrage A nach X
4
1 1 0 0 0 0 0 0 0 0 0 0
5
2 0 1 0 0 0 1 0 0 0 0 0 Übertrage B nach Y
6
3 0 1 0 0 0 0 0 0 0 0 0
7
4 0 0 0 0 0 0 0 1 0 0 0 Addiere
8
5 0 0 1 0 0 0 1 0 0 0 0 Übertrage Z nach A
9
6 0 0 0 0 0 0 1 0 0 0 0
10
7 0 0 0 0 0 0 0 0 0 0 0 fertig
11
8 0 0 0 0 0 0 0 0 0 0 0
12
9 0 0 0 0 0 0 0 0 0 0 0
13
10 0 0 0 0 0 0 0 0 0 0 0
14
11 0 0 0 0 0 0 0 0 0 0 0
15
12 0 0 0 0 0 0 0 0 0 0 0
16
13 0 0 0 0 0 0 0 0 0 0 0
17
14 0 0 0 0 0 0 0 0 0 0 0
18
15 0 0 0 0 0 0 0 0 0 0 0
Die Operation ist nach 7 Schritten abgeschlossen. Der Mikrocode umfasst
aber der Einfachheit halber 16 Schritte für jeden Befehl, deswegen
bleiben einige Zeilen ungenutzt.
rdA: sorgt dafür, dass Register A seinen gespeicherten Wert auf den Bus
legt, ist also negiert und dann mit dessen Output-Enable Eingang
verbunden.
wrA: sorgt dafür, dass Register A den aktuellen Wert vom Bus einliest,
ist also mit dessen Latch-Eingang verbunden.
Das gleiche Prinzip gilt für die Signale rdB, wrB, wrX, wrY und rdZ.
Dass add Signal befiehlt der ALU, die beiden Operanden zu addieren, und
das Ergebnis in Z zu speichern.
Irgendwo muss dieser Mikrocode gespeichert werden, also ein ROM. Das
kann man mit einer Diodenmatrix machen, oder mit DIP Schaltern, oder wie
auch immer.
Die unteren 4 Adressbits dieses Mikrocode ROM werden mit einem
Binärzähler verbunden, der fortlaufend von 0 bis 15 zählt. Die oberen 6
Adressbits werden mit dem Befehlsregister verbunden, somit kann die CPU
bis zu 64 unterschiedliche Befehle ausführen, jeder mit bis zu 16
Mikroschritten.
Das wäre mal eine Anregung für den Anfang - aber noch lange nicht
vollständig und ganz sicher nicht die einzige denkbare Lösung.
[Mod] Formatierung angepasst.
Stefanus F. schrieb:> Ich bin erstaunt, wie schnell du die genannten Dokumente und Webseiten> studiert hast. Es wundert mich aber gar nicht, dass davon nichts hängen> geblieben ist so dass du die selbe Frage immer wieder wiederholst.>> Das ist jetzt mein letzter Versuch, eine mögliche Ablaufsteuerung zu> skizzieren.
Und er ist gelungen. Das waren echt viele Links, irgendwie zu viel für
einen halben Tag für mich.
Stefanus F. schrieb:> Sie interpretiert den aktuellen Befehl und erzeugt> je nach Befehl eine andere Sequenz von Taktsignalen.
Ist dann die Ablaufsteuerung im Mikroprozessor gleich dem
Befehlsdekoder? Denn sie interpretiert ja die Befehle...
> Ist dann die Ablaufsteuerung im Mikroprozessor gleich dem Befehlsdekoder?
In diesem Fall ja.
Aber bei der MT15 CPU ist es wieder ganz anders gelöst, und sicher nicht
uninteressant. Hier ist eine sehr detaillierte Beschreibung:
http://6502.org/users/dieter/mt15b/mt15b_1.htm
Stefanus F. schrieb:> Die oberen 6> Adressbits werden mit dem Befehlsregister verbunden, somit kann die CPU> bis zu 64 unterschiedliche Befehle ausführen, jeder mit bis zu 16> Mikroschritten.
Wie kommst du auf die 64?
> Wie kommst du auf die 64?
Frei erfunden, unter der Annahme, dass 64 Befehle für eine sinnvolle CPU
genügen. Man könnte auch 7 Bits für 128 Befehle verwenden, oder 8 Bits
für 256 Befehle.
Du willst doch eine eigene CPU designen. Dann obliegt es Dir, den
Befehlssatz festzulegen.
Ja. Ich habe ja geschrieben, dass das nur der Anfang ist. Ich kann Dir
hier keine vollständige Lösung beschreiben, das ist einfach zu
umfangreich. Außerdem haben andere darüber Bücher geschrieben. Lies die
doch mal.
Hier ist auch noch ein interessanter minimalistischer Ansatz:
https://bradrodriguez.com/papers/piscedu2.htm
Auf Papier habe ich auch mal eine CPU gebaut. Natürlich fand ich die
sozusagen genial (war sie aber natürlich nicht, viele Sachen nicht
beachtet). Ich wäre aber nie auf die Idee gekommen, die wirklich zu
bauen. Wozu auch?
microprocessor schrieb:> Ein Blick auf>> https://www.mikrocontroller.net/topic/2069927>> (gläserner 65C02 aus Standardgattern inkl. Schaltplan, Dokumentation> und lauffähiger Simulation) könnte für den Anfang ganz hilfreich> sein.>> Gruß microprocessor
Korrektur:
Der Link scheint nicht mehr zu funktionieren.
Die Seite ist über die Suchfunktion in mikrocontroller.net oder
Google durch Eingabe von
"Visualisierbarer Schaltplan eines 65C02"
zu erreichen.
Warte mal... Also werden durch den Maschinecode, den man z.B. nach dem
Kompilieren eines Assembkerprogrammes sieht, der im Befehlsregister
landet, entsprechend Mikroprogramme gestartet? Mir ist irgendwie unklar,
wie das Befehlsregister mit dem Mikrocode verbunden wird...
Wozu dienen z.B. Zeilen 1 und 3 in deiner letzten Erklärung?
Ich merke schon, eine komplexe, komplizierte Sache... Ich lese mal das
Buch im Link von dir dazu
Ja, aber nur wenn die CPU mit Mikrocodes arbeitet. Es gibt ja auch
welche ihne Mikrocode.
Im einfachsten Fall wird das Befehlsregister bei jedem 16. Mikroschritt
mit dem nächsten Befehl aus dem Programmspeicher gefüllt, bzw dem Befehl
auf den der PC zeigt.
Die Zeilen 1 und 3 halten die Ausgänge der Quell-Register länger offen.
Beim 74HC573 muss erst das Latch-enable Signal beendet werden, erst
danach darf man die Daten auf dem Eingang/Bus wegnehmen.
Ähhh, ich sehe gerade dass ich die pre tags falsch herum eingefügt habe.
Auf Smartphones ist der Beitrag somit unlesbar. Jetzt kann ich das nicht
mehr korrigieren. Wäre bitte ein Moderator so nett...?
Um kurz zusammenzufassen, was ich jetzt glaube zu wissen:
- Eine CPU besteht allgemein aus einer ALU, Control Unit und Registern
- Die CPU holt zunächst den Befehl, der an der Adresse des
Befehlszählers/Programmzählers liegt, und legt diesen im Befehlsregister
ab
- Danach wird durch den Befehl im Befehlsregister ein Teil des
Mikrocodes, "Mikroprogramm", ausgewählt, das die Datenübertragung über
den Bus koordiniert, und den Befehl somit in kleinen Schritten ausführt.
- Wenn der Befehl ausgeführt wurde, wird der Befehlszähler um 1 erhöht
und der nächste Befehl geladen
Mache ich da irgendeinen Denkfehler?
Meine Idee wäre da, irgendwie diese Sache mit dem Mikrocode
weitestgehend zu umgehen, da es ja scheinbar alles nur komplizierter
macht.. Meine CPU soll nur rechnen können, nicht wie mit der branch
prediction herumzaubern können.
Wie gesagt gibt es auch CPUs ohne Mikrocode. Außerdem wird der
Programmzähler bei manchen Befehlen nicht um 1 erhöht, z.b. bei
Sprüngen.
Du siehst dass die Ablaufsteuerung der komplexeste Teil der CPU ist.
Mein verkürztes Beispiel mit Mikrocode ist noch die einfachste Variante
aber auch die langsamste.
Microcode erleichtert bzw ermöglicht komplexe Befehlssätze. Einfache
sehr schematische Befehlsstrukturen ohne komplexe Befehlsabläufe
benötigen das nicht.
Das beschriebene Schema trifft auf einfache CPUs zu, wie man sie heute
nur noch in Mikrocontrollern findet. Komplexe CPUs lassen sich so nicht
beschreiben.
Es war sehr interessant, mehr über diese Techniken in Prozessoren zu
erfahren. Aber ich denke dass ich erstmal keine Lust mehr habe, weitere
Details zu erfahren. Ich würde eh nicht genug Zeit haben, mich damit in
der Freizeit ausführlich zu beschäftigen. Mal sehen, was daraus wird.
Sorry Stefanus F. Und Theor, aber das ist alles irgendwie zu hoch für
mich. Ich werde dran bleiben, auch wenn ich demnächst eher wenig Zeit
dafür finden Ihr habt mir sehr geholfen.
Danke dafür!
cpu_builder schrieb:> Sorry Stefanus F. Und Theor, aber das ist alles irgendwie zu hoch für> mich. Ich werde dran bleiben, auch wenn ich demnächst eher wenig Zeit> dafür finden Ihr habt mir sehr geholfen.> Danke dafür!
Ich war gestern etwas genervt von den vielen komplizierten Dingen. Aber
heute mache ich gerne weiter.
Un die Schaltung mit dem Multiplexer zu bauen: Wie wird der MUX bei z.B.
4:1 gesteuert? Mit 2 Steuer-Anschlüssen?
Den mit 2bit kann man ja 1 von 4 Bit adressieren
cpu_builder schrieb:> Un die Schaltung mit dem Multiplexer zu bauen: Wie wird der MUX bei z.B.> 4:1 gesteuert? Mit 2 Steuer-Anschlüssen?
4:1 - vier Eingänge werden auf einen Ausgang gemultiplext.
Um einen aus vier Eingängen auszuwählen, benötigt man zwei Adressbits,
da 2^2=4 ist
Wenn Du diese Frage stellen musst, dann solltest Du erst mal ein wenig
Digitalelektronik auf einem Steckbrett aufbauen und dich über blinkende
LEDs freuen - Die Realisation einer CPU ist noch gaaanz weit weg für
Dich!
Ich merke schin, dass es schwer ist, daran festzuhalten...
Aber Tristate ist schon interessant!
Wolfgang R. schrieb:> Wenn Du diese Frage stellen musst, dann solltest Du erst mal ein wenig> Digitalelektronik auf einem Steckbrett aufbauen und dich über blinkende> LEDs freuen - Die Realisation einer CPU ist noch gaaanz weit weg für> Dich!
Ich weiß was 2^2 ist, aber man weiß ja nie was irgendwelche Ingenieure
für verrückte Sachen erfinden. Mit Multiplexern bin ich eben nicht so
vertraut
Interessant ist das alles - nur mit reiner Theorie kommst Du nicht
weiter! Du musst das auch mal in Hardware aufbauen, wenn Du die Technik
wirklich begreifen willst. Taktgenerator, Schieberegister, Zähler,
Multiplexer... Das macht Spaß und bildet weiter.
Auch wenn Du das mit "alten" 74LSxxx Bausteinen aufbaust - grundlegend
hat sich an der Technik bis heute nichts geändert.
Digital-Elektronik ist sicher interessant zu lernen, aber dann doch
bitte nicht anhand einer CPU! Und schon gar nicht solltest du versuchen,
ohne Erfahrung mit den Grundlagen eine eigene CPU zu designen.
Fang doch mal mit etwas relativ einfachem an, zum Beispiel eine
programmierbare Ampelanlage (ohne CPU, aber mit ROM).
cpu_builder schrieb:> Es war sehr interessant, mehr über diese Techniken in Prozessoren zu> erfahren. Aber ich denke dass ich erstmal keine Lust mehr habe, weitere> Details zu erfahren. Ich würde eh nicht genug Zeit haben, mich damit in> der Freizeit ausführlich zu beschäftigen. Mal sehen, was daraus wird.
War ja klar. Erst große Töne spucken und dann bei den ersten Anzeichen
von Komplexität den Schwanz einziehen. Dabei hast du echte Komplexität
noch gar nicht gesehen. Schau dir mal die Mikroarchitektur einer
halbwegs aktuellen PC-CPU an, etwa eines Core-i von Intel. Mit
out-of-order execution, branch prediction, Pipeline, mehrfach
assoziativen Caches etc. Und das gibt es teilweise seit über 10 Jahren.
cpu_builder schrieb:> Und woher soll ich all das ... lernen?
Aus Büchern zum Beispiel. Ich hatte in meinem E-Technik-Studium (Ende
der 80er Jahre) das Fach Hardwaretechnik bei den Dozenten Flick und
Liebig. Diese beiden haben über die Jahre einige Grundlagenbücher
veröffentlicht, die ich immer recht hilfreich fand.
Ein neueres Werk dieser Autoren:
Mikroprozessortechnik und Rechnerstrukturen,
Flick/ Liebig,
Springer Verlag
(Kenn ich nicht von innen, habe ich gerade gegoogelt.)
Und zahlreiche Bücher ähnlicher Titel, die moderner sind.
cpu_builder schrieb:> ... mal schnell ...
Überhaupt nicht. Lass Dir Zeit, es ist Dein Hobby. Das Thema ist
komplex, da ist man nicht in fünf Minuten drin. Waren wir damals auch
nicht. Ich habe das erste mal (in einem Sonderheft von Franzis) gelesen,
wie ein Mikroprozessor so ungefähr funktioniert, als ich in der 7.
Klasse war.
Die größeren geistigen Durchbrüche kamen trotzdem erst an der Uni.
Damit will ich nicht sagen, dass das bei Dir genauso lange dauern muss.
Aber gehe langsam vom einfachen zum kompilzierten. Dann wird das schon
werden (in dem für Dich angemessenen Tempo).
IT Archivar schrieb:> Oder alte Folgen aus dem Bildungsfernsehen (check> mal YouTube).
Das ist eine sehr gute Idee. Als ich mit Elektronik anfing
(Experimentierkästen) war ich in der dritten Klasse und ziemlich
lesefaul.
Lieber habe ich mir von Jean Pütz im Fernsehen (Einführung in die
Elektronik) erklären lassen, wie ein Transistor funktioniert.
Der hatte noch weitere Sendereihen in diesem Stiel, eine davon auch zum
Thema Digitaltechnik.
(Dazu gab's auch Begleitbücher, möglicherweise zu finden in
Bibliotheken.)
Axel S. schrieb:> out-of-order execution, branch prediction, Pipeline, mehrfach> assoziativen Caches
Das ist zwar beschleunigend, aber gefährdet ja auch die Sicherheit (5
Arten von Spectre u.ä. & Meltdown) und ist stromverschwendend
ARM-CPUs sehen vom Design her noch deutlich "ordentlicher" aus,
logischer, simpler, im Gegensatz zu X86 oder dem misslungenen X64
M.A. S. schrieb:> Aber gehe langsam vom einfachen zum kompilzierten. Dann wird das schon> werden (in dem für Dich angemessenen Tempo).
Werde ich. Dann werde ich mir mal ein paar Bücher kaufen, statt hier
weiter Anfängerfragen zu stellen.
Außerdem: statt Youtube bevorzuge ich Webseiten wie
dieelektronikerseite.de, die haben sich echt Mühe gegeben eine gute
Sammlung an Infos zu bieten.
Axel S. schrieb:> War ja klar. Erst große Töne spucken und dann bei den ersten Anzeichen> von Komplexität den Schwanz einziehen.
Ich bin nunmal Physiker, kein Elektrotechniker. Es kann mir ja niemamd
vorwerfen sich dafür zu interessieren, wie eine CPU arbeitet. Wenn es
mir UNNÖTIG KOMPLIZIERT erscheint, wie fast alle Technik heute, dann
erfinde ich eben was simpleres, was auch funktioniert. Das bekomm' ich
wahrscheinlich auch ohne all die modernen "Weiterentwicklungen" hin
Wobei Computer immer unnötig kompliziert sind, das liegt in der Natur
der Sache.
So wie ein Glas auch stets unnötig groß ist, Urlaub immer zu kurz und
das Gehalt immer zu gering ist.
cpu_builder schrieb:> Wenn es> mir UNNÖTIG KOMPLIZIERT erscheint,
Wie kommst du nur immer auf dein "unnötig kompliziert"? Das wirkt
lächerlich um dummfrech.
Es ist so kompliziert wie nötig um aktuellen Leistungsanforderungen
gerecht zu werden. Diese komplexen Techniken haben einen Sinn, sie
ermöglichen erst die Leistung welche CPUs heute haben. Da ist nichts
unnötig, ausser man benötigt eben diese Leistung nicht.
Aber dann formuliere es auch so.
Mein Laptop ist zu 100% unnötig, ebenso das Smartphone/Handy.
Ich konnte meine ersten 17 Jahre ohne diese Dinge überleben.
Heißt das nun, dass ich die Geräte der 90er Jahre neu erfinden möchte?
Nein!
Auf Transistorebene könnte man Multigatter bauen, meine eigene
Erfindung, die AND, OR, NOT, und Kombinationen davon ermöglichen, und
das mit deutlich weniger Transistoren als für all die vielen
Einzelgatterkombinationen nötig ist. Die noch zu hunderten ider
tausenden Stück kombiniert könnten die Rechenleistung drastisch erhöhen.
Und die Intel ME ist ja wohl das allerletzte
cpu_builder schrieb:> Auf Transistorebene könnte man Multigatter bauen, meine eigene> Erfindung, die AND, OR, NOT, und Kombinationen davon ermöglichen, und> das mit deutlich weniger Transistoren als für all die vielen> Einzelgatterkombinationen nötig ist. Die noch zu hunderten ider> tausenden Stück kombiniert könnten die Rechenleistung drastisch erhöhen.
Schon mal die LUTs eines FPGA angeguckt?
Deine Erfindung? Sorry entweder Troll oder Hybris jenseits aller
Heilungschancen.
cpu_builder schrieb:> Werde ich. Dann werde ich mir mal ein paar Bücher kaufen, statt hier> weiter Anfängerfragen zu stellen.
1. Bevor Du wild um-dich-kaufst: wenn möglich vorher einen Blick
reinwerfen, um zu sehen, ob es auch für Dich geeignet ist, man gibt
sonst schnell viel Geld aus und ist enttäuscht.
Bibliotheken sind ein guter Ausgangspunkt, da Du ja altes
Grundlagenwissen benötigst, solche Bücher sollte es dort geben.
cpu_builder schrieb:> Ich bin nunmal Physiker, ... Wenn es mir UNNÖTIG KOMPLIZIERT erscheint,> wie fast alle Technik heute, dann erfinde ich eben was simpleres, was auch
funktioniert.
:)
Dann kennst Du ja sicher Einstein und seine vielen Zitate. Bitte
beherzige in diesem Zusammenhang besonders: "...so einfach wie
möglich, ABER NICHT EINFACHER!" ;D
cpu_builder schrieb:> meine eigene> Erfindung
Sicher dat...
Willst Du nicht erst mal anfangen, die einfachsten Grundlagen zu
erlernen - vielleicht mal eine einfache Gatterschaltung aufbauen?
Stefanus F. schrieb:> Mein Laptop ist zu 100% unnötig, ebenso das Smartphone/Handy.> Ich konnte meine ersten 17 Jahre ohne diese Dinge überleben.
Die sind ja nur Werkzeuge. Auch wenn manche Leute diese Geräte als Sinn
ihres Lebens ansehen..
Stefanus F. schrieb:> Heißt das nun, dass ich die Geräte der 90er Jahre neu erfinden möchte?> Nein!
Auch wenn ich da noch nicht gelebt habe, war damals nicht alles
krankhaft übertechnisiert. Das was es an Technik gab ist greifbarer als
die ganzen superkomplizierten Sachen heute.
Ich will nunmal ne überschaubare CPU selber bauen. Eines Tages erstelle
ich einen neuen Thread hier und zeig euch was draus geworden ist. Jetzt
mache ich aber erstmal ohne eure Hilfe weiter.
cpu_builder schrieb:> Ich will nunmal ne überschaubare CPU selber bauen. Eines Tages erstelle> ich einen neuen Thread hier und zeig euch was draus geworden ist. Jetzt> mache ich aber erstmal ohne eure Hilfe weiter.
Viel Glück, wir sind gespannt.
cpu_builder schrieb:> Ich will nunmal ne überschaubare CPU selber bauen. Eines Tages erstelle> ich einen neuen Thread hier und zeig euch was draus geworden ist. Jetzt> mache ich aber erstmal ohne eure Hilfe weiter.
Blöd, wenn die Antworten nicht so sind, wie man sie gerne gehabt
hätte...
Viel Erfolg trotzdem - Vorschläge und Hinweise hast Du ja hier zuhauf
bekommen!
Wolfgang R. schrieb:> Willst Du nicht erst mal anfangen, die einfachsten Grundlagen zu> erlernen - vielleicht mal eine einfache Gatterschaltung aufbauen?
Ich habe bereits einige Gatter aufgebaut. Und das nicht nur vor 2 Tagen,
sondern auch schon vor 2 Jahren.
cpu_builder schrieb:> Ich habe bereits einige Gatter aufgebaut. Und das nicht nur vor 2 Tagen,> sondern auch schon vor 2 Jahren.
Deine Überraschten Antworten auf die Themen Tristate oder Multiplexer
haben Anderes vermuten lassen...
cpu_builder schrieb:> Auch wenn ich da noch nicht gelebt habe, war damals nicht alles> krankhaft übertechnisiert. Das was es an Technik gab ist greifbarer als> die ganzen superkomplizierten Sachen heute.
Das denkst du nur. Schon ein C64 würde dich aktuell überfordern. Und das
waren noch lange nicht die 90er. 90er waren 486er, Pentium usw. Die
waren schon heftig komplex im Vergleich zu einer 4 Bit Bastel- und Lern
CPU an der du ja schon gut zu knabbern hast.
Wolfgang R. schrieb:> cpu_builder schrieb:>> Ich habe bereits einige Gatter aufgebaut. Und das nicht nur vor 2 Tagen,>> sondern auch schon vor 2 Jahren.>> Deine Überraschten Antworten auf die Themen Tristate oder Multiplexer> haben Anderes vermuten lassen...
Vielleicht meint er ja nicht Logikgatter, sondern Ziegengatter oder
sonst was Alltägliches aus dem ländlichen Umland.
Stefanus F. schrieb:> Ich habe ein 1 Gatter entwickelt. Block-Symbol:
Also an der Rückwirkungsfreiheit deines Erzeugnisses musst Du aber noch
ein Bisschen arbeiten! :D
Früher hatten wir im Digitallabor eine Liste mit lauter ulkigen
Digitalblöcken, ich finde es im Netz leider auf die Schnelle nicht.
Da gab es so Sachen wie:
1-Bit-Perverter,
Nie-Glied,
Nie-und-nimmer-Glied,
WOM-Speicher (write-only-speicher),
etc.
PS:
Etwas in der Art
http://donaupeter.de/logik/logik.htm
cpu_builder schrieb:> Das ist zwar beschleunigend, aber gefährdet ja auch die Sicherheit (5> Arten von Spectre u.ä. & Meltdown) und ist stromverschwendend
Mit einem Raspi als Desktoprechner will man trotzdem nicht arbeiten.
Zudem gibt's auch noch x86-CPUs ohne OOE, und die will man ebenfalls
nicht auf dem Desktop haben - aus demselben Grund. Zu lahm.
> ARM-CPUs sehen vom Design her noch deutlich "ordentlicher" aus,> logischer, simpler, im Gegensatz zu X86 oder dem misslungenen X64
Du verwechselst Architektur mit Befehlssatz. Heutige x86-CPUs sind
intern keine x86-Architektur, weil sie die x86-Befehle intern in
Micro-Ops zerlegen, die dann erst ausgeführt werden. Der Befehlssatz ist
nur eine externe Codierung, und der Die-Anteil für den Decoder war schon
vor 10 Jahren vernachlässigbar.
@ cpu_builder
> Ist dann die Ablaufsteuerung im Mikroprozessor gleich dem> Befehlsdekoder? Denn sie interpretiert ja die Befehle...
Man könnte das so sagen. Sagen wir mal, das ist richtig. Dennoch
versteht man im allgemeinen unter einem "Dekoder" etwas anderes als
unter einer "Ablaufsteuerung".
Ein "Dekoder" ist eine Mimik die einem Code einen anderen Code zuordnet.
Z.B. 'A' -> 1, 'B' -> 2, 'C' -> 3 usws. Statt 1, 2, 3 etc, könnte die
Ergebnisse auch Steuersignale für Datenpfade sein. Und die Eingabe die
Codes für Maschinenbefehle, also LDI, ADC usw.
Eine Ablaufsteuerung tut ungefähr das selbe (mag also auch Dekoder
enthalten) aber zusätzlich in der zeitlichen Dimension. Sie erhält einen
Takt und Eingangsdaten und gibt an ihren Ausgängen, eine Abfolge von
Signalen. Diese wiederum können Steuersignale für Datenpfade sein.
Der Unterschied liegt zum Teil in der Betrachtungsweise - nicht so sehr
in der realen Bauweise.
Man muss dazu wissen, das bei frühen CPUs die Befehlsdekodierung häufig
als reine Kombinatorik betrachtet und gebaut wurde, die in ihrer Wirkung
vom Takt abhängig war. Der Befehl wurde in alle notwendigen
Steuersignale dekodiert und der Takt hat dafür gesorgt, dass sie in den
folgenden ein, zwei oder drei Takten wirksam wurden.
Später wurde die Befehlsdekodierung zusammen mit der taktabhängigen
Ausführung als eine Einheit betrachet - der "Ablaufsteuerung" (man nennt
das auch Microprogrammeinheit, den Ablauf ein "Microprogramm"). Das
hatte eher Gründe in der Übersicht, der Organisation, als darin, dass
die beiden Varianten effektiv etwas wesentlich Unterschiedliches sind.
Aber das führt hier im Moment noch weit hinter Deinen Horizont, denke
ich und man sollte das erst einmal verschieben. Das Verständnis ergibt
sich aus der Betrachtung der tatsächlichen Abläufe viel besser, meine
ich.
Also nun erst einmal der Multiplexer. Ich habe Dir oben eigentlich schon
den Multiplexer verbal beschrieben.
Theor schrieb:> Ein Multiplexer. Im Prinzip je Eingang ein AND-Gatter, - insofern hast> Du schon in die richtige Richtung gedacht, prima -, aber dazu ein> OR-Gatter mit mehreren Eingängen an den Ausgängen der ANDs.
Und zwar, damit Du die Konflikte zwischen unterschiedlichen
Ausgangswerten der AND-Gatter auflöst. Zwei AND-Gatter mit
zusammengeschalteten Ausgängen gehen kaputt wenn sie unterschiedliche
Werte ausgeben. Ein ODER-Gatter aber verträgt es, wenn an seinen
Eingängen unterschiedliche Werte liegen und es kann diese zwei
unterschiedlichen Werte einem ganz bestimmten zuordnen, so das der
Konflikt aufgelöst ist.
Du solltest Dich jetzt ernsthaft um ein Simulationsprogramm kümmern und
das einfach mal versuchen.
Wichtig ist, dass Du praktische Dinge machst. Wertetabellen aufstellst
und boolsche Gleichungen. Schaltungen zeichnest und ausprobierst.
Entweder real oder in Simulation. Bei Schaltungen überlegst, was
passiert, wenn Du gewisse Eingangswerte anlegst. Auch lesen. Aber das
Gelesene auch nachvollziehen.
Ich halte es übrigens durchaus nicht für sinnlos, wenn Du jetzt schon
"Entwürfe" für Deine Super-CPU machst, die besser als Intel oder AMD
ist. Sammle Material und Ideen. Daraus kannst Du auch lernen.
Es ist aber äusserst wichtig, dass Du die realen, aber so kleinen,
unwichtigen, murksigen und anstrengenden Sachen lernst und übst. Und das
Du vorerst damit viel mehr Zeit verbringst als mit Deinen Ideen.
Schaue mal alle paar Wochen Deine Ideen an, ob Du inzwischen einen
Kenntnisstand erreicht hast, um eine davon etwas konkreter zu machen.
Verfeinere einen Blockschaltplan oder eine Gleichung. Zeichne eine neue,
bessere Gatterschaltung (oder in Transistoren). So, - Schritt für
Schritt -, näherst Du Dich Deinem Ziel.
cpu_builder schrieb:
[...]
>> Ich weiß was 2^2 ist, aber man weiß ja nie was irgendwelche Ingenieure> für verrückte Sachen erfinden. Mit Multiplexern bin ich eben nicht so> vertraut
Noch eine Bemerkung hierzu:
Ich verstehe das so, dass Du es vermeidest, Fehler zu machen. In diesem
Fall, weil Du etwas noch nicht wissen könntest, was andere schon wissen.
Das ist aber nicht sinnvoll, weil Du auf diese Weise gar nichts machst.
Du machst so zwar keine Fehler, aber auch nichts Richtiges. Aber das ist
doch Dein Ziel: Etwas Richtiges zu machen. Oder? (Und, wie gesagt:
Fehler sind auch wertvoll.)
Es gibt immer Leute in Deiner Umgebung, die Deine Fehler unsachlich
kritisieren. Das Beste ist, meiner Meinung nach, sich mit diesen
Menschen nicht auf Gespräche einzulassen. Das tut nur weh. Es bringt
Dich nicht weiter.
Selbst wenn diese Kritik auch sachliche Aspekte hat; es gibt keinen
guten Grund sich nach jemandem zu richten, der sachliche Kritik mit
persönlichen Herabsetzungen verbindet.
Jemand der Dir wirklich helfen will, wird Dich auf Fehler hinweisen und
gut. Und manche werden Dich ermutigen und auch kleine Fortschritte
bemerken und Dich dafür loben. Halte Dich am besten an diese Leute.
Ich weiss auch nicht ob Du das packen wirst. Aber ich richte mich
hauptsächlich danach, ob Du es wenigstens versuchst - und wenn es noch
so murksig ist.
Erinnere Dich an Deinen ersten Versuch zum Datentransport. Wie habe ich
darauf reagiert? Wie ging es Dir damit?
cpu_builder schrieb:>> out-of-order execution, branch prediction, Pipeline, mehrfach>> assoziativen Caches>> Das ist zwar beschleunigend, aber gefährdet ja auch die Sicherheit (5> Arten von Spectre u.ä. & Meltdown) und ist stromverschwendend
Das Gerät, auf dem ich soeben tippe, hat des Stroms wegen beides. 4x
Cortex A57, die in Komplexität mit x86-64 mithalten können und von
Spectre&Co betroffen sind. Und 4x Cortex A53, die das kalt lässt.
Assoziative Caches und Branch Prediction haben jedoch alle in dieser
Klasse, geht nicht anders.
Der Kern des Problems mit Spectre&Co ist nur OOO. IMHO war bisher noch
kein in order Design betroffen, wie Cortex A53/55 und Intels Atoms vor
Silvermont.
> ARM-CPUs sehen vom Design her noch deutlich "ordentlicher" aus,> logischer, simpler, im Gegensatz zu X86 oder dem misslungenen X64
Die Befehlsatzarchitektur schon. Im internen Aufbau schenken sich die
Cortex A7x, AMDs und Intels wenig.
Wenn du es ganz einfach haben möchtest, dann versuche es doch mal mit
einem Analogrechner.
Die gab es mal und haben funktioniert.
Da muß man sich aber in die OPV reinknien.
http://www.robotrontechnik.de/index.htm?/html/computer/analogrechner_e.htm
Vielleicht wäre der APS2 mit nur acht OPV etwas für dich.
michael_ schrieb:> versuche es doch mal mit> einem Analogrechner.
:)
Ja, die gab es mal.
Allerdings können solche Geräte wirklich nur rechnen und nichts anderes.
Programmierbar waren sie durch Stöpseln von Verbindungskabeln, ich
vermute, das ist nicht das, was der TO möchte. ;)
Cyblord -. schrieb:> Schon mal die LUTs eines FPGA angeguckt?>> Deine Erfindung? Sorry entweder Troll oder Hybris jenseits aller> Heilungschancen.
Es gibt immer wieder einen, der sowas "erfindet." Ich habe selber bei
der Siemens einen Projektleiter gehabt, der ganz super stolz drauf war,
dass er auf die Idee gekommen ist, dass man die Delays und Kombinationen
von LUTs in FPGAs dazu verwenden könnte, Delays für seine analogen
Leistungsverstärker zu verwenden. Hat er sogar durchgesetzt dass es
patentiert wird.
Ich dachte eher an digital, aber gut zu wissen dass es sowas gibt.
Jetzt beiße ich mir die Zähne am Bauen von zwei 4:1-Multiplexern in
KLogic aus. Oder vielleicht in Logism. Mal sehen.
cpu_builder schrieb:> ARM-CPUs sehen vom Design her noch deutlich "ordentlicher" aus,> logischer, simpler, im Gegensatz zu X86 oder dem misslungenen X64
Das glaubst aber auch nur du. Schau dir mal RISC-V an, wenn du etwas
ordentliches-logisches-simples ohne Ballast haben willst.
Davon abgesehen sind "Befehlssatz" und "Implementation" völlig
unterschiedliche Dinge. Intel-CPUs führen seit 20 Jahren (Pentium Pro)
keinen x86-Code mehr aus.
> M.A. S. schrieb:> Werde ich. Dann werde ich mir mal ein paar Bücher kaufen, statt hier> weiter Anfängerfragen zu stellen.
Gehe lieber in die nächste Bibliothek und leihe dir ein paar Dutzend
passende Bücher aus. Kaufen kannst du die drei Relevanten später auch
noch.
>> War ja klar. Erst große Töne spucken und dann bei den ersten Anzeichen>> von Komplexität den Schwanz einziehen.>> Ich bin nunmal Physiker, kein Elektrotechniker. Es kann mir ja niemamd> vorwerfen sich dafür zu interessieren, wie eine CPU arbeitet.
Nö, du bist ein Quatschkopf. Wenn du Physiker wärst, also mal
Wissenschaft gemacht hättest, dann hättest du dich erstmal informiert,
bevor du deine absolute Unwissenheit zur Schau stellst.
> Wenn es mir UNNÖTIG KOMPLIZIERT erscheint, wie fast alle> Technik heute, dann erfinde ich eben was simpleres,> was auch funktioniert.
Das kannst du machen. Hab ich auch schon gemacht. Das Ergebnis kann sich
durchaus sehen lassen, aber... naja, wenn man ein Design mit den Fähig-
und Fertigkeiten von vor 30 Jahren aufbaut, bekommt man auch die
Leistung von vor 30 Jahren.
> Das bekomm' ich wahrscheinlich> auch ohne all die modernen "Weiterentwicklungen" hin
Wenn du dich intelligenter anstellst als bisher, dann ist das kein
großes Problem. Aber darauf sinnvoll einen Webbrowser laufenzulassen
(d.h. das Teil in dieser Welt produktiv einsetzen) wirst du nie im
Leben.
Um die Funktionsweise einer CPU besser zu verstehen, baue ich in Logisim
nun Schritt für Schritt einige Schaltungen auf. (Teil 1:
Beitrag "diskrete CPU")
Später werde ich die CPU mit Logikbausteinen nachbauen.
Hältst du es nicht für sinnvoller, das in VHDL oder Verilog zu machen?
Da kannst du alles genauso schrittweise aufbauen und dir die Gatter
ansehen, aber du kannst es auch mit wenig Aufwand direkt auf einen Chip
bringen.
Außerdem ist HDL-Erfahrung kein Nachteil
Stefanus F. schrieb:> Wenn du weder eine Frage noch eine coole Lösung zu präsentieren hast,> warum hast du dann einen neuen Thread eröffnet? Lust auf> Bullshit-Diskussionen?
Ich habe demnächst eine Lösung. Abgesehen davon:
(a) trifft der Threadname "diskrete CPU" nicht mehr zu
(b) ist das laden der über 100 Beiträge auf dem Handy langsam
M.A. S. schrieb:> Allerdings können solche Geräte wirklich nur rechnen und nichts anderes.> Programmierbar waren sie durch Stöpseln von Verbindungskabeln,
Bei Digitalrechnern war das damals auch nicht anders.
cpu_builder schrieb:> Ich dachte eher an digital, aber gut zu wissen dass es sowas gibt.>
Für digital hast du aber keine Change!
Ich lese hier schon eine Weile belustigt mit.
> Jetzt beiße ich mir die Zähne am Bauen von zwei 4:1-Multiplexern in> KLogic aus. Oder vielleicht in Logism. Mal sehen.
Deine Zähne sind schneller raus, als wie du denkst. Was dann?
Mach das auf dem Bildschirm.
Vor paar Jahren wollte hier das auch schon mal einer machen.
Nichts mehr davon gehört.
Ich habe damals empfohlen, mit einem entsprechendem fetten Netzteil
anzufangen.
Muss für dieses Rumgestöpsel jetzt noch ein zweiter Thread her? Zweimal
null Inhalt ist halt immer noch null Inhalt.
Mach doch erst mal was Praktisches und lerne...
@ cpu_builder
Ich habe mir jetzt auch mal Logisim installiert. Ich könnte dann Deine
Entwürfe vom Multiplexer usw. auch laden und ausprobieren, falls Du sie
hier als Anhang postest.
cpu_builder schrieb:> ich würde gerne eine CPU mit einer eigenen Architektur, die möglichst> wenige Transistoren benötigt, diskret selber bauen, um die grundlegende> Funktionsweise besser zu verstehen.
Noch mal zum Eingangspost - hier ist eindeutig die Rede vom bauen, nicht
simulieren, nicht theoretisieren...
Warum ist es heutzutage so unattraktiv, einfach mal ein Steckbrett, ein
5V-Netzteil, ein paar ICs der 74er Reihe und LEDs mit Vorwiderstand zu
beschaffen und endlich mal die reale Welt zu erfahren?
Ich meine, geile Freundinnen, die alle Jpg mit Nachnamen heißen, sind
auch nicht der Weisheit letzter Schluss, oder?
Theor schrieb:> @ cpu_builder>> Ich habe mir jetzt auch mal Logisim installiert. Ich könnte dann Deine> Entwürfe vom Multiplexer usw. auch laden und ausprobieren, falls Du sie> hier als Anhang postest.
Helfersyndrom?
cpu_builder schrieb:> Da ich mich entschieden habe, in Logisim fortzufahren, bis ich> irgendwann die simulierte Schaltung baue, erstelle ich gleich einen> neuen Thread
Das finde ich durchaus sinnvoll.
Axel S. schrieb:> Theor schrieb:>> @ cpu_builder>>>> Ich habe mir jetzt auch mal Logisim installiert. Ich könnte dann Deine>> Entwürfe vom Multiplexer usw. auch laden und ausprobieren, falls Du sie>> hier als Anhang postest.>> Helfersyndrom?
Dies ist ein Forum.
Leute eröffnen Threads um mit anderen Leuten über etwas zu diskutieren.
Ein Forum lebt davon, dass manche sich hier einbringen möchten. Das ist
völlig in Ordnung.
Wenn ganz andere Leute keinen Bock auf ein bestimmtes Thema haben oder
ihnen das Niveau zu gering ist, steht es ihnen frei, diesen Thread
weiträumig zu umfahren.
Warum machst Du das nicht einfach und lässt diejenigen, die das anders
sehen, in Ruhe?!
M.A. S. schrieb:> Warum machst Du das nicht einfach und lässt diejenigen, die das anders> sehen, in Ruhe?!
Naja, ich als Helfer käme mir jetzt schon ein wenig verarscht vor.
1
TO: Ich will eine CPU bauen - nur aus Transistoren!
2
Helfer: Da hast Du aber eine Menge vor...
3
....
4
(160 Beiträge weiter)
5
TO: Puh... ist das kompliziert!
6
...
7
TO: Ich will eine CPU in Logisim simulieren!
8
....
Was ich damit sagen will: Der TO bindet eine Menge KnowHow und Arbeit
von potentiellen Helfern. Am Ende sagt er dann: "Verarscht! Verarscht!
Das mit den Transistoren lasse ich! Jetzt nehme ich einen neuen Thread
und machs mit Logisim!". Nach 2 Tagen schmeisst er schon alles hin,
bevor er überhaupt angefangen hat.
Ich kann mir schon vorstellen, wie es weiter geht:
1
TO: Ich will eine CPU in Logisim erstellen - habe aber keinen Plan!
2
Helfer: Da hast Du aber eine Menge vor...
3
....
4
(Nochmals 160 Beiträge weiter)
5
TO: Puh... ist das kompliziert!
6
...
7
TO: Ich will eine fertige CPU verwenden! Wo bekomme ich noch einen Z80?
8
....
9
(Nochmals 160 Beiträge weiter)
10
TO: Wie schließe ich den an?
11
(Nochmals 160 Beiträge weiter)
12
TO: Zu kompliziert, ich mach jetzt Urlaub!
Wie ich den TO einschätze: Er hat keinen Plan und offenbar nicht die
Fähigkeiten oder den Willen, sich besondere Kenntnisse durch
Selbststudim anzueignen. Stattdessen will er sich alles im Detail
vorkauen lassen, um dann morgen fertig zu sein.
Ich schätze das ein als verlorene Liebesmüh. Hier werden einfach
Ressourcen unnütz gebunden und auch verschwendet. Besser wäre es, wenn
der TO sich selbst in die erforderlichen Themen einarbeiten würde. Man
kann nur hoffen, dass irgendein späterer interessierter Leser mit den
Infos, die hier bereitwillig gegeben wurden, mehr anfangen kann.
M.A. S. schrieb:> Axel S. schrieb:>> Theor schrieb:>>>>>> Ich habe mir jetzt auch mal Logisim installiert. Ich könnte dann Deine>>> Entwürfe vom Multiplexer usw. auch laden und ausprobieren, falls Du sie>>> hier als Anhang postest.>>>> Helfersyndrom?>> Dies ist ein Forum.> Leute eröffnen Threads um mit anderen Leuten über etwas zu diskutieren.> Ein Forum lebt davon, dass manche sich hier einbringen möchten. Das ist> völlig in Ordnung.
Zieh dir mal den Stock aus dem Arsch.
Es ist ein himmelweiter Unterschied, ob man diskutiert und sein
vorhandenes Wissen weiter vermittelt. Oder ob man sich eine obskure(?)
Software installiert, um im Falle des Falles helfen zu können. Nicht daß
ich die Wahrscheinlichkeit dafür besonders hoch schätzen würde. Unser
toller anonymer TE wird vermutlich auch in Logisim an Trivialitäten wie
einem Multiplexer scheitern oder daran, daß er Logik-Ausgänge direkt
zusammenschaltet.
Ernsthaften Willen (von Befähigung ganz zu schweigen!) zu eigenständigem
Lernen hat er bislang jedenfalls nicht demonstriert.
Frank M. schrieb:> Was ich damit sagen will: Der TO bindet eine Menge KnowHow und Arbeit> von potentiellen Helfern. Am Ende sagt er dann: "Verarscht! Verarscht!
Genau so. Außer daß ich Hanlons Razor heranziehen würde. M.a.W. keine
böse Absicht unterstellen, sondern schlicht Blödheit.
https://de.wikipedia.org/wiki/Hanlon%E2%80%99s_Razor
Frank M. schrieb:> Ich schätze das ein als verlorene Liebesmüh. Hier werden einfach> Ressourcen unnütz gebunden und auch verschwendet.
Man könnte auch auf gut Deutsch sagen: Der Thread ist - sowohl was
Austausch wie auch Knowhow-Aspekte angeht - völlig fürn Arsch.
Liegt das an Syndrom Facebook, die ganze Welt am eigenen Laut
Denken/Lernprozess teilhaben lassen zu müssen?
Gerade weil sich auch kaum einer die Müh macht, nach älteren bzw.
wertvolleren Beiträgen zu dem Thema zu recherchieren, wird das Forum mit
immer mehr Posts dieser Art zugemüllt und wird damit unlesbar.
Frank M. schrieb:>> sehen, in Ruhe?!>> Naja, ich als Helfer käme mir jetzt schon ein wenig verarscht vor.TO:> Ich will eine CPU bauen - nur aus Transistoren!> Helfer: Da hast Du aber eine Menge vor...> ....> (160 Beiträge weiter)> TO: Puh... ist das kompliziert!> ...> TO: Ich will eine CPU in Logisim simulieren!> ....>> Was ich damit sagen will: Der TO bindet eine Menge KnowHow und Arbeit> von potentiellen Helfern. Am Ende sagt er dann: "Verarscht! Verarscht!> Das mit den Transistoren lasse ich!Axel S. schrieb:> Es ist ein himmelweiter Unterschied, ob man diskutiert und sein> vorhandenes Wissen weiter vermittelt. Oder ob man sich eine obskure(?)> Software installiert, um im Falle des Falles helfen zu können. N> ...> Ernsthaften Willen (von Befähigung ganz zu schweigen!) zu eigenständigem> Lernen hat er bislang jedenfalls nicht demonstriert.
Ist ja gut, ihr habe ja recht. Trotzdem:
(1)
Axel S. schrieb:> Helfersyndrom?
Wenn es hier einen gibt, der aus welchen Gründen auch immer, Lust auf
dieses (aus Eurer Sicht sinnlose) Unterfangen hat, dann soll er es doch
machen.
(2)
Axel S. schrieb:> Zieh dir mal den Stock aus dem Arsch.
Mäßijen se ma jefälligst Ihre Ausdrucksweise!
;D
Fitzebutze schrieb:> Liegt das an Syndrom Facebook, die ganze Welt am eigenen Laut> Denken/Lernprozess teilhaben lassen zu müssen?> Gerade weil sich auch kaum einer die Müh macht, nach älteren bzw.> wertvolleren Beiträgen zu dem Thema zu recherchieren, wird das Forum mit> immer mehr Posts dieser Art zugemüllt und wird damit unlesbar.
Ja, OK, das ist ein Punkt!
2. Thread gelöscht?! kann ihn nicht mehr finden ...
egal, dennoch: meine CPU in Logisim ist fertig. u.a. mit Kenntnissen die
ich hier erworben habe.
Danke für die Hilfe!
(auch wenn manche, im Gegensatz zu z.B. Theor, es mir eher schwer
gemacht haben)
Multiplexer machen es kompliziert in Bezug auf Gattermenge, später es
aus Gattern zu bauen -> 2 Eingabe- & 1 festes Ausgaberegister (ALU), + 1
Register, an dem eine LED hängen könnte
cpu_builder schrieb:> egal, dennoch: meine CPU in Logisim ist fertig. u.a. mit Kenntnissen die> ich hier erworben habe.
Glaubt keiner, das mit fertig, zeig mal .log oder screenshot.
IT-Archivar schrieb:> cpu_builder schrieb:> egal, dennoch: meine CPU in Logisim ist fertig. u.a. mit Kenntnissen die> ich hier erworben habe.>> Glaubt keiner, das mit fertig, zeig mal .log oder screenshot.
Mir ist es eigentlich vollkommen egal was ihr über mich zu wissen
glaubt. Aber ich kann es ja senden.
cpu_builder schrieb:> 2. Thread gelöscht?! kann ihn nicht mehr finden ...
Der wurde nicht gelöscht, sondern mit diesem Thread zusammengeführt. Du
musst nur mal ein paar Beiträge nach oben blättern.
cpu_builder schrieb:> Aber ich kann es ja senden.
Ich würde das nicht tun. Die Stimmung hier ist inzwischen so aufgeladen,
dass hier kaum noch gute-laune Kommentare zu erwarten sind. Vielleicht
lässt du das Thema besser einfach ein halbes Jahr lang ruhen und
präsentierst dein Projekt dann.
cpu_builder schrieb:> 2. Thread gelöscht?! kann ihn nicht mehr finden ...>> egal, dennoch: meine CPU in Logisim ist fertig. u.a. mit Kenntnissen die> ich hier erworben habe.>> Danke für die Hilfe!> ...
Ah. Magst Du das mal posten, bitte? Das würde mich interessieren.
Wolfgang R. schrieb:> cpu_builder schrieb:> meine CPU in Logisim ist fertig.>> Hätte ich so schnell nicht erwartet - zeig doch bitte mal!
Theor schrieb:
> Ah. Magst Du das mal posten, bitte? Das würde mich interessieren.Stefanus F. schrieb:> cpu_builder schrieb:> Aber ich kann es ja senden.>> Ich würde das nicht tun. Die Stimmung hier ist inzwischen so aufgeladen,> dass hier kaum noch gute-laune Kommentare zu erwarten sind. Vielleicht> lässt du das Thema besser einfach ein halbes Jahr lang ruhen und> präsentierst dein Projekt dann.
Da es offensichtlich Interessierte gibt, sende ich die CPU. Ich habe
jetzt etwas spät erst nach Antworten, deshalb morgen früh.
Vielleicht hilft mir ja jemand bei der Verbesserung.
Ansonsten komme ich gerne in 1/2 Jahr wieder mit dem Thema an. Aber
einen Versuch ist es doch Wert ;-)
Korrektur: ich wollte schreiben dass es jetzt schon spät ist, und ich
deswegen morgen früh die Datei vom PC hole. Ich habe leider im Moment am
PC zu Hause keine Internetverbindung, nur am Handy
Also ich bin ja mal gespannt was da kommt.
Ne CPU zu bauen ist ja nunmal nicht so einfach.
Wobei wirs ja mit 32Bit MIPS auch gleich komplett übertrieben haben ;)
http://www.fritzler-avr.de/spaceage2/index.htm
(Der eingebundene Webring ist SEHR zu empfehlen!)
Aber in klein geht sowas ja auch:
http://digitarworld.uw.hu/ttlcpu.html
Der Nibbler wurde hier ja schon verlinkt.
cpu_builder schrieb:> Da es offensichtlich Interessierte gibt, sende ich die CPU. Ich habe> jetzt etwas spät erst nach Antworten, deshalb morgen früh.
Ich warte immer noch gespannt auf die geistigen Ergüsse dieses
"cpu_builder".
Ehrlich gesagt gehen mir die Hirnfurze dieses Typen am Arsch vorbei!