Электроника:Цифровая электроника/Сдвиговые регистры/Универсальные сдвиговые регистры: параллельный вход, параллельный выход (PIPO)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Макаров В. (valemak) Контакты:</br>* Habr: @vakemak</br>* Сайт: www.valemak.com</br>Перевёл статей: 648.
Проверка/Оформление/Редактирование: Мякишев Е.А.


Универсальные сдвиговые регистры: параллельный вход, параллельный выход (PIPO)[1]

Назначение сдвигового регистра с параллельным входом/выходом состоит в том, чтобы принять параллельные данные, произвести сдвиг, а затем вывести, как показано на рисунке 1 ниже.

Универсальный сдвиговый регистр – это универсальное устройство в дополнение к функции параллельного ввода/вывода.

Рис. 1. Универсальный сдвиговый регистр – это универсальное устройство в дополнение к функции параллельного ввода/вывода.
Рис. 1. Универсальный сдвиговый регистр – это универсальное устройство в дополнение к функции параллельного ввода/вывода.

На рисунке 1 выше сдвиговый регистр с параллельным вводом/выводом принимает четыре бита данных к по адресу DA DB DC DD. Режим работы регистра можно варьировать, обеспечивая ввод на несколько входов, управляя параллельной загрузкой и переключением.

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

Сдвинутые данные доступны на выходах QA QB QC QD. Входные и выходные данные предназначены для каскадирования на нескольких этапах.

Хотя на рисунке 1 выше мы можем каскадировать данные только для сдвига вправо. Мы могли бы приспособить каскадирование данных и для сдвига влево, добавив пару сигналов, направляющих влево, «данные на входе» и «данные на выходе» выше.

Внутренняя детализация сдвигового регистра с параллельным вводом/выводом (со сдвигом вправо) показана на рисунке 2 ниже.

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

Рис. 2. Буферы с тремя состояниями не являются строго необходимыми для сдвигового регистра с параллельным вводом/выводом.
Рис. 2. Буферы с тремя состояниями не являются строго необходимыми для сдвигового регистра с параллельным вводом/выводом.

74LS395 настолько точно соответствует нашей концепции гипотетического сдвигового регистра с параллельными входом и выходом (со сдвигом вправо), что мы используем чрезмерно упрощённую версию данных, приведённых на рисунке 2 выше.

LD/SH' управляет мультиплексором И-ИЛИ на входе данных в триггер. Если LD/SH' = 1, верхние четыре логических элемента И включены, что позволяет применять параллельные входы DA DB DC DD к четырём входам триггера.

Обратите внимание на «пузырёк» инвертора на тактовом входе четырёх триггеров. Это указывает на то, что 74LS395 тактирует данные на отрицательных тактовых импульсах, что является переходом с «высокого» на «низкий» уровень.

Четыре бита данных будут тактироваться параллельно от DA DB DC DD до QA QB QC QD на следующем отрицательном тактовом импульсе. В этой «реальной части» OC' должен быть «низким», если данные должны быть доступны на фактических выходных контактах, а не только на внутренних триггерах.

Ранее загруженные данные могут быть сдвинуты вправо на одну битовую позицию, если LD/SH' = 0 для последующих отрицательных тактовых фронтов.

Четыре такта полностью сместили бы данные из нашего 4-битного сдвигового регистра. Данные потерялись бы, если наше устройство не было каскадировано с QD' на SER другого устройства.

Рис. 3. Данные будут потеряны, если устройство не будет каскадировано с QD' на SER другого устройства.
Рис. 3. Данные будут потеряны, если устройство не будет каскадировано с QD' на SER другого устройства.

Выше шаблон данных представлен на входы DA DB DC DD. Шаблон загружается в QA QB QC QD. Затем он сдвигается на один бит вправо.

Входящие данные обозначены как «×», что означает, что мы не знаем, что там на самом деле. Например, если бы вход (SER) был заземлён, мы бы знали, какие данные (0) были сдвинуты.

Также показано смещение вправо на две позиции, требующее двух тактов.

Рис. 4. Сдвиг вправо на две позиции, требующий двух тактов.
Рис. 4. Сдвиг вправо на две позиции, требующий двух тактов.

Приведённый рисунок 4 является отсылкой на оборудование, задействованное в сдвиге данных вправо.

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

Рис. 5. Тривиальный пример загрузки и сдвига вправо.
Рис. 5. Тривиальный пример загрузки и сдвига вправо.

Сдвиг вправо данных представлен выше для отсылки на предыдущий сдвиг вправо.

Рис. 6. Сдвиг влево в сдвиговом регистре с параллельными входом и выходом.
Рис. 6. Сдвиг влево в сдвиговом регистре с параллельными входом и выходом.

