http://habrahabr.ru/post/221583/
В
прошлый раз я кратко описал то, как создавался первый модуль моего (будущего) компьютера на электромагнитных реле – арифметико-логическое устройство. Сейчас я хочу немного рассказать о принципах работы этого АЛУ, а точнее, как устроено выполнение логических и арифметических операций.
Как работает электромагнитное реле
Электромагнитные реле состоят из обмотки, якоря и переключателей. При возникновении тока в обмотке, она притягивает к себе якорь, а тот переводит переключатели из одного состояния в другое. На картинке выше показано как выглядят реле, использованные в АЛУ, а на картинке ниже – назначение их контактов.
Эти реле имеют по 4 переключателя. Когда ток по обмотке не течет, переключатели соединяют между собой контакты 1-9, 2-10, 3-11 и 4-8. Если же на обмотку подать напряжение (в моем случае это 24В), то положение переключателей изменится на 5-9, 6-10, 7-11, 8-12.
Для того чтобы рисовать схемы компонентов компьютера, я использовал те же обозначения реле, что и в документации к
HPRC:
Здесь нарисован только один из проводников, подведенных к катушке, потому что второй всегда заземлен, а значит обозначать его на схеме нет смысла. Так как я использовал реле со светодиодными индикаторами включения, это однозначно определило то, какой контакт катушки используется как «+», а какой – как «–».
Двоичная логика в схемах на электромагнитных реле
В полупроводниковых логических схемах низкий уровень напряжения означает логический «0», а высокий – логическую «1». Например, в КМОП-схемах, заданный вход соединяется с «землей», если на него нужно подать логический «0».
В схемах на электромагнитных реле все несколько проще. Если мы принимаем за «1» уровень напряжения, включающий реле, то за «0» можно принять любое как напряжение, при котором реле выключается, так и отсутствие подключения вообще. Во втором случае реле также отключится, как и задумывалось. Таким образом, за «1» принимается напряжение питания (в моем случае это 24 В), а за «0» – отсутствие подключения к питающей цепи. Такой способ позволяет легко управлять сигналами с помощью подключения/отключения к проводникам источника питания.
Еще одно отличие электромагнитных реле от полупроводниковой логики – нагрузочная способность выходов. Она ограничена лишь мощностью блока питания, т.е. к любому выходу реле можно подключить неограниченное (в разумных пределах, конечно) число входов, что упрощает проектирование устройства.
Вычислительные блоки АЛУ
Принципы, по которым я строил АЛУ, в большинстве своем были заимствованы из
подробного описания HPRC. А этот компьютер, в свою очередь, частично основан на идеях Конрада Цузе образца 1941 года. В частности, оттуда и берет свое начало.
Сумматор
Используемый в моем АЛУ сумматор был придуман Конрадом Цузе для его машины
Z3, построенной в военной Германии. Такой сумматор состоит из 8 последовательно соединенных 1-битных сумматоров. На входе каждого из них два бита операндов, а также биты переноса и инвертированного переноса. На выход каждый 1-битный сумматор выдает результат вычислений, то есть сумму входных битов с учетом переноса. Кроме этого, вычисляются перенос и инвертированный перенос, подающиеся на следующий сумматор.
Чтобы эта схема смогла закончить вычисления, необходимо, чтобы прошло время для переключения 8 последовательно соединенных реле. Полная схема сумматора показана на картинке:
Вот что происходит со схемой, если на вход сумматора подать 2 и 2 (красным обозначены проводники, на которые подано напряжение питания). Два реле, соответствующие первым битам операндов, переключились, а остальные остались в исходном состоянии:
Логический модуль
Логический модуль я также полностью скопировал из HPRC. Побитовые логические операции выполняются параллельно для всех 8 битов результата сразу. Так как все биты независимы, схема работает быстрее, чем сумматор (хотя заметить это практически невозможно). Логический модуль выполняет операции НЕ, И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ (они же NOT, AND, OR и XOR).
Логическое НЕ работает так: вход логического элемента подключен к обмотке реле; к одному из входов подключен источник питания; выходом элемента является нормально замкнутый контакт для этого входа. Таким образом, при подаче «1» на вход, реле переключается, и от выходного контакта отключается источник питания:
Логическое И реализуется с помощью последовательного соединения двух нормально разомкнутых контактов, каждый из которых управляется одним из входом элемента:
Используемый способ представления логических значений с помощью электрических сигналов позволяет реализовать операцию OR с помощью «монтажного ИЛИ» просто соединив соответствующие провода:
Но у такой схемы есть один недостаток – значение одного из входных сигналов может повлиять на другой (а каждый из этих проводов может быть подключен куда-то еще). Например, на рисунке ниже b=1 приведет к тому, что «1» будет не только на обоих выходах, но и на входах c и d, даже если сами c и d равняются «0».
Проблема решается с помощью дублирования сигналов нормально разомкнутыми контактами реле, к катушкам которых эти сигналы подключены:
Полностью схема логического модуля выглядит так:
Кроме перечисленных логических операций эта схема генерирует еще и входные сигналы для модуля сдвига. Это необходимо по той же причине, по которой в большинстве случаев не получается использовать простое «монтажное ИЛИ» – работа модуля сдвига может повлиять на его же входные сигналы.
Вычитатель
Модуль вычитателя мне скопировать было не с кого (так как HPRC вычитать попросту не умеет), поэтому я взял таблицы истинности для однобитных сумматоров и вычитателей, сравнил их, и переделал схему сумматора в схему вычитателя. Получилась очень похожая на сумматор конструкция:
Модуль сдвиговых операций
Модуль, выполняющий сдвиги, уникален тем, что состоит только из проводов. Мне были нужны только операции сдвига вправо (сдвиг влево легко делается с помощью операции сложения): сдвиг вправо с переносом и без, а также вращение вправо. Таким образом, чтобы выполнить эти операции, достаточно соединить входные сигналы с шины данных с выходными внутренней шины АЛУ в нужном порядке:
В заключение приведу картинку, на которой видно, какой результат вычисления всех операций получается для операндов 3 и 2 (выбранные значения видно по тумблерам в левом нижнем углу, а также по индикаторам реле в каждом из модулей). Это возможно, так как работа модулей не зависит от того, какая операция выбрана (от этого зависит только, какой именно из результатов будет защелкнут).
Что дальше?
Здесь описаны все блоки, выполняющие логические и арифметические операции, в АЛУ, которое войдет в состав
компьютера на электромагнитных реле.
Я начал эту работу с АЛУ, потому что в его состав входят очень многие вещи, которые будут использоваться в других модулях: элементарные логические операции, сумматор (операция увеличения PC будет выполняться специальным блоком инкремента), а также блоки для коммутации с шинами и регистры.
В следующей статье я планирую описать логическую структуру АЛУ, а также затронуть планируемые архитектуру и систему команд компьютера в целом.