Перейти к содержанию

Цифровая логика: от вентилей до регистров

Как устроена цифровая логика: базовые вентили и их таблицы истинности, как по таблице получить формулу и схему, как упростить её картой Карно, и как из логических элементов получаются защёлки, триггеры и регистры — со встроенными калькуляторами для своих функций.

Обновлено Редакция GAW

Цифровая логика работает с сигналами, у которых всего два значения: 0 и 1, ложь и истина. Любое цифровое устройство — от счётчика до процессора — собрано из логических элементов, которые выполняют операции булевой алгебры, и элементов памяти, которые хранят их результат. Применить алгебру логики к переключательным схемам предложил Клод Шеннон в работе о релейных схемах, выполненной в MIT.

Логические элементы

ЭлементОбозначениеВыход равен 1, когдаA=0 B=0A=0 B=1A=1 B=0A=1 B=1
И (AND)A · Bоба входа равны 10001
ИЛИ (OR)A + Bхотя бы один вход равен 10111
И-НЕ (NAND)¬(A · B)хотя бы один вход равен 01110
ИЛИ-НЕ (NOR)¬(A + B)оба входа равны 01000
Исключающее ИЛИ (XOR)A ⊕ Bвходы различаются0110
Исключающее ИЛИ-НЕ (XNOR)¬(A ⊕ B)входы совпадают1001

Инвертор (НЕ) меняет 0 на 1 и обратно. Элементы И-НЕ и ИЛИ-НЕ универсальны: из одних двухвходовых И-НЕ можно собрать любую функцию. В КМОП-схемах каждый каскад по природе инвертирует, поэтому И-НЕ и ИЛИ-НЕ получаются одним каскадом, а И и ИЛИ — двумя. Важная тонкость: И-НЕ и ИЛИ-НЕ не ассоциативны — трёхвходовый И-НЕ нельзя получить, соединив два двухвходовых каскадом, как это делают с И. Исключающее ИЛИ нужно в сумматорах и при расчёте чётности и контрольных сумм, например CRC.

Таблица истинности и формула

Функцию задают таблицей истинности: для N входов в ней 2^N строк, по одной на каждую комбинацию. По таблице всегда можно записать формулу в виде суммы произведений (дизъюнктивной нормальной формы, СДНФ): для каждой строки, где выход равен 1, пишут произведение всех переменных — прямых, если в строке 1, и инверсных, если 0, — и объединяют эти произведения через ИЛИ. Двойственная форма — произведение сумм (СКНФ) — строится по строкам, где выход равен 0. Сумма произведений сразу превращается в схему: инверторы, вентили И на каждое произведение и вентиль ИЛИ на выходе.

Калькулятор строит таблицу по выражению или вектору значений, записывает СДНФ и СКНФ и находит минимальные формы:

Исходные данные

Функция задана

Переменные — латинские буквы (a, B, x1). Операции: ¬ ! not, ∧ & and, ∨ | + or, ⊕ ^ xor, → ->, ≡ ==; «AB» — то же, что A ∧ B, A' — отрицание

Столбцы таблицы

Результат

Минимальная ДНФ
a ∧ ¬c ∨ b ∧ ¬c
Минимальная КНФ
(a ∨ b) ∧ ¬c
СДНФ
¬a ∧ b ∧ ¬c ∨ a ∧ ¬b ∧ ¬c ∨ a ∧ b ∧ ¬c
СКНФ
(a ∨ b ∨ c) ∧ (a ∨ b ∨ ¬c) ∧ (a ∨ ¬b ∨ ¬c) ∧ (¬a ∨ b ∨ ¬c) ∧ (¬a ∨ ¬b ∨ ¬c)
Вектор значений
00101010единиц — 3, нулей — 5

Таблица истинности

8 строк; номер строки — двоичное число из значений переменных, первая переменная — старший разряд.

№abca ∨ b¬c(a ∨ b) ∧ ¬c
0000010
1001000
2010111
3011100
4100111
5101100
6110111
7111100

Минимизация и карта Карно

Совершенная форма обычно избыточна: два произведения, которые отличаются значением одной переменной, сливаются в одно без неё — A · B + A · ¬B = A. Найти такие пары проще, если переставить строки таблицы так, чтобы соседние отличались ровно одним битом. Это и делает карта Карно: таблица истинности записывается двумерной таблицей, строки и столбцы нумеруются кодом Грея (00, 01, 11, 10), а крайние столбцы и строки считаются соседними — карту надо представлять свёрнутой в цилиндр (для 4 переменных — в тор).

Единицы обводят прямоугольными группами по 1, 2, 4, 8 клеток; каждая группа — одно произведение, из которого выпадают переменные, меняющиеся внутри группы. Чем больше группа, тем короче произведение. Комбинации входов, которые никогда не встречаются, помечают как безразличные (x) и включают в группы, если это их увеличивает.