Если нам нужно сдвинуться влево, триггер нужно перемонтировать. Сравните с предыдущим правым переключателем. Кроме того, SI (от англ. Serial-In, т.е. последовательный вход) и SO (от англ. Serial-Out, т.е. последовательный выход) надо поменять местами. SI переходит в QC. QC переходит в QB. QB переходит в QA. QA выходит на соединение SO, где он может каскадироваться к другому переключателю SI. Эта последовательность сдвига влево обратна последовательности сдвига вправо.

Рис. 7. Тривиальный пример загрузки и сдвига влево.
Рис. 7. Тривиальный пример загрузки и сдвига влево.

Выше мы сдвигаем тот же шаблон данных влево на один бит.

Есть одна загвоздка с приведённым выше рисунком 7 «сдвиг влево». Для подобных деталей нет рынка сбыта и поэтому их никто не производит.

«Реальное устройство», которое смещается в одном направлении, может быть подключено к внешнему проводу для сдвига в другом направлении. Иначе говоря, нет конкретно левого или конкретно правого в контексте устройства, которое смещается в каком-то одном направлении.

Однако существует рынок устройств, которые будут сдвигаться влево или вправо по команде линии управления. Конечно, «лево» и «право» действительны в этом контексте.

Рис. 8. Левое и правое действительны в этом контексте.
Рис. 8. Левое и правое действительны в этом контексте.

То, что у нас есть на рисунке 8 выше, является гипотетическим сдвиговым регистром, способным выполнять сдвиг в любом направлении под управлением L'/R.

Он настроен с L'/R = 1, чтобы смещать нормальное направление вправо. L'/R = 1 включает вентили И мультиплексора, помеченные как R.

Это позволяет данным следовать пути, показанному стрелками, когда применяются тактовые сигналы. Путь подключения такой же, как на рисунке 8 выше «чересчур простой» «сдвиг вправо».

Данные смещаются в SR, в QA, в QB, в QC, откуда они выходят в каскаде SR. Этот контакт может сдвигать в SR другого устройства вправо.

Что, если мы изменим L'/R на L'/R = 0?

Рис. 9. Сдвиг регистра вправо/влево.
Рис. 9. Сдвиг регистра вправо/влево.

Если L'/R = 0, вентили И мультиплексора, помеченные как L, включены, что даёт путь, показанный стрелками, такой же, как на приведённом рисунке 9 выше «сдвиг влево». Данные смещаются в SL, в QC, в QB, в QA, откуда они выходят в каскаде SL. Этот вывод может сдвигать SL другого устройства влево.

Главное достоинство двух приведённых выше рисунков, иллюстрирующих «сдвиг регистра вправо/влево», — простота.

За работой левого правого регулятора при L'/R = 0 легко проследить. Коммерческая сторона дела требует параллельной загрузки данных, что подразумевается в названии раздела. Это показано на рисунке 10 ниже.

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

Теперь, когда мы можем сдвигать как влево, так и вправо посредством L'/R, давайте добавим SH/LD', сдвиг/загрузку и вентили И, помеченные как «загрузка», чтобы обеспечить параллельную загрузку данных со входов DA DB DC.

Когда SH/LD' = 0, логические элементы И (R и L) отключены, а логические элементы И «загрузка» включены для передачи данных DA DB DC на входы данных триггера. Следующие такты CLK синхронизируют данные с QA QB QC.

Пока одни и те же данные присутствуют, они будут повторно загружены в последующие такты. Однако данные, представленные только для одного такта, будут потеряны с выходов, когда их больше не будет на входах данных.

Одним из решений является загрузка данных на одном такте, а затем переход к сдвигу на следующих четырёх тактах. Эта проблема устранена в 74ALS299 путём добавления ещё одного логического элемента И к мультиплексору.

Если SH/LD' изменить на SH/LD' = 1, логические элементы И, помеченные как «загрузка», отключаются, что позволяет левым/правым элементам управления L'/R устанавливать направление сдвига на логических элементах И (L или R). Переключение такое же, как на предыдущих рисунках.

Единственное, что необходимо для создания жизнеспособного интегрированного устройства, – это добавить к мультиплексору четвёртый логический элемент И, как упоминалось для 74ALS299.

Это показано в следующем разделе для этой части.

Параллельный вход / параллельный выход и универсальные устройства

Давайте подробнее рассмотрим регистры сдвига с последовательным входом/параллельным выходом, доступные в виде интегральных схем, любезно предоставленные компанией Texas Instruments.

Для получения полных спецификаций устройств следует найти страницы устройств на сайте производителя.

  • 4-битный сдвиговый регистр с параллельными входом и выходом SN74LS395A.
  • SN74ALS299 8-битный универсальный сдвиговый регистр с параллельным входом и выходом.
Рис. 11. SN74LS395A ANSI-обозначение.
Рис. 11. SN74LS395A ANSI-обозначение.

