Space Age 2 der 32Bit MIPS Rechner in TTL

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Mahlzeit!
In einem 2 semestrigen Kurs (mit Drittmitteln) an der TU-Berlin entstand da ein kleines "Projektchen".
Die Planungs- und Bauzeit (also vom Anfang des Schaltplanentwurf bis zum fertigen Gerät+Software) vergingen dann 10 Monate.

Im Endeffekt sind das nun 496TTL Bausteine auf 4 oder 6 Lagen Platinen die im Betrieb 17A bei 5V fressen.
Dabei verstehen diese dann den MIPS1 Befehlssatz (keine Coprozessorbefehle).
Daher auch ganz normal mit dem MIPS GCC programmierbar das Teil.

Das erste Programm ist ein wissenschaftlicher Taschenrechner (Vorbild Casio fx80).
Da bisher am IO gespart wurde, es ging ersteinmal um einen funktionsfähigen Rechenkern.
IO Karten kommen aber noch in nachfolgenden Semestern, aber mit anderen Studententeams.

Alles weitere hier:
http://www.fritzler-avr.de/spaceage2/

edth:
Live Besichtigung auf der VCFB am 3. und 4. Oktober möglich!
Also dieses Wochenende: http://www.vcfb.de/2015/

Bild
Zuletzt geändert von Fritzler am Fr 2. Okt 2015, 14:34, insgesamt 1-mal geändert.
Benutzeravatar
zauberkopf
Beiträge: 9524
Registriert: So 11. Aug 2013, 15:33
Wohnort: gefährliches Halbwissen

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von zauberkopf »

Erster gedanke :
WTF ?!?!
Zweiter gedanke : Henry Westphal
Ich klick auf den Link : BINGO !

Geiles Projekt !
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Die Medizinelektroniker kennen sich eben untereinander :lol:
Und wer sonst kann sowas geniales durchziehen?
Benutzeravatar
zauberkopf
Beiträge: 9524
Registriert: So 11. Aug 2013, 15:33
Wohnort: gefährliches Halbwissen

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von zauberkopf »

Medizinelektroniker
Ups ?! Ist mir entgangen..
Nein.. ich habe seine Projekte bei Jogi gesehen.. z.B. den 250W Plasmatweeter..etc..

Ich meine, der Jung machts richtig : Nutzt Studenten um seine Weltherrschaftlichen Ideen zu verwirklichen ! ;-)
d.H. Fritzler : Du bist Henry's Igor ! ;-)
Edit : Oder Minion.. ;-)
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Die Medizin steht doch auf der Webseite seiner Firma :mrgreen:
Den 250W Plasma habe ich live gesehen -> Holos Shittos!
Bzw der NF Verstärker aus ganz vielen BUF634: "Wir konnten keine Kennlinie aufnehmen, wir haben mit dem Teil eher den Messplatz gemessen".
Also in dem Kurs "Mixed Signals" entsteht richtig geiles Zeuch, hat aber nicht alles Webseiten und verschwindet dabei leider viel zu schnell wieder in der Versenkung.
Der Space Age 1 aus 3400 Transistoren (4Bit CPU) is ja auch son Knaller und auch Touring vollständig!

Jedenfalls hat Henry um einiges mehr Ahnung von Elektronik als ich, dafür musst ich Ihm dann bei der Informationstechnischen Seite des Projektes unter die Arme greifen.
Benutzeravatar
zauberkopf
Beiträge: 9524
Registriert: So 11. Aug 2013, 15:33
Wohnort: gefährliches Halbwissen

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von zauberkopf »

Bzw der NF Verstärker aus ganz vielen BUF634: "Wir konnten keine Kennlinie aufnehmen, wir haben mit dem Teil eher den Messplatz gemessen".
*brüll* !!! Leider kenne ich das Projekt nicht.. ;-)
Die Medizin steht doch auf der Webseite seiner Firma :mrgreen:
Ich hoffe, das ich irgendwann mal mit dem beruflich zu tun haben werde..
... oder mal was mit seiner "Brut".
Ich finde solche sachen, extrem gut. Weil sie den "Kreativität" anregen und Spass machen.
Solche Leute brauchen wir.. nicht welche, die nach dem Abschluss erst mal in einen Weller Lötstation eingewiesen werden müssen..
(hatte ich mal ... ernsthaft)
Jedenfalls hat Henry um einiges mehr Ahnung von Elektronik als ich, dafür musst ich Ihm dann bei der Informationstechnischen Seite des Projektes unter die Arme greifen.
Jo... heutzutage, kann niemand mehr alles können...
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von xoexlepox »

Fritzler hat geschrieben:Im Endeffekt sind das nun 496TTL Bausteine auf 4 oder 6 Lagen Platinen die im Betrieb 17A bei 5V fressen.
Dabei verstehen diese dann den MIPS1 Befehlssatz (keine Coprozessorbefehle).
Daher auch ganz normal mit dem MIPS GCC programmierbar das Teil.
Jau! Genau so lernt man "die Computerei", und nicht (wie oft in Fortbildungen als "Computerführerschein" angeboten) mit Herumklickern auf einem Anwendungsprogramm (und unter Vernachlässigung des Betriebssystems "darunter").
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

