Проектирование процессоров RISC-V в среде Logisim и на языке Verilog в среде Quartus

Последовательностная логика. Триггеры

Разбить на страницы
Показывать лекцию целиком

Необходимые материалы для лекции Logisim-03.zip и Verilog-03.zip.

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

На рисунке 3.1 приведена схема, в которой вводится положительная обратная связь.

На данной схеме вводится два входа. Первый вход будет устанавливать схему в хранение лог. "1". Вход поименован как "Set". Второй вход будет переводить схему в лог. "0" и поименован как "Reset".

Вход "Set" подключен к двухвходовому дизъюнктору D1. Выход с элемента D1 подключен к двухвходовому конъюнктору D3. Сигнал с Reset через инвертор D2 поступает на второй вход элемента D3. Для переключения схемы сигнал "Reset" через инвертор обеспечивает присутствие лог. "1" на втором входе D3.

C выхода D3 снимается сигнал и возвращается на элемент D1, обеспечивая положительную обратную связь.

(рис 3.1)

При установке на входе "Reset" лог. "0" и подаче лог. "1" на вход "Set" на выходе "Quit" возникает сигнал лог. "1" (рисунок 3.2а ). Если на входе "Set" установить лог. "0", то схема не изменит своего состояния (рисунок 3.2б ). При смене сигнала на входе "Reset", на выходе "Quit" установится уровень лог. "0" (рисунок 3.2в )

(рис 3.2)

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

Базовым триггером является RS (или SR) триггер. Называется он по именам управляющих сигналов, где S - set, R - reset.

