Anzahl von 11.520 Generationen pro Takt / 10.016 x 6.796 Box / Anzahl von 244.596 Pops
Es hat Spaß gemacht.
Nun, das Design ist sicherlich nicht optimal. Weder vom Standpunkt der Bounding Box (diese 7-Segment-Ziffern sind riesig ) noch von der anfänglichen Bevölkerungszahl (es gibt einige nutzlose Dinge und einige Dinge, die sicherlich einfacher gemacht werden könnten) und der Ausführungsgeschwindigkeit - na ja ... ich 'ich bin mir nicht sicher.
Aber hey, es ist wunderschön. Aussehen:
Starte es!
Holen Sie sich das Design aus diesem Kern . Kopieren Sie den gesamten Dateitext in die Zwischenablage.
Neu : Hier ist eine Version mit AM- und PM-Indikatoren für anspruchsvolle Kunden.
Zum Online-Lebenssimulator von JavaScript Conway . Klicken Sie auf Importieren , fügen Sie den Designtext ein. Sie sollten das Design sehen. Gehen Sie dann zu den Einstellungen und stellen Sie den Generierungsschritt auf 512 oder etwas in der Nähe dieser Zeilen ein, oder Sie müssen ewig warten, bis die Uhrzeitanzeige aktualisiert wird.
Klicken Sie auf Ausführen , warten Sie ein bisschen und staunen Sie!
Direkter Link zur In-Browser-Version.
Beachten Sie, dass der einzige Algorithmus, der dieses riesige Design nutzbar macht, hashlife ist. Damit können Sie den gesamten Zeitumlauf in Sekunden erreichen. Bei anderen Algorithmen ist es unpraktisch zu sehen, wie sich die Stunde ändert.
Wie es funktioniert
Es nutzt die p30-Technologie. Nur grundlegende Dinge, Segelflugzeuge und leichte Raumschiffe. Grundsätzlich geht das Design von oben nach unten:
- Ganz oben steht die Uhr. Es ist eine 11520 Periodenuhr. Beachten Sie, dass Sie ca. 10.000 Generationen benötigen, um sicherzustellen, dass die Anzeige ordnungsgemäß aktualisiert wird. Das Design sollte jedoch auch bei einer Uhr mit kleinerer Periode stabil sein (ca. 5.000 oder so - die Uhr muss ein Vielfaches von 60 sein).
- Dann gibt es die Taktverteilungsstufe. Der Uhrensegelflug wird in einen ausgeglichenen Baum kopiert, so dass am Ende 32 Segelflugzeuge zum exakt gleichen Zeitpunkt auf der Zählerstufe ankommen.
- Die Zählerstufe wird unter Verwendung eines RS-Signalspeichers für jeden Zustand und für jede Ziffer (wir zählen in Dezimalzahl) erstellt. Es gibt also 10 Zustände für die rechte Ziffer der Minuten, 6 Zustände für die linke Ziffer der Minuten und 12 Zustände für die Stunden (beide Ziffern der Stunden werden hier zusammengeführt). Für jede dieser Gruppen verhält sich der Zähler wie ein Schieberegister.
- Nach dem Zählen gibt es die Nachschlagetabellen. Sie konvertieren die Statusimpulse, um die Ein / Aus-Aktionen der Segmente anzuzeigen.
- Dann das Display selbst. Die Segmente werden einfach mit mehreren LWSS-Zeichenfolgen erstellt. Jedes Segment verfügt über ein eigenes Latch, um seinen Zustand beizubehalten. Ich hätte eine einfache logische ODER-Verknüpfung der Ziffernzustände erstellen können, um zu wissen, ob ein Segment EIN oder AUS sein muss, und um diese Latches zu entfernen, aber es gäbe Pannen für sich nicht ändernde Segmente, wenn sich die Ziffern ändern (wegen Signalverzögerungen). Und es würde lange Ströme von Segelflugzeugen geben, die von der Nachschlagetabelle zu den Ziffernsegmenten kamen. Also wäre es nicht so gut aussehend. Und es musste sein. Ja.
In diesem Design steckt eigentlich nichts Außergewöhnliches. Es gibt keine erstaunlichen Reaktionen, die in diesem Prozess entdeckt wurden, und keine wirklich klugen Kombinationen, an die noch niemand gedacht hat. Nur ein bisschen hier und da genommen und zusammengefügt (und ich bin mir nicht mal sicher, ob ich es "richtig" gemacht habe - ich war tatsächlich völlig neu darin). Es erforderte jedoch viel Geduld. Alle diese Segelflugzeuge zur richtigen Zeit in die richtige Position zu bringen, war ein Kopfkratzer.
Mögliche Optimierungen:
- Anstatt den gleichen Grundtakt zu kopieren und auf die n Zählerzellen zu verteilen , hätte ich den gleichen Taktblock auch n- mal setzen können (einmal für jede Zählerzelle). Das wäre eigentlich viel einfacher. Aber dann würde ich es nicht so einfach einstellen können, indem ich die Uhr an einem einzigen Punkt ändere ... Und ich habe einen elektronischen Hintergrund, und in einer realen Schaltung wäre das schrecklich falsch.
- Jedes Segment hat einen eigenen RS-Latch. Dies erfordert, dass die Nachschlagetabellen sowohl R- als auch S-Impulse ausgeben. Wenn wir ein Latch hätten, das nur seinen Zustand von einem gemeinsamen Eingangsimpuls umschaltet, könnten wir die Nachschlagetabellen halb so groß machen. Es gibt eine solche Verriegelung für den PM-Punkt, aber sie ist riesig, und ich kann mir nichts Praktischeres einfallen lassen.
- Verkleinern Sie die Anzeige. Aber das wäre nicht so gut aussehend. Und es musste sein. Ja.