An der TUB lernen die (Technischen) Informatiker (bzw lernten, wurde jetzt zum SCHLECHTEREN umgebaut).
Technische Grundlagen 1: Bitwackeln auf Fußpilzebene, Gatterschaltungen, (kanonische) Disjunktionen und Vereinfachung (algebraisch/grafisch) <- dieser Kurs ist nicht mehr Pflichtkurs und existiert nicht mehr!
Technische Grundlagen 2: Prozessorarchitektur anhand des MIPS und darüber hinaus
Technische Grundlagen 3: Betriebsysteme, also Scheduler, Betriebsmittelverwaltung, Speicherverwaltung, paraleles Prgrammieren - einiges runter bis zum Assembler (ARM)
Technische Grundlagen 4: Netzwerkgedöhns
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von xoexlepox »

Fritzler hat geschrieben:... dieser Kurs ist nicht mehr Pflichtkurs und existiert nicht mehr!
Ähh, und wie soll man dann die weiteren Kurse verstehen? Oder wird der (heftige!) Inhalt des ersten Kurses als "Einstiegskentnisse" vorausgesetzt?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Keine Ahnung...
Als Technischer Informatiker musste man sogar noch nen MIPS in VHDL nachbauen.
Aber stark abgespeckt, nurnoch 5 Befehle, aber Touringvollständig :lol:
Gebaut als Singlecycle, Multicycle (Statemachine, nicht Mikrocode) und Pipelined.
Den ARM Kern im 4. Semester übrigens vollständig in VHDL, nix abgespecktes (ARM9).

Der Spaceage 2 existiert auch nochmal als VHDL, einmal nur zur Simulation und dann für nen FPGA.
Der VHDL Code simuliert wirklich 1zu1, hat also auch Tristatebusse, die die Xilinx Synthese nicht auflösen konnte...
Benutzeravatar
zauberkopf
Beiträge: 9524
Registriert: So 11. Aug 2013, 15:33
Wohnort: gefährliches Halbwissen

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von zauberkopf »

Sach mal.. irgendwie schreit der Möller doch gerade zu danach das man darauf Linux portiert.
Ich meine.. ubuntu läuft selbst auf einem AVR : http://www.heise.de/make/meldung/Ubuntu ... 87093.html
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von xoexlepox »

Fritzler hat geschrieben:Den ARM Kern im 4. Semester übrigens vollständig in VHDL, nix abgespecktes (ARM9).
Ok, das ist schon eine ziemlich sportliche Aufgabe, die einiges an Hirnschmalz erfordert :) So weit bin ich da nicht "eingetaucht" -> Die Leute, die ich unterstützt habe, haben meist bei den Moore- und Mealy-Automaten schon aufgegeben :(
Benutzeravatar
Lukas
Beiträge: 157
Registriert: Mo 12. Aug 2013, 18:45

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Lukas »

Als Technischer Informatiker musste man sogar noch nen MIPS in VHDL nachbauen.
Aber stark abgespeckt, nurnoch 5 Befehle, aber Touringvollständig :lol:
Nur 5 Befehle? Ich durfte alles machen inkl. Coprozessor

Geiles Teil... sabber...
Wie hoch ist eigentlich der Takt?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

War ja 2. Semester, daher eben abgespeckt.
Gibts zum Vollausbau Schaltpläne oder dokumentierten VHDL Code und Aufgabenblätter?
Der MIPS im Petterson/Hennessey ist total schön geredet und das komplizierte bleibt unterm Tisch.

JA der Takt! 6MHz sind möglich, auf 4MHz läuft er grade.
Der langsamste Pfad ist der lesende Speicherzugriff und der bekommt schon 2 Takte im Mikrocode.
Mit noch mehr solchen Mikrocode tricksereien könnte noch mehr Takt möglich sein, die ALU ist recht schnell.

@xoexlepox
Man wurde ja anhand von Aufgabenblättern an die Hand genommen.
Implementiere dieses nach diesen Vorgaben, dann jenes.
Jetzt bau doch mal beide entitys zusammen und guck obs klappt, achja hier ist die Testbench dazu.
Einzig und allein das Steuerwerk war eine 3000 Zeilige Vorgabe.
Das Befehlsdekodieren in ARM ist sehr viel komplizierter als bei MIPS.
Zuletzt geändert von Fritzler am Fr 2. Okt 2015, 21:38, insgesamt 1-mal geändert.
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von xoexlepox »

Ein hohes Lob für den Initiator dieser Konstruktion! Da ich mit den "Anfängen der Rechnertechnik" während meiner Lehrzeit in Berührung gekommen bin, kann ich nur Mitleid mit den Menschen haben, die nur noch "Applikationen bedienen", und keinerlei Ahnung habe, was "dahinter" abgeht ;) Ich durfte damals meine Ideen auf einer Honeywell-Kiste (zwei "Kleiderschränke" voller Elektronik mit 64kB "echtem Kernspeicher!" und der dazugehörigen Peripherie im klimatisierten Bereich) mittels Lochkarten in "Fortran77" programmieren. Später drückte mir dann jemand eine 8085 nebst Handbuch (dicker Wälzer) in die Hand, und meinte "Wenn jemand damit etwas anfangen kann, dann du". Und ab dem Zeitpunkt "bin ich infiziert" ;)
shaun
Beiträge: 2399
Registriert: Mo 12. Aug 2013, 20:37

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von shaun »

