Reversi

Тема в разделе "WASM.ELECTRONICS", создана пользователем Paguo_86PK, 28 авг 2011.

  1. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Задумал я наконец взяться за разработку электронной версии игры Реверси в манере 70-80-ых. Т.е. не используя процессорные технологии. Каждая клетка игрового поля выполена в виде функционально законченного кубика с контактами. На верхней стороне камждого кубика расположен двух цветный светодиод (красный/синий) и кнопка. Внутри - микросхема XC9536.

    Все кубики соединятся друг с другом с восьми сторон. Т.е. один кубик имеет до восьми соседей. Вот примерная схема соединения кубиков в одном направлении:
    Код (Text):
    1. -──────────v────────────────────v────────────────────v──────────-
    2.  ┌─────────^─────────┐┌─────────^─────────┐┌─────────^─────────┐
    3. -┼─────────v─────────┼┼─────────v─────────┼┼─────────v─────────┼-
    4.  │┌────────^────────┐││┌────────^────────┐││┌────────^────────┐│
    5.  ││ ┌───┬─────┬───┐ ││││ ┌───┬─────┬───┐ ││││ ┌───┬─────┬───┐ ││  
    6.  │└─┤NIx│     │   │ │││└─┤NIx│     │   │ │││└─┤NIx│     │   │ ││
    7.  └──┤NSt│     │   │ ││└──┤NSt│     │   │ ││└──┤NSt│     │   │ ││
    8. -───┤PIx│     │X/O├─*┼───┤PIx│     │X/O├─*┼───┤PIx│     │X/O├─*┼-
    9. -───┤PSt│     │Sta├──*───┤PSt│     │Sta├──*───┤PSt│     │Sta├──*-
    10. -───┤Sup│     │Str├──────┤Sup│     │Str├──────┤Sup│     │Str├───-
    11. -───┤CRq│     │CAk├──┐┌──┤CRq│     │CAk├──┐┌──┤CRq│     │CAk├──┐
    12.     └───┴─────┴───┘  ││  └───┴─────┴───┘  ││  └───┴─────┴───┘  │
    13. -──────────v─────────┘└─────────v─────────┘└─────────v─────────┘
    14. -──────────^────────────────────^────────────────────^──────────-
    Как видно, один кубик должен иметь 10 контактов для связи с другими только по одной оси. Понятно, на на игровом поле таких осей - четыре. И полная схема расключения усложняется.

    Вот описание контактов:
    CAk: Change Acknowledge
    CRq: Change Request
    NIx: Next cage index
    NSt: Next cage cast status
    PIx: Previous cage index
    PSt: Previous cage cast status
    Str: Status change string
    Sup: Support for status change
    X/O: Current cage index (0-"o"; 1-"x")
    XOn: Current cage cast (0-"passive"; 1-"active")
    ================================================
    CAk: Подтверждение смены статуса
    CRq: Запрос на возможность смены статуса
    NIx: Индекс следующей клетки
    NSt: Активность следующей клетки
    PIx: Индекс предыдущей клетки
    PSt: Активность предыдущей клетки
    Str: Цепь смены статуса
    Sup: Поддержка цепи смены статуса
    X/O: Статус текущей клетки (0-"o"; 1-"x")
    XOn: Текущая клетка (0-"пассивна"; 1-"активна")

    Принцип работы достаточно прост: Схема текущей клетки анализирует состояние её
    соседей и на основе их сигналов изменяет свой режим или статус. Так, сигналами
    NOn-NSt-POn-PSt определяется состояние соседних клеток.
    Активная клетка дублирует сигнал Str к Sup, если следующая клетка пассивна или
    оба их индекса совпадают. Если текущая клетка не активна и к ней пришёл сигнал
    Str, то при нажатии на её кнопку она дублирует его к CAk и также переключается
    в активное состояние, меняя свой индекс соответственно с предыдущей клеткой.
    Активная клетка дублирует сигнал CRq к CAk, перключая свой индекс, если сигнал
    Str активен.

    Ниже я представляю графическое изображение схемы.

    Если меня спросите про содержимое кубика, отвечу, что схему ещё не начертил, так-как не совсем продумал всю логику. Тем более, нету vhdl набросков. Я даже не уверен, хватит ли всех выводов XC9536 для полноценного сопряжения...
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Paguo_86PK
    Это очень сложная схема соединений. И поэтому еще в прошлом тысячелетии изобрели сенсорный экран и микропроцессоры. Может оно и неправильно, но пока именно так живем
     
  3. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    XC9536 и правда маловата, но запихнуть можно при должном опыте, например засунуть коммутатор, но лучше и дешевле взять ARM-Cortex например какой-нибудь
     
  4. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Ну, для меня те времена, когда я радовался, что несколько десятков байтов машинного кода заставили пищать спикер и издавать трель, прошли. Сейчас меня больше всего интересуют системы, наподобии нейронных сетей, подобных из книги 70-ых Войцеховского с перцептронном.

    Если задуматься, то чисто электронная фигня на простых микросхемах, например, на выставке, привлечёт больше внимания публики, чем очередной гаджет с сенсорным экраном и на одном процессоре. Ведь на сборку первого может уйти недели кропотливой пайки и расключения десятков проводов. Тогда как на второе - всего один вечер.
    Причём, как Вы и заметили, схема расключения в моём случае довольно сложная. А в случае с PIC, например, просто бъётся алгоритм и всё.
    Меня это уже, понимаете ли, не заводит.

    Вот и сижу на досуге, сам смотрю "Певец на свадьбе", а сам перепродумываю всё технику расключения.
    У меня получается ровно 36 контактов: 34 для связей с соседями и 2 под сброс + строб.
    И меньше никак не получается. Для игры на поле 6x6 понадобится 36 штук XC9536, что примерно обойдётся в $25 в общем. Прилично!

    Если есть желающии пошевелить мозгами и набросать хотя бы на бумаге карандашом начинку одного кубика, может подключиться к прожекту! :)
    А у меня, после летних каникул мозги никак не включатся. Даже алгоритмы бить отвык. :))
    SVG-анимашку еле набил в блокноте. И то, в Opera и IE пашет, а в Chrome и FireFox ругань выходит. Хотя Sony Erricson, с незначительными искажения в позициях текста, но полностью воспроизводит анимацию!
    Чушь какая-то у этих вэб-инженеров! Никак не договорятся о стандартах! :-((
     
  5. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Ну коль так берите ПЛИСину чуть побольше, Вы же все равно писать на VHDL будите или рисовать?
     
  6. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Во-первых, с одного соседа клетка принимает 4 сигнала:
    1) Вход-Активность: Состояние клетки определенно или она пуста?
    2) Вход-Индекс: Активная клетка переключена в X или O?
    3) Вход-Цепь: Активная клетка разрывает цепь изменений?
    4) Выход-Звено: Данная клетка является звено цепи изменений. Иначе разрывает его.
    Во-вторых, всем своим соседям клетка сообщает своё состояние:
    1) Выход-Активность;
    2) Выход-Индекс.
    Что, не трудно подсчитать, требует 32 вывода (по 3 сигнала с каждого из 8 соседа + 1 сигнал к каждому из 8 соседу) + ещё 2 ко всем соседям. Итого 34 коммуникационных вывода и 1 как вход от кнопки пользователя, когда тот нажал на неактивную клетку.
    Если один вывод, связанный со всеми клетками для сброса, чтобы нужные клетки, запрограммированные на центральное "x"(синий) и "o"(красный), верно установились. А остальные - погасли.

    Если пользоваться троичным состоянием ("0", "1" и "z"), что поддерживается в VHDL с натяжкой, то можно было бы съэкономить 9 выводов, на подобии тринарной логики!
    А так, имеем целочисленную бинарную логику:
    00 - (+0) Клетка пассивна (состояние "z");
    01 - (+1) Клетка установлена в "o";
    10 - (-2) Не используется;
    11 - (-1) Клетка установлена в "x".

    Если соседей описывать сторонами света:
    Код (Text):
    1. NW N NE
    2. W  h E (h - here)
    3. SW S SE
    То алгоритм набросать можно так:
    Код (Text):
    1. if((east.index != '0') && (east.index != here.index)) // Если справа имеется индекс и он отличен
    2.     east.stringAk <= '1'; // Создаём цепь идущую вправа
    3. if((east.index != '0') && (east.index == here.index)) // Если справа имеется такой же индекс
    4.     east.stringAk <= west.stringRq; // Продолжаем левую цепь вправо, если она имеется
    5. if((here.index == '0') && (west.stringRq == '1') && (here.user == '1')) // Если здесь пусто и нажато
    6.     { here.index = west.index xor '2'; west.stringAk <= west.stringRq; }
    7. if((west.stringRq) && (east.stringRq)) // Если клетка - часть цепи и она замкнута пользователем
    8.     here.index ^= '2'; // меняем "x" на "o" или "o" на "x"
    Как я понял, если не ошибся, это примерно нужный алгоритм рефлексов клетки по направлению с Запада на Восток. Тем же принципом описываются другие направления. Как Вы поняли, всего их восемь. Не так уж и сложно получилось. :)

    Дерзайте! :derisive:
     
  7. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Я все никак не могу отойти от этого видео: http://www.youtube.com/watch?v=sNCqrylNY-0
    Как люди делают такое на микропроцессоре, который даже деление/умножение целых чисел не знает..
     
  8. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Делить то она может и не умеет, а вот умножать может, даже знаковые числа....
     
  9. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Ну все равно, этож полный ад, в реалтайме генерить музыку, синхронизировать видео, при этом еще и эффекты крутить... У меня все равно шок просто. Чувак имхо гений.
     
  10. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Ад в основном с видеоразверткой. Звук там простой, три канала прямоугольники генерят, один из них (для басов) аналоговым способом фильтрует высокие частоты.
     
  11. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Вообще-то процессорные технологии - с одной стороны прорыв, с другой - тупик.
    Вот смотрите. В советском фильме 1930-ых про футболиста в комнате стоял дубовый ламповый робот. Волею режиссёра он здоровался с гостями и ещё что-то (не помню, смотрел сто лет назад!).
    Сейчас в современном процессоре даже дубовой сотки поместились бы тысячи схем того робота! Однако, что 80 лет назад сделать ограниченный прототип мозга из десятков ламп было фантастикой. Что сейчас, имея миллиард транзисторов у себя на коленях, распознавание речи и визуальных объектов - всё-таки очень и очень далеки от ожиданий.

    В идеале, виртуальная студия не должна иметь голубых или зелёных стен для построения виртуального заднего плана. Компьютер должен сам ссылаться на библиотеку автоматически накопленных образов и выделять в кадре людей, столы и стулья, отделяя их от окон и кондиционеров, а так же гриммёров и даже другого оператора в кадре, скрывая их.
    Скажите, даже при нелинейном монтаже, сколько времени уйдёт на обработку одного кадра в такой системы, основываясь на современные достижения технологий в сфере обработки образов? Ответ я и сам знаю: почти нереально!

    И чем же, по Вашему, процессорная модель "Реверси" лучше дискретной логики?
    Даже используя простейщие процессоры, число транзисторов у нас будет излищне бОльшим, чем если бы собирать кубики на обычных ТТЛ микросхемах, путаясь в проводах для их связи.
    Конечно, поле 32x32 лучше организовывать процессором. Не спорю и даже за!
    А вот 6x6 и даже 8x8 вполне реально выполнить дискретно. Или с помощью ПЛИС для простоты. И не надо, пожалуйста, считать число транзисторов в ПЛИС и сравнивать с процессором. Так-как в перспективе ПЛИС разумно заменить на ПЛМ и достичь пика в соотношении задача/тех.затраты.
    А ещё в перспективе можно в промышленных масштабах разместить всю логическую схему в корпусе светодиода. Тогда просто соединив контакты всех светодиодов в ряд, получим поле для игры в "Реверси"! (чтобы не было придирок, в светодиоды не буду впихивать кнопки. а ход будет делатся в клетке на перекрёстке X и Y осей)

    И ещё, даже если реально эту схему никто и не отважется собирать. Очень полезно иметь общее представление её решения.
    Замечу, что меня к этому подтолкнул крайне небрежный пост, который ошарашил меня и я всё это время пытался сообразить, на сколько это так? Возможно человек имел ввиду простейщий вариант, где каждый кубик переключается в ручную.
    Но меня интересует именно автомат! Где нажатие на один кубик перекрашивает все остальные нужные!
    А это на порядок сложнее игры "Жизнь", а не проще, как утверждал постер!

    Но я рад, что пусть даже теоритически, но в конце лета всё-таки решил эту задачу под некоторый процент!
    Осталось ли демо-алгоритм состряпать, где одна клетка поля имеет кучу свойств и сама бы их просчитывала, основываясь на окружении. Тогда как классический алгоритм просто сканирует ряды и песечения. Ну Вы поняли...
     
  12. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Паяные контакты - это всегда дорого и ненадежно. Производство всего устройства на универсальном микроконтроллере с мультиплексированием матрицы кнопок и светодиодов дешевле и надежнее даже для указанных вами размеров полей, несмотря на то, что количество транзисторов в таком случае получается в сотни тысяч раз больше необходимого - таково следствие из зависимости стоимости производства универсального микроконтроллера от количества произведенных микроконтроллеров. Я не зря выделил слово, именно универсальность контроллера позволяет на порядки увеличивать количество произведенного, а значит, существенно снижать стоимость производства одного контроллера и при этом получать выгоду.
     
  13. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Реализация игрушек (Реверси, Жизнь или еще что-то) в виде электронных схем никаким образом не приблизит решение перечисленных задач. Эти задачи упираются не в ограничение последовательно/параллельно, а в наше незнание того, как построен мозг и в частности, кора. Уже давно ясно, что мозг не самоорганизуется из нейронов. Вероятно, он самоорганизуется из каких-то более сложных элементов, которые в свою очередь построены из нейронов по генетической программе. Сейчас задача - понять, действительно ли так (хотя в пользу этого много свидетельств), узнать нейронную структуру таких элементов, узнать функцию таких элементов, а уж реализовать их можно будет так, как будет выгоднее на момент открытия структуры и функции таких элементов, и вполне может быть, что выгоднее опять же будет именно программно на одном или группе процессоров.
     
  14. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Я уже сказал.
    Ещё в литературе за 70-ые можно найти схемы релельные 4-битной машины. А также релельного лабиринта с ботом-мышью.
    В детстве я читал, но не понимал теорию.

    А вот с Реверси, как уже повторяю который раз, мне интересна именно дискретная схема одной клетки поля в теоритических планах.
    Я, тем самым, разминаю мозг и задаюсь вопросом, под силу ли мне решение этой задачи?
    А то, как я подчеркнул, сказано, мол алгоритм рефлексов одной клетки игры "Жизнь" сложнее, чем в "Реверси".
    Можете точно сказать, на сколько именно?
    Я думаю, скоро узнаю. Когда разработаю полные схемы клетки "Реверси", подсчитаю число транзисторов и количественно сравню.
    В "Жизни" можно обойтись простой логикой 5-ИЛИ и 3-И для одной из 256 ситуаций, когда рождается новая клетка. Что требует уже 10-КМОП транзисторов на 5-ИЛИ и 6 на 3-И. Итого - 16 на 1/256 ситуций. Всего - 4096 транзисторов на одно только "рождение" новой клетки.

    Не трудно подсчитать общее число транзисторов на клетку, чтобы сравнить с клеткой "Реверси".
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Paguo_86PK
    В игре "Жизнь" сложность заключена в том, что существует "два слоя" : т.е. сначала приходится считать следующее состояние всех клеток, а потом только можно менять. В программе конечно можно реализовать это просчетом 3-х строк(столбцов) и изменением 2 из них, которые уже не нужны на следующем шаге. Как это электронно сделать - только хорошей синхронизацией или сложной схемой "бегущая волна". В "реверси" такого нет при правильной реализации. Но я согласен, что для большого поля схема реверси становится "неподъемной" по сравнению с игрой "Жизнь". Но может я и не прав.
    Транзисторы вы неправильно считаете. Зачем же 256 отдельных схем анализа. Она одна и умножения на 256 нет. Там нужен счетчик, несколько компараторов и несложная логика. 200-300 транзисторов.
     
  16. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Вы как-то странно подсчитываете. А процедуру оптимизации двоичной функции вы проводить не собираетесь? Карты Карно, там, и т.п.?
     
  17. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    В аппаратной реализации в моём случае каждая клетка поля - самофункциональна: Логическая часть анализирует состояние соседей, а состояние хранит в JK-триггере. Тем самым, все клетки переключаются синхронно в новое состояние.
    Понимаю, это очень затратно использовать для каждой клетки триггер и вентили. Но, экспериментально поле 32x32 в любой ПЛИС легко описать!
    Да, я знаю, чтобы действовать по правилу "n>3->kill", достаточно найти любые 4 единичных бита, использовав 4-И-логику. 256 элементов 4-И или древо-подобная организация с большей экономией. Но, если Вы читали давние мои темы про схемы умножения/деления без тактовой частоты, вспомните, что я всегда иду от худшей реализации. Потом оптимизирую! :)