Обучение › Тема 8
Мультиплексоры, дешифраторы и шифраторы: понятное объяснение
8 мин чтения · Команда bitGateLab
Комбинационные узлы средней сложности — это детали, из которых собирается почти любая цифровая система: мультиплексор выбирает одно из нескольких данных, демультиплексор направляет данные к одному из получателей, дешифратор активирует единственную линию в соответствии с двоичным числом, а шифратор делает обратное. Здесь вы увидите их уравнения, таблицы истинности и два применения, которые встречаются на любом экзамене: реализацию логической функции на мультиплексоре и проектирование дешифратора для 7-сегментного индикатора.
Мультиплексор (MUX)
У мультиплексора с 2n входами данных есть n входов выбора и один выход. Двоичное число на линиях выбора указывает, какой вход данных проходит на выход. Самый простой — MUX 2 в 1:
Y = S·I0 + S·I1
При S = 0 выход повторяет I0; при S = 1 повторяет I1. MUX 4 в 1 использует две линии выбора S1 S0, и каждый вход данных умножается на соответствующий ему минтерм сигналов выбора:
Y = S1·S0·I0 + S1·S0·I1 + S1·S0·I2 + S1·S0·I3
| S1 | S0 | Y |
|---|---|---|
| 0 | 0 | I0 |
| 0 | 1 | I1 |
| 1 | 0 | I2 |
| 1 | 1 | I3 |
Каждый член — это AND входа данных с линиями выбора (прямыми или инвертированными), и все они объединяются элементом OR.
Реализация функции на мультиплексоре
Поскольку MUX уже содержит все минтермы своих переменных выбора, он годится в качестве «программируемой функции». На MUX с 2n входами можно реализовать любую функцию n переменных, подав 0 или 1 на каждый вход данных. Более того, на том же MUX можно получить функцию n + 1 переменных, если подключить оставшуюся переменную (или её инверсию) ко входам данных.
Пример: реализуйте F(A, B, C) = Σm(1, 2, 6, 7) на MUX 4 в 1, используя A и B как сигналы выбора (A = S1, B = S0).
- Разбейте таблицу истинности на пары строк с одинаковым значением A B и посмотрите, как F зависит от C.
- AB = 00: m0 = 0 (C = 0), m1 = 1 (C = 1). F = C, поэтому I0 = C.
- AB = 01: m2 = 1 (C = 0), m3 = 0 (C = 1). F = C, поэтому I1 = C.
- AB = 10: m4 = 0, m5 = 0. I2 = 0.
- AB = 11: m6 = 1, m7 = 1. I3 = 1.
Проверка при A = 0, B = 1, C = 0 (минтерм 2): код выбора 01 выбирает I1 = C = 1. Верно, m2 входит в функцию.
Демультиплексор и дешифратор
Демультиплексор (DEMUX) 1 в 4 принимает данные D и направляет их на один из четырёх выходов в соответствии с S1 S0; остальные остаются равными 0: Y0 = D·S1·S0, Y1 = D·S1·S0, Y2 = D·S1·S0, Y3 = D·S1·S0.
Если в DEMUX зафиксировать D = 1 и назвать этот вход «разрешением», получится дешифратор: n входов и 2n выходов, из которых активен только один — тот, что соответствует числу на входе. Дешифратор 3 в 8 формирует все 8 минтермов трёх переменных. Поэтому любая функция трёх переменных собирается из дешифратора и элемента OR, который объединяет выходы её минтермов.
Пример: полный сумматор на дешифраторе 3 в 8. Входы A, B и Cin.
- Сумма S = Σm(1, 2, 4, 7): элемент OR с 4 входами, на которые поданы выходы Y1, Y2, Y4, Y7.
- Перенос Cout = Σm(3, 5, 6, 7): элемент OR с 4 входами, на которые поданы Y3, Y5, Y6, Y7.
Проверьте один случай: A = 1, B = 1, Cin = 0 — это число 110 = 6. Активен только Y6; Y6 не входит в OR для S (S = 0), но входит в OR для Cout (Cout = 1). Действительно, 1 + 1 + 0 = 10 в двоичной системе.
Приоритетный шифратор
Шифратор выполняет обратную операцию: из 2n линий он выдаёт n-битное двоичное число — номер активной линии. Трудность в том, что делать, если активны сразу две; практическое решение — приоритетный шифратор, который выдаёт номер самой старшей из активных линий. Для 4 входов от D3 (наивысший приоритет) до D0:
Y1 = D3 + D2, Y0 = D3 + D2·D1, V = D3 + D2 + D1 + D0
Выход V («данные действительны») показывает, что активен хотя бы один вход; без него нельзя было бы отличить «активен D0» от «не активен ни один», потому что в обоих случаях Y1 Y0 = 00. Проверьте при D2 = D1 = 1: Y1 = 1 и Y0 = 0 + 0·1 = 0, то есть 10 = 2. Побеждает D2, как и должно быть.
Дешифратор BCD в 7-сегментный код
В 7-сегментном индикаторе на каждый сегмент приходится один светодиод. Дешифратор получает цифру в коде BCD (A B C D, где A — старший бит) и зажигает сегменты, из которых складывается эта цифра. Для индикатора с общим катодом 1 означает, что сегмент горит:
| Цифра | ABCD | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|
| 0 | 0000 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0001 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0010 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0011 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0100 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0101 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0110 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0111 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1000 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1001 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Коды от 1010 до 1111 не являются допустимыми кодами BCD, поэтому на карте Карно их считают безразличными условиями (X). Это сильно упрощает уравнение каждого сегмента.
Сегмент a: равен 0 только для цифр 1 и 4. На карте для 4 переменных, с X в клетках с 10 по 15, самые большие группы таковы: A (8 клеток вместе с X), C (8 клеток), B·D (минтермы 5, 7, 13, 15) и B·D (четыре угла: 0, 2, 8, 10).
a = A + C + B·D + B·D
Проверьте цифру 4 (0100): A = 0, C = 0, B·D = 1·0 = 0, B·D = 0·1 = 0. Результат 0: сегмент a не горит, всё верно.
Если индикатор — с общим анодом, каждый сегмент зажигается уровнем 0, так что все выходы инвертируются.
Типичные ошибки
- Перепутать порядок линий выбора: если поменять местами S1 и S0, вход I1 меняется местами с I2 и функция получается неверной.
- Забыть, что у многих дешифраторов выходы имеют активный низкий уровень, и поставить OR там, где нужен NAND.
- Спроектировать шифратор без приоритета и без выхода признака действительности: он выдаёт 00 и когда «активен D0», и когда «не активен ни один вход».
- Применить таблицу для общего катода к индикатору с общим анодом: зажигаются ровно противоположные сегменты.
- Не воспользоваться комбинациями от 1010 до 1111 как безразличными условиями и получить уравнения вдвое длиннее.
Попробуйте в симуляторе
Сравните таблицу истинности функции с её реализацией на мультиплексоре.
- Создайте таблицу истинности с тремя входами A, B, C и отметьте F = 1 в строках 1, 2, 6 и 7.
- Поместите в редакторе мультиплексор 4 в 1 (или соберите его из четырёх AND, двух NOT и четырёхвходового OR) и подключите A и B ко входам выбора.
- Подключите ко входам данных C, инверсию C, постоянный 0 и постоянную 1 — именно в таком порядке.
- Переберите на входах все восемь комбинаций и убедитесь, что выход совпадает с таблицей.
- Повторите то же для сегмента a индикатора: введите его столбец в таблицу для 4 переменных, отметьте строки с 10 по 15 как X и изучите группы, которые предлагает карта Карно.
Упражнения
- Реализуйте F(A, B, C) = Σm(0, 3, 5, 6) на MUX 4 в 1, используя A и B как сигналы выбора.
Ответ
AB = 00: m0 = 1, m1 = 0, I0 = C. AB = 01: m2 = 0, m3 = 1, I1 = C. AB = 10: m4 = 0, m5 = 1, I2 = C. AB = 11: m6 = 1, m7 = 0, I3 = C. Это функция контроля чётности (равна 1 при чётном числе единиц): F = A ⊕ B ⊕ C.
- Сколько линий выбора нужно MUX с 16 входами и сколько переменных, самое большее, может быть у функции, которую он реализует?
Ответ
4 линии выбора (24 = 16). Если подключить оставшуюся переменную ко входам данных, он может реализовать любую функцию, у которой до 5 переменных.
- Найдите уравнение сегмента e, считая комбинации с 10 по 15 безразличными условиями.
Ответ
e = 1 для 0, 2, 6 и 8. Группы: B·D (0, 2, 8, 10) и C·D (2, 6, 10, 14). Результат: e = B·D + C·D = D·(B + C).
- Что выдаёт приоритетный шифратор с 4 входами при D3 = 0, D2 = 0, D1 = 1, D0 = 1?
Ответ
Y1 = 0 + 0 = 0, Y0 = 0 + 1·1 = 1, V = 1. Выход 01: D1 побеждает D0.