>Solche Leute brauchen wir.. nicht welche, die nach dem Abschluss erst mal in einen Weller Lötstation eingewiesen werden müssen..

Kumpel hat kurz nach seiner Diss als Dr-Ing Elektrotechnik die Starthilfekabel verpolt. Seine Frau war hochgradig amüsiert :)
Aber ansonsten weiss er im Gegensatz zu vielen anderen meiner damaligen Mitstudenten schon was er tut. Bin ganz froh, gerade bei einem Kunden über eine Nachfolge-Ingenieuse gestolpert zu sein, die den Beweis angetreten hat, dass aus Harburg nicht nur Schrott kommt.
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

So, es geht weiter :lol:
Hab vorgestern den Multiplizierer/Dividierer "genehmigt" bekommen.

Der MIPS Kern kann ja immer Punktrechnung im Gegensatz zum ARM.
Daher gibts auch keine Compilerflags damit der GCC eigene Routinen einbindet.
Deswegen wird bisher in eine Exception gesprungen wenn der MIPS Punktrechnen soll, das wird dann in Assembler gemacht.
Blöderweise sind dadurch Punktrechnungen im zB Interrupt nicht möglich, da wir keine nested Exceptions implementiert haben.
Zudem ist es in Software arschlahm!

Also muss das nun in Hardware her! Natürlich in 32Bit!
Wir hatten das in der ersten Ausbaustufe schon berücksichtigt, es muss nur eine Karte getauscht werden sowie etwas Fädeldraht zum Steuerwerk verlegt werden.

Natürlich wird es kein parallel Multiplizierer, das wäre zu groß und teuer.
Es wird so gemacht wie beim echten MIPS1 Kern, addieren/subtrahieren und schieben, also ein serieller Multiplizierer/Dividierer.
Ist trotzdem um mehr als Faktor 10 schneller als die Softwareemulation und umschifft das Verbot von Punktrechnungen in exceptions.

Also im Interwebs Flussgraphen besorgt und erstmal für 4Bit in C nachgebaut um Fehler zu finden.
Manches war auch fehlerhaft... die Sonderfälle konnten aber gefunden werden, in C rechnets somit schonmal richtig.
Nun alles in Logik abbilden bzw ersteinmal ein Blockschaltbild erarbeiten welches alle 4 Algorithmen vereint.

Kurzfassung:
unsigned mul -> addieren und rechts schieben
signed mul -> addieren/subtrahieren und rechts schieben
unsigned div -> links schieben und subtrahieren
signed div -> absolute Hölle
Vorbetrachtungen, dann links schieben und addieren/subtrahieren, daanach Nachbetrachtungen und nen Sonderfall der 2x32Bit auf 0 Vergleichen muss...

Daraus ergibt sich dieses Schaltbild:
Bild

Hier noch die einzelnen Vorschriften:
Bild
Bild
Bild
Bild
Dateianhänge
k.png
divsign.png
divsign.png (10.02 KiB) 7360 mal betrachtet
division_hardware.gif
multiply.gif
multiply.gif (7.08 KiB) 7360 mal betrachtet
multiplication_hardware.gif
Benutzeravatar
zauberkopf
Beiträge: 9524
Registriert: So 11. Aug 2013, 15:33
Wohnort: gefährliches Halbwissen

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von zauberkopf »

Sach mal.. bringste das Teil zum Treffen mit ?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Höchstwarscheinlich nicht, da groß und sperrig sowie die Materialkosten von dem Ding...
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

So "mal eben" den Datenpfad gezeichnet.
Controllkrams kommt dazu wenn ich Zeit hab für die VHDL Simulation.
Bild
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

*monolog weiterführ*

Hab dann doch mal schon den Controllkrams eingezeichnet.
Gleich mit Debugschnittstelle, die ist hier aber zum Programmiergerät der EEPROMs verkommen.
In diesen EEPROMs ist dann die Statemachine für die Algorithmen gespeichert.
Auch wenn diese Statemachine nur eine Verzweigungsebene hat.

Der Punktrechner hat also sein eigenes Steuerwerk.
Das CPU Steuerwerk legt die Variablen an, sowie den gewünschten Befehl und startet dann das Rechenwerk.
Solange das Rechenwerk rechnet wird die CPU über die HALT Leitung gestoppt.
Ist das Rechenwerk fertig, so läuft die CPU wieder los und kann die Ergebnisse abholen.

Hier der Schaltplan, die Platine wird wohl mindestens genauso riesig wie die ALU Platine mit dem Barrelshifter :twisted:
Wie Kraut und Rüben siehts in der Controllabteilung dann auchnoch aus...
Bild
Benutzeravatar
Marsupilami72
Beiträge: 2874
Registriert: Mo 4. Nov 2013, 23:48
Wohnort: mittendrin

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Marsupilami72 »

Fritzler hat geschrieben:...und auch Touring vollständig!
Hnnng...das lese ich ja jetzt erst...lass mal das "o" weg! Der Alan schreibt sich ohne, mit ist es ein bayerischer Kombi...
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Donnerlittchen!
In VHDL mit 4Bit rechnets ab jetzt schonmal richtig, nach dem ausmerzen von nen paar Fehlern.

Die Doku der ausgedehnten Bitgefrickelei erspar ich euch jetz mal :twisted:
Benutzeravatar
Hightech
Beiträge: 11463
Registriert: So 11. Aug 2013, 18:37

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Hightech »

