Глава 8. Цифровая логика

8.6. Счётчики, регистры и другие последовательностные ИМС

Готовые регистры, защёлки, счётчики и регистры сдвига, регистровые ПМЛ и языки их программирования (PALASM, ABEL, CUPL), автоматы на ПЛИС, логические выбросы и большие последовательностные БИС: FIFO, умножители частоты, микроконтроллеры.

≈ 68 мин чтения · пунктирное подчёркивание — наведите или нажмите, чтобы увидеть пояснение

Представьте несколько обычных задач. Нужно поймать байт, который микроконтроллер на мгновение выставил на шину, и держать его на светодиодах. Нужно сосчитать импульсы датчика расхода воды и раз в секунду показать результат. Нужно вывести шестнадцать светодиодов, имея у платы Arduino всего три свободных вывода. Во всех трёх случаях работают триггерыЭлемент памяти на один бит с двумя устойчивыми состояниями (бистабильный мультивибратор)., но собирать их по одному никто не станет: такие узлы давно выпускаются целиком, в одном корпусе, со всеми удобствами — общим тактом, сбросом, выходами на три состояния.

Ниже мы пройдём по этим готовым функциям от простых к сложным. Сначала — то, что просто хранит слово, затем — то, что считает, потом — то, что сдвигает. Дальше начинается программируемая логика с триггерами внутри: в ней можно «нарисовать» почти любой небольшой автомат. В конце — несколько больших микросхем, которые делают целую работу сами.

Что в этом разделе
Защёлки и регистрыхранят слово: снимок шины по команде
Счётчикисчитают такты и делят частоту
Регистры сдвигадвигают слово на разряд: параллельный код ↔ последовательный
Регистровые ПМЛпрограммируемая логика с триггерами — любой небольшой автомат
БИСFIFO, умножители частоты, микроконтроллеры

8.6.1Защёлки и регистры: как сделать снимок шины

≈ 5 мин2 упр.
Главное
  • Регистр — D-триггеры с общим тактом (и общим сбросом): 8 разрядов в 20-выводном корпусе ('574, '273).
  • Прозрачная защёлкаТактируемый триггер, выход которого повторяет вход всё время, пока такт активен; при неактивном такте хранит последнее значение. ('573) повторяет вход, пока открыта; регистр ('574) видит вход только в момент фронта.
  • При выборе смотрите на разрешение, сброс, третье состояние и «проточную«Проточная» цоколёвка — все входы на одной стороне корпуса, все выходы на противоположной: шина проходит через микросхему без пересечений на плате.» цоколёвку.

Начнём с вопроса, на котором легко ошибиться. Есть две микросхемы с почти одинаковыми названиями, одинаковым числом выводов и одинаковым назначением — '573 и '574. Обе запоминают восьмиразрядное слово. Подадим на них одни и те же сигналы и посмотрим, что они запомнят.

фронтфронтC (такт/разреш.)DQ защёлки '573Q регистра '574www.reknow.ru
Одни и те же сигналы, разные результаты: защёлка пропускает вход насквозь, пока C = 1, и запоминает его на спаде C; регистр «фотографирует» вход только на фронте C.

