Триггеры — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (rollbackEdits.php mass rollback)
 
(не показано 11 промежуточных версий 3 участников)
Строка 1: Строка 1:
== Триггеры ==
+
[[Файл:NoInputs.jpg|200px|thumb|right|Простейший триггер на двух инверторах.]]'''Триггеры''' (англ. <i>flip-flop</i>) {{---}} класс электронных устройств, имеющих свойство долго находиться в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов. Основной особенностью триггеров является способность запоминать двоичную информацию. Триггер имеет два состояния и, приняв одно за <tex>0</tex>, а другое за <tex>1</tex>, появляется возможность хранить один разряд двоичного числа. Таким образом, используя несколько триггеров, возможно хранить многоразрядные числа, а, значит, и любую двоичную информацию, ограниченную лишь количеством триггеров.
'''Триггеры''' класс электронных устройств, имеющих свойство сохранения одного из двух состояний в течении определённого промежутка времени, а также чередования этих состояний в зависимости от поданных сигналов. Существуют различные виды триггеров, начиная от самых простых(RS-триггер) и заканчивая двухступенчатыми триггерами со сложной логикой(например JK-триггер). Ранее использовались ламповые триггера. В настоящем времени они реализуются при помощи транзисторов.
 
  
Основной особенностью триггеров является способность запоминать двоичную информацию. Триггер имеет два состояния и, приняв одно за "1", а другое за "0", появляется возможность хранить один разряд двоичного числа. Таким образом, используя серию триггеров, возможно хранить многоразрядные числа, а значит и любую двоичную информацию, ограниченную лишь размером серии триггеров.
 
  
 +
== Типы триггеров ==
 +
=== RS-триггер ===
 +
[[Файл:Rs.jpg|250px|thumb|right|RS-триггер, построенный на основе ИЛИ-НЕ элементов.]]
 +
Самым простым триггером, который можно построить, является триггер на двух инверторах. Он не имеет входов, поэтому изменить его состояние невозможно. Выход <tex>Q</tex> будет всегда иметь состояние, заданное при создании, а <tex>\overline{Q}</tex> будет всегда иметь обратное <tex>Q</tex> значение. Однако, недостаток такого триггера очевиден {{---}} его состояние нельзя менять.
 +
 +
Если добавить к такому триггеру входы, то получится простейший триггер, состояние которого менять можно {{---}} <tex>\mathrm{RS}</tex>-триггер. Он имеет два входа: <tex>R</tex> (''reset'') и <tex>S</tex> (''set''), и два выхода:  <tex>Q</tex> и  <tex>\overline{Q}</tex>(инвертированный <tex>Q</tex>). Рассмотрим принцип работы <tex>\mathrm{RS}</tex>-триггера. Изначально на выходе <tex>Q=0</tex> и <tex>\overline{Q}=1</tex>. При подаче <tex>1</tex> на <tex>R</tex>, <tex>0</tex> на <tex>S</tex> выходное значение триггера становится нулем (происходит сброс значения), при подаче <tex>0</tex> на <tex>R</tex>, <tex>1</tex> на <tex>S</tex> выходное значение триггера становится единицей (происходит установка нового значения). При подаче двух нулей триггер свое состояние не меняет, выходное значение при подаче двух единиц не определено. Для вычисления следующего значения необходимо знать предыдущее значение, поэтому обычно за начальное состояние берется <tex>Q=0</tex>, <tex>\overline{Q}=1</tex>. Предположим, что  первые биты, которые мы даем на вход, являются нулями. Тогда, так как <tex>Q=0</tex>, можно вычислить <tex>\overline{Q}</tex>, используя <tex>S</tex>, а затем, посчитать <tex>Q</tex> через <tex>R</tex> и убедиться в том, что <tex>Q=0</tex>. Это показывает, что значения <tex>Q</tex> и <tex>\overline{Q}</tex> согласованы. Аналогично можно показать, что выходы согласованы и при <tex>Q=1</tex>, <tex>\overline{Q}=0</tex>.
 +
 +
{| class="wikitable" align="center" style="color: black; background-color:white;" cellpadding="10"
 +
!<tex>R</tex>
 +
!<tex>S</tex>
 +
!<tex>Q</tex>
 +
|-
 +
|0
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|1
 +
!|1
 +
|-
 +
|1
 +
|0
 +
!|0
 +
|-
 +
|1
 +
|1
 +
!|Не определено
 +
|-
 +
|}
 +
 +