Gibt es dann auch einen C Compiler dafür ?
shaun
Beiträge: 2399
Registriert: Mo 12. Aug 2013, 20:37

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von shaun »

Steht im 1. Beitrag ;)
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Da das ein MIPS Prozessor ist, kann jeder Compiler genutzt werden der den MIPS1 (R2000) Befehlssatz unterstützt.
zB der gcc.
Auf dem Gerät läuft auch schon lange durch den gcc compilierter C Code.
Infos dazu hier:
http://www.fritzler-avr.de/spaceage2/soft_start.php

Mal noch der neue Schaltplan der Schaltung zum multiplizieren und dividieren:
http://abload.de/img/k_datf_ctrlw4u1v.png

So sieht zB der Mikrocode der Steuerung aus:
muldiv_mcode.xls
(36 KiB) 148-mal heruntergeladen
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Jetzt läufts auch in 8Bit!

Das noch zu testen war wichtig, denn:
- Nun wird kein einzelner 74181 mehr genutzt, zum addieren/subtrahieren, sondern 2 Stück mit 74182 (Group Carry).
- Es müssen Schieberegister in Reihe geschalten werden.

Ein Aufblasen auf 16/32/64 oder sonstwas Bits wäre nurnoch ein Erweitern der Schieberegisterkette und der ALU aus 181/182.
Mit 4 und 8Bit wurden alle Zahlenkombinationen und somit auch Extremfälle getestet.

Der nächste Schritt ist nun das erweitern auf 32Bit sowie der Einbau in den MIPS TTL CPU Kern, zumindest in VHDL.
Um zu testen ob die Vaiablenübergaben funktionieren.
Dazu muss ich aber erstmal im MIPS Kern VHDL Code nen paar Bugs fixen, welche in der realen Hardware aufgetreten sind.
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Inzwischen ist der Punktrechner im MIPS Kern eingebaut und rechnet brav vor sich hin, in 32Bit.
Bild
Bei instr[] ist 0022001a der div Befehl.
Gut zu sehen wie der Punktrechner die CPU anhält, da er ein eigenes Steuerwerk besitzt.
Dann rasselt er eine Berechnung durch und lässt die CPU wieder laufen.
In hi und lo steht dann das Ergebnis.
In diesem Falle 7/(-4) = -1 Rest 3
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Das Netzteil mit 5V 40A wäre dann fertig.
Sowie der Monitor mit Ansteuerung und HV Teil.

Bilder hier:
http://www.fritzler-avr.de/spaceage2/ga ... zger%E4te/

Doku hier:
http://www.fritzler-avr.de/spaceage2/down_doku.htm
shaun
Beiträge: 2399
Registriert: Mo 12. Aug 2013, 20:37

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von shaun »

Auf jeden Fall der aufwändigste Röhrenmonitor seit die Bilder laufen lernten :)
Steckt da ein besonderer Hintergrund hinter dem leichten Bauteile-Overkill?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Mit dem Monitor und NT hatte ich nichts zu tun sondern ein anderes Semester, daher kann ich dazu wenig sagen.
Da wurden eben keine hochintegrierten ICs verwendet.
Weiterhin ist alles zu Lehrzwecken mit Studenten und somit wirds auch etwas größer.

Ich guckte eher nicht schlecht wie fett das NT ist, wenn ich das mit der bisherigen "Übergangslösung" des 5V Meanwell SNT vergleiche :shock:

Aber funzt ja alles und ist auf der VCFB 2016 vom 1.10. bis 3.10 zu sehen:
https://vcfb.de/2016/index.html
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

crasbe
Beiträge: 144
Registriert: So 2. Aug 2015, 21:01

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von crasbe »

Das Foto sieht aus, als hättet ihr den Stand bei Aperture Science aufgebaut :lol:
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Es geht weiter!
Henry hat den MulDiv Schaltplan wieder hervorgekramt und mal ein Layout gestrickt:
Bild
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

@ferdimh:
Willste noch den Schaltplan und das TImingdiagramm haben?
http://fritzler-avr.de/open/2018-07-21_ ... ltplan.pdf

Die Schaltpläne sind alle in A0, inzwischen könnt ich wohl mit den gesammelten Werken mein Wohnzimmer tapezieren :twisted:
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

DER GEHT!

Henry hatte schon vorweg die Karte "in doof" = ohne MIkrocodes auf Funktion geprüft.
Um zu checken ob nachm Löten Unterbrechungen oder Kurzschlüsse vorhanden sind.

Haute habe ich dann als erstes den Mikrocode auf die MulDiv Karte aufgespielt um diese dann auf die logische Funktion zu prüfen.
(Es ist eeetwas nervig bei der Division 100 mal den CLK Button zu drücken)
Groooooßes Bild des Klaviers:
http://www.fritzler-avr.de/spaceage2/ga ... &var2=0_85
7*7 ist 49, stimmt so. (A ist das Ergebnis)
Und JA! mit diesem Testadapter wurden ALLE! bisherigen Karten des CPU Kerns auch so getestet.
Dazu lässt sich die bedruckte Leiterplatte tauschen für die Signalnamen der anderen Karten.