Результаты различаются, потому что внутри стоят принципиально разные запоминающие элементы.

  • Прозрачная защёлка ('573) похожа на окно с ставнем. Пока ставень открыт (вход разрешения активен), выход просто повторяет вход — любое изменение сразу проходит насквозь. В момент, когда ставень закрывается, выход застывает на последнем значении и дальше не реагирует на вход.
  • Регистр D-типа ('574) похож на фотоаппарат. Он «щёлкает» один раз — в момент активного фронта такта — и хранит этот снимок до следующего щелчка. Что происходит на входе между фронтами, его не касается.

Английское слово latch («защёлка», «фиксатор») раньше применяли к любым регистрам, поэтому в старой литературе термин двусмыслен. Сегодня различают именно так: защёлка «прозрачна», пока открыта; регистр срабатывает по фронту.

Защёлка и регистр: одинаковы по виду, разные по поведению
Прозрачная защёлка ('573)Регистр D-типа ('574)
Когда вход «виден»всё время, пока разрешение активнотолько в момент активного фронта такта
Что хранитзначение в момент закрываниязначение в момент фронта
Изменение D при открытом входесразу проходит на выходни на что не влияет
Типичное применениеудержать слово с шины, пока оно нужносинхронные схемы, автоматы, конвейеры
Модель: защёлка и регистр получают одни и те же сигналы
Упражнение 8.6.1

Микроконтроллер выставил на шину 1 и поднял строб (он подключён и к разрешению защёлки '573, и к тактовому входу регистра '574, запись по положительному фронту). Пока строб высокий, программа успела сменить данные на 0, и только после этого строб опустился. Что хранят микросхемы?

Решение

Регистр сделал «снимок» на подъёме строба, когда на шине была 1, — и хранит 1. Защёлка всё время, пока строб высокий, повторяла шину и закрылась, когда там уже был 0. Если программа не уверена в порядке своих действий, лучше регистр: ему важен только момент фронта.

Почему регистр, а не россыпь триггеров. Восемь разрядов можно набрать из четырёх сдвоенных D-триггеров '74. Но у каждого триггера свои такт, асинхронные установка и сброс и оба выхода, а регистру всё это не нужно: разряды всегда тактируются одновременно, раздельные установка и сброс не требуются, инверсные выходы почти никогда не используются. Объединив тактовые (и сбросовые) цепи, восемь триггеров умещают в стандартный 20-выводной корпус:

  • '574 — восемь D-триггеров с записью по положительному фронту и выходами на три состояния (общее разрешение выходов OE);
  • '273 — те же восемь разрядов, но вместо третьего состоянияТретье (высокоимпедансное) состояние — выход отключён от линии: оба выходных транзистора закрыты. Позволяет нескольким выходам по очереди работать на общую шину. — общий вход сброса;
  • '175 — четыре разряда, у каждого прямой и инверсный выходы (рисунок ниже).
'LS175D1D2D3D4CLKRQ1Q1Q2Q2Q3Q3Q4Q4ВходыВыходыwww.reknow.ru1Входы данных D1–D4. слово, которое запишется по фронту такта2Такт CLK. один на все четыре разряда: запись по положительному фронту3Общий сброс R. сразу (асинхронно) обнуляет все разряды; активный уровень — низкий4Прямые выходы Q. держат записанное слово до следующего фронта5Инверсные выходы Q. особенность '175: у каждого разряда есть и инверсия
74LS175 — четыре D-триггера в одном корпусе: такт и сброс общие, зато у каждого разряда выведены и прямой, и инверсный выходы.
Что здесь что (5)
  1. Входы данных D1–D4. слово, которое запишется по фронту такта
  2. Такт CLK. один на все четыре разряда: запись по положительному фронту
  3. Общий сброс R. сразу (асинхронно) обнуляет все разряды; активный уровень — низкий
  4. Прямые выходы Q. держат записанное слово до следующего фронта
  5. Инверсные выходы Q. особенность '175: у каждого разряда есть и инверсия
20выводов у 8-разрядного '5748 входов D, 8 выходов Q, общий такт, общий OE и питание.
1общий такт на все разрядыРазряды регистра всегда тактируются одновременно — отдельные такты не нужны.
3 сост.выходы '574Вход OE отключает выходы от шины, содержимое при этом сохраняется.
Упражнение 8.6.2

Для блока индикации нужно хранить шесть битов. Вариант А — шесть отдельных D-триггеров, у каждого выведены вход D, такт, асинхронные установка и сброс, прямой и инверсный выходы (плюс два вывода питания на всё устройство). Вариант Б — шестиразрядный регистр '174: шесть входов, шесть выходов, общий такт, общий сброс и питание. Сколько выводов в каждом варианте?

Решение

У отдельного триггера шесть сигнальных выводов (D, C, S, R, Q, Q): . У '174: — ровно стандартный 16-выводной корпус. Если собирать вариант А из сдвоенных '74 по 14 выводов, понадобятся три корпуса — 42 вывода и втрое больше места на плате.

Родственники. Регистр — самый маленький представитель большого семейства «хранилищ»:

  • ЗУПВЗУПВ (RAM) — запоминающее устройство с произвольной выборкой: большой массив регистров, в любой из которых можно записать слово или прочитать его по адресу. (RAM) — по сути, огромный массив регистров: в любой из них можно записать слово или прочитать его, но не одновременно. Ёмкость — от нескольких байтов до мегабайтов и больше; главное применение — память микропроцессорных систем;
  • адресуемая защёлкаАдресуемая защёлка ('259) — многоразрядная защёлка, в которой можно изменить один бит по его адресу, не трогая остальные. (например, '259) — многоразрядная защёлка, в которой можно поменять один бит по его адресу, не трогая остальные; удобно, когда восемь реле управляются по одному;
  • регистры внутри больших микросхем, например в цифро-аналоговом преобразователе. Данные на шине микропроцессора живут лишь около фронта строба, а преобразованию нужно время — внутренний регистр держит слово, пока ЦАПЦАП — цифроаналоговый преобразователь: превращает двоичный код в пропорциональный ток или напряжение (раздел 9.3). его превращает в напряжение.

Сводка ходовых регистров и защёлок — в справочных таблицах в конце главы (раздел 8.10).

Совет. Выбирая регистр, смотрите на вход разрешения, вид сброса, выходы на три состояния и «проточную» цоколёвку — все входы вдоль одной стороны корпуса, все выходы вдоль другой. Шина тогда проходит через микросхему насквозь, без пересечений дорожек, и печатная плата разводится в разы проще.

8.6.2Счётчики: какой выбрать и где подвох

≈ 8 мин3 упр.
Главное
  • Синхронный счётчик тактирует все разряды разом; асинхронный (со сквозным переносомСквозной перенос (ripple) — каждый следующий триггер счётчика тактируется выходом предыдущего; задержки разрядов складываются, на выходах мелькают ложные числа.) — цепочкой, поэтому медленнее и на переходах выдаёт ложные числа (7 → 6 → 4 → 0 → 8).
  • Загрузка и сброс бывают синхронными ('160–'163) и асинхронными ('190–'193) — это важно при самоперезагрузке.
  • По умолчанию берите синхронные '160–'163; 8-разрядные — '590, '592.

Если в схеме просто нужен счётчик и ничего особенного от него не требуется, начинайте с семейства 4-разрядных синхронных счётчиков '160–'163; восьмиразрядные синхронные — '590 и '592. Как устроен счётчик из триггеров, мы разобрали в разделе 8.4; здесь — о том, по каким признакам различаются готовые микросхемы и почему «по умолчанию» именно синхронные.

По каким признакам выбирают счётчик
Ёмкость4 разряда (÷10 или ÷16), до 24 разрядов, по модулю n
Тактированиесинхронный или асинхронный; фронт или спад
Направлениетолько вверх или реверсивный (U/D или два такта)
Загрузка и сброссинхронные или асинхронные
Выходызащёлки, три состояния, дешифратор индикатора

Синхронный или асинхронный — главный вопрос

В синхронном счётчике все триггеры получают один и тот же такт и переключаются одновременно. В асинхронном (со сквозным переносом, ripple) такт получает только младший разряд, а каждый следующий тактируется выходом предыдущего — как костяшки домино. Пока «волна» бежит по цепочке, младшие разряды уже новые, а старшие ещё старые, и на выходах на мгновение появляются числа, которых в счёте нет. Переход 7 (0111) → 8 (1000) проходит через 6, 4 и 0:

Такт (спад)Q0Q1Q2Q3Число76408www.reknow.ru
Переход 7 → 8 в счётчике со сквозным переносом: разряды переключаются по очереди, каждый — с задержкой после соседа, и на выходах успевают мелькнуть 6, 4 и 0.
Модель: асинхронный и синхронный счётчик на переходе между числами
Ловушка. Если что-то в схеме дешифрирует состояние асинхронного счётчикаПульсирующий счётчик: выход каждого триггера тактирует следующий, поэтому разряды меняются не одновременно и возникают ложные коды. (скажем, ждёт числа 4, чтобы включить реле), такие мелькания дадут ложные срабатывания. Обычный выход — смотреть на счётчик только тогда, когда он заведомо успокоился: например, переписывать его выходы в D-регистр очередным тактовым фронтом.

Вторая беда асинхронного счётчика — скорость: задержки разрядов складываются, и в худшем случае (0111…1 → 1000…0) новое число устанавливается только после того, как перенос пройдёт все разряды. Зато асинхронные счётчики проще, экономичнее и бывают очень длинными (4020, 4040). Их обычно делают со входом, работающим по спаду: тогда выход старшего разряда одного корпуса можно прямо подать на такт следующего, и перенос в следующую декаду возникает в момент перехода предыдущей из 9 (или 15) в 0. Синхронные счётчики чаще тактируются фронтом.

Худший случай асинхронного счётчика
Обозначения:через сколько после такта на всех выходах асинхронного счётчика стоит новое число (худший случай)число разрядов: в худшем случае (0111…1 → 1000…0) перенос проходит их всезадержка одного триггера «такт → выход»
Синхронному счётчику той же длины нужна одна задержка .
Синхронный и асинхронный счётчик
СинхронныйАсинхронный (сквозной перенос)
Тактирование разрядоввсе триггеры — одним тактомкаждый — выходом предыдущего
Ложные числа на переходахнетесть: 7 → 6 → 4 → 0 → 8
Время установленияВремя установления — время, после которого выход входит в заданную окрестность конечного значения (±1 %, ±0,1 %) и больше её не покидает.одна задержка триггерасумма задержек:
Активный перепадобычно фронтобычно спад (удобно каскадировать)
Примеры'160–'163, '590, '592'390, '393, 4020, 4040
Упражнение 8.6.3

Асинхронный 4-разрядный счётчик переходит из 3 (0011) в 4 (0100). Какие ложные числа на мгновение появятся на выходах (в порядке появления)?

Решение

Первым переключается Q0 (1 → 0): 0010 = 2. Его спад тактирует Q1 (1 → 0): 0000 = 0. Спад Q1 тактирует Q2 (0 → 1): 0100 = 4 — конечное состояние. Q3 не участвует. Итак, 2 и 0; дешифраторПо -разрядному коду возбуждает один из выходов (у '138 — выбранный выход НИЗКИЙ). нуля на таком счётчике сработал бы при переходе 3 → 4.

Упражнение 8.6.4

Регистратор считает импульсы 14-разрядным асинхронным счётчиком 4020 (в исполнении HC задержка каждого разряда до 25 нс). Чтобы прочитать число без мельканий, его переписывают в D-регистр по следующему фронту такта; время установки регистра 12 нс. Какова наибольшая частота такта, при которой регистр гарантированно запишет установившееся число?

Решение

В худшем случае перенос проходит все 14 разрядов: нс после фронта. Плюс время установки:

Синхронный счётчик той же длины обошёлся бы одной задержкой триггера, и предел определяли бы совсем другие величины.

Пример асинхронного счётчика с «характером» — сдвоенный двоично-десятичный '390. Каждая его половина — это два независимых делителя, на 2 и на 5, с отдельными тактовыми входами; соединяя их в разном порядке, получают разные формы сигнала.

½ 'LS390CACBСБРОСQAQBQCQDwww.reknow.ru1Вход C_A. такт делителя на 2 (срабатывает по спаду)2Вход C_B. такт делителя на 5 — отдельный, поэтому делители можно соединять в любом порядке3СБРОС. общий асинхронный сброс обоих делителей4Выход Q_A. выход делителя на 25Выходы Q_B…Q_D. выходы делителя на 5; Q_D — старший
Одна половина 74LS390: два независимых асинхронных делителя — на 2 (вход CA, выход QA) и на 5 (вход CB, выходы QB…QD); оба срабатывают по спаду, сброс общий.
Что здесь что (5)
  1. Вход C_A. такт делителя на 2 (срабатывает по спаду)
  2. Вход C_B. такт делителя на 5 — отдельный, поэтому делители можно соединять в любом порядке
  3. СБРОС. общий асинхронный сброс обоих делителей
  4. Выход Q_A. выход делителя на 2
  5. Выходы Q_B…Q_D. выходы делителя на 5; Q_D — старший
Упражнение 8.6.5

Половина '390 тактируется частотой 1 МГц. В соединении «8-4-2-1» такт подают на C_A, а Q_A — на C_B (счёт 0…9 в двоично-десятичном кодеBCD: каждая десятичная цифра кодируется отдельно четырьмя битами; .). Какая частота на выходе Q_A и какую долю периода выход Q_D находится в единице? Затем делители соединили наоборот: такт на C_B, выход Q_D — на C_A, выходом служит Q_A. Каков теперь коэффициент заполнения выходного сигнала?

Решение

В первом соединении Q_A — выход делителя на 2: 500 кГц. Q_D = 1 только в состояниях 8 и 9, т. е. 2 такта из 10 — 20 %. Во втором соединении делитель на 5 выдаёт один спад на 5 тактов, а триггер-делитель на 2 после него меняет состояние каждые 5 входных тактов: Q_A — симметричный меандр 100 кГц, 50 %. Когда из десятичного делителя нужен «ровный» сигнал (например, для тактирования следующего каскада с требованием к скважностиСкважность — отношение периода импульсов к их длительности ; обратна коэффициенту заполнения.), берут второе соединение.

Реверс, загрузка, сброс

Реверсивные счётчикиРеверсивный счётчик — считает и вверх, и вниз: направление задаёт вход U/D ('191) или раздельные тактовые входы ('193). умеют считать в обе стороны (энкодер ручки громкости, счётчик людей у турникета). Направление задают одним из двух способов: отдельным входом «вверх/вниз» (U/D) при общем такте — так у '191, или двумя раздельными тактовыми входами для счёта вверх и вниз — так у '193. Восьмиразрядные реверсивные — '569 и '579.

У большинства счётчиков есть информационные входы для предварительной (параллельной) загрузки числа — «параллельной», потому что все разряды заносятся одновременно. Без неё не сделать счётчик по модулюСчётчик по модулю n — делит входную частоту на целое n, заданное входным словом (обычно предзагрузкой и перезагрузкой при переполнении). n. Важно, когда число заносится:

  • синхронная загрузка ('160–'163) — по очередному фронту такта, если на входе ЗАГРУЗКА разрешающий уровень;
  • асинхронная загрузка ('190–'193) — сразу, как только ЗАГРУЗКА активна, не дожидаясь такта.

Сброс в нуль — частный случай загрузки. Чаще он асинхронный, но у '162 и '163 — синхронный.

Синхронная загрузка/сбросАсинхронная загрузка/сброс
Когда срабатываетпо очередному фронту тактасразу, как только вход активен
Самоперезагрузка по своему выходучисто: состояние держится целый тактсамоуничтожающийся короткий импульс
Примеры'160–'163 (загрузка), '162, '163 (сброс)'190–'193
Ловушка. Если счётчик перезагружается или сбрасывается своим же выходом, асинхронный вход даёт короткие импульсы и гонки — разбор на примерах в разделах 8.7 и 8.8.

Удобства на выходе

Выходные защёлки. Частотомер считает импульсы целую секунду; если показывать прямо выходы счётчика, на индикаторе будут бежать цифры, а в начале каждого цикла — мигать нуль. Счётчик со встроенными защёлками показывает результат прошлого цикла, пока идёт новый, и обновляет его раз за цикл. Такие защёлки всегда прозрачные: если держать их открытыми, счётчик ведёт себя так, будто их нет. (Заметим, что и любой счётчик с параллельными входами может работать как защёлка — но тогда он не может одновременно считать и хранить.)

Выходы на три состояния нужны, когда несколько счётчиков по очереди выдают свои цифры на одну шину — для индикации или передачи. '779 — 8-разрядный синхронный двоичный счётчик, у которого выходы на три состояния служат ещё и входами загрузки; благодаря совмещённым выводам он помещается в 16-выводной корпус ('593 — то же в 20-выводном).

Счётчик вместе с индикацией. Есть микросхемы, где в одном корпусе счётчик, регистр, дешифратор 7-сегментного кода и формирователь для индикатора (4-разрядные 74C925–74C928), и даже счётчик вместе с самим индикатором (TIL306/307). Особенно удачна БИС Intersil 7216 — готовый 8-декадный универсальный счётчик-частотомер на 10 МГц, которому почти не нужны внешние детали.

'160–'1634-разр. синхронныеВыбор по умолчанию: синхронная загрузка; '162/'163 — ещё и синхронный сброс.
'590, '5928-разр. синхронныеХорошие 8-разрядные синхронные счётчики.
'191, '193реверсивные'191 — вход U/D, '193 — раздельные такты вверх и вниз; загрузка асинхронная.
'7798 разр., 3 сост.Выходы на три состояния служат и входами загрузки — 16-выводной корпус.
7216частотомер на кристаллеIntersil: 8 декад, 10 МГц, почти без внешних деталей.
Ловушка. Многие типы выпускаются только в одном семействе (например, LS или F). Проверьте по справочнику, есть ли нужный счётчик в вашей серии, до того как разводить плату. Сводная таблица — в разделе 8.10.

8.6.3Регистры сдвига: из параллельного в последовательный и обратно

≈ 11 мин3 упр.
Главное
  • Регистр сдвигаРегистр сдвига — цепочка D-триггеров с общим тактом (выход каждого — на вход следующего): по каждому фронту слово сдвигается на один разряд. — цепочка D-триггеров с общим тактом: по каждому фронту слово сдвигается на разряд, гонок нет.
  • Применения: параллельный код ↔ последовательный и память, читаемая в порядке записи.
  • ОЗУ + счётчик адресов = длинный реверсивный регистр сдвига; период — сумма минимальных фаз такта.

Вернёмся к задаче из начала раздела: шестнадцать светодиодов и три свободных вывода. Решение — два '595, соединённых цепочкой: микроконтроллер «проталкивает» 16 битов по одному проводу данных, отмечая каждый бит тактовым импульсом, а потом одним импульсом на третьем проводе переписывает собранное слово на выходы. Внутри '595 — регистр сдвига: цепочка D-триггеров, где выход каждого подан на вход следующего, а такт у всех общий.

входтакт (общий)DQQ0разряд 0DQQ1разряд 1DQQ2разряд 2DQQ3разряд 3выходwww.reknow.ru1Последовательный вход. новый бит входит в первый триггер по каждому фронту2Разряд 0. D-триггер: записывает то, что было на входе перед фронтом3Связь Q → D. выход каждого триггера — на вход следующего; задержка триггера гарантирует, что сосед «увидит» старое значение4Общий такт. все разряды тактируются одновременно — это синхронная схема5Последовательный выход. бит выходит из последнего разряда через n тактов6Параллельные выходы. все n бит доступны сразу — так делают преобразователь последовательного кода в параллельный
Четыре D-триггера цепочкой с общим тактом — регистр сдвига. Последовательно слово входит за n тактов, а с выходов Q0…Q3 его можно снять целиком.
Что здесь что (6)
  1. Последовательный вход. новый бит входит в первый триггер по каждому фронту
  2. Разряд 0. D-триггер: записывает то, что было на входе перед фронтом
  3. Связь Q → D. выход каждого триггера — на вход следующего; задержка триггера гарантирует, что сосед «увидит» старое значение
  4. Общий такт. все разряды тактируются одновременно — это синхронная схема
  5. Последовательный выход. бит выходит из последнего разряда через n тактов
  6. Параллельные выходы. все n бит доступны сразу — так делают преобразователь последовательного кода в параллельный

По каждому фронту вся комбинация нулей и единиц переезжает на разряд дальше, а в первый триггер входит новый бит. Может показаться, что тут неизбежна гонка: все триггеры тактируются одновременно, и каждый тут же меняет вход соседа. Но триггер записывает то, что было на входе непосредственно перед фронтом, а выход меняет лишь спустя свою задержку. Сосед успевает «увидеть» старое значение — поэтому регистры сдвига спокойно соединяют каскадно, хоть десятками.

Зачем это нужно? Во-первых, чтобы превращать параллельный код (n битов одновременно по n проводам) в последовательный (биты друг за другом по одному проводу) и обратно — так работают SPI, UART, светодиодные ленты, расширители портов. Во-вторых, как память, если данные всегда читаются в том же порядке, в каком записаны (линия задержки, буферБуфер — повторитель с : огромное входное и малое выходное сопротивление, развязывает источник и нагрузку. строки изображения).

Какие бывают

  • Длина. Стандартны 4- и 8-разрядные; есть на 64 бита и больше и даже переменной длины: у 4557 длина от 1 до 64 битов задаётся 6-разрядным управляющим словом.
  • Сколько в корпусе. Обычно один регистр, но бывают сдвоенные, счетверённые и даже шесть в корпусе.
  • Направление. Большинство сдвигает только в одну сторону («вправо»); реверсивные ('194, '323) имеют вход направления (рисунок ниже). С '95 будьте осторожны: «влево» он сдвигает лишь в том случае, если каждый выход заранее соединить со входом предыдущего разряда и пользоваться параллельной загрузкойПараллельная (предварительная) загрузка — все разряды счётчика или регистра заносятся одновременно с информационных входов; бывает синхронной (по фронту) и асинхронной (сразу). — это не настоящий реверс.
  • Входы и выходы. Короткие регистры обычно имеют параллельные вход и выход (PI/PO), как 4-разрядный '395 с выходами на три состояния. Длинным хватает только последовательных: вход в первый триггер и выход из последнего, иногда с несколькими промежуточными отводами. Уместить параллельные вход и выход восьми разрядов в маленький корпус можно, только совместив выводы: '299 — 8-разрядный PI/PO в 20-выводном корпусе. У некоторых регистров есть защёлки на входе или выходе ('595, '597), чтобы сдвиг шёл, пока предыдущее слово загружается или выгружается.
  • Загрузка и сброс, как у счётчиков, синхронные или асинхронные: '323 — это '299 с синхронным сбросом. Сводка — в таблицах раздела 8.10; не все типы есть во всех семействах.

Универсальный 4-разрядный '194 умеет всё сразу: хранить, сдвигать в обе стороны и загружать параллельно. Режим выбирают два входа S1, S0.

'LS194DSR (вправо)ABCDDSL (влево)S0S1CLKRQAQBQCQDпоследоват.и параллельныевходырежимwww.reknow.ru1DSR. последовательный вход при сдвиге вправо: бит входит в 2A–D. параллельные входы — загружаются при S1S0 = 113DSL. последовательный вход при сдвиге влево: бит входит в 4S0, S1. режим: хранение, вправо, влево, загрузка (таблица ниже)5CLK. всё происходит по положительному фронту такта6R. асинхронный сброс всех разрядов7Q_A…Q_D. параллельные выходы; — старший разряд в наших упражнениях
74LS194 — универсальный 4-разрядный регистр сдвига: хранение, сдвиг в обе стороны или параллельная загрузка, в зависимости от S1, S0.
Что здесь что (7)
  1. DSR. последовательный вход при сдвиге вправо: бит входит в
  2. A–D. параллельные входы — загружаются при S1S0 = 11
  3. DSL. последовательный вход при сдвиге влево: бит входит в
  4. S0, S1. режим: хранение, вправо, влево, загрузка (таблица ниже)
  5. CLK. всё происходит по положительному фронту такта
  6. R. асинхронный сброс всех разрядов
  7. Q_A…Q_D. параллельные выходы; — старший разряд в наших упражнениях
Режимы регистра '194
S1S0Действие по фронту CLK
00хранение (запрет)
01сдвиг вправо: DSR, , …
10сдвиг влево: DSL, , …
11параллельная загрузка A–D
Упражнение 8.6.6

В '194 (порядок , — старший) параллельно загрузили 0110. Затем при DSL = 1 сделали два сдвига влево и при DSR = 0 — один сдвиг вправо. Какое десятичное число окажется в регистре?

Решение

Сдвиг влево: DSL, остальные разряды едут к , бывший уходит. 0110 → 1101 → 1011. Сдвиг вправо: DSR = 0, бывший уходит: 1011 → 0101 = 5.

Длинный регистр сдвига из ОЗУ: цифровое эхо

Гитарный эффект «эхо» — это задержка звука на десятки миллисекунд. При частоте отсчётов 48 кГц задержка на 21 мс — это примерно тысяча отсчётов по 8 бит, т. е. регистр сдвига на тысячу байтов. Такой регистр не купить, но его легко сделать из обычного ОЗУ и счётчика адресов: память с произвольной выборкой всегда можно заставить работать как регистр сдвига (наоборот — нельзя), если перебирать адреса по порядку.

АЦП8 бит'HC574DCQОЗУ 1K × 8DвхWEDвых'HC574DCQЦАП888счётчик адресаCA0…A910такт 48 кГц1'HC04один такт = один отсчётwww.reknow.ru1АЦП. каждый такт выдаёт новый 8-битовый отсчёт2Входной регистр. по фронту такта забирает новый отсчёт3ОЗУ 1K × 8. каждая ячейка — одна «позиция» длинного регистра4Счётчик адреса. 10 разрядов: перебирает 1024 адреса по кругу; если сделать его реверсивным, можно «сдвигать» в обе стороны5Инвертор. запись (WE = 0) идёт в высокой фазе такта, смена адреса — в низкой6Выходной регистр. по фронту забирает старое содержимое ячейки до того, как в неё запишут новое7ЦАП. выдаёт задержанный звук
Цифровая линия задержки для эффекта «эхо»: отсчёты АЦП проходят через ОЗУ 1K × 8, счётчик перебирает адреса по кругу. Инвертор сдвигает запись (WE) и смену адреса в разные полупериоды такта.
Что здесь что (7)
  1. АЦП. каждый такт выдаёт новый 8-битовый отсчёт
  2. Входной регистр. по фронту такта забирает новый отсчёт
  3. ОЗУ 1K × 8. каждая ячейка — одна «позиция» длинного регистра
  4. Счётчик адреса. 10 разрядов: перебирает 1024 адреса по кругу; если сделать его реверсивным, можно «сдвигать» в обе стороны
  5. Инвертор. запись (WE = 0) идёт в высокой фазе такта, смена адреса — в низкой
  6. Выходной регистр. по фронту забирает старое содержимое ячейки до того, как в неё запишут новое
  7. ЦАП. выдаёт задержанный звук

Секрет — в порядке событий внутри одного такта: сначала прочитать ячейку, потом записать в неё же. Пока адрес k стоит неподвижно в низкой фазе такта, ОЗУ не пишет, и на его выходе — то, что было записано в ячейку k при прошлом посещении. Фронт такта переписывает это старое содержимое в выходной регистр и одновременно новый отсчёт — во входной. В высокой фазе (WE = 0) новый отсчёт ложится в ячейку k, и лишь после окончания записи счётчик переходит к k + 1. Счётчик возвращается к адресу k через 1024 такта — значит, каждый отсчёт выходит ровно через 1024 такта после входа, как из регистра сдвига длиной 1024 (по каждой из восьми линий данных).

фронтконец записифронтТактВход. рег. → Dвхпрежнееновый отсчётWEАдресkk + 1Выход ОЗУячейка kwww.reknow.ru
Один такт линии задержки (наши максимальные задержки, нс): по фронту выходной регистр забирает старое содержимое ячейки k, затем в неё пишется новый отсчёт, и лишь потом адрес переходит к k + 1. Высокая фаза — не меньше 15 нс, низкая — не меньше 52 нс.

Как быстро это может работать. Распишем, что должно успеть произойти в каждой фазе такта. Возьмём максимальные задержки обычной КМОПКМОП — комплементарные МОП-транзисторы: n- и p-канальные приборы на одном кристалле. Основа почти всей цифровой логики и аналоговых ключей.-логики и медленного ОЗУ: регистр «такт → выход» 12 нс, инвертор 7 нс, установка данных ОЗУ перед концом записи 10 нс, счётчик «такт → адрес» 15 нс, время выборки ОЗУ 25 нс, установка выходного регистра 5 нс.

Предельная частота регистра сдвига на ОЗУ
  1. Высокая фаза: нсвходной регистр выдаёт новый отсчёт через 12 нс после фронта, и он должен опередить конец записи на время установки ОЗУ (10 нс); конец записи задержан инвертором на 7 нс — это играет нам на руку
  2. Низкая фаза: нсинвертор, затем счётчик меняет адрес, ОЗУ выдаёт данные нового адреса, и они должны опередить следующий фронт на время установки выходного регистра
  3. Период: сумма фазесли скважность такта можно выбрать свободно
Обозначения:минимальная длительность высокой фазы такта (запись в ОЗУ)минимальная длительность низкой фазы (смена адреса и чтение ОЗУ)минимальный период такта

Для звука (48 кГц) запас огромный. Но и в быстрых применениях ОЗУ не сильно проигрывает: на быстрых сериях та же схема сдвигает с частотой около 30 МГц — примерно как интегральные регистры сдвига серии HC, — а длина регистра ограничена только объёмом памяти.

Ловушка. Такая скорость получается только при несимметричном такте (одна фаза короче другой). У меандра фазы равны, и период определяет большая из них: .
Упражнение 8.6.7

Ту же линию задержки собрали на быстрых микросхемах. Максимальные задержки: инвертор 3 нс, регистр «такт → выход» 5 нс, установка данных ОЗУ перед концом записи 4 нс, счётчик «такт → адрес» 7 нс, выборка ОЗУ 10 нс, установка выходного регистра 2 нс. Найдите наибольшую частоту сдвига при выгодной (несимметричной) скважности такта и при меандре.

Решение

Высокая фаза: нс. Низкая фаза: нс. При свободной скважности нс, МГц. У меандра обе фазы по 22 нс: нс, МГц — почти в полтора раза медленнее.

Упражнение 8.6.8 вывод

Объясните, почему линия задержки на ОЗУ даёт задержку ровно 1024 такта, хотя в каждом такте запись и чтение идут в одну и ту же ячейку. Что услышит слушатель, если счётчик адреса сделать реверсивным и в какой-то момент переключить его со счёта вверх на счёт вниз?

Решение

Внутри такта чтение предшествует записи. Всю низкую фазу адрес k неподвижен, запись запрещена (WE = 1), и выход ОЗУ показывает то, что лежит в ячейке k. Фронт такта переписывает это старое содержимое в выходной регистр, а новый отсчёт — во входной; только потом, в высокой фазе, новый отсчёт записывается в ячейку k. Запись заканчивается раньше, чем меняется адрес. Ячейка k — это одна «позиция» регистра: записанный в неё отсчёт будет прочитан при следующем посещении адреса k, а счётчик возвращается к нему через такта. Это и есть регистр сдвига длиной 1024 по каждой из восьми линий данных.

Если счётчик пойдёт назад, он будет посещать k − 1, k − 2, … — ячейки, записанные только что. Отсчёт, записанный такт назад, выйдет через 2 такта, записанный два такта назад — через 4 и т. д.: данные пойдут в обратном порядке. Слушатель услышит последние ≈ 21 мс звука, проигранные задом наперёд, — эффект «реверс», который действительно делают так в цифровых педалях. Поэтому такую схему и называют реверсивным регистром сдвига.

8.6.4Регистровые ПМЛ: автомат в одном корпусе

≈ 36 мин7 упр.
Главное
  • Регистровая ПМЛПрограммируемая матричная логика (PAL): программируемая матрица И, фиксированная матрица ИЛИ. Например, 16L8 — до 16 входов, 8 выходов. (16R8) = матрица И + фиксированное ИЛИ + D-регистры с общим тактом и обратной связью в матрицу: любой небольшой автомат в одном корпусе.
  • PALASMPALASM (PAL Assembler) — первый транслятор логических уравнений в карту перемычек ПМЛ; минимизацию делает сам разработчик. переводит уравнения в карту перемычек; ABEL и CUPL ещё и минимизируют, понимают таблицы и автоматы.
  • Не больше 7–8 произведений на выход; переходы в себя задавайте явно, иначе автомат уйдёт в 000.
  • Сумма произведений даёт статические выбросыСтатический выброс — короткий импульс на выходе, который должен был оставаться неизменным (например, 1 → 0 → 1 при смене одного входа).; лечат избыточным термом-консенсусом ( для мультиплексораМультиплексор — набор ключей с дешифратором: по двоичному адресу соединяет с выходом один из нескольких входов.).

В разделе 8.3 программируемая матрица логики (ПМЛ) была чисто комбинационнойКомбинационная схема: выход в каждый момент определяется только текущими входами — памяти нет. Строится из одних вентилей.: программируемые И, фиксированное ИЛИ, и всё. Добавим на каждый выход D-триггер с общим тактом, а выходы триггеров заведём обратно в матрицу И — получится регистровая ПМЛ. Типичный представитель — 16R8: восемь регистров с выходами на три состояния; их прямые и инверсные выходы входят в матрицу наравне с обычными входными выводами. Есть и промежуточные варианты с меньшим числом регистров (16R6, 16R4).

I1I1I2I2QQ&&&1DQQТактвыходOEобратная связь — в матрицу И× — сохранённая связьwww.reknow.ru1Программируемая матрица И. × — сохранённая перемычка: в произведение входит этот сигнал (прямой или инверсный)2Фиксированное ИЛИ. сумма произведений — единственная форма логики в ПМЛ3D-триггер. все 8 регистров тактируются общим тактом4Буфер с третьим состоянием. общий вход OE отключает выходы5Обратная связь. выход регистра снова входит в матрицу И — так получается автомат: следующее состояние зависит от текущего
Выходная ячейка регистровой ПМЛ типа 16R8 (упрощённо): × — сохранённые перемычки матрицы И, дальше фиксированное ИЛИ, D-триггер на общем такте, буфер с третьим состоянием и обратная связь с триггера назад в матрицу.
Что здесь что (5)
  1. Программируемая матрица И. × — сохранённая перемычка: в произведение входит этот сигнал (прямой или инверсный)
  2. Фиксированное ИЛИ. сумма произведений — единственная форма логики в ПМЛ
  3. D-триггер. все 8 регистров тактируются общим тактом
  4. Буфер с третьим состоянием. общий вход OE отключает выходы
  5. Обратная связь. выход регистра снова входит в матрицу И — так получается автомат: следующее состояние зависит от текущего

Сравните это с общей схемой синхронного автомата из раздела 8.4: регистр хранит текущее состояние, комбинационная логика по состоянию и входам вычисляет следующее. Регистровая ПМЛ — ровно такой автомат «общего назначения», только с ограниченным числом регистров и вентилей. В этих пределах из неё можно сделать что угодно: регистр сдвига, счётчик, то и другое сразу, детектор последовательности. На практике ПМЛ чаще всего заменяет кусок большой схемы, который иначе пришлось бы набирать из россыпи вентилей и триггеров.

Простой проект — вручную

Небольшую логику можно перенести в ПМЛ и без компьютера: нарисовать схему, выписать уравнения и превратить их в карту перемычек для программатора. Пусть нужен четырёхвходовый мультиплексор, выход которого защёлкивается по такту. В ПМЛ доступна только сумма произведений, поэтому комбинационную часть (то, что приходит на D-вход) сразу пишем в этой форме:

Мультиплексор 4 → 1 как сумма произведений
Обозначения:сигнал на D-входе триггера — следующее значение выходаадрес: выбирает один из входовинформационные входы

Каждое произведение — один информационный вход и две адресные переменные; четыре произведения складываются, и результат защёлкивается триггером. Мы не стали сначала декодировать адрес на двухвходовых вентилях, как сделали бы на россыпи: в ПМЛ это лишний проход через матрицу, а трёхвходовые И получаются «бесплатно» и быстрее. (У этой схемы есть подвох — о нём в конце пункта, в «Выбросах».)

&I0S1S0&I1S1S0&I2S1S0&I3S1S01DQТактQwww.reknow.ru1Произведение . каждое И — один терм суммы: входной сигнал и две адресные переменные2ИЛИ на 4 входа. сумма четырёх произведений3D-триггер. фиксирует результат по фронту такта4Такт. общий такт регистровой ПМЛ
Мультиплексор 4 → 1 с защёлкиванием выхода, перенесённый в регистровую ПМЛ: четыре трёхвходовых произведения, их сумма и D-триггер.
Что здесь что (4)
  1. Произведение . каждое И — один терм суммы: входной сигнал и две адресные переменные
  2. ИЛИ на 4 входа. сумма четырёх произведений
  3. D-триггер. фиксирует результат по фронту такта
  4. Такт. общий такт регистровой ПМЛ

От уравнений к перемычкам: PALASM, ABEL, CUPL

Ручной метод быстро упирается в масштаб. В ПМЛ 16L8 2048 перемычек; серьёзный проект требует пережечь сотни из них, и составить такую карту без единой ошибки способен лишь на редкость педантичный человек. Поэтому ещё фирма Monolithic Memories, придумавшая ПМЛ, выпустила транслятор PALASM (PAL Assembler). Он принимает логические уравнения вроде написанного выше и выдаёт карту перемычек, но не минимизирует их — эту часть работы делаете вы. Зато PALASM позволяет задать тестовые векторыТестовые векторы — наборы «входы → ожидаемые выходы» для проверки уравнений до программирования и готового кристалла после. — наборы входов и ожидаемых выходов — и проверить уравнения ещё до программирования кристалла.

Результат записывается в стандартном формате JEDECJEDEC — стандартный текстовый формат карты перемычек, который загружают в программатор. и передаётся программатору по последовательному порту. PALASM был доступен даже в исходных текстах на Фортране, а многие программаторы со встроенным микропроцессором (Data I/O, Digilec, Stag, Structured Design) имели его «внутри»: подключил терминал — и работай.

Следующий шаг — языки высокого уровня ABELABEL (Data I/O) — язык высокого уровня для программирования ПМЛ и ПЛМ, аналог CUPL. (Data I/O) и CUPLCUPL (Logical Devices) — язык описания программируемой логики: уравнения, таблицы истинности, автоматы; сам минимизирует и выдаёт файл JEDEC. (Logical Devices). С ними программирование ПМЛ и ПЛМПрограммируемая логическая матрица (PLA): программируются и матрица И, и матрица ИЛИ. становится лёгкой работой:

  • логику можно задавать булевыми уравнениями, таблицами истинностиПеречень значений выхода для всех комбинаций входов логической схемы., а для последовательностныхПоследовательностная схема: выход зависит и от входов, и от предыдущего состояния — в ней есть память (триггеры). схем — прямо состояниями и правилами переходов;
  • как в нормальном языке программирования, есть группы сигналов (например, адресная шина), выражения и промежуточные переменные; вместо перечисления диапазона адресов пишут что-нибудь вроде ADDR:[10..FF];
  • компилятор сам переводит таблицы в уравнения и минимизирует их до формы, подходящей для выбранного прибора (для ПМЛ — сумма произведений);
  • тестовые векторы передаются и программатору — он проверяет уже прошитый кристалл;
  • генерируется документация на запрограммированную микросхему; без неё «самодельные кристаллы» в приборе потом не отладить.
Как получить карту перемычек
ВручнуюPALASMABEL, CUPL
Входсхема на бумагелогические уравненияуравнения, таблицы истинности, автоматы
Минимизациясамисамиавтоматически
Тестовые векторы—естьесть, и для программатора
Результаткарта перемычекфайл JEDECфайл JEDEC и документация
Путь проекта на программируемой логике
Описаниевыводы, промежуточные переменные, уравнения, таблица или автомат
Компиляторподстановка переменных, перевод таблиц в уравнения
Минимизациясумма произведений, не больше 7–8 термов на выход
Файл JEDECкарта перемычек
Программаторпрожигает кристалл и прогоняет тестовые векторы

Пример 1 (комбинационная логика): шестнадцатеричный дешифратор индикатора

Стандартный дешифратор 7-сегментного кода вроде 4511 умеет только цифры 0–9, а на кодах 10–15 гасит индикатор. Для отладочного табло, которое показывает байты в шестнадцатеричном виде, нужны ещё буквы A, b, C, d, E, F. Готовой микросхемы «на каждом складе» нет — сделаем её из ПМЛ 16L8: четыре входа кода, семь выходов-сегментов.

0123456789AbCdEFabcdefgбуквы сегментов: a — верхний, далее по часовой, g — среднийwww.reknow.ru
Шестнадцать знаков, которые должен рисовать дешифратор: цифры 0–9 и буквы A, b, C, d, E, F (строчные b и d — чтобы не путать с 8 и 0).

На CUPL такой дешифратор описывается почти дословно таблицей: «код → какие сегменты горят». Не нужно ни промежуточных переменных, ни уравнений — компилятор выведет их сам.

/* Дешифратор: 4-битовый код → 7-сегментный шестнадцатеричный знак */
/* Прибор: ПМЛ 16L8 (матрица И-ИЛИ-НЕ), индикатор с общим катодом   */
/* ** Входы ** */
PIN [2..5]   = [D3..0];                  /* код знака 0…F               */
/* ** Выходы: сегмент горит при 1 ** */
PIN [19..13] = [a, b, c, d, e, f, g];
FIELD code = [D3..0];
FIELD seg  = [a, b, c, d, e, f, g];
TABLE code => seg {                      /* порядок битов: a b c d e f g */
  'h'0 => 'b'1111110;  'h'1 => 'b'0110000;  'h'2 => 'b'1101101;  'h'3 => 'b'1111001;
  'h'4 => 'b'0110011;  'h'5 => 'b'1011011;  'h'6 => 'b'1011111;  'h'7 => 'b'1110000;
  'h'8 => 'b'1111111;  'h'9 => 'b'1111011;  'h'A => 'b'1110111;  'h'B => 'b'0011111;
  'h'C => 'b'1001110;  'h'D => 'b'0111101;  'h'E => 'b'1001111;  'h'F => 'b'1000111;
}

Описание дешифратора на CUPL (синтаксис: FIELD — группа сигналов, TABLE — таблица истинности, 'h' — шестнадцатеричное и 'b' — двоичное число).

Теперь посчитаем, влезет ли это в кристалл. Каждый сегмент — функция четырёх переменных; без минимизации его сумма содержит по одному произведению (минтермуПроизведение всех входных переменных (прямых или инверсных), равное 1 ровно на одном наборе входов; соответствует одной клетке карты Карно и одному выходу дешифратора.) на каждый знак, где сегмент горит: у сегмента a это 12 знаков из 16, у g — тоже 12. А 16L8, как и все комбинационные ПМЛ, допускает не больше 7 произведений на одну сумму.

7произведений на выход 16L8Предел комбинационной ПМЛ: больше термов в одну сумму не помещается.
12минтермов у сегментов a, c, gСтолько знаков из шестнадцати их зажигают.
≤ 6после минимизацииМинимизатор укладывает каждый сегмент в 4–6 произведений.

Есть два честных выхода. Первый — минимизация (склеивание по карте Карно или законам булевой алгебрыБулева алгебра — логика переменных со значениями 1 и 0: операции И, ИЛИ, НЕ.): у сегмента a двенадцать минтермов сжимаются до шести произведений, у e — десять до четырёх. Второй — заметить, что выход 16L8 сам по себе инверсный (матрица И-ИЛИ-НЕ), и описать нули сегмента, а не единицы. Сегмент a не горит всего в четырёх знаках (1, 4, b, d), поэтому сумма по нулям содержит четыре минтерма и помещается даже без минимизации. Какой путь годится, зависит от индикатора: с общим катодом сегмент зажигается единицей, и инверсный выход ПМЛ как раз должен давать НЕ (сумма нулей); с общим анодом сегмент зажигается нулём — тогда нужна сумма по единицам.

Был и третий, плохой путь — провести выход через второй вентиль ИЛИ (обратной связью, ещё одним проходом через матрицу). Он работает, но удваивает задержку; для табло это не страшно, но решение некрасивое.

/* Сумма по единицам (так нужно для общего анода: выход 16L8 = НЕ сумма) */
a = D2 & D1  #  !D3 & D1  #  D3 & !D0  #  !D2 & !D0
  # !D3 & D2 & D0  #  D3 & !D2 & !D1 ;                 /* 12 минтермов → 6 */
e = D3 & D1  #  D3 & D2  #  D1 & !D0  #  !D2 & !D0 ;        /* 10 → 4 */
/* Сумма по нулям (общий катод: выход 16L8 = НЕ сумма нулей = сегмент) */
!a = !D3 & !D2 & !D1 & D0  #  !D3 & D2 & !D1 & !D0
   #  D3 & !D2 & D1 & D0   #  D3 & D2 & !D1 & D0 ;      /* 4 минтерма: 1, 4, b, d */
!c = D3 & D2 & D1  #  D3 & D2 & !D0  #  !D3 & !D2 & D1 & !D0 ; /* 4 → 3 */

Результат минимизации для двух сегментов (наш расчёт): сверху — суммы по единицам, снизу — по нулям. Все суммы укладываются в 7 произведений.

Упражнение 8.6.9

Шестнадцатеричный дешифратор нужно сделать на 16L8 для индикатора с общим катодом, т. е. программировать суммы по нулям сегментов. Сколько минтермов содержит такая сумма для сегмента b (без минимизации)? А для индикатора с общим анодом: сколько минтермов у суммы по единицам сегмента a до минимизации и сколько произведений после неё?

Решение

Сегмент b горит в знаках 0, 1, 2, 3, 4, 7, 8, 9, A, d — десять знаков, не горит в шести (5, 6, b, C, E, F): сумма по нулям — 6 минтермов, помещается в 16L8 без минимизации. Сегмент a горит в двенадцати знаках (всех, кроме 1, 4, b, d): 12 минтермов — больше предела 7. После минимизации — 6 произведений, помещается. Для общего катода самая длинная сумма по нулям — 6 минтермов (у b и e), так что весь дешифратор входит в кристалл вообще без минимизации.

Пример 2 (последовательностная схема): автомат продажи напитка

Любой синхронный автомат — это набор состояний и правила перехода между ними по каждому фронту такта; правило зависит от текущего состояния и от входов перед фронтом. Такой автомат помещается в регистровую программируемую логику, если:

  • а) разрядов регистра хватает, чтобы закодировать все состояния (4 бита — до 16 состояний);
  • б) хватает входов и произведений для правил перехода.

