8.4. Триггеры и схемы с памятью
Как схема запоминает бит: RS-защёлка из двух вентилей и борьба с дребезгом кнопок; защёлки, двухступенчатые и фронтовые D- и JK-триггеры, окно установления и удержания, делители частоты и пульсирующие счётчики; синхронные автоматы, их запрещённые состояния и диаграммы переходов; синхронизаторы асинхронных сигналов, гонки и короткие ложные импульсы.
8.4.1Устройства с памятью: триггеры
- Пара вентилей И-НЕВентиль И-НЕ: на выходе низкий уровень, только когда все входы высокие. В КМОП — n-канальные ключи последовательно, p-канальные параллельно., замкнутых друг на друга крест-накрест, может стоять в одном из двух устойчивых положений — это ячейка на один бит.
- Кратковременный НИЗКИЙ уровень на записывает , на — стирает в ; пока оба входа ВЫСОКИЕ, бит хранится.
- Кнопка или тумблер с перекидным контактом, подключённые к такой защёлке, дают выход совсем без дребезгаМногократное замыкание и размыкание механических контактов в течение ~1 мс после переключения — от 10 до 100 «отскоков»..
- Активировать S и R одновременно нельзя: пока они активны, выходы перестают быть взаимно инверсными, а после снятия результат случаен.
До сих пор наши схемы ничего не помнили. Выход шифратора, сумматора или мультиплексораМультиплексор — набор ключей с дешифратором: по двоичному адресу соединяет с выходом один из нескольких входов. зависел только от того, что подано на входы прямо сейчас: убрали входной код — пропал и результат. Такая логика называется комбинационной. Но посмотрите на самые обычные устройства вокруг: пульт телевизора помнит выбранный канал, счётчик воды накапливает литры, стиральная машина знает, что после стирки идёт полоскание. Всем им нужен элемент, который сохраняет результат после того, как причина исчезла. С появлением памяти схемы начинают считать, сдвигать данные, проходить по шагам программы. Простейшая ячейка памяти называется триггеромЭлемент памяти на один бит с двумя устойчивыми состояниями (бистабильный мультивибратор)., и собрать её можно всего из двух вентилей.
Два устойчивых состояния
Возьмём два вентиля И-НЕ и подадим выход каждого на один из входов другого (схема ниже). Свободные входы и пока держим ВЫСОКИМИ. Что окажется на выходах и ?
Попробуем угадать. Допустим, . Тогда у нижнего вентиля ВЫСОКИЕ оба входа (и , и ), и его выход равен Н. Этот НИЗКИЙ приходит на верхний вентиль, а у И-НЕ достаточно одного НИЗКОГО входа, чтобы на выходе была единица, то есть . Предположение подтвердилось само. Но схема симметрична, и точно так же проходит проверку и противоположный вариант: , . А вот вариантов «оба В» и «оба Н» при ВЫСОКИХ и быть не может: каждый из них сразу противоречит работе вентилей.
Итак, у схемы два равноправных устойчивых состояния, её называют бистабильной. Какое из них установлено, зависит от того, что с ней происходило раньше. Это и есть память. Записать в неё значение очень просто: достаточно на мгновение опустить один из свободных входов. Короткий НИЗКИЙ импульс на заставляет верхний вентиль выдать единицу, и после импульса схема остаётся в состоянии , , откуда бы она ни начинала. Импульс на точно так же даёт противоположное состояние.
Что здесь что (3)
- Верхний И-НЕ. НИЗКИЙ уровень на его свободном входе поднимает — запись единицы
- Нижний И-НЕ. НИЗКИЙ уровень на поднимает , то есть записывает ноль
- Перекрёстные связи. каждый вентиль держит другой: пока оба свободных входа ВЫСОКИЕ, состояние подпитывает само себя
| (A) | (B) | X (Q) | Y () | Что происходит |
|---|---|---|---|---|
| В | В | бит хранится | ||
| Н | В | В | Н | запись 1 (установка) |
| В | Н | Н | В | запись 0 (сброс) |
| Н | Н | В | В | недопустимо: оба выхода В, после одновременного отпускания — случайный результат |
Кнопка, которая «стреляет очередью»
Вот практическая задача, ради которой защёлки ставят на каждой второй плате. Есть поток тактовых импульсов и вентиль И-НЕ, который должен пропускать их на счётчик, пока тумблер разомкнут, и задерживать, когда он замкнут (схема ниже). Тумблер включён между входом вентиля и землёй, а вход подтянут резистором к +5 В.
Почему тумблер замыкает именно на землю, а не на питание? Тому две причины. Первая связана с биполярной ТТЛТранзисторно-транзисторная логика: биполярное семейство, питание +5 В, порог ≈1,3 В, заметный ток покоя. Серии LS, ALS, AS, F.: в НИЗКОМ состоянии из её входа вытекает заметный ток (у серии LS около 0,25 мА), который кто-то должен отвести, а в ВЫСОКОМ состоянии входной ток почти нулевой, так что подтягивающему резистору делать почти нечего. Вторая причина чисто монтажная: земля обычно доступна везде, и все кнопки и переключатели на панели удобно сажать на один общий провод.
Беда в другом. Механический контакт не замыкается одним чистым движением: в первые примерно 1 мс пластины успевают удариться и разойтись, как правило, от 10 до 100 раз. Для человека это мгновение, а для логики со временем переключения в наносекунды это целая серия отдельных включений и выключений. Вместо одного аккуратного перехода на выходе вентиля проскакивают куски тактовой последовательности (временная диаграмма ниже). Если дальше стоит счётчик или сдвиговый регистрСдвиговый регистр, на вход которого заведена сумма по модулю 2 нескольких разрядов, выдаёт псевдослучайную последовательность длиной до тактов — это цифровой генератор шума., он сосчитает каждый такой кусок.
Лекарство — переключатель с перекидным контактом (однополюсный на два направления) и та же RS-защёлка (схема ниже). Подвижный контакт заземлён, а два неподвижных подведены к входам и , каждый через свой подтягивающий резистор к питанию. Перекидываем рычаг в положение B: в момент самого первого касания становится НИЗКИМ, и защёлка сбрасывается. Затем контакт отскакивает, и на это время оба входа ВЫСОКИЕ, то есть защёлка просто хранит записанный ноль. Новое касание того же контакта B снова требует сброса, которого уже нечего менять. Чтобы что-то изменилось, подвижный контакт должен коснуться A, а для этого ему нужно пролететь весь зазор. От отскока на такое расстояние он не улетает.
Итог: один переход на выходе на одно переключение, сколько бы раз контакт ни подпрыгнул. Схема настолько распространена, что выпускается готовая микросхема '279 с четырьмя RS-защёлками именно для этой работы. Если же в устройстве есть микроконтроллер, ту же задачу часто решают программно: читают вывод с паузой в несколько миллисекунд. Аппаратная защёлка хороша тем, что срабатывает мгновенно и программе о ней думать не нужно.
Что здесь что (4)
- Перекидной контакт. общий вывод на земле; отскочив от B, контакт повисает в воздухе, но до A не достаёт
- Подтягивающие резисторы. пока контакт не касается входа, держат его ВЫСОКИМ: «висящий» контакт означает хранение
- Защёлка на И-НЕ. первое касание B сбрасывает её, следующие касания того же контакта ничего не меняют
- Выход Q. ровно один перепад на одно переключение
Входы и защёлки на И-НЕ управляются двумя выводами микроконтроллера. Пока контроллер стартует после сброса, оба вывода стоят НИЗКИМИ, а потом программа одной командой записи в порт поднимает их одновременно. В каком состоянии окажется защёлка?
Решение
Пока , у каждого вентиля И-НЕ есть НИЗКИЙ вход, и оба выдают единицу: , выходы перестали быть взаимно инверсными. Когда оба входа поднимаются одновременно, каждый вентиль видит на втором входе единицу от соседа и начинает опускать свой выход. Кто опустит первым, тот и выиграет; это решают разброс задержек и шумы. Возможно даже короткое «дрожание» или метастабильноеНеустойчивое промежуточное состояние триггера, когда данные изменились внутри окна установления — удержания: триггер какое-то время «не может решить», в какое состояние перейти. зависание, но в итоге защёлка остановится в одном из двух состояний, и какое это будет, предсказать нельзя. Отсюда правило: не делать S и R активными одновременно, а если без этого не обойтись, строить схему так, чтобы её работа от исхода не зависела. В этом примере достаточно в программе сначала поднять один вывод, а потом другой.
Защёлка на ИЛИ-НЕ и флаги с несколькими входами
Ту же перекрёстную связь можно собрать на вентилях ИЛИ-НЕВентиль ИЛИ-НЕ: на выходе низкий уровень, если высокий хотя бы один вход. В КМОП — n-канальные ключи параллельно, p-канальные последовательно. (схема ниже). Логика у неё зеркальная: активен ВЫСОКИЙ уровень, и единица на любом входе вентиля опускает его выход. Если взять вентили с тремя входами, у каждой половины остаются по два свободных входа. Так получается удобный флаг, который поднимают несколько разных причин и опускают несколько разных команд. Пример: блок защиты зарядного устройства. Флаг ЗАЩИТА взводится по сигналу ПЕРЕГРЕВ от компаратораКомпаратор — схема, которая сравнивает два напряжения и выдаёт логический ответ, какое больше. температуры или по сигналу ПЕРЕГРУЗ от датчика тока и остаётся взведённым, даже когда перегрев прошёл. Снять его может кнопка на панели или команда от микроконтроллера. Подтягивающие резисторы здесь не нужны: все входы приходят с активных логических выходов, а не с механических контактов.
| Защёлка на И-НЕ | Защёлка на ИЛИ-НЕ | |
|---|---|---|
| Каким уровнем управляется | НИЗКИМ | ВЫСОКИМ |
| Бит хранится, когда | оба входа ВЫСОКИЕ | все входы НИЗКИЕ |
| Недопустимое сочетание | оба входа НИЗКИЕ, при этом оба выхода В | S и R ВЫСОКИЕ, при этом оба выхода Н |
8.4.2Тактируемые триггеры
- Тактируемый триггер смотрит на информационные входы (D или J и K) и меняет выход только по команде тактового входа.
- Защёлка пропускает вход на выход всё время, пока такт активен; двухступенчатый и фронтовой триггеры реагируют только на перепад такта.
- Данные должны стоять неизменно не меньше до перепада и после него, иначе триггер может зависнуть в метастабильном состоянии.
- Триггер в счётном режимеРежим, в котором триггер переключается на каждом такте (JK при J = K = 1, D при D = ) — делитель частоты на 2. делит частоту пополам; цепочка из таких триггеров даёт асинхронный счётчикПульсирующий счётчик: выход каждого триггера тактирует следующий, поэтому разряды меняются не одновременно и возникают ложные коды. на , но с ложными кодами в моменты переходов.
Защёлки из предыдущего пункта называют RS-триггерами (S от set, «установить», R от reset, «сбросить») или асинхронными триггерами. Слово «асинхронный» здесь означает, что выход реагирует на вход сразу, в любой момент, без всякого разрешения.
Для кнопок это то, что нужно. Но в большой цифровой системе удобнее, когда все ячейки памяти меняются в известные моменты, по общей команде. Поэтому основная рабочая лошадка цифровой техники устроена иначе: у неё один или два информационных входа, которые сообщают, что записать, и отдельный тактовый вход, который говорит, когда. Пока такта нет, информационные входы могут меняться как угодно, выход их не замечает. В момент такта триггер смотрит на них и решает: изменить состояние или оставить прежнее.
Начнём с простейшего варианта (схема ниже). К знакомой защёлке на И-НЕ добавлены спереди ещё два вентиля И-НЕ, которые работают как ворота: пока ТАКТ НИЗКИЙ, их выходы ВЫСОКИЕ при любых S и R, и защёлка хранит бит. Когда ТАКТ поднимается, ворота открываются, и S и R (теперь уже активные ВЫСОКИМ уровнем) доходят до защёлки. Работу описывает таблица, где — состояние до такта, а — после него:
| S | R | |
|---|---|---|
| 0 | 0 | |
| 1 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 1 | неопределённо |
Шаг вперёд очевиден: S и R перестали действовать сами по себе, теперь важно, что на них стоит, пока такт разрешает запись. Но присмотритесь к слову «пока». Выход повторяет все движения S и R на протяжении всей единицы такта, а не в какой-то один момент. Если за это время S успеет подняться и опуститься, триггер всё это отработает. Такую схему называют прозрачной защёлкойТактируемый триггер, выход которого повторяет вход всё время, пока такт активен; при неактивном такте хранит последнее значение. (по-английски latch): пока такт активен, она прозрачна, как стекло, и вход виден на выходе насквозь.
У прозрачности есть простое следствие: защёлку нельзя замкнуть саму на себя. Подайте её выход через инвертор обратно на вход, и при открытом такте она начнёт переключаться без остановки, сколько успеет. Чтобы построить счётчик или регистр сдвигаРегистр сдвига — цепочка D-триггеров с общим тактом (выход каждого — на вход следующего): по каждому фронту слово сдвигается на один разряд., нужен триггер, который фиксирует вход в одно мгновение и сразу закрывается. Таких конструкций две: двухступенчатый триггер (схема «ведущий — ведомый») и триггер, запускаемый фронтом. Временная диаграмма ниже показывает разницу.
Как поймать одно мгновение: «ведущий — ведомый» и фронтовой триггер
Именно эти два типа встречаются на практике чаще всего. У обоих выход на очередной такт определяется тем, что было на информационных входах ровно в момент перепада тактового сигнала. Готовые триггеры стоят копейки и самому их собирать не приходится, но понимать, что внутри, полезно: это объясняет и их временные ограничения. Возьмём D-триггер, у которого единственный информационный вход D: какой уровень стоит на D в момент перепада, такой и окажется на выходе Q.
Двухступенчатую схему (рисунок ниже) проще всего представить как шлюз на канале с двумя воротами, которые никогда не открываются одновременно. Это две прозрачные защёлки подряд, а такт на вторую подаётся через инвертор. Пока такт ВЫСОКИЙ, первая (ведущая) защёлка открыта и следит за D, а вторая (ведомая) закрыта и держит старое значение на выходе. Когда такт падает, ведущая закрывается, запоминая последнее значение D, а ведомая открывается и переписывает его к себе.
- ТАКТ ВЫСОКИЙведущая ступень прозрачна: её внутренний выход повторяет . Ведомая заперта и показывает на выходе прежнее значение.
- ТАКТ падаетведущая ступень запирается и фиксирует D; в ту же наносекунду открывается ведомая и копирует состояние ведущей на выход Q.
- ТАКТ НИЗКИЙвыход не может измениться: ведущая ступень, единственный путь от D, закрыта.
- ТАКТ снова поднимаетсяведомая запирается с новым значением, ведущая опять начинает следить за входом.
В результате данные попадают на выход только по спаду такта, и сквозного пути от D к Q не бывает никогда: в каждый момент одна из двух дверей заперта.
Фронтовой триггер снаружи неотличим от двухступенчатого: тоже берёт данные в момент перепада. Внутри у него другая схема, три пары перекрёстно связанных вентилей; так устроен, например, классический D-триггер '74, который срабатывает по нарастающему перепаду. Попробуйте сами нарисовать его по справочнику и проследить, почему изменения D после фронта до выхода не доходят. Это хорошая тренировка в чтении логических схем.
Что здесь что (4)
- Ведущая защёлка. открыта, пока ТАКТ ВЫСОКИЙ, и всё это время следит за D
- Ведомая защёлка. открыта, пока ТАКТ НИЗКИЙ, и копирует то, что запомнила ведущая
- Инвертор такта. из-за него защёлки открыты по очереди и никогда вместе
- Выход Q. обновляется только в момент спада такта
Среди выпускаемых триггеров есть и срабатывающие по нарастанию такта, и по спаду. Почти у всех предусмотрены ещё асинхронные входы установки S и сброса R. Они действуют в обход такта, сразу, как у простой защёлки, и нужны, например, чтобы при включении питания привести схему в известное состояние. Активный уровень у них бывает и НИЗКИЙ, и ВЫСОКИЙ, в зависимости от серии. На условных обозначениях (рисунок ниже) треугольник у тактового входа означает «срабатывает по перепаду», а кружок означает инверсию: кружок перед треугольником значит «по спаду», кружок на S или R значит «активен НИЗКИЙ уровень».
Три типа, которые встречаются особенно часто:
- '74 — два D-триггера в корпусе, срабатывают по нарастанию такта, асинхронные S̅ и R̅ активны НИЗКИМ уровнем;
- 4013 — два КМОПКМОП — комплементарные МОП-транзисторы: n- и p-канальные приборы на одном кристалле. Основа почти всей цифровой логики и аналоговых ключей. D-триггера, тоже по нарастанию, но S и R у них активны ВЫСОКИМ уровнем;
- '112 — два JK-триггера, срабатывают по спаду такта, S̅ и R̅ активны НИЗКИМ уровнем.
Что здесь что (5)
- Треугольник у входа C. вход динамический: важен момент перепада такта, а не его уровень
- Кружок на S. асинхронная установка активна НИЗКИМ уровнем () и работает без всякого такта
- S и R без кружков (4013). у этой КМОП-микросхемы установка и сброс активны ВЫСОКИМ уровнем; если не нужны — на землю
- Кружок у входа C ('112). такт инвертирован: JK-триггер срабатывает по спаду
- Выход с кружком. инверсный выход
JK-триггер
Тактируется JK-триггер так же, как D-триггер, но информационных входов у него два, J и K. Удобно читать их как «включить» и «выключить», а таблица ниже объясняет, что происходит при каждом сочетании:
| J | K | Что делает такт | |
|---|---|---|---|
| 0 | 0 | ничего, бит хранится | |
| 0 | 1 | 0 | сбрасывает |
| 1 | 0 | 1 | устанавливает |
| 1 | 1 | переворачивает состояние (счётный режим) |
Когда J и K разные, триггер после такта принимает значение J, как D-триггер с данными на J. Когда оба нулевые, такт его не трогает. А при двух единицах, в отличие от RS-триггера, ничего недопустимого не происходит: каждый такт меняет состояние на противоположное. Этот режим называют счётным, и на нём построены делители частоты.
Ловушка единиц у старых двухступенчатых JK-триггеров. Некоторые давние модели запоминают кратковременную помеху. Пока такт держит ведущую ступень открытой, достаточно, чтобы J (или K) на мгновение поднялся и снова опустился: ведущая ступень уже перебросилась и обратно сама не вернётся. По перепаду триггер выдаст на выход это ложное состояние, хотя в момент перепада входы требовали оставить всё как было. В справочных данных об этом обычно не пишут, поэтому эффект удивляет тех, кто о нём не знает. Происхождение у него историческое: такие триггеры рассчитывали на очень узкий тактовый импульс, а реальный такт имеет конечную ширину. Если в старой схеме попался такой триггер, будьте осторожны, а в новой схеме проще взять настоящий фронтовой JK-триггер: '112 (по спаду) или '109 (по нарастанию). Оба сдвоенные, с асинхронными S̅ и R̅, активными НИЗКИМ уровнем.
У '109 есть приятная особенность: его второй вход инверсный, вместо K. Поэтому, соединив J и вместе, получаем готовый D-триггер без внешнего инвертора, а заземлив и подав единицу на J, получаем счётный режим.
Деление частоты на 2
Счётный режим сразу даёт делитель частоты пополам (рисунок ниже). Вариантов два:
- JK-триггер, у которого J и K постоянно ВЫСОКИЕ, переворачивается на каждом такте;
- D-триггер, у которого вход D соединён с собственным инверсным выходом , к каждому перепаду получает на D противоположность своего текущего состояния и потому тоже переворачивается.
Когда триггер «смотрит» на вход: установление и удержание
В делителе на D-триггере (вариант «б» выше) скрыт вопрос с подвохом. Такт поднялся, триггер переключился, и сразу же, через считанные наносекунды, поменялся , а с ним и D. Не путает ли это триггер? Ведь вход изменился почти в тот самый момент, когда его нужно было прочитать.
Чтобы ответить, нужно знать, что такое на самом деле «момент перепада». Он не бесконечно короткий: у любого тактируемого элемента в справочнике указаны два интервала. Время установленияВремя установления — время, после которого выход входит в заданную окрестность конечного значения (±1 %, ±0,1 %) и больше её не покидает. — сколько данные должны простоять неизменными до тактового перепада. Время удержания — сколько они должны оставаться неизменными после него (временная диаграмма ниже). Для 74HC74 это 20 нс и 3 нс соответственно. Вместе они образуют окно, в котором D трогать нельзя.
Теперь проверим делитель. Установление: новое значение должно появиться на D не позже чем за 20 нс до следующего фронта, то есть такты не должны идти слишком часто. Удержание: здесь и кроется кажущийся подвох, но расчёт его снимает. Даже самый быстрый экземпляр 74HC74 меняет выход не раньше чем через 10 нс после фронта, значит, D гарантированно стоит неизменным 10 нс, а нужно всего 3. Запас 7 нс. В современных сериях эта проблема чаще всего вообще не возникает: время удержания у них нулевое.
Частоту кварцевого генератора синтезатора нужно поделить пополам D-триггером, включённым по схеме . По справочнику задержка от такта до выхода у этого триггера лежит в пределах 8–18 нс, время установления 12 нс, время удержания 4 нс. До какой частоты генератора делитель гарантированно работает? Не нарушается ли удержание?
Решение
После фронта новый уровень доходит до D через задержку триггера, в худшем случае 18 нс. Потом он должен простоять на входе время установления, 12 нс, и только тогда может прийти следующий фронт: нс, МГц.
С удержанием считаем наоборот, по самому быстрому экземпляру: D начнёт меняться не раньше чем через 8 нс после фронта, а неподвижность требуется 4 нс. Запас 4 нс, всё в порядке. Обратите внимание: для проверки установления берут наибольшую задержку, а для проверки удержания наименьшую. Поэтому в хорошем справочнике приводят обе границы.
Деление на 4, 8, 16…: пульсирующий счётчик
Если один счётный триггер делит на 2, то два подряд делят на 4, три на 8, а штук на . Достаточно подать выход каждого триггера на тактовый вход следующего (схема ниже). Такую цепочку называют двоичным счётчиком, и вот почему: прочитайте выходы как двоичное число. После каждого входного импульса оно увеличивается на единицу: 0, 1, 2 … 15, а затем снова 0. Младший разряд (МЗРМЗР — младший значащий разряд: самый мелкий шаг преобразователя, . Погрешности ЦАП и АЦП меряют в долях МЗР.) — , старший (СЗРСЗР — старший значащий разряд: его вес — половина шкалы преобразователя.) — , а на выходе получается меандр с частотой в 16 раз ниже входной.
Одна деталь: следующий разряд должен переключаться в тот момент, когда предыдущий переходит из 1 в 0 (так при сложении единица переносится в старший разряд). Значит, триггеры должны срабатывать по спаду; на схеме это показывает кружок у тактового входа.
Что здесь что (4)
- Разряд Q₀. JK-триггер с J = K = 1: переворачивается по спаду каждого входного импульса
- Q₀ тактирует Q₁. каждый разряд ждёт предыдущего, поэтому задержки по цепочке складываются
- Кружок у входа C. срабатывание по спаду: разряд меняется, когда предыдущий падает из 1 в 0, как при переносе
- Q₃ — старший разряд. меандр с частотой в 16 раз ниже входной
Счётчики нужны так часто, что выпускаются десятками разновидностей: четырёхразрядные двоичные, двоично-десятичные (считают от 0 до 9), многодекадные. О готовых микросхемах подробно говорится в разделе 8.6. Из нескольких счётчиков и цифрового индикатора получается счётчик событий, например деталей на конвейере. А если открывать вход счётчика ровно на одну секунду и затем показывать результат, получится частотомер: число на индикаторе и есть частота в герцах. Выпускаются и частотомеры в одной микросхеме: генератор, схема управления и вывод на индикатор на одном кристалле.
У простой цепочки, где каждый триггер тактируется соседом, есть серьёзный недостаток: задержки складываются. Разряды переключаются не одновременно, а один за другим, как падающие костяшки домино. Посмотрите, например, на переход от 7 (0111) к 8 (1000): по пути на выходах мелькают числа, которых не должно быть.
Лабораторный счётчик импульсов собран из пяти триггеров в пульсирующую цепочку; задержка каждого триггера 12 нс. За счётчиком стоит дешифратор с задержкой 18 нс, и его выход должен успеть успокоиться до следующего входного импульса. а) Через какое наибольшее время после импульса код на выходах счётчика становится окончательным? б) Какая наибольшая частота входных импульсов допустима для всей системы? в) Сколько ложных промежуточных кодов появляется при переходе 31 → 0?
Решение
а) Хуже всего переходы, при которых переворачиваются все пять разрядов (15 → 16 или 31 → 0): каждый разряд ждёт предыдущего, нс.
б) Затем 18 нс отрабатывает дешифратор: нс, МГц. Заметьте, что сам счётчик способен считать гораздо быстрее, ведь каждый его триггер работает только на своей, уже поделённой частоте. Ограничение возникает, когда состояние счётчика нужно прочитать: читать можно лишь после того, как цепочка успокоилась.
в) 31 = 11111 → (упал ) 11110 = 30 → 11100 = 28 → 11000 = 24 → 10000 = 16 → 00000. Ложных кодов четыре: 30, 28, 24 и 16.
8.4.3Последовательностная логика — объединение памяти и вентилей
- Синхронный автомат = регистр из D-триггеров с общим тактом + комбинационнаяКомбинационная схема: выход в каждый момент определяется только текущими входами — памяти нет. Строится из одних вентилей. логика, которая по текущему состоянию вычисляет следующее.
- Порядок проектирования: назначить коды состояниям → выписать, что должно попасть на D-входы → построить логику (например, картой КарноТаблица истинности, разложенная по двум осям в порядке кода Грея (00, 01, 11, 10): соседние клетки отличаются одной переменной, и группы единиц дают простые произведения.).
- Неиспользуемые коды обязательно проверить: автомат, попавший в них при включении, не должен там застрять.
- Предел быстродействия: .
У нас есть вентили, которые умеют вычислять, и триггеры, которые умеют помнить. Соединив их, получаем самую общую форму цифровой схемы: от светофора на перекрёстке до процессора. Остаётся понять, как соединять их так, чтобы схема вела себя предсказуемо.
Синхронные системы: все меняются по одному сигналу
Пульсирующий счётчик показал, чем плохо, когда триггеры тактируют друг друга по цепочке. Противоположный подход называется синхронным: все триггеры получают один и тот же такт. Тогда все изменения происходят сразу после тактового фронта, и каждое из них определяется тем, что было в системе непосредственно перед этим фронтом. Похоже на хор под управлением дирижёра: голоса вступают по взмаху палочки, а не тогда, когда услышат соседа.
Устройство такой системы всегда одно и то же (схема ниже). Все триггеры собраны в регистр: это ряд D-триггеров с общим тактовым входом, у каждого свой D-вход и свой выход Q. Рядом стоит блок комбинационной логики. На него приходят выходы регистра (текущее состояние) и внешние входы, а он вычисляет две вещи: что записать в регистр на следующем такте и какие уровни выдать наружу. Каждый фронт переносит вычисленное на D-входах в Q, логика тут же начинает считать следующий шаг, и так далее.
Схема выглядит почти примитивно, а возможности у неё огромные: в эту форму укладывается любой автомат с конечным числом состояний. Её целиком можно поместить в одну регистровую ПМЛПрограммируемая матричная логика (PAL): программируемая матрица И, фиксированная матрица ИЛИ. Например, 16L8 — до 16 входов, 8 выходов., о которой говорится в разделе 8.6.
Что здесь что (4)
- Комбинационная логика. по текущему состоянию Q и внешним входам вычисляет следующее состояние (на D) и выходы
- Регистр D-триггеров. общий такт: по фронту все D одновременно переписываются в Q
- Такт. единственный момент, когда автомат меняет состояние; что творится между фронтами, ему безразлично
- Обратная связь по Q. текущее состояние возвращается на вход логики: так автомат помнит, где находится
Пример: делитель на 3
Делитель на 2 и на 4 получается сам собой, а вот деление на 3 требует подумать: трёх состоянийВыход с третьим состоянием «обрыв» (высокий импеданс): по сигналу разрешения выход отключается от линии. Основа шин данных. одним двоичным разрядом не описать. Возьмём два D-триггера с общим тактом, на который подаётся входной сигнал. Их D-входы назовём , , выходы , . Проектирование идёт по одному и тому же рецепту:
- Назначить коды состояниямнапример, : ; четвёртый код, 11, остаётся лишним
- Выписать таблицу D-входовна D каждого триггера должно стоять его следующее значение
- Построить логикув общем случае картой Карно; здесь ответ виден сразу: ,
- Проверить лишние кодыкуда пойдёт автомат, если окажется в ?
Таблица второго шага получается прямо из выбранной последовательности: напротив каждого текущего состояния пишем следующее, и это и есть то, что логика должна подать на D-входы.
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 |
Столбец совпадает со столбцом , значит, , простой провод. Столбец равен единице только при , а это функция ИЛИ-НЕ: . Вся логика — один вентиль (схема ниже).
Проверить работу можно прямо по таблице, такт за тактом. Важно, что оба триггера переключаются одновременно, по одному фронту. Если бы второй триггер тактировался выходом первого, получилась бы асинхронная схема со всеми её мелькающими кодами.
Почему синхронные схемы так ценят? Главная причина — устойчивость к помехам.
- Каждый триггер смотрит на свои входы только в узком окне вокруг фронта. Если в это окно данные уже успокоились, то наводки от соседних переключающихся проводников, ёмкостные выбросы и прочий мусор между фронтами просто никто не замечает.
- Неодинаковые задержки вентилей по-прежнему существуют: после фронта выходы логики какое-то время «дрожат», принимая промежуточные значения. Но к следующему фронту всё успокаивается, и ни один триггер этих промежуточных значений не запоминает. Задача проектировщика сводится к одному условию: период такта должен быть длиннее самого медленного пути.
Лишние коды и как не застрять
В делителе на 3 два триггера, а значит четыре кода, из которых используются три. Может ли схема оказаться в ? Ещё как может: при включении питания триггеры встают в случайное состояние, а помеха может перебросить их и посреди работы. Подставим 11 в нашу логику: , . Первый же такт переводит схему в 10, а это уже рабочий цикл. Здесь повезло.
Нагляднее всего такие вещи видны на диаграмме состоянийГраф: кружки — состояния автомата, стрелки — переходы по такту с условиями на входах. (рисунок ниже). Каждое состояние — кружок, каждый возможный переход — стрелка. Если на переход влияют входные сигналы, условие пишут прямо у стрелки; из одного состояния может выходить несколько стрелок в разные стороны. На такой картинке сразу видно, есть ли у каждого кружка выход и не образуют ли лишние коды свою отдельную петлю.
Делитель на 3 для трёхфазного генератора нужно собрать на двух JK-триггерах совсем без вентилей, с циклом : . Код 00 не используется, но именно в нём оба триггера окажутся после сигнала сброса при включении питания. На каждый из входов J и K можно подать только постоянный уровень (0 или 1) или один из выходов . Сколько всего существует таких схем и в скольких из них автомат после сброса так и останется в 00?
Подсказка
Для каждого перехода выпишите, какие J и K ему нужны: 0→1 требует J = 1 (K любой); 1→0 — K = 1 (J любой); 0→0 — J = 0 (K любой); 1→1 — K = 0 (J любой).Решение
Требования на каждом переходе рабочего цикла (X — безразлично):
| след. | |||
|---|---|---|---|
| 01 | 11 | 1X | X0 |
| 11 | 10 | X0 | X1 |
| 10 | 01 | X1 | 1X |
важен только в состоянии 01, где нужна единица. В этом состоянии равны единице три допустимых источника: , и , значит, три варианта. важен в 11 (нужен 0) и в 10 (нужна 1); эти состояния различаются только , и подходит единственный источник: . важен в 01 (нужен 0) и в 11 (нужна 1), они различаются : , тоже единственный вариант. важен только в 10, где нужна единица: , или , три варианта. Всего схем.
Теперь подставим код 00. и при любом выборе. Первый триггер станет 1, если или , и останется 0 при . Второй станет 1, если или , и останется 0 при . Автомат застрянет в 00, только если выбраны одновременно и : одна схема из девяти. Остальные восемь из 00 уходят в 01, 10 или 11, то есть сразу в рабочий цикл. Здесь лишний код совпадает с состоянием после сброса, так что неудачный выбор не позволит делителю даже запуститься.
Шаговым двигателем с двумя обмотками управляют две линии , и при полношаговом режиме состояния обмоток должны идти в коде ГреяКод, в котором соседние числа отличаются ровно одним разрядом: 000, 001, 011, 010, 110… Исключает ложные промежуточные коды в датчиках угла и счётчиках.: для вращения в одну сторону и в обратном порядке для вращения в другую. Спроектируйте синхронный автомат на двух D-триггерах с тактовым входом ШАГ и входом направления U/: при ВЫСОКОМ U/ последовательность прямая, при НИЗКОМ — обратная.
Решение
Выпишем следующее состояние для обоих направлений ( — уровень на входе направления):
| 00 | 01 | 10 |
| 01 | 11 | 00 |
| 11 | 10 | 01 |
| 10 | 00 | 11 |
. При следующее для состояний 00, 01, 11, 10 равно 0, 1, 1, 0 — это в точности . При оно равно 1, 0, 0, 1, то есть . Объединяя: .
. При получаем 1, 1, 0, 0 — это ; при — 0, 0, 1, 1, то есть . Значит, .
Итого: два D-триггера с общим тактом ШАГ, вентиль Исключающее ИЛИ на () и Исключающее ИЛИ-НЕ (или Исключающее ИЛИ плюс инвертор) на . Лишних кодов нет: все четыре комбинации входят в цикл, так что застревать негде. Приятный бонус кода Грея: на каждом шаге меняется только один разряд, поэтому даже если выходы читает асинхронная схема, промежуточных ложных кодов она не увидит. Для двигателя это означает, что за один шаг переключается одна обмотка.
Контроллер светофора собран как синхронный автомат в ПЛИС. Задержка триггеров от такта до выхода 9 нс, между выходами регистра и его D-входами самый длинный путь проходит через три уровня логики по 6 нс, время установления триггеров 5 нс. С какой наибольшей частотой можно тактировать автомат?
Решение
За один период сигнал должен пройти весь путь «фронт такта → выход триггера → логика → D-вход» и ещё простоять на D время установления: нс, МГц. Так считают быстродействие любой синхронной схемы: ищут критический путь, то есть самую длинную цепочку логики между двумя регистрами. Чтобы ускорить автомат, сокращают именно её, а остальные пути на частоту не влияют.
Проектируем от диаграммы состояний
Диаграмма состояний — не только средство отладки. С неё удобно начинать, когда у автомата много путей: из одного состояния можно попасть в разные в зависимости от входов, и держать всё это в голове трудно. Работа идёт в три этапа:
- Перечислить состоянияи дать каждому двоичный код; триггеров нужно не меньше , где — наименьшее целое, при котором не меньше числа состояний
- Нарисовать все переходыдля каждого состояния указать, при каких условиях в него попадают и при каких из него уходят
- Решить комбинационную задачупо диаграмме выписать таблицу «текущее состояние + входы → следующее состояние» и упростить, например картами Карно
Самое ценное в этом рецепте то, что последовательностнаяПоследовательностная схема: выход зависит и от входов, и от предыдущего состояния — в ней есть память (триггеры). задача сводится к комбинационной, а комбинационную мы уже умеем решать (раздел 8.3). Бывают и конечные состояния, из которых нет выхода: например, у схемы защиты состояние «авария зафиксирована» держится до вмешательства человека, а у торгового автомата состояние «товар выдан» ждёт внешнего сброса. Пример с входным сигналом — на рисунке ниже: автомат следит за потоком битов и сообщает, когда в нём встретилась комбинация «101».
Регистровые ПМЛ. Программируемые логические матрицы (ПМЛ и ПЛМПрограммируемая логическая матрица (PLA): программируются и матрица И, и матрица ИЛИ., о них в разделе 8.3) бывают и в варианте с D-триггерами на том же кристалле, тактируемыми общим сигналом. Такая регистровая ПМЛ — это готовая заготовка под схему «регистр плюс логика», показанную выше: остаётся только запрограммировать уравнения. Работа с ними разобрана в разделе 8.6.
8.4.4Синхронизатор
- Синхронизатор — тактируемый триггер, который «пересаживает» внешний асинхронный сигнал на такт системы.
- D-триггер, срабатывающий по спаду входных импульсов, открывает вентиль только в паузах между ними — на выход попадают лишь целые импульсы.
- Тот же триггер, срабатывающий по фронту, при остановке выпускает короткий ложный импульс длиной в свою задержку.
- Ложный импульс — результат гонки: два сигнала, вызванных одним событием, приходят к вентилю с разной задержкой.
Синхронная система живёт по своему такту, а внешний мир о нём ничего не знает. Пользователь нажимает кнопку, когда захочет; датчик сообщает «измерение готово», когда закончит; соседний контроллер со своим кварцем присылает запрос в произвольный момент. Две системы, работающие независимо, называют асинхронными по отношению друг к другу, и на их границе нужен «переводчик», который аккуратно введёт внешнее событие в ритм внутренней системы. Эту работу выполняют синхронизаторы, одно из самых важных применений триггеров.
Пример: пропускать только целые импульсы
Вспомним задачу из первого пункта: тумблер с защёлкой разрешает прохождение тактов. Дребезг мы победили, но тумблер по-прежнему переключается в случайный момент, и первый и последний импульсы пачки могут выйти обрезанными. Представьте, что пачка импульсов управляет шаговым двигателем или заряжает ёмкость дозатора: обрезок даёт непредсказуемую порцию.
Решение — поставить между защёлкой и вентилем D-триггер (схема ниже). Кнопки ПУСК и СТОП переключают RS-защёлку (вентиль 1), но её выход идёт не прямо на вентиль 3, а на вход D триггера. Тактом для триггера служит сам входной сигнал, причём триггер срабатывает по его спаду (в модели ниже — вариант «по спаду входного сигнала»). Нажали ПУСК в произвольный момент — защёлка переключилась сразу, а Q триггера остаётся НИЗКИМ до ближайшего спада входа. В этот момент вход уже НИЗКИЙ, следующий импульс ещё не начался, и вентиль 3 открывается в паузе. Значит, первым через него пройдёт целый импульс. Точно так же при СТОП вентиль закроется в паузе, и последний импульс тоже не будет обрезан.
Стрелки на временной диаграмме связывают причину и следствие: Q меняется сразу после спада входа, в тот отрезок, когда вход НИЗКИЙ и вентилю 3 всё равно нечего пропускать.
Что здесь что (4)
- Кнопки ПУСК и СТОП. перекидной контакт, дребезг гасит защёлка из вентилей 1 и 2
- Вентиль 1 (выход защёлки). ВЫСОКИЙ после ПУСК, НИЗКИЙ после СТОП; переключается в любой момент
- D-триггер по спаду. переносит разрешение в Q только по спаду входа, когда вход уже НИЗКИЙ
- Вентиль 3 (И-НЕ). пропускает вход (с инверсией), пока Q ВЫСОКИЙ; Q меняется только в паузах, импульсы целые
Гонки и короткие ложные импульсы
Казалось бы, неважно, по какому перепаду срабатывает триггер. Проверим: возьмём такой же триггер, но срабатывающий по фронту (нарастанию) входного сигнала, а не по спаду. В модели ниже это переключатель «по фронту входного сигнала». С пуском всё будет хорошо. А теперь нажмём СТОП, пока вход НИЗКИЙ, и дождёмся следующего импульса (временная диаграмма ниже).
Вход поднимается, и этот же фронт тактирует триггер, чтобы тот опустил Q. Но триггеру нужно время, порядка 20 нс у серий HC или LS. Всё это время Q ещё ВЫСОКИЙ, вентиль 3 открыт, а вход уже ВЫСОКИЙ, и на выходе успевает проскочить узкий импульс длиной в задержку триггера. Такие импульсы называют иголками или глитчами (от английского glitch). Причина — гонка сигналов: одно событие (фронт входа) порождает два сигнала, которые приходят на вентиль разными путями и с разной задержкой, и на короткое время вентиль видит комбинацию, которой по замыслу быть не должно.
Импульсный датчик расхода выдаёт импульсы длительностью 250 нс с паузами 750 нс, и их нужно пропускать на счётчик пачками по кнопкам ПУСК и СТОП через синхронизатор из схемы выше (D-триггер срабатывает по спаду входных импульсов). Докажите, что ни при пуске, ни при остановке, в какой бы момент ни нажали кнопку, на выходе не появится ни обрезанных импульсов, ни иголок. Какому условию должна удовлетворять задержка триггера?
Решение
Выход вентиля 3 (И-НЕ) становится НИЗКИМ, то есть выдаёт импульс, только когда одновременно ВЫСОКИЕ вход и Q. Меняться Q может лишь по спаду входа, спустя задержку . Значит, к моменту любого изменения Q вход уже НИЗКИЙ, вентиль 3 заперт по второму входу, и изменение Q на выход не попадает — ни при пуске (Q: 0 → 1), ни при остановке (Q: 1 → 0). Момент нажатия кнопки определяет только то, на каком спаде переключится Q, но не форму выходных импульсов: проходят лишь целые.
Условие: Q должен успеть установиться, пока вход ещё НИЗКИЙ, то есть нс (длительности паузы). Кроме того, к моменту спада сигнал на D должен простоять время установления. Если кнопку нажали прямо в этом окне, триггер может на мгновение стать метастабильным или переключиться только на следующем спаде; оба исхода безопасны, ведь всё происходит в паузе. Для серии HC с задержкой порядка 20 нс запас огромный. А вот если бы паузы были короче задержки триггера, Q менялся бы уже при ВЫСОКОМ входе, и иголки вернулись бы.
Для отладки учебного процессора нужна кнопка «три такта»: после каждого нажатия она должна пропустить на процессор ровно три полных положительных импульса от тактового генератора и больше ничего, а следующая порция — только после того, как кнопку отпустят и нажмут снова (кнопка уже избавлена от дребезга). Предложите схему.
Решение
Объединим идею синхронизатора со сдвиговым регистром, который отсчитывает импульсы. Возьмём четыре D-триггера A, B, C и E, все тактируемые спадом тактовых импульсов. Их асинхронные входы сброса подключим к кнопке так, чтобы при отпущенной кнопке все четыре были сброшены.
- A: на D подаётся сигнал КНОПКА (уже после защёлки от дребезга). становится 1 на первом спаде после нажатия, то есть в паузе, поэтому следующий импульс пройдёт целиком.
- B: D = ; становится 1 спадом в конце первого пропущенного импульса.
- C: D = ; становится 1 в конце второго.
- E: D = ; становится 1 в конце третьего.
Выход: (трёхвходовый И). Проходят импульсы, начавшиеся после установки A и до установки E, — ровно три. Иголок нет по той же причине, что и в синхронизаторе по спаду: и меняются только после спада такта, когда сам такт НИЗКИЙ. После отпускания кнопки регистр сбрасывается асинхронно. Если это случится посреди импульса, а уже был 1, вентиль и так заперт, и ничего не проскочит; опасен лишь случай, когда кнопку отпустили раньше, чем прошли все три импульса, — тогда последний из них может оборваться. Чтобы исключить и это, сброс тоже проводят через синхронизирующий триггер. Для импульсов нужен сдвиговый регистр длиной , а для больших выгоднее счётчик с дешифратором.
Практические замечания
На вход D синхронизирующего триггера не обязательно подавать сигнал от кнопки: это может быть флаг готовности АЦП, запрос от соседней платы, сигнал от датчика. Передача асинхронного сигнала в тактируемую систему — одна из самых частых задач в цифровой технике, от интерфейса клавиатуры до обмена между процессорами. И почти всегда лучшее решение одно и то же: тактируемый триггер на границе, который «пересаживает» сигнал на внутренний такт.
Существовала даже специальная микросхема с двумя синхронизаторами, 74120, но она так и не прижилась: обычный D-триггер справляется с этой задачей не хуже.
На макетной плате нужен D-триггер, чтобы защёлкивать бит готовности датчика, а под рукой есть только '109 — JK-триггер с инверсным вторым входом . Как подключить его входы?
Решение
Если , то . При получаем , — установка; при получаем , — сброс. Это и есть D-триггер, причём без внешнего инвертора: именно для этого у '109 сделан инверсный вход. Вариант « на землю» при единице на J даёт , , то есть счётный режим, а вариант « к инверсии данных» превращает вход в : триггер либо хранит, либо переворачивается.