Hallo, ich will mir einen kleinen "Prozessor" bauen der lediglich eine LED ein und aus schalten können soll, also noch nicht mal rechen. Ich weiß, dass Prozessor völlig übertieben ist, aber wusste nicht wie ich sonst diese Schaltung nennen soll :) Ich habe von Prozessoren wenig Ahnung und habe mir deswegen gedanklich schon eigene Schaltungen ausgedacht, wo 8 einprogrammierte Befehle(ein Befehl ist 4 Bit lang) in einer Schleife in einem Takt immer weiter ausgeführt werden. Also sehr sehr primitiv. Aber ich habe nur Kenntnisse in den Grundbausteinen der Elektronik also Wiederstände, Tranistoren usw... und sonst nur von C++ und Java. Weswegen ich bei der Planung immer wieder auf Probleme stoße, wo ich nicht wirklich weiter komme. Deswegen wollte ich Fragen, ob ihr irgendwelche Tutorials oder Bücher kennt, die sich genau damit auseinander setzten, oder würdet ihr mir empfehlen sich erst einmal mit einem Gekauften Prozessor auseinander zu setzten, bevor ich Anfange einen eigenen, wenn man das überhaupt so nennen kann, zu bauen? Weil ich dachte mir, dass man vielleicht klein anfangen sollte, bevor man sich gleich nen richtigen Prozessor\Microcontroller kauft. Mir geht es hier nicht darum möglichst einfach eine LED an und aus zu schalten, sondern zu verstehen wie Prozessoren funktionieren und irgendwann einen eigenen bauen zu können, so primitiv dieser dann auch sein mag. Ich hoffe ihr könnt mir helfen. Grüße Michael
Deine Gedanken sind gut. Jetzt solltest Du einfach mal Google benutzen, und schauen was es in der Richtung schon alles gibt. In zwei Stunden kannst Du dann konkrete Fragen stellen.
So ein Prozessor ist in der internen Struktur reichlich komplex. Ein Eigenbau wird sicher sehr teuer und aufwändig. Ein vernünftiges Buch über CPU-Architekturen, gerne ein älteres. Und dann mal im Datenblatt eines kleines Prozessors rumlesen. Parallel dazu mal ein Blinke-Programm auf einem Einfach-Prozessor laufen lassen.
Michael Buschmann schrieb: > Grundbausteinen der Elektronik also > Wiederstände ... Glückwunsch, du kennst mehr Grundbausteine als es gibt. :)
Ein gleichermaßen primitives und recht hübsches Beispiel ist meiner Ansicht nach, der MC14500B. Guckst Du hier: http://www.tinymicros.com/wiki/MC14500B
Michael Buschmann schrieb: > ich will mir einen kleinen "Prozessor" bauen der lediglich eine LED ein > und aus schalten können soll, also noch nicht mal rechen. Grundsätzlich suchst du also ein Schrittschaltwerk. Das ist sowas wie ein ziemlich blöder Prozessor, der nur ein linares Programm abspulen kann. Im einfachsten Fall ein binärer Zahler und ein Speicherbaustein, dessen Adressen von eben diesem Zähler gewählt werden. Aber schon so ein einfaches Schrittschaltwerk kann man gehörig aufpeppen. Mit sowas z.B.: -Start/Stop-Logik -Reset-Logik (teilweise durch Daten gesteuert) -Verzögerungs-Logik (durch Daten gesteuert) Das alles kann man mit ein paar wenigen CMOS-Steinen aufbauen und schon damit praktisch alles lösen, was z.B. zum Betrieb irgendwelcher LED-Effekte nötig ist. Allerdings wirst du dir dabei einen "Programmierstil" angewöhnen, den du bei der Programmierung richtiger µC am besten gleich wieder vergessen solltest...
Hallo Michael, Wir haben beim Studium mal einen Prozessor gebaut. Dafür haben wir einen FPGA benutzt und Ram und Display Adaptiert. Wir hatten damals auch einen Assembler, den man mit Opcodes und Schlüsselwörter auf seine Architektur anpassen konnte. Einige Hürden gab es allerdings zu überwinden. Das Hauptproblem ist wohl das Programm in den Hauptspeicher zu bekommen. Aber beim Xilinx FPGA kann man den Blockram in Hexcodes initialisieren. Das Ganze war ein schönes, kompliziertes Projekt. Allerdings war das kleine 7 Segment Display mit einer Laufschrift schnell langweilig ;) Der Weg ist das Ziel ;) Martin
c-hater schrieb: > Grundsätzlich suchst du also ein Schrittschaltwerk. Das ist sowas wie > ein ziemlich blöder Prozessor, der nur ein linares Programm abspulen > kann. Das war bei der Zuse Z3 auch nicht anders.
Vielen Dank :) Besonders das http://www.nand2tetris.org/ sieht sehr interessant aus. Ihr habe mir sehr geholfen.
Michael Buschmann schrieb: > lediglich eine LED ein > und aus schalten können soll Kippschalter? Flip-Flop?
Michael Buschmann schrieb: > Hallo, > ich will mir einen kleinen "Prozessor" bauen der lediglich eine LED ein > und aus schalten können soll, also noch nicht mal rechen. Und er soll also nur mit "seiner" Taktfrequenz immm die LED an- und ausschalten? Also einfach nur blinken? Oder soll die Zeit etwa einstellbar gemacht werden? Dann bräuchtest du schon einen Zähler und einen Vergleicher, also ein Rechenwerk. > Weil ich dachte mir, dass man vielleicht klein anfangen sollte, bevor > man sich gleich nen richtigen Prozessor\Microcontroller kauft. Diese Idee an sich ist nicht schlecht... > Mir geht es hier nicht darum möglichst einfach eine LED an und aus zu > schalten, sondern zu verstehen wie Prozessoren funktionieren Das ist ja nun nicht soooo schwierig. In den allermeisten Anfängerbüchern ist da was zu finden... Und dann gibt es Klassiker wie den hier: http://www.wolfgang-back.com/knowhow_home.php > und irgendwann einen eigenen bauen zu können, so primitiv dieser dann > auch sein mag. Wozu das? Willst du dir deine Widerstände auch selber wickeln oder Transistoren schnitzen? Es ist, um z.B. ein Auto gut zu bedienen nicht unbedingt nötig, selber eines zu bauen. Da reicht es aus, wenn man verstanden hat, wie ein Motor und seine Aggregate funktionieren und wie sie optimal eingesetzt werden. > ich habe ... Kenntnisse in den Grundbausteinen ... also Wiederstände Bist du siecher?
Michael Buschmann schrieb: > ich will mir einen kleinen "Prozessor" bauen der lediglich eine LED ein > und aus schalten können soll, also noch nicht mal rechen. Deine Aufgabe kann ein Schaltwerk erfüllen. Ein Schaltwerk ist ein Schaltnetz, wobei der Ausgang nicht nur von der Eingangsbelegung, sondern auch von der Vergangenheit abhängt. Es speichert sozusagen die Vergangenheit ab und nutzt sie für aktuelle Operationen. Diese Aufgabe erfüllen endliche Mealy- und Moore-Automaten. Beide können über einen Automatengraphen dargestellt, vereinfacht und dann in Logik bzw. Programmiersprache realisiert werden. Für Deine angestrebte Aufgabe bedeutet das also: - Du erstellst dir einen Zustandsgraphen für deine gewünschte Aufgabenstellung. - Du überführst diesen Grafen in eine Zustandstabelle - Du vereinfachst dies Zustandstabelle mittels der Regeln der Booleschen Algebra. (Hier gibt es gute Werkzeuge für die Verfahren nach Karnaugh-Veitch oder Quine-McCluskey) - Du testest mittel einer einfachen Programmiersprache z.B. AWL - Du realisierst den Automaten mittels Logik. Zum besseren Verständnis habe ich dir mal zwei Beispiele beigefügt. Beispiel 1 realisiert die Funktion mittels AWL und Beispiel 2 mittel Logikgattern.
:
Bearbeitet durch User
Lothar Miller schrieb: >> und irgendwann einen eigenen bauen zu können, so primitiv dieser dann >> auch sein mag. > Wozu das? Willst du dir deine Widerstände auch selber wickeln oder > Transistoren schnitzen? > Es ist, um z.B. ein Auto gut zu bedienen nicht unbedingt nötig, selber > eines zu bauen. Da reicht es aus, wenn man verstanden hat, wie ein Motor > und seine Aggregate funktionieren und wie sie optimal eingesetzt werden. Natürlich kann man Dinge gut nutzten ohne sie zu verstehen, aber genau das will ich nicht/darum geht es doch. Wie ich schon betont hatte, geht es nicht darum möglichst einfach eine LED Blinken zu lassen. Es geht darum erste Schritte in der Digitalen Elektronik zu machen und langsam zu verstehen wie ein Prozessor/Microcontroller funktioniert. Und ich meine jetzt nicht Widerstände wickeln usw... Natürlich benutze ich gekaufte Transistoren und Widerstände. Und um es etwas genauer auszuführen, ich will ca. 8 Befehle einprogrammieren können, jeweils 4 Bit lang, die nacheinander in einer Schleife ausgeführt werden, sodass ich z.B. LED An, LED Aus, Warte, Warte, Warte, LED An, Warte, Warte Springe wieder zum Anfang. Dann würde ich Anfangen, wie ich Sprungbefehle einbauen könnte, also z.B: GoTo 3. Dann würde ich mir überlegen wie ich einen FullAdder implementieren kann und aus dem Programm nutzten kann usw... Es geht nur darum das ich am Schluss etwas eigens zu haben, was ich vollständig verstehe. Natürlich könnte ich mir irgend nen Microcontroller holen, den man am besten noch mit einer mitgelieferten Software Programmieren kann, wo ich nur noch das Programm zusammenklicken muss. Aber genau das will ich doch eben nicht ! ------------------------------------------------------------------------ ----- Danke Joe G. für die Hilfe :)
Suche mal im Web nach der genialen Software "Logisim" (ist frei), da gibts einige "Verrückte", die komplette Prozessoren nachgebildet haben. Wenn du das irgenwann auch kannst, kannst du ja zum Lötkolben greifen. Hat ausserdem den Vorteil, dass du bis dahin nichts kaufen musst oder kaputt machen kannst. :-)
Tastenprogrammierbare Steuerung: http://www.elektronik-labor.de/Projekte/TPS9.html#t24 Gakken GMC4: http://demin.ws/blog/english/2012/07/04/gmc-4/
Michael Buschmann schrieb: > Weil ich dachte mir, dass man vielleicht klein anfangen sollte, bevor > man sich gleich nen richtigen Prozessor\Microcontroller kauft. Ich würds genau umgekehrt machen. Erstmal einen kleinen MC in Assembler programmieren, damit man überhaupt versteht, wie so eine CPU intern tickt. Man kann viel besser eine Schaltung entwickeln, wenn man erstmal weiß, was sie überhaupt machen soll. Für Deine Blink-LED ist z.B. ein ATtiny85 oder ATtiny4 sehr gut geeignet. Du kannst dann auch versuchen, mit möglichst wenig verschiedenen Befehlen auszukommen. Und diese Befehle kannst Du dann in einem FPGA in VHDL implementieren.
>LED An, >LED Aus, >Warte, >Warte, >Warte, >LED An, >Warte, >Warte >Wieder von vorne Also muss das Ding drei Befehle ausführen können (Warte zählie ich mal nicht mit). Wenn Du als Programmspeicher ein EEprom verwendest, kannst Du dazu einfach vier einzelne Bits verwenden. Bit 0 = Led An -> Set Eingang des R/S Flipflops Bit 1 = Led Aus -> Reset Eingang des R/S Flipflops Ausgang des R/S Flipsflops -> LED. Wieder von vorne -> Reset Eingang des Programmzählers. Der Programmzähler wäre ein simpler Binärzähler. In deinem Fall reichen 4 Bits. Dessen Ausgänge verbindest Du direkt mit den Adress-Eingängen des Programmspeichers. Und dann brauchst Du noch eine Taktgeber, den kannst Du ganz einfach aus zwei Invertern mit zwei Widerständen und einem Kondensator bilden. Oder du nimmst einen Taster mit Entprell-Schaltung (Aufwand ist ungefähr der gleiche). Eine Schaltung zum automatischen Reset bei Einschalten der Stromversorgung wäre noch angemessen, ansonsten startet das programm an irgendeiner zufälligen Stelle. Baugruppen: - Taktgeber - Auto-Reset Schaltung - Binärzähler - Programmspeicher (EEprom) - R/S Flipflop - LED Und natürlich ist dann noch ein Eprom Brenner von Nöten, um das Programm in den Programmspeicher hinein zu bekommen. Da der nur einen einzigen Chip unterstützen muss, kann der recht simpel ausfallen - sofern dein PC einen echten parallel-port hat. Alternative zum EEprom wäre eine Dioden-Matrix. Da müsste man das Programm dan mit dem Lötkolben rein "brennen" bzw entsprechend viele Schalter einbauen. Also 9 x 4, für das oben genannte Programm.
stefan us schrieb: > Also muss das Ding drei Befehle ausführen können (Warte zählie ich mal > nicht mit). Aber gerade Warte setzt sich ja üblicherweise aus anderen Befehlen zusammen. Ich kenne auf jeden Fall keinen uC, der das direkt als Hardware implementiert hat...
Wenn du den Prozessor langsam genug taktest, reicht ein "NOP" zum Warten...
Frank Esselbach schrieb: > Suche mal im Web nach der genialen Software "Logisim" (ist frei), da > gibts einige "Verrückte", die komplette Prozessoren nachgebildet haben. Dann darf ich mich wohl auch zu den Verrückten zählen :-P http://hackaday.io/project/1228-Another-microcontroller-built-in-Logisim Ein kleiner Assembler (Pythonscript) ist auch dabei > Hat ausserdem den Vorteil, dass du bis dahin nichts kaufen musst oder > kaputt machen kannst. :-) Und vor allem gehts es viel schneller. Man entdeckt immer wieder kleine Logikfehler und Raceconditions die nur bei einem bestimmten Programmablauf auftreten, im Simulator kann man schnell ausbessern
Klassisch könnte man einen Taktgenerator an einen 4Bit-Aufwärtszähler mit parallem Ausgang schalten, die Ausgänge an die Adressleitungen eines ollen EPROMS klemmen und an die Datenleitungen des EPROMS die LEDs (über Treibertransistoren) hängen. Da kann man dann 16 individuell programmierbare LED-Kombinationen durchschalten. Mit einem 8Bit-Zähler dann eben 256 Kombinationen. Aber dieser Klassiker ist mittlerweile obsolet, weil eine Mikrocontroller-Schaltung mehr Möglichkeiten mit weit weniger Bauteilen bietet...
Wenn du von der Digitaltechnik noch nicht viel Ahung hast, dann denke ich, dass ein Selbstbau-Prozessor etwas zu viel ist, für den Anfang. Die von Frank vorgeschlagene Simulationssoftware "LogiSim" scheint mir genau passend für dich zu sein. Du kannst dich um die Funktion und das Verständnis dafür kümmern und bist nicht 90% der Zeit damit beschäftitg, zu löten und dann die Verdrahtungsfehler zu suchen ;-) Ist dir die Funktionsweise von grundlegenden digitalen Elementen und Schaltungen bekannt? Gatter (AND, OR, ...) Register (D-FF,...) Komparatoren Multiplexer RAM/ROM .... Wenn ja, dann kannst du dich vielleicht vorsichtig daran wagen, einen eigenen Mini-Prozessor zu bauen. Falls nein, dann mache dich erstmal mit der Funktionsweise dieser Grundelemente vertraut und baue dann auf diesem Wissen auf, indem du z.B. ein Schaltwerk baust, dass die LED blinken lässt und dann kommt irgendwann der "Mini-Prozessor".
Naja man kann ja ne statemachine aus einem binärzäler und logikgattern basteln. Sowas macht man in der berufsausbildung auch. z.B. ne Ampelsteuerung oder ne Aufzugsteuerung. Ist recht simpel wenn man Digitaltechik Kenntnisse hat. Aber ein µC bauen zu wollen ohne einen µC jemals benutzt zu haben ist nicht Zielführend.
Richtige Experten bauen sowas mechanisch auf. Verständlicher und anschaulicher gehts kaum, wenn auch nur in 4-Bit: http://www.youtube.com/watch?v=fLuvopVjAWg
Wenn es um Grundlagen geht sind solche Schaltwerke doch schon mal ein guter Anfang. Oder mal ein Museum plündern, in der alten 74er Serie gab es ja auch ein paar Komponenten um CPUs zu bauen z.B. die ALU http://en.wikipedia.org/wiki/74181. Auch nicht schlecht für Grundlagen ist die alte AMD 2900 Bitslice Serie. http://en.wikipedia.org/wiki/AMD_Am2900 Mit sowas hatten wir mal kurz im Studium rumgespielt, da gab es aber schon eine Simulationssoftware für. Hat die Sache einfacher gemacht.
Wenn es etwas verspielter werden darf kann man auch so CPUs bauen :) http://www.youtube.com/watch?v=AQXAK3m3l78
Hallo Michael, wenn ich das hier so alles lese,staune ich immer wieder, auf welche Ideen die Leute kommen! Mein Tipp lautet "Hades": http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/index.html Hades ist ein Java-basierter(s) Digital-Simulator-(Framework) der Uni Hamburg Das Framework ist offenbar über mehrere Jahre gereift und umfaßt inzwischen nicht nur eine ansehnliche Ansammlung einzelne Logikbausteine sondern auch ganze CPU's. Letztere werden oftmals aus den zuvor erklärten Logik-Komponenten zusammengebaut. Und weil alles unter Java läuft, kann man das ganze auch im Web-Browser bestaunen (ggf. muß man die Website in den Java-Sicherheitseinstellungen zulassen, damit die un/selbstsignierten Applets laufen). Hier z.B. eine einfache 4-Bit ALU: http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/90-tionline/06-ralu/alu.html Oder das hier, ein einfacher Prozessor: http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/50-rtlib/90-prima/chapter.html Unter'm Strich würde ich aber trotzdem eher Peter Dannegger in seinem Beitrag oben zustimmen und dem von ihm aufgezeichneten Weg gehen. Viel Erfolg und schreib hier mal, welchen der vielen Vorschläge Du weiterverfolgt hast und was Deine Erfahrungen waren. Igel1
Erstmal vielen Dank für die vielen tollen Antworten und Möglichkeiten! Ich denke ich werde was mit Logism oder Hades und was es nicht so an Simulatoren gibt "rumspielen" und mir mal einen kleinen Mikrocontroller kaufen und dann schauen wie mein Verständnis bis dahin wächst. Eine Frage, ich habe einen Befehls Zähler, also einen Speicher der nur den Index des aktuellen Befehls speichert, einen Speicher mit den einprogrammierten Befehlen und eine Clock, also einen Taktgeber. Ist es üblich/sollte man den aktuellen Befehl ununterbrochen ausgeben oder nur mit dem Takt einmal kurz ausgeben?
:
Bearbeitet durch User
Ich habe mal was zusammengebastelt... Ist ein Projekt für Logisim, was einen ganz einfachen, nennen wir es mal Prozessor, darstellt. Natürlich ist das kein richtiger Prozessor, aber er würde ungefähr das machen, was du dir vorgestellt hast. Der Befehlssatz besteht aus 4 Kommandos. 0x0a = LED einschalten 0x0b = LED ausschalten 0x0c = Programm von vorne starten 0x_d = Pause einfügen.. wobei die oberen 4 Bit die dauer der Pause darstellen Das Beispielprogramm ist folgendes: 0: 0x0a //LED an 1: 0x1d //kurze Pause 2: 0x0b //LED aus 3: 0x1d //kurze Pause 4: 0x0a //LED an 5: 0x5d //lange Pause 6: 0x0b //LED aus 7: 0x5d //lange Pause 8: 0x0c //zurück zum Anfang Die Befehle liegen im ROM und werden vom Programmcounter nacheinander aufgerufen. Der Befehlsdecoder wertet die Befehle aus Der Timer kann für die mit dem Befehl 0x_d übergebene Zeit den Programmcounter anhalten, so dass eine Pause entsteht. Wie gesagt, das ist natürlich bei Weitem nicht das, was man unter einem Prozessor oder Controller versteht, aber es ist eine Schaltung, die Befehle aus einem Speicher holen, interpetieren und ausführen kann. Und die Schaltung ist kurz zusammengestrickt.. kann schon sein, dass die nicht 100%ig sauber funktioniert.
Lothar Miller schrieb: > Aber gerade Warte setzt sich ja üblicherweise aus anderen Befehlen > zusammen. Ich kenne auf jeden Fall keinen uC, der das direkt als > Hardware implementiert hat... Du kennst doch bestimmt welche die man in einen Sleep Modus schicken kann und wieder über Ereignisse wecken kann ;)
schau mal bei John L. Hennessy (Author)und David A. Patterson (Author) die haben den Mips Prozessor gebaut, damit lief die Playstation 2 glaub ich. Nette Bücher gibt es von dennen, auch an deiner Uni Bibo. Teilweise auch in deutscher Übersetzung aber die ist nicht gut. Dort werden Addiere Multipliziere und so weiter beschrieben. Dazu empfähle ich dir den Tietze und Schenk.
:
Bearbeitet durch User
Lothar Miller schrieb: > Aber gerade Warte setzt sich ja üblicherweise aus anderen Befehlen > zusammen. Ich kenne auf jeden Fall keinen uC, der das direkt als > Hardware implementiert hat... Wie bitte? Der Großmeister der Digitalschaltungen kennt nicht den SC/MP?! :-) Diese Prozessorfamilie hat nämlich den Befehl DLY für genau den genannten Zweck, siehe Seite A-13: http://bitsavers.trailing-edge.com/pdf/national/scmp/4200079A_SCMP_Technical_Description_Jan76.pdf
Hallo Michael, fast hätte ich noch den Demo Computer vergessen: http://www.randelshofer.ch/fhw/gri/holzi.html ... mit sehr guter Online-Hilfe: http://www.randelshofer.ch/fhw/gri/holzihelp.html DemoComp ist ein Java-Applet, welches auf etwas höherem Abstraktionslevel das Zs.spiel der wichtigsten Computerbestandteile und das Fließen der Bits und Bytes durch die Busse und Register aufzeigt: - CPU mit 2 Registern, Program-Counter, Instruction Register, Chip-Select, R/W-Signal für die ROMs/RAMs - Adressbus - Datenbus - ROM - RAM - I/O Die geniale Idee dabei: dieser 4-Bit Computer hat einen sehr kleinen aber feinen Befehlssatz. Die Befehle kannst Du durch Kippen der Bits per Mauszeiger selber ins ROM einprogrammieren und dann durch Takten der CPU gucken, wie die CPU die Befehle aus dem ROM holt und was sie damit macht. Nach max. 1h einlesen kannst Du Deine eigenen kleinen Programme schreiben. Ist wirklich genial gemacht und didakisch wertvoll. Viele Grüße Igel1
Ich fand das Buch "CPU-Design" sehr hilfreich: http://www.amazon.de/CPU-Design-Entwurf-eines-RISC-Prozessors-VHDL/dp/3844266666/ Der Autor beschreibt den schrittweisen Entwurf eines Prozessors in VHDL.
Michael Buschmann schrieb: > Weil ich dachte mir, dass man vielleicht klein anfangen sollte gute Idee, so habe ich angefangen http://www.logikus.info/ braucht nicht mal Widerstände, Software kann selbst gesteckt werden.
Michael Buschmann schrieb: > Hallo, > ich will mir einen kleinen "Prozessor" bauen der lediglich eine LED ein > und aus schalten können soll, also noch nicht mal rechen. Dann ist es nicht mal ein Prozessor. > Aber ich habe nur Kenntnisse in den Grundbausteinen der Elektronik also > Wiederstände, Tranistoren usw... und sonst nur von C++ und Java. Dann sind die nächste Schritte zum Studieren: - Finite State Machine - Turing Machine - Irgendein kleiner alter 8-bitter: Zilog Z80, MOS 6502, intel 8080, Motorola 6800. Oh, und ungemein hilfreich wird sein: VHDL oder Verilog!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.