Projekt Digitalrechner mit Relais - "EHR-I"

EHR-I - Elektronen Hirn auf Relaisbasis 1

Das Projekt soll einen einfachen Rechner beinhalten. Ich möchte also einen Prozessor mit etwas E/A bauen. Die Verfügbarkeit der Bauelemente wird wohl bestimmen, wie er aufgebaut wird. Die Sache mit TTL-Gattern und Flipflops zu lösen wäre recht angenehm vom Aufwand aber kollidiert aktuell schon an der damit realisierbaren (hohen) Geschwindigkeit und der von mir geplanten Lösung für den RAM-Speicher in Form einer Lochband-Stanz/Lese-Kombination. Der Programmcode soll ebenfalls von einem (weiteren) Lochbandgerät kommen. Sämtliche Funktionen der ZRE (zentrale Recheneinheit CPU) sollen auf je einer oder mehreren Steckkarten realisiert werden, die von einem Programmcode-Dekoder, der das Lochband liest, adressiert werden. Wenn ich wieder eine Funktion fertig habe, kann ich sie so in den Rechner stecken und seinen Funktionsumfang erweitern.

Einleitung

Nachdem ich 2014 eine Relaisuhr gebaut hatte, stand weiterhin der Wunsch im Raum, einen Relaiscomputer zu bauen. Eigentlich sollte dies bereits anstelle der Uhr geschehe aber nachdem Kupfersammler mir die meisten Relais weggeschnappt haben, waren nicht mehr genug für einen Rechner vorhanden. Die Idee fiel in Dornröschenschlaf bis geeignetes Material in Sicht ist. Konkrete Schaltungsplanungen starteten dann spontan bei den Chemnitzer Linuxtagen im März 2018. Nach dem Treffen kam ich mit vier Seiten Tabellen und Schaltungsfragmenten zurück. Ich plante einen reinen Relaisrechner mit 8 Bit Wortbreite. Es gibt wohl einfache Rechner mit 1 und 4 Bit Wortbreite aber ich mochte mir einfach nicht den Streß mit dem ganzen zusätzlichen Aufwand (z.b. Tetradenkorrektur etc.) an Land ziehen. Mit 8 Bit bewegt man sich auf bekanntem Terrain, wenn auch erkauft durch höheren Bauteileinsatz.
Ich wollte das System dennoch möglichst einfach halten und die Menge an Relais klein halten (Relais sind teuer und es sollten schon möglichst nur Relais eines Typs zum Einsatz kommen). Der Befehlssatz orientiert sich grob am 16-Bit TTL-Rechner robotron R4201. Einige Sachen, wie z.b. der fehlende Befehl für Akku inkrementieren habe ich aber gleich mit eingeplant. Auch kristalisierte sich eine Struktur heraus, die nicht bei nahezu jedem Befehl den Akkumulator benutzt. Es sollte ca. 6 Universalregister geben, mit denen dann alles möglich ist.

Struktur

Jede Funktion ist als Subsystem umgesetzt. Das ist in einfachen Fällen eine Steckeinheit (Europakarte). Aufgrund der Größe der eingesetzten Relais (RGI 30.5.112) passen maximal 12 Stück auf eine Karte. Folgende Subsysteme sind geplant:

* 9 Register (8-Bit Universalregister (reiner Speicher))
* Rechenoperationen (UND, OR, EXOR, NEG)
* 8-Bit Addierer (setzt die Funktionen A+B, A+1, A+Carry und A-B) um. (A-B) wird unter Nutzung des Negators über die Addition des Zweierkomplements von B realisiert.
* Schiebefunktionen (KLL, KLR, KAL, KAR, KZL, KZR)
* Sonderregister A (Akku). Allerdings verhält es sich wie ein normales Register, welches jedoch eine Einrichtung zur Entkopplung von Eingang und Ausgang besitzt. Hierdurch kann bei diesem Register der eigene Inhalt, verändert durch eine Rechenoperation, auf seinen eigenen Eingang gelegt werden.
* Befehlszähler (vorerst 256 Schritte)
* Befehlsdekoder