Классическая учебная задача — автомат, который выдаёт бутылку, когда опущено не меньше 25 центов. Монетоприёмник сам «глотает» и опознаёт монету и на один такт выставляет двухбитовый код (C1, C0): 01 — 5 центов, 10 — 10 центов, 11 — 25 центов, 00 — монеты нет. Автомат копит сумму и, как только её хватает, на один такт выдаёт сигнал «бутылка». Начнём не с картинки, а с таблицы переходов — по ней автомат проще проверять.

00монеты нетC1C0 = 00: автомат остаётся в текущем состоянии (переход задан явно).
015 центов (n)nickel
1010 центов (d)dime
1125 центов (q)quarter
Таблица переходов автомата; в ENOUGH выдаётся бутылка, следующий такт — безусловно в S0
Состояние (код)нет монеты5 ц10 ц25 ц
S0 (000)S0S5S10ENOUGH
S5 (001)S5S10S15ENOUGH
S10 (010)S10S15S20ENOUGH
S15 (011)S15S20ENOUGHENOUGH
S20 (100)S20ENOUGHENOUGHENOUGH
ENOUGH (101)S0S0S0S0
ndqndqndqnd, qn, d, qвсегданетнетнетнетнет05101520≥25www.reknow.ru1S0 — 0 центов. начальное состояние; сюда ведёт reset2S5. накоплено 5 центов3S20. из 20 центов любая монета даёт «достаточно»4ENOUGH (≥25). выход «бутылка»; по следующему такту — безусловно в S05Петля «нет». переход в себя без монеты — его надо задать явно, иначе ПМЛ уйдёт в 000
Та же таблица переходов в виде диаграммы (в кружках — накопленная сумма в центах; n — 5 ц, d — 10 ц, q — 25 ц, «нет» — монеты нет). Из «≥25» автомат выдаёт бутылку и возвращается в 0.
Что здесь что (5)
  1. S0 — 0 центов. начальное состояние; сюда ведёт reset
  2. S5. накоплено 5 центов
  3. S20. из 20 центов любая монета даёт «достаточно»
  4. ENOUGH (≥25). выход «бутылка»; по следующему такту — безусловно в S0
  5. Петля «нет». переход в себя без монеты — его надо задать явно, иначе ПМЛ уйдёт в 000