=== Синхронный RS-триггер ===
 +
[[Файл:Rs_sync.jpg|280px|thumb|right|Синхронный RS-триггер]]
 +
Существенным недостатком <tex>\mathrm{RS}</tex>-триггера является то, что если один из сигналов на вход придет раньше другого, триггер примет неправильное состояние. Для того, чтобы избежать этой проблемы, вводится еще один входной сигнал {{---}} сигнал синхронизации. Синхронный <tex>\mathrm{RS}</tex>-триггер будет как-либо реагировать на входные сигналы только в том случае, когда на вход <tex>C</tex> подана единица. В остальном синхронный <tex>\mathrm{RS}</tex>-триггер не отличается от обычного <tex>\mathrm{RS}</tex>-триггера.
 +
 +
{| class="wikitable" align="center" style="color: black; background-color:white;" cellpadding="10"
 +
!<tex>C</tex>
 +
!<tex>R</tex>
 +
!<tex>S</tex>
 +
!<tex>Q</tex>
 +
|-
 +
|0
 +
|0
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|0
 +
|1
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|1
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|1
 +
|1
 +
!|Предыдущее значение
 +
|-
 +
|1
 +
|0
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|1
 +
|0
 +
|1
 +
!|1
 +
|-
 +
|1
 +
|1
 +
|0
 +
!|0
 +
|-
 +
|1
 +
|1
 +
|1
 +
!|Не определено
 +
|-
 +
|}
 +
 +
=== JK-триггер ===
 +
[[Файл:Jk.jpg|500px|thumb|right|JK-триггер]]
 +
<tex>\mathrm{JK}</tex>-триггер по принципу работы похож на синхронный <tex>\mathrm{RS}</tex>-триггер. <tex>J</tex> (''jump'') является аналогом <tex>S</tex> (''set''), <tex>K</tex> (''kill'') является аналогом <tex>R</tex> (''reset''). При подаче единицы на бит синхронизации и при подаче единицы на <tex>J</tex> и нуля на <tex>K</tex> на выходе единица, при подаче нуля на <tex>J</tex> и единицы на <tex>K</tex> на выходе ноль. При обоих нулях выдается предыдущее значение. Существенным отличием <tex>\mathrm{JK}</tex>-триггера от <tex>\mathrm{RS}</tex>-триггеров является то, что состояние с двумя единицами на входе определено. При обеих единицах на выход подается инвертированное предыдущее значение. Стоит заметить, что <tex>\mathrm{JK}</tex>-триггер существует только с синхронизацией, потому что без синхронизации при подаче на входы двух единиц, триггер бы постоянно переключался и не остановился бы в каком-то конкретном значении, а, если есть синхронизация, при подаче двух единиц, триггер меняет значение только при изменении сигнала синхронизации.
 +
 +
{| class="wikitable" align="center" style="color: black; background-color:white;" cellpadding="10"
 +
!<tex>C</tex>
 +
!<tex>J</tex>
 +
!<tex>K</tex>
 +
!<tex>Q</tex>
 +
|-
 +
|0
 +
|0
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|0
 +
|1
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|1
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|0
 +
|1
 +
|1
 +
!|Предыдущее значение
 +
|-
 +
|1
 +
|0
 +
|0
 +
!|Предыдущее значение
 +
|-
 +
|1
 +
|0
 +
|1
 +
!|0
 +
|-
 +
|1
 +
|1
 +
|0
 +
!|1
 +
|-
 +
|1
 +
|1
 +
|1
 +
!|Инвертированное предыдущее
 +
|-
 +
|}
 +
 +
<tex>\mathrm{JK}</tex>-триггер является универсальным триггером, на его основе можно построить множество других триггеров, например <tex>\mathrm{RS}</tex>-триггер.
  
