8.1. Логика: числа, коды, элементы
Зачем сигналы превращают в числа и почему цифровая линия не копит шум; два уровня напряжения, запас помехоустойчивости и паспортные уровни семейств; двоичная, шестнадцатеричная и восьмеричная запись, двоично-десятичный код, числа со знаком и код Грея; логические элементы и их таблицы истинности, вентили из диодов и транзисторов, изображение схем в логике заданных уровней.
8.1.1Цифровые и аналоговые сигналы
- Внутри цифровой схемы сигнал бывает только двух видов: ВЫСОКИЙ уровень или НИЗКИЙ.
- Связь с непрерывным миром дают два преобразователя: АЦП превращает напряжение в числа, ЦАПЦАП — цифроаналоговый преобразователь: превращает двоичный код в пропорциональный ток или напряжение (раздел 9.3). — числа в напряжение.
- Цифровую линию можно сделать сколь угодно длинной: каждый узел заново решает «0 или 1», и шум дальше не идёт (ИКМ).
- Пример масштаба: компакт-диск хранит отсчёты по 16 бит через каждые ≈23 мкс — миллиарды бит на одном диске.
Начнём с житейского наблюдения. Если переписывать магнитофонную кассету с кассеты, а потом копию — ещё раз, к пятому поколению запись тонет в шипении: каждая перезапись добавляет свой шум, и убрать его потом нечем. А файл с песней можно пересылать из телефона в телефон сколько угодно раз — сотая копия звучит так же, как первая. Разница не в качестве аппаратуры, а в способе представления сигнала, и именно с неё удобно начинать разговор о цифровой электронике.
Почти всё, что мы строили до этой главы, — фильтры, интеграторыИнтегратор — схема, выход которой пропорционален интегралу входа по времени: ., выпрямители, усилители на транзисторах и ОУ, — обрабатывало напряжения, которые могут принимать любое значение в своём диапазоне. Это естественный выбор, когда непрерывен сам сигнал: звук с микрофона, температура с термопары, ток фотодиодаФотодиод — диод, обратный ток которого пропорционален падающему свету; быстрый (наносекунды), но ток мал., потенциал электрода в химической или биологической пробе.
Есть, однако, сигналы, которые по природе «штучные»: отдельные импульсы от счётчика частиц, нажатия кнопок клавиатуры, биты, которыми обмениваются компьютер и принтер. Им подходит цифровая электроника — схемы, которые хранят и перерабатывают информацию, записанную только «единицами» и «нулями».
Граница миров: АЦП и ЦАП
Чаще всего обе электроники работают в одной системе. Аналоговую величину, которую нужно запомнить или обсчитать на процессоре, превращают в поток чисел аналого-цифровым преобразователем (АЦП); обратный путь, от чисел к напряжению, проделывает цифро-аналоговый преобразователь (ЦАП). Типичный пример — метеостанция на микроконтроллере: она опрашивает датчики, по результатам включает обогрев или вентиляцию и складывает измерения в память.
Почему цифровая линия не копит шум
Вернёмся к кассете. Когда звук или картинку передают в аналоговом виде — по кабелю, по радио, через перезапись, — к ним по дороге неизбежно примешивается шум. Приёмник получает сумму «сигнал плюс шум» и не имеет способа разделить её обратно: шум выглядит так же, как полезные колебания.
Поступим иначе: будем через равные промежутки времени измерять амплитуду сигнала, записывать результаты числами и передавать эти числа двумя уровнями напряжения. Приёмник должен лишь различить, какой уровень пришёл. Пока шум в канале не столь велик, чтобы «единица» превратилась в «ноль», принятые числа совпадают с отправленными бит в бит, и ЦАП на приёме восстанавливает в точности исходный сигнал. Такой способ называется импульсно-кодовой модуляциейИКМ: сигнал заменяют последовательностью чисел — отсчётов амплитуды через равные промежутки времени — и передают эти числа двоичными уровнями. (ИКМ).
Особенно ярко выигрыш виден на длинной линииДлинная линия — соединение, время пробега сигнала по которому сравнимо со временем фронта или больше; тогда важны волновое сопротивление и отражения. с промежуточными узлами-ретрансляторами. Аналоговый ретранслятор вынужден усиливать всё, что пришло, — вместе с уже накопленным шумом. Цифровой поступает по-другому: он заново решает, ноль пришёл или единица, и отправляет дальше свежие, чистые уровни. На этом построены магистральная телефония, связь с межпланетными аппаратами и, конечно, компакт-диск: на диске диаметром 12 см стереозвук хранится 16-разрядными отсчётами, следующими через ≈23 мкс, — всего несколько миллиардов бит.
| Аналоговый узел | Цифровой узел (ИКМ) | |
|---|---|---|
| Работа узла | усиливает принятую смесь сигнала и шума | решает «0 или 1» и посылает новый чистый уровень |
| Шум с ростом длины | мощности шумов всех участков складываются | не переходит на следующий участок |
| Что всё-таки копится | шум | редкие ошибочные решения |
| От чего зависит качество | ухудшается с каждым новым участком | определяется разрядностью отсчётов |
Цифра выручает и там, где задача на вид чисто аналоговая. Термометр с дешёвым нелинейным датчиком можно снабдить микроконтроллером, который хранит калибровочную таблицу и пересчитывает по ней каждое показание, — нелинейность исчезает без единой прецизионной детали. Таких применений будет много, и перечислять их заранее нет смысла: они сами появятся в следующих разделах.
Студийный аудиоинтерфейс пишет звук в два канала, по 24 бита на отсчёт, с частотой дискретизации 48 кГц. Какой поток данных он отдаёт в компьютер (без служебных битов) и сколько бит займёт часовая запись?
Решение
За секунду в каждом канале делается отсчётов по 24 бита, каналов два:
Подводный кабель разбит на 32 одинаковых участка с усилительными пунктами. На каждом участке отношение сигнал/шум 55 дБ, шумы участков независимы. а) Каким будет отношение сигнал/шумОтношение сигнал/шум (С/Ш) — дБ, где оба напряжения — эффективные и измерены в одной оговорённой полосе. на берегу, если пункты — аналоговые усилители? б) Если пункты цифровые и каждый ошибается в среднем в одном бите из , какова вероятность ошибки бита в конце линии?
Решение
а) Каждый аналоговый пункт усиливает и сигнал, и шум, накопленный до него; к этому добавляется шум нового участка. Мощности независимых шумов складываются, поэтому на берегу шум в 32 раза мощнее, чем после одного участка: дБ — потеряно 15 дБ.
б) Цифровой пункт выдаёт чистые уровни, так что шум участков не суммируется; суммируются только редкие ошибки решения. Вероятность ошибки одного пункта , и при малых
8.1.2Логические состояния
- В любой точке цифровой схемы напряжение находится в одном из двух состояний: ВЫСОКОМ (В) или НИЗКОМ (Н).
- Если «истину» изображает В — это положительная логикаСоглашение, при котором «истину» (активное состояние) изображает ВЫСОКИЙ уровень на проводе.; если Н — отрицательная, и над именем сигнала ставят черту.
- Уровни — это полосы, а не точки; запас помехоустойчивостиНаибольшая помеха, которая при самом неблагоприятном сочетании условий ещё не превращает НИЗКИЙ уровень в ВЫСОКИЙ или наоборот; считают по паспортным уровням: и . , .
- Для ТТЛТранзисторно-транзисторная логика: биполярное семейство, питание +5 В, порог ≈1,3 В, заметный ток покоя. Серии LS, ALS, AS, F. запас — 0,4 В в каждом состоянии; считают его по худшим паспортным значениям, а не по типовым.
Подключите кнопку к входу микроконтроллера самым распространённым способом: вывод через резистор подтянут к питанию, а кнопка замыкает его на землю. Пока кнопку не трогают, контроллер читает ВЫСОКИЙ уровень, нажали — НИЗКИЙ. Больше этот провод ничего сообщить не может: никаких «наполовину нажата». Так устроена любая цифровая схема: в каждой её точке, как правило, транзистор либо заперт, либо полностью открыт, и информацию несёт напряжение (реже — ток), которое бывает ВЫСОКИМ или НИЗКИМ.
Одним таким проводом передаётся один бит (от binary digit — двоичная цифра). Смысл бита может быть очень разным:
- отдельный разряд какого-то числа;
- контакт замкнут или разомкнут;
- импульс пришёл или не пришёл;
- измеренная величина больше порога или меньше;
- событие уже наступило или ещё нет;
- команду надо выполнять или не надо.
Какой уровень считать «истиной»
Двум состояниям напряжения сопоставляют два значения булевой алгебрыБулева алгебра — логика переменных со значениями 1 и 0: операции И, ИЛИ, НЕ. — ИСТИНУ и ЛОЖЬ. Сопоставить можно двумя способами. Если активному, «истинному» состоянию сигнала соответствует ВЫСОКИЙ уровень, говорят, что линия работает в положительной логике; если НИЗКИЙ — в отрицательной.
Наша кнопка — как раз отрицательная логикаСоглашение, при котором «истину» изображает НИЗКИЙ уровень; имя такого сигнала пишут с чертой: . Отрицательного напряжения здесь нет.: утверждение «кнопка нажата» истинно тогда, когда на проводе НИЗКИЙ уровень. Поэтому такой сигнал называют с чертой над именем: . Читается это так: провод ВЫСОКИЙ, когда кнопка не нажата.
Что здесь что (3)
- Подтягивающий резистор. задаёт ВЫСОКИЙ уровень, пока кнопка отпущена; ток через него идёт лишь при нажатии — 0,5 мА
- Кнопка. при нажатии соединяет провод с землёй — уровень падает до НИЗКОГО; «истина» изображается НИЗКИМ уровнем
- Вход контроллера. видит сигнал — активный НИЗКИЙ уровень
Откуда схема «знает», что означает пришедший бит? Из того, к чему подключён провод, — точно так же, как в аналоговом устройстве выход конкретного ОУ изображает конкретную величину. У цифровой техники здесь есть лишняя степень свободы: по одним и тем же проводам можно по очереди передавать разные данные и даже в разные стороны (мультиплексирование); тогда вместе с данными посылают служебные биты — адрес получателя или признак состояния. Таких устройств будет много, а пока условимся, что у каждой схемы одна задача и ей известно, откуда берутся её входы и куда уходят выходы.
Здесь кроется ловушка обозначений. В булевой алгебре 1 значит ИСТИНА, 0 — ЛОЖЬ. Но электронщики тем же символом 1 часто называют просто ВЫСОКИЙ уровень, а 0 — НИЗКИЙ. При положительной логике оба смысла совпадают, при отрицательной — расходятся, и путаница обеспечена.
Уровни — это полосы напряжений
ВЫСОКИЙ и НИЗКИЙ — не два точных напряжения, а две полосы. Возьмём быстрые КМОП-микросхемы серии HC с питанием +5 В: всё от нуля до 1,5 В их вход считает НИЗКИМ уровнем, всё от 3,5 В до питания — ВЫСОКИМ. Собственные же выходы HC отстоят от земли и от +5 В всего на десятые доли вольта — это остаточное напряжение открытого МОП-транзистораМОП-транзистор (металл — окисел — полупроводник) — полевой транзистор, затвор которого отделён от канала тонким слоем стекла ; ток затвора практически нулевой (входное сопротивление больше Ом)..
Широкие полосы на входе — не небрежность, а запас. Изготовитель обязан гарантировать работу при разбросе параметров от экземпляра к экземпляру, при нагреве и охлаждении, при разной нагрузке и плавающем питании, а также при помехах — посторонних сигналах, которые подмешиваются к полезному по пути через ёмкостные связиЁмкостная связь (связь по переменному току) — сигнал передаётся через разделительный конденсатор, который не пропускает постоянную составляющую., наводки от соседних проводников и общий провод земли.
Главное свойство цифрового входа: приняв искажённый сигнал, он выносит решение «В» или «Н», и на выходе микросхемы снова стоят чистые уровни. Помеха, не сумевшая перевести сигнал через порог, отбрасывается целиком на первой же ступени и дальше не распространяется. В этом смысле цифровая схема к помехам нечувствительна.
Насколько большую помеху можно выдержать, говорит помехоустойчивость: наибольшая добавка к сигналу, которая даже в самом неудачном сочетании условий ещё не приводит к ошибке. Считают её по гарантированным, паспортным уровням, отдельно для НИЗКОГО и для ВЫСОКОГО состояния:
Посчитаем для ТТЛ. Паспорт обещает, что вход поймёт как НИЗКИЙ любое напряжение до 0,8 В и как ВЫСОКИЙ — любое выше 2,0 В, а выход в худшем случае даёт не более 0,4 В и не менее 2,4 В. Запас получается 0,4 В в обоих состояниях. Живые микросхемы обычно лучше: типичные выходные уровни около 0,2 и 3,4 В, а реальный порог входа лежит около 1,3 В.
Семейства логики заметно различаются по запасу: у КМОПКМОП — комплементарные МОП-транзисторы: n- и p-канальные приборы на одном кристалле. Основа почти всей цифровой логики и аналоговых ключей. он больше, чем у ТТЛ, у быстрой ЭСЛ — меньше. Но паспортный запас — только половина дела; вторая половина — какой величины помехи создаёт сама схема. Это зависит:
- от того, какие токи умеют отдавать выходные каскады;
- от индуктивности общего провода;
- от длины шин и соединительных линий;
- от крутизныКрутизна (передаточная проводимость) — сколько ампер выходного тока даёт вольт входного напряжения, в сименсах; у биполярного транзистора мА/В на миллиампер. фронтов: перезаряд ёмкости нагрузки за наносекунды вызывает выбросы на земле и «звон» на линиях.
Подробно об этом — в разделе 9.2.
Четыре числа каждого семейства
Чтобы соединять микросхемы, про каждое семейство надо помнить четыре напряжения: два гарантированных выходных (для НИЗКОГО и ВЫСОКОГО состояния) и два входных, начиная с которых вход обязан понять уровень правильно. На шкале ниже они показаны для самых ходовых семейств при питании +5 В, а в таблице — вместе с 4000B при +15 В и ЭСЛЭмиттерно-связанная логика: самое быстрое биполярное семейство (до ~500 МГц), питание −5,2 В, уровни около −0,9 и −1,75 В..
Заметьте: ВЫСОКИЙ уровень по определению положительнее НИЗКОГО, даже если оба отрицательны. Так у ЭСЛ 10K с питанием −5,2 В: ВЫСОКИЙ уровень около −0,9 В, НИЗКИЙ около −1,75 В, порог около −1,3 В.
| Семейство (питание) | max | min | max | min | Порог (тип.) |
|---|---|---|---|---|---|
| ТТЛ LS (+5 В) | 0,5 В (8 мА) | 2,7 В | 0,8 В | 2,0 В | 1,3 В |
| КМОП HC (+5 В) | 0,1 / 0,33 В* | 4,4 / 3,84 В* | 1,5 В | 3,5 В | ≈2,5 В |
| КМОП HCT (+5 В) | 0,1 / 0,33 В* | 4,4 / 3,84 В* | 0,8 В | 2,0 В | ≈1,4 В |
| КМОП 4000B (+15 В) | 0,05 В | 14,95 В | 4 В | 11 В | ≈7,5 В |
| ЭСЛ 10K (−5,2 В) | −1,63 В | −0,98 В | −1,475 В | −1,105 В | ≈−1,3 В |
Выход КМОП-элемента HC (питание 5 В) управляет одновременно входом другого элемента HC и светодиодом, который потребляет 4 мА, когда выход ВЫСОКИЙ. По паспорту при нагрузке 20 мкА выход гарантирует В и В, при 4 мА — В. Вход HC понимает НИЗКИЙ уровень до 1,5 В, ВЫСОКИЙ — от 3,5 В. Найдите запас в НИЗКОМ состоянии (светодиод погашен, нагрузка — только вход), запас в ВЫСОКОМ без светодиода и запас в ВЫСОКОМ при горящем светодиоде.
Решение
НИЗКОЕ состояние: светодиод не горит, выход нагружен только входом КМОП и опускается не выше 0,1 В. Вход уверенно видит НИЗКИЙ уровень до 1,5 В: В.
ВЫСОКОЕ без светодиода: В. Со светодиодом выход отдаёт 4 мА, и гарантия снижается до 3,84 В: В — почти втрое меньше. Вывод: если выход, помимо логических входов, тянет заметный ток, запас по ВЫСОКОМУ уровню у HC тает. Светодиод лучше питать через отдельный буферБуфер — повторитель с : огромное входное и малое выходное сопротивление, развязывает источник и нагрузку. или подключать катодом к выходу, зажигая НИЗКИМ уровнем.
Модуль датчика с выходом ТТЛ серии LS (гарантированно В, В) подключили ко входу сдвигового регистраСдвиговый регистр, на вход которого заведена сумма по модулю 2 нескольких разрядов, выдаёт псевдослучайную последовательность длиной до тактов — это цифровой генератор шума. серии HC, питаемого от +5 В. Как оценить такое соединение?
Решение
НИЗКИЙ уровень: В, запас целый вольт. ВЫСОКИЙ: регистру HC нужно не меньше 3,5 В, а выход LS обещает лишь 2,7 В (типично около 3,4 В). Скорее всего, макет заработает, но гарантии нет, и при нагреве или другой партии микросхем пойдут сбои — это ошибка проекта. Исправление: взять регистр серии HCT ( В, запас 0,7 В) или подтянуть линию резистором к +5 В.
8.1.3Числовые коды
- В двоичной записи каждая цифра умножается на свою степень двойки: .
- Одна шестнадцатеричная цифра — ровно четыре бита, байт — две цифры: .
- Двоично-десятичный кодBCD: каждая десятичная цифра кодируется отдельно четырьмя битами; . (BCD) отводит по четыре бита каждой десятичной цифре: удобно для индикаторов, расточительно для вычислений.
- Отрицательные числа хранят в дополнительном кодеДополнение до двух: получают инверсией всех битов и прибавлением 1. Стандарт целочисленной арифметики: сложение и вычитание — обычным двоичным сумматором. («инвертировать и прибавить 1»); в коде Грея соседние числа отличаются одним битом.
АЦП из первого пункта выдаёт не «да» и «нет», а числа: 2048, 2051, 2049… Один бит умеет сказать «кнопка нажата» — а как изобразить уровнями напряжения целое число, дробь, отрицательную величину? Ответ — набор кодов, и выбор кода сильно влияет на то, насколько проста будет схема.
Двоичная система
Привычная десятичная запись — это сумма: каждая цифра умножается на степень десяти, которая зависит от её места относительно запятой. Например,
Каждая двоичная цифра — это и есть бит. Индекс основания ставят, когда без него можно ошибиться: строка «10» означает десять, два или шестнадцать — смотря в какой системе её читать.
Делим число на 2 и записываем остатки, пока частное не станет нулём: , остаток 1; , остаток 1; , остаток 0; , остаток 1. Остатки появляются начиная с младшего значащего разрядаМЗР — разряд с наименьшим весом (); старший (СЗР) — с наибольшим. (МЗРМЗР — младший значащий разряд: самый мелкий шаг преобразователя, . Погрешности ЦАП и АЦП меряют в долях МЗР.), поэтому читаем их снизу вверх: .
Дробную часть, наоборот, умножают на 2 и каждый раз забирают целую часть произведения — она и есть очередной разряд после запятой: ; ; . Итого . Многие дроби (например, ) в двоичной системе бесконечны — отсюда знаменитые «» в программах.
Шестнадцатеричная и восьмеричная запись
Двоичные числа быстро становятся длинными и неудобочитаемыми, поэтому их сокращают. Самый распространённый способ — шестнадцатеричная запись: биты разбивают на четвёрки начиная от запятой, и каждую четвёрку (значение от 0 до 15) записывают одним знаком — цифрами 0…9 и буквами A…F. Скажем, .
Удобство в том, что четвёрки укладываются в байт без остатка: байт (8 бит) — ровно две шестнадцатеричные цифры, 16-разрядное слово — четыре, 32-разрядное — восемь. Поэтому вся документация на микроконтроллеры и память пользуется именно этой записью.
- Символы текста обычно занимают по байту. В коде ASCII заглавная «A» — это (пишут и так: 41h, 0x41), «B» — 42h и т. д. Слово «volt» поместится в два 16-битных слова: 766Fh и 6C74h.
- Память ёмкостью 64K = 65 536 байт адресуется двумя байтами, потому что : первый адрес 0000h, последний FFFFh, вторая половина начинается с 8000h, последняя четверть — с C000h. Микроконтроллер с 32 КБ флеш-памяти занимает адреса 0000h…7FFFh.
Восьмеричная запись (тройки битов, цифры 0…7) осталась от старых машин со словами длиной 12 и 36 бит и 6-битными символами: такой символ — ровно две восьмеричные цифры. В байтовом мире она неудобна, потому что ни 8, ни 16 на 3 не делятся, — это хорошо видно в упражнении ниже. Встретить её сегодня можно, например, в правах доступа к файлам в Unix (755, 644).
Микроконтроллер отправляет по последовательному порту ответ «OK». В коде ASCII «O» = 4Fh, «K» = 4Bh. Запишите в восьмеричной системе: а) байт «O»; б) байт «K»; в) 16-разрядное слово «OK» (старший байт — «O»); г) слово «KO». Восьмеричные числа вводите строкой цифр. Почему восьмеричная запись слова не получается склейкой записей байтов?
Решение
а) ; режем на тройки справа: . б) .
в) ; тройки справа: . г) .
Склейка байтов дала бы 117113, а не 47513. Дело в том, что 8 бит — это две полные тройки и ещё два бита. Младший байт даёт две младшие восьмеричные цифры целиком, а третья тройка собирается из двух старших битов младшего байта и младшего бита старшего; все тройки старшего байта оказываются сдвинутыми. Одна и та же буква в старшем и младшем байте записывается по-разному — главное неудобство восьмеричной системы. В шестнадцатеричном виде слово 4F4Bh — это честные «4F» и «4B».
Двоично-десятичный код
Можно поступить иначе: не переводить число целиком, а закодировать четырьмя битами каждую десятичную цифру по отдельности. Так, — это двоично-десятичный код (BCD). С обычным двоичным представлением он не совпадает: . Если угодно, у разрядов BCD справа налево веса 1, 2, 4, 8, затем 10, 20, 40, 80, затем 100, 200, 400, 800 и так далее.
| BCD | Обычный двоичный | |
|---|---|---|
| Число 409 | (12 бит) | (9 бит) |
| Расход разрядов | тетрада умеет 0…15, а используется только 0…9 | используются все комбинации |
| Вывод на индикатор | просто: каждая тетрада сразу даёт цифру | нужно громоздкое преобразование |
| Вычисления | сложные правила коррекции | простые и быстрые — так считают процессоры |
Сильная сторона BCD — ввод и вывод. Таймер микроволновки или часы на семисегментных индикаторах хранят каждую цифру отдельной тетрадой и выводят её через дешифраторПо -разрядному коду возбуждает один из выходов (у '138 — выбранный выход НИЗКИЙ). без всякой арифметики; выпускаются даже индикаторы, в корпус которых встроены регистр-защёлка, дешифратор BCD и формирователи тока. А вот переход между BCD и обычным двоичным кодом труден: каждая десятичная цифра зависит почти от всех двоичных разрядов сразу.
И всё же двоичная арифметика настолько проще, что вычислительные машины переводят введённые данные в двоичную форму в самом начале и возвращаются к десятичным цифрам только при выдаче результата человеку.
а) Переведите в десятичную систему , и . б) Переведите в двоичную систему и (двоичные ответы — строкой цифр, без ведущих нулей).
Решение
а) ; ; .
б) , то есть (делением на 2 получаются остатки 1, 0, 1, 1, 0, 0, 0, 1, 1, 1 — от младшего разряда). С считать вообще не нужно: каждую шестнадцатеричную цифру заменяем её четвёркой бит, .
Переведите в шестнадцатеричную систему: а) ; б) ; в) .
Решение
а) , то есть . Тот же ответ даёт двоичная запись из предыдущего упражнения, разрезанная на четвёрки: .
б) Четвёрки уже разделены: , , ; ответ .
в) , остаток 14 (E); , остаток 15 (F); , остаток 10 (A); , остаток 12 (C). Остатки читаем от последнего: . Такие «словечки» из букв A…F программисты охотно ставят метками в памяти — их легко заметить в дампе.
Отрицательные числа
Как только схема начинает вычитать или измерять величины обоих знаков, нужны отрицательные числа. В ходу три способа их записи; все три для 4-разрядных чисел собраны в таблице ниже.
Прямой кодЗапись «знак и модуль»: старший бит — знак, остальные — модуль числа. Есть два нуля, и . («знак и модуль»). Старший разряд отдают под знак, остальные хранят модуль — ровно так, как мы пишем числа на бумаге. Им пользуются при выводе на индикатор и в некоторых АЦП.
Считать в прямом коде неудобно: сложение и вычитание требуют разных действий в зависимости от знаков (обычный двоичный сумматорСумматор — инвертирующий усилитель с несколькими входными резисторами в одну мнимую землю: . даёт неверный результат), а нулей получается два, и , и их надо отождествлять.
Смещённый кодКод со знаком, в котором к числу прибавлена половина диапазона (для 4 бит — 8); числа от самого отрицательного до самого положительного идут подряд. Применяется в АЦП и ЦАП.. Ко всем числам прибавляют половину диапазона (для 4 бит — 8). Тогда коды идут подряд от самого отрицательного числа до самого положительного — такую последовательность выдаёт обычный двоичный счётчик, проходящий диапазон снизу вверх.
Знак виден по старшему разряду, нуль один. Смещённый код встречается в АЦП и ЦАП с двуполярным входом или выходом; для вычислений он тоже неудобен.
Дополнительный код (дополнение до двух) — общепринятый способ хранить целые со знаком. Положительные числа записываются как обычно, а отрицательное число — таким кодом, который в сумме с противоположным положительным даёт нуль, если отбросить перенос из старшего разряда.
Рецепт: чтобы получить , инвертируйте все биты (это обратный кодДополнение до единицы: все биты числа проинвертированы., дополнение до единицы) и прибавьте 1. В таблице видно, что дополнительный код отличается от смещённого только старшим разрядом. Нуль единственный и записывается одними нулями — именно в этом состоянии оказывается сброшенный регистр или счётчик.
| Число | Прямой код | Смещённый код | Дополнительный код |
|---|---|---|---|
| +7 | 0111 | 1111 | 0111 |
| +6 | 0110 | 1110 | 0110 |
| +5 | 0101 | 1101 | 0101 |
| +4 | 0100 | 1100 | 0100 |
| +3 | 0011 | 1011 | 0011 |
| +2 | 0010 | 1010 | 0010 |
| +1 | 0001 | 1001 | 0001 |
| 0 | 0000 | 1000 | 0000 |
| −1 | 1001 | 0111 | 1111 |
| −2 | 1010 | 0110 | 1110 |
| −3 | 1011 | 0101 | 1101 |
| −4 | 1100 | 0100 | 1100 |
| −5 | 1101 | 0011 | 1011 |
| −6 | 1110 | 0010 | 1010 |
| −7 | 1111 | 0001 | 1001 |
| −8 | — | 0000 | 1000 |
| (−0) | 1000 | — | — |
Как считать в дополнительном коде
Сложение выполняется обычным двоичным сумматором по всем разрядам, включая знаковый; перенос из старшего разряда выбрасывается. Например, плюс :
- Запишите вычитаемое
- Инвертируйте все битыобратный код
- Прибавьте 1дополнительный код
- Сложите с
Вычитание, таким образом, сводится к сложению: — это плюс дополнительный код , и отдельный вычитатель не нужен. Умножать тоже можно напрямую, если оба сомножителя предварительно расширить знаковым разрядом до двойной длины. Из-за этой простоты все процессоры хранят целые числа в дополнительном коде. Числа с плавающей запятой устроены иначе: они хранятся как «знак — порядок — мантисса», и мантисса записана в прямом коде.
Перемножьте в 4-разрядном дополнительном коде и . Расширьте оба сомножителя знаком до 8 разрядов, перемножьте их как числа без знака и оставьте младшие 8 бит. Введите младшие 4 разряда результата строкой цифр (ведущий ноль можно не вводить).
Подсказка
Должно получиться .Решение
(знаковое расширение — копируем старший бит влево), это 254 без знака; , это 253. Произведение . Младшие 8 бит: , младшие 4 — , тоже (результат уместился в 4 разряда; в общем случае произведению -разрядных чисел нужно разрядов).
Почему это работает: , а все слагаемые, кратные , при отбрасывании старших бит исчезают. Без расширения знаком и читались бы как 14 и 13, и младшие биты произведения дали бы случайно, а младший байт — неверное число.
Проверьте на 4-разрядном коде, что операция «инвертировать и прибавить 1», применённая дважды, возвращает исходное число: начните с . Что произойдёт с , и почему это опасно в программах?
Решение
; инверсия , плюс единица . Ещё раз: инверсия , плюс единица . В общем виде инверсия -разрядного даёт , прибавление единицы — ; повторив, получаем по модулю .
С : инверсия , плюс единица — опять . Числа в 4 разрядах просто нет: диапазон несимметричен. Поэтому смена знака (или взятие модуля) самого отрицательного числа даёт его же, отрицательное, — известный источник ошибок, например при вычислении абсолютной величины отсчёта АЦП.
Код Грея
Представьте ручку громкости с кодовым диском или линейку датчика положения в станке. Пусть разметка сделана обычным двоичным кодом и ползунок переходит из позиции 3 () в позицию 4 (). Меняются все три дорожки, а идеально одновременно три контакта или три фотоприёмника не переключаются никогда. В момент перехода можно прочитать любое число — , , … — и система управления решит, что ручку рывком провернули.
Код ГреяКод, в котором соседние числа отличаются ровно одним разрядом: 000, 001, 011, 010, 110… Исключает ложные промежуточные коды в датчиках угла и счётчиках. устраняет беду: в нём любые два соседних числа различаются ровно одним разрядом. На стыке позиций меняется одна дорожка, и в худшем случае мы прочтём либо старое, либо новое значение — промежуточного ложного кода не существует.
Разрядность кода Грея может быть любой. Кроме датчиков угла и положения, он нужен там, где счётчик читается асинхронно, и в параллельных АЦП (о них — в разделе 9.3). Как переводить двоичный код в код Грея и обратно на вентилях, показано в следующем пункте.
а) Запишите 4-разрядным кодом Грея число 13. б) Какое число изображает код Грея ? в) Запишите число 8-разрядным смещённым и 8-разрядным дополнительным кодом (двоичные ответы — строкой цифр, ведущие нули можно не вводить).
Решение
а) . Старший разряд кода Грея повторяет старший двоичный, каждый следующий — Исключающее ИЛИ двух соседних двоичных: , , , ; ответ .
б) Обратно: , затем : , , , , то есть . Проверка по правилу построения: 0000, 0001, 0011, 0010, 0110 — пятая комбинация, число 4.
в) Смещённый: . Дополнительный: , инверсия , плюс единица (без знака это ). Как и должно быть, коды различаются одним старшим битом.
Часы-календарь хранят номер года 2026 в двоично-десятичном коде. Сколько бит занимает такая запись и сколько бит понадобилось бы в обычном двоичном коде? Введите также двоичную запись 2026.
Решение
BCD: четыре цифры по четыре бита, — 16 разрядов. Двоичный: , нужно 11 разрядов; . На одну десятичную цифру BCD тратит 4 бита вместо теоретических — примерно на 17 % больше. Тем не менее микросхемы часов реального времени почти всегда хранят время именно в BCD: его не надо переводить перед выводом.
8.1.4Вентили и таблицы истинности
- Если выход зависит только от того, что сейчас на входах, схема комбинационнаяКомбинационная схема: выход в каждый момент определяется только текущими входами — памяти нет. Строится из одних вентилей. и собирается из одних вентилей.
- Если выход зависит ещё и от прошлого, схема последовательностнаяПоследовательностная схема: выход зависит и от входов, и от предыдущего состояния — в ней есть память (триггеры).: в ней есть память, прежде всего триггеры.
- Пять основных функций — ИЛИ (), И (), НЕ (), И-НЕВентиль И-НЕ: на выходе низкий уровень, только когда все входы высокие. В КМОП — n-канальные ключи последовательно, p-канальные параллельно., ИЛИ-НЕ — плюс Исключающее ИЛИ .
- равно 1, когда входы различны; это сложение по модулю 2, а при — инвертор.
Два класса задач
Всё, что делает цифровая схема, сводится к одному: по входным битам сформировать выходные. Но задачи бывают двух сортов. Посмотрим на несколько примеров.
- Сумматор складывает два 16-разрядных числа и выдаёт 16-разрядную сумму и бит переноса; рядом в процессоре стоят умножитель и другие арифметические блоки.
- Схема сравнения проверяет, совпадает ли код, набранный на кодовом замке, с записанным, или все ли датчики установки в норме.
- Передатчик последовательного порта дописывает к каждому байту бит чётности — такой, чтобы общее число единиц стало чётным; приёмник пересчитывает чётность и замечает одиночную ошибку.
- Дешифратор превращает двоичное число в набор сегментов десятичного индикатора.
Во всех четырёх случаях выход — раз и навсегда заданная функция текущих входов: подали те же входы — получили тот же выход. Это комбинационные задачи, и решаются они вентилями — элементами, которые выполняют операции булевой алгебры над двоичными переменными.
Другие задачи без памяти не решить. Приёмник последовательного порта получает биты по одному, друг за другом, и должен собрать их в байт; счётчик посетителей считает срабатывания датчика у двери; кодовый замок должен узнать правильную последовательность нажатий; делитель частоты выдаёт один импульс на каждые четыре входных. Здесь выход зависит от предыстории, и схема должна её где-то хранить. Главный элемент памяти — триггерЭлемент памяти на один бит с двумя устойчивыми состояниями (бистабильный мультивибратор)., мультивибратор с двумя устойчивыми состояниями; схемы с памятью называют последовательностными. Начинаем с вентилей: на них держится всё остальное.
| Комбинационная | Последовательностная | |
|---|---|---|
| Выход определяется | только текущими входами | входами и запомненным состоянием |
| Из чего собрана | из вентилей | из вентилей и триггеров |
| Примеры | сумматор, сравнение кодов, бит чётности, дешифратор индикатора | приём последовательного кода, счётчик событий, распознавание последовательности, делитель частоты |
Что здесь что (6)
- И («&»). выход ВЫСОКИЙ лишь тогда, когда ВЫСОКИ все входы:
- ИЛИ («1»). выход ВЫСОКИЙ, если ВЫСОК хоть один вход:
- НЕ (инвертор). единственный вход, выход противоположен ему: ; кружок — знак инверсии
- И-НЕ. И, за которым сразу стоит инверсия: ; самый ходовой вентиль
- ИЛИ-НЕВентиль ИЛИ-НЕ: на выходе низкий уровень, если высокий хотя бы один вход. В КМОП — n-канальные ключи параллельно, p-канальные последовательно.. ИЛИ с инверсией на выходе:
- Исключающее ИЛИ («=1»). выход ВЫСОКИЙ, когда входы не совпадают:
| A | B | И: | ИЛИ: | И-НЕ: | ИЛИ-НЕ: | Искл. ИЛИ: |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 |
Пять основных функций и Исключающее ИЛИ
И. Самая «строгая» функция: выход ВЫСОКИЙ, только если ВЫСОКИ все входы без исключения. У 8-входового И семи ВЫСОКИХ входов мало — нужен ещё восьмой. Операцию обозначают точкой, которую обычно не пишут: . Бытовой образец — две кнопки безопасности на прессе: пресс опускается, только когда оператор держит обе.
ИЛИ. Самая «снисходительная»: выход ВЫСОКИЙ, если ВЫСОК хотя бы один вход, а уж если все — тем более. Знак операции — плюс: читают «A ИЛИ B». Образец — свет в коридоре, который включает любой из нескольких датчиков движения. Число входов у И и ИЛИ в принципе любое; в стандартном 14-выводном корпусе помещаются четыре 2-входовых, три 3-входовых или два 4-входовых вентиля.
НЕ (инвертор). Один вход, на выходе — противоположный уровень, дополнение. Пишут черту над именем: , иногда штрих: ; в программах и старой документации попадаются , , , , . Мы будем писать , а там, где черта неудобна, — .
И-НЕ и ИЛИ-НЕ — те же И и ИЛИ с инверсией выхода. Ниже станет понятно, почему они встречаются даже чаще «простых» И и ИЛИ.
Исключающее ИЛИ в число основных функций не входит, но без него не обойтись. Выход ВЫСОКИЙ, когда ВЫСОКИЙ ровно один из двух входов; другими словами, когда входы не совпадают. Обычное ИЛИ при двух ВЫСОКИХ входах тоже даёт ВЫСОКИЙ выход, Исключающее — НИЗКИЙ. Такой вентиль выпускают только 2-входовым, а его операция — сложение двух битов без переноса, по модулю 2: . Именно им считают бит чётности.
Четыре разряда данных из микроконтроллера идут на сегменты индикатора, но на плате могут стоять индикаторы двух видов: с общим катодом (сегмент горит при ВЫСОКОМ уровне) и с общим анодом (при НИЗКОМ). Покажите, как одним корпусом вентилей Исключающее ИЛИ и одной перемычкой ТИП сделать узел, который либо пропускает данные как есть, либо инвертирует их. Как тот же приём превращает сумматор в вычитатель?
Решение
По таблице истинности: если один вход Исключающего ИЛИ держать НИЗКИМ, — вентиль работает повторителем; если ВЫСОКИМ, — инвертором. Значит, один вход — данные, второй — управление.
Берём корпус '86 (четыре вентиля): на первые входы — разряды , вторые входы соединяем вместе и подключаем к перемычке ТИП. ТИП = Н (общий катод) — данные проходят без изменений; ТИП = В (общий анод) — каждый разряд инвертирован, и сегменты снова горят правильно.
В арифметическом блоке ту же линию называют ВЫЧ: при ВЫЧ = 1 вентили выдают обратный код второго слагаемого, а если ВЫЧ подать ещё и на вход переноса сумматора, получится «инвертировать и прибавить 1», то есть дополнительный код, — сумматор вычитает.
Перевод в код Грея и обратно
Преобразователи для кода Грея, о котором шла речь в предыдущем пункте, собираются из одних вентилей Исключающее ИЛИ. Прямой перевод: старший разряд переносится как есть, , а каждый следующий разряд кода Грея — сумма по модулю 2 двух соседних двоичных разрядов, . Обратный перевод устроен цепочкой: каждый двоичный разряд вычисляется из уже найденного старшего, .
Проверьте схемы-преобразователи на стыке позиций 3 и 4 линейки датчика: переведите числа 3 и 4 в код Грея левой схемой и верните обратно правой. Убедитесь, что коды Грея соседних позиций различаются одним разрядом, и объясните, почему правая схема вынуждена быть цепочкой и что это значит для быстродействия.
Решение
Левая схема: , . Для : . Для : . Коды и различаются только разрядом , тогда как в двоичном коде на этом стыке меняются три разряда.
Правая схема: , . Для : , , , — получили . Для : — .
Почему цепочка: подставив прямое преобразование в обратное, получим , то есть каждому нужен уже готовый . Развернув цепочку, — это чётность всех более старших разрядов кода Грея. Сигнал проходит через вентили один за другим, и задержка растёт пропорционально разрядности; для широких кодов вместо цепочки ставят деревья схем чётности.
8.1.5Схемы вентилей на дискретных элементах
- Диодное И: любой НИЗКИЙ вход открывает свой диод, и выход прижимается вниз.
- Диодная логика уровни не восстанавливает: каждая ступень поднимает НИЗКИЙ уровень на ≈0,6–0,7 В, разветвления по выходуЧисло входов того же семейства, которые один выход может питать с гарантированными уровнями (для ТТЛ — 10, LS→LS — 20). почти нет.
- На транзисторах с резисторами (РТЛ) естественно получается ИЛИ-НЕ; для ИЛИ нужен ещё один инвертирующий каскад.
- У микросхем ТТЛ и КМОП выход активный: ВЫСОКИЙ уровень держит открытый транзистор, а не резистор.
Микросхема вентиля — не чёрная магия, и полезно один раз собрать вентиль самому из того, что лежит в коробке с деталями. Это объясняет, почему настоящие логические семейства устроены сложнее, чем кажется необходимым.
Диодный вентиль И
Резистор тянет выход к питанию, а к каждому входу выход подключён через диод катодом ко входу. Пока на всех входах ВЫСОКИЙ уровень, диоды заперты и на выходе тоже ВЫСОКИЙ. Стоит хотя бы одному входу стать НИЗКИМ, его диод открывается и стягивает выход вниз. ВЫСОКИЙ выход бывает, следовательно, только при всех ВЫСОКИХ входах — это И.
Что здесь что (4)
- Резистор к питанию. поднимает выход; ВЫСОКИЙ уровень получится, только если заперты оба диода
- Диод Д1. при НИЗКОМ уровне на A открывается и опускает выход до плюс прямое падениеПрямое падение — напряжение на открытом диоде: 0,5–0,8 В у кремниевого, 0,25–0,4 В у Шоттки, 1,5–3 В у светодиода.
- Диод Д2. то же для входа B: один НИЗКИЙ вход — НИЗКИЙ выход, это и есть И
- Выход Q. НИЗКИЙ уровень выхода выше входного на падение на диоде: уровни не восстанавливаются
Схема работает, но слабостей у неё три:
- НИЗКИЙ уровень на выходе выше входного на прямое падение на диоде; соедините несколько таких вентилей последовательно, и НИЗКИЙ уровень уползёт за порог;
- у неё по сути нет разветвления по выходу — способности одного выхода управлять многими входами: ток нагрузки течёт прямо в источник входного сигнала, нагрузка влияет на вход, и схема ничего не восстанавливает;
- она медленная: ёмкость нагрузки перезаряжается через резистор.
Транзисторный вентиль ИЛИ-НЕ
Транзистор добавляет усиление и восстанавливает уровни. Самый простой вентиль такого рода — два транзистора с общим коллекторным резистором: ВЫСОКИЙ уровень на любом входе насыщает свой транзистор, и общий выход падает почти до земли. Это схема РТЛ (резисторно-транзисторной логики) — первого массового семейства логических микросхем в начале 1960-х, дешёвого и давно забытого. Схема инвертирует по самой своей природе и даёт ИЛИ-НЕ; если нужно ИЛИ, за ней ставят ещё один транзисторный каскад — инвертор.
Что здесь что (5)
- Резистор в базе Т1. ограничивает ток базы; для выхода, который управляет этим входом, он и есть нагрузка
- Т1. ВЫСОКИЙ уровень на A открывает транзистор до насыщенияНасыщение — внешняя цепь не может пропустить ток ; коллектор опускается почти до эмиттера ( = 0,05–0,2 В), и ток задаёт нагрузка, а не база., и общий выход прижимается к земле
- Т2. то же для B; коллекторы соединены, поэтому выход НИЗКИЙ при любом ВЫСОКОМ входе — ИЛИ-НЕ
- Коллекторный резистор. ВЫСОКИЙ уровень создаёт именно он, пассивно; отсюда слабая нагрузочная способностьНагрузочная способность — какой ток выход может отдать (в «1») или отвести (в «0»), сохраняя гарантированный логический уровень.
- Т3 — инвертор. ещё один каскад переворачивает ИЛИ-НЕ в ИЛИ
Даже транзисторный вариант заметно уступает микросхемам. Свойства ИМС во многом даёт технология, которой нет в навесном монтаже: ионная имплантация, диоды ШотткиДиод Шоттки — переход металл — полупроводник: прямое падение 0,3–0,5 В вместо 0,7–0,9 В и почти нет времени восстановления; обратное напряжение обычно до 40–100 В., согласованные транзисторы на одном кристалле. Но главное отличие видно и без технологии: в ТТЛ и КМОП ВЫСОКИЙ уровень держит не резистор, а открытый транзистор выходного каскада, поэтому выход отдаёт большой ток в обе стороны и быстро перезаряжает нагрузку. Как устроены эти каскады, разобрано в разделе 8.2.
| Диодная логика | РТЛ | ТТЛ и КМОП (ИМС) | |
|---|---|---|---|
| Восстанавливает уровни | нет: +0,6…0,7 В на каждой ступени | да, за счёт транзистора | да |
| Кто создаёт ВЫСОКИЙ уровень | резистор | резистор (пассивно) | открытый транзистор (активный выход) |
| Разветвление по выходу | практически нет | небольшое: ВЫСОКИЙ уровень проседает под нагрузкой | 10 и больше |
| Скорость | низкая | низкая | высокая |
Самодельный диодный вентиль И питается от +5 В через резистор 2,2 кОм; диоды кремниевые с прямым падением 0,7 В. Вход A подключён к выходу микроконтроллера, который в НИЗКОМ состоянии даёт 0,25 В. а) Каким будет НИЗКИЙ уровень на выходе вентиля? б) Каким он станет на выходе второго такого же вентиля, которым управляет первый? в) Какой ток должен принимать вывод микроконтроллера в первом случае?
Решение
а) Открытый диод добавляет своё падение: В. Это уже выше паспортного порога НИЗКОГО уровня ТТЛ (0,8 В).
б) Следующий вентиль прибавит ещё 0,7 В: В. Это больше 1,5 В, так что даже вход КМОП HC с питанием 5 В уже не обязан понять такой уровень как НИЗКИЙ. С каждой ступенью НИЗКИЙ уровень ползёт вверх: диодная логика его не восстанавливает.
в) Ток резистора мА целиком уходит через диод в вывод микроконтроллера. Подключите к тому же выводу пять таких вентилей — токи сложатся до 9 мА, и НИЗКИЙ уровень самого вывода тоже приподнимется. Это и есть отсутствие разветвления по выходу.
Выход РТЛ-вентиля (коллекторный резистор 640 Ом, питание +3,0 В) нагружен входами таких же вентилей; каждый вход — резистор 450 Ом в базе открытого транзистора с В. При каком наибольшем ВЫСОКИЙ уровень на выходе не опустится ниже 0,9 В?
Решение
Когда выход ВЫСОКИЙ, его транзистор заперт, и выход — это делитель: от +3,0 В через 640 Ом на параллельных цепочек «450 Ом плюс 0,7 В». Их можно заменить одним источником 0,7 В с сопротивлением :
8.1.6Пример схемы с вентилями
- Сирена гаража: «открыты ворота ИЛИ калитка, И система на охране» — , сначала ИЛИ, потом И.
- Если датчики замыкают линию на землю (входы активны НИЗКИМ уровнем), ту же функцию дают И, а за ним ИЛИ-НЕ: И и ИЛИ как будто меняются ролями.
- Из одних инвертирующих вентилей (только И-НЕ или только ИЛИ-НЕ) собирается любая комбинационная функция.
Возьмём небольшую, но настоящую задачу. В гараже стоят два датчика: на воротах () и на калитке (), а у входа — ключ-выключатель, которым систему ставят на охрану (). Сирена () должна включаться, если открыты ворота или калитка, а система при этом на охране. Стоит переписать условие словами логики — «выход ВЫСОКИЙ, если ВЫСОКИЙ ИЛИ , И при этом ВЫСОКИЙ », — и схема готова: .
Вентиль ИЛИ выдаёт ВЫСОКИЙ уровень, когда открыт хотя бы один вход в гараж; вентиль И пропускает его дальше, только если ВЫСОКИЙ и . Выход вентиля через транзисторный ключ включает реле сирены.
Датчики, замыкающие на землю
На практике и герконовыеГеркон — герметичный магнитоуправляемый контакт: замыкается в поле магнита или катушки. датчики, и ключ охраны почти всегда подключают так же, как кнопку из пункта о логических состояниях: вход подтянут резистором к питанию, а контакт замыкает его на землю. Проводов меньше (второй провод — общий корпус), а для входов ТТЛ, как выяснится в разделе 8.2, так ещё и удобнее электрически. Только теперь «ворота открыты» означает НИЗКИЙ уровень: все три входа работают в отрицательной логике, и мы назовём их , , .
- Уловить «открыт хотя бы один вход»то есть НИЗКИЙ хотя бы один из — отличить случай «оба ВЫСОКИЕ» от всех остальных. Это умеет вентиль И: его выход НИЗКИЙ, если НИЗКИЙ любой вход. Назовём результат .
- Уловить «открыто, и система на охране»то есть НИЗКИЕ одновременно и — отличить «оба НИЗКИЕ» от прочих комбинаций; это работа для ИЛИ.
- Сделать выход ВЫСОКИМв нужном случае ИЛИ даёт НИЗКИЙ уровень, поэтому берём ИЛИ-НЕ.
Посмотрите на результат: в первой схеме было ИЛИ, затем И, а теперь И, затем ИЛИ(-НЕ). Задача та же, вентили как будто поменялись ролями. Это не случайность, а закономерность, и в последнем пункте раздела она получит объяснение и удобный способ рисования.
Что здесь что (3)
- Вентиль И. по паспорту И, а по смыслу ИЛИ над «истинами» отрицательной логики: выход НИЗКИЙ, если открыты ворота или калитка
- Вентиль ИЛИ-НЕ. выход ВЫСОКИЙ только при обоих НИЗКИХ входах — по смыслу это И: открыто И на охране
- Вход . ключ охраны замыкает линию на землю: НИЗКИЙ уровень, когда система на охране
Один тип вентиля вместо всех
Не обязательно держать на плате корпуса всех типов: нужный вентиль часто удаётся собрать из того, что уже стоит. Скажем, понадобился один вентиль И, а в корпусе 7400 (четыре 2-входовых И-НЕ) осталось две свободных половинки. Ставим два И-НЕ подряд, у второго соединяем входы, и он работает инвертором: .
Определите, что делает каждый из шести вентилей на рисунке выше, если сигнал подан на свободный вход.
Решение
а) Исключающее ИЛИ, второй вход ВЫСОКИЙ: — инвертор. б) И-НЕ с объединёнными входами: — инвертор. в) ИЛИ-НЕ, второй вход на земле: — инвертор. г) И, второй вход ВЫСОКИЙ: — повторитель (буфер). д) ИЛИ, второй вход ВЫСОКИЙ: — выход всегда ВЫСОКИЙ, сигнал заблокирован. е) Исключающее ИЛИ-НЕ, второй вход на земле: — снова инвертор. Все эти включения встречаются на платах постоянно: инвертор из лишнего вентиля, блокировка канала постоянным уровнем, повторитель для развязки. Только не оставляйте неиспользуемые входы КМОП висящими в воздухе — их всегда подключают к питанию, к земле или к соседнему входу.
Покажите, как получить из 2-входовых вентилей: а) инвертор из ИЛИ-НЕ; б) вентиль ИЛИ из вентилей И-НЕ; в) вентиль И-НЕ из вентилей ИЛИ-НЕ. Сколько вентилей уходит в каждом случае?
Решение
а) Один ИЛИ-НЕ: входы соединить () либо второй вход заземлить ().
б) По теореме де Моргана, : И можно заменить на ИЛИ (и наоборот), проинвертировав все входы и выход. . Два И-НЕ с объединёнными входами дают и , третий И-НЕ над ними — . Три вентиля.
в) . Два ИЛИ-НЕ инвертируют входы, третий ИЛИ-НЕ даёт , четвёртый, включённый инвертором, — . Четыре вентиля.
Как собрать: а) 8-входовый И из 2-входовых И; б) 3-входовый ИЛИ-НЕ из 2-входовых ИЛИ-НЕ; в) 4-входовый И-НЕ из 2-входовых И-НЕ; г) 3-входовый И из 2-входовых ИЛИ-НЕ? Сколько вентилей нужно в каждом случае?
Решение
а) Деревом: четыре вентиля на пары входов, два — на их выходы, один — последний; всего 7 вентилей и три задержки. Цепочка тоже даст 7 вентилей, но задержек будет семь.
б) Соединить ИЛИ-НЕ «в лоб» нельзя: — совсем другая функция. Нужно восстановить ИЛИ: первый вентиль даёт , второй, включённый инвертором, — , третий над и — . Три вентиля.
в) Первый И-НЕ: , второй: ; два инвертора дают и ; пятый И-НЕ — . Пять вентилей.
г) . Три ИЛИ-НЕ-инвертора дают , , ; четвёртый ИЛИ-НЕ над и даёт ; пятый инвертирует его в ; шестой ИЛИ-НЕ над и даёт . Шесть вентилей. Общее правило: инвертирующие вентили наращивают, вставляя двойную инверсию.
Схема сравнения двух битов должна выдавать ВЫСОКИЙ уровень, когда биты совпадают (Исключающее ИЛИ-НЕ). Какое наименьшее число 2-входовых вентилей ИЛИ-НЕ для этого нужно, если инверсии входов не даны?
Решение
Схема: ; затем , ; выход . Проверка: ; ; аналогично ; — сигнал совпадения. Четыре вентиля — один корпус '02. Это зеркальное отражение известной схемы Исключающего ИЛИ на четырёх И-НЕ. Меньше нельзя: перебор всех схем из трёх 2-входовых ИЛИ-НЕ не даёт симметричной функции, равной 1 и при , и при .
8.1.7Логические обозначения при заданных уровнях
- Что делает вентиль, зависит от соглашения: какой уровень на его выводах считать «истиной».
- Вентиль И в положительной логике — это ИЛИ для сигналов с активным НИЗКИМ уровнем.
- Правило де Моргана: И превращается в ИЛИ (и обратно), если проинвертировать выход и все входы.
- В логике заданных уровнейСпособ рисовать вентили по выполняемой функции: например, И-НЕ над сигналами с активным НИЗКИМ уровнем рисуют как ИЛИ с кружками на входах. вентиль рисуют по той функции, которую он выполняет в схеме, ставя кружки на входах и выходах с активным НИЗКИМ уровнем.
В примере с гаражом И и ИЛИ поменялись местами. Разберёмся почему. Вентиль И выдаёт ВЫСОКИЙ уровень, когда ВЫСОКИ оба входа. Если ВЫСОКИЙ уровень означает «истину», то «истина» на выходе появляется, когда «истинны» все входы, — в положительной логике И выполняет функцию И, и ИЛИ тоже выполняет ИЛИ.
Теперь пусть «истину» изображает НИЗКИЙ уровень. Тот же вентиль И даёт НИЗКИЙ выход, то есть «истину», если «истина» хотя бы на одном входе, — а это функция ИЛИ. Вентиль ИЛИ даёт НИЗКИЙ выход, только когда НИЗКИ оба входа, — это функция И. Одна и та же микросхема делает разное в зависимости от того, как понимать уровни на её выводах.
| Вентиль по паспорту | Если «истина» = В | Если «истина» = Н |
|---|---|---|
| И | И | ИЛИ |
| ИЛИ | ИЛИ | И |
| И-НЕ | И-НЕ | ИЛИ с инверсными входами |
| ИЛИ-НЕ | ИЛИ-НЕ | И с инверсными входами |
Чтобы схема при этом оставалась понятной, есть два подхода.
Разработчик понимает, что нужно, подбирает вентиль с подходящим поведением и рисует его так, как он назван в паспорте. Пусть станок нужно остановить, если нажата кнопка стоп на пульте, ударили по аварийному «грибку» или сработал концевой выключатель, причём все три сигнала активны НИЗКИМ уровнем. Нужно уловить, что НИЗКИЙ хотя бы один из трёх входов; это делает 3-входовый И-НЕ, и его рисуют как И-НЕ, хотя для этих входов он фактически работает как ИЛИ.
Входы подписывают с чертой: , , , а выход СТОП — в положительной логике; он ВЫСОКИЙ, если «истинен» любой из входов, и идёт на драйвер двигателя. Так рисует большинство схем, которые вы встретите.
Логика заданных уровней (assertion-level logic): вентиль рисуют по той функции, которую он выполняет в схеме. Наш И-НЕ работает как ИЛИ над сигналами с активным НИЗКИМ уровнем — значит, рисуем ИЛИ с кружками инверсии на всех трёх входах. Такой символ и 3-входовый И-НЕ — одно и то же.
Эта равносильность — теорема де Моргана, одно из главных тождеств булевой алгебры; пока хватит её словесной формы: И заменяется на ИЛИ и наоборот, если проинвертировать выход и все входы. Поначалу ИЛИ на месте И-НЕ сбивает с толку, зато логика схемы читается прямо с чертежа, без мысленных переводов «тут НИЗКИЙ, значит, истина». Особенно это ценно в больших схемах, где перемешаны сигналы обеих полярностей.
Перерисуем в логике заданных уровней сирену гаража. Левый вентиль замечает, что «истинен» или (то есть НИЗКИЙ уровень на любом из этих входов), и сообщает результат тоже в отрицательной логике — кружок на выходе. Правый выдаёт ВЫСОКИЙ уровень, когда «истинны» оба его входа, и , то есть когда оба НИЗКИЕ.
Микросхемы те же, что на второй схеме гаража: слева И, справа ИЛИ-НЕ. Но теперь на чертеже прямо написано «(G ИЛИ K) И E», и проверять схему по таблицам истинности не нужно.
Что здесь что (3)
- Кружки на входах. входы активны НИЗКИМ уровнем: кружок снимает инверсию, дальше работает обычное ИЛИ
- ИЛИ с инверсными входами и выходом. физически это вентиль И ('08); результат тоже с активным НИЗКИМ уровнем
- И с инверсными входами. физически ИЛИ-НЕ ('02): ВЫСОКИЙ выход, когда оба входа «истинны» (НИЗКИЕ), —
Два вывода, которые стоит запомнить:
- «Отрицательная логика» говорит только о том, какой уровень считается «истиной», — НИЗКИЙ, то есть более отрицательный из двух. Полярность напряжения тут ни при чём: и ВЫСОКИЙ, и НИЗКИЙ уровни ТТЛ положительны.
- Сам символ вентиля всегда понимается в положительной логике. И-НЕ, выполняющий ИЛИ над сигналами с активным НИЗКИМ уровнем, можно нарисовать как И-НЕ или как ИЛИ с кружками на входах: кружки инвертируют входы, а за ними стоит обычное, «положительное» ИЛИ.
Входы микроконтроллера для датчиков дыма и протечки активны НИЗКИМ уровнем: , . Нужно сформировать общий сигнал (тоже активный НИЗКИЙ), если сработал хотя бы один датчик. Какой стандартный вентиль поставить и как его правильно нарисовать в логике заданных уровней?
Решение
Требуется: выход НИЗКИЙ, если НИЗКИЙ хотя бы один вход. По таблице истинности так ведёт себя вентиль И ('08): любой НИЗКИЙ вход делает его выход НИЗКИМ. В логике заданных уровней это ИЛИ над «истинами» отрицательной логики, причём результат тоже в отрицательной логике — рисуем ИЛИ с кружками на обоих входах и на выходе. По де Моргану : И равно ИЛИ с инвертированными входами и выходом. И-НЕ подошёл бы, если бы тревогу нужно было выдать активным ВЫСОКИМ уровнем.
Двигатель кухонного комбайна управляется через реле сигналом с активным НИЗКИМ уровнем. Мотор должен работать, когда нажата кнопка ПУСК (активный ВЫСОКИЙ) и при этом крышка закрыта (, активный НИЗКИЙ), — либо когда в сервисном режиме замкнута перемычка (активный НИЗКИЙ). Нарисуйте схему в логике заданных уровней и укажите, какие стандартные вентили стоят на месте каждого символа.
Решение
Функция: , выход — с активным НИЗКИМ уровнем.
Шаг 1: И над ПУСК (В) и (Н). Рисуем И с кружком только на входе ; результат удобно сразу выдать в отрицательной логике — с кружком на выходе: . Физически кружок на входе — это инвертор, превращающий в КРЫШКА, а И с инверсией выхода — вентиль И-НЕ. Вариант без инвертора на этом входе: — это ИЛИ, но тогда инвертор нужен для ПУСК. Один инвертор необходим в любом случае.
Шаг 2: ИЛИ над двумя «истинами» с активным НИЗКИМ уровнем (выход шага 1 и ), выход тоже активный НИЗКИЙ: рисуем ИЛИ с кружками на входах и на выходе. Физически это вентиль И: его выход НИЗКИЙ, если НИЗКИЙ любой вход.
Итого: инвертор, И-НЕ и И (инвертор можно сделать из свободного И-НЕ того же корпуса). Проверка: ПУСК = В, = Н (закрыта) → И-НЕ даёт Н → И даёт Н, мотор работает. Крышка открыта, сервис выключен → оба входа И ВЫСОКИЕ → = В, мотор стоит, сколько ни жми ПУСК. = Н → мотор работает при любых остальных.