Wie hier im Fred zu sehen ging vor dem Bau der Hardware ja schon viel geteste vorraus.
Die Algorithmen wurden in 4/8/16 Bit mit Bitschubserei in C getestet.
Die Lehrbücher lügen alle! Zumindest lassen sie manche Cornercases untern Tisch fallen.

Nachdem das lief hatte ich den Schaltplan entwickelt und dieses in VHDL getestet, auch wieder in 4/8/16 Bit.
Da fand ich dann noch ne kleine Eigenheit des 74181, aber diese wurde dann umgangen.

Dementsprechend lief es fast auf Anhieb.
Was lief nicht?
Kleiner Programmierfehler im Excel zu Binary Konverter, es wurde nur der halbe Code geparsed :lol:
Das Ergebnis der Karte stimmte dann grob, es stand nur an der falschen Stelle, weil ein paar Schieboperationen fehlten.
Das war glücklicherweise nur ne falsch gesetzt Variable.
Gefixt und die Karte lief!

Nachdem festgestellt wurde, dass alle Rechenfunktionen liefen, wurde die Karte eingebaut.
Dazu musste der Mikrocode der CPU noch geändert werden, damit die MulDiv Karte auch genutzt wird.

Game Of Live lief dann auch prompt merklich shcneller auf der Kiste! 8-)


MUlDiv Karte von vorne und hinten:
BildBild
Bild
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Heute dann der Herz und Nieren Test ob alles läuft in Verbindung mit der CPU.
Uuuuund: Bugs!

Ab und zu gabs dann doch recht interessante Abstürze mit Speicherinhalt aufs Terminal aushusten mit rumgepiepse.
Aber es gibt eh ein Testprogramm welches ein Autogenerieriertes Array durchgeht mit 2 Eingangsvariablen und allen MulDiv sowie Modulo Ergebnissen.
Dieses fand auch direkt Fehler (Screenshot):
Bild

Also mal die erste Rechnung mit dem Testklavier durchgeklimpert: Ergebnis korrekt -> WTF?
Jagut, rechnen wir mal die letzte Rechnung durch, die ist ja echt total im *rsch.
Jupp, Fehler auf den oberen 4Bit, aber anders: DAFUQ?
Also nochmal durchgeklimpert: Es änderte sich manchmal nicht nur was bei steigender Taktflanke, sondern auch mal bei fallender Taktflanke.
Und, äh, wieso ist die LED für Bit24 dunkler als alle anderen, die leuchten?
Takttaster festgehalten und Oszi ran: aha! Schwingt!
Bevor mir der FInger abgefallen ist wurde nochn Kipschalter an den Takt gelötet zum Takt halten.
(keine Sorge, is alles entprellt)
Also mit Henry weitergesucht wo die Schwingung herkommt.
Ende vom Lied: einer der Schieberegister ICs war Schuld, Fehlersuchbild:
Bild
Wer braucht schon GND?
Das ist der Schieberegister IC für Bit 24 - Bit 27, erklärt die Fehler ab Bit 24 :lol:

Test nochmal durchlaufen lassen:
Bild
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Ein kleiner Fehler war übrigens noch drinne.
Beim Taschenrechnerprogramm ergab 5x5=25,00001
Der rechnet intern in double, aber 0,00001 ist dafür zu viel Fehler.
Vor allem wenn mit der MulDiv Emulation genau 25 rauskam (durch ein snprintf geschönt natürlich).

Nun ruft die softfloat Lib mehrmals die Punktrechenarten auf.
Da sieht man den Fehler nicht so einfach.
Also musste der Debugger dahin erweitert werden, dass er automatisiert sämtliche Inputs und Outputs der MulDiv Karte abschnorchelt.
Das sah dann so aus:
https://www.youtube.com/watch?v=68j4Y1E-bhk

Code: Alles auswählen

-------------------------MulDiv-------------------------------
MULTU:
2279119104 * 1045578752
10000111|11011000|10011001|00000000 * 00111110|01010010|01000100|00000000

HI_ist:   554835077; LO_ist:  2326003712
HI_soll:  554835076; LO_soll: 2326003712

HI_ist:  00100001|00010010|00011100|10000101; LO_ist:  10001010|10100100|00000000|00000000
HI_diff: 00000000|00000000|00000000|00000001; LO_diff: 00000000|00000000|00000000|00000000
HI_soll: 00100001|00010010|00011100|10000100; LO_soll: 10001010|10100100|00000000|00000000


-------------------------MulDiv-------------------------------
MULTU:
4140975872 *  500175360
11110110|11010010|01000111|00000000 * 00011101|11010000|00010010|00000000

HI_ist:   482242112; LO_ist:  2029912064
HI_soll:  482242111; LO_soll: 2029912064

HI_ist:  00011100|10111110|01101110|01000000; LO_ist:  01111000|11111110|00000000|00000000
HI_diff: 00000000|00000000|00000000|01111111; LO_diff: 00000000|00000000|00000000|00000000
HI_soll: 00011100|10111110|01101110|00111111; LO_soll: 01111000|11111110|00000000|00000000


-------------------------MulDiv-------------------------------
MULTU:
2279119104 *  390561520
10000111|11011000|10011001|00000000 * 00010111|01000111|01111110|11110000

HI_ist:   207250990; LO_ist:  1700622336
HI_soll:  207250989; LO_soll: 1700622336

