論理要素に関するゲーム「Life」

事前に警告します。かなりの数の写真です。



この記事では、シミュレータ「Atanua」の論理要素でのゲーム「Life」の実装に焦点を当てます。



「Life」というゲームは、おそらく最も有名なセルオートマトンの1つです。 Habrahabrを含む彼女に関する記事は1つもありません。 一度も彼女に興味を持つようになりましたが、どういうわけか長い間十分ではありませんでした。



人生とは何かを思い出させてください:
「宇宙」(理想的には無限)と呼ばれるセルのマトリックスがあります。 各反復(「日」と呼ばれる)では、任意のセルが「生きている」または「死んでいる」ことができ、その状態は次の規則に従って前の反復に依存します。



  • 近くに3つの生きている細胞がある場合、細胞は生き返ります。
  • 2つまたは3つの細胞が近くで生きている場合、細胞は生き続けます。
  • それ以外の場合、セルは死にます。


セルの近傍は、周囲の8 つのセルです( ムーアの1次元の2次元近傍を参照)。



Lifeの詳細については、 Wikipediaを参照してください



後になって、どこかで、最近のコンピューターには、特にメモリとコンピューティングコア間の通信チャネルの存在が原因で速度制限があると聞いたことがあります。 解決策として、カウントメモリを収集することが提案されました。 私自身がLifeについて覚えていたかどうか、またはその記事で言及されたかどうかは正確には覚えていませんが、論理回路(正確には、同一の回路のマトリックス)でモデリングしたかったのです。 なぜ「人生」なのですか? 主な理由は、その有病率と名声、およびその中の「宇宙」がチューリング完全であるという事実であり、チューリングが計算を実行してさまざまな問題を解決できることです。 このセルオートマトンに基づいて、コンピューターを作成できることがわかりました。



Atanuaシミュレーター( 公式サイト )がツールとして選択されました。これは非常に簡単に学習でき、すべての行のステータスを表示するためです。 最終的に、次のことが明らかになりました。



シングルセルレイアウト




Atanuaシミュレータの便利な機能の1つは、回路を一種の超小型回路として他のプロジェクトに接続できることです。 これを利用して、デバッグと実験用のマトリックスを収集しました。



セルマトリックス




より詳しく見るために、左上隅:







「r」ボタンは、回路をリセットするために使用されます。 「0」として署名されたボタンは、セルをライブ状態に設定するために使用されます。 もう一度押してリセットすることはまだ実装されていません。 下部の3つの接地は、さまざまなアーティファクトが発生しないように、回路リミッターとして使用されます。 アタヌアでは、ワイヤには4つの状態があります。





さらに、未定義の状態が論理要素の入力に適用される場合、一部は0として認識され、一部は1として認識される場合があります。このため、未使用の出力を0に設定する形式でリミッターが設定されました。



地上に注意を払わないでください。 回路の初期バージョンでは初期化が必要であったため、この出力が使用されました。 現在、それは基本であり(マトリックスをやり直さないように)、その状態は任意です。 画像の端を越える別のワイヤは、クロック信号の出力です。 彼は発電機のセットに行き、そこで最高速度をテストしました。



次に、セルレイアウトについて詳しく説明します。 スクリーンショットの品質に問題があるため、個々のノードの図面を提供します。



登録する







上の図は、メモリとして機能するDトリガーの2ビットループシフトレジスタを示しています。 接続されていない良い瞬間がありますが、まだ修正していません:動作中に回路が点滅しているようです、アクティブ状態(このレジスタに情報が書き込まれているとき、つまり生きている細胞の状態)では、トリガーが0と1の間で交換され、出力F(LEDなどのステータスを示す出力)には0または1があります(これは記事の最後のビデオで確認できます)。 RSTはリセット入力です。 SET-生細胞の状態で細胞を設定する入力。 すでに述べたように、単一のセルはまだリセットされていません。 左上にはクロック信号があります。 下の隣接する2本のワイヤーについて。



チェックブロック







チェックブロックでは、ゲームの状態がチェックされます。 誕生のためのトップ、生存のためのボトム。 このユニットの特徴は、他のルールに合わせて調整できるため、同様のセルオートマトンを編成できることです。 加算器からの出力は左側にあり、下部にはレジスターに接続する2本のワイヤがあります。 実際、これらはレジスタの転送ラインの1つのコンテキストで接続されています。



加算器







おそらく、回路の最大かつ最も物議をかもしている部分は、並列直列加算器です。 それを実装してから、「額に」必要な条件をチェックし、隣接セルからのA0〜A7のすべての入力を合計し、結果が条件に準拠しているかどうかをチェックする問題を解決しました。 この場合、入力A0 + A1 + A2、A5 + A6 + A7が最初に合計され、次に2番目の合計、結論A3およびA4などの出力が合計されます。 最終的に、6個の加算器と1個の半加算器が最終的に判明しました。 加算器の1つを半加算器に置き換えることもできます。なぜなら、 その入力の1つは使用されません。 接地入力を1つ行った理由(下の写真の下部に濃い緑色が残っている)-覚えていません。 最初は、DNFまたはCNFの助けを借りてそれを単純化したかったのですが、Carnot 16x16カードを解決したいという希望はまだありません。 したがって、このモジュールが別の外観を持つ可能性のある瞬間を除外しません。



Cはそのような周波数の入力であり、加算回路とは関係なく、レジスタに送られます。 Initについては、上に書いた-前のバージョンからの初歩。



まとめ



「Life」ゲームは、読み出しメモリを実装するのにふさわしいセルオートマトンとは見なしません。そのようなコンピュータの「プログラム」はかなり多くのスペースを占有し、実装が難しいためです。 それでも、この回路により、このゲームのセルを実装したチップを夢見ることができます。 このセルラオートマトンのハードウェア実装を見るのは非常に興味深いと思います。 そして、私はプログラムを備えたマイクロコントローラを意味するのではなく、論理要素からのセルのみを対象としています。



スキームに関しては、確かに十分な欠陥がありますが、実験には十分です。 変更しますか? 正直なところ、私は魂がどのように嘘をつくのか分かりません。



最後に、いくつかの作品のビデオ:



グライダー:







小型船:







五十種も適合:







Googleドライブ上のプロジェクトファイル



コンテンツに関する説明:



live.atanua-セル;

LiveFieldM.atanua-マトリックス;

LiveField.atanua-LiveFieldMが作成された小さなマトリックス要素(8x8)。 エッジは接地されていません。



検出するには、1つのフォルダーに入れます。 解決しない場合は、テキストエディターでファイルを編集します(構造、通常のXML)。



All Articles