Горсть Реле. Часть 2. Регистрационный Файл

Прошло больше года с тех пор, как я начал писать о разработке компьютера на основе электромагнитных реле .

Сегодня я закончил работу над вторым модулем компьютера - регистровым файлом.



Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Теперь стало понятно, что компьютер будет состоять из 4 блоков: АЛУ , регистровый файл, блок управления, память и периферийный блок.

Блок регистров самый простой — каждый регистр имеет 8 реле для хранения битов, реле для сброса и несколько реле для подключения регистра к шине.



Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Но все же я сделал это первым АЛУ разобраться в построении логических цепей на реле.

Кроме того, это сразу вылилось в 8-битный калькулятор, который теперь иногда включают мои коллеги (компьютер недавно переехал ко мне на работу).

Как реле хранит данные? Обычно реле не используется для хранения данных, а лишь переключает сигналы.

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

При замыкании контактов это напряжение будет поддерживать реле во включенном состоянии:

Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Теперь, чтобы выключить это реле, нужно разорвать связь между источником питания и обмоткой.

Для этого используется дополнительное реле, отвечающее за сброс триггера:

Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Зачем вообще сбрасывать реле? Дело в том, что самый простой способ записать туда заданное значение — это сбросить старое и подать (или не подать) напряжение для сохранения нового состояния.

Поскольку весь регистр всегда сбрасывается, для всех его битов используется одно и то же реле сброса.

Контакты всех переключателей в реле, отвечающих за хранение данных, запараллелены.

Это сделано для повышения надежности – при выходе из строя одного контакта ток потечет через другой.

Компьютерная архитектура Изначально я планировал, что адресная шина компьютера будет 12-битной.

Таким образом вы легко сможете разделить все адресное пространство на несколько 8-битных групп и подключить к ним разные устройства.

В этом случае адресная арифметика упростится до 8-битной (почти как работа с сегментами памяти в 8086).

Поэтому в файле регистров было 2 типа регистров — 4 штуки 8-битных ГПР, 2 штуки «сегментных» регистров по 4 бита и 2 штуки смещений по 8 бит. При этом из «сегмента» и «смещений» можно было сформировать 2 полных адреса, поскольку регистры складывались в фиксированные пары, такие как HL, DE или BC в Z80. Но при этом любой из регистров мог использоваться как вход или выход АЛУ.

Изменения начались с того, что я «вдруг» сделал сегментные регистры 8-битными.

Принципиально архитектуру это не изменило (адресная шина осталась 12-битной), но предоставило больше возможностей для вычислений.

Тогда я прикинул, что даже простое суммирование 256 ячеек памяти займет несколько десятков минут. Поэтому я решил сузить адресную шину до 8 бит. Из-за этого система команд была значительно упрощена:

  1. Нет необходимости в отдельных командах для 12-битного приращения, 12-битной передачи, загрузки 12-битного значения.

  2. Команды перехода, вызова подпрограммы и загрузки 8-битного значения объединены в одну с небольшими отличиями.

    В качестве побочного эффекта команда загрузки значения теперь может выполняться условно.

  3. Команды памяти теперь имеют параметры с прямыми значениями адреса.

Благодаря всему этому схема модуля управления также стала проще.

Количество необходимых реле было значительно уменьшено.

В том числе и из-за того, что нет необходимости отдельно реализовывать счетчик команд (поскольку он переехал в модуль регистров в виде почти обычного регистра).

В результате получилось что-то похожее на режим Thumb процессора ARM, только еще проще — 8 регистров по 8 бит каждый.

Один регистр служит адресом возврата, а другой — счетчиком команд. Любой регистр может использоваться в качестве любого аргумента команды.

Единственным исключением является то, что только 4 из 8 регистров могут использоваться в качестве адреса для чтения (или записи) из памяти.

Имеется 3 шины, к которым подключены регистры — 2 для передачи данных (например, кода инструкции или операндов АЛУ) и одна для передачи адреса.

Дизайн Самым сложным (вернее, нудным) было сделать таблички с названиями регистров.

Последний раз заказывала лазерную гравировку.

Но используемые для этого устройства имеют очень маленькую рабочую площадь и моим планшетам этого оказалось недостаточно.

Поэтому я занялся фотолитографией.

Я потратил много времени на то, чтобы научиться наклеивать/распылять, экспонировать и проявлять фоторезист, пока не получил что-то приемлемое.

До идеала еще далеко, но это не последний блок в компьютере.



Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Тумблеры загрузки значений в регистры я в этот блок не встраивал.

Ведь модуль регистров можно сразу подключить к АЛУ и использовать его тумблеры.

Еще одной особенностью этого модуля является то, что он не имеет дополнительных светодиодов для отображения сигналов.

Все сохраненные данные можно наблюдать с помощью контрольных светодиодов, встроенных в реле.

Поэтому, чтобы снять дамп реестра, достаточно иметь камеру.



Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Сегодня у меня уже работают два блока будущего компьютера — регистровый файл и АЛУ.

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

Корпус для модуля управления практически готов, так что вскоре можно будет приступать к запуску схем, самостоятельно издающих тикающие звуки.

Что можно сделать лучше Благодаря тому, что я отказался от парных регистров, отпала необходимость в двойной шине данных.

Теперь он действительно нужен только в одном месте — при получении инструкций.

Все инструкции имеют размер 16 бит, поэтому для загрузки всего кода инструкций за один такт необходима 16-битная шина.

Адресную шину можно использовать для подключения второго аргумента к АЛУ.

За счет этого можно было бы сэкономить 8 реле в блоке регистров (и, возможно, еще пару в блоке управления).

Чтобы прикрепить таблички с подписью, я использовал отвертки с крестообразным шлицем, так как старая версия у меня закончилась.

Кто-нибудь знает, где можно достать латунные болты с прорезью? Последний раз я покупал их в магазине товаров для хобби в Хельсинки.

Но это довольно дорого, и в ближайшее время я туда больше не поеду.



Горсть реле.
</p><p>
 Часть 2. Регистрационный файл

Еще нам нужно как-то улучшить негативную маску, напечатанную на лазерном принтере.

Теперь поля, залитые черным цветом, стали немного прозрачными.

Поэтому на некоторых знаках из-за этого появлялись маленькие точки.

Кто-нибудь знает, как это победить? Бонус В следующем видео показан работающий прототип тактового генератора.

Скорее всего, я немного увеличу частоту, чтобы получить около 5 тиков в секунду.

Страница проекта на github: github.com/Довгалюк/Реле Теги: #реле #странные компьютеры #arm #z80 #8086 #Аномальное программирование

Вместе с данным постом часто просматривают: