Altifigence Academy

38 / 63 · Теория

Уравнение состояния сдвигового регистра

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

Одновременное чтение нескольких триггеров

Если новый вход d помещается в бит 0 N-битного сдвигового регистраРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее, следующее состояние:

Qk+1={Qk[N−2:0],dk}Q_{k+1}=\{Q_k[N-2:0],d_k\}

Фигурные скобки обозначают конкатенациюКонкатенация соединяет битовые последовательности рядом друг с другом. Ширина результата равна сумме ширин операндов; это не арифметическое сложение чисел. Подробнее RTL. Все биты читают одно прежнее состояние, поэтому d не проходит весь регистр за один фронт. При enable=0 хранится весь вектор, при reset он заменяется заданным начальным вектором.

Каждый столбец — запись наблюдения одного положительного фронтаПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее. Входы показаны непосредственно перед фронтом, состояния со словом «после» в имени — сразу после обновления. Выравнивание столбцов обозначает порядок выборок, а не физическую задержку распространенияЗадержка распространения — время от изменения входа до установления правильного выхода. Логическая эквивалентность выражений и их временные характеристики — разные вопросы. Подробнее.
Из q=000 подайте din=1 один раз, затем три нуля. Активный бит проходит q0→q1→q2 и исчезает.

Проверьте выражение конкатенации, перемещая один бит
Показать данные диаграммы
Данные диаграммы: каждый символ — один интервал; точка сохраняет предыдущее состояние; p — один тактовый цикл.
СигналДиаграммаЗначения шины
din10..
q2 после0.10
q1 после010.
q0 после10..
q после2345001 → 010 → 100 → 000

Сделайте один шаг с din=1, затем три с din=0. Получится 001→010→100→000. В момент изменения входа текущее q не меняется: меняется только ожидаемое значение следующего фронта.

В каком триггере сохраняется каждый бит?

Синхронный сброс приоритетнее enable. При enable=0 сохранённое значение удерживается. q=000; q_next = (2q + din) mod 8

Проверьте соединение числовым выражением

При интерпретации как unsignedБеззнаковая интерпретация (unsigned) рассматривает битовую последовательность как неотрицательное целое. Диапазон n бит — от 0 до 2^n−1; знаковая интерпретация тех же битов может дать другое число. Подробнее-вектора тот же переход записывается:

Qk+1=(2Qk+dk) mod 2NQ_{k+1}=(2Q_k+d_k)\bmod2^N

При N=3, Q=5 (101), d=1 получаем 2⋅5+1=112\cdot5+1=11, 11 mod 8=311\bmod8=3, то есть следующее 011. Эта числовая форма отличается от конкатенации и полезна как эталон для проверки реализации.

Что именно хранится

Старые биты перемещаются к наибольшему индексу, новый поступает в наименьший. После достаточного числа действительных входов хранятся «текущий и последние N-1 входов». Та же структура используется для распознавания шаблонов, простых линий задержки и последовательно-параллельного преобразования.

Увеличение длины хранения не увеличивает число обрабатываемых за цикл битов. Структура принимает один бит за действительный фронт. Параллельный вход, многобитный сдвиг и остановка по ready/validРукопожатие (handshake) — соглашение, по которому передача подтверждается, когда valid передатчика и ready приёмника равны 1 на одном фронте. Оно также задаёт правила удержания данных во время ожидания. Подробнее требуют отдельных трактов и условий управления.

Попробуйте сами

N=4, текущее Q=1101, вход d=0. Вычислите следующее Q через конкатенацию и числовое выражение.

Прочитать объяснение

Конкатенация даёт {101,0}=1010. Численно (2⋅13+0) mod 16=10(2\cdot13+0)\bmod16=10, тот же результат. Прежний старший бит 1 выходит за границу хранения.

Выбор действует в этом браузере. Его можно изменить внизу страницы.