Описание на CUPL повторяет таблицу почти построчно. Сначала — назначение выводов; добавлен вход reset, переводящий автомат в S0. Затем состояниям присваиваются двоичные коды (здесь — просто накопленная сумма: 0, 5, …), и для каждого состояния перечисляются переходы. Там же указываются выходы, которые нужно формировать в состояниях или на переходах.

«Бутылку» мы сделали отдельным регистровым выходом: тогда её не надо получать дешифрацией состояний, и она не дрожит при переходах. Строго говоря, наружу нужен только этот выход, а биты состояния Q0–Q2 могли бы жить во внутренних регистрах — у некоторых программируемых приборов такие есть в дополнение к выходным.

/* Автомат продажи: бутылка за 25 центов (регистровая ПМЛ 16R6) */
/* ** Входы ** */
PIN 1 = clk;   PIN 2 = c0;   PIN 3 = c1;   PIN 4 = reset;
/* ** Регистровые выходы ** */
PIN 14 = Q0;   PIN 15 = Q1;   PIN 16 = Q2;      /* код состояния          */
PIN 17 = !bottle;                              /* «выдать», активный 0  */
/* Коды состояний = накопленная сумма */
$define S0  'b'000      $define S5  'b'001      $define S10 'b'010
$define S15 'b'011      $define S20 'b'100      $define ENOUGH 'b'101
/* Что пришло от монетоприёмника (и нет сброса) */
nocoin  = !c1 & !c0 & !reset;    nickel  = !c1 & c0 & !reset;
dime    =  c1 & !c0 & !reset;    quarter =  c1 & c0 & !reset;
field statebit = [Q2..0];
sequence statebit {
present S0   if nocoin  next S0;   if nickel next S5;
             if dime    next S10;  if quarter next ENOUGH out bottle;
present S5   if nocoin  next S5;   if nickel next S10;
             if dime    next S15;  if quarter next ENOUGH out bottle;
present S10  if nocoin  next S10;  if nickel next S15;
             if dime    next S20;  if quarter next ENOUGH out bottle;
present S15  if nocoin  next S15;  if nickel next S20;
             if dime    next ENOUGH out bottle;  if quarter next ENOUGH out bottle;
present S20  if nocoin  next S20;
             if nickel  next ENOUGH out bottle;  if dime next ENOUGH out bottle;
             if quarter next ENOUGH out bottle;
present ENOUGH          next S0;
}

