Сумматор (ADDer)
Это устройство очень простое. При сложении двух чисел в десятичной системе, мы пользуемся способом сложения в столбик. Поскольку однозначные числа лежат в диапазоне от 0 до 9, то сумма может быть от 0 до 18. Если значение суммы от 0 до 9, то мы просто записываем ответ. А если мы получим результат суммы от 10 до 18, то мы перенесем 1 в следующий разряд (столбец слева).
В двоичной системе все еще проще. Здесь в одном столбце может быть только 0 или 1, а результатом суммы может стать 0 или 1, или 10. Если вы сложите 0+0, то получите 0. Если сложите 0+1, то получите 1. А если сложите 1+1, то получите 0 в правом столбце и 1 перенесете в левый столбец.
Описанные ранее вентили легко справятся с такой задачей. Если два складываемых бита подать на входы XOR элемента, тот «скажет» нам, равны ли значения этих битов. Это и будет верное значение правого столбца. А если эти же биты подать на вход AND элемента, мы узнаем нужно ли переносить единицу в левый столбец. Ведь логический элемент «И» на выходе дает единицу только в том случае, если 1 присутствует на обоих входах. Схема устройства с русскими и английскими обозначениями:
Вот так мы легко добавили один столбец. Но что если мы хотим добавить еще один? У нас есть два бита, состояние которых может быть 0 или 1, но у нас теперь есть еще и возможность переноса из предыдущего столбца. Теперь мы фактически будем складывать три числа: два бита и один возможный перенос из предыдущего столбца.
При сложении трех чисел мы можем получить 0, 1, 10 или 11. Вот так выглядит такой сумматор с переносом:
Левый элемент XORсообщает нам, равны ли ‘a’ и ‘b’. Если они не равны и предыдущего переноса нет, или если ‘a’ и ‘b’ равны и предыдущий перенос есть, на выходе второго XOR будет 1. Это значит, что в правом столбце будет 1. Нижний «И» выдаст 1 только когда ‘a’ и ‘b’ будут равны 1. Верхний «И» выдаст 1 если ‘a’ и ‘b’ не равны и есть предыдущий перенос. «ИЛИ» выдаст 1 если хотя бы один из «И» выдает единицу на выходе. Упростим вид данного устройства:
Для сложения двух байтов нам понадобится восемь сумматоров с подключенными между собой входами и выходами переноса. Даже первый бит имеет вход переноса для того, чтобы оперировать числами более 255.
И, как обычно, упростим начертание данного устройства:
Выходной бит переноса будет использоваться в другом месте в компьютере, если сумма будет превышать 255. Вот так при помощи всего пяти видов вентилей, компьютер может выполнять арифметические операции.
Компаратор и Ноль
Все вышеописанные устройства оперируют одним или двумя байтами на входе и одним байтом на выходе. Сдвиговые регистры (Шифтеры) и сумматоры генерируют один байт и один дополнительный бит на выходе. Компаратор же генерирует только два бита вывода, а не целый байт. Фактически, компаратор уже встроен в XOR элемент. XORer генерирует целый байт на выводе, а компаратор генерирует свои два бита.
Суть компаратора в том, чтобы сравнивать два входных байта на предмет равенства или больше/меньше. XOR работает так же: если биты на входах одинаковые, то на выходе появляется 0. Со сравнением чисел больше одного бита немного сложнее. Здесь нужно проверять сначала старший бит: если в одном числе это 1, а в другом 0, то первое больше. Если же старшие биты равны, то проверяется следующий бит в обоих числах. И так вплоть до младшего бита, пока не найдётся пара разных битов. В любом случае, в конце операции мы выясним, является ли одно из чисел больше или же они равны. На самом деле компаратор на выходные биты выдаёт два сигнала «Равны» и «Бит ‘a’ больше». Давайте для наглядности рассмотрим одну часть компаратора, в которой сравниваются всего лишь два бита из двух байтов:
Два бита поступают на входы XOR-1, на его выходе появится 1 только если ‘a’ и ‘b’ не равны, в другом случае на выходе будет 0. Для этого добавлен элемент NOR-2, который инвертирует этот сигнал и выдает на выходе 1 если ‘a’ и ‘b’ равны. И если NOR-2 в каждой предыдущей такой части так же выдаёт 1, то на выходе AND-3 каждой части будет 1. В итоге, если на выходе AND-3 последней части будет 1, это значит, что байты полностью идентичны. Выход AND-4 выдаст 1 в случае выполнения трех условий:
- биты ‘a’ и ‘b’ разные,
- бит ‘a’ включен (т.е. 1) ,
- все предыдущие биты были равны.
Когда выход вентиля AND-4 включается, он включает вентиль OR-5 вне зависимости от того включен ли вентиль OR-5 в предыдущей части, и поэтому данный сигнал пройдет через все вентили OR-5 всех частей до последнего выхода «’a’ больше».
Собрав устройство из 8 таких частей, мы получим полный байтовый компаратор с выводом байта дающего результат побитового XOR входных байтов и два информационных бита внизу:
Упрощая вид схемы, мы вернемся к виду XOR и просто добавим два новых бита:
В компьютере нам понадобится еще одно устройство. Оно представляет из себя простую комбинацию вентилей, в которой есть восемь входов (1 байт) и всего один бит на выходе. На выходе бит включается только в том случае, если на всех входах значение битов равно 0.
Это простой вентиль OR с восемью входами и вентиль NOT. Если все входы равны 0, то на выходе OR будет 0, а на выходе NOT будет 1. Во всех остальных случаях OR будет выдавать 1, а NOT – 0.
Арифметическое Логическое Устройство (ALU)
Мы изучили семь устройств, которые могут совершать арифметические и логические действия с числами. Теперь же попробуем их объединить в одно большое устройство с возможностью выбора действий над числами.
Это устройство так и называется «Арифметико-логическое устройство» или «АЛУ». Ниже приведена его схема:
Все устройства подключены к шине ‘a’, а те у которых два входа подключены еще и к ‘b’. Все семь устройств всегда одновременно подключены к входам, а их выходы контролируются Enabler-ами (Разрешателями/активаторами). Управляющие контакты Enabler-ов подключены к выходам дешифратора и поэтому одновременно может быть активирован только один из них. Восьмой выход дешифратора используется в случае, когда вы не хотите выводить результат ни одного из вычислений. Таким образом, АЛУ каждый раз выполняет все возможные операции с входными байтами, но выводит результат только одного вида вычисления. Одновременно с Enabler-ом подключаются дополнительные биты выбранного устройства. Три входа дешифратора обозначены ‘op’, это сокращение от «Операция». Теперь когда вам стало понятно, как устроено АЛУ, можно представить его сокращенную схему:
Обратите внимание, что из восьми возможных операций у нашего устройства есть такая, где ни один арифметический модуль не подключается к выходу, но при этом выходные биты «‘a’ больше» и «равны» продолжают работать. Эту операцию можно использовать, если нужно просто сравнить два байта, не проводя с ними никаких арифметических вычислений.
Арифметико-логическое устройство это сердце компьютера. Именно здесь происходят все вычисления. Готов поспорить, что это устроено гораздо проще, чем вы думали.
Еще о процессоре
Теперь нам нужно построить еще одно небольшое простое устройство. У этого устройства есть всего один вход шины, один выход шины и всего один входной бит. Это похоже на активатор (Enabler). Семь бит проходят через вентили «И», а восьмой бит – через вентиль «ИЛИ». Однобитовый вход же определяет, что произойдет при прохождении байта через данное устройство. Если этот бит имеет значение 0, то байт проходит без изменений, но если этот бит имеет значение 1, тогда входной байт игнорируется и на выходе будет 0000 0001, что является числом 1 в двоичном коде. Будем называть это устройство «Шина 1».
Теперь поместим «Шину 1» и АЛУ в ЦП. Расположение выводов АЛУ мы немного изменим для удобства рисования схемы. Выход АЛУ подключен к Аккумулятору (ACC), который временно хранит результат последнего вычисления АЛУ. Выход ACC подключен к шине данных, чтобы его содержимое можно было отправить куда нужно.
Когда мы хотим выполнить определенную операцию АЛУ с одним входом, мы должны установить три бита ‘op’, согласно нашей таблице команд, затем включить регистр, который мы хотим подключить к шине и получить ответ в ACC. Для работы АЛУ с двумя регистрами есть некоторые отличия. Сначала мы подключаем один регистр к шине и устанавливаем бит ‘s’ в TMP, записав данные из регистра в TMP. Затем мы включаем второй регистр, отправляя данные из него в шину, выставляем нужный код операции на ‘op’ для АЛУ и получаем ответ в аккумуляторе.
Как видите, теперь мы можем перемещать данные из ОЗУ или регистров в ACC, а из аккумулятора в регистры или ОЗУ. И все это благодаря лишь переключению нужных установочных ‘s’ и разрешающих ‘e’ битов в нужной последовательности и в нужное время. Вот так это и происходит в компьютерах. Не так уж и сложно, правда?
Теперь у нас есть почти все, что нужно для работы компьютера, за исключением некоего устройства, которое бы вовремя включало все эти управляющие биты. Это устройство уже изображено на схеме и называется оно «Control Section».
Часть 5 - Назад Далее - Часть 7
#компьютеры #наука и техника #образование #процессор #радиолюбитель #электроника начинающим