* Busschalter (steuern den Datenfluß innerhalb des Systems)
* Flagregister (NZC, div. Steuerbits)
* je 1 8-Bit Dateneingangs und -ausgangsregister
* 1 2x 4-Bit I/O-Adressregister (Steuert die Verzweigung von/zu einer der 8 Datenquellen/-senken, Das 4. Bit dient für "Dauerfeuer")
* Spannungs-Kompatiblitätsmodul (Ansteuerung der 24V Register-Relais vom 12V Q-Bus aus)

Für die Daten stehen 3 8-Bit breite Busse zur Verfügung. Der A-Bus, der B-Bus und der Q-Bus. Der A-Bus ist der "Haupteingang" aller arithmetischer und logischer Funktionen. Er wird gespeist von Register 0 sowie diversen anderen Quellen. Der B-Bus ist der "Nebeneingang" für Funktionen, die einen zweiten Operanden besitzen (z.b. A ODER B = Q) und wird von allen anderen Registern und Quellen gespeist. Der Q-Bus trägt das Ergebnis zu der entsprechend gewählten Senke. Der Datenfluß wird mittels der TAKT und OE-Relais gesteuert. Hiermit sind z.b. bei dem Befehl R0+R1->R7 nur folgende Teile aktiv: R0 Ausgangsrelais, R1 Ausgangsrelais, Addierer in der Funktion A+B, seine Ausgangsrelais, die 12/24-Anpassstufen und die TAKT-Relais von R7.

Materialbeschaffung

Im Frühjahr 2018 fanden wir auf einem Schrottplatz jede Menge Platinen eines DDR Bahntelegrafiesystems. Auf den, teilweise zerbrochenen, Platinen waren bis zu 18 Relais vom Typ RGI 30.5.112 und 30.5.24 in Printausführung. Der überwiegende Teil der ca. 350 gefundenen Relais hatte 12V Betriebsspannung, einige 24V. Über Gelegenheitsfunde, Hobbykollegen und Carsten Löwe kamen weitere ca. 400 Relais gleichen Typs hinzu, so daß man realistisch an die Umsetzung gehen konnte. Einige Relais waren durch Regen innen verrostet, andere zersplittert oder verbogen, so daß sie erstmal repariert werden mußten. Einige konnten nicht genutzt werden.
Die Lochrasterplatinen mußte ich neu kaufen, die 40-poligen Pfostenleisten stammen von alten PC-Mainboards, die weißen LEDs von alten Bahnsignalplatinen.
RelaisRelais

Zeitpunktausgeführte ArbeitFunktionPlatinenRelaisGesamtumfang des Systems
10.03.2018Beginn der konzeptionellen Planung---0
Juni 2019Relais auf Schrottplatz gefunden----
Juni 2019Aufbau REG-0reiner 8-Bit Speicher11212
Oktober 2019Aufbau UND8-Bit UND-Verknüpfung11224
November 2019Aufbau NEG8-Bit Negator zzgl. Umschalteinrichtung21640
Dezember 2019Aufbau EXOR8-Bit Exklusiv-ODER-Verknüpfung22060
Dezember 2019Aufbau Bef-Dek 1Basisteil des Befehlsdekoders---
Januar 2020Beginn Aufbau Rückverdrahtung 1Verbindung der log. Funktionen, A-Bus, B-Bus1060
Januar 2020Aufbau eines Testgerätes für EHR-I PlatinenFunktionstest, Taktgeber-161
Februar 2020Aufbau SREG8-Bit Schieberegister mit 6 Funktionen11273
März 2020Aufbau ADD8-Bit Addierer mit 4 Funktionen440113
März 2020Aufbau Rückverdrahtung 2Verbindung der Addiererplatinen10113
April 2020Aufbau A-REG8-Bit Speicher mit Q0 Entkopplung222135
August 2020Schaltungsentwurf Bussysteme, I/O-System, Befehlsdekodierung, Register----
September 2020Aufbau Register 1 - 8 und Busadapterplatinenreine 8-Bit Speicher10136271
Oktober 2020Aufbau weiterer Register, Dokumentation, kleine Eingabetastatur---271
Oktober 2020Aufbau 4 Befehlsdekoderplatinen (BDEK3/n)1 Befehl -> n Funktionen448319