Автомат продажи на языке CUPL (в нашей записи): present — текущее состояние, if … next … — переход, out — выход на переходе.

Ловушка. Переход «в себя» задавайте явно — как строки if nocoin next …. Если ни одно условие не выполнено, D-входы регистров просто не получают единиц, и автомат безусловно сбрасывается в 000. Причина в устройстве: все условия собираются в суммы произведений на D-входах, и «ничего не выполнено» означает «все нули».

На том же механизме держится и вход reset: он входит во все промежуточные переменные nocoin, nickel, dime, quarter. При reset = 1 ни одна из них не истинна — все D-входы обнуляются, и автомат оказывается в S0.

Уравнения, которые выдаёт компилятор, на исходное описание совсем не похожи: и состояния, и монеты закодированы двоичными числами, а логика оперирует отдельными битами. Выбери мы другие коды состояний (у нас — возрастающий двоичный 0–5), уравнения изменились бы до неузнаваемости.

Совет. Пример легко помещается в ПМЛ 16R6 (8 произведений на регистр). Если проект не помещается, попробуйте перекодировать состояния: другой выбор кодов часто сокращает уравнения.
Q0.d     = !Q2 & c0 & c1 & !reset
         # !Q2 & Q0 & !c0 & !reset
         # !Q1 & !Q0 & c0 & !reset
         # !Q2 & !Q0 & c0 & !reset
         # Q2 & !Q1 & !Q0 & c1 & !reset ;
Q1.d     = !Q2 & Q1 & !Q0 & !c1 & !reset
         # !Q2 & Q1 & !c0 & !c1 & !reset
         # !Q2 & !Q1 & c1 & !c0 & !reset
         # !Q2 & !Q1 & Q0 & c0 & !c1 & !reset ;
Q2.d     = !Q2 & Q1 & c1 & !reset
         # !Q2 & c0 & c1 & !reset
         # Q2 & !Q1 & !Q0 & !reset
         # !Q2 & Q1 & Q0 & c0 & !reset ;
bottle.d = !Q2 & c0 & c1 & !reset
         # !Q2 & Q1 & Q0 & c1 & !reset
         # Q2 & !Q1 & !Q0 & c0 & !reset
         # Q2 & !Q1 & !Q0 & c1 & !reset ;

Уравнения D-входов автомата продажи после минимизации (наш расчёт; неиспользуемые коды 110 и 111 ведут в S0).

Модель: автомат продажи на регистровой ПМЛ — опускайте монеты и смотрите на коды состояний
Упражнение 8.6.10 задача

Проверьте уравнения D-входов на пяти переходах: из S0 монетой 10 центов, из S15 монетой 10 центов, из S20 монетой 5 центов, из S10 без монеты и из неиспользуемого кода 111 при монете 25 центов. Для каждого перехода найдите, какие произведения равны 1, и запишите и bottle после фронта.

Решение

Везде reset = 0.

S0 (000), 10 ц (c1 c0 = 10). Q0.d: все термы требуют либо c0 = 1, либо Q0 = 1, либо Q2 = 1 → 0. Q1.d: терм = 1 → 1. Q2.d: нужны Q1, c0 или Q2 → 0. bottle: нужны c0 или Q1Q0 или Q2 → 0. Итог 010 = S10. Верно.

S15 (011), 10 ц. Q0.d: = 1 → 1. Q1.d: первые два терма требуют , третий и четвёртый — → 0. Q2.d: = 1 → 1. bottle: = 1. Итог 101 = ENOUGH, бутылка выдана. Верно.

S20 (100), 5 ц (01). Q0.d: = 1 → 1. Q1.d: все термы требуют → 0. Q2.d: = 1 → 1. bottle: = 1. Итог 101 = ENOUGH с бутылкой. Верно.

S10 (010), монеты нет. Q1.d: и = 1 → 1. Q0.d, Q2.d, bottle: каждый терм требует хотя бы одной монеты или Q2 = 1 → 0. Остаётся 010 = S10. Верно: переход в себя задан явно.

111, 25 ц. Каждый терм Q0.d, Q1.d, Q2.d и bottle содержит либо , либо — при Q2 = Q1 = Q0 = 1 все они равны 0. Итог 000 = S0, бутылки нет: «потерянный» автомат сам возвращается в начало, а не выдаёт бесплатный напиток.

Упражнение 8.6.11

Автомат посложнее: напиток стоит 40 центов, принимаются монеты 10 и 25 центов, а сдача выдаётся монетами по 5 центов — по одной за такт. Автомат копит сумму, затем в одном состоянии выдаёт напиток, «помня», сколько сдачи должен, и далее по такту на каждую монету сдачи. Сколько всего состояний нужно и сколько разрядов регистра для их кодирования?

Решение

Накопление. Достижимые суммы меньше 40: 0, 10, 20, 25, 30, 35 — шесть состояний (15 и 5 недостижимы: монет по 5 нет). Из каждого «нет монеты» — переход в себя.

Выдача. Наибольшая сумма перед последней монетой — 35, наибольшая монета — 25: итог до 60, переплата 0, 5, 10, 15 или 20 центов, т. е. сдача монеты. Состояние выдачи должно помнить c, поэтому их пять: (в каждом — выход «напиток»). Из суммы s монетой m — в с , если , иначе в состояние .

Сдача. ; при ; состояние выдаёт одну монету и переходит в , . Состояний — четыре.

Итого состояний — 4 разряда (16 кодов, один лишний — его ведите в начальное состояние). Напиток выдаётся при любой сумме ≥ 40, потому что все такие переходы ведут в одно из ; монеты, опущенные во время сдачи, в этой версии теряются — в настоящем автомате монетоприёмник на это время блокируют.

Упражнение 8.6.12 проектирование

Нарисуйте диаграмму состоянийГраф: кружки — состояния автомата, стрелки — переходы по такту с условиями на входах. детектора последовательности: на вход поступает поток битов (по одному биту на такт), выход должен быть равен 1 в течение такта после того, как последние четыре бита образовали 1011. Последовательности могут перекрываться: в потоке 1011011 детектор должен сработать дважды. Сколько разрядов регистра понадобится?

Решение

Состояние — «сколько последних битов совпадает с началом образца». S0 — ничего, S1 — «1», S2 — «10», S3 — «101», S4 — «1011» (выход = 1, автомат Мура).

  • S0: 1 → S1, 0 → S0.
  • S1 («1»): 0 → S2, 1 → S1 (последняя 1 — снова начало образца).
  • S2 («10»): 1 → S3, 0 → S0 («100» не продолжает образец ни с какого места).
  • S3 («101»): 1 → S4, 0 → S2 (из «1010» хвост «10» — начало образца).
  • S4 («1011»): 1 → S1 (хвост «1»), 0 → S2 (хвост «10»). Именно эти переходы обеспечивают перекрытие: в 1011011 после первого срабатывания автомат из S4 по 0 идёт в S2, затем по 1 и 1 — в S3 и S4, второе срабатывание.

Правило выбора «отката» при ошибке: переходим в состояние, равное длине самого длинного хвоста принятых битов, совпадающего с началом образца (так строится автомат в алгоритме Кнута — Морриса — Пратта). Пять состояний — 3 разряда; три неиспользуемых кода направьте в S0. В ПМЛ это четыре коротких уравнения; на CUPL — как в примере с автоматом продажи, с явными переходами в себя там, где они есть.

Где программируемая логика выигрывает

  • Автоматы. Как в примерах выше: ПЛИС естественно вписывается в любой синхронный автомат, и нет смысла городить ряд D-триггеров с россыпью логики, когда один недорогой корпус делает то же самое.
  • «Клей». В любой большой схеме найдутся клубки вентилей, инверторов и триггеров между крупными узлами; их пренебрежительно называют связующей логикой («клеем», glue logic). ПЛИС обычно сокращает число корпусов в 4 раза и больше, а схема становится понятнее. Вентилей в ПЛИС много, поэтому всю логику можно поставить перед регистрами — тогда выходы строго синхронны, — вместо того чтобы комбинировать выходы регистров вентилями, после чего выходы меняются не одновременно (рисунок ниже).
  • Гибкость. Окончательная логика прибора часто неясна, а «поиграть» с макетом нужно уже сейчас. ПЛИС перепрограммируется без перемонтажа — схема становится похожа на программу.
  • Варианты прибора. На одной и той же плате можно выпускать несколько версий изделия, по-разному прошив ПЛИС: например, компьютер с памятью 256К или 1М, где меняется только одна микросхема.
  • Разработка и склад. Проект делается быстрее (если вы хорошо ориентируетесь в теме), а на складе держат несколько типов ПЛИС вместо дюжин типов микросхем средней интеграции. Две GALGAL (generic array logic, Lattice) — электрически стираемая КМОП-ПМЛ с макроячейками; GAL16V8 имитирует любую 20-выводную ПМЛ. (generic array logic) с программируемой архитектурой заменяют целую линейку ПМЛ: 20-выводная GAL16V8 и 24-выводная GAL20V8 имитируют каждая по 21 стандартной ПМЛ, и даже «гибриды» вроде нечётного числа регистров.
  • Выводы, которые бывают и входами. Выходы на три состояния заведены внутри кристалла в матрицу И, поэтому их можно использовать как входы. У 16L8 в матрицу входят 16 сигналов (каждый в прямом и инверсном виде): 10 — с входных выводов и 6 — обратные связи с выходов на три состояния. Эти 6 выводов можно сделать постоянными входами (навсегда запретив выход: терм управления третьим состоянием = 0) или двунаправленнымиДвунаправленный ключ пропускает сигнал в обе стороны — как механический выключатель: исток и сток ПТ взаимозаменяемы., управляя третьим состоянием логической переменной.
