60. Мультиплексоры, дешифраторы, комбинационные схемы
Из вентилей (раздел 59) собирают узлы покрупнее. Их немного, они повторяются везде — и внутри микроконтроллера, и на плате рядом с ним. Узнав их однажды, начинаешь видеть их в описаниях: «мультиплексор альтернативных функций вывода», «дешифратор адреса», «шифратор приоритета прерываний» — это всё они.
Раздел про четыре таких узла и про две практические задачи, которые ими решают: расширить выводы и подключить к одному входу АЦП несколько датчиков.
Как это называется в документации
Оригинал Перевод combinational logic комбинационная схема (без памяти) multiplexer (mux) мультиплексор, «переключатель» demultiplexer, decoder демультиплексор, дешифратор encoder, priority encoder шифратор, шифратор с приоритетом enable разрешение работы half / full adder полусумматор / полный сумматор carry, ripple carry перенос, последовательный перенос carry-lookahead ускоренный перенос shift register сдвиговый регистр analog switch, on-resistance аналоговый ключ, сопротивление открытого канала latch защёлка
60.1 Комбинационная — значит без памяти
Выход комбинационной схемы зависит только от того, что на входах сейчас. Подали тот же набор — получили тот же результат, независимо от истории. Всё в этом разделе — такое.
Противоположность — схемы с памятью (триггеры, регистры, счётчики), где результат зависит и от предыдущего состояния. Из них сделаны регистры периферии, и о них речь в разделах про сам микроконтроллер.
60.2 Мультиплексор: один из многих
Пропускает на выход один из нескольких входов — тот, номер которого задан адресом.
| Адресных линий | Входов |
|---|---|
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
Где встречается внутри микроконтроллера:
- альтернативные функции вывода: к одной ножке подведены выходы
таймера, UART, SPI; какой из них попадёт наружу, решает мультиплексор,
а его адрес — это поле
AFв регистре (раздел 8); - источник тактирования:
SYSCLKвыбирается из HSI, HSE и PLL — тоже мультиплексор (раздел 6); - вход АЦП: один преобразователь и десятки каналов (раздел 14.5).
Отсюда важное следствие, которое часто удивляет: периферия не «подключается» к выводу — она выбирается. Два блока не могут выводить на одну ножку одновременно, потому что мультиплексор пропускает ровно один вход.
60.3 Дешифратор: ровно один выход
Обратная задача: по адресу из n линий активировать один из 2ⁿ
выходов. Проверено перебором: на каждом из восьми адресов
трёхразрядного дешифратора активен ровно один выход из восьми,
остальные молчат. Вход разрешения гасит все выходы сразу.
Где встречается:
- дешифратор адреса памяти: старшие разряды адреса выбирают, какой блок отвечает — Flash, ОЗУ или регистры периферии (раздел 11.1);
- динамическая индикация: адрес разряда выбирает, какая цифра горит (раздел 57.4);
- выбор микросхемы на шине: один сигнал выбора из нескольких.
Вход разрешения нужен не для красоты: без него в момент смены адреса успевают ненадолго включиться посторонние выходы — адресные линии меняются не одновременно. Разрешение снимают на время переключения.
60.4 Шифратор с приоритетом: как выбирается прерывание
Обратная задача к дешифратору: на входе несколько сигналов, на выходе — номер активного. А если активных несколько?
| Входы | Выход |
|---|---|
| только вход 2 | номер 2 |
| входы 0, 2, 5 | номер 5 |
| все восемь | номер 7 |
| ни одного | номер 0 и признак «запросов нет» |
Побеждает старший — это и есть приоритет. И обратите внимание на последнюю строку: без отдельного признака «есть запрос» ноль на выходе невозможно отличить от запроса нулевого входа. В реальных схемах этот признак всегда есть.
Похожим образом выбирается прерывание в контроллере (раздел 7.2): запросов может прийти несколько сразу, обслуживается один, остальные ждут. Только «старший» там — не больший номер: побеждает меньшее число приоритета (0 срочнее 15, раздел 7.3), а при равных числах — меньший номер прерывания.
60.5 Сумматор: как из логики получается арифметика
Полусумматор складывает два бита: сумма — исключающее ИЛИ, перенос —
И. 1 + 1 даёт сумму 0 и перенос 1.
Полный сумматор складывает три бита (два слагаемых и входной
перенос) — собирается из двух полусумматоров и вентиля ИЛИ. Проверено на
всех восьми наборах: сумма и перенос всегда дают ровно a + b + перенос.
Многоразрядное сложение — цепочка полных сумматоров, где перенос идёт от
младшего к старшему. Восьмиразрядный сумматор проверен на всех 65 536
парах байтов; заодно видно и переполнение: 255 + 1 даёт ноль и
перенос, 200 + 100 — 44 и перенос (раздел 3).
Цена простоты — время. Перенос проходит через каждую ступень:
| Разрядов | Задержка (2 вентиля на ступень, по 5 нс) |
|---|---|
| 8 | 80 нс |
| 16 | 160 нс |
| 32 | 320 нс |
Триста двадцать наносекунд — это меньше 4 МГц: на микросхемах логики
с таким сумматором быстрый процессор не построить. Внутри кристалла
вентили примерно в сотню раз быстрее: тот же сумматор — около 3 нс, и для
72 МГц (такт 13,9 нс) хватило бы и его. Но на сотнях мегагерц перенос по
цепочке — самый длинный путь сумматора. Поэтому в быстрых ядрах применяют
ускоренный перенос: старшие разряды не ждут младших, а вычисляют
перенос отдельной схемой. Глубина растёт не линейно, а логарифмически:
log₂(32) = 5 ступеней, около 50 нс вместо 320 — выигрыш в 6,4 раза
ценой заметно большего числа вентилей.
Это общая закономерность цифровой схемотехники: скорость покупается площадью.
60.6 🔧 Расширение выводов сдвиговым регистром
Практическая задача: выводов не хватает. Восемь светодиодов напрямую — восемь ножек (и весь бюджет тока, раздел 49.7). Сдвиговый регистр решает это тремя. Бюджет тока при этом переезжает на регистр: у ходового 74HC595 уровни выхода гарантированы примерно при 6 мА, а через выводы питания корпуса — не больше 70 мА. Для ярких светодиодов берут регистр со встроенными стоками тока или транзисторы на выходах.
| Регистров подряд | Выходов | Выводов микроконтроллера |
|---|---|---|
| 1 | 8 | 3 |
| 2 | 16 | 3 |
| 4 | 32 | 3 |
| 8 | 64 | 3 |
Три вывода — данные, тактовый и защёлка — не меняются, сколько бы регистров ни поставили: выход последнего идёт на вход следующего.
Работает это так: биты по одному задвигаются тактовым сигналом, а потом импульс защёлки одновременно переносит всё на выходы. Защёлка важна: без неё выходы «шевелились» бы во время задвигания.
Плата — время. Биты идут последовательно:
| Что обновляем | На 1 МГц | На 8 МГц |
|---|---|---|
| один регистр (8 выходов) | 8 мкс | 1 мкс |
| четыре регистра (32 выхода) | 32 мкс | 4 мкс |
Даже на 1 МГц шкалу из 32 выходов можно обновлять свыше тридцати тысяч раз в секунду — с запасом для любой индикации. Передачу удобно отдать аппаратному SPI (раздел 18) и не тратить на неё процессор вовсе.
60.7 🔧 Аналоговый мультиплексор перед АЦП
Внутренних каналов АЦП может не хватить, или датчики находятся далеко. Внешний аналоговый мультиплексор подключает к одному входу один из восьми источников. Отличие от цифрового — он пропускает напряжение в обе стороны, а его открытый канал имеет сопротивление, обычно около 100 Ом.
Это сопротивление складывается с сопротивлением источника и удлиняет выборку (раздел 14.2):
| Источник | Постоянная времени | Нужное время выборки |
|---|---|---|
| 1 кОм + канал 100 Ом | 5,5 нс | 46 нс |
| 1 кОм без мультиплексора | 5,0 нс | 42 нс |
| 100 кОм + канал | 0,50 мкс | 4,2 мкс |
Для 12 разрядов конденсатор выборки должен зарядиться до одного младшего разряда — это ln 4096 ≈ 8,3 постоянной времени (до половины разряда — ln 8192 ≈ 9,0).
Вывод: при низкоомном источнике мультиплексор добавляет всего четыре наносекунды и не мешает. При высокоомном он заметен, и там либо ставят повторитель до мультиплексора (раздел 56.1), либо задают долгое время выборки.
60.8 Грабли
Периферия не выводится на ножку. Не настроен мультиплексор альтернативных функций либо на неё уже назначен другой блок — выбирается ровно один.
При смене адреса дешифратора мигают посторонние выходы. Адресные линии меняются не одновременно; на время переключения снимать разрешение.
Обслуживается не то прерывание. При одновременных запросах побеждает меньшее число приоритета, при равных — меньший номер прерывания (раздел 7.3).
Ноль на выходе шифратора не отличить от отсутствия запроса. Нужен отдельный признак.
Светодиоды на сдвиговом регистре «бегут» при обновлении. Не используется защёлка — выходы меняются во время задвигания.
Регистры добавили, а обновление стало медленным. Время растёт линейно с числом регистров: считать по тактовой частоте.
Показания АЦП через внешний мультиплексор «плывут». Сопротивление канала плюс высокоомный источник: увеличить время выборки или поставить повторитель.
Соседние каналы мультиплексора влияют друг на друга. Не хватает времени выборки — конденсатор помнит предыдущий канал (раздел 50.6).
60.9 Итоги
- Комбинационная схема не имеет памяти: выход зависит только от текущих входов.
- Мультиплексор выбирает один вход из
2ⁿ; именно так устроены альтернативные функции выводов, выбор тактирования и каналов АЦП — и поэтому два блока не выводятся на одну ножку одновременно. - Дешифратор активирует ровно один выход из
2ⁿ; вход разрешения нужен на время смены адреса. - Шифратор с приоритетом отдаёт номер старшего запроса и признак его наличия — так выбирается прерывание.
- Сумматор строится из полусумматоров; проверен на всех 65 536 парах байтов. Последовательный перенос на 32 разряда даёт 320 нс, ускоренный — около 50: скорость покупается площадью.
- Сдвиговый регистр даёт 8, 16, 64 выхода на тех же трёх выводах; цена — время задвигания, 32 мкс на 32 выхода при 1 МГц.
- Аналоговый мультиплексор добавляет к источнику около 100 Ом: при низкоомном источнике это 4 нс, при 100 кОм — уже 4,2 мкс выборки.
Дальше: раздел 61 «Минимальная обвязка микроконтроллера: условия запуска» — что обязано быть на плате, чтобы камень вообще стартовал.