Вы находитесь на странице: 1из 47

ГЛАВА 1

Булевы функции

1.1. Понятие булевых функций


Булевыми функциями называются функции f(x 1,x2, ... xn), которые так же, как
и их переменные, могут принимать два значения - 0 и 1.
Функция от n аргументов (переменных) определена на 2 n наборах аргументов
или точках. Иногда это множество наборов называют булевым пространством, а
каждый элемент этого пространства – булевым вектором.
Например:
 B = { 0,1}
 B2 = {0,1}  {0,1} = {00, 01, 10, 11}; B 3=B2B= {000, 001, 010, 011, 100,
101, 110, 111}.
Здесь операция  - декартово произведение множеств.
Определение 1.1. Декартовым (или прямым) произведением двух множеств
AB называется множество всех упорядоченных пар, в котором первый элемент
каждой пары принадлежит множеству A, а второй – B.
Булева функция задает отображение Bn в B (f(X): Bn  B).
X= {x1, x2, … xn}  Bn; xj  B (здесь X – набор).
Функция f отображается на каждую вершину B n нулем или единицей. x1, … xn
– переменные, x1, x1, x2 , x2 . . . – литералы. Литерал – это есть переменная
или ее отрицание.
Если g(X) = f(X) на всех вершинах Bn, то g(X) и f(X) эквивалентны.
Функция называется полностью определенной, если на любом наборе
известно ее значение. Если же на некоторых наборах значения функции не
определены, то функция называется неполностью определенной или частично-
определенной.
Всего существует 2 в степени 2n различных функций от n переменных,
включая константы нуля и единицы и тривиальные функции.

1.2. Способы представления булевых функций


1. Таблица (Truth table)
2. Алгебраическое представление (в виде формул)
7
3. Геометрическое представление функции
4. Диаграммы двоичных решений (Binary Decision Diagram, BDD).
5. Схема.

1.2.1.Табличный способ задания


Для задания функции используется таблица, содержащая 2 n строк. Каждой
строке соответствует набор переменных и значение функции на данном наборе
(в правом столбце). Для всех возможных комбинаций переменных (наборов)
перечисляются значения функции. По сложившейся традиции наборы
упорядочиваются в порядке возрастания (лексикографическое упоядочение).
Табл.1.1
x1x2 . . . xn f(x1,x2, . . . xn)
00 ...00 0
00 ...01 1
. .
. .
. .

11 ...11 1

1.2.2. Алгебраическое задание функции


Для дальнейшего изложения введем некоторые определения.
Литерал - это переменная или инверсия переменной : x i, xi.
Нормальный терм – терм произведение или терм-сумма, в которых нет
переменных, встречающихся более одного раза.
Конъюнктивный терм или терм-произведение (product term) – один литерал
или конъюнкция литералов. Дизъюнктивная нормальная форма (SOP – sum of
products) – дизъюнкция термов-произведений.
Дизъюнктивный терм или терм-сумма (sum term) – один литерал или
дизъюнкция литералов. Конъюнктивная нормальная форма (POS – product of
sums) – конъюнкция термов-сумм.
Минтерм – терм-произведение, содержащий n литералов функции от n
переменных. Обычно соответствует единичным точкам функции (конституента
единицы).
Макстерм – терм-сумма, содержащий все n литералов. Обычно
соответствует нулевым точкам функции (конституента нуля).
Теорема о разложении:
Разложением Шеннона функции f(x1,x2,...,xn) по одной переменной x1
называется представление ее в виде
f(x1,x2, . . . ,xn) = x1 f(0,x2, . . . ,xn) +x1f(1,x2, . . . ,xn);
Разложение Шеннона по переменной xi:
8
f(x1,…xi-1,xi,xi+1, . . . ,xn) = xi f(x1,…xi-1,0,xi+1, . . . ,xn) +xif(x1,…xi-1,1,xi+1, . . . ,xn);
Доказывается эта теорема путем подстановки значений аргументов x i=0 и
xi=1.
Разложение по всем переменным:
f(x1,x2, . . . ,xn) = x1 x2 . . . xn f(0,0,. . . ,0) + x1 x2 . . . xn f(0,0, . . . ,1) + . . .
… +x1 x2 . . . xn f(1,1,. . . ,1).
Нормальные формы представления функции
Любая функция может быть представлена как дизъюнкция термов-
произведений, каждый из которых представляет собой конъюнкцию всех
переменных (с отрицаниями или без них) и значений этой функции на
соответствующем конкретном наборе значений переменных. Это следует из
разложения Шеннона по всем переменным.
Обозначим для {0,1}, x =x при  = 0 и x=x при  = 1 (x - первичный
терм). Тогда окончательная форма представления любой функции будет иметь
вид:
f(x1,x2, . . . ,xn) =  f (1, 2,. . . n)=1( x11 x22 . . . xnn). (1.1)
Taк как значения функции на каждом конкретном наборе или 0, или 1, то в
формуле останутся только те термы, которые соответствуют наборам
переменных, на которых функция равна единице.
Такая форма представления называется совершенной дизъюнктивной формой
(СДНФ).
f(x1, . . . xn) = K1+K2+ . . . + Km, m1, где каждый терм Ki (терм-произведение)
представляет собой конъюнкцию взятых с отрицаниями или в прямом виде
переменных функции. Количество букв во всех конъюнкциях равно n. K i - это
конституента единицы или минтерм (значение функции определяется
минимальным значением первичных термов). Иногда такую форму
представления называют списком минтермов функции (minterm list).
Если некоторые конъюнкции содержат число букв (литералов) меньшее, чем
n, то это дизъюнктивная нормальная форма (ДНФ).
Представление булевых функций в СДНФ единственно (каноническая
форма).
Другой канонической формой является конъюнктивная нормальная форма.
Из определения первичных термов вытекает: xi1=xi0 = xi , a xi0=xi1=xi.
Применим формулы Де Моргана к выражению (1). Получим:
f(x1,x2, . . . ,xn) = f (1, 2,. . . n)=1 x11 x22 . . . xnn =

=  f (1, 2,. . . n)=1 (x11+ x22 + . . . + xnn) или

f(x1,x2, . . . ,xn) = f (1, 2,. . . n)=1 (x11+ x22 + . . .+ xnn).


1 2
Представление =  f (1, 2,.
f(x1,x2, . . . ,xn)функции в .виде (x11,x
. n)=0 f(x x2,x
2+ n)
x2nnD
+.=. .D+1D ). (1.2)
k , k≥1, называется
совершенной конъюнктивной нормальной формой (СКНФ). Дизъюнктивный
9
терм, который содержит n литералов, называется конституентой нуля или
макстермом (значение функции определяется максимальным начением
первичных термов). Если некоторые конъюнкции содержат число литералов
меньшее, чем n, то это конъюнктивная нормальная форма (КНФ).
Представление булевых функций в КДНФ единственно.
Принцип двойственности
Если в выражении для некоторой функции f(x 1,x2,… xn) все операции И
заменить на ИЛИ, все операции ИЛИ заменить на И, то будет получена функция,
двойственная заданной (обозначается fD).
fD(x1,x2 …xn, +,, ~,) = f(x1,x2 …xn, ,+, ~,) ;
fD(x1,x2 …xn,) = f (x1, x2, . . . xn); (1.3)
Примеры двойственных функций:
Табл. 1.2
Функция 0 Функция 1
Функция 1 Функция 0
Функция x Функция x
Функция x Функция x
Функция x1+x2 Функция x1x2
Функция x1x2 Функция x1+x2

Пример 1.1 Табл.1.3


x1 x2 x3 f(x1,x2x3) fD(x1,x2x3) fD(x1,x2,x3)
0 0 0 1 0 0
0 0 1 1 1 0
0 1 0 0 0 1
0 1 1 0 1 1
1 0 0 0 1 1
1 0 1 1 1 0
1 1 0 0 0 1
1 1 1 1 0 0

Принцип двойственности используется в основном для доказательства
тождеств булевой алгебры.
Инвертировав обе части равенства 1.3, получаем обобщенную теорему Де
Моргана.
f (x1,x2 …xn) = f D(x1, x2, . . . xn) (1.4)
Обобщенная теорема Де Моргана
Если в выражении для некоторой функции f(x 1,x2,… xn) все операции И
заменить на ИЛИ, все операции ИЛИ заменить на И, все инверсные переменные
10
заменить на прямые, все прямые переменные заменить на инверсные, то будет
получена функция, инверсная заданной.
f (x1,x2 …xn, +,,) = f(x1,x2 …xn, ,+) ;

1.2.3. Геометрическое представление булевых функций


Любая функция от n переменных может быть представлена в виде n-мерного
куба.
X1
10 11
B0
0 1 X1 00 01
F(x1) B1 X2
X2 F(x1,x2) B2

X1 0100 0110
100 110 0101
0111
101 111 1100
0000 0010 1110
000 010
X2 1101 1111
001
011 X4 0001 0011 1000 1010
X3 X3
F(x1,x2,x3,x4)
F(x1,x2,x3) B3 1001
B4 1011
X4

Рис. 1.1. Геометрическое представление булевых функций

1.2.4. Представление функций в виде полиномов