× 4меньше корпусовПЛИС вместо «клея» из вентилей и триггеров обычно сокращает число корпусов в 4 раза и больше.
21ПМЛ имитирует одна GALGAL16V8 (20 выводов) и GAL20V8 (24 вывода) — каждая по 21 стандартной ПМЛ.
16сигналов в матрице И 16L810 — с входных выводов и 6 — обратные связи с выходов на три состояния.
Вентили(матрица)РегистрDВходыВыходытактобр. связьаwww.reknow.ru
РегистрDВентилиВыходытактвходыбwww.reknow.ru

Где поставить логику: а — в ПЛИС всё вычисляется до регистров, и выходы меняются строго вместе; б — на россыпи вентили часто стоят после регистров, и выходы «расползаются» по задержкам.

Потомки ПМЛ: GAL, СПЛИС, вентильные матрицы

Самая гибкая программируемая логика — стираемые КМОП-потомки ПМЛ фирм Lattice, VTI, Altera и других. GAL фирмы Lattice стирается электрически, так что один и тот же кристалл можно прошивать много раз. Главное же новшество — программируются сами выходные структуры, макроячейкиМакроячейка — программируемая выходная структура GAL/СПЛИС: регистр или обход, полярность, третье состояние и источник обратной связи задаются при программировании.. Каждый выход может быть регистровым или комбинационным, прямым или инверсным; программируются управление третьим состоянием и источник обратной связи (до буфера, после него, с соседнего вывода). Поэтому одна GAL16V8 подменяет любую обычную 20-выводную ПМЛ, а GAL20V8 — любую 24-выводную, и перечень комплектующих остаётся коротким.

ИЛИтермов=1полярностьD-триг.тактMUXкомб./рег.вход/выходупр. 3-м сост.MUXобр. связив матрицу Ис соседней ячейки →www.reknow.ru1ИЛИ термов. сумма произведений из матрицы И2Исключающее ИЛИ. программируемая полярность: второй вход 0 — прямой выход, 1 — инверсный3D-триггер. регистровый вариант выхода4MUX «комб./рег.». выбирает: выход с регистра или в обход него5Управление третьим состоянием. выход можно включить, выключить или сделать двунаправленным6MUX обратной связи. что вернуть в матрицу И: регистр, вывод или соседнюю ячейку
Макроячейка GAL: при программировании выбираются полярность, регистр или обход, управление третьим состоянием и то, какой сигнал вернётся в матрицу.
Что здесь что (6)
  1. ИЛИ термов. сумма произведений из матрицы И
  2. Исключающее ИЛИ. программируемая полярность: второй вход 0 — прямой выход, 1 — инверсный
  3. D-триггер. регистровый вариант выхода
  4. MUX «комб./рег.». выбирает: выход с регистра или в обход него
  5. Управление третьим состоянием. выход можно включить, выключить или сделать двунаправленным
  6. MUX обратной связи. что вернуть в матрицу И: регистр, вывод или соседнюю ячейку

Altera пошла другим путём: её КМОП-логика стирается ультрафиолетом, как СППЗУ, через окно из кварцевого стекла над кристаллом, — это СПЛИССПЛИС — стираемая ультрафиолетом КМОП-ПЛИС (Altera EP320 и др.): кварцевое окно над кристаллом, как у СППЗУ. (стираемые ПЛИС). Самая маленькая, EP320, тоже имеет выходные макроячейки и имитирует все 20-выводные ПМЛ, как GAL16V8, но в отличие от биполярных ПМЛ потребляет совсем немного. Есть и более крупные СПЛИС, программируемые микросеквенсоры и т. п.; стираемую КМОП-логику с макроячейками делают также Cypress и VTI.

Совсем иначе устроены вентильные матрицы Xilinx: огромное число конфигурируемых логических блоков, а схема их соединений хранится во внутреннем (энергозависимом) ОЗУ кристалла. После включения питания конфигурация загружается из внешнего ПЗУПостоянное запоминающее устройство: для каждого адреса хранит слово (обычно 8 бит); реализует любую таблицу истинности, если хватает адресных входов. или от микропроцессора — по сути, кристалл каждый раз заново «прошивается».

Семейства программируемой логики
ПМЛ / GALСПЛИС (Altera)Вентильные матрицы Xilinx
Стираниебиполярные — нет; GAL — электрическиультрафиолетом (кварцевое окно)конфигурация в ОЗУ — грузится при включении
Структураматрица И-ИЛИ + макроячейкимакроячейки, микросеквенсорымного конфигурируемых логических блоков
ПримерGAL16V8, GAL20V8EP320—

Скорость и потребление

Первые биполярные ПМЛ (Monolithic Memories, затем National и AMD) много потребляли при скромной скорости, а самые быстрые требовали уйму мощности. КМОП-приборы гораздо лучше по обоим параметрам:

Скорость и потребление программируемой логики
ПриборТехнологияЗадержкаТок потребления
16L8 / 16R8 (первые)биполярная40 нс≈ 200 мА
ПМЛ «половинной мощности»биполярная35 нс90 мА
16R8D / 16P8-7 (AMD)биполярная10 / 7,5 нсдо 180 мА
GAL20V8-15Q («¼ мощности»)КМОП15 нс45 мА
EP320-1 (Altera)КМОП25 нс5 мА

Для приборов на батареях ещё важнее, что кристаллы Altera (и ПМЛ серии Z фирмы AMD) умеют уходить в резервный режим с практически нулевым потреблением. Направление развития очевидно: быстрее и экономнее, и репутация программируемой логики как «пожирателя ватт» уходит в прошлое.

Упражнение 8.6.13

Автомат управления шаговым двигателем собран на регистровой ПЛИС: задержка «такт → выход регистра» 8 нс, прохождение обратной связи через матрицу И-ИЛИ до D-входа 10 нс, время установки регистра 7 нс. Какова наибольшая частота такта? В старой версии прибора стояли шесть биполярных ПМЛ по 180 мА; какая мощность от источника 5 В уходила на них и какая уйдёт на шесть КМОП-GAL по 45 мА?

Решение

Следующее состояние вычисляется из текущего: выход регистра → матрица → D-вход к следующему фронту. нс, МГц.

Мощность: Вт против Вт — вчетверо меньше (отсюда и название «¼ мощности»). Для сравнения, шесть EP320 по 5 мА взяли бы всего 0,15 Вт.

Выбросы: подвох суммы произведений

Вернёмся к мультиплексору. Возьмём самый простой, на два входа: . Пусть оба информационных входа A и B равны 1. Тогда выход должен быть 1 при любом S — и логически он им и остаётся. Но физически получается из S через инвертор и запаздывает на его задержку. Когда S падает из 1 в 0, произведение гаснет сразу, а загорается лишь спустя задержку инвертора. В этот промежуток оба произведения равны нулю, и на выходе проскакивает короткий нулевой импульс — выброс (glitch). Это проявление логических состязанийГонка сигналов: два сигнала, вызванные одним событием, приходят на вентиль с разной задержкой, и на выходе возникает всплеск.: сигнал идёт к выходу по двум путям с разной задержкой.

1S&&1ABA·S + B·S̅www.reknow.ru

Вентильный эквивалент 2-входового мультиплексора: при A = B = 1 и спаде S возможен выброс «в нуль».

SS̅ (через инвертор)A·SB·S̅Q = A·S + B·S̅Q с термом A·Bвыбросwww.reknow.ru
A = B = 1, S падает: пока инвертор не переключился, оба произведения равны нулю, и на выходе проскакивает выброс. С термом A·B выход стоит в единице.

Лекарство на первый взгляд странное: добавить произведение , которое логически ничего не меняет. При A = B = 1 оно держит выход в единице, что бы ни происходило с S и его инверсией. Такой терм называют избыточным, или консенсусомКонсенсус термов и — терм ; добавление его не меняет функцию: . двух других.

Мультиплексор без выброса
Обозначения:основные произведения мультиплексораизбыточный терм (консенсус): функцию не меняет, но держит Q = 1 при A = B = 1, пока S переключается
Модель: выброс в мультиплексоре и избыточный терм

Где искать такие места в больших выражениях? Удобнее всего на карте КарноТаблица истинности, разложенная по двум осям в порядке кода Грея (00, 01, 11, 10): соседние клетки отличаются одной переменной, и группы единиц дают простые произведения.. Каждая группа на карте — одно произведение суммы. Выход истинен, пока истинна хоть одна группа; но переход из одной группы в соседнюю может дать выброс, если переменные первой группы «уходят» раньше, чем устанавливаются переменные второй. Такие места называют логическими рисками.

Карта Карно мультиплексора: группы (верхняя строка, 01–11) и (нижняя, 11–10) соседствуют по клетке AB = 11; избыточная группа AB накрывает этот переход
AB = 00011110
S = 00110
S = 10011
Правило. Чтобы при смене одной переменной не было выбросов, любые две соседние единицы карты должны лежать внутри одной общей группы — для этого и добавляют избыточные термы. То же правило можно применять прямо к булеву выражению через консенсусы, что удобнее, когда переменных больше четырёх и карта становится неудобной.
Два вида выбросов
Статический выбросДинамический выброс
Что должно бытьвыход не меняетсявыход делает один переход
Что происходиткороткий импульс 1 → 0 → 1 (или 0 → 1 → 0)выход переключается несколько раз
Лекарствоизбыточный терм-консенсусизбегать внутренних гонок в структуре

В нашем примере выброс статический: выход должен был стоять на месте. Бывают и динамические: выход, который должен переключиться один раз, переключается несколько раз подряд. В программируемой логике внутренних гонок такого рода можно избежать, но средства проектирования — PALASM, ABEL, CUPL — за вас этого не сделают.

Ловушка. Минимизаторы PALASM, ABEL и CUPL как раз и выбрасывают избыточные термы — с их точки зрения это мусор. Нужные консенсусы приходится явно защищать от минимизации (или ставить регистр после логики, чтобы выбросы не выходили наружу).
Упражнение 8.6.14 задача

Функция реализована суммой произведений, а инверсия A получается через инвертор с задержкой. Покажите, при каком изменении входов возможен статический выброс, и докажите, что терм устраняет выбросы при изменении любой одной переменной, не меняя функции.

Решение

Функция не меняется (теорема о консенсусе):

Где выброс. При B = C = 1 функция равна 1 при любом A: при A = 0 её держит , при A = 1 — . Когда A меняется 1 → 0, терм гаснет сразу, а загорается лишь после задержки инвертора: на это время F = 0 — выброс «в нуль». При подъёме A гореть успевают оба терма, выброса нет.

Почему других выбросов нет. Выброс при изменении одной переменной возможен, только если две соседние единицы карты, отличающиеся этой переменной, покрыты разными термами. Изменение B или C: термы, содержащие их, не содержат их дополнений, поэтому каждый терм либо остаётся постоянным, либо функция действительно меняется. Единственная пара соседних единиц в разных термах — клетки B = C = 1, A = 0/1, и терм покрывает обе, оставаясь равным 1 весь переход. От одновременного изменения нескольких переменных («функциональных» выбросов) избыточные термы не спасают.