handwerkliches Geschick und reichlich Geduld

Dieser Rechner stellt das komplexeste selbstentwickelte Gerät dar, an dessen Umsetzung ich praktisch herangegangen bin. Die Platinen haben ein Rastermaß von 2,54mm und sind damit ohne optische Hilfsmittel, allein mit Lötkolben und Pinzette zu beherrschen. Das Modul mit der höchsten Integrationsdichte ist das 6-fach 8-Bit Schieberegistermodul. Es enthält neben 12 Relais über 250 Drahtverbindungen. Das umfangreichste Submodul stellt der 8-Bit Akkumulator dar, welcher, aus 40 Relais aufgebaut, sich über 4 Platinen erstreckt. Aktuell läuft das Projekt seit 30 Monaten und die technische Realisierung seit 16 Monaten. Da ich nebenbei im RECHENWERK Computermuseum tätig bin und zwei Jobs nebenbei mache, bleiben nur wenige Nachtstunden, um voranzukommen. Ab wir haben es ja nicht eilig. Ich hoffe, daß ich erste Funktionen der Anlage auf dem 2021er KC-Klubtreffen in Garitz vorführen können werde.

Die einzelnen Komponenten und Funktionen im Detail

8-Bit UND Verknüfung

Die Funktion UND wird recht einfach gebildet, da man nichtstromführende Eingänge nicht extra uaskodieren muß. Alles in Allem werden pro Bit 1 Datenrelais zuzüglich je 2 Relais für der Eingänge (8 Bit vom A-Bus und 8 Bit vom B-Bus) benötigt. Dies macht in Summe 12 Relais a 4 Umschalter, was auf eine Europlatine paßt. An der Front befinden sich 9 LEDs zur Signalisierung des Ergebnisses und des Aktivierungssignals (TAKT).

UNDOberseiteUnterseite

8-Bit exklusiv ODER Verknüfung

Für die Funktion EXO werden Alles in Allem pro Bit 2 Datenrelais zuzüglich je 2 Relais für der Eingänge (8 Bit vom A-Bus und 8 Bit vom B-Bus) benötigt. Dies macht in Summe 20 Relais a 4 Umschalter. Es werden 2 Europlatinen gebraucht. An der Front befinden sich 9 LEDs zur Signalisierung des Ergebnisses und des Aktivierungssignals (TAKT).
Die beiden Platinen sind identisch aufgebaut und realisieren je 4 Bit. Die Verbindung zur vollen Wortbreite erfolgt, wie auch die Busankopplung auf der Rückverdrahtung.

EXOOberseiteUnterseite

doppelt benutzter 8-Bit Negator

Der Negator funktioniert ganz einfach: Wenn Strom da, dann aus. Also 1 Relais pro Bit zuzüglich 2 Taktrelais und 2 Ausgangsrelais zur Ankopplung an den Q-Bus. Da ich den Negator für die Funktion SUBTRAKTION noch einmal brauche, habe ich eine Weiche eingebaut, womit zwei Funktionsvarianten umgeschaltet werden können: A-Bus->NEG->Q-Bus (normal) und B-Bus->NEG->B-Eingang vom Addierer (Subtraktion). Insgesamt verteilt sich der Negator mit 14 Relais über zwei Platinen.

EXOOberseiteUnterseite

6 Schieberegisterfunktionen auf einer Platine

