иктов на такой шине возникнуть не может, т. к. ток от источника питания всегда ограничен нагрузочным резистором. Примером такой шины может служить интерфейс I2С, который мы будем разбирать в главе 16.
Другой вариант построения выходов современных КМОП-элементов для коллективной работы представляет т. н. выход с третьим состоянием, когда оба транзистора, и по «плюсу» и по «минусу», могут быть разомкнуты. Так построены выходные каскады микроконтроллеров AVR, с которыми мы будем иметь дело в дальнейшем (см. главу 12).
В начале главы мы упоминали, что логические элементы носят еще название вентилей. На самом деле вентиль — это устройство для регулирования потока жидкости или газа. Каким же образом оправданно это название в приложении к нашим схемам? Оказывается, если на один из входов логического элемента подавать последовательность прямоугольных импульсов (некую аналогию потока жидкости), а на другой — логические уровни, то элемент будет себя вести совершенно аналогично вентилю.
Соответствующие диаграммы показаны на рис. 8.3, а. Из них вытекают следующие правила:
• для элемента «И-НЕ» логический уровень «1» является разрешающим, т. е. в этом случае последовательность на другом входе пропускается на выход без изменения (за исключением того, что она инвертируется, т. к. элемент у нас «И-НЕ», а не просто «И»). При логическом уровне «0» вентиль запирается, на выходе будет логическая единица;
• для элемента «ИЛИ-HE» ситуация полностью обратная: разрешающим является логический уровень «0», т. е. в этом случае последовательность на другом входе пропускается на выход (также с инверсией). При логическом уровне «1» вентиль запирается, на выходе будет логический ноль;
• для «Исключающего ИЛИ» все еще интересней: в зависимости от того, «0» на входе или «1»: относительно другого входа элемент ведет себя, соответственно, как повторитель или как инвертор, что дает довольно широкие возможности для управления двоичными последовательностями. Почему так происходит?
Рис. 8.3. Обработка цифровых сигналов при помощи логических элементов:
а — диаграммы прохождения сигналов через основные типы логических элементов; б — «антидребезг» на основе элемента «Исключающее ИЛИ»; в и г — использование элемента «Исключающее ИЛИ» для выявления разности фаз (в) и частот (г) сигналов
Элемент «Исключающее ИЛИ» обладает рядом интересных свойств, которые вытекают из его таблицы истинности:
Если сравнить эту таблицу с таблицами элементов «ИЛИ» и «И-НЕ» (см. главу 7), то можно заметить, что «Исключающее ИЛИ» есть логическое произведение этих элементов. Запомнить его таблицу истинности очень просто — он осуществляет функцию «несовпадения» (единица на выходе тогда, когда входы разные). Признаюсь, что я никогда не мог понять, почему в отечественной практике «Исключающее ИЛИ» обозначают значком «=1». По смыслу это обозначение больше подошло бы обратному элементу «совпадения», который представляет собой инверсию выхода «Исключающего ИЛИ» и носит название «Включающего ИЛИ». В любой логической серии есть специальные микросхемы «Исключающее ИЛИ» (561ЛП2), но функцию эту несложно воспроизвести и на базовых элементах, например, «И-НЕ».
Заметки на полях
Сама функция «Исключающее ИЛИ» (по-английски она называется XOR) имеет большое значение в логике и программировании. Например, часто употребляющаяся функция обнуления какого-то регистра в микроконтроллерах есть операция «Исключающее ИЛИ» этого регистра самого с собой (по определению, одинаковые входы дадут на выходе все 0). Другое интересное свойство этой функции — будучи применена к какому-то двоичному объекту дважды, она возвращает все, как было до операции. На этом принципе основано применение функции «Исключающее ИЛИ» в криптографии: первый раз вы складываете текст с секретным ключом, получая «абракадабру». Второй раз — на приемном конце — тот же ключ той же операцией применяется к этой «абракадабре», в результате чего получается исходный расшифрованный текст. Можно указать и еще одно распространенное применение «Исключающего ИЛИ», которое вы не раз встречали — получение «прозрачного» цвета в компьютерной графике. Эффект основан на том, что изготавливается т. н. XOR-маска. Там, где в XOR-маске были поля с нулевым значением бит (т. е. черного цвета), фон остается неизменным (если одна исходная величина равна нулю, то операция XOR будет повторять вторую исходную величину), в противном случае на фон с «дырой» накладывается то изображение, которое записано в XOR. Так, например, формируются «иконки» и «прозрачные» меню в Windows. Как видите, очень полезная функция.
На рис. 8.3, б показана интересная схема на основе элемента «Исключающее ИЛИ». Она устраняет неизбежный дребезг механических контактов, который может вызвать (более того, вызывает обязательно) многократное срабатывание некоторых электронных схем, например триггеров или счетчиков. С этим явлением борются разными путями — с помощью одновибраторов (см. далее), RS-триггеров (см. главу 9) и даже программно — в микроконтроллерах (см. главу 13).
При наличии свободного элемента «Исключающее ИЛИ» устранить дребезг, как видите, очень просто. Чтобы понять, как это работает, надо учесть, что подвижные контакты кнопки, тумблера или реле никогда не пролетают несколько раз расстояние от одного неподвижного контакта до другого — подвижной контакт только несколько (иногда до нескольких десятков) раз за короткое время оказывается «висящим в воздухе» (представьте себе, что он как бы подпрыгивает на неподвижном контакте, причем как при размыкании, так и при замыкании). При этом подача напряжения, соответствующего противоположному логическому уровню, не происходит, но «подпрыгивания» достаточно, чтобы на выходе микросхемы вызвать нечто похожее на дребезг выхода компаратора при наличии помехи. Но, согласно сказанному ранее, при наличии логического нуля на одном из входов «Исключающее ИЛИ» работает как повторитель. Если контакт был замкнут (надежно) с потенциалом питания (логическая единица), то на выходе будет также «1». Когда контакт в процессе дребезга разомкнется и «повиснет в воздухе», то потенциал на выходе все равно останется равным «1», т. к. поддерживается обратной связью, замыкающей выход со входом. Сколько бы контакт ни дребезжал таким образом, потенциал останется равным «1» до первого касания контактом «земли», тогда элемент перебросится в другое состояние и будет в нем пребывать опять независимо от того, дребезжит контакт или нет. Разумеется, можно и инвертировать сигнал, если присоединить второй вход к питанию, а не к «земле». В схеме по рис. 8.3, б обязательно требуется именно перекидной контакт, для простой кнопки с двумя выводами нужны иные способы.
Самое, однако, интересное будет, если на входы «Исключающего ИЛИ» подать две последовательности импульсов с разными частотами и/или фазами. На рис. 8.3, в показано, что произойдет, если обе последовательности имеют одинаковую частоту, но фазы при этом сдвинуты на полпериода. На выходе при этом возникнет колебание с удвоенной частотой! Попробуйте изменить фазу — вы увидите, что скважность результирующего колебания будет меняться, пока фазы не совпадут, и тогда сигнал на выходе исчезнет — одинаковые состояния выходов дают на выходе «Исключающего ИЛИ» всегда логический ноль. Это позволяет использовать такой элемент в качестве т. н. фазового компаратора, что широко применяется в фазовых модуляторах и демодуляторах сигнала.
Не менее интересный случай показан на рис. 8.3, г, где на входы подаются последовательности с различающейся частотой. Мы видим, что на выходе возникнет сигнал с меняющейся скважностью, причем легко показать, что период изменения скважности от минимума к максимуму и обратно будет в точности равен периоду сигнала с частотой, равной разности исходных частот. Если при этом поставить на выходе элемента фильтр низкой частоты (если разность частот невелика в сравнении с исходными частотами, то достаточно простой RC-цепочки), то мы получим синусоидальное колебание с частотой, равной этой разности! Это колебание можно подать, например, в качестве сигнала обратной связи на генератор, управляемый напряжением (ГУН), который тогда изменит частоту своего выходного сигнала так, чтобы она в точности совпадала со второй (опорной). Так, к примеру, делают схемы умножителей частоты, получая целый набор точных частот при наличии одного-единственного опорного кварцевого генератора.
На практике базовые логические элементы работают в основном в качестве управляемых вентилей, как описано ранее, для согласования положительной и отрицательной логики, а также в т. н. комбинационных схемах, которые в чистом виде реализуют логические уравнения (см. главу 7) разной степени сложности. Конечно, в массовых продуктах, кроме самых простых устройств, микросхемы малой степени интеграции сейчас почти не встречаются, т. к. им на смену пришли более функциональные и удобные ПЛИС и микроконтроллеры. Но для практики, особенно радиолюбительской, простые комбинационные схемы могут оказаться полезными. Мы рассмотрим один класс таких схем — дешифраторы.
Коды и шифры
Сначала внесем некоторую ясность в терминологию. Под словом «коды» ученые-криптографы чаще всего понимают словесный код: «первый, я третий, какие указания?». Типичным кодом также были уловки, которыми алхимики охраняли свои производственные секреты («возьми, сын мой, философской ртути и накаливай, пока она не превратится в зеленого льва…»). Такие тайные коды точными науками не рассматриваются, и применяются лишь в быту.
Другое дело— различные системы счисления, которые мы рассматривали в