Упражнение 8.6.15

Сколько избыточных термов надо добавить к мультиплексору на 16 входов (4 адресных бита), чтобы при смене любого одного адресного бита не было выбросов? И сколько всего произведений будет в сумме у 8-входового мультиплексора (основные плюс избыточные)?

Решение

Выброс возможен, когда меняется один адресный бит, а оба информационных входа, между которыми идёт переключение, равны 1. Значит, на каждую пару адресов, отличающихся одним битом, нужен свой консенсус: например, для адресов 0 и 1 у 4-входового мультиплексора — . Таких пар столько, сколько рёбер у n-мерного куба: . Для : терма. Для : избыточных плюс 8 основных — 20 произведений. В ПМЛ с 7–8 произведениями на выход это уже не помещается; кроме того, при одновременной смене двух адресных битов выброс всё равно возможен — надёжнее защёлкивать выход регистром, как в нашей ПМЛ-реализации.

8.6.5Большие последовательностные микросхемы

≈ 8 мин2 упр.
Главное
  • FIFOFIFO («первым вошёл — первым вышел») — очередь слов с раздельными тактами записи и чтения; сглаживает пачки данных. — очередь с раздельными тактами записи и чтения: сглаживает пачки данных, но не спасает, если приёмник в среднем медленнее.
  • Умножитель частоты даёт среднюю частоту — дробные коэффициенты, но импульсы неравномерны.
  • БИС: частотомеры, вольтметры, синтезаторы, микропроцессоры и однокристальные микроконтроллеры.

Большие (БИС) и сверхбольшие (СБИС — более тысячи вентилей на кристалле) микросхемы делают в одном корпусе довольно сложные устройства. Возьмём несколько показательных примеров.

FIFO — «первым вошёл, первым вышел»

Представьте склад с двумя воротами. В одни ворота грузовики привозят коробки в своём темпе, из других их забирают в своём. Кладовщик ведёт учёт и выдаёт коробки строго в порядке поступления. Привезённая коробка не ждёт, пока её «протолкнут» следующие: она сразу проходит через склад и встаёт в очередь у ворот выдачи. Это и есть FIFO.

По виду она похожа на регистр сдвига — данные выходят в том же порядке, в каком вошли. Но в регистре сдвига слово продвигается только тогда, когда приходят новые биты и такты, а в FIFO оно «проваливается» к выходу само, с малой задержкой (её называют временем пролёта, обычно 1–25 мкс), и ждёт там. Записью и чтением управляют раздельные тактовые сигналы, а микросхема сама помнит, что записано и что уже прочитано.

Источниктакт записиFIFOвремя пролётаПриёмниктакт чтенияфлаги «пусто» / «полно»www.reknow.ru1Источник. пишет слова в своём темпе — своим тактом записи2Вход FIFO. слово сразу «проваливается» по очереди к выходу3Время пролёта. сколько слово идёт к выходу: от нуля (IDT7202) до 1–25 мкс4Очередь у выхода. слова ждут в порядке поступления5Приёмник. забирает слова своим тактом чтения, когда готов6Флаги «пусто/полно». FIFO сама помнит, что записано и что прочитано
FIFO развязывает два темпа: источник пишет своим тактом, приёмник читает своим, а слова ждут в очереди у выхода в порядке поступления.
Что здесь что (6)
  1. Источник. пишет слова в своём темпе — своим тактом записи
  2. Вход FIFO. слово сразу «проваливается» по очереди к выходу
  3. Время пролёта. сколько слово идёт к выходу: от нуля (IDT7202) до 1–25 мкс
  4. Очередь у выхода. слова ждут в порядке поступления
  5. Приёмник. забирает слова своим тактом чтения, когда готов
  6. Флаги «пусто/полно». FIFO сама помнит, что записано и что прочитано

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

Типичные FIFO
74F433IDT7202
ТехнологияТТЛТранзисторно-транзисторная логика: биполярное семейство, питание +5 В, порог ≈1,3 В, заметный ток покоя. Серии LS, ALS, AS, F.КМОП
Организация64 слова × 4 бита4096 × 9
Частота10 МГц15 МГц
Время пролёта4 мкснулевое
Правило. FIFO не нужна, если приёмник всегда успевает забрать слово до прихода следующего (говоря языком программистов, если максимальная латентность приёмника меньше минимального интервала между словами). И она бесполезна, если приёмник в среднем медленнее источника: FIFO сглаживает только пачки, а не постоянную нехватку скорости.
Сколько слов накопится за пачку
Обозначения:нужная ёмкость FIFO, словслов в пачкечастота записи в пачкечастота непрерывного чтения (меньше )
За пачку длительностью приёмник успевает забрать слов; остальное ждёт в очереди.
Упражнение 8.6.16

Линейный датчик изображения выдаёт строку из 2048 пикселей с частотой 10 МГц, затем пауза. Микроконтроллер читает пиксели из FIFO непрерывно с частотой 4 МГц. Какой минимальной ёмкости нужна FIFO (слов, с округлением вверх) и какой должна быть пауза между строками, чтобы очередь не росла от строки к строке?

Решение

Строка длится мкс. За это время микроконтроллер заберёт слова, так что к концу строки в FIFO останется — нужно не меньше 1229 слов (на практике берут ближайшую стандартную ёмкость, 2048). Остаток читается за мкс; пауза должна быть не короче, иначе к началу новой строки очередь не опустеет. Проверка «в среднем успевает»: слова/мкс — ровно на пределе.

Умножитель частоты (rate multiplier)

Счётчик по модулю n делит частоту только на целое число. А если нужно 0,3 от тактовой? Умножитель частоты выдаёт последовательность импульсов, средняя частота которой связана с тактовой произвольной рациональной дробью. Трёхдекадный двоично-десятичный умножитель, например, даёт входной частоты, где — трёхзначное число на трёх двоично-десятичных входах.

3-декадный умножитель частоты
Обозначения:средняя частота выходных импульсовтактовая частотатрёхзначное число на трёх двоично-десятичных входах
Счётчик по модулю nУмножитель частоты
Коэффициенттолько (целое n)любая дробь (или )
Пример: нельзяможно: nnn = 300
Равномерность импульсовстрого периодическиенеравномерные: задана лишь средняя частота
Микросхемы'160–'163, '40103'97 (6 разр., двоичный), '167 (BCD)
Ловушка. Выходные импульсы умножителя в общем случае идут неравномерно: каждый совпадает с каким-то входным тактом, и вместе они образуют причудливый узор, у которого задана только средняя частота. Если нужна ровная частота, после умножителя ставят делитель — он «размазывает» неравномерностьНеравномерность — размах пульсаций АЧХ внутри полосы пропускания, в децибелах. (пример — в разделе 8.7). Микросхемы: '97 (6-разрядный двоичный) и '167 (двоично-десятичный).
Модель: умножитель частоты — средняя частота и неравномерность импульсов
Упражнение 8.6.17

Тактовая частота 2 МГц. Нужны две частоты: 400 кГц и 700 кГц. Какую из них можно получить счётчиком по модулю n, а какую — только умножителем частоты (в среднем)?

Решение

Счётчик даёт : 2 МГц/5 = 400 кГц. Для 700 кГц понадобилось бы n ≈ 2,86 — не целое. Умножитель с выдаёт 350 импульсов на каждые 1000 тактов — в среднем 700 кГц, но интервалы между импульсами то 2, то 3 периода такта (1 или 1,5 мкс), распределённые по-разному у разных микросхем.

Другие большие микросхемы

Готовые БИС: от узких к универсальным
ЧастотомерыIntersil: до 8 декад, блокировка входа, формирователи индикатора
Цифровые вольтметрыICL7136 (3½), ICL7129 (4½) — от батареи 9 В
Специального назначениясинтезаторы, ЦОС, связь — обычно вместе с микропроцессором
Массовый рынокчасы, калькуляторы, синтез речи
Микропроцессорыот 80386/68020 до однокристальных микроконтроллеров

Если задача массовая, почти наверняка для неё уже есть готовая БИС — и с ней схема сокращается до нескольких внешних деталей.

  • Частотомеры. У Intersil хороший набор счётчиков-частотомеров на кристалле: блокировка входа для точного отсчёта интервалов, до восьми декад двоично-десятичного счёта, формирователи для индикатора.
  • Цифровые вольтметры: АЦП с синхронизацией, счётчик и управление индикатором в одном корпусе. Пример — экономичный 3½-разрядный ICL7136 и 4½-разрядный ICL7129; оба работают с жидкокристаллическим 7-сегментным индикатором от одной батареи 9 В. Внутри большинства недорогих мультиметров — именно такие кристаллы.
  • Специального назначения: синтезаторы частотыСинтезатор частоты — ФАПЧ с программируемыми делителями: выход меняется с шагом . для радиосвязи; узлы цифровой обработки сигналов (умножители с накоплением, цифровые фильтры, корреляторы, арифметические устройства); передача данных (универсальные асинхронные приёмопередатчики, модемы, сетевые интерфейсы, шифраторы и дешифраторы, преобразователи последовательных форматов). Обычно они работают в паре с микропроцессором, а многие — только с ним.
  • Массовый рынок: часы, таймеры, кодовые замки, калькуляторы, детекторы дыма, телефоны, музыкальные синтезаторы, генераторы ритма и аккомпанемента, синтез (и отчасти распознавание) речи — отсюда «говорящие» лифты, автомобили и кухонные приборы. Огромный рынок открывает автомобильная электроника: управление двигателем, системы предотвращения столкновений.
  • Микропроцессоры — главное «чудо» больших микросхем, компьютер на кристалле. На одном полюсе — мощные 32-разрядные 68020/030 и 80386/486 с предвыборкой команд, виртуальной памятью и арифметическими сопроцессорами, а также кристаллы вроде MicroVAX, повторяющие архитектуру больших машин. На другом — однокристальные микроконтроллеры с памятью и вводом-выводом на борту, работающие самостоятельно. Типичный пример — Toshiba TLCS-90: маломощный КМОП-контроллер с 6-канальным 8-разрядным АЦП, таймерами, ОЗУ и ПЗУ, 20 двунаправленными линиями ввода-вывода, последовательным портом и двумя портами управления шаговыми двигателями. Он рассчитан больше на управление, чем на вычисления, — как и сегодняшние микроконтроллеры в бытовой технике.

Вычислительная мощность и объём памяти растут поразительно быстро: в течение 1980-х ёмкость одного кристалла памяти выросла с 16 Кбит до 1 Мбит, а цена бита падала на порядок каждые несколько лет. Это и есть знаменитая «кривая обучения» полупроводниковой промышленности.

16 Кбит → 1 Мбитна кристаллеЁмкость одного кристалла памяти за 1980-е выросла в 64 раза.
×10дешевле битЦена бита памяти падала на порядок каждые несколько лет.