== История ==
+
=== T-триггер ===
В 1918 году М. А. Бонч-Бруевичем[https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%BD%D1%87-%D0%91%D1%80%D1%83%D0%B5%D0%B2%D0%B8%D1%87,_%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B2%D0%B8%D1%87] были описаны схемы <<Катодных реле>>, действующих на основе разниц напряжений ламп. В 1920 году схема была опубликована У. Г. Икклзом[https://en.wikipedia.org/wiki/William_Eccles] и Ф. У. Джоданом[https://en.wikipedia.org/wiki/F._W._Jordan]
+
<tex>\mathrm{T}</tex>(''toggle'')-триггер является триггером, изменяющим свое выходное значение на противоположное на каждом такте, когда на входы <tex>T</tex> и <tex>C</tex> поданы единицы. На основе нескольких <tex>\mathrm{T}</tex>-триггеров можно построить счетчик. <tex>\mathrm{T}</tex>-триггер тоже строится на основе <tex>\mathrm{JK}</tex>-триггера.
== Типы триггеров ==
+
{| class="wikitable" align="center" style="color: black; background-color:white;" cellpadding="10"
'''
+
!<tex>C</tex>
{| border "1" cellspacing="0"  
+
!<tex>T</tex>
!style="background-color:#00ffff;"|S
+
!<tex>Q</tex>
!style="background-color:#00ffff;"|R
 
!style="background-color:#00ffff;"|Q(t)
 
!style="background-color:#00ffff;"|Q(t + 1)
 
 
|-
 
|-
|0||0||0||0
+
|0
 +
|0
 +
!|Предыдущее значение
 
|-
 
|-
|0||0||1||1
+
|0
 +
|1
 +
!|Предыдущее значение
 
|-
 
|-
|0||1||0||0
+
|1
 +
|0
 +
!|Предыдущее значение
 
|-
 
|-
|0||1||1||0
+
|1
 +
|1
 +
!|Значение меняется на каждом такте
 
|-
 
|-
|1||0||0||1
+
|}
 +
 
 +
{| cellpadding="3" style="margin-left: auto; margin-right: auto;"
 +
| [[Файл:Rs_through_jk.jpg|197px|thumb|right|RS-триггер через JK-триггер]]
 +
| [[Файл:T.jpg|243px|thumb|right|T-триггер]]
 +
| [[Файл:Counter.jpg|400px|thumb|right|Счетчик, построенный на T-триггерах]]
 +
|}
 +
 
 +
C помощью <tex>\mathrm{T}</tex>-триггера можно построить счетчик. На вход <tex>T</tex> подается тождественная логическая единица, а на вход <tex>C</tex> подаются инвертированные импульсы синхронизации. Однако, если на первый <tex>\mathrm{T}</tex>-триггер подаются инвертированные исходные импульсы синхронизации, то на остальные триггеры инвертированные импульсы синхронизации передаются с частотой в два раза меньше. Это связано с тем, что <tex>\mathrm{T}</tex>-триггер в данной реализации меняет свое состояние по спаду импульса синхронизации. Таким образом получается, что на выходы <tex>A</tex>, <tex>B</tex>, <tex>C</tex> подаются соответствующие биты количества поданных на первый триггер импульсов. <tex>A</tex> является младшим битом трехбитного числа, <tex>C</tex> {{---}} старшим.
 +
=== D-триггер ===
 +
[[Файл:D.jpg|200px|thumb|right|D-триггер]]
 +
<tex>\mathrm{D}</tex>(''delay'')-триггер позволяет сохранять предыдущее значение. При подаче единицы на бит синхронизации идет запись значения, которое подается на вход <tex>D</tex>. Когда на бит синхронизации подается ноль, значение на выходе равно записанному раньше значению. С помощью восьми <tex>\mathrm{D}</tex>-триггеров можно построить простейшую восьмибитную ячейку памяти.
 +
 
 +
{| class="wikitable" align="center" style="color: black; background-color:white;" cellpadding="10"
 +
!<tex>C</tex>
 +
!<tex>D</tex>
 +
!<tex>Q</tex>
 
|-
 
|-
|1||0||1||1
+
|0
 +
|0
 +
!|Записанное ранее значение
 
|-
 
|-
|1||1||0||Неопределенно
+
|0
 +
|1
 +
!|Записанное ранее значение
 
|-
 
|-
|1||1||1||Неопределенно
+
|1
 +
|0
 +
!|Запись <tex>0</tex>
 +
|-
 +
|1
 +
|1
 +
!|Запись <tex>1</tex>
 
|-
 
|-
 
|}
 
|}
  
== ыа ==
+
== См. также ==
 +
* [[Определение булевой функции]]
 +
* [[Реализация булевой функции схемой из функциональных элементов]]
 +
* [[Cумматор]]
 +
 
 +
== Источники информации ==
 +
* ''Э. Таненбаум.'' Архитектура компьютера, 5-ое издание {{---}} 185 c.
 +
* [[wikipedia:Flip-flop_(electronics)|Wikipedia {{---}} Flip-flop]]
 +
 
 +
 +
[[Категория: Дискретная математика и алгоритмы]]
 +
 
 +
[[Категория: Схемы из функциональных элементов ]]

Текущая версия на 19:15, 4 сентября 2022

Простейший триггер на двух инверторах.
Триггеры (англ. flip-flop) — класс электронных устройств, имеющих свойство долго находиться в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов. Основной особенностью триггеров является способность запоминать двоичную информацию. Триггер имеет два состояния и, приняв одно за [math]0[/math], а другое за [math]1[/math], появляется возможность хранить один разряд двоичного числа. Таким образом, используя несколько триггеров, возможно хранить многоразрядные числа, а, значит, и любую двоичную информацию, ограниченную лишь количеством триггеров.


Типы триггеров

RS-триггер

RS-триггер, построенный на основе ИЛИ-НЕ элементов.

Самым простым триггером, который можно построить, является триггер на двух инверторах. Он не имеет входов, поэтому изменить его состояние невозможно. Выход [math]Q[/math] будет всегда иметь состояние, заданное при создании, а [math]\overline{Q}[/math] будет всегда иметь обратное [math]Q[/math] значение. Однако, недостаток такого триггера очевиден — его состояние нельзя менять.

Если добавить к такому триггеру входы, то получится простейший триггер, состояние которого менять можно — [math]\mathrm{RS}[/math]-триггер. Он имеет два входа: [math]R[/math] (reset) и [math]S[/math] (set), и два выхода: [math]Q[/math] и [math]\overline{Q}[/math](инвертированный [math]Q[/math]). Рассмотрим принцип работы [math]\mathrm{RS}[/math]-триггера. Изначально на выходе [math]Q=0[/math] и [math]\overline{Q}=1[/math]. При подаче [math]1[/math] на [math]R[/math], [math]0[/math] на [math]S[/math] выходное значение триггера становится нулем (происходит сброс значения), при подаче [math]0[/math] на [math]R[/math], [math]1[/math] на [math]S[/math] выходное значение триггера становится единицей (происходит установка нового значения). При подаче двух нулей триггер свое состояние не меняет, выходное значение при подаче двух единиц не определено. Для вычисления следующего значения необходимо знать предыдущее значение, поэтому обычно за начальное состояние берется [math]Q=0[/math], [math]\overline{Q}=1[/math]. Предположим, что первые биты, которые мы даем на вход, являются нулями. Тогда, так как [math]Q=0[/math], можно вычислить [math]\overline{Q}[/math], используя [math]S[/math], а затем, посчитать [math]Q[/math] через [math]R[/math] и убедиться в том, что [math]Q=0[/math]. Это показывает, что значения [math]Q[/math] и [math]\overline{Q}[/math] согласованы. Аналогично можно показать, что выходы согласованы и при [math]Q=1[/math], [math]\overline{Q}=0[/math].

[math]R[/math] [math]S[/math] [math]Q[/math]
0 0 Предыдущее значение
0 1 1
1 0 0
1 1 Не определено

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

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

Существенным недостатком [math]\mathrm{RS}[/math]-триггера является то, что если один из сигналов на вход придет раньше другого, триггер примет неправильное состояние. Для того, чтобы избежать этой проблемы, вводится еще один входной сигнал — сигнал синхронизации. Синхронный [math]\mathrm{RS}[/math]-триггер будет как-либо реагировать на входные сигналы только в том случае, когда на вход [math]C[/math] подана единица. В остальном синхронный [math]\mathrm{RS}[/math]-триггер не отличается от обычного [math]\mathrm{RS}[/math]-триггера.

[math]C[/math] [math]R[/math] [math]S[/math] [math]Q[/math]
0 0 0 Предыдущее значение
0 0 1 Предыдущее значение
0 1 0 Предыдущее значение
0 1 1 Предыдущее значение
1 0 0 Предыдущее значение
1 0 1 1
1 1 0 0
1 1 1 Не определено

JK-триггер

JK-триггер

[math]\mathrm{JK}[/math]-триггер по принципу работы похож на синхронный [math]\mathrm{RS}[/math]-триггер. [math]J[/math] (jump) является аналогом [math]S[/math] (set), [math]K[/math] (kill) является аналогом [math]R[/math] (reset). При подаче единицы на бит синхронизации и при подаче единицы на [math]J[/math] и нуля на [math]K[/math] на выходе единица, при подаче нуля на [math]J[/math] и единицы на [math]K[/math] на выходе ноль. При обоих нулях выдается предыдущее значение. Существенным отличием [math]\mathrm{JK}[/math]-триггера от [math]\mathrm{RS}[/math]-триггеров является то, что состояние с двумя единицами на входе определено. При обеих единицах на выход подается инвертированное предыдущее значение. Стоит заметить, что [math]\mathrm{JK}[/math]-триггер существует только с синхронизацией, потому что без синхронизации при подаче на входы двух единиц, триггер бы постоянно переключался и не остановился бы в каком-то конкретном значении, а, если есть синхронизация, при подаче двух единиц, триггер меняет значение только при изменении сигнала синхронизации.

[math]C[/math] [math]J[/math] [math]K[/math] [math]Q[/math]
0 0 0 Предыдущее значение
0 0 1 Предыдущее значение
0 1 0 Предыдущее значение
0 1 1 Предыдущее значение
1 0 0 Предыдущее значение
1 0 1 0
1 1 0 1
1 1 1 Инвертированное предыдущее

[math]\mathrm{JK}[/math]-триггер является универсальным триггером, на его основе можно построить множество других триггеров, например [math]\mathrm{RS}[/math]-триггер.

T-триггер

[math]\mathrm{T}[/math](toggle)-триггер является триггером, изменяющим свое выходное значение на противоположное на каждом такте, когда на входы [math]T[/math] и [math]C[/math] поданы единицы. На основе нескольких [math]\mathrm{T}[/math]-триггеров можно построить счетчик. [math]\mathrm{T}[/math]-триггер тоже строится на основе [math]\mathrm{JK}[/math]-триггера.

[math]C[/math] [math]T[/math] [math]Q[/math]
0 0 Предыдущее значение
0 1 Предыдущее значение
1 0 Предыдущее значение
1 1 Значение меняется на каждом такте
RS-триггер через JK-триггер
T-триггер
Счетчик, построенный на T-триггерах

C помощью [math]\mathrm{T}[/math]-триггера можно построить счетчик. На вход [math]T[/math] подается тождественная логическая единица, а на вход [math]C[/math] подаются инвертированные импульсы синхронизации. Однако, если на первый [math]\mathrm{T}[/math]-триггер подаются инвертированные исходные импульсы синхронизации, то на остальные триггеры инвертированные импульсы синхронизации передаются с частотой в два раза меньше. Это связано с тем, что [math]\mathrm{T}[/math]-триггер в данной реализации меняет свое состояние по спаду импульса синхронизации. Таким образом получается, что на выходы [math]A[/math], [math]B[/math], [math]C[/math] подаются соответствующие биты количества поданных на первый триггер импульсов. [math]A[/math] является младшим битом трехбитного числа, [math]C[/math] — старшим.

D-триггер

D-триггер

[math]\mathrm{D}[/math](delay)-триггер позволяет сохранять предыдущее значение. При подаче единицы на бит синхронизации идет запись значения, которое подается на вход [math]D[/math]. Когда на бит синхронизации подается ноль, значение на выходе равно записанному раньше значению. С помощью восьми [math]\mathrm{D}[/math]-триггеров можно построить простейшую восьмибитную ячейку памяти.

[math]C[/math] [math]D[/math] [math]Q[/math]
0 0 Записанное ранее значение
0 1 Записанное ранее значение
1 0 Запись [math]0[/math]
1 1 Запись [math]1[/math]

См. также

Источники информации

  • Э. Таненбаум. Архитектура компьютера, 5-ое издание — 185 c.
  • Wikipedia — Flip-flop