Da beim Schieben nur Bits vertauscht, bzw. das Carryflag mal rein und mal rausgeschoben wird, kommt man mit 4-fach-Umschalt-Relais bei 8-Bit auf 2 Relais pro Funktion zzgl. je 2 für TAKT und Ausgänge. Die Schieberegisterkarte besitzt nur die "Arbeitsrelais" - jedoch für 6 unterschiedliche Funktionen. Kompletiert wird sie durch eine zweite Platine zur Eingangs-/Ausgangs-Entkopplung.
KLL - offenes Schieben links (0 kommt rechts rein und MSB fällt raus)
KLR - offenes Schieben rechts (0 kommt links rein und LSB fällt raus)
KZL - zyklisch Schieben links (rotieren ohne Carry)
KZR - zyklisch Schieben rechts (rotieren ohne Carry)
KAL - arithmetisch Schieben links (über Carryflag)
KAR - arithmetisch Schieben rechts (über Carryflag)

Von der Verknüpfungsdichte ist das mit über 240 Lötpunkten die dichteste Platine, die ich in diesem Projekt aufgebaut habe.

OberseiteUnterseite

12/24V-Kompatiblitätsmodul

Da die Register mit 24V-Relais aufgebaut sind, der Rest des Rechners aber mit 12V arbeitet, dienen diese 8 Relais, die mit ihren Eingängen am Q-Bus hängen, dazu, die nötige Spannung zum sicheren Schalten der Register zu liefern.

8-Bit Universalregister

Es gibt neben einigen besonderen Registern 9 Universalregister, die für allgemeine Rechen/Verarbeitungsaufgaben genutzt werden können. Jedes Register besteht aus 12 Relais (zzgl. 2 Stück für die Ankopplung an den Ausgangsbus) und paßt auf eine Europlatine. Es funktioniert so, daß in dem Moment, wo das Taktsignal und am entsprechenden Dateneingang ein high anliegt, eine Selbsthaltung gestartet wird. Nimmt man Takt vor Daten weg, bleibt das gesetzte Datenbit stehen und steht permanet am Ausgang zur Verfügung. Die Löschung des gesamten Registers erfolgt durch Anwahl des entsprechenden Taktsignals, ohne, daß eingangsseitig Daten anliegen. Man löscht, indem man "Null" einschiebt.

Damit immer nur ein Register seine Datenausgänge auf den Ausgangsbus legt, gibt es noch die ADP (Adapter-) Platinen, über die jeweils 2x2 = 4 Registerplatinen an den Bus angeschlossen sind. Über die Adapter wird ausgewählt, zu welchem Register Daten geschrieben oder von welchem sie geholt werden sollen. Solange die Adapter inaktiv sind, sind die Register von den Bussen getrennt, behalten aber ihre Daten (Bis Löschung, Überschreiben, Verluster der Versorgungsspannung).

Alle Datenregister im Rechner sind komplett mit dem Relaistyp RGI 30.5.024 - also 24V Typen aufgebaut. Dies ergab sich, da ein nicht geringer Anteil der gefundenen Relais diese Spannung hatte. Um sicher zu schalten, werden die Dateneingänge der Register über den 12/24V-Wandler an den Rechner angekoppelt, wodurch die interne 12V auf 24V hochgesetzt wird.

EXO

Material und Aufwand (Stand September 2020)

* 25 Europlatinen
* 40- und 34-polige Pfostenleisten und Flachbandkabel von alten Mainboards
* mehrere hundert weiße 5mm LEDs aus alten Bahnsignalen
* >500 RGI 30.5.112 Relais - mehrere hundert vom Schrottplatz aus alten Reichsbahnfernschreibsystemen, mehrere hundert bei IC Lion gekauft
* einige Kilometer Schaltlitze (vom Schrottplatz)
*Holz von alten Bettenlattenrosten
* Ein PVC-Gehäuse von einem Medizingerät
* Schalter und eingefaßte LEDs von Pollin
* 1 12V/24V Schaltnetzteil vom Schrott
* dicke Schaltlitze-Rundkabel (aus DDR-Wechselsprechanlagen)

Aktuell ist der Rahmen 780x450x160 mm groß.

Fertigstellung und Betrieb

Ausblick

letzte Änderung: 21.10.2020 23:16