Мы уже рассмотрели внутреннюю детализацию SN74LS395A, см. выше предыдущий рисунок 11, сдвиговый регистр 74LS395 с параллельными вводом/выводом и выходом с тремя состояниями.

Непосредственно на рисунке 11 выше находится ANSI-обозначение для 74LS395.

Почему только 4-битные, как указано выше SRG4? Наличие как параллельных входов, так и параллельных выходов, в дополнение к контактам управления и питания, не позволяет использовать дополнительные биты входа-выхода (ввода/вывода) в 16-контактном DIP-корпусе (англ. Dual In-line Package, т.е. двухрядная встроенная сборка).

R указывает, что этапы сдвигового регистра сбрасываются входом CLR' (активная полу-стрелка с низким инвертированием на входе) секции управления в верхней части на ANSI-обозначении. OC', «низкий» уровень (снова перевёрнутая стрелка) активирует (EN4) четыре выходных буфера с тремя состояниями (QA QB QC QD) в разделе данных.

Загрузка/сдвиг' (LD/SH') на штифте (7) соответствует внутренним элементам M1 (загрузка) и M2 (сдвиг). Найдите префиксы 1 и 2 в остальной части ANSI-обозначении, чтобы выяснить, что ими управляется.

Тактовый вход C3/2, чувствительный к отрицательному фронту (обозначен инвертированной стрелкой на выводе 10), выполняет две функции.

Во-первых, 3 из C3/2 влияет на любой вход, имеющий префикс 3, скажем, 2,3D или 1,3D в разделе данных.

Это будет параллельная загрузка на A, B, C, D, относящаяся к M1 и C3 для 1,3D. Во-вторых, 2 из C3/2 – стрелка вправо указывает тактирование данных везде, где 2 появляется в префиксе (2,3D на выводе 2).

Таким образом, у нас есть синхронизация данных в SER в QA с режимом 2. Стрелка вправо после C3/2 соответствует сдвигу на внутренних этапах сдвигового регистра QA QB QC QD. Треугольники, повёрнутые вправо, указывают на буферизацию; перевёрнутый треугольник указывает на три состояния, контролируемые EN4.

Обратите внимание, что все четвёрки в символе, связанном с EN, часто опускаются. Этапы QB QC считаются имеющими те же атрибуты, что и QD. QD' каскадируется на SER следующего пакета справа.

Рис. 12. Функциональность (в виде таблицы) универсального регистра сдвига/хранения 74ALS299.
Рис. 12. Функциональность (в виде таблицы) универсального регистра сдвига/хранения 74ALS299.

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

На сайте производителя для «299» можно найти полную информацию. Логические элементы мультиплексора R, L, «загрузка» работают так же, как и на предыдущих рисунках «сдвиг регистра влево/вправо».

Разница в том, что входы режима S1 и S0 выбирают сдвиг влево, сдвиг вправо и загрузку с режимом, установленным на S1 S0 = 01, 10 и 11 соответственно, как показано в таблице, при активации вентилей мультиплексора L, R и «загрузка» соответственно.

См. таблицу. Небольшое отличие заключается в параллели пути загрузки от выходов с тремя состояниями. На самом деле буферы с тремя состояниями отключены (должны, по крайне мере) с помощью S1 S0 = 11, чтобы использовать шину ввода/вывода для использования в качестве входов.

Шина представляет собой набор одинаковых сигналов. Входы подаются на A, B через H (те же контакты, что и от QA, QB до QH) и направляются на шлюз загрузки в мультиплексорах и на входы D триггера. Данные – это параллельная нагрузка на тактовый вход.

Одним из новых вентилей мультиплексора является логический элемент И, помеченный как «захват» (или «удержание»), который активируется при S1 S0 = 00. Захватывающий (удерживающий) вентиль открывает путь от выхода Q триггера обратно к удерживающему вентилю, к входу D того же триггера. В результате в режиме S1 S0 = 00 выход непрерывно перезагружается с каждым новым тактовым импульсом. Таким образом, данные сохраняются. Это обобщено в таблице, приведённой на рисунке 12 выше.

Чтобы считывать данные с выходов от QA, QB, до QH, буферы с тремя состояниями должны быть включены с помощью OE2', OE1' = 00 и режима = S1 S0 = 00, 01 или 10.

То есть режим — это что угодно, кроме загрузки. См. вторую таблицу.

Рис. 13. Сдвиг вправо данных из левого пакета сдвигается на входе SR.
Рис. 13. Сдвиг вправо данных из левого пакета сдвигается на входе SR.

Правый сдвиг данных из левого пакета сдвигается на входе SR. Любые данные, смещённые вправо из этапа QH, каскадируются вправо через QH'.

На этот вывод не влияют буферы с тремя состояниями. Последовательность сдвига вправо для S1 S0 = 10:

SR > QA > QB > QC > QD > QE > QF > QG > QH (QH')

Данные сдвига влево из пакета смещаются вправо на входе SL. Любые данные, смещённые влево из каскада QA, каскадируются влево через QA', также не затронутые буферами с тремя состояниями. Последовательность сдвига влево для S1 S0 = 01:

(QA') QA < QB < QC < QD < QE < QF < QG < QH (QSL')

Сдвиг может происходить с буферами с тремя состояниями, отключёнными одним из OE2' или OE1' = 1. Однако вывод содержимого регистра будет недоступен. См. таблицу.

Рис. 14. SN74ALS299 ANSI-обозначение.
Рис. 14. SN74ALS299 ANSI-обозначение.

«Чистое» (без пометок и пояснений) ANSI-обозначение для 8-разрядного универсального сдвигового регистра SN74ALS299 с параллельным вводом/выводом и выходом с тремя состояниями показан на рисунке 14 выше для справки.

Рис. 15. SN74ALS299 ANSI-обозначение – с подробными пояснениями.
Рис. 15. SN74ALS299 ANSI-обозначение – с подробными пояснениями.

Аннотированная версия ANSI-обозначения показана для пояснения содержащейся в нем терминологии.

Обратите внимание, что режим в ANSI-обозначении (S0 S1) отличается от того (S1 S0), что использовано в предыдущей таблице.

Это меняет местами десятичные числа для смены режима (1 и 2). В любом случае, здесь всё в согласии с официальным техпаспортом, включая и данное несоответствие.

Практическое применение

Повторим блок-схему сигнализации с удалённой клавиатурой (из прошлого раздела). Ранее мы изготавливали считыватель с клавиатуры и выносной дисплей как отдельные блоки. Теперь объединим клавиатуру и дисплей в единое целое с помощью универсального сдвигового регистра.

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

Рис. 16. Сигнализация с удалёнными клавиатурой и дисплеем (в общем корпусе).
Рис. 16. Сигнализация с удалёнными клавиатурой и дисплеем (в общем корпусе).

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

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

Мы будем одновременно перемещать данные клавиатуры и данные светодиодов в сдвиговый регистр.

Рис. 17. 74ALS299 сдвиговый регистр считывает сигналы, управляя светодиодами.
Рис. 17. 74ALS299 сдвиговый регистр считывает сигналы, управляя светодиодами.

Восемь светодиодов и токоограничивающие резисторы подключены к восьми выводам входа-выхода универсального сдвигового регистра 74ALS299.

Светодиоды могут управляться только в режиме 3 при S1 = 0 S0 = 0. Три состояния включения OE1' и OE2' заземлены для постоянного включения выходов с тремя состояниями в режимах 0, 1, 2.

Это приведёт к тому, что светодиоды загорятся (начнут мерцать) во время переключения. Если бы это было проблемой, EN1 'и EN2' можно было бы не заземлять и соединить параллельно с S1 и S0 соответственно, чтобы включить только буферы с тремя состояниями и зажечь светодиоды во время удержания, режим 3. Давайте не будем усложнять этот пример.

Во время параллельной загрузки S0 = 1, инвертированное в 0, позволяет восьмеричным буферам с тремя состояниями заземлять «дворники» переключателя.

Верхние разомкнутые контакты переключателя подтягиваются до «высокого» логического уровня комбинацией резистор/светодиод на восьми входах.

Любое замыкание переключателя приведёт к короткому замыканию входа на «низкий» уровень. Мы параллельно загружаем данные коммутатора в «299» в такт t0, когда оба S0 и S1 имеют «высокий» уровень. См. волны сигналов на рисунке 18 ниже.

Рис. 18. Волны сигналов сдвигового регистра, управляющего светодиодами.
Рис. 18. Волны сигналов сдвигового регистра, управляющего светодиодами.

Как только S0 переходит в «низкий» уровень, восемь тактов (от t0 до t8) сдвигают данные замыкания переключателя из «299» через вывод QH'.

В то же время новые светодиодные данные смещаются в SR «299» на те же восемь тактов. Данные светодиода заменяют данные замыкания переключателя по мере переключения.

После 8-го такта, t8, S1 становится «низким», чтобы перейти в режим захвата/удержания (S1 S0 = 00). Данные в сдвиговом регистре остаются прежними, даже если тактов больше, например, t9, t10 и т. д.

Откуда берутся волны? Они могли бы генерироваться микропроцессором, если бы тактовая частота не превышала 100 кГц, и в этом случае было бы неудобно генерировать какие-либо тактовые импульсы после t8.

Если бы тактовые сигналы были в мегагерцовом диапазоне, такты шли бы непрерывно. Тактовые сигналы, S1 и S0 будут генерироваться цифровой логикой, здесь не показанной.

См.также

Внешние ссылки