HI_ist:  00001100|01011010|01100110|00101110; LO_ist:  01100101|01011101|01110000|00000000
HI_diff: 00000000|00000000|00000000|00000011; LO_diff: 00000000|00000000|00000000|00000000
HI_soll: 00001100|01011010|01100110|00101101; LO_soll: 01100101|01011101|01110000|00000000
Hmm, die Fehler sind alle in den LSB des HI Schieberegisters, d.h. am Anfang der Berechnung wird was falsches reingeschoben.
Zudem: die Fehler waren alle bei unsigned mul, also ausgerechnet der einfachsten Rechenvorschrift!
Am Ende wars nen kleiner Fehler im Mikrocode der MuLDiv Schaltung, der Carryout der 74181 war 1 Takt zu früh freigeschaltet.
Somit wurde eine 1 in das Rechenschieberegister geschrieben, die da nicht hingehört.

Soll heißen die Platine musste nicht mit Fädeldraht gefixt werden bisher! 8-)

Wie lange würde es denn nun brauchen sämtliche 32Bit Kombinationen zu testen bei 4MHz?
2^32 * 2^32 = 2^64 Mögliche Kombinationen.
Eine Multiplikation braucht 66 Takte
Es werden also 1,2x10^21 Takte benötigt (oh oh oh, das wird groß!)
Davon sind 4 Mio pro Sekunde abhandelbar -> 3*10^14 Sekunden
Das sind 9650 Jahre!!!!

Da muss man einfach den Algorithmen vertrahen, bzw kann diese nur in zB 8Bit testen (was ich auch getan hab).
Aber da Trat der Anfangsfehler nicht auf, warscheinlich hab ich mich da beim aufblasen des Mikrocodes vertippt.
Also:
Benutzeravatar
ferdimh
Beiträge: 9420
Registriert: Fr 16. Aug 2013, 15:19

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von ferdimh »

Über den Wahnsinn hatte ich ja schon geschrieben, der Multiplikationsalgorithmus ist mir auch irgendwie ein bisschen klar...
Aber wie dividiert das Ding? Wie der Pentium?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Eine Regenbogentabelle hab ich nicht, nein.
Es geht auch nicht darum in 2 Takten oder so zu dividieren.

Multiplikationen: genau 67 Takte
Divisionen so 100 Takte.
Nach 100 Takten war die Emulationsroutine noch nichtmal mitm Register sichern aufn Stack fertig :lol:
So sehr beschleunigt die MulDiv Karte.

Dividieren ist Multiplizieren rückwärts.
(serielles Multiplizieren und Dividieren)

Dazu erstmal ne Erklärung des vorzeichenlosen Multiplizieren:
Es existieren 2 32 Bit Schieberegister, HI und LO.
In LO wird der eine Multiplikant reingeschrieben, der zweite Multiplikant liegt dauerhaft auf dem Bus an, der zur ALU geht.
Das HI Register muss genullt werden.
Jetzt werden HI Register und der Multiplikant auf dem Bus miteinander addiert.
WENN das Bit0 des LO Registers 1 ist, dann wird die Summe nach HI geschrieben.
WENN das Bit0 des LO Registers 0 ist, dann wird die Summe nicht geschrieben.
Jetzt werden HI und LO nach rechts geschoben, wobei das aus HI "rausfallende" Bit nach LO reingeschoben wird.
Es wird also Stück für Stück das Ergebnis nach LO geschoben, welches dann auch die unteren 32Bit des Ergebnisses enthält.
Durch das Schieben ist Bit0 des LO Registers wieder ein anderes und das Ganze macht man dann 32 mal.
Addieren und schieben sind jeweils ein Takt -> 64 Takte, dazu noch etwas Übergabegedöhns von der CPU zur MulDiv Karte -> 67 Takte.
Im Endeffekt ist das wie die schriftliche Multiplikation in der Grundschule, nur eben Binär.

Beim Dividieren ohne Vorzeichen:
Wie war das mit dem Rückwärts?
Es wird zuerst geschoben und dann auchnoch nach links!
Addieren? Nö, Subtrahieren.

Genauer:
Zuerst HI nach links schieben (welches sich dann das neue Bit0 aus dem LO zieht).
Dann HI = HI - Divisor, der auf dem Bus liegt.
Wenn der Borrow Ausgang des Subtrahierers nicht gesetzt ist (also das Ergebnis passt noch), dann wird das Ergebnis in HI gespeichert.
Wenn das Borrow gesetzt wird, dann nicht. Das Ergebnis muss quasi noch in HI "passen", also darf nicht negativ werden.
Beim LO shiften nach links wird das Borrow auch wieder ausgewertet:
Borrow = 0 -> es wird eine 1 reingeschoben, sonst 0.
Das LO Register merkt sich also wann er Subtrahieren konnte ohne, dass es negativ wurde und das ist dann auch schon das Ergebnis.
Was am ende im HI übrig bleibt ist wortwörtlich der Rest.

Vorschrift in C für 4 Bit:
(Ich hab ja die Algorithmen zuerst in C Bitschubserei getestet)

Code: Alles auswählen

