Заранее предупрежу: картинок довольно много.
В данной статье речь пойдет о реализации игры «Жизнь» с использованием логических элементов в симуляторе «Атануа».
«Игра жизни», пожалуй, один из самых узнаваемых клеточных автоматов.
О ней написана не одна статья, в том числе и на Хабрахабр .
Когда-то я тоже ею интересовалась, но как-то это длилось недолго.
Напомню, что такое «Жизнь»: Существует некая матрица ячеек, которая называется «вселенная» (в идеале бесконечная).
На каждой итерации (называемой «днями») любая ячейка может быть «живой» или «мертвой», а ее состояние зависит от предыдущей итерации по следующим правилам:
- Клетка оживает, если рядом с ней находятся 3 живые клетки.
- Клетка продолжает жить, если рядом с ней живы 2 или 3 клетки.
- В других случаях клетка погибает.
двумерная окрестность Мура порядка 1 ).
Более подробную информацию о «Жизни» можно найти в Википедия .
Позже я где-то услышал, что современные компьютеры имеют ограничение скорости, вызванное, в том числе, наличием какого-то канала связи между памятью и вычислительным ядром.
В качестве решения было предложено собрать счетную память.
Не помню точно, помнил ли я сам «Жизнь», или она упоминалась в той статье, но мне хотелось смоделировать ее в логической схеме (точнее, в матрице одинаковых схем).
Почему «Жизнь»? Основными причинами стали ее распространенность и популярность, а также то, что «вселенные» в ней являются полными по Тьюрингу, что позволяет производить на ней любые расчеты и решать различные задачи.
Оказывается, на основе этого клеточного автомата можно создать компьютер.
В качестве инструмента был выбран симулятор Атануа ( официальный сайт ), так как он довольно прост в освоении и отображает состояние всех линий.
Конечным результатом было следующее: Диаграмма одной ячейки
Одной из удобных особенностей симулятора Atanua является то, что вы можете подключать схемы как своего рода микросхемы к другим проектам.
Этим я и воспользовался, собрав матрицу для отладки и экспериментов.
Клеточная матрица
Для более детального просмотра верхнего левого угла:
Кнопка «r» используется для сброса схемы.
Кнопки с надписью «0» используются для перевода ячейки в активное состояние.
Хочу отметить, что сброс повторным нажатием пока не реализован.
Три нижних заземления используются в качестве ограничителей цепи для предотвращения появления различных артефактов.
В Атануа провод может иметь 4 состояния:
- темно-зеленый: лог.
0;
- светло-зеленый: лог.
1;
- красный: подключен неправильно;
- белый: не подключен (неопределенное состояние).
Исходная версия схемы требовала инициализации, для чего и использовался этот вывод. На данный момент это рудимент (чтобы не переделывать матрицу), и ее состояние может быть любым.
Еще один провод, выходящий за край рисунка, — это выход тактового сигнала.
Он идет к набору генераторов, на которых проверял максимальную скорость.
Теперь давайте более подробно рассмотрим расположение ячеек.
В связи с проблемами с качеством скриншотов, предоставлю фотографии отдельных узлов.
регистр
На рисунке выше показан 2-битный сдвиговый регистр с циклическим циклом на триггерах D, который действует как память.
С этим связан один неприятный момент, который мне еще предстоит исправить: во время работы схема как будто моргает, так как в активном состоянии (когда в этот регистр записывается информация, то есть в состоянии живой ячейки) , триггеры обмениваются между собой 0 и 1 и получается, что на выходе F (выход для индикации состояния, например, на светодиод) у нас либо 0, либо 1 (это видно на видео в конце статья).
RST — вход сброса.
SET – вход для перевода ячейки в состояние живой клетки.
Как уже говорилось, индивидуальный сброс ячеек пока недоступен.
Вверху слева находится тактовый сигнал.
Подробнее о двух соседних проводах ниже.
Проверить блок
В блоке проверки проверяется состояние игры.
Сверху к рождению, снизу к выживанию.
Особенность этого блока в том, что его можно подстраивать под другие правила, организуя тем самым аналогичные клеточные автоматы.
Выходы сумматоров находятся слева, а два провода, идущие к регистру, — снизу.
Фактически они подключены к участку одной из линий передачи регистра.
Сумматоры
Пожалуй, самая большая и противоречивая часть схемы — это сумматоры параллельного типа.
Реализовав его, я решил задачу проверки необходимых условий «в лоб», суммируя все входы А0-А7 из соседних ячеек и проверяя результат на соответствие условиям.
В этом случае сначала суммируются входы A0+A1+A2, A5+A6+A7, затем результатом второй суммы являются выводы A3 и A4 и так далее.
В итоге у нас получилось 6 сумматоров и 1 полусумматор.
Стоит отметить, что один из сумматоров можно заменить и полусумматором, поскольку один из его входов не используется.
Не помню, почему я сделал один заземленный вход (тёмно-зелёный внизу слева, выходящий за границы картинки).
Изначально я хотел упростить ее с помощью DNF или CNF, но решать карту Карно 16x16 у меня пока нет желания.
Так что я не исключаю, что этот модуль может иметь альтернативный вид. С — это вход такой частоты, он не имеет никакого отношения к суммирующей схеме, он идет на регистр.
Про Init я писал выше — рудимент от предыдущей версии.
Нижняя граница
Я не считаю Игру Жизни достойным клеточным автоматом для реализации счетной памяти, так как «программа» для такого компьютера занимала бы довольно много места и была бы сложна в реализации.Но все же схема позволяет мечтать о микросхеме с реализацией ячеек этой игры.
Думаю, было бы весьма интересно увидеть аппаратную реализацию этого клеточного автомата.
И я имею в виду не микроконтроллеры с программой, а исключительно на ячейках из логических элементов.
Что касается схемы, то в ней конечно много недостатков, но для экспериментов вполне достаточно.
Улучшу ли я его? Честно говоря, я не знаю, как почувствует мое сердце.
Напоследок немного видео работы: Планер: Маленький корабль: Для пятидесятиборья также подходят: Файлы проекта на Гугл Диске.
Некоторые пояснения по содержанию: live.atanua – клетка; LiveFieldM.atanua — матрица; LiveField.atanua — небольшой матричный элемент (8x8), из которого был создан LiveFieldM. Края не заземлены.
Для обнаружения поместите их в одну папку.
Если не поможет, отредактируйте файлы в любом текстовом редакторе (по структуре, обычном XML).
Теги: #игра в жизнь #логические схемы #Аномальное программирование #Алгоритмы
-
Анонимная Интернет-Зависимость
19 Oct, 24 -
Чем Хороши Легкие Кроссовки Для Бега
19 Oct, 24 -
Веревка Как В «Перережь Веревку»
19 Oct, 24 -
Эскорт
19 Oct, 24