Теорема Жегалкина.
Любая переключательная функция f(x 1,x2, ... xn) может быть представлена в
виде полинома:
f(x1,x2, . . . xn)=а0  а1x1  a2x2  . . .  anxn  an+1x1x2  . . .  aNx1x2 . . . xn,
где a0, . . . аN – некоторые константы, равные нулю или единице.
Для доказательства нужно представить функцию в виде СДНФ. Затем
заменить все дизъюнкции на операции “сумма по модулю 2”, а переменные с
инверсией xj на 1xj.
Пусть задана функция таблицей 1.4.

Табл.1.4
11
x1 x2 x3 f(x1x2x3)
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

Представим эту функцию в виде СДНФ:


f(x1,x2,x3) = x1x2x3 + x1 x2 x3 + x1 x2 x3 + x1 x2x3;
Так как минтерм принимает значение, равное единице, только на одном
наборе, то операцию “ИЛИ” (+) можно заменить операцией суммой по модулю
два (). Так какxi = 1 xi, после подстановки имеем следующее:
f(x1,x2,x3) = (1x1)(1x2)(1x3) (1x1)(1x2)x3  (1x1)x2(1x3) 
 x1x2(1x3) = 1 x1 x1x2  x2x3.
В полиномы Жегалкина входят только литералы без знака инверсии.
Аналогичным образом могут быть записаны полиномы Рида-Маллера, у
которых некоторые литералы могут быть со знаком инверсии (и тогда только с
ним).
Aлгебра Жегалкина – это алгебра над множеством двух бинарных булевых
функций  AND, XOR и константой 1.
x1  x2 = x2  x1;
x1(x2  x3) = x1x2  x1x3;
x  x=0; x  0 =x; x1=x;
Пример 1.2
Задана функция f(x1,x2,x3). Требуется найти полином Жегалкина.
В общем случае полином Жегалкина функции трех переменных имеет
следующий вид: f(x1,x2,x3) = a0Åa1x1Åa2 x2 Å a3x3 Å a12x1x2 Å a13x1x3 Å
Å a23x2x3 Å a123x1x2x3
Определение коэффициентов осуществляется следующим образом.
f(0,0,0) = 1 = a0; Þ a0=1;
f(0,0,1) = 1 = a0Åa3 = 1 Å a3; Þ a3=0;
f(0,1,0) = 0 = a0Åa2 =1Å a2; Þ a2=1;
f(0,1,1) = 1 = a0Å a2 Å a3Å a23= 1Å1Å 0 Å a23; Þ a23=1;
f(1,0,0) = 0 = a0Åa1=1Åa1; Þa1=1;
f(1,0,1) = 1 = a0Åa1Åa3Åa13=1Å 1Å 0 Å a13; Þa13=1;
f(1,1,0) = 0 = a0Åa1Åa2Åa12=1Å1Å1Åa12; Þa12=1;
f(1,1,1) = 1 = a0Åa1 Åa2Åa3 Å a12Åa13Åa23Åa123=
=1Å 1Å 1Å 0 Å1Å 1Å 1Å a123; Þa123=1
12
Отсюда f(x1,x2,x3)= 1Å x1Å x2Å x1x2Å x1x3Å x2x3 Å x1x2x3 ∎

1.3. Функционально-полные системы булевых функций


Функционально-полным набором (или базисом), называется такое множество
булевых функций, суперпозицией которых могут быть выражены любые булевы
функции.
Суперпозицией называется подстановка в качестве аргументов одной
функции некоторoй другoй функции.
Проблема определения базисов булевых функций была решена Постом.
Постом было выделено пять классов переключательных функций, каждый из
которых является замкнутым, т.е. применяя операции суперпозиции к любым
функциям из заданного класса, получаем функции из того же класса.
1. Сохраняющие ноль функции.
Функция f(x1,x2, . . . xn) сохраняет ноль, если f(0,0, . . . 0) =0. Примерaми
функций, сохраняющих ноль, являются конъюнкция, диз’юнкция,
исключающее ИЛИ (XOR).
Всего таких функций от n аргументов 2 в степени 2 n-1 .
2. Сохраняющие единицу функции.
Функция f(x1,x2, . . . xn) сохраняет единицу, если f(1,1, . . . 1) =1.
Примерами являются конъюнкция, дизъюнкция; XOR не сохраняет единицу.
Всего таких функций от n аргументов 2 в степени 2n-1 .
3. Монотонные функции.
Функция f(x1, x2, . . . xn) является монотонной, если при возрастании набора
аргументов ее значение не убывает. Конъюнкция и дизъюнкция являются
примерами монотонных функций.
Двоичный набор A = <a1,a2,...,an> не меньше двоичного набора B=
<b1,b2,...,bn>, если для каждой пары (ai,bi) i = 1...n справедливо соотношение a i
>= bi.
Так, набор 1011 >= 1010. Вместе с тем наборы 0101 и 1011 несравнимы в
том смысле, что для них не выполняется ни соотношение A >= B, ни A <= B.
Минимальная форма монотонной функции не содержит инверсий
переменных.
4.Самодвойственные функции.
Функция f(x1,x2, . . . xn) называется самодвойственной, если для каждой
пары противоположных наборов она принимает противоположные значения,
т.е. для любого набора (1,2, . . . n), f(1,2, . . .n) =f(1,2, . . . n).
Для самодвойственной функции имеет место тождество: f (x1, x2, . . .
xn) = f(x1,x2, . . .xn). Поэтому самодвойственная функция полностью
определяется своими значениями на первой половине строк. Число

13
самодвойственных функций от n аргументов равно 2 2**(n-1) =(22**n).
Символами ** обозначена операция возведения в степень.
Пример самодвойственной функции приведен в таблице 5.
Табл.1.5
x1x2x3 f(x1,x2,x3)
0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 0

Примеры самодвойственных функции: функция отрицание, функции


суммы и переноса трехвходового (полного – full adder, FA) сумматора.
5. Линейные функции.
Функция называется линейной, если ее полином Жегалкина имеет
следующий вид:
f(x1, x2, . . . xn) = a0  a1x1  a2x2  . . .  anxn..
Число линейных функций от n аргументов равно 2 n.
Доказательство того, что все перечисленные пять классов замкнуты,
основано на применении операций суперпозиции и подстановки.
Пример 1.3
Задана линейная функция y= a  b c.
Пусть c=d  f; После подстановки значение функции y = a  b d  f;
Получена линейная функция. Аналогично для всех остальных функций. ∎
Теорема Поста (без доказательства):
Для того, чтобы множество N булевых функций было базисом, необходимо и
достаточно, чтобы:
1. N содержало бы по крайней мере одну функцию, не сохраняющую ноль.
2. N содержало бы по крайней мере одну функцию, не сохраняющую единицу.
3. N содержало бы по крайней мере одну немонотонную функцию.
4. N содержало бы по крайней мере одну несамодвойственную функцию.
5. N содержало бы по крайней мере одну нелинейную функцию.
Необходимость этих условий доказывается от противного.
Примеры функционально полных базисов функций:
 И, ИЛИ, НЕ - базис Буля (не является минимальным).
 И-НЕ (функция штрих Шеффера);
 ИЛИ-НЕ (функция стрелка Пирса);
 И, , константа 1.
14
Минимальное количество функций в базисе – одна (базис И-НЕ или
ИЛИ-НЕ). Максимальное количество функций в минимальном базисе - четыре.

1.3.1. Булевы функции двух переменных


