Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет лаба 4 схемота-1

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
187.31 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №4

по дисциплине «Схемотехническое моделирование».

Тема: «Исследование логики работы триггеров различных типов.»

Выполнила студентка группы ИС3-1

Магальник Екатерина Борисовна

Руководитель: Затучный Дмитрий Александрович

МОСКВА – 2024

Теоретическая часть.

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

В качестве статического элемента памяти используются бистабильные ячейки, имеющие два устойчивых состояния. Бистабильные ячейки могут быть построены на двух логических элементах И-НЕ или ИЛИ-НЕ, соединённых перекрёстными связями.

На основе элементов памяти строятся так называемые триггеры. Триггер – это цифровая электронная схема с двумя устойчивыми состояниями, которые устанавливаются при подаче соответствующей комбинации входных сигналов и сохраняются после снятия этих сигналов.

Триггер имеет несколько входов и два выхода – прямой и инверсный (Q и Q). Сигналы на выходах триггера всегда имеют различные значения. Если на прямом выходе сигнал равен 1, то на инверсном – 0 и наоборот. Состояние триггера определяется значением сигнала на прямом выходе (Q). Если сигнал на прямом выходе равен 1, то триггер находится в состоянии 1.

Триггеры могут быть синхронными или асинхронными. Если изменения сигнала Q происходит только при наличии специального сигнала С, являющегося сигналом синхронизации, то такой триггер называется синхронным триггером.

Синхронизация триггера может происходить либо по уровню сигнала, либо по фронту сигнала (переднему или заднему).

Асинхронный триггер не имеет входа синхронизации, поэтому переключение триггера происходит только при изменении на входах информационных сигналов Х. Логика переключения триггера из одного состояния в другое зависит от количества и назначения входов. Наиболее часто используются в цифровой технике следующие типы триггеров: RS-триггеры, D-триггеры, Т-триггеры и JK-триггеры. Буквами R,S,J,K,D и T обозначаются информационные входы триггеров.

RS-триггер

Асинхронный RS-триггер RS-триггер имеет два информационных входа R и S. Вход S используется для установки триггера в состояние 1, а вход R – для установки в состояние 0. Поэтому RS триггер называют триггером с установочными входами.

Синхронный RS-триггер

Синхронный триггер дополнительно имеет вход синхронизации С, на который поступает синхросигнал. Информационные сигналы R и S воздействуют на состояние триггера только при значении синхросигнала С=1. При этом логика работы синхронного триггера совпадает с логикой асинхронного триггера. При С=0 триггер не меняет своего состояния при любой комбинации сигналов на информационных входах.

Асинхронный и синхронный D-триггеры В вычислительной технике широко применяется D-триггер, который реализует функцию временной задержки входного сигнала. D-триггер имеет информационный вход. Логика работы асинхронного D-триггера

Вход

Состояния

D

0

1

0

0

0

1

1

1

Для построения счётчиков, регистров и других цифровых схем используются синхронные D-триггеры. Логика работы синхронного D-триггера:

Вход

Состояния

С

D

1

0

0

0

0

1

0

1

0

1

1

0

0

0

1

1

1

1

T-триггер

Т-триггер имеет один информационный вход. Логика работы асинхронного T-триггера может быть описана таблицей переходов:

Вход

Состояния

D

0

1

0

0

1

1

1

0

JK – триггер

JK-триггер называется также универсальным триггером. Универсальность схемы JK-триггера состоит в том, что простой коммутацией входов и выходов можно получать схемы других типов триггеров. JK-триггер имеет два информационных входа. Вход J используется для установки триггера в состояние 1, а вход K – для установки в состояние 0, т.е. входы J и K аналогичны входам R и S RS-триггера. Отличие заключается в том, что на входы J и K могут одновременно поступать сигналы 1. В этом случае JK-триггер изменяет своё состояние.

Цель работы.

Целью лабораторной работы является: изучение принципов построения триггеров из логических элементов; получение практических навыков в моделировании триггеров RS-, D-, T- и JK- типов, исследование логики работы триггеров в различных режимах.