Триггеры имеют следующую классификацию:

  • по принципу функционирования: RS, D, JK, T;
  • по способу записи информации: асинхронные и синхронные;
  • по способу функционирования входа управления записью делятся на статические (управляются уровнем) и динамические (управляются изменением сигнала).
  • по количеству ступеней обработки данных: одноступенчатые и двухступенчатые.
  • Триггеры строятся на инверсной логике.

    На рисунке 3.3 приведена схема RS-триггера на элементах ИЛИ-НЕ по стандарту ЕСКД (рисунок 3.3а ) и на логических элементах в среде Logisim Evolution (рисунок 3.3б ).

    Триггер имеет два входа R и S, а также два выхода Quit (Q) прямой и инверсный Quit (nQ).

    Инверсные элементы 2ИЛИ-НЕ соединены кольцом, то есть с выхода одного элемента, сигнал поступает на вход другого. Пока на обоих управляющих входах R и S уровни сигнала неактивные, в данном случае лог. "0", триггер находится в каком-либо одном из двух устойчивых состояний. Если значение сигнала на выходе Q равно лог. "1", то как видно из схемы, этот сигнал, поступая по цепи обратной связи на вход элемента, обозначенного цифрой 2, вызывает появление на выходе инверсного Q (nQ) сигнала с уровнем лог. "0". В свою очередь лог. "0" с выхода инверсного Q (nQ), поступая на вход элемента 1, поддерживает состояние лог "1" на выходе Q. Иначе говоря, при входных сигналах R и S равных нулю, триггер примет одно устойчивое состояние, и будет находится в нем сколь угодно долго. Когда на прямом выходе Q сигнал равен лог "1", то считается что триггер находится в состоянии 1 или установлен.

    В силу симметрии схемы она будет столь устойчивой в своём противоположном нулевом состоянии. Когда уровень на выходе Q равен нулю, а уровень на Q инверсном (nQ) соответствует лог. "1", в этом случае считается, что триггер сброшен или погашен. Когда оба управляющих сигнала R и S не активны, то такой режим называют режимом хранения.

    (рис 3.3)

    На рисунке 3.4 приведены режимы работы RS триггера. В таблице 3.1 приведена таблица истинности для данного триггера, где Qt - начальное состояние триггера, Q(t+1) - изменяемое состояние.

    (рис 3.4)
    R S Q(t) Q(t+1) Пояснения
    0 0 0 0 Режим хранения
    0 0 1 1
    0 1 1 1 Режим установки
    0 1 1 1
    1 0 0 0 Режим сброса
    1 0 1 0
    1 1 0 X Запрещенное состояние
    1 1 1 X

    Из таблицы 3.1 видно, что существует запрещенное состояние. Данное состояние необходимо прояснить.

    Если на входы RS триггера подать одновременно входной сигнал лог. "1", то на обоих выходах Q и инверсном Q устанавливается лог. "0". Если одновременно снять единицы со входов RS, то элементы триггера начнут переключаться в единичное состояние, каждый стремясь при этом оставить своего партнера в нуле. Какой элемент сработает зависит от коэффициента усиления, скоростей переходных процессов и ряда других неизвестных заранее факторов. Для разработчика схемы результирующее состояние триггера оказывается неопределённым, поэтому комбинация R=S=1 считается запрещённой и в обычных условиях её необходимо блокировать. На рисунке 3.5 показан режим запрещенного состояния (для имитации возврата из запрещённого состояния оставлен один вход).

    (рис 3.5)

    По отношению к рассмотренному RS триггеру имеется обратный вариант реализации на элементах 2И-НЕ. Такие триггеры управляются сигналами лог. "0". На рисунке 3.6 приведены режимы работы триггера на элементах 2И-НЕ. В таблице 3.2 приведена таблица истинности для данного триггера.

    (рис 3.6)
    R S Q(t) Q(t+1) Пояснения
    0 0 0 X Запрещенное состояние
    0 0 1 X
    0 1 1 0 Режим сброса
    0 1 1 0
    1 0 0 1 Режим установки
    1 0 1 1
    1 1 0 0 Режим хранения
    1 1 1 1

    Для защиты триггера от возникновения запрещенных состояний, например при помехах, в схему вводится буферный элемент, включаемый также по схеме триггера. При вводе буферной схемы меняется уровень срабатывания входных сигналов. В схеме, приведенной на рисунке 3.7, уровнем срабатывания будет являться лог. "1". Элементы D3-D4 являются непосредственно триггером, а на элементах D1, D2 работает механизм, ограничивающий реакции на одном из входов, сигнал на котором появляется позже. Данный механизм обеспечивается за счет того, что обратная связь обеспечивает наличие устойчивого состояния.

    (рис 3.7)

    Для повышения надёжности триггеров применяется дополнительный вход управления, называемый синхросигналом С (clock). В принципе цифровые устройства с памятью, микропроцессорные системы подразумевают наличие синхронизации. Цифровые узлы и периферийные устройства, интерфейсы связи по большей части работают синхронно. Синхронизация обеспечивает качество и надежность обмена данными. В дополнительной литературе [1,2] можно подробно ознакомиться с описанием генераторов синхросигналов и построение систем синхронизации.

    На рисунке 3.8 приведена функциональная схема синхронного SR-триггера. Для его создания применяются элементы 3И-НЕ (D1, D2). Третий вход данных элементов будет объединен и подключен к элементу вход. Его метка присвоено значение "С". На рисунке 3.9 приведено условно-графическое обозначение синхронного SR-триггера в ANSI (рисунок 3.9а ) и ЕСКД (рисунок 3.9б ).

    (рис 3.8) (рис 3.9)

    Следующим видом триггеров, является D-триггер, он же триггер, управляемый уровнем синхросигнала. Также встречается в литературе определение "защёлка" или "latch". Ещё один вариант названия - DC-триггер и расшифровывается как С - clock, D - delay (в некоторых источниках можно встретить как data, что в принципе тоже верно по отношению к его функционалу). На рисунке 3.10 показан универсальный способ построения синхронного D-триггера на базе SR триггера.

    На элементах D4, D5 реализована ячейка SR-триггера. На элементах D2, D3 реализована схема управления записью в SR-триггер. Элемент D1 обеспечивает инверсию на входе D3, тем самым обеспечивая установку триггера в сброшенное состояние.

    (рис 3.10)

    В таблице 3.3 приведена таблица истинности для рассматриваемого триггера

    C D Q(t) Q(t+1) Пояснения
    0 X 0 0 Режим хранения
    0 X 1 1
    1 0 X 0 Режим записи (0)
    1 1 X 1 Режим записи (1)

    На рисунке 3.11а приведено условно-графическое обозначение синхронного D-триггера в ANSI, а на рисунке 3.11б для ЕСКД.

    (рис 3.11)

    Для проверки работы схемы в меню "Моделировать" необходимо выбрать "Такты включены". В открывшемся диалоговом окне (рисунок 3.12), выбрать вход С.

    (рис 3.12)

    Частота синхросигналов задается в меню "Моделировать" - "Тактовая частота".

    На примере данного триггера можно рассмотреть еще один вид неверного работа цифровых цепей - "гонка сигналов" (race condition).

    Гонка (состязание) сигналов несоответствие сигналов на выходе, вызванное переходными процессами в цепях устройств.

    Для наблюдения данной ошибки добавим в схему виртуальный осциллограф. Данный инструмент находится во вкладке "Input/Output Extra" и называется "Цифровой осциллятор". На рисунке 3.13 приведен данный инструмент, где цифрами обозначены: 1 - тактовый вход, подключается к тактовому входу; 2 - вход для измеряемых сигналов.

    Основные свойства:

  • "Количество входов" - количество измеряемых показаний;
  • "Число состояний" - максимальное количество попадающих на экран тактов;
  • "Линия фронтальных часов" - реакция на синхросигнал тактового входа;
  • "Показать атрибуты часов" - отображения параметров синхросигнала с тактового входа.
  • (рис 3.13)

    На рисунке 3.14 приведена работа триггера с отслеживанием изменения сигналов в контрольных точках 1 и 3. На осциллографе красным выделен переходный процесс, который возникает из-за задержки прохождения сигнала в цепи D1-D3 относительно элемента D3.

    (рис 3.14)

    Для устранения ошибок гонки сигналов триггеры делают двухступенчатыми. Двухступенчатый триггер состоит из двух триггеров: M-master (ведущий), S - slave (ведомый). Такой триггер именуется MS в условно-графическом обозначении в поле функции пишется ТТ.

    Особенность организации двухступенчатых триггеров заключается в применении схем инверсии сигнала синхронизации либо схем запрещающих связей. Изменение сигналов на входе при фронте (спаде) сигнала синхронизации не вызывает изменение сигналов на выходе триггера. Такое поведение триггера называется свойством непрозрачности.

    Ошибка метастабильности триггеров

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

    Метастабильность возникает, когда триггер сталкивается с изменениями на входе, которые происходят слишком быстро относительно его времени отклика. В таких случаях он может оказаться в промежуточном состоянии, что может привести к непредсказуемому поведению.

    Примером является D-триггер, который может стать метастабильным, если на его вход подается сигнал, когда триггер находится в состоянии изменения. Это происходит, например, при использовании триггеров в цифровых схемах, где синхронизация осуществляется на низкой частоте, относительно входных сингалов. В литературе [1,4,5] приводятся подробные выкладки с диаграммами, поясняющими природу данной ошибки.

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

  • Увеличение времени стабилизации. Увеличение времени формирования и установки входных сигналов может помочь триггеру стабилизироваться. Это позволяет триггеру успеть нормально реагировать на изменения во входных данных до их следующего изменения.
  • Синхронизация с тактовыми сигналами. Использование синхронизирующих триггеров для согласовывания асинхронных сигналов с тактовыми позволяет уменьшить вероятность метастабильности. Это достигается путём передачи входного сигнала через несколько последовательных триггеров, что даёт время для стабилизации (рисунок 3.15). Возникновение метастабильности на первом триггере не приведет к искажению сигнала на выходе третьего.

    (рис 3.15)

    В приложении А приводится механизм преодоления метастабильности с применением языка описания аппаратуры Verilog HDL.

  • Уменьшение частоты изменения сигналов на входах триггера либо увеличение частоты также может сильно снизить риск метастабильных состояний.
  • Важно! Необходимо прояснить по поводу видов синхросигналов в цепях последовательностных устройств. По "фронту синхросигнала" либо по "переднему фронту" значит, что схема записывает данные при переходе синхросигнала из низкого уровня в состояние лог. "1". По "заднему фронту" или "спадающем фронту" синхросигнала значит, что схема будет срабатывать и осуществлять запись данных в цепях при переходе синхросигнала из высокого уровня в состоянии низкого уровня. В период этого перехода происходит обработка данных. На рисунке 3.16 показано обозначение этих самых динамических входов по "фронту" и по "спаду" для ANSI и ЕСКД (а), Logisim Evoluion(б).

    (рис 3.16)

    В лабораторной работе 2 необходимо выполнить проектирование двухступенчатого D-триггера.

    Свойство непрозрачности МS-триггера использовано для построения интересного и широко применяемого JК-триггера, схема которого показана на рисунке 3.17. JK-триггер является наиболее используемым из всех конструкций триггеров и считается универсальной схемой триггера.

    Схема JK-триггера похожа на SR, а его последовательная работа точно такая же. Разница в том, что JK-триггер не имеет недействительных или запрещенных входных состояний как SR, даже когда на оба входа подается управляющий сигнал.

    JК-триггер - это непрозрачный триггер, выходы которого петлями инвертирующих обратных связей (накрест) заведены на элементы 1 и 2 (2И-НЕ). Из-за данных связей система моделирования Logisim Evolution не может смоделировать JK-триггер на дискретных комбинационных элементах.

    При J=К=0 С-сигнал не может открыть входные элементы 1 и 2, и триггер находится в режиме хранения. При J=1, К=0 синхросигналом может быть открыт лишь элемент 1 и только при условии, что перед поступлением С-сигнала на выходе триггера был 0 (Q=0, $$\bar Q=1$$). Тогда по спаду синхросигнала триггер переключится в 1. Если же триггер до синхросигнала был в 1, то он так и останется в этом состоянии. Таким образом, J-вход выполняет функции синхронизированного S-входа. В силу симметрии схемы легко показать, что К-вход выполняет функции синхронизированного R-входа, переводя триггер в сброшенное состояние. Таким образом, при разноименных уровнях на J и К-входах JК-триггер ведет себя как синхронный непрозрачный RS-триггер. При сигнале на J=K=1 поведение JК-триггера сильно отличается от SR. При любом состоянии триггера обратные связи при поступлении С-сигнала откроют тот элемент И-НЕ, который переведет триггер в противоположное состояние. Таким образом при J=K=1 триггер переключается в противоположное состояние. Данный режим называется счетным или T (toggle - кувыркаться), а работающий в таком режиме триггер называется Т-триггером.

    (рис 3.17)

    В таблице 3.4 приведена таблица истинности (работы) JK- триггера.

    C J K Q(T) Q(t+1) Пояснения
    0 X X 0 0 Режим хранения
    0 X X 1 1
    1 0 0 0 0
    1 0 0 1 1
    1 0 1 0 1 Режим сброса
    1 0 1 1 1
    1 1 0 0 0 Режим установки
    1 1 0 1 0
    1 1 1 0 1 J=K=1, счетный режим
    1 1 1 1 0

    На рисунке 3.18а приведено условно-графическое обозначение синхронного JK-триггера в ANSI, а на рисунке 3.18б в ЕСКД.

    (рис 3.18)

    Т-триггер представляет собой триггер, у которого отсутствуют сигналы J и К, а тактирование осуществляется по счётному входу Т. Синхронный Т триггер объединяет для счетного входа J и K. Вход C остается включенным так, как показано на рисунке 3.17. Т-триггер в силу особенностей обратных связей в среде невозможно смоделировать на дискретных элементах Logisim Evolution.

    В таблице 3.5 приведена таблица истинности для синхронного Т триггера.

    C T Q(t) Q(t+1) Пояснения
    0 X 0 0 Режим хранения
    0 X 1 1
    1 0 0 0
    1 0 1 1
    1 1 0 1 Режим установки
    1 1 1 0 Режим сброса

    На рисунке 3.19а приведено условно-графическое обозначение синхронного T-триггера в ANSI, а на рисунке 3.19б в ЕСКД.

    (рис 3.19)

    Триггеры могут быть взаимозаменяемыми при изменении схемы включения и добавления элементов комбинационной логики. Решение задачи взаимозаменяемости триггеров осуществляется в практической работе 3.

    В среде Logisim Evolution в разделе "Память" находятся синхронные триггеры. Разработчики обеспечили защиту виртуальных элементов от неверного срабатывания, например, "гонки сигналов".

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

  • "Передний фронт" - по фронту синхросигнала;
  • "Задний фронт" - по спаду синхросигнала;
  • "Высокий уровень" - статический вход управления лог. "1";
  • "Низкий уровень" - статический вход управления лог. "0".
  • Вид триггера Условно-графическое обозначение Назначение сигналов
    Синхронный D-триггер

    1 - синхронный D вход;

    2 - вход синхронизации (С);

    3 - асинхронный вход S;

    4 - асинхронный вход R;

    5 - прямой выход Q;

    6 - инверсный выход Q.

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

    1 - синхронный T вход;

    2 - вход синхронизации (С);

    3 - асинхронный вход S;

    4 - асинхронный вход R;

    5 - прямой выход Q;

    6 - инверсный выход Q.

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

    1 - синхронный J вход;

    1 - синхронный K вход;

    3 - вход синхронизации (С);

    4 - асинхронный вход S;

    5 - асинхронный вход R;

    6 - прямой выход Q;

    7 - инверсный выход Q.

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

    1 - синхронный J вход;

    2 - синхронный K вход;

    3 - вход синхронизации (С);

    4 - асинхронный вход S;

    5 - асинхронный вход R;

    6 - прямой выход Q;

    7 - инверсный выход Q.

    Лабораторная работа 3. "Двухступенчатого триггера"

    Целю лабораторной работы является:

  • Закрепление навыков работы с триггерами путем реализации двухступенчатого триггер DV.
  • Получение навыков работы с инструментом симуляции "Хронограмма".
  • В среде Logisim Evolution создать новый файл и сохранить его под именем DV. Построить схему, приведенную на рисунке 3.20. На элементах D3, D4 реализован ведущий RS триггер. Элементы D1, D2 образуют комбинационную схему, реализующую функцию синхронизации и работы линии D. На элементах D5-D8 реализован синхронный SR-триггер. Его синхронизация осуществляется в противофазе входному сигналу С за счет включения в линию инвертора D9.

    (рис 3.20)

    Попеременно подавая сигналы на входы D и С, необходимо убедится в работоспособности собранной схемы.

    Для работы с инструментом "Хронограмма7quot; подключить элемент "выход" к линиям S и R и выходу инвертора D9 (рисунок 3.21).

    (рис 3.21)

    Далее вызвать перейти в меню "Моделировать" - "Запись в журнал". Во вкладке "Options" в секции "Logging Mode" выбрать "Clocked mode". В открывшемся диалоговом окне, аналогичному приведенному на рисунке 3.12 выбрать в качестве синхронизируемого входа - С. В выпадающем списке "Time scale" задать "1.0 s". В списке "Clock Discipline" выбрать "capture on both edges". В меню "Моделировать" тактовая частота задать 2 Гц и выбрать такты включены. Перейти во вкладку "Хронограмма" (рисунок 3.22). В меню быстрого доступа нажать на кнопку "Запускайте симулятор непрерывно" (выделена на рисунке областью красного цвета).

    (рис 3.22)

    На рисунке 3.23 приведена диаграмма работы триггера. На ней можно видеть режимы сброса триггера при включении, переходы в период смены сигнала на входе.

    (рис 3.23)

    Для обеспечения стабильной работы триггера защелки на высоких частотах разработчики могут вводить дополнительный вход управления записью - стробирование, именуемый V. Видоизменим схему, добавив еще один вход элементам D1 и D3. Вход V объединяется у элементов D1 и D2 (рисунок 3.24).

    (рис 3.24)

    Самостоятельно

  • Реализовать схему двухступенчатого синхронного D-триггера с запрещающими связями (рисунок 3.25).
  • Получить для него временную диаграмму, используя инструмент "Хронограмма".
  • Дать описание его работы.
  • Определить отличие в работе от D-триггера, описанного выше.
  • (рис 3.25)

    В среде Quartus на языке Verilog HDL требуется создать два вида двухтактных триггеров и разработать тесты. В листинге 3.1 приведен код для двухтактной защелки, которая управляется уровнем сигнала на входе clk.

    module latch_MS (input clk,D, output reg Q);
    reg c; \\ регистровая переменная с
    always @(*)
    if (clk) \\если на входе лог. 1
    		c=D; \\присвоить переменной значение с D
    always @(*) \\анализируем уход лог 1 с входа d
    	if (~clk) 
    		Q=c; \\выходу Q присвоить содержимое с 
    Endmodule
    

    На рисунке 3.26 представлен вид RTL для данного листинга.

    (рис 3.26)

    В листинге 3.2 приведен код двухтактного триггера, анализирующего перепад за счет ввода ключевых слов, анализирующих сигнал posedge - по фронту сигнала, negedge - по спаду. Также присваивание = заменено на <=, что будет более правильным вариантом записи, исключающим "гонку сигналов".

    module latch_MS1 (input clk, D, output reg Q);
        reg master;               // переменная ведущего триггера
        reg slave;                // переменная подчиненного триггера
        // проверяем возникновение фронта сигнала clk
        always @(posedge clk) begin
            master <= D;          // Capture data on the rising edge of the clock
        end
    
        // проверяем изменение синхронизации на спад
        always @(negedge clk) begin
            slave <= master;      // передача данных между регистровыми переменными
        end
    
        // анализируем изменения сигналов
        always @(*) begin
            Q = slave;            // выходу присваивается содержимое ведомого триггера
        end
    endmodule
    

    На рисунке 3.27 представлен вид RTL для листинга 3.2.

    (рис 3.27)

    В листинге 3.3 приведено содержимое файла testbench.v для двухтактного синхронного триггера.

    module testbench;
        reg D;   // вход D
        reg clk; // синхровход clk
        wire Q;  // Выход Q
        // привязка линий триггера
        latch_MS1 uut (
            .D(D),
            .clk(clk),
            .Q(Q)
        );
        // генерация сигнала
        initial begin
            clk = 0;
            forever #5 clk = ~clk; // цикл синхросигналов
        end
            initial begin
            // Начальное состояние на линии D
            D = 0;
            // задержка 
            #10;
            // тестирование такта 1
            D = 1;         
            #10; // период ожидание
            $display("D=%b, Q=%b", D, Q); // Check outputs
            // тестирование такта 2
            D = 0;
            #10; 
            $display("D=%b, Q=%b", D, Q); 
            // тестирование такта 3
            D = 1;         
            #10; 
            $display("D=%b, Q=%b", D, Q); 
            // тестирование  такта 4 состояния итог
            D = 0;
            #10;
            $display("D=%b, Q=%b", D, Q); 
            // окончание симуляции
            $stop; 
        end
    endmodule
    

    На рисунке 3.28 приведена диаграмма тестирования синхронного триггера.

    (рис 3.28)

    Самостоятельно

  • Добавить описание инверсного выхода триггера - Qn.
  • Добавить дополнительно вход управления V.
  • Разработать код теста с учетом добавленных сигналов. Выполнить симуляцию.
  • Практическая работа 3. "Замещение триггеров"

    На рисунке 3.29 приведен вариант реализации синхронного SR-триггера на D-триггере.

    (рис 3.29)

    Ниже на рисунке 3.30 показана временная диаграмма работы триггера, с использованием инструмента "Хронограмма". Диаграмма реализована на частоте 1Гц. (во вкладке "Options" качестве "Clock Source" задан вход С). По данной диаграмме проводится сверка с диаграммой работы для синхронного SR-триггера Logisim Evolution. Далее проверятся условие перехода триггера из индивидуального задания в запрещенное состояние.

    (рис 3.30)

    Задание выполняется по варианту из таблицы 3.7

    № варианта Создаваемые синхронные триггеры Базовый триггер Срабатывание базового триггера
    1,7,13,19 JK, T D Передний фронт
    2,8,14,20 JK, T D Задний фронт
    3,9,15,21 D, T SR Передний фронт
    4,10,16,22 D, TC SR Задний фронт
    5,11,17,23 SR, T JK Передний фронт
    6,12,18,24 SR, T JK Задний фронт

    В таблице 3.8 приведено структурное описание на языке Verilog HDL SR-триггера, также приведен его тест.

    Необходимо реализовать структурное описание JK-триггера на языке Verilog HDL и разработать тестовое окружение.

    Описание триггера Тестовое окружение триггера
    module sr_latch (
        input wire S,  //установка (Set)
        input wire R,  //сброс (Reset)
        output wire Q, //выход Q
        output wire Qn //выход Qn (инверсный)
    );
        wire n1, n2; //внутренние соединения
        // первый NAND элемент
        nand (n1, S, Qn);
        // второй NAND элемент
        nand (n2, R, Q);
        assign Q = n1; //выход Q
        assign Qn = n2; //выход Qn
    endmodule
    
    module testbench;
        reg S;  //установка
        reg R;  //сброс
        wire Q;  //выход Q
        wire Qn; //выход Qn
        // связывание SR-триггера
        sr_latch uut (
            .S(S),
            .R(R),
            .Q(Q),
            .Qn(Qn)
        );
        initial begin
            // Инициализация
            S = 0; 
            R = 0;
            // тестовые сигналы
            #10 S = 1; R = 0; // установить триггер //в 1
            #10 S = 0; R = 1; // сбросить триггер в //0
            #10 S = 0; R = 0; // хранение 
            #10 S = 1; R = 0; //установить Q в 1 снова
            #10 S = 0; R = 1; //сбросить Q в 0
    
            $finish; //завершить симуляцию
        end
        // вывод состояний
        initial begin
            $monitor("Time: %0t | S = %b, R = %b | Q = %b, Qn = %b", $time, S, R, Q, Qn);
        end
    endmodule
    

    Результат симуляции представлен на рисунке 3.31.

    (рис 3.31)

    Дать ответы на следующие вопросы:

  • В чем отличие синхронного триггера от асинхронного?
  • Что такое запрещенное состояние, как можно избавиться от запрещенного состояния в асинхронном триггере?
  • Какие входы синхронные или асинхронные имеют приоритет и почему (пояснить на схеме двухтактного триггера)?
  • Для чего в D триггер вводится сигнал V?
  • Приложение А

    Для преодоления метастабильности можно увеличить времени на установку (setup time), путем задания задержки входного сигнала.

    Для реализации необходимо создать описание D-триггера (листинг 3.4).

    module D_dff (
        input wire D,
        input wire clk,
        input wire reset,
        output reg Q
    );
        reg D_reg;
        always @(posedge clk or posedge reset) begin
            if (reset) begin
                D_reg <= 0;
            end else begin
                D_reg <= D;  
            end
        end
        always @(posedge clk or posedge reset) begin
            if (reset) begin
                Q <= 0;
            end else begin
                Q <= D_reg;  
            end
        end
    endmodule 
    

    Далее создается файл, выполняющий задержку распространения сигнала (листинг 3.5).

    module D_meta(
        input wire clk,
        input wire D,
        output wire Q
    );
        reg D_stable;
            // Задержка входного сигнала D
        always @(posedge clk) begin
            // Обновление только если clk высокий достаточно долго
            D_stable <= D; 
        end
        // подключение D-триггера
        D_dff (
            .D(D_stable),
            .clk(clk),
            .reset(1'b0), 
            .Q(Q)
        );
    Endmodule
    

    На рисунке 3.32 приведено RTL представление полученного триггера.

    (рис 3.32)

    Для создания схемы преодоления метастабильности с применением нескольких триггеров создадим базовый D-триггер (листинг 3.4) и файл верхнего уровня, приведенный в листинге 3.6

    module D_meta (
        input wire D,
        input wire clk,
        output wire Q
    );
        wire D_intermediate;
        // Первый триггер
        D_dff first_ff(
            .D(D),
            .clk(clk),
            .reset(1'b0),
            .Q(D_intermediate)
        );
        // Второй триггер
        D_dff second_ff (
            .D(D_intermediate),
            .clk(clk),
            .reset(1'b0),
            .Q(Q)
        );
    Endmodule
    

    На рисунке 3.33 приведено RTL представление полученного триггера.

    (рис 3.33)

    Дополнительная литература

  • Микушин А.В. Цифровые устройства и микропроцессоры: учебн. пособие. - СПб.: БХВ-Петербург, 2010 - 832 с.: ил. (С. 107 - 117).
  • Угрюмов Е.П. Цифровая схемотехника: учеб. пособие для вузов. - 2-е изд., перераб. и доп. СПб.: БХВ-Петербург, 2007. - 800 с.: ил. (С. 179 -194).
  • С. Харрис, Д. Харрис. Цифровая схемотехника и архитектура компьютера RISC-V/ пер. с англ. В.С. Яценкова, А.Ю. Романова; под. ред. А.Ю. Романова.-М.: ДМК Пресс, 2021. - 810 с.: ил. (С. 151-154)
  • Неизвестное об известном, или что такое метастабильность триггеров
  • Еще о метастабильности
  • Страницы:

    Необходимые материалы для лекции Logisim-03.zip и Verilog-03.zip.

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

    На рисунке 3.1 приведена схема, в которой вводится положительная обратная связь.

    На данной схеме вводится два входа. Первый вход будет устанавливать схему в хранение лог. "1". Вход поименован как "Set". Второй вход будет переводить схему в лог. "0" и поименован как "Reset".

    Вход "Set" подключен к двухвходовому дизъюнктору D1. Выход с элемента D1 подключен к двухвходовому конъюнктору D3. Сигнал с Reset через инвертор D2 поступает на второй вход элемента D3. Для переключения схемы сигнал "Reset" через инвертор обеспечивает присутствие лог. "1" на втором входе D3.

    C выхода D3 снимается сигнал и возвращается на элемент D1, обеспечивая положительную обратную связь.

    (рис 3.1)

    При установке на входе "Reset" лог. "0" и подаче лог. "1" на вход "Set" на выходе "Quit" возникает сигнал лог. "1" (рисунок 3.2а ). Если на входе "Set" установить лог. "0", то схема не изменит своего состояния (рисунок 3.2б ). При смене сигнала на входе "Reset", на выходе "Quit" установится уровень лог. "0" (рисунок 3.2в )

    (рис 3.2)

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

    Базовым триггером является RS (или SR) триггер. Называется он по именам управляющих сигналов, где S - set, R - reset.

    Триггеры имеют следующую классификацию:

  • по принципу функционирования: RS, D, JK, T;
  • по способу записи информации: асинхронные и синхронные;
  • по способу функционирования входа управления записью делятся на статические (управляются уровнем) и динамические (управляются изменением сигнала).
  • по количеству ступеней обработки данных: одноступенчатые и двухступенчатые.
  • Триггеры строятся на инверсной логике.

    На рисунке 3.3 приведена схема RS-триггера на элементах ИЛИ-НЕ по стандарту ЕСКД (рисунок 3.3а ) и на логических элементах в среде Logisim Evolution (рисунок 3.3б ).

    Триггер имеет два входа R и S, а также два выхода Quit (Q) прямой и инверсный Quit (nQ).

    Инверсные элементы 2ИЛИ-НЕ соединены кольцом, то есть с выхода одного элемента, сигнал поступает на вход другого. Пока на обоих управляющих входах R и S уровни сигнала неактивные, в данном случае лог. "0", триггер находится в каком-либо одном из двух устойчивых состояний. Если значение сигнала на выходе Q равно лог. "1", то как видно из схемы, этот сигнал, поступая по цепи обратной связи на вход элемента, обозначенного цифрой 2, вызывает появление на выходе инверсного Q (nQ) сигнала с уровнем лог. "0". В свою очередь лог. "0" с выхода инверсного Q (nQ), поступая на вход элемента 1, поддерживает состояние лог "1" на выходе Q. Иначе говоря, при входных сигналах R и S равных нулю, триггер примет одно устойчивое состояние, и будет находится в нем сколь угодно долго. Когда на прямом выходе Q сигнал равен лог "1", то считается что триггер находится в состоянии 1 или установлен.

    В силу симметрии схемы она будет столь устойчивой в своём противоположном нулевом состоянии. Когда уровень на выходе Q равен нулю, а уровень на Q инверсном (nQ) соответствует лог. "1", в этом случае считается, что триггер сброшен или погашен. Когда оба управляющих сигнала R и S не активны, то такой режим называют режимом хранения.

    (рис 3.3)

    На рисунке 3.4 приведены режимы работы RS триггера. В таблице 3.1 приведена таблица истинности для данного триггера, где Qt - начальное состояние триггера, Q(t+1) - изменяемое состояние.

    (рис 3.4)
    R S Q(t) Q(t+1) Пояснения
    0 0 0 0 Режим хранения
    0 0 1 1
    0 1 1 1 Режим установки
    0 1 1 1
    1 0 0 0 Режим сброса
    1 0 1 0
    1 1 0 X Запрещенное состояние
    1 1 1 X

    Из таблицы 3.1 видно, что существует запрещенное состояние. Данное состояние необходимо прояснить.

    Если на входы RS триггера подать одновременно входной сигнал лог. "1", то на обоих выходах Q и инверсном Q устанавливается лог. "0". Если одновременно снять единицы со входов RS, то элементы триггера начнут переключаться в единичное состояние, каждый стремясь при этом оставить своего партнера в нуле. Какой элемент сработает зависит от коэффициента усиления, скоростей переходных процессов и ряда других неизвестных заранее факторов. Для разработчика схемы результирующее состояние триггера оказывается неопределённым, поэтому комбинация R=S=1 считается запрещённой и в обычных условиях её необходимо блокировать. На рисунке 3.5 показан режим запрещенного состояния (для имитации возврата из запрещённого состояния оставлен один вход).

    (рис 3.5)

    По отношению к рассмотренному RS триггеру имеется обратный вариант реализации на элементах 2И-НЕ. Такие триггеры управляются сигналами лог. "0". На рисунке 3.6 приведены режимы работы триггера на элементах 2И-НЕ. В таблице 3.2 приведена таблица истинности для данного триггера.

    (рис 3.6)
    R S Q(t) Q(t+1) Пояснения
    0 0 0 X Запрещенное состояние
    0 0 1 X
    0 1 1 0 Режим сброса
    0 1 1 0
    1 0 0 1 Режим установки
    1 0 1 1
    1 1 0 0 Режим хранения
    1 1 1 1

    Для защиты триггера от возникновения запрещенных состояний, например при помехах, в схему вводится буферный элемент, включаемый также по схеме триггера. При вводе буферной схемы меняется уровень срабатывания входных сигналов. В схеме, приведенной на рисунке 3.7, уровнем срабатывания будет являться лог. "1". Элементы D3-D4 являются непосредственно триггером, а на элементах D1, D2 работает механизм, ограничивающий реакции на одном из входов, сигнал на котором появляется позже. Данный механизм обеспечивается за счет того, что обратная связь обеспечивает наличие устойчивого состояния.

    (рис 3.7)

    Для повышения надёжности триггеров применяется дополнительный вход управления, называемый синхросигналом С (clock). В принципе цифровые устройства с памятью, микропроцессорные системы подразумевают наличие синхронизации. Цифровые узлы и периферийные устройства, интерфейсы связи по большей части работают синхронно. Синхронизация обеспечивает качество и надежность обмена данными. В дополнительной литературе [1,2] можно подробно ознакомиться с описанием генераторов синхросигналов и построение систем синхронизации.

    На рисунке 3.8 приведена функциональная схема синхронного SR-триггера. Для его создания применяются элементы 3И-НЕ (D1, D2). Третий вход данных элементов будет объединен и подключен к элементу вход. Его метка присвоено значение "С". На рисунке 3.9 приведено условно-графическое обозначение синхронного SR-триггера в ANSI (рисунок 3.9а ) и ЕСКД (рисунок 3.9б ).

    (рис 3.8) (рис 3.9)

    Следующим видом триггеров, является D-триггер, он же триггер, управляемый уровнем синхросигнала. Также встречается в литературе определение "защёлка" или "latch". Ещё один вариант названия - DC-триггер и расшифровывается как С - clock, D - delay (в некоторых источниках можно встретить как data, что в принципе тоже верно по отношению к его функционалу). На рисунке 3.10 показан универсальный способ построения синхронного D-триггера на базе SR триггера.

    На элементах D4, D5 реализована ячейка SR-триггера. На элементах D2, D3 реализована схема управления записью в SR-триггер. Элемент D1 обеспечивает инверсию на входе D3, тем самым обеспечивая установку триггера в сброшенное состояние.

    (рис 3.10)

    В таблице 3.3 приведена таблица истинности для рассматриваемого триггера

    C D Q(t) Q(t+1) Пояснения
    0 X 0 0 Режим хранения
    0 X 1 1
    1 0 X 0 Режим записи (0)
    1 1 X 1 Режим записи (1)

    На рисунке 3.11а приведено условно-графическое обозначение синхронного D-триггера в ANSI, а на рисунке 3.11б для ЕСКД.

    (рис 3.11)

    Для проверки работы схемы в меню "Моделировать" необходимо выбрать "Такты включены". В открывшемся диалоговом окне (рисунок 3.12), выбрать вход С.

    (рис 3.12)

    Частота синхросигналов задается в меню "Моделировать" - "Тактовая частота".

    На примере данного триггера можно рассмотреть еще один вид неверного работа цифровых цепей - "гонка сигналов" (race condition).

    Гонка (состязание) сигналов несоответствие сигналов на выходе, вызванное переходными процессами в цепях устройств.

    Для наблюдения данной ошибки добавим в схему виртуальный осциллограф. Данный инструмент находится во вкладке "Input/Output Extra" и называется "Цифровой осциллятор". На рисунке 3.13 приведен данный инструмент, где цифрами обозначены: 1 - тактовый вход, подключается к тактовому входу; 2 - вход для измеряемых сигналов.

    Основные свойства:

  • "Количество входов" - количество измеряемых показаний;
  • "Число состояний" - максимальное количество попадающих на экран тактов;
  • "Линия фронтальных часов" - реакция на синхросигнал тактового входа;
  • "Показать атрибуты часов" - отображения параметров синхросигнала с тактового входа.
  • (рис 3.13)

    На рисунке 3.14 приведена работа триггера с отслеживанием изменения сигналов в контрольных точках 1 и 3. На осциллографе красным выделен переходный процесс, который возникает из-за задержки прохождения сигнала в цепи D1-D3 относительно элемента D3.

    (рис 3.14)

    Для устранения ошибок гонки сигналов триггеры делают двухступенчатыми. Двухступенчатый триггер состоит из двух триггеров: M-master (ведущий), S - slave (ведомый). Такой триггер именуется MS в условно-графическом обозначении в поле функции пишется ТТ.

    Особенность организации двухступенчатых триггеров заключается в применении схем инверсии сигнала синхронизации либо схем запрещающих связей. Изменение сигналов на входе при фронте (спаде) сигнала синхронизации не вызывает изменение сигналов на выходе триггера. Такое поведение триггера называется свойством непрозрачности.

    Ошибка метастабильности триггеров

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

    Метастабильность возникает, когда триггер сталкивается с изменениями на входе, которые происходят слишком быстро относительно его времени отклика. В таких случаях он может оказаться в промежуточном состоянии, что может привести к непредсказуемому поведению.

    Примером является D-триггер, который может стать метастабильным, если на его вход подается сигнал, когда триггер находится в состоянии изменения. Это происходит, например, при использовании триггеров в цифровых схемах, где синхронизация осуществляется на низкой частоте, относительно входных сингалов. В литературе [1,4,5] приводятся подробные выкладки с диаграммами, поясняющими природу данной ошибки.

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

  • Увеличение времени стабилизации. Увеличение времени формирования и установки входных сигналов может помочь триггеру стабилизироваться. Это позволяет триггеру успеть нормально реагировать на изменения во входных данных до их следующего изменения.
  • Синхронизация с тактовыми сигналами. Использование синхронизирующих триггеров для согласовывания асинхронных сигналов с тактовыми позволяет уменьшить вероятность метастабильности. Это достигается путём передачи входного сигнала через несколько последовательных триггеров, что даёт время для стабилизации (рисунок 3.15). Возникновение метастабильности на первом триггере не приведет к искажению сигнала на выходе третьего.

    (рис 3.15)

    В приложении А приводится механизм преодоления метастабильности с применением языка описания аппаратуры Verilog HDL.

  • Уменьшение частоты изменения сигналов на входах триггера либо увеличение частоты также может сильно снизить риск метастабильных состояний.
  • Важно! Необходимо прояснить по поводу видов синхросигналов в цепях последовательностных устройств. По "фронту синхросигнала" либо по "переднему фронту" значит, что схема записывает данные при переходе синхросигнала из низкого уровня в состояние лог. "1". По "заднему фронту" или "спадающем фронту" синхросигнала значит, что схема будет срабатывать и осуществлять запись данных в цепях при переходе синхросигнала из высокого уровня в состоянии низкого уровня. В период этого перехода происходит обработка данных. На рисунке 3.16 показано обозначение этих самых динамических входов по "фронту" и по "спаду" для ANSI и ЕСКД (а), Logisim Evoluion(б).

    (рис 3.16)

    В лабораторной работе 2 необходимо выполнить проектирование двухступенчатого D-триггера.

    Свойство непрозрачности МS-триггера использовано для построения интересного и широко применяемого JК-триггера, схема которого показана на рисунке 3.17. JK-триггер является наиболее используемым из всех конструкций триггеров и считается универсальной схемой триггера.

    Схема JK-триггера похожа на SR, а его последовательная работа точно такая же. Разница в том, что JK-триггер не имеет недействительных или запрещенных входных состояний как SR, даже когда на оба входа подается управляющий сигнал.

    JК-триггер - это непрозрачный триггер, выходы которого петлями инвертирующих обратных связей (накрест) заведены на элементы 1 и 2 (2И-НЕ). Из-за данных связей система моделирования Logisim Evolution не может смоделировать JK-триггер на дискретных комбинационных элементах.

    При J=К=0 С-сигнал не может открыть входные элементы 1 и 2, и триггер находится в режиме хранения. При J=1, К=0 синхросигналом может быть открыт лишь элемент 1 и только при условии, что перед поступлением С-сигнала на выходе триггера был 0 (Q=0, $$\bar Q=1$$). Тогда по спаду синхросигнала триггер переключится в 1. Если же триггер до синхросигнала был в 1, то он так и останется в этом состоянии. Таким образом, J-вход выполняет функции синхронизированного S-входа. В силу симметрии схемы легко показать, что К-вход выполняет функции синхронизированного R-входа, переводя триггер в сброшенное состояние. Таким образом, при разноименных уровнях на J и К-входах JК-триггер ведет себя как синхронный непрозрачный RS-триггер. При сигнале на J=K=1 поведение JК-триггера сильно отличается от SR. При любом состоянии триггера обратные связи при поступлении С-сигнала откроют тот элемент И-НЕ, который переведет триггер в противоположное состояние. Таким образом при J=K=1 триггер переключается в противоположное состояние. Данный режим называется счетным или T (toggle - кувыркаться), а работающий в таком режиме триггер называется Т-триггером.

    (рис 3.17)

    В таблице 3.4 приведена таблица истинности (работы) JK- триггера.

    C J K Q(T) Q(t+1) Пояснения
    0 X X 0 0 Режим хранения
    0 X X 1 1
    1 0 0 0 0
    1 0 0 1 1
    1 0 1 0 1 Режим сброса
    1 0 1 1 1
    1 1 0 0 0 Режим установки
    1 1 0 1 0
    1 1 1 0 1 J=K=1, счетный режим
    1 1 1 1 0

    На рисунке 3.18а приведено условно-графическое обозначение синхронного JK-триггера в ANSI, а на рисунке 3.18б в ЕСКД.

    (рис 3.18)

    Т-триггер представляет собой триггер, у которого отсутствуют сигналы J и К, а тактирование осуществляется по счётному входу Т. Синхронный Т триггер объединяет для счетного входа J и K. Вход C остается включенным так, как показано на рисунке 3.17. Т-триггер в силу особенностей обратных связей в среде невозможно смоделировать на дискретных элементах Logisim Evolution.

    В таблице 3.5 приведена таблица истинности для синхронного Т триггера.

    C T Q(t) Q(t+1) Пояснения
    0 X 0 0 Режим хранения
    0 X 1 1
    1 0 0 0
    1 0 1 1
    1 1 0 1 Режим установки
    1 1 1 0 Режим сброса

    На рисунке 3.19а приведено условно-графическое обозначение синхронного T-триггера в ANSI, а на рисунке 3.19б в ЕСКД.

    (рис 3.19)

    Триггеры могут быть взаимозаменяемыми при изменении схемы включения и добавления элементов комбинационной логики. Решение задачи взаимозаменяемости триггеров осуществляется в практической работе 3.

    В среде Logisim Evolution в разделе "Память" находятся синхронные триггеры. Разработчики обеспечили защиту виртуальных элементов от неверного срабатывания, например, "гонки сигналов".

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

  • "Передний фронт" - по фронту синхросигнала;
  • "Задний фронт" - по спаду синхросигнала;
  • "Высокий уровень" - статический вход управления лог. "1";
  • "Низкий уровень" - статический вход управления лог. "0".
  • Вид триггера Условно-графическое обозначение Назначение сигналов
    Синхронный D-триггер

    1 - синхронный D вход;

    2 - вход синхронизации (С);

    3 - асинхронный вход S;

    4 - асинхронный вход R;

    5 - прямой выход Q;

    6 - инверсный выход Q.

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

    1 - синхронный T вход;

    2 - вход синхронизации (С);

    3 - асинхронный вход S;

    4 - асинхронный вход R;

    5 - прямой выход Q;

    6 - инверсный выход Q.

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

    1 - синхронный J вход;

    1 - синхронный K вход;

    3 - вход синхронизации (С);

    4 - асинхронный вход S;

    5 - асинхронный вход R;

    6 - прямой выход Q;

    7 - инверсный выход Q.

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

    1 - синхронный J вход;

    2 - синхронный K вход;

    3 - вход синхронизации (С);

    4 - асинхронный вход S;

    5 - асинхронный вход R;

    6 - прямой выход Q;

    7 - инверсный выход Q.

    Лабораторная работа 3. "Двухступенчатого триггера"

    Целю лабораторной работы является:

  • Закрепление навыков работы с триггерами путем реализации двухступенчатого триггер DV.
  • Получение навыков работы с инструментом симуляции "Хронограмма".
  • В среде Logisim Evolution создать новый файл и сохранить его под именем DV. Построить схему, приведенную на рисунке 3.20. На элементах D3, D4 реализован ведущий RS триггер. Элементы D1, D2 образуют комбинационную схему, реализующую функцию синхронизации и работы линии D. На элементах D5-D8 реализован синхронный SR-триггер. Его синхронизация осуществляется в противофазе входному сигналу С за счет включения в линию инвертора D9.

    (рис 3.20)

    Попеременно подавая сигналы на входы D и С, необходимо убедится в работоспособности собранной схемы.

    Для работы с инструментом "Хронограмма7quot; подключить элемент "выход" к линиям S и R и выходу инвертора D9 (рисунок 3.21).

    (рис 3.21)

    Далее вызвать перейти в меню "Моделировать" - "Запись в журнал". Во вкладке "Options" в секции "Logging Mode" выбрать "Clocked mode". В открывшемся диалоговом окне, аналогичному приведенному на рисунке 3.12 выбрать в качестве синхронизируемого входа - С. В выпадающем списке "Time scale" задать "1.0 s". В списке "Clock Discipline" выбрать "capture on both edges". В меню "Моделировать" тактовая частота задать 2 Гц и выбрать такты включены. Перейти во вкладку "Хронограмма" (рисунок 3.22). В меню быстрого доступа нажать на кнопку "Запускайте симулятор непрерывно" (выделена на рисунке областью красного цвета).

    (рис 3.22)

    На рисунке 3.23 приведена диаграмма работы триггера. На ней можно видеть режимы сброса триггера при включении, переходы в период смены сигнала на входе.

    (рис 3.23)

    Для обеспечения стабильной работы триггера защелки на высоких частотах разработчики могут вводить дополнительный вход управления записью - стробирование, именуемый V. Видоизменим схему, добавив еще один вход элементам D1 и D3. Вход V объединяется у элементов D1 и D2 (рисунок 3.24).

    (рис 3.24)

    Самостоятельно

  • Реализовать схему двухступенчатого синхронного D-триггера с запрещающими связями (рисунок 3.25).
  • Получить для него временную диаграмму, используя инструмент "Хронограмма".
  • Дать описание его работы.
  • Определить отличие в работе от D-триггера, описанного выше.
  • (рис 3.25)

    В среде Quartus на языке Verilog HDL требуется создать два вида двухтактных триггеров и разработать тесты. В листинге 3.1 приведен код для двухтактной защелки, которая управляется уровнем сигнала на входе clk.

    module latch_MS (input clk,D, output reg Q);
    reg c; \\ регистровая переменная с
    always @(*)
    if (clk) \\если на входе лог. 1
    		c=D; \\присвоить переменной значение с D
    always @(*) \\анализируем уход лог 1 с входа d
    	if (~clk) 
    		Q=c; \\выходу Q присвоить содержимое с 
    Endmodule
    

    На рисунке 3.26 представлен вид RTL для данного листинга.

    (рис 3.26)

    В листинге 3.2 приведен код двухтактного триггера, анализирующего перепад за счет ввода ключевых слов, анализирующих сигнал posedge - по фронту сигнала, negedge - по спаду. Также присваивание = заменено на <=, что будет более правильным вариантом записи, исключающим "гонку сигналов".

    module latch_MS1 (input clk, D, output reg Q);
        reg master;               // переменная ведущего триггера
        reg slave;                // переменная подчиненного триггера
        // проверяем возникновение фронта сигнала clk
        always @(posedge clk) begin
            master <= D;          // Capture data on the rising edge of the clock
        end
    
        // проверяем изменение синхронизации на спад
        always @(negedge clk) begin
            slave <= master;      // передача данных между регистровыми переменными
        end
    
        // анализируем изменения сигналов
        always @(*) begin
            Q = slave;            // выходу присваивается содержимое ведомого триггера
        end
    endmodule
    

    На рисунке 3.27 представлен вид RTL для листинга 3.2.

    (рис 3.27)

    В листинге 3.3 приведено содержимое файла testbench.v для двухтактного синхронного триггера.

    module testbench;
        reg D;   // вход D
        reg clk; // синхровход clk
        wire Q;  // Выход Q
        // привязка линий триггера
        latch_MS1 uut (
            .D(D),
            .clk(clk),
            .Q(Q)
        );
        // генерация сигнала
        initial begin
            clk = 0;
            forever #5 clk = ~clk; // цикл синхросигналов
        end
            initial begin
            // Начальное состояние на линии D
            D = 0;
            // задержка 
            #10;
            // тестирование такта 1
            D = 1;         
            #10; // период ожидание
            $display("D=%b, Q=%b", D, Q); // Check outputs
            // тестирование такта 2
            D = 0;
            #10; 
            $display("D=%b, Q=%b", D, Q); 
            // тестирование такта 3
            D = 1;         
            #10; 
            $display("D=%b, Q=%b", D, Q); 
            // тестирование  такта 4 состояния итог
            D = 0;
            #10;
            $display("D=%b, Q=%b", D, Q); 
            // окончание симуляции
            $stop; 
        end
    endmodule
    

    На рисунке 3.28 приведена диаграмма тестирования синхронного триггера.

    (рис 3.28)

    Самостоятельно

  • Добавить описание инверсного выхода триггера - Qn.
  • Добавить дополнительно вход управления V.
  • Разработать код теста с учетом добавленных сигналов. Выполнить симуляцию.
  • Практическая работа 3. "Замещение триггеров"

    На рисунке 3.29 приведен вариант реализации синхронного SR-триггера на D-триггере.

    (рис 3.29)

    Ниже на рисунке 3.30 показана временная диаграмма работы триггера, с использованием инструмента "Хронограмма". Диаграмма реализована на частоте 1Гц. (во вкладке "Options" качестве "Clock Source" задан вход С). По данной диаграмме проводится сверка с диаграммой работы для синхронного SR-триггера Logisim Evolution. Далее проверятся условие перехода триггера из индивидуального задания в запрещенное состояние.

    (рис 3.30)

    Задание выполняется по варианту из таблицы 3.7

    № варианта Создаваемые синхронные триггеры Базовый триггер Срабатывание базового триггера
    1,7,13,19 JK, T D Передний фронт
    2,8,14,20 JK, T D Задний фронт
    3,9,15,21 D, T SR Передний фронт
    4,10,16,22 D, TC SR Задний фронт
    5,11,17,23 SR, T JK Передний фронт
    6,12,18,24 SR, T JK Задний фронт

    В таблице 3.8 приведено структурное описание на языке Verilog HDL SR-триггера, также приведен его тест.

    Необходимо реализовать структурное описание JK-триггера на языке Verilog HDL и разработать тестовое окружение.

    Описание триггера Тестовое окружение триггера
    module sr_latch (
        input wire S,  //установка (Set)
        input wire R,  //сброс (Reset)
        output wire Q, //выход Q
        output wire Qn //выход Qn (инверсный)
    );
        wire n1, n2; //внутренние соединения
        // первый NAND элемент
        nand (n1, S, Qn);
        // второй NAND элемент
        nand (n2, R, Q);
        assign Q = n1; //выход Q
        assign Qn = n2; //выход Qn
    endmodule
    
    module testbench;
        reg S;  //установка
        reg R;  //сброс
        wire Q;  //выход Q
        wire Qn; //выход Qn
        // связывание SR-триггера
        sr_latch uut (
            .S(S),
            .R(R),
            .Q(Q),
            .Qn(Qn)
        );
        initial begin
            // Инициализация
            S = 0; 
            R = 0;
            // тестовые сигналы
            #10 S = 1; R = 0; // установить триггер //в 1
            #10 S = 0; R = 1; // сбросить триггер в //0
            #10 S = 0; R = 0; // хранение 
            #10 S = 1; R = 0; //установить Q в 1 снова
            #10 S = 0; R = 1; //сбросить Q в 0
    
            $finish; //завершить симуляцию
        end
        // вывод состояний
        initial begin
            $monitor("Time: %0t | S = %b, R = %b | Q = %b, Qn = %b", $time, S, R, Q, Qn);
        end
    endmodule
    

    Результат симуляции представлен на рисунке 3.31.

    (рис 3.31)

    Дать ответы на следующие вопросы:

  • В чем отличие синхронного триггера от асинхронного?
  • Что такое запрещенное состояние, как можно избавиться от запрещенного состояния в асинхронном триггере?
  • Какие входы синхронные или асинхронные имеют приоритет и почему (пояснить на схеме двухтактного триггера)?
  • Для чего в D триггер вводится сигнал V?
  • Приложение А

    Для преодоления метастабильности можно увеличить времени на установку (setup time), путем задания задержки входного сигнала.

    Для реализации необходимо создать описание D-триггера (листинг 3.4).

    module D_dff (
        input wire D,
        input wire clk,
        input wire reset,
        output reg Q
    );
        reg D_reg;
        always @(posedge clk or posedge reset) begin
            if (reset) begin
                D_reg <= 0;
            end else begin
                D_reg <= D;  
            end
        end
        always @(posedge clk or posedge reset) begin
            if (reset) begin
                Q <= 0;
            end else begin
                Q <= D_reg;  
            end
        end
    endmodule 
    

    Далее создается файл, выполняющий задержку распространения сигнала (листинг 3.5).

    module D_meta(
        input wire clk,
        input wire D,
        output wire Q
    );
        reg D_stable;
            // Задержка входного сигнала D
        always @(posedge clk) begin
            // Обновление только если clk высокий достаточно долго
            D_stable <= D; 
        end
        // подключение D-триггера
        D_dff (
            .D(D_stable),
            .clk(clk),
            .reset(1'b0), 
            .Q(Q)
        );
    Endmodule
    

    На рисунке 3.32 приведено RTL представление полученного триггера.

    (рис 3.32)

    Для создания схемы преодоления метастабильности с применением нескольких триггеров создадим базовый D-триггер (листинг 3.4) и файл верхнего уровня, приведенный в листинге 3.6

    module D_meta (
        input wire D,
        input wire clk,
        output wire Q
    );
        wire D_intermediate;
        // Первый триггер
        D_dff first_ff(
            .D(D),
            .clk(clk),
            .reset(1'b0),
            .Q(D_intermediate)
        );
        // Второй триггер
        D_dff second_ff (
            .D(D_intermediate),
            .clk(clk),
            .reset(1'b0),
            .Q(Q)
        );
    Endmodule
    

    На рисунке 3.33 приведено RTL представление полученного триггера.

    (рис 3.33)

    Дополнительная литература

  • Микушин А.В. Цифровые устройства и микропроцессоры: учебн. пособие. - СПб.: БХВ-Петербург, 2010 - 832 с.: ил. (С. 107 - 117).
  • Угрюмов Е.П. Цифровая схемотехника: учеб. пособие для вузов. - 2-е изд., перераб. и доп. СПб.: БХВ-Петербург, 2007. - 800 с.: ил. (С. 179 -194).
  • С. Харрис, Д. Харрис. Цифровая схемотехника и архитектура компьютера RISC-V/ пер. с англ. В.С. Яценкова, А.Ю. Романова; под. ред. А.Ю. Романова.-М.: ДМК Пресс, 2021. - 810 с.: ил. (С. 151-154)
  • Неизвестное об известном, или что такое метастабильность триггеров
  • Еще о метастабильности
  • Вернуться к учебному плану