Das Spiel "Leben" auf den logischen Elementen

Ich warne Sie im Voraus: einige Bilder.

Dieser Artikel konzentriert sich auf die Implementierung des Spiels "Life" auf die logischen Elemente im Simulator "Atanua".

Das Spiel "Life" ist vielleicht eines der bekanntesten zellularen Automaten. Es wurde kein einziger Artikel über sie geschrieben, auch nicht über Habrahabr . Auch einmal interessierte sie sich für sie, aber irgendwie war lange Zeit nicht genug.

Lass mich dich daran erinnern, was das Leben ist:
Es gibt eine bestimmte Matrix von Zellen, die als "Universum" bezeichnet wird (idealerweise unendlich). Bei jeder Iteration (als "Tage" bezeichnet) kann jede Zelle "lebendig" oder "tot" sein, und ihr Status hängt von der vorherigen Iteration gemäß den folgenden Regeln ab:

  • Eine Zelle wird lebendig, wenn sich 3 lebende Zellen in ihrer Nähe befinden.
  • Eine Zelle lebt weiter, wenn 2 oder 3 Zellen in ihrer Nähe leben.
  • In anderen Fällen stirbt die Zelle.

Die Nachbarschaft einer Zelle sind die 8 umgebenden Zellen (siehe Moores zweidimensionale Nachbarschaft der Ordnung 1 ).

Weitere Informationen zum Leben finden Sie auf Wikipedia .

Später hörte ich irgendwo, dass moderne Computer eine Geschwindigkeitsbegrenzung haben, die unter anderem durch das Vorhandensein eines bestimmten Kommunikationskanals zwischen dem Speicher und dem Computerkern verursacht wird. Als Lösung wurde vorgeschlagen, einen Zählspeicher zu sammeln. Ich erinnere mich nicht genau, ob ich mich selbst an das Leben erinnerte oder ob es in diesem Artikel erwähnt wurde, aber ich wollte es in einer logischen Schaltung modellieren (genauer gesagt in einer Matrix identischer Schaltungen). Warum ist es "Leben"? Die Hauptgründe waren seine Verbreitung und sein Ruhm sowie die Tatsache, dass die darin enthaltenen „Universen“ vollständig sind, was es ihm ermöglicht, Berechnungen daran durchzuführen und verschiedene Probleme zu lösen. Es stellt sich heraus, dass Sie auf der Grundlage dieses zellularen Automaten einen Computer erstellen können. Als

Werkzeug wurde der Atanua- Simulator ( offizielle Seite) ausgewählt), da es recht einfach zu erlernen ist und den Status aller Zeilen anzeigt. Am Ende kam folgendes heraus:

Einzelzellenlayout


Eine praktische Funktion des Atanua-Simulators besteht darin, dass Sie Schaltkreise als eine Art Mikroschaltung mit anderen Projekten verbinden können. Ich nutzte dies aus, indem ich eine Matrix zum Debuggen und Experimentieren sammelte.

Zellmatrix


Für einen detaillierteren Blick die obere linke Ecke:



Mit der Taste „r“ wird die Schaltung zurückgesetzt. Mit „0“ signierte Schaltflächen werden verwendet, um die Zelle in einen aktiven Zustand zu versetzen. Ich möchte darauf hinweisen, dass das Zurücksetzen durch erneutes Drücken noch nicht implementiert ist. Die 3 unteren Erdungen werden als Schaltungsbegrenzer verwendet, damit eine Vielzahl von Artefakten nicht auftritt. In Atanua kann ein Draht 4 Zustände haben:

  • dunkelgrün: log. 0;
  • hellgrün: log. 1;
  • rot: nicht richtig angeschlossen;
  • weiß: nicht verbunden (undefinierter Zustand).

Wenn ein undefinierter Zustand auf den Eingang eines Logikelements angewendet wird, erkennen einige ihn möglicherweise als 0 und andere als 1. Zu diesem Zweck wurden Begrenzer in Form der Einstellung nicht verwendeter Pins auf 0 gesetzt. Achten

Sie nicht auf den oberen Grund. Die ursprüngliche Version der Schaltung erforderte eine Initialisierung, für die dieser Ausgang verwendet wurde. Gegenwärtig ist es ein Rudiment (um die Matrix nicht zu wiederholen), und sein Zustand kann beliebig sein. Ein weiterer Draht, der über den Bildrand hinausgeht, ist die Ausgabe des Taktsignals. Er geht zu den Generatoren, an denen er die Höchstgeschwindigkeit getestet hat.

