кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
Скачать 6.11 Mb.
|
И 0 1 0 0 0 1 0 1 Можно делать вентиль И с более чем двумя входами. Например, вы по- следовательно соединили три реле. Глава 11. Логические вентили 131 V V V V Лампочка загорится при замыкании всех трех переключа- телей. Подобная конфигурация обозначается таким символом. Такая схема называется трехвходовым вентилем И. Следующий логический вентиль состоит из двух реле, соединенных па- раллельно. V V V V 132 Код Важно: выходы двух реле соединены друг с другом. Этот объединенный выход подает питание на лампочку. Для того чтобы лампочка загорелась, до- статочно активировать одно из двух реле. Например, если мы замкнем верхний переключатель, лампочка загорится, поскольку получает питание от левого реле. V V V V Аналогично лампочка загорится, если мы оставим верхний выключатель разомкнутым, но замкнем нижний. V V V V Глава 11. Логические вентили 133 Лампочка также загорится при замыкании обоих переключателей. V V V V В данном случае мы находимся в ситуации, когда лампочка загорается при замыкании верхнего или нижнего переключателя. Ключевым здесь явля- ется слово или, поэтому данная схема называ- ется вентилем ИЛИ. Для его обозначения ин- женеры-электрики используют такой символ. Он несколько похож на символ вентиля И, за исключением закругления стороны входов. На выходе вентиля ИЛИ есть напряжение, если оно подается на один из двух его входов. Если мы обозна- чим отсутствие напряжения 0, а его наличие — 1, то вентиль ИЛИ сможет на- ходиться в четырех возможных состояниях. 0 0 0 1 1 0 1 0 1 1 1 1 Результаты работы вентиля ИЛИ можно представить в виде таблицы. Выход Входы 134 Код ИЛИ 0 1 0 0 1 1 1 1 Вентиль ИЛИ также может иметь более двух входов. Выход такого вен- тиля равен 1, если любой из его входов равен 1; выход вентиля равен 0, если все его входы равны 0. Ранее я объяснил, что используемые нами реле называются двухпози- ционными, потому что их выходы могут быть подключены двумя разными способами. Как правило, при разомкнутом переключателе лампочка не горит. V V При замыкании переключателя лампочка загорается. Кроме того, вы можете использовать другой контакт, чтобы лампочка за- горалась при размыкании переключателя. V V Глава 11. Логические вентили 135 В этом случае лампочка будет гаснуть при замыкании переключателя. Под- ключенное таким способом одиночное реле называется инвертором. Инвертор не является логическим вентилем (логические вентили всегда имеют два или более входов), однако он часто оказывается очень полезным и изображается с помощью специального символа. Выход Вход Данная схема называется инвертором, потому что она инвертирует 0 (от- сутствие напряжения) в 1 (наличие напряжения) и наоборот. 1 0 0 1 Теперь, когда у нас есть инвертор, вентиль И и вентиль ИЛИ, мы можем приступить к созданию пульта управления, который позволит автоматизиро- вать выбор идеальной кошки. Начнем с переключателей. Первый переключа- тель в замкнутом состоянии соответствует кошке, в разомкнутом — коту. Так мы сможем генерировать два сигнала, которые обозначим Ж и М. M V Ж Ж равно 1, М равно 0, и наоборот. Аналогично второй переключатель со- ответствует стерилизованной кошке в замкнутом состоянии, нестерилизован- ной — в разомкнутом. С- V С Со следующими двумя переключателями дело обстоит чуть сложнее. Раз- личные комбинации должны соответствовать четырем разным цветам. Вот два переключателя, подключенных к источнику питания. V V 136 Код Когда оба переключателя разомкнуты (как показано на рисунке), они со- ответствуют белому цвету. Вот как можно использовать два инвертора и один вентиль И для того, чтобы сгенерировать сигнал, обозначенный буквой Б, ко- торый будет равен 1 (наличие напряжения), если вы выбрали белую кошку, и 0 (отсутствие напряжения), если не выбрали. V V Б Когда переключатели разомкнуты, входы обоих инверторов равны 0. Та- ким образом, оба выходных сигнала инверторов (которые подаются на входы вентиля И) равны 1. Это означает, что выход вентиля И равен 1. При замыка- нии любого из переключателей выход вентиля И будет равен 0. Чтобы выбрать черную кошку, мы замыкаем первый переключатель. Это можно сделать, используя один инвертор и вентиль И. Ч V V Выход вентиля И будет равен 1 только в том случае, если первый пере- ключатель замкнут, а второй — разомкнут. Аналогично замыкание второго переключателя будет означать выбор ры- жей кошки. Р V V Замыкание обоих переключателей означает, что нам нужна кошка «дру- гого» цвета. Д V V Глава 11. Логические вентили 137 Теперь давайте объединим описанные выше четыре небольшие схемы в одну. (Как обычно, черными точками обозначаются соединения проводов; провода, на пересечениях которых черных точек нет, не соединены.) V Ж Ч Р Д V Понимаю, в этих хитросплетениях проводов сложно разобраться. Одна- ко если вы внимательно проследите, откуда подаются сигналы на входы каж- дого из вентилей И, и проигнорируете то, куда еще они идут, то увидите, что схема работает. Если оба переключателя разомкнуты, выход Б будет равен 1, а остальные — 0. Если первый переключатель замкнут, выход Ч будет равен 1, а остальные — 0 и т. д. Для соединения вентилей и инверторов существует несколько простых правил: выход одного вентиля (или инвертора) может являться входом одного или нескольких других вентилей (инверторов). Однако выходы двух или более вентилей (инверторов) никогда не соединяются друг с другом. Эта схема, состоящая из четырех вентилей И и двух инверторов, назы- вается дешифратором двух линий на четыре. На его вход подается два бита, которые в различных комбинациях могут представлять четыре разных зна- чения. На его выходе образуются четыре сигнала, лишь один из которых ра- вен 1 в любой момент времени (какой конкретно, зависит от входных значе- ний). По аналогичному принципу вы можете создать дешифратор трех линий на восемь или дешифратор четырех линий на шестнадцать и т. д. Еще раз приведу упрощенное логическое выражение для выбора кошки: (С × ((М × (Б + Р)) + (Ж × (1 − Б)))) + Ч. Каждому знаку «+» в этом выражении должен соответствовать вентиль ИЛИ, а каждому знаку «×» — вентиль И. 138 Код С M Б Р Ж Б Ч Порядок символов слева от схемы соответствует их порядку в выраже- нии. Эти сигналы поступают от переключателей, соединенных с инверторами и дешифратором «2 на 4». Обратите внимание на использование инвертора для реализации части выражения 1 − Б. Вы можете подумать, что в схеме используется слишком много реле, и это действительно так. В ней присутствуют два реле для каждого вентиля И и ИЛИ и одно реле для каждого инвертора. Могу лишь посоветовать привыкнуть к такому положению дел. В следующих главах мы будем использовать гораз- до больше реле. Просто радуйтесь, что вам не придется покупать реле и соби- рать эти схемы дома. Сейчас мы рассмотрим еще два логических вентиля. Оба используют вы- ход реле, на котором присутствует напряжение, когда реле не активировано (выход, используемый в инверторе). Например, в следующей конфигурации выход одного реле подает питание на вход второго. Когда оба входа отключе- ны от источника питания, лампочка горит. V V V Глава 11. Логические вентили 139 При замыкании верхнего выключателя лампочка гаснет. V V V Лампочка гаснет из-за того, что на второе реле не подается питание. Точ- но так же лампочка гаснет при замыкании нижнего выключателя. V V V Когда замкнуты оба переключателя, лампочка тоже не горит. 140 Код V V V Это поведение прямо противоположно поведению вентиля ИЛИ. Такая схема называется вентилем ИЛИ-НЕ. Его символ аналогичен символу вентиля ИЛИ, за ис- ключением того, что на выходе изображен небольшой кружок, означающий инвертировать. Вентиль ИЛИ-НЕ соответствует следующей схеме. Результаты работы вентиля ИЛИ-НЕ представлены в таблице. ИЛИ- НЕ 0 1 0 1 0 1 0 0 Они противоположны результатам работы вентиля ИЛИ, выход которо- го равен 1, если один из двух его входов равен 1, а 0 — только если оба входа равны 0. Глава 11. Логические вентили 141 Далее показан еще один способ соединения двух реле. V V V V В данном случае два выхода соединены. Это похоже на конфигурацию вентиля ИЛИ, только здесь используются другие контакты. Лампочка горит, когда оба переключателя разомкнуты. Лампочка продолжает гореть при замыкании верхнего переключателя. V V V V 142 Код Точно так же лампочка продолжает гореть и при замыкании нижнего пе- реключателя. V V V V Только при замыкании обоих переключателей лампочка гаснет. V V V V Глава 11. Логические вентили 143 Это поведение прямо противоположно поведению вентиля И. Такая схема называется вентилем И-НЕ. Вентиль И-НЕ изображается так же, как и вентиль И, но с кружком на выходе, который означает, что выходной сигнал противо- положен выходному сигналу вентиля И. Выход Вход Вентиль И-НЕ демонстрирует следующее поведение. И-НЕ 0 1 0 1 1 1 1 0 Обратите внимание: выход вентиля И-НЕ противоположен выходу вен- тиля И. Выход вентиля И равен 1, только если оба входа равны 1; в против- ном случае выход равен 0. Итак, мы рассмотрели четыре различных способа подключения реле, кото- рые имеют два входа и один выход. Каждая конфигурация дает несколько раз- личающиеся результаты. Для экономии сил и времени мы назвали эти конфи- гурации логическими вентилями и решили обозначать их с помощью символов, используемых инженерами-электриками. Выходной сигнал конкретного логичес- кого вентиля зависит от входного сигнала, как показано в следующих таблицах. И 0 1 0 0 0 1 0 1 ИЛИ 0 1 0 0 1 1 1 1 И-НЕ 0 1 0 1 1 1 1 0 ИЛИ- НЕ 0 1 0 1 0 1 0 0 144 Код Теперь у нас есть четыре логических вентиля и инвертор. Осталось допол- нить инструментарий обычным реле, которое называется буфером. V V Буфер изображается так. Этот символ аналогичен символу инвертора, но без маленького кружка. Буфер примечателен тем, что он почти ничего не делает. Выходной сигнал бу- фера совпадает с его входным сигналом. 0 0 1 1 Однако вы можете использовать буфер при наличии слабого входного сигнала. Как вы помните, именно по этой причине реле использовались в те- леграфной системе много лет назад. Кроме того, буфер можно применять для небольшой задержки сигнала. Дело в том, что для срабатывания реле требу- ется немного времени — небольшая доля секунды. Отныне в книге редко будут встречаться изображения реле. Вместо этого следующие схемы будут состоять из буферов, инверторов, четырех основных логических вентилей и более сложных схем (дешифратора «2 на 4», например), собранных из этих вентилей. Разумеется, все эти компоненты состоят из реле, однако нам нет необходимости их рассматривать. Ранее, когда мы конструировали дешифратор «2 на 4», нам встретилась небольшая схема следующего типа. Глава 11. Логические вентили 145 Два инвертированных входа стали входами вентиля И. Иногда такая кон- фигурация изображается без инверторов. Обратите внимание на маленькие кружки на входе вентиля И, которые указывают, что сигналы в этой точке инвертируются: 0 (отсутствие напряже- ния) становится 1 (наличие напряжения), и наоборот. Вентиль И с двумя инвертированными входами ведет себя точно так же, как вентиль ИЛИ-НЕ. = Выход равен 1, только если оба входа равны 0. Аналогично вентиль ИЛИ с двумя инвертированными входами эквива- лентен вентилю И-НЕ. = Выход равен 0, только если оба входа равны 1. Эти две пары эквивалентных схем представляют электрическое вопло- щение законов Огастеса де Моргана, еще одного математика викториан- ской эпохи, который был на девять лет старше Буля. Его книга «Формаль- ная логика» была опубликована в 1847 году, согласно преданию, в один день с книгой Буля «Математический анализ логики». На самом деле на занятия логикой Буля подвигла открытая вражда между де Морганом и другим бри- танским математиком, связанная с обвинениями в плагиате (история оправ- дала де Моргана). С самого начала де Морган осознал важность прозрений Буля. Он бескорыстно поощрял Буля и помогал ему в исследованиях, однако сегодня он, к сожалению, почти забыт, а в памяти потомков остались только его знаменитые законы. Законы де Моргана проще всего выразить следующим образом. A × B = A + B A + B = A × B Код A и B — два булевых операнда. В первом выражении они инвертируются, а затем объединяются с помощью булева оператора И. Это эквивалентно объ- единению двух операндов с помощью булева оператора ИЛИ и последующему инвертированию результата (соответствует оператору ИЛИ-НЕ). Во втором выражении два оператора инвертируются, а затем объединяются с помощью булева оператора ИЛИ. Это эквивалентно объединению двух операндов с по- мощью булева оператора И и последующему инвертированию результата (со- ответствует оператору И-НЕ). Законы де Моргана — важный инструмент для упрощения булевых вы- ражений, а значит, для упрощения схем. История показала, что именно в этом заключалось значение работы Клода Шеннона для инженеров-электриков. Однако чрезмерное упрощение схем не является целью этой книги. Нам важ- но собрать работающую схему, а не сделать так, чтобы она работала как мож- но проще. Этим мы и займемся в следующей главе — соберем работающую счетную машину. 147 Глава 12 Двоичный сумматор Сложение — простейшая арифметическая операция. Если мы хотим создать компьютер (а именно в этом заключается цель этой книги), сначала нужно най- ти способ создания устройства, складывающего два числа. По сути, компьюте- ры выполняют только операцию сложения. Если нам удастся сконструировать механизм, умеющий складывать, мы окажемся способны создать устройство, использующее операцию сложения для того, чтобы вычитать, умножать, де- лить, рассчитывать платежи по ипотеке, отправлять ракеты на Марс, играть в шахматы и вносить путаницу в наши телефонные счета. Сумматор, который мы построим, будет большим, нескладным, медленным и шумным по сравнению с современными калькуляторами и компьютерами. Самое интересное заключается в том, что мы соберем эту машину из простых электрических устройств, о которых говорили в предыдущих главах, — пере- ключателей, лампочек, проводов, батарейки и реле, объединенных в различ- ные логические вентили. Этот сумматор будет состоять исключительно из де- талей, которые уже были изобретены 120 лет назад. Особенно хорошо то, что нам не нужно ничего собирать в своей гостиной; вместо этого мы можем кон- струировать на бумаге и в уме. Эта машина будет работать исключительно с двоичными числами, в ней будут отсутствовать некоторые современные функции. Вы не сможете исполь- зовать клавиатуру для ввода чисел, подлежащих сложению; вместо этого будет ряд переключателей. Роль дисплея для отображения результатов в этом сум- маторе исполнит ряд лампочек. Однако машина сумеет сложить два числа, и она сделает это фактически как компьютер. Сложение двоичных чисел похоже на сложение десятичных. Если хоти- те сложить два десятичных числа, например 245 и 673, вы разбиваете задачу на более простые этапы. На каждом этапе складываете две десятичные цифры. В данном примере начинаете со сложения 5 и 3. Эта задача решается быстрее, если вы знаете таблицу сложения. 148 Код Большая разница между сложением десятичных и двоичных чисел заклю- чается в том, что в случае с двоичными числами используется более прос тая таблица. + 0 1 0 0 1 1 1 10 Если вы выросли среди дельфинов, вероятно, вы в школе учили эту таб- лицу, громко произнося: 0 плюс 0 равно 0, 0 плюс 1 равно 1, 1 плюс 0 равно 1, 1 плюс 1 равно 0, 1 в уме. Вы можете добавить в эту таблицу нули так, чтобы каждый результат представлял 2-битное значение. + 0 1 0 00 01 1 01 10 Таким образом, результатом сложения пары двоичных чисел являются два бита, которые называются разрядом суммы и разрядом переноса (1 плюс 1 равно 0, 1 в уме). Теперь мы можем разделить таблицу сложения двоичных чи- сел на две таблицы. Первая — для разряда суммы. + сумма 0 1 0 0 1 1 1 0 Вторая — для разряда переноса. + перенос 0 1 0 0 0 1 0 1 Глава 12. Двоичный сумматор 149 Сложение двоичных чисел удобно рассматривать так, поскольку наш сум- матор выполняет операции суммирования и переноса отдельно. Для создания двоичного сумматора потребуется сконструировать схему, выполняющую эти операции. Работа исключительно в двоичной системе счисления значитель- но упрощает задачу, поскольку все части схемы — переключатели, лампочки и провода — могут представлять двоичные цифры. Как и при сложении десятичных чисел, мы складываем двоичные числа столбец за столбцом, начиная с крайнего правого. Обратите внимание: при сложении значений в третьем столбце справа 1 переносится в следующий столбец. Это происходит снова в шестом, седьмом и восьмом столбцах справа. Какого размера двоичные числа мы хотим сложить? Поскольку мы создаем сумматор прямо в уме, то можем сделать так, чтобы он складывал очень длинные числа. Однако давайте будем благоразумными и ограничимся двоичными числа- ми длиной до восьми бит, то есть будем складывать двоичные числа в диапазоне от 0000 0000 до 1111 1111 (десятичные от 0 до 255). Сумма двух 8-битных чисел может достигать двоичного значения 1 1111 1110 (десятичного значения 510). Пульт управления нашим двоичным сумматором может выглядеть так. На этом пульте есть два ряда по восемь переключателей. Этот набор пере- ключателей — устройство ввода, которое мы будем использовать для ввода двух 8-битных значений. В этом устройстве выключенный переключатель (положение 150 Код вниз) соответствует значению 0, а включенный (положение вверх) — 1, как в слу- чае с настенными переключателями в вашем доме. Устройство вывода в нижней части пульта — ряд из девяти лампочек, которые отобразят результат сложения. Негорящая лампочка соответствует значению 0, горящая — 1. Нам требуется девять лампочек, поскольку сумма двух 8-битных чисел может быть 9-битным числом. В остальном сумматор будет состоять из логических вентилей, соединен- ных различными способами. Переключатели будут активировать реле в логи- ческих вентилях, которые, в свою очередь, будут зажигать нужные лампочки. Например, если мы хотим сложить числа 0110 0101 и 1011 0110 (из предыду- щего примера), включаем соответствующие переключатели. Загоревшиеся лампочки показывают результат: 1 0001 1011. По крайней мере, мы на это надеемся. Мы ведь еще не собрали устройство! В предыдущей главе я упомянул, что в этой книге буду использовать мно- жество реле. Для 8-битного сумматора, который мы создаем, требуется не менее 144 реле — по восемнадцать для каждой из восьми пар битов, которые скла- дываем. Если бы я показал готовую схему, вы бы наверняка испугались. Ни- кому не под силу разобраться в схеме, состоящей из ста сорока четырех хит- ро соединенных реле. Вместо этого мы будем решать такую задачу поэтапно, используя логические вентили. Возможно, вы сразу заметили связь между логическими вентилями и сло- жением двоичных чисел, когда увидели таблицу для разряда переноса, который возникает в результате сложения двух однобитных чисел. |