Число переключательных функций от двух переменных равно 16. В это
число входят тривиальные функции f(x 1,x2)=x1 и f(x1,x2)=x2, константы нуля и
единицы f(x1,x2=0, f(x1,x2)=1, инверсии переменных. Булевы функции двух
переменных приведены в таблице 1.6.
Табл.1.6

x1x2
00 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
01 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
10 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
11 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
x1x2

x1x2
x1
x1x2
x2
x1 x2
x1+ x2

x1+ x2

x1 x2

x2

x1 +x2

x1

x1 + x2

x1x2
1
ИЛИ-НЕ
Константа нуля

Конъюнкция

Запрет по x2
Переменная x1
Запрет по x1

Сумма по mod2

Дизъюнкция

Инверсия x2

Импликация от x2 к x1

Инверсия x1

Импликация от x1 к x2
Равнозначность

И-НЕ
Константа единицы
Переменная x2

x x x x x x x x C1
x x x x x x x x C2
x x x x x C3
x x x x C4
x x x x x x x x C5

C1 – класс функций, сохраняющих ноль


C2 – класс функций, сохраняющих единицу
C3 – класс монотонных функций
C4 – класс самодвойственных функций
C5 – класс линейных функций
Из таблицы 6 видно, что только две функции NAND и NOR не принадлежат
ни к одному из пяти замкнутых классов, то есть являются базисом.

1.4. Неполностью определенные функции

15
Иногда возникают ситуации, которые приводят к тому, что некоторые
комбинации входных сигналов никогда не поступают на вход комбинационной
схемы или же значения выходных сигналов при этих комбинациях не
принимается во внимание. Такие функции называются неполностью
определенными.
F(f,d,r): Bn  {0, 1, *}, где * - неопределенные значения F.
f(x)=1 в единичных точках функции F(x),
r(x) = 1 в нулевых точках F,
d(x) = 1 в неопределенных точках функции F.
Иначе можно записать следующим образом:
F(f,d,r) формирует разбиение Bn,
т.е. f +d + r = Bn. fd = fr =rd = (попарно не пересекаются).

1.5. Диаграммы двоичных решений


Диаграммы двоичных решений (Binary Decision Diagrams, BDD) – это граф,
являющийся модификацией семантического дерева.
Семантическое дерево – это двоичное дерево, корень которого помечен
двоичной функцией от n переменных, из каждого узла идут по два ребра,
соответствующих двум значениям очередной переменной, а 2 n листьев
помечены соответствующими значениями функции.
В BDD узлы с одним и тем же значением функции объединены. Если на
каждом уровне BDD все вершины имеют одну и ту же метку (одинаковые
переменные, то такая BDD называется упорядоченной (Ordered BDD). BDD
используeтся как компактная форма представления булевой функции. Такое
представление полезно в тех случаях, когда нужно многократно вычислять
значения функции при различных наборах аргументов.
Пример 1.4. Задана функция таблицей 1.7.
Табл.1.7
x1x2x3 f(x1,x2,x3)
000 1
001 1
010 1
011 0
100 0
101 0
110 1
111 0

Семантическое дерево
При составлении семантического дерева корень дерева отмечен переменной
x1. Вершины следующего яруса будут отмечены переменной x 2, вершины яруса,
который следует за x2 – переменной x3, a вершины нижнего яруса – значениями
функции. Пунктирные линии соответствуют инверсиям переменных.
16
Root node x1 f(x1,x2,x3)

~(x2x3) x2 ~x3
x2 x2

x3 ~x3
x3 x3 ~x3 x3

1 1 1 0 0 0 1 0

Рис. 1.2. Семантическое дерево функции (табл.1.7)

f(x1,x2x3) = x1x2+x1x2 x3 + x1x2x3

1.6. ROBDD – Reduced Ordered BDD


Диаграммы двоичных решений (BDD) получаем из семантического дерева,
объединяя узлы с одним и тем же значеним функции.
Для построения ROBDD из BDD (операция Reduce) применяется следующая
последовательность действий:
 Oбъединение терминальных вершин (оставляют только две – 0 и 1).
 Удаление вершины, оба выхода которой ведут в один и тот же подграф.
Если оба исходящих из некоторого узла t ребра указывают на один и тот
же следующий узел, например, u, то узел t можно отбросить, связав все
входящие в t ребра с узлом u.
 Слияние одинаковых подграфов.
После минимизации получаем ROBDD (Reduced Ordered BDD).
BDD и ROBDD неполностью определенных функций имеют три терминальных
вершины ( добавляется еще одна терминальная для неопределенных значений).
BDD представляет собой сжатое дерево разложения функции по n
аргументам. Листовые вершины дерева помечаются константами 0 и 1.Каждой
вершине BDD соответствует коэффициент Шеннона (кофактор функции).
Одна и та же функция при изменении порядка дает разные ROBDD. Для
заданного порядка переменных ROBDD является канонической.
После удаления избыточных тестовых узлов получим следующее:

Root node x1 f(x1,x2,x3)


1
~(x2x3) x2 ~x3 17
0x2
x2

~x3
1 x3 x3
0 ~x3

1 0 1 0
Рис. 1.3. BDD функции, представленной в табл.1.7.

x1

x2 x2
1
x3

1 0
y=x1x2x3 +x1x2x3+x1x2
Рис. 1.4. ROBDD функции табл.1.7.
После удаления дублирующих значений функции и дублирующих тестовых
узлов получим ROBDD.
ROBDD представления функции существенно зависит от порядка
переменных. Изменим порядок переменных функции и составим новую таблицу
(порядок переменных x2 , x1, x3).
Табл.1.8
x2x1x3 f(x2,x1,x3)
000 1
001 1
010 0
011 0
100 1
101 0
110 1
111 0

18
На рис. 1.5 (а) и (б) представленa последовательность преобразования
ROBDD.

Root node f(x1,x2,x3)


x2
x2

~(x2x3) x1 x1 x2 ~x3 x1

x3

x3 x3 x3 ~x3
x3 ~x3
1
0 1
y = ~x2~ x1 + x2 ~x3
1 0 (б)
(a)
Рис. 1.5. ROBDD функции: (а) после удаления избыточных значений функции,
(б) после удаления избыточных и дублирующих тестовых узлов

Операция Apply
Операция Apply используется для построения ROBDD по заданной
логической схеме. Над ROBDD применяются следующие операции:
1. f|x=b - подстановка вместо x константы 0 или 1. Полученная функция от x
не зависит.
2.`f - изменение значений терминальных вершин: {0,1}на {1,0}.
3. f Ä g, где Ä - любая логическая операция AND, OR, XOR, ®…
fÄg = x (f|x=1 Äg|x=1) + x (f |x=0 Äg|x=0).

Для всех компонентов строятся BDD, которые затем объединяются с


помощью оператора Ä.
Применение оператора Ä может быть описано следующим образом. Каждой
вершине соответствует индекс, который совпадает с номером данной
переменной при упорядочении.
1. Если v1 и v2 являются терминальными вершинами, то сгенерировать
терминальную вершину u новой BDD очень просто: value (u) = value (v1) Ä
value (v2).
2. Если index(v1) = index(v2) = i, то для создания новой вершины low(u)
алгоритм apply применяется рекурсивно для low (v1) и low (v2), a для генерации
high(u) алгоритм apply применяется для high (v1) и high (v2) . После получения
новой вершины u, index (u) = i.

19
3. Если index(v1)=i, но index(v2)>i, то для получения low(u) нужно
применить оператор к подграфу low(v1) и к v2. Для получения high(u) нужно
применить оператор к high(v1) и v2, index (u) = i.
4. Если index(v1)=i, но index(v2)< i, то для получения low(u) нужно
применить оператор к low(v2) и к v1. Для получения high(u) нужно применить
оператор к high(v2) и v1 , index (u) = i.
Производится рекурсивный спуск в поддеревьях по переменной u=0 (u=1).
Построение ROBDD для функции, заданной в аналитической форме

Для построения BDD используется разложение функции по переменной.


Пусть функция задана в виде формулы Y=ab + acd.
Зaдаем порядок переменных, например: аbcd. Корнем дерева является
вершина, отмеченная переменной a.
 Разложение Y по переменной a: Y =aY|a=0 + aY|a=1.
Обозначим разложения (кофакторы) функции по остальным аргументам
буквами 1, 2, 3, 4.
 1= Y|a=0 = cd; 2=Y|a=1 = b; 3=2|b=0= 0; 4=2|b=1=1; 4=1|c=0=0; 5=1|
c=1=d;
На основании полученных выражений строится BDD (рис.1.6).

b b
cd c

d d

0 1

Рис. 1.6. ROBDD функции Y=ab + acd


Полученная BDD является ROBDD. При необходимости производится
минимизация BDD с помощью алгоритма Reduce.
Построение ROBDD функции, соответствующей логической схеме
Постановка задачи:

20
 Задана комбинационная схема и известно аналитическое выражение
булевой функции, которая должна быть реализована данной схемой.
 Требуется определить, совпадает ли данная схема с ее спецификацией.
Для этого определяется ROBDD логической схемы и сравнивается с
ROBDD реализуемой функции.
Задана схема на рис.1.7.
y2
a
b
y1 y3 Y

c
d y4

Рис. 1.7. Анализируемая схема


Строится BDD для всех промежуточных функций схемы y1,y2,y3,y4 , используя
оператор Apply. Результирующая BDD функции Y представляет собой BDD
заданной схемы.

y1=a y2=ab y3=y1c


a a
a

b c
1 0

0 1 0 1

Рис.1.8. BDD функций y1,y2,y3.


y4=y3d y2=ab Y=y2 +y4
v1 a a a
High v1 v2
Low v2 High v2
b
c + =
b c
Low v1
d
d

0 1 0 1
0 1

Рис.1. 9. BDD функции Y.


21
Применив операцию Apply получим результирующую BDD Y=y4+y2
(рис.4). Данная BDD является редуцированной, т.е. ROBDD.
ROBDD на рис.1.9. изоморфна ROBDD на рис.1, следовательно схема,
представленная на рис.2, удовлетворяет своей спецификации.
Многие функции с помощью ROBDD могут быть представлены более
компактно, чем SOP (DNF). Например, на языке C, вместо хранения громоздкой
таблицы истинности можно вычислить оператор: f=x2?(x3? 0:1):(x1? 0:1)

1.6.3. Применение BDD

BDD применяются в следующих областях:


 В системах автоматизированного синтеза для формальной
верификации логических схем
 Для построения логических схем на мультиплексорах 2:1 ( в FPGA)
 В криптографических системах
 В программировании

1.7. Задачи
1.1. Представить в табличной форме следующие функции:
 Y= abc + abc + abc
 Y = (a+b)(a+c)(a + b)
 Z= x1 +x2x3 + x2
 Y = x1x2 + x1x2x3
 Y = abc + abc
1.2 Определить полином Жегалкина функции y = x1 +x2 + x3.

1.3 Определить функцию, двойственную функции y=x1x2 +x3(x1+x4)

1.4 Сколько существует линейных функций от n переменных?

1.5 Сколько существует самодвойственных функций от n переменных?

1.6 Минимизировать выражение y = a + ab + ac

1.7 Построить ROBDD функции, заданной с помощью следующей таблицы.

Табл. 1.9
x1 x2 x3 y
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
22
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1

1.8 Построить ROBDD функции, дуальной функции, заданной Табл.1.9.

1.9 Задана функция f(x1,x2,x3,x4), принимающая значения, равные единице,


на наборах 0, 2, 5, 7, 11, 14, 15. Представить эту функцию в СДНФ и
СКНФ.

1.10 Задана функция f(x1,x2,x3,x4) = (x 1+x2)(x3+x4). Определить, является ли


данная функция монотонной или линейной.

1.11 Задана функция f(x1,x2,x3,x4) = (x1+x2)(x3+x4). Определить, является ли


данная функция самодвойственной или линейной.

1.12 Задана функция f(x1,x2,x3) = (x1+x2)x3 +x1x2. Построить ROBDD


данной функции для порядка аргументов x1, x2, x3 и ROBDD для порядка
x3, x2, x1. Сравнить полученные ROBDD.

23
ГЛАВА 2
Принципы проектирования комбинационных
логических схем

2.1. Понятие комбинационной и последовательностной схем


Логические схемы делятся на два класса: комбинационные и
последовательностные. Комбинационной схемой называется такая логическая
схема, сигналы на выходах которой зависят только от текущих значений
входных сигналов. Выходные сигналы последовательностной схемы
определяются не только текущими значениями входных сигналов, но также
зависят от последовательности значений, поданных на входы схемы в прошлом.
Комбинационная схема может состоять из логических элементов (вентилей,
инверторов). Комбинационные схемы не имеют обратных связей. Наличие
обратной связи делает комбинационную схему последовательностной.
Операция, выполняемая комбинационной схемой, полностью описывается
таблицей истинности (truth table). Поведение последовательностной схемы
можно описать таблицей состояний (таблицей переходов и выходов).

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


Для построения любой комбинационной схемы обычно используются
несколько типов логических элементов (вентилей – gate).
a a a
a y y y y
b b b
NOT AND OR XOR
a a a
y y y
b b b
NAND OR XNOR

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

Таблицы истинности логических элементов


Табл. 2.1
24
a b AND OR NAND NOR XOR XNOR
0 0 0 0 1 1 0 1
0 1 0 1 1 0 1 0
1 0 0 1 1 0 1 0
1 1 1 1 0 0 0 1
Табл.2.2
a NOT
0 1
1 0

2.2.1. Теоремы Де Моргана в применении к логическим вентилям


(a) x1x2 = x1 + x2
x1
x1 x1
x2 x2
x2

(б) x1+x2 = x1 x2
x2
x1
x1 x1
x2 x2
x2

Рис. 2.2. Теоремы Де Моргана в терминах логических элементов

2.3. Двухуровневые реализации логических схем


Функциям, представленным в дизъюнктивной или в конъюнктивной
нормальной форме, соответствуют двухуровневые реализации И-ИЛИ или ИЛИ-
И.

Пример 2.1
Функция задана в дизъюнктивной нормальной форме (SOP).

Y = ab + cd ∎

25
a
b
y
c
d
Рис. 2.3. Реализация И-ИЛИ

Пример 2.2
Функция задана в конъюнктивной нормальной форме (POS)
z =(a +b)×(c+d) ∎
a
b
y
c
d
Рис. 2.4. Реализация ИЛИ-И

2.4. Этапы синтеза комбинационных схем


Синтез схем является составной частью проектирования схемы. Этапы
синтеза:
1. Формулировка задачи и задание функции (обычно в виде таблицы или с
помощью формул)
2. Минимизация булевой функции
3. Построение схемы, реализующей данную функцию

2.4.1. Минимизация булевых функций в классе дизъюнктивных


нормальных форм
Сложность схемы, реализующей булеву функцию, определяется сложностью
ее аналитической записи. Так как одну и ту же функцию можно представить
разными формулами, то задача выбора наиболее простой формулы
непосредственно ведет к получению наиболее простой схемы. Минимальной
формой булевой функции в некотором базисе можно считать такую, которая
содержит минимальное число суперпозиций функций базиса, допуская и скобки.
Однако построить эффективный алгоритм минимизации с получением
минимальной скобочной формы трудно.
Рассмотрим более простую задачу минимизации, при которой ищется
минимальная ДНФ функции.
Минимизация булевой функции f(x1,x2,...,xn), заданной в виде ДНФ,
производится следующим образом.
26

a y a b AND OR XOR a b NAND NOR XNOR


0 1 0 0 0 0 0 0 0 1 1 0
1 0 0 1 0 1 1 0 1 1 0 1
1 0 0 1 1 1 0 1 0 1
1 1 1 1 0 1 1 0 0 0
1. Определяются все простые импликанты функции f.
2. Определяется кратчайшее покрытие eдиничных точек функции простыми
импликантами.
Определение 2.1. Импликантой P некоторой функции f называется
конъюнкция (терм-произведение), которая покрывает хотя бы одну единичную
точку и, возможно, некоторые неопределенные точки этой функции, и не
покрывает нулей.
Импликанта называется простой (prime), если из нее нельзя удалить ни
одного литерала.
Импликанта функции, которая содержит все n литералов функции покрывает
одну единичную точку функции. Импликанта, содержащая n-1 литерал,
покрывает две единичные точки функции. В общем случае, импликанта,
которая содержит n-k литералов, покрывает 2n-k единичных (и возможно
неопределенных) точек функции.
Теорема о простых импликантах
Минимальная форма функции fmin является дизъюнкцией простых импликант
функции f.
Эта теорема легко доказывается от противного. Предположим, что
существует минимальная реализация И-ИЛИ, в которой выход каждого
элемента является конъюнктивным термом, например P i, но не является простой
импликантой. Тогда должна существовать простая импликанта (P K),
покрывающая те же точки, что и P i, но содержащая меньшее число литералов.
Поэтому логический элемент, реализующий Pi, может быть заменен другим
элементом с меньшим числом входов.

2.4.2. Определение простых импликант с помощью карт Карно


Карты Карно являются графическим способом представления булевых
функций нескольких переменных
Метод определения простых импликант с помощью карт Карно применяется
для функций с небольшим числом переменных – до шести. Каждой клетке карты
Карно соответствует комбинация или набор переменных (вершина n-мерного
куба).
Каждой клетке карты Карно функции от двух переменных сооветствует один
из четырех наборов аргументов: 00, 01, 10, 11. Эти наборы обозначены m0, m1,
m2, m3.
Картa Карно для функции от трех переменных f(x1,x2,x3) приведены на
рис.2.6. Иногда двумя переменными отмечают строки, а одной переменной –
столбцы (карта будет повернута на 90 градусов).

27
x2x3
x2 0 1 x1 00 01 11 10
x1
0 m0 m1 0 m0 m1 m3 m2
1 m2 m3 1 m4 m5 m7 m6

Рис. 2.5. Карта Карно функции f(x1,x2) Рис. 2.6. Карта Карно функции f(x1,x2,x3)

Карта Карно для функции от 4-х переменных содержит 16 клеток.


x3
x3x4
x1x2 00 01 11 10
00 m0 m1 m3 m2 x2x3
01 m4 m5 m7 m6 x1 00 01 11 10 P1=x2x3
x2
11 m12m13 m15m14 0 1
x1 1 1 1 1
1
10 m8 m9m11 m10
P2 =x1
x4
Рис. 2.7. Карта Карно функции от 4-х
Рис.
аргументов
2.8. Импликанты функции от 3-х аргументов (пример)

Строки карты Карно отмечаются комбинацией переменных x1, x2, а столбцы – x3,
x4. На пересечении любой строки и любого столбца находится определенный
набор переменных.
Наборы функции f(x1,x2, x3, x4) обозначены символами m0, m1 . . . m15.
Например, набор 1001 (m9) находится на пересечении строки, отмеченной
комбинацией 10 и столбца, отмеченного комбинацией 01. Комбинационная
функция представляется на карте Карно в виде единичных точек функции и
неопределенных значений. Каждая 1 на карте соответствует минтерму в СДНФ.
Пример 2.3
Задана карта Карно функции f(x1,x2, x3) (рис. 2.8).
Двум соседним единицам на карте Карно соответствует импликанта,
которая содержит n-1 литерал (т.е. для данного примера 2). Четырем
соседним единицам соответствует импликанта, которая содержит n-2
литерала. Нули на карте не отмечают.
После минимизации f(x1,x2, x3) = P1 + P2 = x2x3 + x1
2.5. Минимизация неполностью определенной функции
Задана функция от четырех переменных: y=f(x 1,x2,x3,x4) с помощью таблицы
2.3. Эта функция является неполностью определенной. Значения функции
безразличны на наборах 1,14,15.

Табл. 2.3
28
x3 P2
x3x4
x1x2 00 01 11 10
P1 - 1 P3
00
1
01
x2
11 1 1 - -
x1
10 1 1
x4 P2

Рис. 2.9. Карта Карно заданной функции.

2.5.1. Нахождение простых импликант с помощью карты Карно


Импликанты функции: P1 = x1x2; P2 = x2x4; P3 = x2x3x4; P4= x1x4
Импликанта называется существенной, если существуют точки функции,
которые покрываются только данной импликантой.
Импликанта P4 в минимальное покрытие не входит, так как она не является
существенной.
Импликанта P1 существенна в отношении точки (или набора) 1100.
Импликанта P2 существенна в отношении точки 0011.
Ymin = x1x2 +x2x4 + x2x3x4;
В данном примере значения функции на всех неопределенных точках
доопределены единицами. Если какой-то неопределенный набор не использован
для формирования импликанты, значит доопределение производится нулем.
Минимизированная схема (рeализация AND-OR) представлена на рис.2.10.
x1
x2

x4

x3
x4

Рис. 2.10. Минимизированная схема И-ИЛИ

29
2.6. Минимизация функций в конъюнктивной нормальной форме
Для получения минимальной двухступенчатой реализации необходимо
получить как минимальную SOP, так и минимальную POS, и сравнить их. В
большинстве случаев либо одна, либо другая форма дает лучшие результаты.
Минимизацию функций с помощью карт Карно иногда называют
визуальным методом минимизации.

Пример 2.3
Найдем минимальную реализацию OR-AND для той же функции, заданной
Табл.2.9.
На основании обобщенной теоремы Де Моргана (1.3), произведем
минимизацию инверсной функции y. Для этого нули на карте Карно
рис.2.9. заменим единицами, а единицы - нулями.
x3
x3x4 P6
P6 x1x2 00 01 11 10
1 - 1
P5 00
P8
01 1 1 1
x2
11 - -
x1
10 1 1
P6
P6
x4

Рис. 2.11. Карта Карно для инверсной функции

Определим импликанты функции y - P5, P5, P7.


P4 = x1x3 ; P5 = x1x4; P6 = x2x3x4
Импликанта P8 в минимальное покрытие не входит (включена равнозначная
ей по числу букв импликанта P7).
y =x1x3 +x1x4 + x2x3x4
Заменив все конъюнкции дизъюнкциями, все дизъюнкции конъюнкциями,
взяв дополнение всех переменных, получим минимальную каноническую
форму функции
y = (x1+x3)(x1+x4)(x2+x3+x4 )
Схема, составленная на основе данного выражения представлена на рис.
2.12. В данном случае реализация ИЛИ-И содержит на один инвертор
больше, чем реализация И-ИЛИ. ∎

30
x1

x2
x3 y

x4

Рис. 2.12. Минимизированная схема ИЛИ-И

2.7. Минимизация с помощью n-мерного куба


Покажем импликанты данной функции на 4-мерном кубе.
X2
x2x3x4
0100
0110
x1x2
X2
0101 0111

0010 1100
0000 X 1110
0001 X 1101 X 1111
0011 1000
X4 1010
X3
x2x4 1001
1011
X4 X1
x1x4

Рис. 2.13. Импликанты функции на 4-мерном кубе

Импликанта x2x4 покрывает вершины 0001, 0011, 1011 и 1001. Импликанта


x1x4 покрывает вершины 1001, 1101, 1011, 1111. Импликанта x 1x2 покрывает
вершины 1101, 1100, 1110, 1111. Импликанта x 2x3x4 покрывает вершины 0110
и 1110.
Для получения минимального решения импликанту x 1x4 нужно исключить
из рассмотрения, так как она покрывает те же вершины, что и существенные
импликанты x1x2 и x2x4. Тогда получаем выражение:
Ymin = x1x2 + x2x4 + x2x3x4

2.8. Минимизация неполностью определенных функций


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

31
Если значения функции не заданы в m точках, то ее можно доопределить 2 m
способами.
Поэтому задача минимизации состоит в выборе из 2 m полностью определенных
функций одной, которая имеет минимальную ДНФ или КНФ.

2.9. Реализация булевых функций в базисах И-НЕ (NAND)


и ИЛИ-НЕ (NOR)
Построение схемы на элементах И-НЕ.

Для реализации схемы в базисе И-НЕ удобно воспользоваться записью


функции в дизъюнктивной нормальной форме.
Воспользуемся выражением, полученным в предыдущем параграфе
y = x1x2 +x2x4 + x2x3x4; Применим закон Де Моргана.
y = x1x2 +x2x4 + x2x3x4 = x1x2 x2x4 x2x3x4

Данная запись содержит только операции „штрих Шеффера” (NAND).


x1
x2

x3
x4

Рис. 2.14. Реализация функции на элементах И-НЕ.

Инвертор также может быть реализован на с помощью И-НЕ.


Построение схемы на элементах ИЛИ-НЕ
Для реализации схемы в базисе ИЛИ-НЕ удобно воспользоваться записью
функции в конъюнктивной нормальной форме.

y = (x1+x3)(x1+x4)(x2+x3+x4 )
y = (x1+x3)(x1+x4)(x2+x3+x4 ) = (x1+x3) + (x1+x4) +(x2+x3+x4 )

Данная запись содержит только операции „стрелка Пирса” (NOR).

32
x1

x2
x3 y

x4

Рис. 2.15. Реализация функции на элементах ИЛИ-НЕ.

Инвертор также может быть реализован на элементе И-НЕ.

2.10. Программные методы минимизации

Метод Квайна – Мак-Класки


Табличный алгоритм минимизации был предложен Квайном и Мак-Класки в
1950 году (Quine-McCluskey method). Этот метод минимизации может
использоваться для минимизации неполностью определенных функций и
состоит из двух этапов:
1. Генерация простых импликант функции
2. Нахождение кратчайшего покрытия единиц функции простыми
импликантами

2.10.1. Генерация простых импликант


Для определения простых импликант функции f требуется :
1. Составить таблицу для всех единиц и неопределенных точек функции f,
разбитых на классы S0, S1, S2, . . . , Sn, где Si содержит все такие точки с i
единицами в наборах и n-i нулями. Элемент таблицы, соответствующий
минтерму mi является двоичным представлением i.
2. Сравнить каждый элемент в S i с каждым элементом Si+1 для всех i (0in).
Для пар, отличающихся только в одном литерале x j, сформировать новые
импликанты, покрывающие обе точки. В полученных импликантах в
позиции для xj указывается неопределенное значение (например, “-“) а
остальные переменные сохраняют те же значения, что и в паре
комбинируемых строк.
3. Новые импликанты поместить в класс S i’, а термы, использованные для их
образования, пометить знаком, например знаком . Присвоить каждой
новой импликанте метку 1, если хотя бы один из термов, используемых
для ее образования имеет метку 1. Если оба терма имеют метку
неопределенности (-), то эта же метка присваивается новой импликанте.

33
4. Повторить шаги 2 и 3, используя S i’ и Si+1’ для образования Si“. Аналогично
образовать Si“’ из Si“и Si+1“. Эта процедура продолжается до тех пор, пока
дальнейшие комбинации окажутся невозможными. При этом
неопределенные переменные комбинируемых термов сохраняют свою
неопределенность и во вновь образованных импликантах.
5. Термы, не участвовавшие в процедуре (отсутствует знак (), являются
простыми импликантами, если им не соответствует метка
неопределенности.
Пример 2.4
Задана функция f(x1,x2,x3), принимающая значение, равное 1 на наборах 1, 2,
4, 6 и неопределенное на наборе 7. Можно записать следующим образом:
f(x1x2x3) = (1,2,4,6), d(x1x2x3) = (7).

Составим таблицу:

Табл.2.4

X1 X2 X3 f
0 0 1 1
S1 0 1 0 1 
1 0 0 1 
S2 1 1 0 1 
S3 1 1 1 - 
S1’ x 1 0
1 x 0
S2’ 1 1 x

Импликанты x1x2x3, x2x3, x1x3, x1x2 являются простыми импликан-


тами (сравнение классов S1’и S2’ показывает, что новые импликанты не
образуются).
После того, как все простые импликанты функции определены, наступает
второй этап минимизации – нахождение минимального подмножества
простых импликант, покрывающих все единицы функции. Это
производится с помощью таблицы простых импликант функции (табл.2.5).
Каждому минтерму функции соответствует один столбец, а каждой
импликанте  одна строка. На пересечении столбца и строки ставится
единица только в том случае, если данная импликанта покрывает точку
функции, соответствующую минтерму.

34
Табл. 2.5

m1 m2 m4 m6
x1x2 x3(P1) 1
x2 x3 (P2) 1 1
x1x3 (P3) 1 1
x1x2 (P4) 1

Введем некоторые определения:


1. Существенно простая импликанта.
Простая импликанта Pi называется существенной в отношении некоторой
точки mj, если эта точка не покрывается больше никакой другой
импликантой.
2. Доминирующая строка
Строка Pi и соответствующая импликанта называется доминирующей над
некоторой другой строкой Pj, если она содержит единицы во всех столбцах,
что и строка Pj. Eсли строка Pi доминирует над Pj, то существует
минимальное покрытие, не содержащее Pj. Поэтому строку Pj, которая
“перекрывается” другими импликантами, можно исключить из таблицы.
3. Доминирующий столбец.
Столбец mj доминирует над столбцом m k, если каждая простая
импликанта, покрывающая mj, покрывает также и mk. Поэтому столбец mk,
который “перекрывается” другими столбцами, можно исключить из таблицы.
С учетом вышесказанного получаем fmin = x1x2 x3 + x2 x3 + x1x3 . Все
импликанты являются существенными. ∎

2.10.2. Нахождение кратчайшего покрытия


Для нахождения кратчайшего покрытия выполняются следующие шаги:
1. Определяются все существенные импликанты.
2. Вычеркиваются все столбцы, которые покрываются этими импликантами,
и все строки, соответствующие данным импликантам. Строки, которые
перекрываются другими импликантами, также вычеркиваются.
3. Вычеркиваем все столбцы, которые перекрываются другими столбцами.
В результате получаем таблицу меньшей размерности, определяем
сушественные импликанты второго порядка и т.д.
4. Если все оставшиеся столбцы покрываются существенно простыми
импликантами второго порядка, то задача решена.
Однако исходная или упрощенная таблица могут не содержать существенных
строк и доминирующих строк и столбцов (циклические таблицы).
Если нет существенных строк и существенных столбцов, то используют
метод ветвления. Согласно этому методу, последовательно выбирают строки из
подмножества строк, например, строку P i. Предполагают, что выбранная строка
является существенной и рекурсивно выполняют шаги 2, 3, 4. В этом случае
35
получают субоптимальное решение относительно строки Pi. Переходят к
следующей строке, например, Pj. Получают новое субоптимальное решение.
Лучшее из всех субоптимальных решений считают оптимальным.
Пример 2.5
Задана функция от четырех переменных y(x1,x2,x3,x4) в табличной форме
(Табл.2.6). Функция принимает единичное значение на наборах переменных,
соответствующих простым десятичным числам.
Табл. 2.6

x1 x2 x3 x4 y x1 x2 x3 x4 y
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 1 0
0 0 1 0 1 1 0 1 0 -
0 0 1 1 1 1 0 1 1 -
0 1 0 0 0 1 1 0 0 -
0 1 0 1 1 1 1 0 1 -
0 1 1 0 0 1 1 1 0 -
0 1 1 1 1 1 1 1 1 -

1. Нахождение простых импликант


Табл. 2.7 Класс x1 x2 x3 x4 y
S1’ 0 0 - 1 1 
Класс x1 x2 x3 x4 y 0 - 0 1 1 
0 0 1 - 1
S1 0 0 0 1 1 
- 0 1 0 1 
0 0 1 0 1 
S’ 0 - 1 1 1 
S2 0 0 1 1 21 
0 1 - 1 1 
0 1 0 1 1 
- 0 1 1 1 
1 0 1 0 -
- 1 0 1 1 
1 1 0 0 -
S’ - 1 1 1 1
S3 0 1 1 1 31 
1 0 1 1 - Табл. 2.8
1 1 0 1 -
1 1 1 0 -
S4 1 1 1 1 -

Табл. 2.9

36
Класс x1 x2 x3 x4 y
S1’’ 0 - - 1 1
- 0 1 - 1
S2’’ - - 1 1 1
- 1 - 1 1

Из Табл.2.9 видно, что новые импликанты не образуются. Переходим к


следующему шагу минимизации.
2. Нахождение кратчайшего покрытия.
Табл. 2.10
Импликанты 0001 0010 0011 0101 0111
001 - 1 1
-1-1 1 1
0- - 1 1 1 1 1
- 0 1 - 1 1
- - 1 1 1 1

Импликанта -01- является существенной импликантой (точка 0010


покрывается только этой импликантой). Вычеркиваем строку, соответствующую
этой импликанте, и столбцы 0010 и 0011.
Других существенных импликант нет.
После исключения импликант таблица имеет следующий вид.
Табл. 2.11

Импликанты 0001 0011 0101 0111


001 - 1 1
-1-1 1 1
0- - 1 1 1 1 1
- - 1 1 1 1

Столбец 0001 доминирует над столцом 0011, поэтому его можно удалить.
Строка 0 - - 1 доминирует над строками 001-, -1-1, - - 11 . Она обязательно
входит в результирующее покрытие.
Таким образом, y(x1,x2,x3,x4) = x1x4 + x2x3. ∎

2.10.3. Метод Петрика


С помощью рассмотренных выше правил не всегда удается получить
минимальное покрытие. Первоначальная или упрощенная таблица может не
содержать существенных строк и доминирующих строк и столбцов. Такие
таблицы называются циклическими.
Для решения задач покрытия небольших таблиц простых импликант удобно
использовать метод Петрика.

37
Каждая точка (набор переменных) функции может быть покрыта любой
импликантой, принимающей единичное значение в данной точке.
Пусть задана циклическая таблица (Табл.2.12).
Условие того, что столбец mj покрыт какой-то импликантой, есть выражение
Pk + Pm +…+PR =1, где Pi , Pk, . . . PR – импликанты, покрываэщие точку mj.
Табл. 2.12
m1 m2 m3 `m4 m5 m6 m7
P1 1 1 1
P2 1 1
P3 1 1 1 1
P4 1 1
P5 1 1 1 1
P6 1 1 1

Условие покрытия всех столбцов таблицы, содержащей m столбцов, есть


конъюнкция всех дизъюнкций импликант и формулируется следующим
образом: ( Pi) =1. Это конъюнкция дизъюнкции импликант i-й точки.
После применения операции конъюнкции к дизъюнкции простых импликант
для каждой точки, получим выражение, каждый член которого представляет
собой множество простых импликант, покрывающих все “1” точки функции.
Если стоимость всех простых импликант одинакова, то минимальное покрытие
характеризуется конъюнкцией, содержащей минимальное число букв.
Определим минимальное покрытие для Табл.2.12.
(P1+P3)(P2+P3 +P6)(P1 +P2 +P5)(P4+P5+P6)(P3+P5)
Так как все Pi представляют собой булевы переменные, то получим,
например, при умножении двух первых членов следующее:
(P1+P3)(P2+P3 +P6) = P1P2+P3P2+P1P3+P3+P1P6+P3P6 = P1P2+P3+P1P6
После умножения на оставшиеся три члена и применения операций
поглощенияокончательно получаем следующее выражение:
(P1+P3)(P2+P3+P6)(P1+P2+P5)(P4+P5+P6)(P3+P5)=P1P2P5+P1P3P4+P2P3P4+P1P3P6+
+P2P3P6+P3P5+P1P5P6
Минимальное покрытие равно {P3 ,P5}.
Ввиду сложности нахождения произведения этот метод может применяться для
небольших таблиц.
2.11. Минимизация системы булевых функций
На практике у большинства комбинационных схем число выходов бывает
больше одного. Если комбинационная схема имеет N выходов, то ее поведение
описывается системой из N булевых функций. Задачу минимизации схемы с N
выходами можно свести к решению N независимых задач минимизации схем с
одним выходом. Однако, с точки зрения всей схемы, такая минимизация, как
правило, не будет оптимальной.
38
Критерием оптимизации в классе ДНФ является число букв в
конъюнктивных термах и число термов – т.е. аналитические выражения всех N
функций суммарно должны содержать минимальное число букв.
Пример 2.6
Заданы две функции f1 и f2 от трех аргументов в виде карт Карно.
x2x3 x2x3
f1 f2
x1 00 01 11 10 x1
00 01 11 10
0 1 0 1 1 1
1 1 1 1

Рис. 2.16. Карты Карно для раздельной минимизации функций f1 и f2

 Задачу построения схемы с двумя выходами можно рассматривать как


две независимые задачи проектирования схем с одним выходом.
Минимизация функций производится в отдельности. После
минимизации получаются следующие выражения: f 1 = x1x2 + x2x3 ; f2 =
x1x2 + x1x3. Полученная по данным выражениям схема представлена
на рис.2.17.
x1
x2
f1
x3

f2

Рис. 2.17. Раздельная реализация функций

 Минимизация функций производится с учетом общих частей. Для этого


определяется произведениe функций f1 и f2 (обозначим P).
Произведение P = x1 x2x3.
x2x3 x2x3
f1 f2
x1 00 01 11 10 x1 00 01 11 10
0 1 0 1 1 1
1 1 1 1
Рис. 2.18. Карты Карно для совместной минимизации функций f1 и f2
Выражения для функций f1 и f2 будут иметь следующий вид:
f1 = x1x2 + P = x1x2 + x1 x2x3 ; f2 =x1x2 + P = x1x2 + x1x2 x3
Схема, составленная по полученным выражениям, приведена на рис. 2.19.

39
В ней содержится на один элемент AND меньше, чем в предыдущей.
Общее число входов при раздельной минимизации равно 14, а при
совместной минимизации – 13.
x1
x2

f1
x3

f2

Рис. 2.19. Совместная реализация функций ∎


Пример 2.7
Заданы две функции f1 и f2 от 4-х аргументов с помощью карт Карно
(рис.2.20) .
x3 x3
x3x4 x3x4
x1x2 00 01 11 10 x1x2 00 01 11 10
– 1 P1 00 1 1 –
00
01 – 1 01
x2 x2
11 1 1 – 11 – 1
x1 x1
10 – 1 10 1 1 – 1

x4 x4

Рис. 2.20. Карты Карно реализуемых функций


Найдем произведение этих функций P = f 1f2.
 значение функции P равно 1 в точках, в которых обе функции f1 и f2 равны
1.
 значение функции P равно 0 в точках, в которых или обе функции f1 и f2
равны 0, или одна функция равна 0, а значение другой не определено.
 значение P не определено в точках, в которых обе функции не равны 0, а
также или обе функции не определены, или одна из них не определена.
Карта Карно произведения функций представлена на рис.2.21.
P = x1 x3 x4 + x2 x3  x4.

40
Карты Карно после удаления общих импликант показаны на рис. 2.22.
Единичные точки карт Карно функций f 1 и f2 которые покрываются
функцией P, заменим на неопределенности.

x3
x3x4
x1x2 00 01 11 10
1
00
P1
01
x2
11 – 1 –
x1
10 – –

x4

Рис. 2.21. Карта Карно функции P= f1f2

x3 x3
x3x4 x3x4
x1x2 00 01 11 10 x1x2 00 01 11 10
P1 00 – – P1 00 1 – –

01 – 1
x2 01
x2
11 1 – – 11 – –
x1 x1
10 – – 10 1 – – 1

x4 x4

Рис. 2.22. Карты Карно функций после замены точек функции P


неопределенностями
Результатом совместной минимизации функций будут следующие
выражения (общие части выделены):
f1= x2x4 + P = x2x4 + x1 x3 x4 + x2 x3  x4;
f2 = x2x4 + P = x2x4 + x1 x3 x4 + x2 x3  x4;
Сравним этот результат с раздельной минимизацией функций.

Раздельная минимизация заданных функций приводит к получению


следующих выражений:
f1 = x2x4 + x2x4 + x1 x2 x3;
f2 = x2x4 + x1x3 +x2x3
Как видно из полученных выражений, раздельная минимизация приводит к
получению более сложной схемы.
41
Общее число входов при совместной реализации равно 16, при раздельной
реализации – 19. ∎
Пример 2.8
Требуется построить схему с двумя выходами, реализующую следующие
функции: f(x1,x2,x3,x4) = m( 0,2,4,6,7,9) + D(8,10,11) и

g(x1,x2,x3,x4) = m( 0,2,4,6,7,8,9) + D(10,11).


m – минтермы функции, D – неопределенные наборы переменных.
Карты Карно функций представлены на рис. 2.22.
x3 x4 f x3 x4 g
x1 x2 00 01 11 10 x1 x2 00 01 11 10
00 1 1 1
00 –
01 1 1 1 01 1
11 11 – 1 –
10 – 1 – – 10 1 1 1

Рис. 2.23. Карты Карно реализуемых функций

1. Совместная минимизация функций.

Определение произведения функций (рис.2.24)


x3 x4 g
x1 x2 00 01 11 10 P2
00 – 1
P2
01 1
P3 11
P2
10 – 1 –
P2
P1

Рис. 2.24. Карта Карно произведения P = fg

42
x3 x4 x3 x4
x1 x2 00 01 11 10 x1 x2 00 01 11 10
00 – – 00 – –
P4
01 – 1 1 01 –
P5
11 11 – 1
10 – – – 10 – – –

Рис. 2.25. Карта Карно функций после замены точек функции P


неопределенностями

P = x1x2x3 +x1x3x4 +x2x4.


Единичные точки карт Карно функций f и g, которые покрываются
функцией P, заменим на неопределенности.
Теперь нужно определить импликанты P4 и P5, которые покрывают
оставшиеся единичные точки функций f и g.
f = P + x1x2x3; g = P + x1x2x4;
Схема, реализующая данные функции, приведена на рис.2.26.
x1 x1
x2
~x1 ~x3

x2 ~x1
~x2 ~x3 P
~x4
x3
~x2
~x3
~x4
x4
~x4 ~x1
x2 f
x3
x1
x2 g
x4

Рис. 2.26. Совместная реализация функций

1. Раздельная минимизация функций.

43
x3 x4 f x3 x4 g
x1 x2 00 01 11 10 x1 x2 00 01 11 10
00 1 1 1
00 –
01 1 1 1 01 1
11 11 – 1 –
10 – 1 – – 10 1 1 1

Рис. 2.27. Карты Карно при раздельной минимизации функций

f = x1x2 + x1x4 + x1x2x3; g = x2x4 + x1x3x4 + x1x2x3


+x1x3x4; ∎
Оценка сложности полученных реализаций по числу входов.
Общее число входов логических элементов схемы с совместной
минимизацией функций (рис.2.26) равно 21.
Общее число входов логических элементов схемы с раздельной
минимизацией равно 25. Примерный выигрыш – 8 транзисторов.
Формальный алгоритм минимизации многовыходных функций для схем
большого размера изложен в Л1. Он основан на рассмотрении функций-
произведений всех минимизируемых функций, общее число которых 2 k-k-1, где
k- количество минимизируемых функций.
Простая импликанта схемы со многими выходами для набора из k функций –
это простая импликанта одной из k функций или одной из функций-
произведений.
Первый шаг минимизации в случае многих выходов состоит в нахождении
всех многовыходных простых импликант. После того, как простые импликанты
найдены, выбираются существенные среди них.
В рассмотренном примере (рис.2.20) кон’юнктивный терм x 2x4 является
существенно простой импликантой функции f 1, а терм x2x4 является
существенно простой импликантой функции f 2.
Заключительный этап состоит в выборе минимального набора простых
импликант, чтобы покрыть оставшиеся единичные клетки всех k функций.
Временные характеристики логических схем
Одна из сложных задач, возникающих в процессе проектирования – учет
временных характеристик логических схем.
Комбинационная схема характеризуется задержкой реакции или отклика
(contamination delay) и задержкой распространения сигнала (propagation delay)..
На рис. 2.28 показана временная диаграмма работы буфера.
Сигнал y начинает изменяться через интервал tcd после изменения входа а, но
его точное значение установится через интервал tpd.

44
a y

y
tcd
tpd
Рис. 2.28. Задержка реакции и задержка распространения
Задержка реакции Tcd– это минимальное время от момента изменения входа
до момента изменения выхода. Для схем с несколькими выходами – это
время, когда любой выход начинает изменяться.
Задержка распространения Tpd – это максимальное время от начала
изменения входа до момента времени, когда все входы достигнут своего
установившегося значения.
Обычно величина задержки измеряется от момента времени, когда входной
сигнал достигает половины своего уровня, до момента, когда выходной сигнал
достигает половины уровня. Задержки современных схем измеряются в
пикосекундах (ps, 10-12sec) и в наносекундах (ns, 10-9sec).
Для анализа схемы используют кратчайший и критический пути.
Критический путь –это путь с наибольшей задержкой.
Пример: Задана схема, реализующая функцию y= a  b  c  d (рис. 2.29.).

a tpd
n1
a=10 Critical path
b=0 n1
n2
c=0
n2
d=0 y
y
Short path

Рис. 2.29. Временные диаграммы критического пути


Критический путь проходит через три элемента XOR.

Для короткого пути Tcd=Tpd_xor. Задержка определяется как сумма всех


элементов пути.

45
n1 tcd
a=1
b=0 n2 d
c=0
y
d=0 y

Short path
Рис. 2.29. Временные диаграммы короткого пути
Причины задержек в схемах – время, требуемое для перезарядки емкостей
цепи, а также время распространения электромагнитных волн в среде.
Кроме этого на величины задержек влияют следующие факторы:
 неодновременность изменения сигналов на входах схемы
 разные задержки нарастания и спада сигналов
 замедление работы схемы при повышении температуры и ускорение
при понижении.

2.12. Пороговая логика


В 1943 году Уоррен Мак-Каллок и Уолтер Питтс предложили формальную
модель нейрона как переключательной функции в виде логической схемы,
имеющей конечное число двоичных входов и один двоичный выход.
Формальный нейрон является упрощенной моделью естественного нейрона.
Каждый вход xi имеет вес wi. Нейрон возбуждается, если суммарное
взвешенное возбуждение его входов не меньше некоторого порога срабатывания
. Другими словами, выход нейрона равен единице, если wi*xi  . Такой
нейрон называется нейроном с пороговой функцией активации (или
передаточной функцией, или функцией срабатывания).
С изменением порога и весов входов изменяются также и логические
функции, реализуемые нейроном.
x1 w1
y
x2 w2

Рис. 2.30. Формальная модель нейрона


Рассмотрим формальный нейрон с двумя входами, изображенный на рис.2.30.
Суммарное возбуждение  для этой схемы рассчитывается так:
= w1*x1 + w2* x2.
В этом параграфе знаки “+” и “ –“ обозначают арифметические операции.
Веса могут быть положительными (соответствуют возбуждающим связям в
нейронной сети) и отрицательными (тормозящие связи).
46
Пусть w1=w2=1, тогда =x1 + x2. Если =1, то эта схема реализует
дизъюнкцию x1x2; при =2 схема реализует конъюнкцию x1x2.
Oбратнaя задача: для заданного нейрона найти такие веса входов и порог его
срабатывания, чтобы этот нейрон реализовал заданную двоичную функцию,
например, конъюнкцию (Л2).
Очевидно, что для решения задачи для конкретного нейрона (рис.2.28) нужно
решить систему 4-х неравенств:
Табл. 2.13
x1 x2 w1*x1 + w2*x2
0 0 0 0<
0 1 0 w2 < ;
1 0 0 w1 < 
1 1 1 w1+w2  
Этой системе неравенств удовлетворяет решение =2, w1=w2=1.
Oбычно выбирают , исходя из  wi=min.
Рассмотрим еще одну задачу: найти веса входов и порог срабатывания
нейрона для функции “исключающее ИЛИ”.
Получаем следующее:
Табл. 2.14
x1 x2 w1*x1 + w2*x2
0 0 0 0<
0 1 1 w2
1 0 1 w2
1 1 0 w1+w2 <

Из второго и третьего неравенств следует, что w1+w2 2. А это противоречит


четвертому неравенству.
В пороговой логике не существует элемента с двумя входами, реализующего
функцию “исключающее ИЛИ”.

2.13. Мажоритарные функции


Мажоритарные функции реализуются с помощью мажоритарного элемента.
Задача мажоритарного элемента (Л4) произвести голосование и передать на
выход величину, соответствующую большинству из входных. Мажоритарный
элемент может иметь только нечетное число входов (как правило 3 или 5). Если
n – четное число, то для получения единицы на выходе, на n/2 + 1 входах
должны быть единицы.
Функционирование 3-входового мажоритарного элемента представлено
таблицей 2.15.
а1, а0 – старший и младший разряды двухразрядного кода, указывающего
номер отказавшего канала (номер входа, значение которого отличается от
остальных двух).
47
Табл. 2.15
x1 x2 x3 F a1 a0
0 0 0 0 0 0
0 0 1 0 1 1
0 1 0 0 1 0
0 1 1 1 0 1
1 0 0 0 0 1
1 0 1 1 1 0
1 1 0 1 1 1
1 1 1 1 0 0

Определим функции, реализуемые мажоритарным элементом.


x2x3 F x2x3 a1 x2x3 a0
x1 00 01 11 10 x1 00 01 11 10 x1 00 01 11 10
0 1 0 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1

Рис. 2.31. Карты Карно функций F, a1, a0


F=x1x2 + x1x3 + x2x3; a1 =x2x3; a0 = x1x3.
2.14. Факторизованные формы или скобочные алгебраические
формы
Представление функции в виде CNF или DNF может содержать число
термов, зависящее экспоненциально от числа аргументов n. Эти же функции при
представлении в виде факторизованной формы могут содержать число термов,
полиномиально зависящее от n. Существует достаточно большое число
функций, представление которых в факторизованной форме является более
простым, чем в виде SOP .
Пример (функция “Ахиллесова пята”):
Y=(x1+x2)(x3+x4) . . . (xn-1+xn)
Факторизованная форма содержит n литералов, а представление в ДНФ (SOP)
содержит n/2×2n/2 литералов.
Обычно двухуровневая оптимизация используется для проектирования
управляющей логики, а многоуровневая оптимизация – для проектирования
операционных устройств.
Определение 2.1. Факторизованная форма может быть получена рекурсивно с
помощью следующих правил. Факторизованная форма есть произведение сумм.
При этом выполняется следующее:
 произведение есть или единственный литерал или произведение
факторизованных форм.
 сумма есть единственный литерал или сумма факторизованных форм.
Факторизованная форма есть скобочное алгебраическое выражение.
48
В сущности, факторизованная форма есть произведение суммы произведений
… или сумма произведений сумм . . .
Любая логическая функция может быть представлена в факторизованной
форме и любая факторизованная форма есть представление некоторой
логической функции.
Примеры факторизованных форм:
x , y, abc, a+bc, а+b …..
((a+b)cd+e)(a+b)+e
(a+b)c - не является факторизованной формой, т.к. в факторизованной форме
инверсия разрешена только для литералов.
Три эквивалентные факторизованных формы: ab+c(a+b); bc+a(b+c); ac+b(a+c),
т.е. факторизованные формы не единственны.
Факторизованная форма используется для уменьшения площади и
задержки при синтезе многоуровневых схем.
Во многих случаях, например, при проектировании на базе сложных
вентилей КМОП логики, реализация функций прямо соответствует их
факторизованной форме представления.
2.15. Синтез многоуровневых комбинационных схем
Заданы две функции, представленные в виде SOP.
f1= a×b + a×c + a×d
f2= a×b + a×c + a×e
Функции содержат 6 конъюнктивных термов, среди которых нет общих
(разделяемых ) термов.
Для реализации двухуровневой схемы требуется шесть 2-х входовых схем И,
и две 3-входовых схемы ИЛИ. Если считать, что каждый вход требует два
КМОП транзистора, то общее число транзисторов, считая инвертор, будет равно
38.
Рассмотрим многоуровневую реализацию данной схемы.
Пусть f1= a×(b+c) +a×d; f2=а×(b+c) + a×e
Отметим, что b+c является общим термом в функциях f1 и f2. Обозначим
W= b + c. Тогда. f1 = aW + ad; f2 = aW + a×e. (рис. 2.32)
Для построения схемы CMOS-логики требуется примерно 28 транзисторов.

a f1

b
c f2
d

49
2.32. Многоуровневая реализация логической схемы
Схема на рис. 2.32. по занимаемойплощади будет более эффективной.

2.16. Описание логических схем на Verilog


Для описания булевых функций можно использовать различные стили.
Рассмотрим описание схемы, представленной на рис. 2.33.
x1 g
k
x2
y
f
x3
Рис. 2.33. Комбинационная схема

Описание на уровне вентилей (Gate Level Description)


Для описания используются gate level primitives and, or, not.
module comb_logic1 (x1,x2,x3,y);
input x1, x2, x3 ;
output y;
//internal wire declaration
wire k,g,f ;
not (k, x2);
and (g, x1, k);
and (f, x2,x3);
or (y,g,f);
endmodule

Потоковая форма описания (Data Flow Description)


module comb_logic2 (x1,x2,x3,y);
input x1, x2, x3 ;
output y;
assign y = (x1&~x2)|(x2&x3)
endmodule
аssign – оператор непрерывного присвоения. Когда в правой части
изменяется хотя бы один сигнал, присваиваемое значение вычисляется снова.
Поведенческое описание (Behavioral Description)
module comb_logic3 (x1,x2,x3,y);
input x1, x2, x3 ;
output y;
reg y;
always @(x1 or x2 or x3)
if (x2==0)
y=x1;
else
y=x3;
endmodule
50
if-else оператор является процедурным оператором. Синтаксис языка Verilog
требует, чтобы процедурные операторы находились внутри специальной
конструкции, называемой always блоком. После символа событийного
управления (в скобках) следует список чувствительности (sensitivity list).
Симулятор исполняет always только тогда, когда изменится хоть один сигнал
в списке чувствительности. Это упрощает процесс симуляции, так как нет
необходимости исполнять каждое предложение программы все время.
При синтезе список чувствительности сообщает Verilog-компилятору, какие
сигналы воздействуют на выходные сигналы, вырабатываемые always блоком.

Пример описания мажоритарной функции на Verilog


Поведенческое описание мажоритарной функции F и функций а1, a0
(Табл.2.21).
module majority_func(x, F, a);
input [1:3] x;
output reg F;
output reg [1:0] a;
always @(x)
case (x)
3,5,6,7: F=1;
default: F=0;
endcase
always @(x)
case (x)
0,7: a=2’b00;
1,6: a=2’b01;
2,5: a=2’b10;
3,4: a=2’b11;
endcase
endmodule

2.17. Задачи

2.1 Задана функция f(x1,x2,x3,x4) = Σ (1,4,5,6,12,13,14,15) + D(8,9).


Минимизировать функцию и построить схему на элементах И,ИЛИ,НЕ
(двухуровневые реализации И-ИЛИ и ИЛИ-И).
2.2. Задана неполностью определенная функция в виде карты Карно.
Определить, если возможно, ее значения в неопределенных точках таким
образом, чтобы функция оказалась самодвойственной.

51
x3x4 x3

x1x2 00 01 11 10
00 1 1
01 - 1 x2
11 - 1 -
x1
10 1 1 -

x4
Рис. 2.34.

2.3. Задана схема в базисе NOR. Какую функцию реализует данная схема?
Представить в дизъюнктивной нормальной форме, минимизировать.

a
b

a
y
c
d
c

Рис. 2.35

2.4. Построить комбинационную схему, имеющую четыре входа и четыре


выхода. Схема добавляет единицу ко входному двоично-десятичному
коду. Представить схему в базисах NAND и NOR. Описать на языке
Verilog (behavioral description).

2.5. Начертить карту Карно и присвоить имена переменных входам схемы


NOR-XOR, изображенной на рисунке. Y= x1,x2,x3,x4(2,3,8,9).

Описать схему на языке Verilog (gate level description).

Рис.2.36.

52
2.6. Задана функция f(x1,x2,x3,x4) =(x1Åx3) + (x1x3+~x1~x3)x4+x1~x2
Найти кон’юнктивную нормальную форму минимальной стоимости и
построить схему.
2.7. Построить схему преобразования входного двоично-десятичного кода с
весами 2-4-2-1 в код с избытком 3.

2.8. Определить, какую логическую функцию реализует трехвходовой


пороговый элемент. Значение порога  =3. w1=w2=w3 =1.

2. 9. Построить схему, которая осуществляет добавление единицы к разряду


двоично-десятичного кода.

2.10. Описать на Verilog схему преобразования четырехразрядного кода Грея в


двоичный код.
Tабл. 2.16
a b c d w x y z
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 0 0 0 1 1
0 0 1 1 0 0 1 0
0 1 0 0 0 1 1 0
0 1 0 1 0 1 1 1
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 0
1 0 0 0 1 1 0 0
1 0 0 1 1 1 0 1
1 0 1 0 1 1 1 1
1 0 1 1 1 1 1 0
1 1 0 0 1 0 1 0
1 1 0 1 1 0 1 1
1 1 1 0 1 0 0 1
1 1 1 1 1 0 0 0

2.11. Построить схему преобразователя четырехразрядного двоичного кода в


код Грея. Таблица преобразования приведена выше. (Табл.2.16). Описать
на Verilog.

53