Исходные данные

Число переменных

номера строк таблицы истинности от 0 до 15, например 1, 3, 5-7; или нажимайте на клетки карты

значение не важно: его можно взять и 0, и 1

Группировать

Результат

CD
00
01
11
10
00
01
11
10
Минимальная ДНФ
AB' + AC' + BCD'
Группа 1: 4 клетки
AB'
Группа 2: 4 клетки
AC'
Группа 3: 2 клетки
BCD'

Мультиплексор

Мультиплексор (MUX) выбирает один из входов по сигналу выбора: при S = 0 на выход идёт вход D0, при S = 1 — D1. Его формула — Y = ¬S · D0 + S · D1. Мультиплексор тоже универсален: на нём можно собрать инвертор, И и ИЛИ, а значит, и любую функцию.

Память: защёлка и триггер

Если выход мультиплексора завести обратно на его вход D0, получится элемент памяти — D-защёлка. Пока управляющий вход G равен 1, выход повторяет вход D (защёлка «прозрачна»); когда G становится 0, выход сохраняет последнее значение. Чтобы значение запомнилось надёжно, вход D должен быть стабильным некоторое время до спада G — это время установки (setup time) — и некоторое время после него — время удержания (hold time).

Две защёлки, включённые друг за другом и управляемые противофазными сигналами, образуют D-регистр, или D-триггер. Он записывает вход только в момент фронта тактового сигнала — нарастающего, перехода из 0 в 1 — и хранит значение до следующего фронта; между фронтами изменения входа на выход не проходят. На таких регистрах и строится синхронная логика: между регистрами стоит комбинационная схема, и такт должен быть длиннее её задержки с учётом времени установки.

Из регистров собирают остальные узлы: регистр из N триггеров с общим тактом хранит N-битное число, сдвиговый регистр — цепочка триггеров, где выход одного подан на вход следующего, — сдвигает данные на разряд за такт, счётчик — регистр с комбинационной схемой прибавления единицы на входе.

Частые вопросы

Чем вентиль И-НЕ отличается от И?

И-НЕ (NAND) — это И с инверсией на выходе: он выдаёт 0, только когда все входы равны 1, и 1 во всех остальных случаях. Из одних двухвходовых И-НЕ можно собрать любую логическую функцию — инвертор, И, ИЛИ и всё остальное, — поэтому такой элемент называют универсальным. В КМОП-технологии И-НЕ и ИЛИ-НЕ реализуются одним каскадом, а И и ИЛИ требуют ещё инвертора.

Что такое карта Карно?

Это таблица истинности, переписанная в виде прямоугольной таблицы, где строки и столбцы пронумерованы кодом Грея: соседние клетки отличаются значением ровно одной переменной, а крайние столбцы и строки тоже считаются соседними. Группа соседних единиц размером 2, 4, 8 клеток заменяется одним произведением без переменных, которые в группе меняются. Так находят минимальную формулу без перебора тождеств.

Чем защёлка отличается от триггера?

Защёлка (latch) прозрачна, пока на её управляющем входе активный уровень: выход повторяет вход, а при смене уровня значение запоминается. Триггер, или D-регистр, собран из двух защёлок, работающих в противофазе, и записывает вход только в момент фронта тактового сигнала — между фронтами изменения входа на выход не проходят. Поэтому синхронные схемы строят на триггерах.

Сколько строк в таблице истинности?

Для N входов — 2^N строк: каждая строка — одна комбинация входов. Для 3 входов это 8 строк, для 6 — 64, а для схемы сложения двух 32-битных чисел — 2^64, поэтому большие функции описывают формулами, а не таблицами.

Источники

  1. C. Terman. 6.004 Computation Structures, Spring 2017. MIT OpenCourseWare, 4.1 Combinational Logic: Annotated Slides — таблица истинности на 2^N строк, сумма произведений по таблице, вентили И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, универсальность И-НЕ, неассоциативность И-НЕ и ИЛИ-НЕ, карта Карно в коде Грея, мультиплексор
  2. C. Terman. 6.004 Computation Structures, Spring 2017. MIT OpenCourseWare, 5.1 Sequential Logic: Annotated Slides — защёлка на мультиплексоре с обратной связью, время установки и удержания, D-регистр из двух защёлок, срабатывание по фронту тактового сигнала, сдвиговые регистры
  3. C. E. Shannon. A symbolic analysis of relay and switching circuits. Thesis (M.S.), Massachusetts Institute of Technology, 1940 — работа, в которой булева алгебра применена к релейным и переключательным схемам

Нашли ошибку?