Введение
Давным давно, когда вокруг все было большим, а я маленьким, читал я книгу Войцеховского «Радиоэлектронные игрушки», горя желанием воплотить в жизнь те или иные описанные в ней устройства. Так, в уже тоже далеком 2008-м году, из нескольких десятков электромагнитных реле было собрано 4-разрядное АЛУ (РЦВМ1 — Релейная Цифровая Вычислительная Машина — версия 1) способное складывать и вычитать. И задумал я тогда — а что если собрать существенно большее количество реле и построить полноценный релейный компьютер? На неспешную сборку реле то здесь то там до требуемого количества ушло всего 8 лет, и я начал творить.
Разрешите представить Вам свой проект по созданию второй версии релейной цифровой вычислительной машины, с кодовым названием «BrainfuckPC» — 16-разрядной компьютер с Фон-Неймановской архитектурой и набором инструкций для языка Brainfuck. Работы по проектированию завершены, и я в процессе изготовления сего монстра.
1 Технические характеристики
- Разрядность шины адреса: 16 бит
- Адресация: пословная, 16 бит/слово
- Емкость памяти: 64 килослова (128Кбайт)
- Разрядность шины данных: 16 бит
- Единое адресное пространство кода и данных (Архитектура Фон-Неймана)
- Тактовая частота (проектная): 100 Гц, 1 инструкция/такт
- Набор инструкций: Brainfuck++
- Количество реле (проектное): 792
- Используемые реле: герконовые, РЭС55(1п), РЭС64(1з)
Подробности подкатом
Общий принцип работы
Рассмотрим обобщенную структуру компьютера:
Рисунок 1: Обобщенная структура компьютера
Центральным элементом является Сумматор, причем не простой, а с параллельным переносом. Зачем это нужно — расскажу чуть ниже.
Программа и данные хранятся в блоке памяти. Доступ к ним осуществляется по адресу, записанному в регистре инструкций IP, либо в регистре адреса AP, исходя из того, что мы сейчас хотим прочитать — данные по адресу, указанному в AP, либо инструкцию, записанную по адресу IP.
Чтобы оперировать этой лентой Тьюринга (а Brainfuck язык программирования отождествляет именно её), нам надо иметь возможность совершить одно из трех действий:
- Изменять значение в текущей ячейке данных, то бишь делать операции Add/Sub. В Brainfuck значение в ячейке можно изменить только на единицу, т.е. +1 либо -1. Но имея полноценный сумматор грешно не схлопнуть длинные цепочки ++++++++++++(------------) в одну операцию AP+=N(AP-=N) существенно ускорив процесс вычисления. (также не забудем превратить [-](или [+]) в *AP=0);
- Изменять номер текущей выбранной ячейки данных. То бишь гулять по памяти данных (AP++, AP--);
- Изменять номер текущей инструкции. Во-первых, нам нужно после выполнения каждой инструкции увеличивать значение в регистре IP на единицу. Во-вторых, изменять это значение при наличии ветвлений в коде (по умолчанию для организации циклов). Контрольный флаг всего один — Z. Соответственно есть команды JumpIfZero и JumpIfNotZero.
Итого нам надо иметь возможность подавать на один вход сумматора значение любого из следующих трех блоков — AP-регистра, IP-регистра, DATA-шины. Делать это будем через временный регистр, в котором будем сохранять одно из требуемых значений, подключая нужный с помощью 16-разрядных ключей.
На второй вход сумматора будем подавать число, на которое одно из этих значений должно изменяться в плюс или минус. В виду ограниченной ширины инструкции, изменять можно только на +-12битное число. Впрочем для Brainfuck это более чем достаточно("хватит всем", ага).
Брать эти 12 бит мы будем с регистра команд, при наличии таких команд естественно, ибо часть команд не использует сумматор вовсе. Не забудем что отрицательные числа будут подаваться в дополненном коде, с подачей на доп. вход переноса единицы (т.е. будет A+ invB + 1)
Результат вычисления сразу загружаем туда, откуда мы его взяли. Из-за временного регистра делать это мы можем безболезненно.
Более подробно (я бы даже сказал — занудно) об архитектуре можно узнать из этого видео:
Набор инструкций
Нарисовав общую принципиальную схему, способную реализовать 8 основных Brainfuck-инструкций, я понял, что у нее гораздо больший потенциал. Поэтому я разработал более широкий набор инструкций, совместимый с Brainfuck, однако требующий компиляции каждой исходной Brainfuck-инструкции в 16-разрядную инструкцию компьютера.
Общее описание инструкции
Все инструкции 16-разрядные. Формируются из нескольких частей.
- Биты 15, 14, 13 — определяют класс инструкции
- Бит 12 — Знаковый бит для знаковых инструкций
- Биты 11-0 — содержат младшие 12 бит знакового int-a. Старшие 4 бита формируются согласно значению 12-го бита.
Таблица инструкций
Инструкция | Опкод | Операция | Эквивалент из Brainfuck | Описание |
---|---|---|---|---|
add m16 | 0X XX | AP < AP + m16 | '+' (Повторить m16 раз) | Прибавляет базу к текущему значению выбранной ячейки |
sub m16 | 1X XX | AP < AP — m16 | '-' (Повторить m16 раз) | Соответственно вычитает базу из числа |
ada m16 | 2X XX | AP < AP + m16 | '>' (Повторить m16 раз) | Увеличивает значение адреса |
ads m16 | 3X XX | AP < AP — m16 | '<' (Повторить m16 раз) | Уменьшает значение адреса |
jz m16 | 4X XX | (*AP == 0)? IP < IP + m16: IP < IP | '[' | Идти на IP + m16 если значение текущей ячейки равно нулю |
jz m16 | 5X XX | (*AP == 0)? IP < IP — m16: IP < IP | Нет | Идти на IP — m16 если значение текущей ячейки равно нулю |
jnz m16 | 6X XX | (*AP != 0)? IP < IP + m16: IP < IP | Нет | Идти на IP + m16 если значение текущей ячейки не равно нулю |
jnz m16 | 7X XX | (*AP != 0)? IP < IP — m16: IP < IP | ']' | Идти на IP — m16 если значение текущей ячейки не равно нулю |
and m16 | 8X XX | AP < AP AND m16 | Нет | Логическое AND с положительным числом |
and m16 | 9X XX | AP < AP AND m16 | Нет | Логическое AND с отрицательным числом (кто-то же должен сформировать старшие 4 бита) |
or m16 | aX XX | AP < AP OR m16 | Нет | Логическое OR с положительной константой |
or m16 | bX XX | AP < AP OR m16 | Нет | Логическое OR с отрицательной константой |
in | c0 00 | *AP < CIN | ',' | Прочитать один m8 символ из консоли. Если входной буфер пуст — подождать его |
out | c0 01 | COUT < *AP | '.' | Вывести m8 символ в консоль |
clr.ap | d0 01 | AP < 0 | Нет | Очистить AP регистр. Команда допускает комбинирование |
clr.ip | d0 02 | IP < 0 | Нет | Очистить IP регистр. Команда допускает комбинирование |
clr.dp | d0 04 | *AP < 0 | '[+]' or '[-]' | Очистить ячейку памяти. Команда допускает комбинирование |
set.ap | d0 10 | AP < *AP | Нет | Записать текущее значение в AP регистр |
set.ip | d0 20 | IP < *AP | Нет | Записать текущее значение в IP регистр |
get.ap | d1 00 | *AP < AP | Нет | Считать текущее значение из AP регистра |
get.ip | d2 00 | *AP < IP | Нет | Считать текущее значение из IP регистра |
mode.b8 | e1 00 | Нет | Активация 8-разрядного режима (1) | |
mode.b16 | e2 00 | Нет | Активация 16-разрядного режима | |
halt | f0 00 | Нет | Стоп машина |
- AP — Регистр адреса
- IP — Регистр Инструкций
- *AP — Текущая ячейка памяти
- CIN — Консольный ввод
- COUT — Консольный вывод
- При активации 8-разрядного режима, сумматор продолжает работать в 16-разрядном режиме. Однако условные команды (а именно тест значения текущей ячейки памяти на равенство нулю) становится 8-разрядным. (AP & 0x00FF == 0)? и (AP & 0x00FF != 0)? Консольный ввод и вывод пока решено оставить всегда 8-разрядным. Не в юникоде же печатать в конце то концов?
В этом видео я подробно(но мало понятно) рассказал о том, что делает каждая инструкция и какой brainfuck-инструкции она соответствует:
Параллельный сумматор
Релейная ЭВМ должна быть не только релейной, но еще и быстрой. Как и любая другая ЭВМ, моя тоже будет синхронной машиной, оснащенной тактовым генератором. Естественно мне хочется не растрачивать впустую циклы тактирования и постараться каждую операцию уместить в один цикл — т. е. за нарастающий и спадающий фронты синхронного генератора успеть загрузить новую команду и исполнить ее. Желательно при этом чтобы все команды выполнялись за одинаковый период времени.
Каждое реле имеет некоторую задержку срабатывания и отпускания, которое мы примем за 1 условную единицу времени(у.е.в.) Если будем использовать реле РЭС22, 1у.е.в. будет равен 12-15мс (справочное), РЭС64 — 1.3мс(справочное). Самой дорогой (и наиболее частой) операцией в моей машине является сумматор.
Сам по себе он довольно простой и быстрый, но «есть один нюанс», который заключается в способе вычисления и передачи сигнала переноса.
Рисунок 2: Сумматор с последовательным переносом.
Изначально я планировал использовать сумматор с последовательным переносом. В таком сумматоре каждый последующий разряд зависит от состояния сигнала переноса разряда текущего. В итоге длительность операции вычисления будет колебаться между 2 у.е.в. — N*2 у.е.в., где N — число разрядов. В итоге, 16-разрядный сумматор с последовательным переносом будет иметь максимальную задержку 32 у.е.в.
Сумматоры с параллельным переносом имеют максимальное быстродействие. В них отсутствуют процессы распространения переносов от разряда к разряду. В каждом разряде одновременно вырабатываются выходные величины:
Рисунок 3: Сумматор с параллельным переносом
Возможность построения сумматора с указанными свойствами основана на воспроизведении функций суммы и переноса, зависящих только от значений слагаемых независимо от местоположения разряда в разрядной сетке. Подвох в том, что сама схема параллельного переноса с каждым последующим разрядом усложняется. Вот, смотрите что получается:
Рисунок 4: (Который должен был быть в виде LaTeX формулы, но нет) уравнение вычисления сигнала переноса для разрядов. Где — побитовое И, — побитовое ИЛИ
Как итог — реализовать параллельный перенос довольно накладно. Однако можно заметить, что последующий разряд содержит в себе уравнение вычисления предыдущего (тут должен быть мем "да ладно??" с Николасом Кейджем), поэтому в принципе достаточно будет сделать схему расчета переноса только для старшего разряда, а остальные собрать из него, предусмотрев вывод промежуточных результатов.
Рисунок 5: Полная схема 16-разрядного сумматора с параллельным переносом
На рисунке 5 — первые два столбца это собственно сами сумматоры. Потом идут блоки 2AND и 2OR, которые формируют промежуточные значения h и k, фигурирующие в рисунке 4. Их наличие подтолкнуло меня на мысль расширить список команд логическими операциями сложения и умножения, для чего мне необходимо добавить лишь пару защелок и соответствующий микрокод.
Все остальное — блоки 5AND на базе 4-х реле РЭС64, которые можно запаять так, чтобы один модуль использовать как, например 2AND + 3AND. У этих блоков каждый шаг логического И выведен через диод, что позволяет собирать промежуточные сигналы переноса.
Расчетное время распространения сигнала: сумматоры справляются за 1 у.е.в., в это время формируются сигналы на выходах блоков 2AND/2OR, далее, 1 у.е.в. — на умножение в блоках 5AND, логическое сложение на диодах, задержки не вносит. Ну и последняя одна у.е.в. тратится на досчет сумматора.
Итого 3 у.е.в. супротив 32-х, или не более 4,5 мс на работу сумматора.
Регистры
В машине четыре 16-разрядных специализированных регистра. Никаких РОН-ов. Только жесткая привязка, только хардкор! Состоит из D-триггеров, каждый D-триггер — это отдельный модуль на 4-х реле РЭС55 со следующей схемой:
Рисунок 6: Принципиальная схема модуля D-триггера. Где-то там есть еще разъем, но здесь он не важен, ибо все подписано.
Данные приходят на вход Data, реле которого определяет, куда пойдет сигнал синхронизации — на сброс триггера, или его установку(за что отвечают еще два реле, одно с самоблокировкой). Четвертому реле достается коммутация выхода Q. Очень полезная фишка.
Плата памяти
Рисунок 7: Плата памяти. Размеры платы 315х200мм
Очень сложный и важный элемент, хотя сама схема памяти составляет малую часть общей начинки блока. Задача этой платы — во-первых, нести на себе 64 Килослова общей памяти программ и данных. Собрана она на базе двух 64 Кбайт микросхем кэша. Адресный вход через схемы защиты и коммутатор подключается к шине адреса компьютера, а со стороны шины данных сложная система из входного буффера и выходного драйвера, также с коммутатором. За чтение и запись в память отвечают две линии W/R и Sync. Первая выбирает что будем делать, вторая — собственно будет это делать.
И пока этого самого Sync нет, плата памяти натурально живет своей жизнью. На рендере можно видеть две светодиодные матрицы 16х16. Этот дисплей выводит некоторую область памяти. Эдакая VideoRAM, определяется программно, кстати. Опрашивает микросхему памяти и управляет выводом микроконтроллер Atmega1280.
За сим задачи микроконтроллера не заканчиваются. На нем висит консольный ввод и вывод. Куда он будет выводить — я еще не решил, посему на плате разведен USB-Serial преобразователь для обычной консоли и ESp8266 для Wi-Fi. По последнему в наиболее актуальных планах иметь веб-страничку с возможностью загрузки программ для компьютера в память и собственно сама консоль. Да, В задачи МК также входит первоначальная загрузка программы в ОЗУ, для чего у него есть полный доступ к ОЗУ, а также небольшая EEPROM-ина на 1Мбит, для хранения программ.
Рисунок 8: Принципиальная схема платы памяти. Микроконтроллер и схемы блоков не показаны
Блок логики
Я понятия не имею, как он в итоге будет выглядеть. Последняя версия присутствует на общей схеме компьютера, но мне она не нравится. Скорее всего я сделаю 12-стадийный секвенсор и с помощью ключей буду подавать сигналы на отдельные блоки.
Рисунок 9: Все что вокруг 16-разрядных блоков и есть блок логики
Конструкция
Конструкция машины модульная, поблочная рамная. На КДПВ наглядно показано как будет располагаться начинка машины. Но обо всем по порядку:
Модуль
Базовый элемент компьютера — модуль 60х44мм, с 16-контактным разъемом, несущий на себе 4 реле, их обвязку, и 4 светодиода для индикации:
Рисунок 10: 3D-модель модуля
Модули различных типов:
- 1-разрядный сумматор с переносом — 16 шт;
- Модуль 5AND для схемы параллельного переноса — 32 шт;
- Модуль D-триггера — 64 шт на регистры, плюс немного на логике;
- Модуль 4x2AND_SW, для организации защелок. Тут просто 4 замыкающих реле;
- Модуль 4x2AND, для организации защелок. Здесь 3 реле из 4-х с переключающим контактом. На 4 реле не хватило вывода разъема;
- Модуль диодный, 8 диодов Д226Д. Для организации многовходового OR
- Модуль универсальный 2AND/2OR, позволяет создать 2AND-NOT, 2OR-NOT, 4AND, 4AND-NOT, 4OR, 4OR-NOT и любые комбинации. На базе 4 реле с переключающими контактами и общими точками;
Так как блок управляющей логики я, хоть и придумал, уже забраковал, точное число модулей каждого типа мне не ведомо. Разберусь по дороге. Расчетное число модулей — 192 штуки.
Блок
Берем плату 150x200мм, запаиваем на нее 32 разъема на 16 пинов, да не простые, а для монтажа накруткой и устанавливаем на нее в матрицу 8х4 наши модули, получая такой вот блок:
Рисунок 11: Блок
В моей машине таких блоков будет 6 штук — два блока на сумматор, два на регистры и два на логику. Чешу репу насчет еще пары блоков защелок, но если они и будут, то плоскими и распаянными
Монтаж накруткой был выбран потому, что: во-первых, схемотехника каждой базовой платы заранее хоть и известна, но может изменяться и подвержена ошибкам. Во-вторых, блок логики в принципе невозможно с первого раза развести корректно, и если для блока регистров все в целом понятно и можно разок ошибиться со, скажем, линией синхронизации, то логику придется переделывать тысячу и один раз. Будет намного лучше, если собирать каждую составляющую блока логики постепенно. В-третьих, чисто механический фактор — на двухслойной плате физически невозможно развести эти блоки :) Во все стороны расходятся 16-разрядные шины, которые многократно пересекаются друг с другом.
Итого каждый блок содержит 32 модуля, с общим числом реле 128 штук. Питание каждого блока — 5В 2А.
Компьютер
На большой раме, размерами 640х480мм (по факту немногим больше, но число красивое) размещаются шесть релейных блоков и плата памяти:
Рисунок 12: расположение блоков машины
Весь компьютер вставляется в деревянную раму из ценных пород дерева, со стеклом спереди и сзади.
Изготовление
Не смотря на сегодняшнюю дату, проект на самом деле существует :-) И находится в не самой активной, но все же стадии изготовления.
Реле
Их есть у меня. В большом количестве, но проблема в том, что из более килоштучного запаса три сотни — реле на 27 Вольт и 5-вольтовых РЭС55 мне может не хватить. Масштаб бедствия окончательно оценить не смогу, но думаю за последующее время что я буду собирать эту адскую машину проблема исчезнет за счет пополнения запасов извне.
Рисунок 13: Запасы реле. 800 штук реле — новые, удачно ухваченные на митинском радиорынке за копейки
Одним из источников пополнения запасов являются релейные платы ЦАП от лабораторных блоков питания. Вот такие вот:
Рисунок 14: Платы из блоков питания типа БП, приобретенные на радиорынке(нет, сам я БПшники не дербаню)
Печатные платы
Все печатные платы я решил делать сам. Зажал 300 баксов китайцам и уже 4 месяц занимаюсь тем, что покрываю заготовки фоторезистом, просвечиваю, травлю, покрываю паяльной маской, проявляю, сверлю фрезерую.
Рисунок 15: Протравленные панели различных видов
Платы я изготавливаю пластинами, по 9 модулей на пластине 200х150мм. Протравил 30 пластин и застрял на нанесении паяльной маски. Все никак не начну. Паяльная маска у меня FSR-8000 синего цвета, двухкомпонентная и я с ней ранее уже имел дело.
Пластины 200х150мм выбраны не случайно — у нас на радиорынке, в одном секретном месте такие стабильно продаются многие годы и вся моя приспособа заточена именно под этот формат.
В слову фоторезист (МПФ-ВЩ от Диазоний) я стал наносить с помощью ламинатора и это просто чудеса. Качество приклеивания выросло в разы.
Потом надо будет эти платы еще нарезать и насверлить, для чего у меня даже 3Д-фрезер имеется.
Рисунок 16: 3D-фрезерный китайский станок DIY 2020CNC
Взял я его за скромные 175 долларов исключительно за электронику. Платы сверлить и фрезеровать хватит, а я уже поглядываю на комплекты ШВП+рельсы для 3Д-станков. Готовые такие покупать дороговато, а собрать самому когда он начнет требоваться — самое то.
Вот в этом обзоре можно получше узнать о моем станочке:
Программы
Программы загружаются в компьютер с помощью микроконтроллера, а значит он должен знать что и куда грузить. Для сего есть специальный формат (в состоянии драфта конечно же) бинарного файла а ля Elf. В заголовке файла прописывается число, размер и адреса секций кода и данных (а также где содержимое этих секций лежит в файле). //TODO Не забыть добавить секцию видеопамяти — у нас же есть светодиодная панель, надо сказать микроконтроллеру с какого по какое выводить на экран.
Наличие микроконтроллера позволяет мне: а. контролировать корректность выполнения программы, б. обеспечивать защищенный режим работы с памятью. Можно ловить Segmentation Fault!
В общем, нужен компилятор. Я испробовал десятки различных популярных интерпретаторов — все исполняют одну и ту же программу по разному. Стабильнее всех оказался leBrainfuck, он делает трансляцию программы в свой формат и корректно ее исполняет.
Я написал свой компилятор, на данный момент его код ужасен, но он позволяет транслировать обычный Brainfuck в бинарь формата моей машины. Поддерживает сворачивание команд +-<>, но не реализовано преобразование последовательности [-] в сброс ячейки. Ну и куча других фич, в том числе поддержка доп. инструкций, тоже не сделаны.
Есть и простенький эмулятор. Эмулятор в момент написания статьи также поддерживает только основные 8 инструкций. Вот что он творит с программой фрактала:
Время выполнения — чуть меньше 10 секунд. Найденная на полях адекватная LLVM версия справляется за 0,9 секунд. О том как я с помощью Intel Vtune Amplifier оптимизировал свой эмулятор и разгонял с 120 секунд до 10 заслуживает отдельной статьи.
Но важно не это. Чтобы вывести этот фрактал, потребовалось 3 миллиарда оптимизированных brainfuck-инструкций. С учетом проектной частоты в 100Гц и 50 строк текста мы получаем 347 машинных дней — т.е. почти ГОД на одну программу, или строчка вывода в неделю! По факту первую строчку мы дождемся к концу первых суток, но чем дальше, тем медленнее. С другой стороны это самый быстрый релейный компьютер из всех существующих и проектируемых.
За сим, информация по существу закончилась, поэтому предлагаю посмотреть небольшой видеообзор других релейных компьютеров, существующих в природе
Вот здесь находится наиболее полный на мой взгляд список всех релейных машин на данный момент.
Мыслишки
Хочу заиспользовать часть запасов вакуумных индикаторов ИВ-6 в виде длинного табло в верхней части машины, выводящего в реальном времени значения всех регистров, а также общее число исполненных инструкций и общее время работы компьютера. Но здесь я никак не могу определиться с источником этих данных — МК в плате памяти забит под завязку, да и часть значений он способен лишь эмулировать. Лучший вариант — считывать значения напрямую. По схеме управления самими ИВ-шками тоже не могу прийти к единому мнению — делать динамическую индикацию на 30-40 ИВ-шек проблематичнее чем для 6 штук настольных часов.
ЗАЧЕЕЕЕМ????777
Ссылки
Весь проект в openSource. Посему вот основные ссылки по проекту:
- https://github.com/radiolok/RelayComputer2 — репозиторий с принципиальными схемами и разводками печатных плат. Ссылочку на репозиторий прошивки платы памяти я добавлю позднее
- https://github.com/radiolok/RelayComputer2/blob/master/roadmap.md Отдельно отмечу эту страницу с дорожной картой проекта, на которой фиксируются ключевые изменения.
- https://hackaday.io/project/18599-brainfuck-relay-computer на этой страничке я публикую подробные отчеты о том что было сделано. По набору критической массы они будут превращаться в статью на GT.
- https://github.com/radiolok/bfutils компилятор и эмулятор.
Комментарии (80)
nckma
01.04.2017 10:33+7Вашу бы энергию, да направить в мирное русло!
25080205
01.04.2017 11:03Я надеюсь, это первоапрельская шутка?
А вообще была идея — реализовать простенький процессор отдельными транзисторами.Причем каждый логический элемент снабжен светодиодиками, все это на вертикальных рамах можно выставить напоказ. В итоге получаем визуализацию протекающих процессов, при том вполне сносное быстродействие для того, чтобы что-то продемонстрировать. По расчетам выходило достаточно компактное (всего несколько квадратных метров плотного монтажа, да :-)) устройство с приемлемой стоимостью примерно как фордфокус :-)radiolok
01.04.2017 11:11+7Я надеюсь, это первоапрельская шутка?
Если вы про мой компьютер, то конечно это первоапрельская шутка с 8 годами предварительной подготовки и освоением СГ на уровне Marvel :-)
Если честно, для меня было удивительным однажды услышать фразу «Я думал ты пошутил» насчет моего релейного контроллера автополива
А вообще была идея — реализовать простенький процессор отдельными транзисторами.
Было25080205
01.04.2017 11:19Я любитель истории и немного в курсе про релейные и ламповые машины, появлявшиеся на заре вычтехники… Они часто упирались в надежность релюшки — безупречная работа многих тысяч оных, фактически, весьма реалистично имитировала тест по наработке на отказ. Хоть одна из многих тысяч окажется «паршивой овцой», а за ней еще и… Оттого, если это НЕ шутка — вдвойне интересно посмотреть, как оно будет работать.
radiolok
01.04.2017 11:28+3Здесь меня утешает повышенная надежность герконовых реле при номинальных условиях эксплуатации — если не брать в расчет сами контакты, в них нет подвижных частей. Хотя основная причина отказа как раз обгоревшие контакты. К сожалению не знаю какой газ находится внутри моих герконов — инертный, или просто воздух.
Все релюшки будут тестироваться на исправность, плюс будут проверяться на скорость срабатывания.Andy_ry
05.04.2017 18:21В конце 80-х занимался автоматизированными системами контроля. В основном платы автоматики представляли собой поля герконовых реле РЭС 55. Надёжность невысокая сразу скажу. Сначала постукивали корпус реле отвёрткой (чтобы контакты отлипли). Потом, когда корпус оказывался весь избит, меняли реле. Пачками. Так что делайте выводы. Имхо если уж и изобретать велосипед (собственный процессор), то уж на ПЛИС. Да и из практических соображений полезнее — может пригодится в реальной жизни.
Dovgaluk
06.04.2017 08:44По идее, от подгорания (окисления и т.п.) контактов помогает дублирующие ключи, соединённые параллельно.
А вот с «залипанием» уже как-то сложнее.
Ministor
05.04.2017 21:11Причем каждый логический элемент снабжен светодиодиками
Напомнило как лейтенант Рипли пришла вВычислительный Зал БЭСМ-2Командный отсек и спрашивала Матьо конце светаКаковы её шансы. Мать, в свою очередь, ехидно мигая этими вашими светодиодиками, которые занимали чуть более, чем всю стену, уклончиво отвечала что Недостаточно информации.
Arcanum7
01.04.2017 13:02+1Хоть я тут никто, ответсвеннно заявляю — это не первоапрельская шутка.
Артём — лови +!
APLe
01.04.2017 13:24+5Серьёзно!
Выскажу сходу пришедшие мысли:
1). По поводу реле: можно пройтись по форумам типа «Радиокот»: недостающие 5в реле оптом, тем более на такое интересное дело, могут отдать по несколько рублей за штуку.
2). «Вывод текущего значения регистров», возможно, проще сделать на мелкой логике? Тем более, что это ещё и проблему выгорания катодов при динамической индикации снимает. Кстати, тогда можно ещё и избежать использование микросхем, обойдясь реле. Только не искать готовые объявления, а самому подавать, в разделе «куплю».
2а). Можете ещё попробовать связаться с этим человеком: деталей у него много, и в проектах, подобных вашему, он часто заинтересован.
3). Конечно, использование микросхем памяти очень-очень сильно снижает пафос устройства, :-). Когда я мечтал когда-нибудь сделать что-нибудь подобное, то обычно думал о блоках ферритовой памяти – правда, подходящий блок будет стоить несколько тысяч рублей, и придётся делать довольно сложную обвязку.
4). Если эта статья – не шутка, то публиковать её 1 апреля было ОЧЕНЬ плохой идеей, ;-).
APLe
01.04.2017 13:28+4Чёрт. 2 минуты на редактирование – это мало, полусекунды не хватило. Сообщение должно было выглядеть так:
1). По поводу реле: можно пройтись по форумам типа «Радиокот»: недостающие 5в реле оптом, тем более на такое интересное дело, могут отдать по несколько рублей за штуку. Только лучше не искать готовые объявления, а самому подавать, в разделе «куплю».
1а). Можете ещё попробовать связаться с этим человеком: деталей у него много, и в проектах, подобных вашему, он часто заинтересован.
2). «Вывод текущего значения регистров», возможно, проще сделать на мелкой логике? Тем более, что это ещё и проблему выгорания катодов при динамической индикации снимает. Кстати, тогда можно ещё и избежать использование микросхем, обойдясь реле.
2а). *уточнил* А, нет, это хорошо получится на неоновых ИН-14. Впрочем, они и смотреться будут лучше.
3). Конечно, использование микросхем памяти очень-очень сильно снижает пафос устройства, :-). Когда я мечтал когда-нибудь сделать что-нибудь подобное, то обычно думал о блоках ферритовой памяти – правда, подходящий блок будет стоить несколько тысяч рублей, и придётся делать довольно сложную обвязку.
4). Если эта статья – не шутка, то публиковать её 1 апреля было ОЧЕНЬ плохой идеей, ;-).GreyPhantom
01.04.2017 16:03использование микросхем памяти очень-очень сильно снижает пафос устройства,
Для полного пафоса, наверное, нужно блок памяти тоже на реле делать?APLe
01.04.2017 16:45+3Память на реле – это хорошо, но слишком объёмно. Поэтому ферриты и предложил.
Кстати, я тут подумал, что не обвязку делать не обязательно, можно взять готовый модуль типа такого
Заголовок спойлераradiolok
01.04.2017 18:09+1Эти модули в комплекте с драйвером и селектором адреса стоят бешенных денег. Но если мне такой попадется, то я его заиспользую. Тот что на картинке ниже вероятно никогда не будет запущен — уж больно много из обвязки к нему пилить (я нашел все схемы). Хотя…
APLe
01.04.2017 20:02+2На самом деле, они стоят очень по разному – в зависимости от машины и убедительности ваших объяснений «честное слово, не на стенку, запустить хочу!».
Например, пару лет назад кто-то нашёл гору модулей от Саратов-2 – ~8кБ, если я не ошибаюсь. Без обвязки, правда. И продавались они тогда где-то по 3-4 тысячи рублей. Думаю, если на форуме Полигона Призраков описать свою задачу, показать наработки (особенно – если хоть что-нибудь из них уже будет готово «в железе») – можно купить хороший иностранный модуль с обвязкой примерно за такие же деньги.
APLe
08.04.2017 02:38+2Я тут вспомнил ваш комментарий и подумал, что имеет смысл уточнить.
1). Абсолютное большинство модулей ферритовой памяти покупаются в коллекции, не для подключения.
2). Поэтому на цену влияет их редкость и внешняя красота.
3). Конкретно в России в цене детали от отечественных компьютеров, иностранные достаточно дешевы (не относится к сверхценным и легко транспортируемым вещам, но там другой разговор).
4). Иностранные модули с драйвером не выглядят интереснее модулей без драйверов (в среднем, я бы сказал, даже скучнее). Также, насколько я понимаю, они не более редкие и (если не гоняться за PDP-совместимыми) не более ценные «за бренд».
5). В сумме, модули с драйвером, в среднем, стоит и ценится не больше имеющегося у вас модуля без драйвера.
6). И, больше того, у вас есть шанс обменять ваш модуль без драйвера на аналогичного размера модуль с драйвером, возможно, даже без доплаты с вашей стороны.radiolok
09.04.2017 22:31Потому я и купил свой модуль памяти за жалкие 300 деревянных рублей, ибо он страшно непрезентабельный — самих колец не видно :) Найти бы родной блок управления для них, да все никак. (Впрочем, я не особо то и ищу :D )
А так да, согласен, было бы желание, а модуль с драйвером найдется. Пока неспешно ищу, а ежель попадется, буду думать.
/me пошел дальше паять плату памяти
radiolok
01.04.2017 18:084 реле на 1 бит — это перебор. для 256 байт потребуется больше 8 тысяч релюх.
Вот когда на 27-вольтовых реле решусь запилить ПЛК (сердцем ПЛК раньше являлись процессоры с 1-битовым АЛУ), тогда применю 4-х сотенный запас маленьких СМДшных релюшек :)wormball
01.04.2017 21:07+1> 4 реле на 1 бит — это перебор.
Конечно, перебор. Можно использовать бистабильные реле — тогда будет 1 реле на бит. Заодно и энергонезависимая память.radiolok
01.04.2017 21:12Что для обычного, что в бистабильного реле для хранения информации будет достаточно одного реле.
Остальные реле являются обвязкой к нему. И серьезно уменьшить их количество не выйдет.wormball
01.04.2017 21:15+1Отчего это? Делаем строки со столбцами — тогда количество обвязки будет пропорционально квадратному корню из объёма памяти.
radiolok
01.04.2017 21:41В этом случае да, получится, согласен.
Правда от того что для организации 256 байт ОЗУ вместо 8 тысяч реле мне надо всего лишь 2 с небольшим тысячи мне легче не становится :)
radiolok
01.04.2017 18:05+11) да, все варианты хороши, за контакт — отдельное спасибо — напишу.
2) Вот либо мелкая логика и дешифратор 4bit-ToHex, либо сдвиговые регистры и отдельные МК.
2а) ИН-ки не умеют отображать в HEX (или я что-то про них не знаю). Собствено вся сложность из-за HEX. готовых 16-катодных ИНок я не знаю, а гнать в семисегментник — нужен дешифратор.
3) А по поводу ферритовой памяти… их есть у меня:
модуль памяти на 8К слов по 17 бит каждый (16 данные плюс один на контроль четности).
HP 5060-8331, устанавливался в компьютеры HP 2100A. Но к нему нужно пару плат драйвера и селектора адреса. И их либо на транзисторах, что проще, либо на лампах, что в моем случае каноничнее.APLe
01.04.2017 20:12+22а). Ага, придётся в восьмеричной отображать, это +1 лампа на 12-бит регистр, или +1 лампа и +1 неонка старшего разряда на 16-битный. Стоит оно того или нет – вам виднее, у меня соображения крайне поверхностные.
3). Самостоятельно сделать память на лампах – это, конечно, было бы идеально. Но, судя по всему, что я слышал о ферритовой памяти, задача это не из лёгких – лично я точно не возьмусь, но я – совсем не электронщик.
Я имел в виду взять карту «память + драйвер + контроллер шины» – такие точно были, у меня в Плюримате стоят, например.
Только, возможно, родной контроллер шины не использовать, подключаться напрямую.radiolok
01.04.2017 21:482а).
Ага, придётся в восьмеричной отображать....
Восьмеричное отображение интересная мысль… Но декодер на диодах и реле на один элемент будет существенной схемой. И отображение чисел в OCT имхо неудобно.
3)О да, вот схема обвязки для моей платы памяти:
СхемаDovgaluk
06.04.2017 08:47Кстати, в материалах для БК 0010 любили именно восьмеричную систему.
Видимо, это ещё с PDP пошло.alsii
06.04.2017 12:19+2В системе команд PDP-11 значащие поля 16 разрядной команды были как раз трехбитовые, а "лишний" старший разряд отвечал за байтовость/словность операции. Так что восьмеричная система там была очень удобна. Например 010102 (0.001.000.001.000.010) = MOV R1, R2 и т.д. Код легко читался и при некотором опыте можно было писать прямо с консоли в восьмеричной системе.
Кстати система команд очень проста и совершенно ортогональна. Если бы я был достаточно безумен, чтобы повторить описанный в статье эксперимент, я бы наверно именно ее выбрал для реализации :-)
DEM_dwg
02.04.2017 06:52+2Привет!
Не знаю поможет ли вам это, но у меня есть один долгий проект.
Это аналог ферромагнитных часов представленных на этом видео.
olartamonov
Hint: однорядная пара PLS-PBS — очень так себе разъём для модульной конструкции, так как качается в поперечном направлении. Дёшево и сердито получается двухрядная пара PLD-PBD, для которой плата изготавливается толщиной 1,8 мм и вставляется между ногами PLD.
radiolok
Думал о таком варианте. В итоге остановился на однорядных с горизонтальными канавочными направляющими.