Строим декоративный транзисторный компьютер — шаг 1
Похожая задача интересовала и меня последние 3 года — но от изначальной идеи строить на транзисторах я не отказался, и сейчас могу рассказать свои соображения и показать текущие наработки, а также — хочу спросить вашего мнения о том, каким на ваш взгляд должен быть _серийный_ транзисторный декоративный компьютер. Но сразу нужно заметить, что работы впереди еще на пару лет 🙂
Главный вопрос — зачем все это нужно, если есть FPGA и всякие Raspberry Pi? Ответ простой: 1) Мне интересно этим заниматься в свободное время и 2) Декоративный компьютер — он как декоративные домашние животные: мопс не отгрызет ногу грабителю, а персидский котик не победит в бою метрокрысу. Но с ними интересно играть и показывать гостям — даже если в области вычислений, охраны и охоты они сильно уступают «боевым» аналогам.
Подстановка задачи и архитектура
Какие будут у нас требования к декоративному компьютеру?
Взаимодействие с пользователем: Классическая реализация — это клавиатура + вывод на телевизор или VGA-монитор. Сделать удобную «свою» клавиатуру слишком сложно — нужно использовать стандартные PS/2 или USB. PS/2 клавиатуры уже редкость — а USB в транзисторном компьютере поддержать — будет затруднительно, без использования грязных хаков (вроде микроконтроллера).
Вероятно, оптимальным и простым решением может быть терминальный интерфейс — когда компьютер общается с внешним миром через последовательный порт (RS232), таким же образом можно загружать программы. Т.е. в простейшем случае транзисторный компьютер подключается к настольному компьютеру (или специализированному терминалу) через USB<>COM адаптер, и в любой программе-терминале (например Putty) можно с ним работать.
Также, нужна и возможность подключать внешние устройства через GPIO-пины.
Последовательный или параллельный ALU? 8 или 16 бит?: Поскольку количество транзисторов очень ограничено (
И работает это очень резво, на осциллограмме — 100нс/деление, фронты/задержки порядка 10нс:
Также, подбирая сопротивление резистора от базы к земле — можно управлять передаточной характеристикой логики, чтобы пороговое напряжение было примерно как у CMOS, около 3.3/2 = 1.65В. Такое изменение помимо помехоустойчивости даст еще одно важное преимущество — фронты цифрового сигнала будут становится более резкими. Также, если электричество нам экономить не нужно, мы можем выкинуть «верхний» транзистор, и заменить его резистором. Схема получается такая:
А передаточная характеристика:
3 цветные линии — это симуляция при разной температуре (20, 40 и 60 градусов), параметры биполярных транзисторов ощутимо плывут с температурой, и это обязательно нужно учитывать в более сложных схемах.
Более сложная логика
T-триггер — Т-триггер по тактовому сигналу изменяет своё состояние на противоположное. Может использоваться для построения параллельного счетчика инструкций, но использоваться вероятно не будет т.к. все будет работать последовательно. Принцип работы — моностабильный мультивибратор, по короткому отрицательному синхроимпульсу — переключается в противоположное состояние за счет конденсаторов параллельно резисторам R8 и R9.
Схема была реализована «в железе», вместе с инверторами. Инверторы показали ожидаемую скорость (т.е.
10-20нс фронты). Не пугайтесь качеству пайки — плата пережила множество экспериментов и вариантов транзисторов/параметров:
Полный сумматор — один из наиболее важных и сложных цифровых блоков. Каноническая реализация КМОП полного сумматора — требует 28 транзисторов:
Современные реализации с использованием transmission gate и различных хитростей — требуют 8-11 транзисторов с более жесткими требованиями к выбору транзисторов, но напрямую из дискретных транзисторов эти схемы не реализовать — нужны 4-х выводные транзисторы (а они редкость), и из-за деградации уровня логической 1 нужно высокое напряжение питания (т.к. пороговое напряжение доступных дискретных полевых транзисторов — 1.5-2 вольта против 0.5В у интегральных транзисторов).
Самый минимум, который приходилось видеть — из 6 транзисторов, с использованием конденсаторов (но надежность вызывает вопросы). Известные реализации на биполярных транзисторах — также требуют 22 транзистора.
Но можно ли обойтись всего 4 транзисторами? Я немного пораскинул мозгами, и получилось следующее:
Схему для симуляции в LTspice IV можно скачать тут.
Принцип работы следующий: т.к. порядок слагаемых не имеет значения, мы их просто аналогово смешиваем, и точно подбирая пороговое напряжение сдвоенного инвертора — сразу получаем перенос. Затем вычитая на транзисторе Q3 из аналоговой суммы перенос — получаем сумму. Конечно, все это требует точного подбора уровней срабатывания, и симуляции с учетом температуры. Диоды Шоттки — для предотвращения входа транзисторов в глубокое насыщение, что резко снижает скорость работы.
Использование полевых транзисторов возможно, и обеспечивает лучшую температурную стабильность, главное чтобы у них было достаточно низкое пороговое напряжение.
Сдвиговой регистр — самая ответственная часть этого транзисторного компьютера. Классическая реализация на синхронных D-триггерах — требует чудовищного количества транзисторов на бит.
У меня получилось уместиться в 2 транзистора на бит, со следующими особенностями:
1) Регистры — основаны на конденсаторах, и если их «не двигать» — то со временем данные пропадут. Но с полевым транзистором время хранения достаточно большое.
2) Передача данных на следующую ступень — биполярным транзистором. В половине случаев он работает в обратном, нестандартном режиме — пробивное напряжение намного меньше (но 3.3В должно держать), и коэффициент усиления намного ниже прямого включения (но я надеюсь будет достаточно).
3) Каждая следующая ступень — инвертирует сигнал, это не проблема когда нужен только последовательный доступ (например в случае регистров процессора). Если же будет нужен не инвертированный параллельный выход — нужно будет добавить 8 инверторов (т.е. 16-и битный сдвиговой регистр потребует 40 транзисторов, а не 32).
4) Остается проблема с насыщением биполярного транзистора.
График работы:
С этими компактными реализациями цифровых схем — уложиться в 1000 транзисторов думаю будет вполне реально.
Дело осталось за малым — все это реализовать. Продолжения стоит ждать через 0.5-2 года
А теперь — несколько вопросов к читателям: Какие варианты кажутся вам приемлемыми?
Британский инженер построил 500-килограммовый процессор из дискретных элементов. Этапы работы и интервью с создателем
Megaprocessor — это 16-битный процессор с четырьмя регистрами общего назначения. На отдельных панелях размещены схемы различного назначения, включая память, арифметический блок, ввод/вывод и другие. В системе используется 16-разрядный блок АЛУ и 16-разрядный сумматор. Megaprocessor оснащен 10 000 светодиодов, мигание которых демонстрирует каждый этап процесса вычислений, показывая направление движение данных по схеме. Объем памяти составляет 256 байт. Блок памяти включает 27000 транзисторов. Общее число транзисторов в системе превышает 40 тысяч. Масса процессора — 500 кг. Процессор работает на частоте 20 килогерц.
Зачем все это создавалось? Автор проекта, инженер-электронщик из Великобритании Джеймс Ньюман хотел понять, как работает современный процессор. Он решил, что лучшим способом получить максимальное количество информации о принципах работы транзисторов и процессора будет создание процессора своими силами. По его словам, процесс изучения вышел из-под контроля, и превратился в ежедневную работу.
«Компьютеры непрозрачны. Смотря на них, нельзя понять, как они работают. Что я хотел сделать — это забраться внутрь и понять, что происходит. Проблема в том, что это невозможно осуществить с процессорами обычного размера. Но мы можем построить большой процессор своими руками — и тогда будет понятно, что происходит внутри. Для отображения потоков данных стоит добавить еще и светодиоды — что и было сделано», — говорит Джеймс Ньюман. Теперь за работой Megaprocessor можно наблюдать в режиме реального времени, и любой человек может понять, из каких элементов состоит процессор и как работает каждый блок.
Megaprocessor занимает значительную часть гостиной в доме инженера, причиняя ему известные неудобства.
Для демонстрации вычислительных возможностей процессора инженер решил выбрать игру тетрис. Элементы игры отображаются на большом светодиодном табло с разрешением 32*64 светодиода. Во время игры в режиме реального времени видно все, что происходит внутри процессора.
«Ваш компьютер может быть в миллион раз быстрее той системы, что я построил, но она намного привлекательнее… Я не думаю, что смогу когда-нибудь продать свой проект, но мне хочется, чтобы Megaprocessor был представлен в качестве экспоната в музее или образовательном учреждении», — говорит Ньюман.
Megaprocessor состоит из большого числа элементов, которые собираются в блоки. Отдельные блоки размещаются на стендах. Высота стенда — 2 метра. Ширина — от 1,2 до 1,6 метров. На каждом стенде монтируется небольшое количество модулей — от 2 до 4. Стенд служит как местом для размещения модулей, так и их защитой. Каждый модуль выполняет определенный набор функций. Например, есть модуль АЛУ, декодер и другие. Модули составляются из отдельных плат.
Рамы создавались из экструдированного алюминия. На всех стендах есть подробное описание функций, выполняемых определенным вычислительным блоком. Вот блок регистров специального назначения:
В каркасе есть каналы для проводов питания. Элементы питания закрываются металлической защитой, чтобы ничего не двигалось в случае передвижения стенда:
У каждой сервисной платы две функции. Первая — соединение и мониторинг линий питания. Вторая — обеспечение доступа к зажимам питания. Всего в системе 7 стендов.
Megaprocessor разделен на ряд модулей. Вот модуль управляющего автомата:
Чтобы ничего не перепутать, позади тоже есть распечатка всей схемы.
C самого начала я решил, что в проекте будут использоваться печатные платы. Без них создать нечто сложное было бы невозможно, ведь только соединений в системе свыше 100 000. Большинство средств проекта ушло на платы. Изначально мне хотелось сделать большие платы, но это оказалось безумно сложно, поэтому позже я решил разделить все на мелкие платы, что и было сделано. Для проектирования я использовал CadSoft Eagle.
Проверки выполнялись постоянно, на каждом этапе проекта:
Каждая плата тестировалась перед установкой в модуль;
Каждый модуль тестировался по завершению работы над ним;
Каждый стенд тестировался после окончания работ по установке модулей;
После подключения каждого нового стенда тестировалась вся система.
Стоимость различных элементов конструкции:
Окраска и печать £900
Крепежи, фанера и т.п. £500
Затраты на электронные компоненты:
Чипы (для отладки) £850
«Остальное железо» £1100
Контактные терминалы 7,700
Контакты с пайкой 272,300
Одножильный провод 1,500 м
20-контактный шлейф 420 м
Общая длина проводников 9.9 км
Платы, использованные в проекте
Транзисторы, установленные неправильно
Для того, чтобы облегчить свою задачу, Ньюман создал небольшие платы с максимумом обозначений для элементов. На каждой плате указывалось значение резистора и способ установки тразистора.
Автор проекта потратил часы на обнаружение проблемы. Часто один и тот же неправильно установленный транзистор он осматривал несколько раз, не замечая его.
Подключение при помощи коннекторов — простая задача. Но если таких соединений около 500, есть высокая вероятность ошибки. И Джеймс ошибался несколько раз.
На фото проблему можно увидеть сразу — кабель перекосился, и несколько контактов оказались незадействованными. Но обнаружить такую ошибку в массе проводов и соединений очень непросто. Ньюман думал, что проблема в одном из модулей, и потратил огромное количество времени на проверку модулей. А надо было проверить кабель.
Есть и такой тип соединения, как IDC (Insulation Displacement Connector). Между острыми зубьями продевается кабель, чья изоляция прорезается при вставке, и кабель соединяется с зубьями. Все просто. В одном из случаев «зуб» контакта изогнулся и касался соседнего, замкнув схему. Найти проблему было очень непросто.
Неправильная установка соединительных кабелей — еще одна проблема. Причем обнаруживалась она чаще всего уже после подключения такими кабелями отдельных модулей или стендов. Джеймс иногда ошибался в позиционировании коннектора на кабелях. Естественно, схема не работала. И снова шли часы поисков, прозвонки схем, проверки элементов. На фотографии показан правильно обжатый кабель с коннектором и проблемный кабель (вверху).
А вот еще одна частая причина неработающей схемы — недовставлнный кабель, не обеспечивающий должного контакта.
Замыкание на корпус
Здесь две платы, одна из которых работала не так, как нужно. Как оказалось, причина была в том, что Джеймс отверткой повредил плату и её замкнуло на крепеж, а тот — на весь стенд. Заметить такое невооруженным глазом практически невозможно.
Иногда при пайке возникали характерные проблемы — замыкание контактов мостиком из припоя. На фотографии увеличенное в несколько раз изображение. Заметить такое сходу очень сложно — нужно детально осматривать все элементы на плате.
Джеймс по профессии схемотехник, и пайкой занимается он с малых лет. На фото выше причина — случайное падение капли олова на схему. Это был единичный случай за все время, но возни с ним было много — найти неправильную пайку оказалось непросто. Джеймс изначально начал проверять все соединения платы и только затем решил осмотреть место пайки.
Еще одна схожая проблема, найти ее удалось только при помощи увеличительного стекла — мостик, образовавшийся при пайке имеет толщину человеческого волоса.
А здесь Джеймс по какой-то причине просто забыл припаять контакты. Целый ряд ножек транзисторов оказался «голым», ни к чему не присоединенным. Эту проблему удалось быстро обнаружить и решить.
Это была одна из наиболее серьезных проблем. Тразисторов в схеме много тысяч. И выход только одного транзистора из строя означает нерабочий Megaprocessor. Во избежание проблемы Джеймс проверял каждый транзистор до пайки. Потом — после пайки. Потом — все транзисторы на схеме. И все равно оказывалось, что какие-то платы не работают, и виной тому — дефектный транзистор. Причиной повреждения обычно становился электростатический разряд. Транзисторы типа 2N7000 очень чувствительны к такому типу воздействия.
Причем если плата вчера работала, то сегодня она могла уже не работать. Почему? Причина оказалась необычной. Это… пылесос по имени Генри.
Их было огромное количество. Ньюман работал над проектом пять лет, и конечно, почти каждый день что-то случалось. Ошибки, технические неисправности, короткие замыкания, некорректное моделирование и многое другое — это только малая толика проблем. Описать все это в рамках одной статьи не представляется возможным. Лучше почитать то, что пишет сам Джеймс о проблемах в ходе реализации проекта.
Интервью с Джеймсом Ньюманом
Я не мог просто написать об этом грандиозном проекте, не задав несколько вопросов автору. Джеймс сразу согласился рассказать немного о своем проекте для читателей Geektimes.
Как вам пришла в голову идея создать этот проект?
Это случилось пять лет назад. Идея возникла под влиянием двух факторов. Я проводил эксперименты с транзисторами, для того, чтобы понять в деталях, как они работают. Кроме того, на моей работе коллеги стали обсуждать возможность построения компьютерной системы из дискретных логических схем. И мне захотелось создать компьютер не из отдельных микросхем, а из дискретных транзисторов. Мне захотелось создать систему, внутри которой мог бы уместиться человек, наблюдающий за тем, как все это работает. На что это могло бы быть похоже?
Сколько времени прошло между появлением идеи и началом реализации проекта?
Не слишком много. Я начал проводить подготовительную работу к реализации всего проекта создания компьютерной системы почти сразу же. Около года ушло на эту работу и эксперименты.
А насколько велико расхождение между начальным планом и фактическим сроком реализации проекта?
Мне казалось, что я смогу осуществить свою задумку за год. Но на проект ушло почти пять лет. Так случилось потому, что уже начав действовать, я решил построить нечто более грандиозное, чем планировал.
Какие вы можете назвать большие или мелкие проблемы, возникавшие во время работы? Какие из них были критичными?
Главная проблема, которая остановила работу на некоторое время — разработка мультиплексора. Я некоторое время работал над решением вопроса эффекта паразитного диода, который актуален для МОП-тразисторов (Подавляющее большинство приборов по МОП технологии выполняется так, что исток транзистора подключен к полупроводниковой «подложке» структуры. При этом образуется так называемый паразитный диод между истоком и стоком. Избавление от этого диода сопряжено со значительными технологическими трудностями, поэтому с ним научились мириться и даже использовать в схемотехнических решениях. — Прим. ред.). В результате я разработал платы, которые снимали проблему, но они были большего размера, чем я рассчитывал.
Еще одна проблема — сложность создания стоек, их конструкция оказалась слишком сложной. У меня не слишком хорошее пространственное воображение.
Ну и кроме этого постоянно приходилось решать мелкие вопросы, их было просто огромное количество как в ходе проектирования, так и в ходе реализации намеченного плана.
Если бы вы знали обо всех этих проблемах, стали бы вы работать над проектом?
Я подозревал, что примерно так все и будет. Это бы меня не остановило. Изначально я хотел просто знать, как все работает. Но если бы я знал, насколько большим получится процессор, и сколько денег уйдет на проект, я бы не стал этим заниматься. Megaprocessor слишком велик для моего дома, и я хочу найти для него другой дом.
У вас были мысли прекратить работу уже в ходе реализации проекта?
Было несколько случаев, когда мой энтузиазм иссякал, что означало замедление работы. В то же самое время я не позволял себе расслабляться полностью. Каждый день в таких случаях я заставлял себя что-нибудь сделать, неважно, насколько незначительной была эта задача. Я говорил себе: «Слона можно сьесть, нужно лишь откусывать кусочек за кусочком».
Ваш проект стал очень известным. Есть ли коммерческие предложения? Может быть вы уже приняли решение отдать Megaprocessor в какой-нибудь музей или университет?
Нет коммерческим предложениям! Я не думаю, что смог бы возместить затраченные средства, и это никогда не было целью. Я бы хотел отдать Megaprocessor в музей или другую схожую организацию. Переговоры уже ведутся.
Нужен ли системе какой-либо специальный уход?
Нет, ничего такого не требуется. Нужна лишь осторожность. Особенно это касается статического электричества — небольшой заряд может вывести что-то из строя.
Как вы вводите данные в систему?
Сейчас я использую модифицированную версию «Venom Arcade Stick». Сначала я планировал использовать последовательный интерфейс, позволивший бы использовать ПК. Интерфейс я разработал, изготовил, но еще не тестировал.
Какое энергопотребление у системы?
Я думаю, около 300 Вт. Большая часть уходит на светодиоды.
Ломалось ли что-нибудь в системе уже после готовности Megaprocessor?
Единственная проблема, с которой я столкнулся — это более медленная работа системы, чем изначально планировалось. Как оказаллось, причина в неправильно выбранном номинале подтягивающих резисторов. Нужно было выбрать резисторы номиналом не 10k, а всего 470. Еще одно — это не проблема, а скорее, мое желание. Я хотел бы обеспечить возможность настройки яркости дисплея. Но сейчас об этом уже поздно думать.
В системе Megaprocessor многие десятки тысяч деталей. Какова вероятность того, что все будет работать без поломок в течение долгого времени?
Очень хороший вопрос. И пугающий. Я думаю, что если не двигать и не трогать электронные компоненты всю систему — все будет хорошо. Но проблема в том, что Megaprocessor размещается в моей гостиной, и мне приходится двигать стенды. Каждый раз, когда я этим занимаюсь, есть вероятность повреждения соединения. Вероятность небольшая. Может быть, 10%. В прошлую субботу я обнаружил неисправность на одной из плат. Случались проблемы при перемещении стендов и раньше. Поэтому я посчитал, что один раз из десяти во время движения стендов возникает неисправность. Если я погружу все в машину и установлю систему в новом доме, уверен, получу несколько неисправностей. Порядка десяти.
У вас есть какие-то задумки по новым проектам?
Первое, что я должен сделать — привести в порядок дом и сад. Они были заброшены на несколько лет. После этого я посмотрю, чем бы еще заняться.
Что вы можете посоветовать людям, которые планируют сделать что-то подобное?
Практический совет: работая над проектом такого масштаба, вы должны иметь четкое представление о том, что вы делаете. Вы должны быть профессионалом в своей области и профессионально относиться к каждому этапу. Разрабатывая что-то, вы должны быть уверены, что все созданные элементы будут совместимы друг с другом на этапе сборки.
Абстрактный совет: начать работу легко, сложно закончить. Почему вы хотите этим заняться? Как только вы начнете что-то делать, вы позже поймете, что это можно сделать лучше, и вы снова начнете выполнять этот этап. И снова, и снова. Два года назад я понял, что если буду все время все переделывать, то ничего не закончу. И я решил останавливаться на этапе с оценкой «неплохо», поскольку этот этап в большинстве случаев соответствует планам. Я знаю, что в проекте много ошибок и много того, что можно было сделать лучше. Но я все же закончил свой проект, и я счастлив.