void perform_ud(uint32_t* rem, uint32_t* quot, uint32_t uopA, uint32_t uopB){

	//init right half of shift with quotient
	uint8_t shiftregister = uopA;
	shiftregister &= 0x0F;
	
	uint16_t alu_erg = 0;
	unsigned i;
	
	for (i = 0; i < 4; i++){
	
		//left shift
		shiftregister <<= 1;
		shiftregister &= 0xFE;
		
		alu_erg = (shiftregister >> 4) - (uint8_t)uopB;
		//if alu_erg is negative (bit n-1 is 1) -> dont save and shiftregister lsb = 0
		//if alu_erg is positive (bit n-1 is 0) -> save and shiftregister lsb = 1
		if((alu_erg & 0x100) == 0x100){ //borrow abfragen!
		//if((shiftregister >> 4) < uopB){
			;
		}else{
			alu_erg &= 0xFF;
			shiftregister &= 0xF;
			shiftregister |= (alu_erg << 4) | 1;
			//printf("write q0 at %i\n", i);
		}
	}
	
	*rem = (shiftregister >> 4);
	*quot = shiftregister & 0x0F;
}
Zuletzt geändert von Fritzler am Di 4. Sep 2018, 19:37, insgesamt 1-mal geändert.
Benutzeravatar
ferdimh
Beiträge: 9420
Registriert: Fr 16. Aug 2013, 15:19

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von ferdimh »

Ahhhhh, stimmt! Ich hatte beim Dividieren vergessen, dass eine einzelne Stelle nur 0 oder 1 sein kann. Dann muss ich ja nicht Stellenweise aufwendig multiplizieren...
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Jop so läuft das.

Mit Vorzeichen wirds dann widerlich.
Multiplizieren: Booth Algorithmus
Dividieren: restoring vs. non restoring
Benutzeravatar
Rial
Beiträge: 2363
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Rial »

Geil-O-Mat !!! :shock:
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Da ja die MulDiv Karte nun fertig ist und läuft wird der nächste Teil der Freakshow geplant.

Der MIPS TTL Rechner soll ja noch mit der Außenwelt kommunizieren.
Was nimmt man da? Ethernet!

Einzig und allein der PHY sowie ein paar FIFOs werden keine 74er TTL sein.

Weiterhin soll die LAN Karte CRC32 in Hardware berechnen um der CPU viel Arbeit abzunehmen.
Leider spucken PHYs die Daten als 4Bit Nibbles aus, daher kann die CRC32 nicht als rückgekoppeltes Schieberegister gebaut werden.
Das wäre die nämlich die Hardwaresparenste Möglichkeit gewesn:
4 ICs zu 8 Stück D-FlipFlops und pro gesetzter 1 im CRC32 Polynom noch ein XOR Gatter, fertig.

Jetzt muss das eben Byteweise passieren mit Lookuptables:
https://abload.de/img/crcttl9reaq.png
Grooooooooooßes Bild!

Was ist in diesem Bild zu sehen?
Einmal die Berechnungsformel in C: crc32 = (crc32>>8) ^ crcTable[(crc32 ^ data)&0xFF];
Diese Formel wird pro Byte angewendet.
Die Variable "crc32" ist als Register ausgeführt welches die CPU lesen und schreiben kann.
Vor einem Paket senden muss die CPU dort den Startwert -1 reinschreiben, dann die Paketdaten in die LAN Karte schreiben und am Ende den CRC32 Wert auslesen und nochmal senden, fertig.
Vor einem Paket lesen muss da auch wieder ne -1 rein und nach einem Paket lesen muss dort die Magic Number für "Paket korrekt" enthalten sein.
Lustigerweise ist diese Magic Number bisher nie 0xC704DD7B, wie Wikipedia sagt, sondern immer 0x2144df1c.
Die berechnete CRC32 über ein Wireshark gesnifftes Paket ist aber völlig korrekt *kopfkratz*.

Dann gibts noch den "Data Serializer", die CPU soll immer 1x 32Bit reinschreiben/rauslesen anstatt 4x 8Bit.
Das viertelt die nötigen Speicherzugriffe, also beschleunigt das memcpy extrem.
Es existiert nämlich kein DMA im System, es gibt nur PIO durch die CPU.

Dieser Data Serializer liest und schreibt vom bidirektionalen 8 Bit Bus an dem die RX Fifo. die TX FIFo sowie der CRC32 generator hängen.
Damit kann ich einen CRC32 generator für beide Richtungen nutzen.

Jetz muss ich mir "nurnoch" ein Steuerwerk für den kranken sh*t ausdenken.

Die Pakete vom PHY in die FIFO schieben kann eine einfache Statemachine übernehmen.
Diese muss erstmal die Preambel fressen und ab dem SFD die 4Bit Nibbles zu 8Bit Bytes zusammenfassen und in die FIFO schieben.
danach bekommt die CPU nen "Paket is da!" IRQ.

Ich hab dann mal noch geuckt ob ich den PHY noch weglassen könnte und direkt 10mbit Ethernet aufm Draht klimper, aber ne, das war mir dann zu aufwedig mit clock recovery und sonen Scherzen.
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von xoexlepox »

Lustigerweise ist diese Magic Number bisher nie 0xC704DD7B, wie Wikipedia sagt, sondern immer 0x2144df1c.
Invertier mal die einzelnen Nibbles, und ändere die Reichenfolge. Dann könnte das passen. Aber ich kann mich auch täuschen...
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Ich geh doch mal stark davon aus, dass Wireshark das schon für mich gemacht hat.
Dass die Reihenfolge auf dem Draht sehr "interessant" ist hab ich mal in einem anderen Projekt kennengelernt, ja.
(Man in the Middle Attacken im FPGA mit Hardware Paketfilter)

