Регистр сдвига - Shift register

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

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

Регистры сдвига могут иметь как параллельные, так и последовательные входы и выходы. Они часто конфигурируются как «последовательный вход, параллельный выход» (SIPO) или «параллельный вход, последовательный выход» (PISO). Существуют также типы с последовательным и параллельным входом и типы с последовательным и параллельным выходом. Существуют также «двунаправленные» регистры сдвига, которые позволяют сдвиг в обоих направлениях: L → R или R → L. Последовательный вход и последний выход сдвигового регистра также могут быть соединены для создания «циклического сдвигового регистра». Регистр PIPO (параллельный вход, параллельный выход) работает очень быстро - выход выдается в течение одного тактового импульса.

Последовательный вход и выход (SISO)

Деструктивное считывание

Пример использования 4-битного регистра сдвига. Ввод данных 10110000.
Время
Выход 1
Выход 2
Выход 3
Выход 4
0 0 0 0 0
1 1 0 0 0
2 0 1 0 0
3 1 0 1 0
4 1 1 0 1
5 0 1 1 0
6 0 0 1 1
7 0 0 0 1
8 0 0 0 0

Это простейшие регистры сдвига. Строка данных представлена ​​как «Data In» и сдвигается вправо на одну ступень каждый раз, когда «Data Advance» становится высоким . При каждом продвижении крайний левый бит (т.е. «Data In») сдвигается в выход первого триггера . Крайний правый бит (т.е. «Data Out») сдвигается и теряется.

Данные сохраняются после каждого триггера на выходе «Q», поэтому в этой конфигурации доступно четыре «слота» хранения, следовательно, это 4-битный регистр. Чтобы дать представление о схеме сдвига, представьте, что регистр содержит 0000 (так что все слоты памяти пусты). Поскольку «Data In» представляет 1,0,1,1,0,0,0,0 (в этом порядке, каждый раз с импульсом в «Data Advance» - это называется синхронизацией или стробированием) в регистр, это результат. Правый столбец соответствует выходному выводу самого правого триггера и так далее.

Таким образом, последовательный вывод всего регистра - 00010110. Можно видеть, что если бы данные продолжали вводить, они бы получили именно то, что были введены (10110000), но смещены на четыре цикла «продвижения данных». Это устройство является аппаратным эквивалентом очереди . Кроме того, в любое время весь регистр можно обнулить, установив высокий уровень на выводах сброса (R).

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

Последовательный вход и параллельный выход (SIPO)

4-битный регистр сдвига SIPO.svg

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

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

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

Параллельный вход и последовательный выход (PISO)

В этой конфигурации данные вводятся в строках с D1 по D4 в параллельном формате, причем D1 является самым старшим битом. Чтобы записать данные в регистр, контрольная строка записи / сдвига должна находиться в НИЗКОМ состоянии. Чтобы сдвинуть данные, линия управления W / S переводится в ВЫСОКИЙ уровень, а регистры синхронизируются. Теперь устройство действует как сдвиговый регистр PISO с D1 в качестве ввода данных. Однако до тех пор, пока количество тактов не превышает длину строки данных, выход данных Q будет считаться параллельными данными по порядку.

4-битный регистр сдвига PISO

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

4-битный регистр сдвига PISO Seq.gif

Использует

Toshiba TC4015BP - двойной 4-ступенчатый регистр статического сдвига (с последовательным входом / параллельным выходом)

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

Регистры SIPO обычно присоединяются к выходу микропроцессоров, когда требуется больше контактов ввода / вывода общего назначения, чем доступно. Это позволяет управлять несколькими двоичными устройствами, используя только два или три контакта, но медленнее, чем при параллельном выходе. Рассматриваемые устройства подключаются к параллельным выходам сдвигового регистра, и желаемое состояние для всех этих устройств может быть отправлено из микропроцессора с помощью одного последовательного соединения. Точно так же конфигурации PISO обычно используются для добавления большего количества двоичных входов к микропроцессору, чем доступно - каждый двоичный вход (например, кнопка или более сложная схема) подключается к параллельному входу сдвигового регистра, затем данные отправляются обратно через последовательный к микропроцессору, используя на несколько строк меньше, чем требовалось изначально.

Регистры сдвига также могут использоваться как расширители импульсов. По сравнению с моностабильными мультивибраторами, синхронизация не зависит от значений компонентов, однако для этого требуются внешние часы, а точность синхронизации ограничена степенью детализации этих часов. Пример: Ronja Twister , где пять регистров сдвига 74164 таким образом образуют ядро ​​временной логики ( схема ).

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

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

Очень большие регистры сдвига с последовательным входом и выходом (размером в тысячи бит) использовались аналогично более ранней памяти линии задержки в некоторых устройствах, построенных в начале 1970-х годов. Такие воспоминания иногда называли «циркулирующей памятью». Например, терминал Datapoint 3300 хранил свое отображение из 25 строк по 72 столбца символов верхнего регистра, используя пятьдесят четыре 200-битных регистров сдвига, расположенных в шести дорожках по девять пакетов в каждой, обеспечивая хранение 1800 шестибитных символов. Конструкция регистра сдвига означала, что прокрутку дисплея терминала можно было выполнить, просто приостановив вывод дисплея, чтобы пропустить одну строку символов.

История

Одним из первых известных примеров сдвигового регистра был Mark 2 Colossus , машина для взлома кода, построенная в 1944 году. Это было шестиступенчатое устройство, построенное из электронных ламп и тиратронов . Регистр сдвига также использовался в машине IAS , построенной Джоном фон Нейманом и другими в Институте перспективных исследований в конце 1940-х годов.

Смотрите также

Рекомендации