отчет лаба 2 схемота
.docx
ФЕДЕРАЛЬНОЕ
АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
(РОСАВИАЦИЯ)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №2
по дисциплине «Схемотехническое моделирование».
Тема: «Построение схем реализации пороговых схем мажоритарных элементов.»
Выполнила студентка группы ИС2-1
Магальник Екатерина Борисовна
Руководитель: Затучный Дмитрий Александрович
МОСКВА – 2024
Теоретическая часть.
Схема реализации функции — основа для построения различных вычислительных устройств и компьютеров. Обычно их строят из логических элементов, каждый из которых реализует определённую переключательную функцию.
Мажоритарный элемент — это логический элемент из класса пороговых с чётным или нечётным числом входов и одним выходным сигналом, значение которого совпадает со значением на большинстве входов.
Элемент работает по принципу большинства: если на большинстве входов будет сигнал «1», то и на выходе схемы установится сигнал «1»; и наоборот, если на большинстве входов будет сигнал «0», то и на выходе установится «0».
Пороговая схема k из N элементов называется комбинационная схема, имеющая N входов и 1 выход и формирующая на выходе единичное значение, если на k и более входах установлена единица и значение логического нуля если количество единиц меньше k или если количество нулей больше k. При значении k=1 пороговая схема превращается в ИЛИ, а при k=N в И.
Задание 1.
Построить схему реализации пороговой схемы 2 из 5. Записать таблицу истинности.
Получившаяся функция:
Блок-схемы алгоритмов:
Рисунок 1. Алгоритм функции addcomb()
Рисунок 2. Алгоритм функции main()
Схема реализации функции:
Y
ИЛИ
И
И
И
И
И
И
И
И
И
И
X2
X3
X4
X5
X1
Результат работы программы:
x1, x2, x3, x4, x5, y
0 0 0 0 0 0
0 0 0 0 1 0
0 0 0 1 0 0
0 0 0 1 1 1
0 0 1 0 0 0
0 0 1 0 1 1
0 0 1 1 0 1
0 0 1 1 1 1
0 1 0 0 0 0
0 1 0 0 1 1
0 1 0 1 0 1
0 1 0 1 1 1
0 1 1 0 0 1
0 1 1 0 1 1
0 1 1 1 0 1
0 1 1 1 1 1
1 0 0 0 0 0
1 0 0 0 1 1
1 0 0 1 0 1
1 0 0 1 1 1
1 0 1 0 0 1
1 0 1 0 1 1
1 0 1 1 0 1
1 0 1 1 1 1
1 1 0 0 0 1
1 1 0 0 1 1
1 1 0 1 0 1
1 1 0 1 1 1
1 1 1 0 0 1
1 1 1 0 1 1
1 1 1 1 0 1
1 1 1 1 1 1
Полная функция:
['x4x5', 'x3x5', 'x3x4', 'x3x4x5', 'x2x5', 'x2x4', 'x2x4x5', 'x2x3', 'x2x3x5', 'x2x3x4', 'x2x3x4x5', 'x1x5', 'x1x4', 'x1x4x5', 'x1x3', 'x1x3x5', 'x1x3x4', 'x1x3x4x5', 'x1x2', 'x1x2x5', 'x1x2x4', 'x1x2x4x5', 'x1x2x3', 'x1x2x3x5', 'x1x2x3x4', 'x1x2x3x4x5']
Функция с поглощениями вручную:
['x4x5', 'x3x5', 'x3x4', 'x2x5', 'x2x4', 'x2x3', 'x1x5', 'x1x4', 'x1x3', 'x1x2']
Листинг:
def addcomb(x): fin = "" for i in range(5): if x[i] == 1: fin = fin + "x" + str(i + 1) combs.append(fin) print("x1, x2, x3, x4, x5, y") ls = [] combs = [] for x1 in range(2): c1 = 0 if x1 == 1: c1+=1 for x2 in range(2): c2 = 0 if x2 == 1: c2 += 1 for x3 in range(2): c3 = 0 if x3 == 1: c3 += 1 for x4 in range(2): c4 = 0 if x4 == 1: c4 += 1 for x5 in range(2): c5 = 0 if x5 == 1: c5 += 1 if c1 + c2 + c3 + c4 + c5 >= 2: print (x1, " ", x2, " ", x3, " ", x4, " ", x5, " ", 1) ls.append(x1) ls.append(x2) ls.append(x3) ls.append(x4) ls.append(x5) if ls.count(1) >= 2: addcomb(ls) ls.clear() else: ls.clear() else: print (x1, " ", x2, " ", x3, " ", x4, " ", x5, " ", 0) print("Полная функция: ") print (combs) indexes = [] for i in range(len(combs)): for j in range(i+1, len(combs)): if combs[i] in combs[j]: if j in indexes: continue else: indexes.append(j) continue new = [] for i in range(len(combs)): if i in indexes: continue else: new.append(combs[i]) print("Функция с поглощениями вручную: ") print(new)
Задание 2.
Построить схему реализации пороговой схемы 1 из 4. Записать таблицу истинности. Сравнить с таблицей истинности элемента ИЛИ. Сделать выводы.
Получившаяся функция:
Блок-схемы алгоритмов:
Рисунок 3. Алгоритм функции addcomb()
Рисунок 4. Алгоритм функции main()
Y
ИЛИ
X4
X3
X2
X1
Результат работы программы:
x1, x2, x3, x4, y
0 0 0 0 0
0 0 0 1 1
0 0 1 0 1
0 0 1 1 1
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 1
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1
Полная функция:
['x4', 'x3', 'x3x4', 'x2', 'x2x4', 'x2x3', 'x2x3x4', 'x1', 'x1x4', 'x1x3', 'x1x3x4', 'x1x2', 'x1x2x4', 'x1x2x3', 'x1x2x3x4']
Функция с поглощениями вручную:
['x4', 'x3', 'x2', 'x1']
Таблица истинности элемента ИЛИ:
x1, x2, y
0 0 0
0 1 1
1 0 1
1 1 1
Листинг:
def addcomb(x): fin = "" for i in range(4): if x[i] == 1: fin = fin + "x" + str(i + 1) combs.append(fin) print("x1, x2, x3, x4, y") ls = [] combs = [] for x1 in range(2): c1 = 0 if x1 == 1: c1+=1 for x2 in range(2): c2 = 0 if x2 == 1: c2 += 1 for x3 in range(2): c3 = 0 if x3 == 1: c3 += 1 for x4 in range(2): c4 = 0 if x4 == 1: c4 += 1 if c1 + c2 + c3 + c4 >= 1: print (x1, " ", x2, " ", x3, " ", x4, " ", 1) ls.append(x1) ls.append(x2) ls.append(x3) ls.append(x4) if ls.count(1) >= 1: addcomb(ls) ls.clear() else: s.clear() else: print (x1, " ", x2, " ", x3, " ", x4, " ", 0) print("Полная функция: ") print (combs) indexes = [] for i in range(len(combs)): for j in range(i+1, len(combs)): if combs[i] in combs[j]: if j in indexes: continue else: indexes.append(j) continue new = [] for i in range(len(combs)): if i in indexes: continue else: new.append(combs[i]) print("Функция с поглощениями вручную: ") print(new)
Вывод: сравнивая таблицы истинности элемента ИЛИ и полученной функции можно сделать вывод, что логическое сложение любого количества элементов даст на выходе элемент ИЛИ.
Задание 3.
Построить схему реализации пороговой схемы 4 из 4. Записать таблицу истинности. Сравнить с таблицей истинности элемента И. Сделать выводы.
Получившаяся функция:
Блок-схемы алгоритмов:
Рисунок 5. Алгоритм функции addcomb()
Рисунок 6. Алгоритм функции main()
Y
И
X4
X3
X2
X1
Результат работы программы:
x1, x2, x3, x4, y
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 1
Полная функция:
['x1x2x3x4']
Функция с поглощениями вручную:
['x1x2x3x4']
Таблица истинности элемента И:
x1, x2, y
0 0 0
0 1 0
1 0 0
1 1 1
Листинг:
def addcomb(x): fin = "" for i in range(4): if x[i] == 1: fin = fin + "x" + str(i + 1) combs.append(fin) print("x1, x2, x3, x4, y") ls = [] combs = [] for x1 in range(2): c1 = 0 if x1 == 1: c1+=1 for x2 in range(2): c2 = 0 if x2 == 1: c2 += 1 for x3 in range(2): c3 = 0 if x3 == 1: c3 += 1 for x4 in range(2): c4 = 0 if x4 == 1: c4 += 1 if c1 + c2 + c3 + c4 >=4: print (x1, " ", x2, " ", x3, " ", x4, " ", 1) ls.append(x1) ls.append(x2) ls.append(x3) ls.append(x4) if ls.count(1) >= 4: addcomb(ls) ls.clear() else: ls.clear() else: print (x1, " ", x2, " ", x3, " ", x4, " ", 0) print("Полная функция: ") print (combs) indexes = [] for i in range(len(combs)): for j in range(i+1, len(combs)): if combs[i] in combs[j]: if j in indexes: continue else: indexes.append(j) continue new = [] for i in range(len(combs)): if i in indexes: continue else: new.append(combs[i]) print("Функция с поглощениями вручную: ") print(new)
Вывод: сравнивая таблицы истинности элемента И и полученной функции можно сделать вывод, что логическое умножение любого количества элементов даст на выходе элемент И.
Задание 4.
Построить схему реализации мажоритарного элемента 2 из 4. Записать таблицу истинности функции с учетом функции многоразрядного кода, указывающего номер отказавшего канала. Встроить схему реализации этого кода в схему реализации мажоритарного элемента.
Получившаяся функция:
Функция A1:
Функция A0:
Блок-схемы алгоритмов:
Рисунок 7. Алгоритм функции addcomb()
Рисунок 8. Алгоритм функции main()
Схема реализации функции:
И
1
A1
ИЛИ
И
1
X1
И
И
X2
Y
ИЛИ
И
X3
И
X4
И
1
A0
ИЛИ
И
1
Результат работы программы:
x1, x2, x3, x4, y, A1, A0
0 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 1 0 0 0 1
0 0 1 1 0 0 0
0 1 0 0 0 1 0
0 1 0 1 0 1 1
0 1 1 0 0 1 1
0 1 1 1 1 1 0
1 0 0 0 0 1 0
1 0 0 1 0 1 1
1 0 1 0 0 1 1
1 0 1 1 1 1 0
1 1 0 0 0 0 0
1 1 0 1 1 0 1
1 1 1 0 1 0 1
1 1 1 1 1 0 0
Полная функция:
['x2x3x4', 'x1x3x4', 'x1x2x4', 'x1x2x3', 'x1x2x3x4']
Функция с поглощениями вручную:
['x2x3x4', 'x1x3x4', 'x1x2x4', 'x1x2x3']
Листинг:
def addcomb(x): fin = "" for i in range(4): if x[i] == 1: fin = fin + "x" + str(i + 1) combs.append(fin) print("x1, x2, x3, x4, y, A1, A0") ls = [] combs = [] for x1 in range(2): c1 = 0 if x1 == 1: c1+=1 for x2 in range(2): c2 = 0 if x2 == 1: c2 += 1 for x3 in range(2): c3 = 0 if x3 == 1: c3 += 1 for x4 in range(2): a1 = (x1 + x2) % 2 a6 = (x3 + x4) % 2 c4 = 0 if x4 == 1: c4 += 1 if c1 + c2 + c3 + c4 > 2: print (x1, " ", x2, " ", x3, " ", x4, " ", 1, " ", a1, " ", a6) ls.append(x1) ls.append(x2) ls.append(x3) ls.append(x4) if ls.count(1) >= 1: addcomb(ls) ls.clear() else: ls.clear() else: print (x1, " ", x2, " ", x3, " ", x4, " ", 0, " ", a1, " ", a6) print("Полная функция: ") print (combs) indexes = [] for i in range(len(combs)): for j in range(i+1, len(combs)): if combs[i] in combs[j]: if j in indexes: continue else: indexes.append(j) continue new = [] for i in range(len(combs)): if i in indexes: continue else: new.append(combs[i]) print("Функция с поглощениями вручную: ") print(new)
Вывод: в ходе данной лабораторной работы были изучены пороговые схемы, мажоритарные элементы и схемы их построения. Так же была изучена реализация таблиц истинности мажоритарных элементов на алгоритмическом языке Python и построение пороговых схем и схем реализации функций с помощью встроенного инструментария Word.
