Логические уровни
Диаграмма на рис. 8.1, а показывает диапазоны напряжений, которые соответствуют двум логическим состояниям (ВЫСОКИЙ и НИЗКИЙ) для самых популярных семейств цифровой логики. Для каждого логического семейства необходимо определить допустимые значения как входных, так и выходных напряжений, соответствующих состояниям ВЫСОКИЙ и НИЗКИЙ. Закрашенная площадь выше линии показывает допустимый диапазон выходных напряжений, при котором гарантируются логические состояния НИЗКИЙ и ВЫСОКИЙ без ошибок, с двумя стрелками, указывающими типовые выходные значения (НИЗКИЙ и ВЫСОКИЙ), встречающиеся на практике. Закрашенная площадь ниже линии показывает диапазон входных напряжений, гарантирующий представление как НИЗКИЙ или ВЫСОКИЙ, со стрелкой, указывающей типовое напряжение логического переключения, т. е. линию, разделяющую уровни НИЗКИЙ и ВЫСОКИЙ. Во всех случаях логическое состояние ВЫСОКИЙ более положительно, чем логическое НИЗКИЙ.
Значения «минимальный», «типовой» и «максимальный» в электронных спецификациях требуют нескольких слов для пояснения. Наиболее просто, изготовитель гарантирует, что компоненты будут попадать в диапазон минимум-максимум с наибольшей вероятностью к «типовому». Это означает для типовых спецификаций, которые вы используете при проектировании схем, что эти схемы должны работать надежно внутри диапазона, задаваемого минимумом и максимумом. В частности, хорошо спроектированная схема должна функционировать при всех возможных комбинациях минимальных и максимальных значений (даже на самый плохой случай).
Рис. 8.1, а
8.03. Числовые коды
В большинстве случаев рассмотренные выше условия, которые могут быть представлены цифровыми уровнями, просты и наглядны. Более сложный и интересный вопрос заключается в том, как с помощью цифровых уровней представить часть числа.
Десятичное (с основанием 10) число представляет собой строчку из цифр и (при этом) подразумевается, что они должны быть умножены на последовательные степени числа 10 для образования индивидуальных произведений, а затем вместе сложены. Например, 137,06 = 1·102 + 3·101 + 7·100 + 0·10-1 + 6·10-2. Для записи числа требуется десять символов (от 0 до 9), а степень числа 10, на которую должна быть умножена цифра, определяется ее положением по отношению к десятичной запятой. Если мы хотим представить число с помощью только двух символов (0 и 1), то такая система счисления будет называться двоичной или системой с основанием 2. В этом случае каждая 1 или 0 будет умножаться на последовательные степени числа 2. Например,
11012 = 1·23 + 1·22 + 0·21 + 1·20 = 1310.
Отдельные «единицы» и «нули» в записи, представляющей двоичное число, называются «битами» (от слов binary digits — двоичный разряд). Индекс (записываемый всегда по основанию 10) указывает, какая используется система счисления. Он часто бывает нужным для того, чтобы избежать путаницы, так как все символы выглядят одинаково. Только что описанным методом мы преобразовали число из двоичной формы в десятичную. Для того чтобы произвести обратное преобразование, десятичное число нужно последовательно делить на 2, каждый раз записывая остаток. Для преобразования числа 1310 в двоичное нужно произвести следующие операции: 13/2 = 6, остаток 1; 6/2 = 3, остаток 0; 3/2 = 1, остаток 1; 1/2 = 0, остаток 1; это дает 1310 = 11012. Заметим, что ответ образуется, начиная с младшего значащего разряда (МЗР).
Шестнадцатеричное представление чисел. Для описания систем только с двумя состояниями естественно применять двоичные числа. Однако, как будет показано ниже, это не единственный способ.
Поскольку двоичные числа имеют большую длину, для их записи используется шестнадцатеричное (с основанием 16) представление. Для записи двоичного числа в шестнадцатеричном коде его разбивают на группы по 4 бит, каждая из которых может принимать значения от 0 до 15. Поскольку для обозначения каждой шестнадцатеричной позиции мы хотим использовать один символ, величины 10–15 будем обозначать буквами латинского алфавита от А до F:
70710 = 10110000112 = (10110000112) = 2С316.
Шестнадцатеричное представление лучшим образом соответствует байтовой (1 байт = 8 бит) структуре ЭВМ, которая чаще всего реализуется в виде 16- или 32-разрядных машинных «слов», при этом каждое слово состоит из 2 или 4 байтов. Буквенно-цифровые знаки (буквы, цифры или символы) представляются в виде одного байта. Таким образом, каждый байт в шестнадцатеричной системе состоит из двух шестнадцатеричных цифр, 16-разрядное машинное слово из 4-х шестнадцатеричных цифр и т. д.
Например, в широко используемом коде ASCII (см. разд. 10.19) малое «а» в ASCII-представлении есть 01100001 (61 в шестнадцатеричном коде, который записывается как 61Н), «Ь» есть 62Н и т. д. Таким образом, слово "nerd" может быть сохранено в двух 16-битных словах, которые имеют значения 6D65H и 7274Н. Как другой пример, размещение памяти в компьютере с памятью 64К (65536 байт) может определяться 2-байтным адресом, поскольку 216 = 65536, наинизший адрес есть 0000Н, наивысший — FFFFH, вторая половина памяти начинается с 8000Н, а четвертая четверть памяти — с СОООН. Вы случайно можете встретить «восьмеричную» запись (основание 8), к сожалению, в ранних ЭВМ были приняты 12- и 32-разрядные слова, которые использовали 6-разрядное представление буквенно-цифровых знаков. Поскольку 6-разрядные знаки было логично представлять в восьмеричном коде, внедрилась эта система счисления. Она сохранилась до настоящего времени и с успехом применяется для записи двоичных чисел, однако зачастую может создавать определенные неудобства.
Упражнение 8.1. Запишите восьмеричное представление в коде ASCII символов "а" и "Ь", используя шестнадцатеричное значение, приведенное ранее. Затем запишите восьмеричное представление 16-разрядного Слова, составленного из двух байт вместе "ab"». Почему они различаются? Определите, каким будет восьмеричное представление 16-разрядного слова, содержащего сочетание "Ьа" в коде ASCII.
Двоично-десятичный код. Другим методом представления чисел является двоичное кодирование каждой десятичной, цифры, записываемой в виде группы из 4 двоичных разрядов. Например, 13710 = 0001 00110111 (двоично-десятичный код). Заметим, что двоично-десятичное представление числа не эквивалентно двоичному, которое в данном случае будет иметь вид: 13710 = 100010012. Можно считать, что разряды двоично-десятичного кода, начиная с правого, выражают числа 1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800 и т. д. Очевидно, что двоично-десятичное кодирование с точки зрения использования двоичных разрядов не экономично, поскольку каждая группа из 4 бит способна представлять числа от 0 до 15, но используется для записи числа, не превышающего 9 (за исключением редкого случая записи цифровой информации с четным паритетом на 7-дорожечную магнитную ленту). Двоично-десятичное кодирование очень удобно в тех случаях, когда требуется воспроизвести число в десятичной форме, так как в этом случае каждый двоично-десятичный символ нужно лишь преобразовать в соответствующее десятичное число, а затем вывести его на индикацию. (Для выполнения этой функции существуют специальные ИМС; в одном небольшом корпусе с простой топологией они содержат дешифратор двоично-десятичного кода, формирователи сигналов, буферный регистр и индикатор. На вход такой схемы нужно лишь подать логические уровни двоично-десятичного символа, после этого на ней высвечивается соответствующая цифра). По этой причине двоично-десятичное кодирование используется обычно при вводе и выводе цифровой информации. К сожалению, преобразование между двоично-десятичным и чисто двоичным кодом сложно, так как каждая десятичная цифра зависит от состояния почти всех двоичных разрядов и наоборот. Тем не менее двоичная арифметика настолько эффективна, что в большинстве ЭВМ вся входная информация преобразуется в двоичную форму, а обратное преобразование производится лишь при ее выводе. Представьте себе, сколько усилий было бы сэкономлено, если бы Homo sapiens имел 8 или 16 пальцев!
Упражнение 8.2. Преобразуйте в десятичный код следующие числа: а) 1110101,01102, б) 11,010101012, в) 2АН. Преобразуйте в двоичный код следующие числа: а) 102310, б) 102316. Преобразуйте в шестнадцатеричный код следующие числа: а) 102310, б) 1011101011012, в) 6145310.
Числа со знаком. Прямой (знаковеличинный) код. Рано или поздно возникнет необходимость представлять отрицательные числа в двоичном коде; в первую очередь это потребуется в устройствах, которые выполняют вычислительные операции. Самое простое — отвести один разряд (скажем, старший) под знак числа, а остальные использовать для представления его величины. Этот способ называется знаковеличинным или прямым кодом и соответствует обычной записи числа со знаком (табл. 8.1).
Он используется при выводе чисел на индикацию, а также в некоторых аналого-цифровых преобразователях (АЦП). Вообще же это не лучшая форма представления чисел со знаком, особенно при выполнении вычислений, так как в данном случае операции вычитания и сложения выполняются по-разному (т. е. сложение «не работает» для чисел со знаком). Кроме того, здесь могут присутствовать нули двух типов (+0 и —0), поэтому при выборе нужного из них следует быть очень внимательным.
Смещенный код. Смещенный код является вторым методом представления числа со знаком. Чтобы получить смещенный код какого-либо числа, нужно к этому числу, представленному в прямом коде, прибавить половину наибольшего возможного числа (табл. 8.1).
Последовательность всех чисел благодаря этой операции, начиная с наибольшего отрицат. числа и кончая наибольшим положит, числом, представляет простую двоичную прогрессию и может быть сформирована с помощью двоичных счетчиков. Информацию о знаке здесь также несет старший разряд, но нуль становится однозначным. Смещенный код используется в АЦП и ЦАП (преобразователях), однако он еще неудобен для выполнения вычислений.
Дополнительный код. При выполнении операций над целыми числами чаще используется представление чисел в форме дополнения до двух, или, иначе, в дополнительном коде. В такой системе положительные числа записываются просто как двоичные без знака, а отрицательные выражаются таким числом, которое, будучи добавлено к положительному числу той же величины, даст в результате нуль. Чтобы получить отрицательное число, нужно для каждого бита положительного числа сформировать дополнение до 1, или обратный код (т. е. вместо каждого 0 записать 1 и наоборот), и затем к полученному результату прибавить 1 (это даст дополнительный код). Из табл. 8.1 видно, что числа в дополнительном коде отличаются от чисел в смещенном коде инверсным значением старшего значащего разряда (СЗР). Точно так же как и при других формах представления, СЗР несет информацию о знаке. Здесь имеется только один нуль, который удобно представляется нулевыми состояниями всех разрядов (при очистке счетчика или регистра в них заносится нулевое значение).
Арифметика в дополнительном коде. Арифметические операции в дополнительном коде выполняются довольно просто. Чтобы получить сумму двух чисел, достаточно сложить соответствующие разряды (с учетом переноса), например
Чтобы вычесть В из А, нужно взять дополнительный код числа В и прибавить его к числу А (т. е. прибавить отрицательное число):
Умножение в дополнительном коде выполняется также непосредственно. Попробуйте сделать следующие упражнения.
Упражнение 8.3. Используя 3-разрядный дополнительный код, произведите двоичное умножение +2 на -3. Подсказка: ответ равен -6.
Упражнение 8.4. Покажите, что дополнительный код числа -5 равен +5.
Дополнительный код благодаря естественности вычислений в нем повсеместно используется в ЭВМ для выполнения арифметических операций над целыми числами (но следует отметить, что числа с «плавающей запятой» обычно используются в знаковеличинной форме, называемой знак-порядок-мантисса).
Код ГРЕЯ. Код, рассматриваемый ниже, используется в механических шифраторах угла поворота вала, а также в других устройствах. Он носит название кода Грея и обладает тем свойством, что при переходе от любого его состояния к следующему изменяется лишь один разряд (бит), что позволяет предотвратить ошибки, поскольку в данном случае при переходе между двумя закодированными значениями все разряды никак не могут измениться одновременно. Если бы использовался чисто двоичный код, то при переходе, например, от 7 к 8 на входе можно было бы получить число 15. Для формирования состояний кода Грея существует простое правило: начинать нужно с нулевого состояния, а затем для получения каждого следующего нужно выбрать самый младший разряд, изменение которого приводит к образованию нового состояния, и взять его инверсное значение.
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
Коды Грея могут содержать любое число разрядов. Они применяются при «параллельном кодировании» — методе быстродействующего аналого-цифрового преобразования (будет рассмотрен ниже). В следующем разделе мы покажем взаимные соответствия между кодом Грея и двоичным кодом.
8.04. Вентили и таблицы истинности
Комбинационная и последовательная (последовательностная) логика. Сущность цифровой электроники - выработка выходных цифровых сигналов в соответствии с входными. Например, сумматор может принять на свои входы два 16-разрядных числа и сформировать на выходе 16-разрядную сумму (плюс перенос). Можно сделать также схему для умножения двух чисел. Такого типа операции должен уметь выполнять процессор ЭВМ. Другая задача — сравнение двух чисел с целью удостовериться в том, что «все системы действуют нормально». Возможно, вы захотите дополнить паритетным битом число, подлежащее передаче по каналу связи, так, чтобы общее количество «единиц» в нем стало четным: проверка паритета на приемной стороне обеспечивает простой контроль правильности передачи. Еще одна типичная задача заключается в том, чтобы взять какие-либо числа, выраженные в двоичном коде, а затем воспроизвести их на экране, отперфорировать или отпечатать в виде десятичных знаков. Состояние выхода (или выходов) во всех этих задачах является предопределенной функцией состояния входа или входов. Задачи, относящиеся к этому классу, называются «комбинационными» и могут быть решены с помощью вентилей — устройств, которые выполняют операции булевой алгебры в системах с двумя состояниями (двоичных).
Существует другой класс задач, которые нельзя решить лишь путем формирования комбинационных функций текущих значений входных сигналов и которые требуют знания их прежнего состояния. Для решения этих задач необходимо применять «последовательные» схемы. К задачам такого типа относится преобразование строки двоичных разрядов из последовательной формы (один разряд следует за другим во времени) в параллельную группу разрядов, подсчет числа единиц, распознавание заданной определенной кодовой комбинации и последовательности битов, или, например, формирование одного выходного импульса после поступления четырех входных. Для решения всех этих задач требуется в какой-либо форме цифровая память. Основным устройством для построения этой памяти служит триггер (или мультивибратор с двумя устойчивыми состояниями). Рассмотрим вначале вентили и комбинационную логику, так как они являются основой для построения любых цифровых схем. При переходе к последовательным логическим устройствам мир цифровой техники станет значительно более интересным, однако и вентили сами по себе также весьма любопытны.
Вентиль ИЛИ. Выход вентиля ИЛИ имеет ВЫСОКИЙ уровень, если хотя бы на одном из его входов присутствует ВЫСОКИЙ уровень. Это можно выразить с помощью «таблицы истинности», представленной на рис. 8.2, где показан вентиль ИЛИ на 2 входа. В общем случае число входов не ограничено, однако в стандартном корпусе микросхемы обычно размещаются четыре 2-входовых вентиля, три 3-входовых или два 4-входовых. Например, на выходе 4-входового вентиля ИЛИ ВЫСОКИЙ уровень будет присутствовать в том случае, если он подан на любой из его входов. Для обозначения операции ИЛИ в булевой алгебре используется символ +. Функция «А ИЛИ В» записывается как А + В.
Рис. 8.2.
Вентиль И. Выход вентиля И имеет высокий уровень только в том случае, если ВЫСОКИЙ уровень присутствует на обоих его входах. Символическое изображение вентиля и его таблица истинности даны на рис. 8.3. Вентили И, выпускаемые промышленностью также как и вентили ИЛИ, могут иметь 3, 4, а иногда и большее число входов. Например, 8-входовой вентиль И вырабатывает на выходе ВЫСОКИЙ уровень только в том случае, если на всех его входах действует ВЫСОКИЙ уровень. Для обозначения операции И в булевой алгебре используется точка (·), которая может быть опущена, функция «А и В» записывается как А·В, или просто АВ.
Рис. 8.3.
Инвертор (функция НЕ). Иногда бывает нужно получить дополнение (инверсию) логического сигнала. Эту функцию выполняет инвертор — вентиль, который имеет только один вход (рис. 8.4). Для обозначения операции НЕ в булевой алгебре используется черта над символом или апостроф; «НЕ А» записывается как А¯ или А'. Для удобства вместо " для указания отрицания часто используются символы /, *, —, '; таким образом, НЕ А можно записать любым из следующих способов: А', —А, *А, /А, А*, А/. Мы используем в этой книге запись А'.
Рис. 8.4.
И-НЕ и ИЛИ-НЕ. Вентили могут совмещать инвертирование с выполнением функций И и ИЛИ. Далее будет показано, что такие вентили имеют более широкое распространение, чем просто И и ИЛИ (рис. 8.5).
Рис. 8.5.
Исключающее ИЛИ. Большой интерес представляет логическая функция «Исключающее ИЛИ», хотя она не относится к числу основных (рис. 8.6). На выходе вентиля «Исключающее ИЛИ» ВЫСОКИЙ уровень сформируется в том случае, если он будет подан на один из его входов (но не на оба одновременно). Другими словами, ВЫСОКИЙ уровень действует на выходе тогда, когда входы имеют различное состояние. Этот вентиль может иметь только два входа. Операция «Исключающее ИЛИ» подобна сложению двух бит по модулю 2.
Рис. 8.6.
Упражнение 8.5. Покажите, как вентиль «Исключающее ИЛИ» может быть использован в качестве «модифицируемого инвертора», который в зависимости от уровня на управляющем входе, может либо инвентировать входной сигнал, либо передавать его на выход без инверсии (буферировать).
Упражнение 8.6. Проверьте, действительно ли схемы, изображенные на рис. 8.7, преобразуют двоичный код в код Грея и наоборот.
Рис. 8.7. Параллельные преобразователи двоичного, кода в код Грея (а) и кода Грея в двоичный (б).
8.05. Схемы вентилей на дискретных элементах
Прежде чем перейти к вопросу использования вентилей, рассмотрим, как они строятся с помощью дискретных элементов. На рис. 8.8 показан диодный вентиль И.
Рис. 8.8.
Если на каком-либо его входе действует НИЗКИЙ уровень, то он будет действовать и на выходе, а ВЫСОКИЙ уровень на выходе возникает только в том случае, если он будет присутствовать на обоих входах. Эта схема обладает рядом недостатков: а) НИЗКИЙ уровень на выходе выше НИЗКОГО уровня на входе на величину падения на диоде. Естественно, слишком много диодов ставить нельзя, б) отсутствует «разветвление по выходу», т. е. возможность питать одним выходом несколько входов, так как выходная нагрузка действует на входной сигнал, в) низкое быстродействие, обусловленное резисторной нагрузкой. Вообще логические схемы, построенные на дискретных элементах, не обладают теми свойствами, которые присущи ИМС. Преимущества логических схем на ИМС связаны отчасти с применением специальной технологии (например, ионная имплантация), которая позволяет получать хорошие характеристики.
Простейшая схема транзисторного вентиля ИЛИ-НЕ показана на рис. 8.9.
Рис. 8.9.
Эта схема использовалась в семействе логических элементов РТЛ (резисторно-транзисторная логика), которые из-за низкой стоимости были популярны в 1960-х годах, но в настоящее время они совершенно не употребляются. ВЫСОКИЙ уровень, действующий по любому входу (или по обоим одновременно), откроет хотя бы один транзистор и на выходе возникнет НИЗКИЙ уровень. Поскольку по своей сути такой вентиль является инвертирующим, то для того, чтобы получить из него вентиль ИЛИ, к нему нужно добавить инвертор, как показано на рисунке.
8.06. Пример схемы с вентилями
Теперь попробуйте создать схему, которая решала бы логическую задачу, приведенную в качестве примера в гл. 1 и 2: гудок автомобиля должен включаться, когда открыта любая дверь, а водитель сидит в машине. Ответ будет очевидным, если сформулировать эту задачу таким образом: «На выходе действует ВЫСОКИЙ уровень, если открыта левая ИЛИ правая дверь И водитель сидит в машине», т. е. Q = (L + R)S. Как решать эту задачу с помощью вентилей, показано на рис. 8.10.
Рис. 8.10.
Выход ИЛИ имеет ВЫСОКИЙ уровень, когда одна ИЛИ другая дверь (или обе вместе) открыты. Если это так И водитель сидит в машине, Q имеет высокий уровень. Добавив транзистор, можно сделать так, чтобы эта схема включала гудок или замыкала контакт реле.
В реальных устройствах ключи, которые вырабатывают входные сигналы, обычно замыкают цепь на землю. (Это делается для сокращения монтажных связей, а также по другим причинам, которые, в частности, связаны с использованием широко распространенных логических элементов типа ТТЛ и вскоре будут рассмотрены.) Это означает, что при открывании дверей сигналы на входах будут иметь НИЗКИЙ уровень, т. е. мы будем иметь входы, использующие отрицательную логику. С учетом этого построим для данного примера новую схему, обозначим ее входы через L', R' и S'. Сначала здесь нужно определить, действует ли НИЗКИЙ уровень на каком-либо из входов (L', R'), связанных с дверцами автомобиля, т. е. состояние «оба входа имеют ВЫСОКИЙ уровень» нужно отличать от остальных. Это выполняется с помощью схемы И, следовательно, сигналы L и R' нужно подать на входы вентиля И. Выход будет иметь НИЗКИЙ уровень, когда любой из входов имеет НИЗКИЙ уровень. Назовем эту функцию ЛЮБОЙ'.
Теперь определим состояние, когда сигналы ЛЮБОЙ' и S' имеют НИЗКИЕ уровни, т. е. нужно отличить от остальных состояние, когда «оба входа имеют НИЗКИЙ уровень». Эта операция выполняется с помощью вентиля ИЛИ. Полученная схема показана на рис. 8.11.
Рис. 8.11.
Вместо вентиля ИЛИ мы пользовались вентилем ИЛИ-НЕ для того, чтобы иметь такой же выход, как и в предыдущей схеме, т. е. ВЫСОКИЙ уровень Q при желаемом состоянии. Но здесь произошло что-то странное: по сравнению с предыдущей схемой вместо вентиля И мы воспользовались вентилем ИЛИ (и наоборот). Этот случай подробно рассмотрим в разд. 8.07.
Упражнение 8.7. Определите, какие функции выполняют схемы, изображенные на рис. 8.12.
Рис. 8.12.
Взаимозаменяемость вентилей. При построении цифровых схем надо помнить, что из вентиля одного типа можно получить вентиль другого типа. Например, если вам нужен вентиль И, а у вас есть половина стандартной ИМС 7400 (4 И-НЕ на два входа), то вы можете произвести замену, как показано на рис. 8.13.
Рис. 8.13.
Второй вентиль используется в качестве инвентора, в результате этого получается функция И. Лучше понять эту идею вам помогут следующие упражнения.
Упражнение 8.8. Покажите, как сделать с помощью 2-входовых вентилей: а) НЕ из вентилей ИЛИ-НЕ, б) ИЛИ из вентилей ИЛИ-НЕ и в) ИЛИ из вентилей И-НЕ.
Упражнение 8.9. Покажите, как сделать: а) 3-входовую схему И с помощью схемы И на два входа, б) 3-входовую схему ИЛИ с помощью схемы ИЛИ на два входа, в) 3-входовую схему ИЛИ-НЕ с помощью схем ИЛИ-НЕ на два входа, г) 3-входовую схему И с помощью схемы И-НЕ на 2 входа.
Путем многократного использования инвентируемого вентиля (например, И-НЕ) одного типа можно реализовать любую комбинационную функцию. Однако это не относится к неинвентирующему вентилю, так как с его помощью функцию НЕ никаким способом получить нельзя. Именно по этой причине скорее всего вентили И-НЕ получили наибольшее распространение в логических схемах.
8.07. Логические обозначения при заданных уровнях
Вентиль И будет иметь ВЫСОКИЙ уровень на выходе, когда ВЫСОКИЙ уровень будет действовать на обоих его входах. Если ВЫСОКИЙ уровень обозначает «истину», то «истина» будет на выходе в том случае, если она присутствует на всех входах. Другими словами, при использовании положительной логики вентиль И выполняет логическую функцию И. То же самое касается и вентиля ИЛИ. Что произойдет, если «истину» будет обозначать НИЗКИЙ уровень, как это было в предыдущем примере? Вентиль И даст на выходе НИЗКИЙ уровень, если на любом из его входов была «истина» (НИЗКИЙ уровень), но это функция ИЛИ. С другой стороны, вентиль ИЛИ сформирует НИЗКИЙ уровень лишь в том случае, если «истина» будет на обоих его входах. Но это функция И! Какая путаница!
Существует два пути для разрешения этой проблемы. Первый заключается в том, что уяснив себе суть данной задачи цифрового проектирования, разработчик выбирает такой тип вентиля, который позволит получить требуемый выход, что и было сделано нами ранее. Например, если вам нужно определить, имеет ли один из трех входов НИЗКИЙ уровень, используйте 3-входовой вентиль И-НЕ. По всей вероятности, этим методом пользуется большинство разработчиков цифровых схем. Следуя этим путем, вы начертите вентиль И-НЕ, даже если по отношению к своим входам он выполняет функцию ИЛИ-НЕ (при отрицательной логике). Вероятно, вы при этом обозначите входы, как показано на рис. 8.14.
Рис. 8.14.
В данном примере сигналы сброса — СБРОС' (CLEAR)', ОС' — ОБЩИЙ СБРОС, MR' (master reset) и УСТАНОВКА В «0» (RESET), поступающие из различных точек схемы, будут иметь уровни отрицательной логики. Выходной сигнал СБРОС, представленный в положительной логике, будет подаваться на различные устройства, которые должны сбрасываться, если любой из сигналов установки в исходное состояние имеет НИЗКИЙ уровень («истина»).
Другой способ решения задачи сигналов отрицательной логики состоит в использовании метода «заданных уровней». Если вентиль И выполняет функцию ИЛИ, используя на входах отрицательную логику, то изобразите его, как показано на рис. 8.15.
Рис. 8.15.
Вентиль ИЛИ на 3 входа с отрицательными входными сигналами аналогичен по выполняемой функции 3-входовому вентилю И-НЕ. Эта эквивалентность представляет собой важный принцип — свойство логических цепей, который называется теоремой Моргана. Ниже мы кратко рассмотрим некоторые полезные соотношения, идентичные цепи, а сейчас вам достаточно знать, что вы можете заменять И на ИЛИ и наоборот, проинвертировав при этом выход и все входы. На первый взгляд логика заданных уровней может показаться малопривлекательной, поскольку при ее использовании начертание вентилей приобретает странный вид. Но она лучше, чем рассмотренный выше способ, так как логические функции в такой схеме ясно обозначены, применяя эту схему в течение некоторого времени, вы найдете, что она весьма удобна, и не захотите использовать ничего другого. Попробуйте снова решить пример с автомобильной дверцей с помощью логики заданных уровней (рис. 8.16).
Рис. 8.16.
Левый вентиль определяет, когда L или R имеют «истинное» значение (т. е. НИЗКИЙ уровень), и вырабатывает выходной сигнал в отрицательной логике. Второй вентиль дает на выходе ВЫСОКИЙ уровень, если оба входных сигнала (L + R) имеют «истинное» значение, т. е. НИЗКИЙ уровень. Согласно теореме Моргана (через некоторое время она вам уже не потребуется, так как вы будете опознавать эти вентили как равноценные), первый вентиль представляет собой И, а второй вентиль ИЛИ точно так же, как и в ранее изображенной схеме. Следует отметить здесь два важных момента:
1. Термин «отрицательная логика» не означает, что логические уровни имеют отрицательную полярность. Он лишь говорит, что «истинное» утверждение определяется тем из двух состояний, которое имеет меньший уровень (НИЗКИЙ).
2. При символическом изображении вентиля предполагается, что он использует положительную логику. Выполняющий функцию ИЛИ для сигналов отрицательной логики вентиль И-НЕ, может изображаться либо как И-НЕ, либо с использованием логики заданных уровней с обозначением в форме ИЛИ с символами инверсии на входах (маленькие кружки). В последнем случае эти кружки обозначают инверсию входных сигналов, которые поступают на вентиль ИЛИ, работающий при положительной логике, согласно первоначальному определению.
Примечание. Логические функции И и ИЛИ не следует путать с указанными в законах эквивалентными понятиями. В увесистом томе правил, известном под названием «Слова и фразы», свыше 40 страниц посвящается ситуациям, в которых И можно использовать как ИЛИ.
Например, «ИЛИ в случае необходимости можно трактовать как И, а И как ИЛИ». Однако это не имеет ничего общего с теоремой Моргана!