Задание 1. Смоделировать на компьютере на элементах И-НЕ схему асинхронного RS-триггера. Имитируя статические сигналы на вход, убедиться в работоспособности схемы. Контроль работы осуществляется только таблицей переходов.

Листинг:

class RSTrigger: def __init__(self): self.Q = 0 self.Q_not = 1 def update(self, R, S): if R and not S: self.Q = 0 self.Q_not = 1 elif not R and S: self.Q = 1 self.Q_not = 0 elif R and S: pass # состояние не определено return self.Q, self.Q_not # Тестирование trigger = RSTrigger() signals = [(0, 0), (0, 1), (1, 0), (1, 1)] for R, S in signals: Q, Q_not = trigger.update(R, S) print(f"R: {R}, S: {S} -> Q: {Q}, Q_not: {Q_not}")

Результат работы программы:

Входами в таблице являются значения входных сигналов R и S, а также значения состояний триггера в текущий момент времени . В самой таблице приведены значения состояний триггера в следующий момент времени . В соответствии с таблицей переходы триггера из одного состояния в другое происходят, если на вход R или S подаётся сигнал 1. Из таблицы видно, что при R=0 и S=0 состояние триггера не меняется. При R=0 и S=1 триггер переходит в состояние 1 независимо от того, в каком состоянии он находился до изменения входных сигналов. При R=1 и S=0 триггер переходит в состояние 0. Комбинация сигналов R=1 и S=1 является запрещённой и состояние триггера при этом не определено.

Задание 2. Смоделировать на компьютере схему синхронного RS-триггера с использованием элементов И-НЕ. Исследовать его работу при С-о и С-1.

Листинг:

class SynchronousRSTrigger: def __init__(self): self.Q = 0 self.Q_not = 1 def clock(self, R, S, C): if C: # при наличии сигнала частоты if R and not S: self.Q = 0 self.Q_not = 1 elif not R and S: self.Q = 1 self.Q_not = 0 elif R and S: pass # состояние не определено return self.Q, self.Q_not # Тестирование sync_trigger = SynchronousRSTrigger() signals = [(0, 0), (0, 1), (1, 0), (1, 1)] clock_signals = [0, 1] # C = 0, C = 1 for C in clock_signals: for R, S in signals: Q, Q_not = sync_trigger.clock(R, S, C) print(f"C: {C}, R: {R}, S: {S} -> Q: {Q}, Q_not: {Q_not}")

Результат работы программы:

Синхронный триггер дополнительно имеет вход синхронизации С, на который поступает синхросигнал. Информационные сигналы R и S воздействуют на состояние триггера только при значении синхросигнала С=1. При этом логика работы синхронного триггера совпадает с логикой асинхронного триггера. При С=0 триггер не меняет своего состояния при любой комбинации сигналов на информационных входах.

Задание 3. На основе синхронного RS-триггера смоделировать на компьютере схему синхронного D-триггера. Исследовать его работу различных режимах.

Листинг:

class RS_FF: def __init__(self): self.Q = 0 self.not_Q = 1 def input(self, R, S, C): if C: # Синхронизация по С if R == 1 and S == 0: # Установка self.Q = 1 self.not_Q = 0 elif R == 0 and S == 1: # Сброс self.Q = 0 self.not_Q = 1 elif R == 0 and S == 0: # Состояние сохраняется pass return self.Q, self.not_Q class D_FF: def __init__(self): self.rs_ff = RS_FF() def input(self, D, C): R = not D # Обратное значение D для R S = D # D является S return self.rs_ff.input(R, S, C) # Пример работы с D-триггером d_trigger = D_FF() # Исследуем работу D-триггера с разными режимами for D in [1, 0]: # Тестируем вход D for clock in [0, 1]: # Генератор сигнала C Q, not_Q = d_trigger.input(D, clock) print(f"D: {D}, Clock: {clock}, Q: {Q}, not_Q: {not_Q}") # Проверка переходов D_seq = [1, 1, 0, 0, 1] # Последовательность D for D in D_seq: for clock in [0, 1]: Q, not_Q = d_trigger.input(D, clock) print(f"D: {D}, Clock: {clock}, Q: {Q}, not_Q: {not_Q}")

Результат работы программы:

Задание 4. Исследовать работу универсального D-триггера. Универсальный триггер кроме основных входов D и С имеет асинхронные входы R и S, позволяющие устанавливать триггер в 1 или 0 независимо от значения сигнала на входе C. При исследовании триггера в синхронизируемом режиме на вход синхронизации С подаётся сигнал от генератора одиночных импульсов (ГОИ).

Листинг:

class Universal_D_FF: def __init__(self): self.Q = 0 self.not_Q = 1 def input(self, D, C, R=0, S=0): if R == 1: # Асинхронный сброс self.Q = 0 self.not_Q = 1 elif S == 1: # Асинхронная установка self.Q = 1 self.not_Q = 0 elif C: # Сигнал синхронизации self.Q = D self.not_Q = 1 - D # Обратное значение return self.Q, self.not_Q # Пример работы с генератором одиночных импульсов def pulse_generator(): return [0, 1] # Сигналы C: 0 и 1. trigger = Universal_D_FF() D = 1 # Вход D for clock in pulse_generator(): Q, not_Q = trigger.input(D, clock) print(f"Clock: {clock}, D: {D}, Q: {Q}, not_Q: {not_Q}") D = 0 # Изменение D for clock in pulse_generator(): Q, not_Q = trigger.input(D, clock) print(f"Clock: {clock}, D: {D}, Q: {Q}, not_Q: {not_Q}")

Результат работы программы:

Уравнение переходов синхронного триггера, записанное по таблице, имеет следующий вид:

= +

В соответствии с уравнением синхронный D-триггер при С=0 сохраняет своё состояние, а при С=1 работает как асинхронный.

После записи информации в синхронный D - триггер он сохраняет ее до поступления следующего синхроимпульса. Таким образом, синхронный D - триггер может хранить значение входного сигнала на время, равное паузе между синхроимпульсами.

Задание 5. Исследовать работу универсального JК-триггера асинхронном режиме при использовании входов R и S, а также при подаче информационных сигналов J и К. При исследовании работы синхронизируемом режиме сигнал на вход С подаётся от ГОИ.

Листинг:

class JK_FF: def __init__(self): self.Q = 0 self.not_Q = 1 def input(self, J, K, C, R=0, S=0): if R == 1: # Асинхронный сброс self.Q = 0 self.not_Q = 1 elif S == 1: # Асинхронная установка self.Q = 1 self.not_Q = 0 elif C: # Синхронизация if J == 1 and K == 0: self.Q = 1 elif J == 0 and K == 1: self.Q = 0 elif J == 1 and K == 1: self.Q = 1 - self.Q # Переключение состояния return self.Q, self.not_Q # Пример работы с сигналами J и K trigger = JK_FF() J, K = 1, 0 # Входы J и K for clock in [0, 1]: # Генератор сигналов C Q, not_Q = trigger.input(J, K, clock) print(f"Clock: {clock}, J: {J}, K: {K}, Q: {Q}, not_Q: {not_Q}") J, K = 0, 1 # Изменение J и K for clock in [0, 1]: Q, not_Q = trigger.input(J, K, clock) print(f"Clock: {clock}, J: {J}, K: {K}, Q: {Q}, not_Q: {not_Q}")

Результат работы программы:

JK-триггер имеет информационные входы J и К, которые по своему влиянию аналогичны входам S и R тактируемого RS-триггера:

-при J=1, K=0 триггер по тактовому импульсу устанавливается в состояние Q=1;

-при J= 0, К=1 - переключается в состояние Q=0;

-при J=K=0 - хранит ранее принятую информацию.

Но в отличие от синхронного RS-триггера одновременное присутствие логических 1 на информационных входах не является для JK-триггера запрещённой комбинацией и приводит триггер в противоположное состояние.

Задание 6. Собрать схему Т-триггера на базе универсального JK- триггера. Для этого необходимо объединить входы J и К и использовать этот объединённый вход как информационный вход Т. При подаче счётных импульсов от генератора ГСИ на объединённый вход Т триггер работает в синхронном режиме, а при подаче счётных импульсов на вход С и статического сигнала Т 1 триггер работает в асинхронном режиме. Проверить логику работы Т-триггера.

Листинг:

class JK_FF: def __init__(self): self.Q = 0 self.not_Q = 1 def input(self, J, K, C, R=0, S=0): if R == 1: # Асинхронный сброс self.Q = 0 self.not_Q = 1 elif S == 1: # Асинхронная установка self.Q = 1 self.not_Q = 0 elif C: # Синхронизация if J == 1 and K == 0: self.Q = 1 elif J == 0 and K == 1: self.Q = 0 elif J == 1 and K == 1: self.Q = 1 - self.Q # Переключение состояния return self.Q, self.not_Q class T_FF: def __init__(self): self.jk_ff = JK_FF() def input(self, T, C, R=0, S=0): if T: J, K = 1, 1 # J и K объединены else: J, K = 0, 0 # Отключение return self.jk_ff.input(J, K, C, R, S) # Пример работы с Т-триггером t_trigger = T_FF() for T in [1, 0]: # Статический сигнал T for clock in [0, 1]: # Счетные импульсы на C Q, not_Q = t_trigger.input(T, clock) print(f"T: {T}, Clock: {clock}, Q: {Q}, not_Q: {not_Q}")

Результат работы программы:

При С=0 триггер не изменяет своего состояния, а при С=1 работает как асинхронный Т-триггер.

Функциональная схема Т-триггера может быть построена на основе синхронного RS-триггера (однотактного или двухтактного)

Вывод:

В ходе лабораторной работы мы изучили принципы построения триггеров из логических элементов, что дало возможность понять внутреннюю логику их работы. Моделируя триггеры RS-, D-, T- и JK- типов, мы получили практические навыки в их создании и исследовании.

Каждый триггер имеет свои уникальные характеристики и предназначение, что позволяет использовать их в различных схемах. Мы научились настраивать и изменять входные сигналы, анализировать поведение триггеров в различных режимах работы, что углубило понимание их функциональности.

В результате, лабораторная работа не только укрепила теоретические знания о триггерах, но и развила навыки моделирования, что является важным этапом в изучении цифровой электроники и систем управления.

Таблица истинности описывает поведение триггера, у которого два входа, R и S, и выход Q. Состояние выхода Q в следующий момент времени Q_(t+1) зависит от текущего состояния Q_t и входных сигналов R и S. Триггер меняет состояние только если на вход R или S подан сигнал 1. Если R=0 и S=0, выход сохраняет своё текущее значение. Если R=0 и S=1, выход устанавливается в 1. Если R=1 и S=0, выход устанавливается в 0. Комбинация R=1 и S=1 запрещена, и поведение триггера в этом случае не определено.

Синхронный триггер имеет дополнительный вход для синхронизации, обозначаемый как С, на который подается синхросигнал. Информационные сигналы R и S могут влиять на состояние триггера только в том случае, если синхросигнал С равен 1. Логика работы синхронного триггера аналогична логике асинхронного триггера. Если же С равно 0, триггер не изменит свое состояние, независимо от комбинации сигналов на информационных входах.

Синхронный D-триггер — это запоминающее устройство. Когда сигнал синхронизации (С) равен 0, он удерживает текущее значение. Когда сигнал синхронизации (С) равен 1, он принимает значение входного сигнала D. Таким образом, он "запоминает" данные, принятые при С=1, до следующего сигнала синхронизации. Время хранения информации определяется интервалом между синхроимпульсами.

JK-триггер — это разновидность триггера, похожая на RS-триггер, но без запрещенной комбинации входов. Он имеет два информационных входа, J и K, которые управляют его состоянием при поступлении тактового сигнала. Если J=1 и K=0, триггер устанавливается в единицу (Q=1). Если J=0 и K=1, он сбрасывается в ноль (Q=0). Если J=K=0, триггер сохраняет текущее состояние. Уникальное свойство JK-триггера состоит в том, что при J=1 и K=1 он инвертирует своё состояние (переключается с 0 на 1 или с 1 на 0).

При значении C=0 триггер сохраняет своё текущее состояние, а при C=1 он функционирует как асинхронный Т-триггер. Функциональную схему Т-триггера можно создать, используя синхронный RS-триггер, который может быть как однотактным, так и двухтактным.