DekatronPC
Описание
Компьютер на базе вакуумных и газоразрядных ламп, процессор которого не содержит полупроводниковых элементов.
Технические характеристики (проектные)
- Архитектура - с раздельной памятью данных и кода.
- Объем памяти программ - 1МиБ, из них:
- Ферритовая память - 1.5киБ
- Внешняя память - до 1МиБ
- Объем памяти данных - 29.29КиБ(30000ячеек данных). из них:
- Ферритовая память - 1 Киб
- Внешняя память (накопитель на магнитной ленте) - до 29.29КиБ
- Разрядность:
- Шины данных - 8 бит
- Шина адреса данных - 15 бит
- Шина адреса программ - 20 бит
- Тактовая частота - 1МГц
- Быстродействие - 1млн операций в секунду
- Количество ламп - 1000шт
- Потребляемая мощность 10кВт
Подпроекты
- Ламповая логика - Проектирование быстродействующих ламповых логических элементов
- Испытатель электронных ламп - Проект современного портативного испытателя вакуумных и газоразряных ламп
- DekatronPC эмулятор - Verilog-модель лампового компьютера на ПЛИС
Архитектура
Декатрон — это многоэлектродная газоразрядная лампа, предназначенная для реверсивного счета импульсов. В центре находится диск анода, а вокруг него расположены тридцать электродов. Десяток катодов и две группы подкатодов — по два подкатода между каждым катодом. После подачи напряжения на декатрон между анодом и одним из катодов загорается тлеющий разряд. Подавая импульсы определенной последовательности на подкатоды и соседний катод, мы можем перемещать разряд между катодами, обеспечивая операцию инкремента или декремента. Да эта лампа просто создана для языка Brainfuck!
На базе декатрона мы можем создать простой реверсивный десятичный счетчик. Соединим нужное число таких счетчиков последовательно и получим многоразрядный счетчик, который, например, на базе трех декатронов сможет считать от 0 до 999.
Один такой счетчик на базе шести декатронов будет определять номер текущей исполняемой инструкции. В дополнение к нему нам нужен счетчик глубины вложенности циклов — сумматора в будущем компьютере нет, а значит, начало текущего цикла придется искать вручную, банально перематывая счетчик инструкции назад до тех пор, пока начало нашего цикла не будет найдено. Счетчик вложенных циклов поможет корректно искать нужное начало, даже если внутри нашего цикла множество вложенных. Счетчика от 0 до 999 будет более чем достаточно: в программах на Brainfuck, написанных людьми, даже больше 20–30 уровней вложенности циклов — редкость.
Третий счетчик от 0 до 29 999 будет определять номер текущей ячейки данных. Так как у нас чистый Brainfuck, то и число ячеек в точности соответствует исходной спецификации. Декатронный счетчик можно сбросить при любых значениях.
По адресу этого счетчика происходит выборка данных из ОЗУ. Данные помещаются в четвертый счетчик, который умеет считать от 0 до 255. То есть мы загружаем в декатрон наше старое значение, делаем инкремент или декремент и выгружаем данные обратно в память.
Система команд
Одно из требований к ламповому компьютеру — чтобы инструкции в нем в точности соответствовали языку Brainfuck. Второе требование — 99% существующих восьмибитных программ на Brainfuck должны исполняться исключительно на ламповой логике. Оставшийся 1% банально может не умещаться в ОЗУ. Максимум того, что допускается использовать в аутентичной части машины, — это германиевые диоды, да и то лишь в схемах обвязки кубов памяти.
В итоге мы имеем:
- NOP — пустая инструкция, необходимая для выравнивания циклов внутри кеш-линеек;
- + и - — инкремент и декремент текущей ячейки данных;
- < и > — изменение номера текущей ячейки;
- [ и ] — начало и конец цикла;
- . и , — печать текущего символа в консоль и ввод из консоли.
Инструкция кодируется четырехбитным значением, а это значит, что остается еще семь свободных инструкций, которые можно использовать для управления машиной.
Например, инструкция HALT остановит машину при завершении работы программы. Еще две инструкции — LOAD и STORE — оптимизируют работу с памятью.
Допустим, у нас есть десять инструкций +, идущих подряд. Нам придется десять раз повторить следующий набор действий:
прочитать значение текущей ячейки и записать его в декатронный счетчик; выполнить операцию инкремента; записать новое значение текущей ячейки из счетчика в ОЗУ. По факту мы девять раз просто так будем делать загрузку-выгрузку. Проще явно сказать, что нужно сделать LOAD из памяти в счетчик и STORE обратно из счетчика в ОЗУ. Либо ламповая логика должна понимать, какая инструкция будет идти следом за текущей и выполнять LOAD и STORE неявно, не тратя в дальнейшем время на холостые загрузки-выгрузки.
С одной стороны, неявный LOAD/STORE позволит грузить в компьютер программы, написанные на Brainfuck вообще без модификаций. С другой стороны, усложняется логика выборки инструкции, так как необходимо читать на одну инструкцию вперед.
В итоге выбрал способ неявного Load и Store. За основу взят принцип data-lock.
- При исполнении инструкции + и - сначала проверяется флаг загрузки счетчика.
- Если флаг снят, значит в счетчик еще не загружено значение из текущей ячейки данных. Сначала необходимо выгрузить значение из ОЗУ в счетчик и только потом производить операцию + и -.
- Если флаг стоит, значит данные в счетчик уже загружены
- При исполнении инструкции < и > сначала проверяется флаг загрузки счетчика
- Если флаг снят. То счетчик свободен и можно изменять значение AP-счетчика
- Если флаг стоит, то счетчик занят, значит необходимо сначала сохранить значение из счетчика в ОЗУ и только потом менять значение AP-счетчика
- При исполнении инструкции , флаг не проверяется - значение из консоли заносится сразу в ОЗУ
- При исполнении инструкции . флаг проверяется - и значение в консоль печатается либо из ОЗУ либо из счетчика в зависимости от флага.
DekatronPC Challenge
Сейчас у меня собрано все железо, нужное для начала экспериментов. Впереди — долгий и интересный процесс проектирования и сборки будущей машины. В отличие от релейного компьютера с его монолитной конструкцией, здесь будет блочная. Тот или иной блок можно будет собрать за пару месяцев и продолжать спокойно заниматься другими делами.
Однако не стоит забывать о нормальном моделировании схемотехники будущей ЭВМ. Для начала в планах написать программный эмулятор, в котором виртуально реализована предполагаемая архитектура.
На втором этапе эту же самую архитектуру необходимо реализовать на языке VHDL или Verilog и запускать как в эмуляторе, так и на живой ПЛИС.
Третьим этапом будет воссоздание блоков в железе и их подключение к ПЛИС. Получается, что блоки можно будет использовать для реальных вычислений по ходу строительства компьютера. Потом, замещая один за другим эмулируемые блоки реальным железом, мы полностью избавимся от ПЛИС, и ламповый компьютер станет полностью самостоятельным. Проект будет считаться завершенным, когда от ПЛИС в системе не останется и следа.
Впереди много разноплановой работы: эксперименты с ламповой логикой и ферритовой памятью, создание реверсивных декатронных счетчиков... В общем, будет весело.
Часто-задаваемые вопросы и ответы
- Зачем?
- Затем.
- Почему brainfuck? Может быть лучше взять более практичный урезанный ассемблер?
- brainfuck - и есть урезанный ассемблер. Ламповая машина в любом случае будет в миллион раз медленнее современных компьютеров и проект является видом инженерного искусства. А раз так - то реализовывать надо наиболее безумный вариант. Тем более что декатрон - основа машины - позволяет реализовать brainfuck и ничего более.
- Питание?
- Каждый блок будет оснащен своим собственным источником накального напряжения. Основной источник накального - трансформаторы ТН60 и ТН61.
- Напряжения смещения а также напряжение питания декатронов - анодные трансформаторы ТА и ТПП подходящей мощности и напряжений. Все напряжения смещения будут оборудованы стабилизаторами выходного напряжения. ти напряжения подаются через пускатель по команде общего блока управления - после прогрева ламп.
- Основное анодное напряжение - некоторые блоки будут получать от собственных силовых трансформаторов типа ТС160, ТС170, ТС270 - это трансформаторы от ламповых телевизоров. а также от трансформаторов типа ТА подходящей мощности. Стабилизаторов напряжения на выходе не будет предусмотрено. Анодное на схему будет подаваться через пускатель по команде общего блока управления после подачи накального напряжения и прогрева ламп, подачи напряжений смещения, анодного декатронов.
- Предусмотрен общий стабилизатор напряжения на базе автотрансформатора. От него будут питаться все остальные блоки.
Общий прогресс
Видеоматериалы
Ссылки
- Статья на Xakep.ru