59. Цифровая логика: вентили и законы алгебры логики
Микроконтроллер целиком собран из одного повторяющегося элемента — логического вентиля. Ядро, память, таймеры, интерфейсы: всё это миллионы одинаковых схемок, каждая из которых умеет одну простую вещь.
Программисту это знать не обязательно ровно до того момента, когда нужно подключить к плате внешнюю логику, согласовать уровни, понять, почему сигнал не доходит, или почему шина не работает на заявленной скорости. Раздел про этот минимум.
Как это называется в документации
Оригинал Перевод logic gate логический вентиль truth table таблица истинности Boolean algebra алгебра логики De Morgan's laws правила де Моргана functionally complete basis полный базис logic level (VIH, VIL, VOH, VOL) логический уровень, пороги входа и выхода noise margin запас помехоустойчивости level shifter, translator преобразователь уровней propagation delay (tpd) задержка распространения fan-out нагрузочная способность по входам open drain / open collector открытый сток / открытый коллектор wired-AND монтажное И tri-state, high-Z третье состояние, высокоимпедансное
59.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 |
Полезные наблюдения: И даёт единицу на одном наборе из четырёх, ИЛИ — на трёх, исключающее ИЛИ — ровно тогда, когда входы различны (отсюда его роль в сравнении и в подсчёте чётности).
НЕ — единственный вентиль с одним входом: меняет значение на противоположное.
59.2 Законы, которыми пользуются на практике
Алгебра логики похожа на обычную, но не совпадает с ней.
| Закон | Запись |
|---|---|
| двойное отрицание | ¬¬a = a |
| коммутативность | a·b = b·a, a+b = b+a |
| ассоциативность | (a·b)·c = a·(b·c) |
| идемпотентность | a·a = a, a+a = a |
| поглощение | a + a·b = a |
| дистрибутивность И над ИЛИ | a·(b+c) = a·b + a·c |
| дистрибутивность ИЛИ над И | a + b·c = (a+b)·(a+c) |
| правила де Моргана | ¬(a·b) = ¬a + ¬b, ¬(a+b) = ¬a·¬b |
Две выделенные строки — те, где интуиция из арифметики подводит.
Дистрибутивности ИЛИ над И в обычных числах нет: 2 + 3·4 = 14, а
(2+3)·(2+4) = 30. В логике же она верна на всех наборах.
Правила де Моргана — самое полезное, что стоит запомнить. Они позволяют переносить отрицание внутрь и наружу, и на практике означают вот что:
if (!(a && b)) эквивалентно if (!a || !b)
if (!(a || b)) эквивалентно if (!a && !b)
Это не только про читаемость условий: тем же правилом схему из вентилей И переделывают в схему из вентилей ИЛИ, если под рукой оказались не те микросхемы.
Проверено перебором. Все законы выше проверены не примером, а на всех наборах входов — восемь наборов для законов с тремя переменными, четыре для двух. Это ровно то, чем таблица истинности отличается от рассуждения: перебор конечен.
59.3 Одного вентиля достаточно
Из И-НЕ собирается любая схема — его называют полным базисом:
| Что собираем | Сколько И-НЕ |
|---|---|
| НЕ | 1 (оба входа вместе) |
| И | 2 |
| ИЛИ | 3 |
| исключающее ИЛИ | 4 |
Практический смысл: производителю достаточно освоить один элемент и повторить его миллионы раз. Именно поэтому цифровые схемы дешевеют с масштабом, а аналоговые — нет.
Тем же свойством обладает ИЛИ-НЕ.
59.4 Уровни: где кончается ноль и начинается единица
Логический сигнал — это напряжение, и у него четыре важных числа.
| Обозначение | Что значит | При питании 3,3 В |
|---|---|---|
VOH |
что выход гарантирует в единице | ≥ 2,9 В |
VIH |
с какого напряжения вход считает единицу | 2,31 В |
VIL |
до какого напряжения вход считает ноль | 0,99 В |
VOL |
что выход гарантирует в нуле | ≤ 0,4 В |
Разница между тем, что выдаёт выход, и тем, что требует вход, — запас помехоустойчивости: 0,59 В с каждой стороны, около 18 % питания. Столько помехи сигнал переживёт без ошибки.
Для сравнения, у старой логики с уровнями TTL запас всего 0,4 В — в полтора раза меньше. Это одна из причин, по которой современные схемы надёжнее при прочих равных.
59.5 Согласование: 3,3 и 5 вольт
Самый частый практический вопрос, и ответ в обе стороны разный.
3,3 В на вход 5-вольтовой схемы — зависит от того, какие у неё пороги:
| Вход | Порог единицы | Выход 3,3 В даёт 2,9 В |
|---|---|---|
| с порогами TTL | 2,0 В | работает |
| 5-вольтовая логика | 3,5 В | не работает |
Это ловушка: схема может заработать с одной микросхемой и не заработать с другой, формально «такой же».
5 В на вход 3,3-вольтового микроконтроллера — вопрос не порогов, а предельного напряжения. У вывода абсолютный максимум около 3,6 В, запас над питанием всего 0,3 В; 5 В его превышают, и вывод разрушится или начнёт «подпитывать» камень через защитный диод. Варианты:
- вывод, терпимый к 5 В — у STM32 такие помечены отдельно, это самый простой путь (раздел 8);
- делитель — 1,8 кОм и 3,3 кОм дают 3,24 В: ниже предела и выше порога единицы. Годится для медленных сигналов; на быстрых ёмкость входа с сопротивлением делителя образуют фильтр (раздел 50.4);
- преобразователь уровней — микросхема или пара транзисторов; нужен для двунаправленных двухтактных линий и для I²C на выводах, не терпимых к 5 В. На терпимых I²C проще: линии с открытым стоком подтягивают прямо к 5 В, а внутреннюю подтяжку выключают — с ней вывод не держит напряжение выше VDD + 0,3 В (62.5).
59.6 Задержка: почему схемы не бывают мгновенными
Вентиль переключается не сразу: у отдельной микросхемы логики на плате типовая задержка — единицы наносекунд. Задержки в цепочке складываются.
| Глубина схемы | Задержка (по 5 нс) | Предельная частота |
|---|---|---|
| 2 вентиля | 10 нс | 100 МГц |
| 4 вентиля | 20 нс | 50 МГц |
| 10 вентилей | 50 нс | 20 МГц |
Для внешней логики на плате расчёт прямой: на 72 МГц за такт через микросхемы по 5 нс успевает пройти лишь 2,8 вентиля подряд — две-три микросхемы в цепочке уже съедают такт.
Внутри кристалла счёт другой. 5 нс — задержка отдельной микросхемы: ей приходится раскачивать вывод и дорожку. Вентиль внутри кристалла переключается за десятки пикосекунд, и за такт 72 МГц проходят десятки уровней логики, поэтому 32-разрядное сложение Cortex‑M3 делает за один такт. Предел частоты задаёт самая длинная цепочка между двумя регистрами; её и режут на ступени конвейера — выборка, декодирование и исполнение идут одновременно для разных команд (раздел 1).
59.7 Нагрузочная способность
Выход вентиля не резиновый: каждый подключённый вход добавляет ёмкость (около 5 пФ), и её надо перезаряжать.
| Входов на выходе | Ёмкость | Время перезаряда при 8 мА |
|---|---|---|
| 1 | 5 пФ | 2 нс |
| 10 | 50 пФ | 21 нс |
| 20 | 100 пФ | 41 нс |
Уже на десяти входах перезаряд занимает вчетверо больше собственной задержки вентиля: нагрузка становится главным ограничением, а не скорость логики. Лечится буферами — один выход на несколько ветвей, у каждой свой буфер.
Тот же расчёт объясняет, почему длинная дорожка медленнее короткой: дорожка тоже ёмкость, примерно 1 пФ на сантиметр.
59.8 Открытый сток и монтажное И
Обычный выход активно тянет линию и в единицу, и в ноль — соединять два таких выхода нельзя: один потянет вверх, другой вниз, и оба сгорят.
Выход с открытым стоком умеет только прижимать линию к нулю; вверх её тянет общий подтягивающий резистор. Такие выходы можно соединять сколько угодно: линия в единице, только если все отпустили её. Это и есть монтажное И — функция И без единого вентиля.
На этом устроены I²C (раздел 17), линия прерывания от нескольких датчиков, сигнал «авария» от нескольких блоков.
Плата — скорость. Вверх линию тянет резистор, а не транзистор, и время нарастания задаёт RC:
| Подтяжка | Ёмкость линии 50 пФ | До порога единицы | Предел |
|---|---|---|---|
| 4,7 кОм | 235 нс | 283 нс | 1,8 МГц |
| 1 кОм | 50 нс | 60 нс | 8,3 МГц |
Уменьшая резистор, скорость покупают за ток: при 1 кОм каждый прижатый к нулю выход тянет 3 мА, и это течёт всё время, пока линия в нуле.
Третье состояние решает ту же задачу иначе: выход умеет отключаться совсем, и тогда линию тянет тот, кто активен. Так устроены шины памяти — быстрее, чем открытый сток, но требует, чтобы ровно один участник был активен в каждый момент.
59.9 Грабли
Схема работает с одной микросхемой и не работает с «такой же». Разные пороги входа: 2,0 В против 3,5 В.
Вывод микроконтроллера сгорел. 5 В на вход, не терпимый к 5 В.
Сигнал искажается на быстрых фронтах после делителя. Сопротивление делителя и входная ёмкость образуют фильтр.
Логика «глючит» при работе силовой части. Помеха превысила запас помехоустойчивости: развязка по питанию (раздел 53.5), земля, разводка.
Схема не работает на расчётной частоте. Сложили задержки вентилей — получилось больше периода.
Выход не тянет. Слишком много входов: считать ёмкость, ставить буфер.
I²C работает на 100 кГц и не работает на 400 кГц. Подтяжка велика для ёмкости линии.
Два выхода соединили — оба сгорели. Соединять можно только выходы с открытым стоком или с третьим состоянием.
Линия с открытым стоком «висит» в неопределённом состоянии. Забыт подтягивающий резистор: без него единицу никто не формирует.
59.10 Итоги
- Вентиль полностью описывается таблицей истинности; законы алгебры логики проверяются перебором всех наборов, а не примером.
- Правила де Моргана переносят отрицание внутрь и наружу — и в условиях программы, и в схеме.
- Из И-НЕ собирается что угодно: НЕ из одного, И из двух, ИЛИ из трёх, исключающее ИЛИ из четырёх.
- Запас помехоустойчивости при 3,3 В — 0,59 В с каждой стороны, около 18 % питания; у старой логики TTL было 0,4 В.
- 3,3 В на вход с порогом TTL проходит, на вход 5-вольтовой логики — нет; 5 В на вход 3,3 В требуют вывода, терпимого к 5 В, делителя или преобразователя.
- Задержки складываются: через микросхемы логики по 5 нс на 72 МГц за такт проходит 2,8 вентиля подряд. Внутри кристалла вентиль примерно в сотню раз быстрее, и частоту ядра задаёт самая длинная цепочка между регистрами.
- Каждый подключённый вход добавляет 5 пФ; на десяти входах перезаряд дольше собственной задержки вентиля.
- Открытый сток даёт монтажное И без вентилей, но скорость ограничена подтяжкой: 4,7 кОм на 50 пФ — это 1,8 МГц.
Дальше: раздел 60 «Мультиплексоры, дешифраторы, комбинационные схемы» — что собирают из вентилей, когда их становится много.