Aber ich musste mir im Interwebs ein pcap File suchen, denn nur sehr wenige LAN Karten schicken den FCS bis ans OS weiter.
Die erledigen CRC32 ja auch alle in Hardware :lol:

Also einen Endianessdreher hab ich auf jedenfall drinne, die richtig ausgerechnete CRC32 Checksumme hat immer einen Dreher drinne:
Berechnet: 0x76 12 d2 98
Paket hat laut Wireshark: 0x98 d2 12 76
(Der Algorithmus rechnet ja in Network Byte Ordner, daher ist das eigentlich auch richtig)

Daher hätte ich eben eine andere Endianess der Magic Number erwartet, aber nix total anderes.

Das ICMP Paket:

Code: Alles auswählen

0000   00 12 f0 11 68 d6 00 13 72 09 7b ea 08 00 45 00   ..ð.hÖ..r.{ê..E.
0010   00 3c 90 a2 00 00 80 01 8e ac c0 a8 4d 07 c0 a8   .<.¢.....¬À¨M.À¨
0020   4d 1a 08 00 71 5b 03 00 d9 00 61 62 63 64 65 66   M...q[..Ù.abcdef
0030   67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76   ghijklmnopqrstuv
0040   77 61 62 63 64 65 66 67 68 69 98 d2 12 76         wabcdefghi.Ò.v
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Damit ferdimh noch was zu lesen hat hier mal die fertige Doku!
Dateianhänge
MulDiv.pdf
(1.5 MiB) 108-mal heruntergeladen
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Die gute Nachricht:
In VHDL rechnet der CRC Generator genau gleich.
Die schlechte Nachricht: das war ja nicht ganz richtig :lol:

C Code Ausgabe:

Code: Alles auswählen

gcc main.o crc32.o -o crctest -lm
crc Packet:   0x7612d298, inv: 0x89ed2d67
crc over all: 0x2144df1c, inv: 0xdebb20e3
VHDL Code Ausgabe:
Bild

Beim VHDl Code kommt das raus was bei inv steht, die Invertergatter spar ich mir mal, das darf dann später die CPU ALU machen.
Spart Hardware.
Oder als Auslesemux keine 245er nehmen, sondern invertierende Bustreiber?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Space Age 2 der 32Bit MIPS Rechner in TTL

Beitrag von Fritzler »

Heute hab ich dann mal am DataSerializer weitergemacht.
Dem Empfangsteil davon.

Großer Schaltplan:
https://abload.de/img/dataserialr3c2v.png

Dieser Teil soll 4 Bytes aus einer FIFO auslesen und zu einem 32Bit Word zusammenbauen.
Aaaaber, wenn in der FIFO nurnoch zB 3 Bytes drinne sind, soll er auch nur 3 Bytes lesen und das letzte Byte ist dann eben Müll.
Somit kann ich pro CPU Datenbus Transaktion 4 Byte übertragen und nicht nur 1 Byte.

So eine FIFO hat nicht 8 Bit, sondern 9Bit.
Bit9 ist ein Flag, das Data Valid Flag des Ethernet PHY wird das werden.
Damit weis die Schaltung wann Daten anliegen und wann nicht.

Nachdem die CPU einmal das Register eingelesen hat wird ein Sequenzer getriggert, der alle 4 Byte der Reihe nach in das Datenbusregister läd.
Der Sequenzer ist quasi ein 4Bit Schieberegister durch das ein Impuls geschoben wird.
Je nach Position des Pulses wird das entsprechende Register zum Speichern freigegeben.
(Leider sieht der im Schaltplan total hässlich aus, da ich den IC nicht zerpflücken kann)

Solange ein Impuls im Sequenzer vorhanden ist muss die FIFO ausgelesen werden, aber auch nur solange DataValid HIGH ist.
Hinzu kommt eine Startbedingung wofür ich nen 3 fach OR gebraucht hätte, aber man kanns auch mit NOR basteln:
https://www.fingers-welt.de/phpBB/viewt ... 00#p248414
Das sind IC 31A und 32A.
Insgesamt hab ich damit 3 NOR in Reihe, denn die "Sequenzer aktiv" Erkennung ist ein wired-NOR mit OpenCollector Invertern :lol:
Die Startbedingung überspringt den "Data not Valid" Teil in der FIFO, welcher immer 1 FIFO Eintrag hinter einem validen Ethernetframe ist.

Wenn DataValid und wenn der Sequenzer läuft, dann dürfen die FIFO Daten auf den internen CRC Datenbus (der bidirektional ist).

Den Schaltplan hab ich dann noch auf mehrere Seiten zerpflückt, denn der ist gut in 3 Teile splitbar:

1) Netzwerk RX
Netzwerkkabelinhalt in die FIFO kippen

2) Netzwerk TX
FIFO Inhalt ins Netzwerkkabel schieben

3) CPU Busanbindung
Eigentlich ist das nochmal aufteilbar in:
3.1) CRC Generator
3.2) DataSerializer
3.3) Adressdecodierung und Control/Status Register

Bild

Daraufhin mal ein Bärenfang eingießen, prösterchen!
Antworten