Nun mehr zum Zellenlayout. Aufgrund von Problemen mit der Qualität von Screenshots werde ich Zeichnungen einzelner Knoten geben.

Registrieren




Die obige Abbildung zeigt ein 2-Bit-Schleifenschieberegister bei D-Triggern, das als Speicher fungiert. Damit ist ein nicht guter Moment verbunden, den ich noch nicht behoben habe: Während des Betriebs blinkt die Schaltung, da sie sich im aktiven Zustand befindet (wenn Informationen in dieses Register geschrieben werden, dh im Zustand einer lebenden Zelle), tauschen die Trigger 0 und 1 zwischen sich und aus Es stellt sich heraus, dass wir am Ausgang F (Ausgang zur Anzeige des Status, zum Beispiel zur LED) entweder 0 oder 1 haben (dies ist im Video am Ende des Artikels erkennbar). RST ist ein Reset-Eingang. SET - Eingabe, die die Zelle in den Zustand einer lebenden Zelle versetzt. Wie bereits erwähnt, ist eine einzelne Zelle noch nicht zurückgesetzt. Oben links ist ein Taktsignal. Über die beiden benachbarten Drähte unten.

Block prüfen




Im Checkblock wird der Zustand des Spiels überprüft. Oben für die Geburt, unten für das Überleben. Die Besonderheit dieses Blocks besteht darin, dass er an andere Regeln angepasst werden kann, wodurch ähnliche zellulare Automaten organisiert werden. Die Ausgänge der Addierer sind links geeignet, unten befinden sich die beiden Drähte, die zum Register führen. Sie sind tatsächlich im Kontext einer der Übertragungsleitungen des Registers verbunden.

Addierer




Der vielleicht größte und umstrittenste Teil der Schaltung sind Addierer mit parallelen Reihen. Nachdem ich es implementiert hatte, löste ich das Problem der Überprüfung der erforderlichen Bedingungen „frontal“, indem ich alle Eingänge A0-A7 aus den benachbarten Zellen aufsummierte und das Ergebnis auf Übereinstimmung mit den Bedingungen überprüfte. In diesem Fall werden zuerst die Eingänge A0 + A1 + A2, A5 + A6 + A7 summiert, dann die Ausgänge der zweiten Summe, die Schlussfolgerungen A3 und A4 und so weiter. Am Ende stellte sich heraus, dass am Ende 6 Addierer und 1 Halbaddierer. Es ist erwähnenswert, dass einer der Addierer auch durch einen halben Addierer ersetzt werden kann, weil Einer seiner Eingänge wird nicht verwendet. Warum ich eine geerdete Eingabe gemacht habe (dunkelgrün, wobei der untere Teil des Bildes unten bleibt) - ich erinnere mich nicht. Anfangs wollte ich es mit Hilfe von DNF oder CNF vereinfachen, aber es besteht noch kein Wunsch, die Carnot-Karte 16x16 zu lösen. Ich schließe den Moment also nicht aus

C ist ein Eingang einer solchen Frequenz, es hat nichts mit der Addiererschaltung zu tun, es geht in das Register. Über Init habe ich oben geschrieben - ein Rudiment aus der vorherigen Version.

Zusammenfassung


Ich halte das Spiel "Life" nicht für einen würdigen zellularen Automaten für die Implementierung des Zählspeichers, da das "Programm" für einen solchen Computer ziemlich viel Platz einnimmt und schwierig zu implementieren ist. Trotzdem erlaubt uns die Schaltung, bei der Implementierung der Zellen dieses Spiels von einem Chip zu träumen. Ich denke, es wäre ziemlich interessant, die Hardware-Implementierung dieses zellularen Automaten zu sehen. Und ich meine nicht Mikrocontroller mit dem Programm, sondern ausschließlich Zellen aus Logikelementen.

Was das Schema betrifft, gibt es natürlich genug Mängel, aber genug für Experimente. Werde ich es ändern? Ehrlich gesagt weiß ich nicht, wie die Seele lügen wird.

Zum Schluss noch ein paar Videos mit der Arbeit:

Glider:



Kleines Schiff:



Pentadecathlon passt auch:



Projektdateien auf Google Drive.

Einige Erklärungen zum Inhalt:

live.atanua - cell;
LiveFieldM.atanua - Matrix;
LiveField.atanua - ein kleines Matrixelement (8x8), aus dem LiveFieldM erstellt wurde. Die Kanten sind nicht geerdet.

Legen Sie zum Erkennen einen Ordner ab. Wenn dies nicht hilft, bearbeiten Sie die Dateien in einem beliebigen Texteditor (nach Struktur, regulärem XML).

Jetzt auch beliebt: