Содержание
Задание 1.Определить МДНФ логической функции устройства.
1.1 Составить таблицу соответствия (истинности) функции.
1.2 Перевести логическую функцию от табличной к аналитической форме в виде ДСНФ
1.3 Найти МДНФ различными методами.
1.3.1прямым (алгебраическим) преобразованием;
1.3.2методом Квайна;
1.3.3усовершенствованным методом Квайна (Квайна-Маккласки);
1.3.4методом карт Карно;
1.3.5методом неопределенных коэффициентов;
Задание 2. Составить алгоритм метода минимизации
2.1 Составить содержательный (словесный) алгоритм минимизации функции, разработать граф-схему алгоритма, разработать логическую схему алгоритма в нотации Ляпунова для метода Квайна.
2.2 Составить содержательный (словесный) алгоритм минимизации функции, разработать граф-схему алгоритма, разработать логическую схему алгоритма в нотации Ляпунова для метода минимального покрытия Петрика.
2.3 Разработать рабочие программы по алгоритмам.
Задание 3. Синтез схемы логического устройства.
3.1 Выполнить синтез схемы по ДСНФ и МДНФ в базисе Буля с использованием двухвходовых логических элементов и интегральных микросхем серии 155.
3.2 Функцию МДНФ в базисе Буля полученную в первом задании представить в базисах Шеффера и Пирса.
3.3Обосновать выбор базиса по формулам МДНФ.
3.4 Реализовать в выбранном базисе логическую схему.
Задание 1.
Составить таблицу соответствия (истинности) функции.
Составим таблицу истинности для заданной функции F(X 1 ,X 2 ,X 3 ,X 4).
№ | X 1 | X 2 | X 3 | X4 | F(X1, X2, X3, X4) |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 | 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 | 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 | 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 | 1 0 1 1 0 1 1 1 0 0 1 1 0 0 0 1 |
Матрицу ДСНФ получают путем удаления тех строк, где функция равна нулю. Для нашего случая получим:
№ | X1 | X2 | X3 | X4 |
0 2 3 5 6 7 10 11 15 | 0 0 0 0 0 0 1 1 1 | 0 0 0 1 1 1 0 0 1 | 0 1 1 0 1 1 1 1 1 | 0 0 1 1 0 1 0 1 1 |
Перевести логическую функцию от табличной к аналитической форме в виде ДСНФ.
Переведем логическую функцию от табличной к аналитической форме в виде ДСНФ.
F(X1X2X3X4) = X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4
V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4.
Найти МДНФ различными методами.
1.3.1 Метод эквивалентных преобразований.
В основе метода минимизации булевых функций эквивалентными преобразованиями лежит последовательное использование законов булевой алгебры. Метод эквивалентных преобразований целесообразно использовать лишь для простых функций и для количества логических переменных не более 4-х. При большем числе переменных и сложной функции вероятность ошибок при преобразовании возрастает.
Проведем прямое алгебраическое преобразование, используя закон неполного склеивания.
F(X1X2X3X4) = X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V
V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 =
= (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4)V(X1X2X3X4 V X1X2X3X4) V
V (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4)V(X1X2X3X4 V X1X2X3X4) V
V (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4)V(X1X2X3X4 V X1X2X3X4) V
V (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4) =
= X1X2X4 V X1X2X3 V X1X3X4 V X2X3X4 V X1X3X4 V X2X3X4 V X1X2X4 V
V X1X2X3V X2X3X4 V X1X2X3 V X1X3X4 =
= (X1X2X3 V X1X2X3 V X1X3X4 V X1X3X4) V X1X2X4 V
V (X1X2X3 V X1X2X3 V X2X3X4 V X2X3X4) V X1X2X4 V
V (X1X3X4 V X1X3X4 V X2X3X4 V X2X3X4) =
= X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.
Дальнейшее преобразование невозможно. Полученную функцию можно немного упростить с помощью вынесения за скобки общих переменных.
Метод Квайна
При минимизации по методу Квайна предполагается, что минимизируемая логическая функция задана в виде ДСНФ. Здесь используется закон неполного склеивания. Минимизация проводится в два этапа: нахождение простых импликант, расстановка меток и определение существенных импликант (Q-матрица).
ДСНФ, ранг 4
1
2
3
4
5
6
7
8
9
0000
0010
0011
0101
0110
0111
1010
1011
1111
Наборы 3-го ранга
00*0
001*
0*10
*010
0*11
*011
01*1
011*
*111
101*
1*11
Наборы 2-го ранга
2-8
2-10
3-5
4-6
5-11
6-9
0*1*
*01*
0*1*
*01*
**11
**11
Как видно из таблиц, при получении матрицы второго ранга первый и седьмой наборы третьего ранга не склеились ни с какими другими наборами. Их необходимо занести в конечную матрицу простых импликант. В матрице же второго ранга мы видим, что некоторые наборы одинаковые. Их необходимо вычеркнуть, так как дизъюнкция одинаковых наборов равна этой же дизъюнкции (это следует из закона повторения)
Простые импликанты | |
1 2 3 4 5 | 0*1* *01* **11 00*0 01*1 |
Перенеся все выделенные строки в конечный массив, получим матрицу СДНФ. Алгебраическая запись СДНФ будет выглядеть следующим образом:
F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.
Эта же функция в нашем случае является и минимальной ДНФ.
Метод Квайна-Маккласки
В основу данного метода также положен закон неполного склеивания. Только в отличие от метода Квайна здесь производится гораздо меньше сравнений, так как, разбив исходную матрицу на несколько групп, мы сравниваем только те наборы, которые отличаются индексом на 1 или местоположением меток.
Распределим импликанты ДСНФ по индексам.
ДСНФ
Наборы 3-го ранга | ||||
1 2 3 4 5 6 7 8 9 10 11 | 00*0 001* 0*10 *010 0*11 *011 01*1 011* *111 101* 1*11 |
Простые импликанты | |||
1 2 3 4 5 | 0*1* *01* **11 00*0 01*1 |
Или в алгебраической форме:
F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.
Метод карт Карно.
Метод карт Карно – это один из графических методов минимизации функции. Эти методы основаны на использовании особенности зрительного восприятия, так как с его помощью можно практически мгновенно распознать те или иные простые конфигурации.
Преимуществами метода карт Карно над другими методами являются:
А) простота отыскания склеивающихся компонент;
Б) простота выполнения самого склеивания;
В) нахождение всех минимальных форм функции.
Построим таблицу метода карт Карно.
X 1 X 2 | X 1 X 2 | X 1 X 2 | X1X2 | |
X 3 X 4 | ■ | |||
X 3 X 4 | ■ | |||
X 3 X 4 | ■ | ■ | ■ | ■ |
X3X4 | ■ | ■ | ■ |
Теперь накроем совокупность всех квадратов с метками минимальным количеством правильных прямоугольников. Таких прямоугольников в нашем случае будет 5: три четырехклеточных и два двухклеточных. Этим прямоугольникам соответствуют следующие простые импликанты:
для первого – X3X4;
для второго – X1X3;
для третьего – X2X3;
для четвертого – X1X2X4;
для пятого – X1X2X4;
Минимальная ДНФ будет выглядеть так:
F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.
Сравнивая метод карт Карно с другими методами минимизации функции можно сделать вывод, что первый больше всего подходит для ручного исполнения. Время ручной работы значительно сокращается (за счет наглядного представления склеивающихся импликант). Программная реализация данного метода имеет свои сложности. Так, очень сложно будет реализовать оптимальный выбор правильных прямоугольников, особенно для большого числа аргументов.
Задание 2.
Граф-схема алгоритма.
Описание машинных процедур
Procedure Stuck(S1, S2: Diz; IndexS1, IndexS2 : byte);
Данная процедура склеивает два, передаваемых ей дизъюнкта. Дизъюнкты задаются в параметрах S1, S2. Индексы IndexS1, IndexS2 определяют индексы этих дизъюнктов в главном рабочем массиве . Алгоритм работы процедуры следующий: сначала ищется количество склеивающихся символов. Если их 0, то они одинаковые, и в конечный массив записывается только один из них. Если 1, то определяется местоположение символа, по которому данные две дизъюнкции склеиваются, и заменяем этот символ на ‘*’. Все полученные результаты заносятся в массив REZ.
Все остальные функции и процедуры программы связаны с действиями над массивами, то есть не имеют непосредственного отношения к данному методу нахождения МДНФ. Поэтому нет смысла их описывать.
Граф-схема алгоритма.
Описание машинных процедур
Procedure FormMatrix;
Данная процедура формирует матрицу меток путем попарного анализа дизъюнктов из ДСНФ и матрицы простых импликант. Если стравнение прошло успешно, то соответствующему элементу матрицы меток присваивается значение 1, в противном случае – значение 0.
Function Pokritie(var S: string16): boolean;
Данная функция проверяет, является ли данная комбинация простых импликант полной, то есть накрывает ли она все дизъюнкты матрицы ДСНФ. Это сравнение происходит следующим образом: вводится новый массив – массив соостветсвия столбцам. Каждому элементу нового массива сначала присваивается значение 0. Далее, пробегая все заданные строки матрицы,определяем в каких столбцах стоит 1 и в новом массиве ставим на соответсвующее место 1. Таким образом, если в векторе есть нули, значит данная комбинация дизъюнктов не накрывает полностью все столбцы матрицы. В этом случае функция возвращает значние False, в противном случае функция возвращает значение True.
Задание 3. Синтез схемы логического устройства.
1. Представление МДНФ в базисе Буля. В базисе Буля используется 3 логические схемы: НЕ, ИЛИ, И. Вот их графическое изображение:
|
|
|
__
X X X1VX2 X1*X2
X2 X2
Для аппаратной реализации минимальной ДНФ нам потребуется 3 ИМС серии К155 : одна ИМС К155ЛН1 (элементы НЕ), одна ИМС К155ЛЛ1 (элементы ИЛИ) и одна ИМС К155ЛИ1 (элементы И). Но в них все элементы не используются. Так в ИМС К155ЛН1 не используются 3 элемента НЕ Это можно использовать в том случае, когда один из элементов выйдет из строя и его нечем будет заменить. Надо будет только перепаять контакты на незадействованный элемент. Всего в базисе Буля используются 11 логических элементов.
2. Представление МДНФ в базисе Шеффера. Для того, чтобы реализовать минимальную ДНФ в базисе Шеффера, необходимо перевести базис Буля в базис Шеффера, в котором используется только один логический элемент: И-НЕ.
Формулы перевода из базиса Буля в базис Шеффера записываются следующим образом:
НЕ: X = X*X ИЛИ: X1VX2 = X1*X1 * X2*X2
И: X1*X2 = X1*X2 * X1*X2
Минимальная ДНФ выглядит так:
f(X1, X2, X3, X4) = X3X4VX2X3VX1X3VX1X2X4VX1X2X4;
Переведем ее в базис Шеффера с помощью указанных выше формул.
Обозначим A = X3X4VX2X3VX1X3 = X3·( X4VX2VX1) = X3·X4·X4·X2·X1=
= X3·X4·X4·X2·X1·X2·X1.
B = X1X2X4VX1X2X4= X1·(X2·X4VX2·X4) = X1·X1·X2·X2·X4·X4·X2·X4.
Окончательно получим Y = A · B .
Отсюда видно, что для реализации минимальной ДНФ в базисе Шеффера требуется 12 элементов И-НЕ. Соответственно для аппаратной реализации нам потребуется 3 интегральные микросхемы К155ЛА3.
3. Представление МДНФ в базисе Пирса. Для того, чтобы реализовать минимальную ДНФ в базисе Пирса, необходимо как и в предыдущем пункте перевести МДНФ из базиса Буля в базис Пирса, в котором используется только один элемент ИЛИ-НЕ.
Формулы перевода записываются следующим образом:
НЕ: X = XVX ИЛИ: X1VX2 = X1VX2 V X1VX2
И: X1*X2 = X1VX1 V X2VX2
Переведем МДНФ в базис Пирса. Введем обозначения:
A = X3X4VX2X3VX1X3 = X3·X4·X2·X3·X1·X3 = X3VX4VX2VX3VX1VX3.
B = X1·(X2X4VX2X4) = X1·(X2·X4·X2·X4) = X1·X2VX4VX2VX4 =
= X1VX2VX4VX2VX4.
Y = A V B.
Чтобы реализовать каждую отдельную логическую сумму нам потребуется 2 элемента ИЛИ-НЕ, т.е. для 4-х логических сумм, которые составляют функцию, нам потребуется 6 логических элементов.
Всего на реализацию МДНФ в базисе Пирса понадобится 16 логических элементов ИЛИ-НЕ, а для аппаратной реализации 4 ИМС серии К155 (К155ЛЕ1).
Итак, можно подвести итоги: на реализацию МДНФ в различных базисах требуется разное кол-во логических элементов, но целесообразно выбрать тот базис, который будет более универсальным и на реализацию которого потребуется меньшее кол-во логических элементов. В нашем случае это базис Буля (11 логических элементов).
Заключение
В данной курсовой работе были рассмотрены методы минимизации ФАЛ от 4х переменных: методы Квайна, Квайна-Маккласки, карт Карно, неопределенных коэффициентов, а также рассмотрено прямое алгебраическое преобразование. Для двух из них (метода неопределенных коэффициентов и метода Квайна) были разработаны программы. При этом особенно трудно было реализовать процедуры, отвечающие за логические операции. Причем просматривалась следующая закономерность: чем легче был метод для ручного исполнения, тем труднее было написать для него программу. Взять хотя бы метод карт Карно. С его помощью вручную очень легко получить МДНФ, составить таблицу и выбрав правильные прямоугольники. Но если взяться за реализацию этого метода программно, то сразу возникают трудности, особенно при написании процедуры выбора правильных прямоугольников. Это будет очень сложная логическая процедура, кажется, что все просто.
Иначе выглядит метод неопределенных коэффициентов. Для машинной реализации он подходит больше других, так как в нем мы имеем дело с массивами, для работы с которыми не надо особо сложной логики. И конечно ручное исполнение этого метода крайне нерационально, так как приходиться решать систему из 16-ти уравнений. Это для четырех переменных, а для пяти это будет 32 уравнения. Такой метод для ручного исполнения не подходит.
В задаче курсовой работы также входил синтез логической схемы. Полученная схема МДНФ была реализована в трех базисах: Буля, Пирса, Шеффера. Анализ и оценка аппаратурных затрат также приведена в данной записке.
Список литературы
1. Гаджиев А.А. Методические указания к выполнению курсовой работы по дисциплине “Дискретная математика” для студентов специальности 22.01 (ВМКСиС). Махачкала, 1998 г.
2. Гаджиев А.А. Методические указания к выполнению лабораторного практикума по дисциплине “Дискретная математика” (часть 2. Математическая логика). Махачкала, 1998 г.
Приложение
Программа для метода Квайна
Uses Crt;
Const
R = 4;
SR = 16;
Type
Diz = string[R];
Var
S :array[1..SR*2] of Diz;
Rez :array[1..SR*2] of Diz;
Flag :array[1..SR*2] of byte;
Y :array[1..SR] of byte;
IndexS : byte;
IndexRez : byte;
i, j, k : byte;
FData : Text;
FRez : Text;
FDSNF : file of Diz;
FSImp : file of Diz;
{Функция формирования дизъюнкта}
Function MakeDiz(Number: byte): Diz;
Var
i : byte;
S : Diz;
C : char;
Begin
S:='';
for i:=0 to R-1 do
begin
C:=chr(((Number shr i) and $01) + 48);
Insert(C, S, 1);
end;
MakeDiz:=S;
End;
{Функция склеивания}
Procedure Stuck(S1, S2: Diz; IndexS1, IndexS2 : byte);
Var
i, k, n: byte;
Begin
k:=0; {кол-во разных}
for i:=1 to R do
if S1[i] <> S2[i] then
begin
k:=k+1;
n:=i;
end;
case k of
0 : begin
Inc(IndexRez);
Rez[IndexRez]:=S1;
Flag[IndexS1]:=1;
Flag[IndexS2]:=1;
end;
1 : if (S1[n]<>'*') and (S2[n]<>'*') then
begin
S1[n]:='*';
Inc(IndexRez);
Rez[IndexRez]:=S1;
Flag[IndexS1]:=1;
Flag[IndexS2]:=1;
end;
end;
End;
{Функция проверки на удаление пустого дизъюнкта}
Function Del(S : Diz): Boolean;
Var
i, k : byte;
Begin
Del:=False;
k:=0;
for i:=1 to R do
if S[i]='*' then
k:=k+1;
if k=R then
Del:=True;
End;
Procedure Clear;
Var
i, j : byte;
Begin
IndexS:=0;
for i:=1 to SR*2 do
begin
Flag[i]:=0;
S[i]:='';
end;
for i:=1 to IndexRez-1 do
if Flag[i]=0 then
for j:=i+1 to IndexRez do
if Rez[i]=Rez[j] then
Flag[j]:=1;
for i:=1 to IndexRez do
if Flag[i]=0 then
begin
Inc(IndexS);
S[IndexS]:=Rez[i];
end;
End;
{Вывод на экран массива Rez}
Procedure PrintRezult(Step: Byte);
Var
i : byte;
Begin
WriteLn('{------------------------------------------------}');
WriteLn(FRez, '{-----------------------------------------}');
if Step=0 then
begin
Write('Исходная ДНФ.');
Write(FRez, 'Исходная ДНФ.');
end
else
begin
Write('Шаг номер :', Step:2, '.');
Write(FRez, 'Шаг номер :', Step:2, '.');
end;
WriteLn(' Количество дизъюнктов :', IndexS:2);
WriteLn(FRez, ' Количество дизъюнктов :', IndexS:2);
for i:=1 to IndexS do
begin
WriteLn(S[i]);
WriteLn(FRez, S[i]);
end;
ReadKey;
End;
{Основная программа}
Begin
ClrScr;
Assign(FDSNF, 'dsnf.dat');
Rewrite(FDSNF);
Assign(FSImp, 'simplimp.dat');
Rewrite(FSImp);
Assign(FRez, 'rezult.dat');
ReWrite(FRez);
{Считать массив Y из файла}
Assign(FData, 'func.dat');
Reset(FData);
for i:=1 to SR do
Read(FData, Y[i]);
Close(FData);
{Получить массив S}
for i:=1 to SR do
S[i]:=MakeDiz(i-1);
{Преоразовать S: оставив только те элементы, для которых Y=1. Результата в Rez}
IndexRez:=0;
for i:=1 to SR do
if Y[i]=1 then
begin
Inc(IndexRez);
Rez[IndexRez]:=S[i];
end;
for i:=1 to SR*2 do
S[i]:=Rez[i];
IndexS:=IndexRez;
for i:=1 to IndexS do
Write(FDSNF, S[i]);
PrintRezult(0);
{склеивание}
for i:=1 to R do
begin
IndexRez:=0;
{------------------------------------------------------------}
for j:=1 to SR*2 do {подготовка массива Flag под склеивание}
Flag[j]:=0;
{------------------------------------------------------------}
for j:=1 to SR*2 do {склеивание}
Rez[j]:='';
for j:=1 to IndexS-1 do
for k:=j+1 to IndexS do
Stuck(S[j], S[k], j, k);
{------------------------------------------------------------}
for j:=1 to IndexS do {копирование несклеившихся компонент}
if Flag[j]=0 then
begin
Inc(IndexRez);
Rez[IndexRez]:=S[j];
end;
{------------------------------------------------------------}
Clear; {удаление одинаковых дизъюнктов}
{------------------------------------------------------------}
PrintRezult(i); {вывод результата на экран}
end;
{Удалить все дизъюнкты вида '****'}
IndexRez:=0;
for i:=1 to IndexS do
if not Del(S[i]) then
begin
Inc(IndexRez);
Rez[IndexRez]:=S[i];
end;
for i:=1 to IndexS do
Write(FSImp, S[i]);
PrintRezult(R+1);
Close(FSImp);
Close(FDSNF);
Close(FRez);
End.
Содержание
Задание 1.Определить МДНФ логической функции устройства.
1.1 Составить таблицу соответствия (истинности) функции.
1.2 Перевести логическую функцию от табличной к аналитической форме в виде ДСНФ
1.3 Найти МДНФ различными методами.
1.3.1прямым (алгебраическим) преобразованием;
1.3.2методом Квайна;
1.3.3усовершенствованным методом Квайна (Квайна-Маккласки);
1.3.4методом карт Карно;
1.3.5методом неопределенных коэффициентов;
Задание 2. Составить алгоритм метода минимизации
2.1 Составить содержательный (словесный) алгоритм минимизации функции, разработать граф-схему алгоритма, разработать логическую схему алгоритма в нотации Ляпунова для метода Квайна.
2.2 Составить содержательный (словесный) алгоритм минимизации функции, разработать граф-схему алгоритма, разработать логическую схему алгоритма в нотации Ляпунова для метода минимального покрытия Петрика.
2.3 Разработать рабочие программы по алгоритмам.
Задание 3. Синтез схемы логического устройства.
3.1 Выполнить синтез схемы по ДСНФ и МДНФ в базисе Буля с использованием двухвходовых логических элементов и интегральных микросхем серии 155.
3.2 Функцию МДНФ в базисе Буля полученную в первом задании представить в базисах Шеффера и Пирса.
3.3Обосновать выбор базиса по формулам МДНФ.
3.4 Реализовать в выбранном базисе логическую схему.
Задание 1.
Составить таблицу соответствия (истинности) функции.
Составим таблицу истинности для заданной функции F(X 1 ,X 2 ,X 3 ,X 4).
№ | X 1 | X 2 | X 3 | X4 | F(X1, X2, X3, X4) |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 | 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 | 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 | 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 | 1 0 1 1 0 1 1 1 0 0 1 1 0 0 0 1 |
Матрицу ДСНФ получают путем удаления тех строк, где функция равна нулю. Для нашего случая получим:
№ | X1 | X2 | X3 | X4 |
0 2 3 5 6 7 10 11 15 | 0 0 0 0 0 0 1 1 1 | 0 0 0 1 1 1 0 0 1 | 0 1 1 0 1 1 1 1 1 | 0 0 1 1 0 1 0 1 1 |
Дата: 2019-05-28, просмотров: 192.