Altifigence Academy

42 / 63 · Теория

Проверка сдвиговых схем и выравнивание данных с valid

Находите ошибки, скрытые симметричными шаблонами, и сдвиг valid на один цикл.

Выберите битовую строку, выявляющую ошибку

Сдвиг только 0000 или 1111 скрывает инверсию направления. Отслеживайте позиции асимметричным шаблоном вроде 1000 или одной единицей. Только нулевые начальные состояния тоже могут скрыть часть ошибок инициализации и хранения.

Для 3-битного регистраРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее из 000 с входами 1,0,0 получаем 001→010→100. Обратное направление даёт 100→010→001, отличаясь уже на первом фронте.

Проверьте эталон в двух представлениях

Qnext=(2Q+d) mod 2NQ_{next}=(2Q+d)\bmod2^N

На каждом действительном фронте сравнивайте числовую модель с реальными срезамиСрез выбирает непрерывный диапазон битов вектора. Выбранный диапазон определяет ширину результата и порядок битов. Подробнее и конкатенацией RTL. Для N=3 можно полностью проверить 8 состояний × 2 входа = 16 переходов, затем отдельно добавить сочетания reset и enable.

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

Без enable всё состояние останавливается
Показать данные диаграммы
Данные диаграммы: каждый символ — один интервал; точка сохраняет предыдущее состояние; p — один тактовый цикл.
СигналДиаграммаЗначения шины
фронт2345E0 → E1 → E2 → E3
enable101.
din10.1
q после2.34001 → 010 → 101

Воспроизведите диаграмму: один фронт с din=1 даёт 001. Ещё один с enable=0, din=0 сохраняет 001. Снова включите enable, подайте din=0,1: получатся 010,101. Модель содержит только регистр данных; необходимость останавливать valid тем же enable отдельно рассмотрена далее.

Различайте вход и сохранённое значение во время остановки

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

Valid — тоже часть тракта данных

Если данные стоят, а valid движется, либо наоборот, потребитель получает неверную выборку. Проверка «выходные биты верны» сама по себе не доказывает правильность интерфейса.

ТестОжидаемое поведение
Непрерывные нормальные входыВерные порядок битов и фиксированная задержка valid
Enable=0 посерединеДанные и valid хранятся вместе
Reset посерединеУдалена действительность прежнего кадра
Последовательные новые кадрыРазличены конец прошлого и начало нового

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

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

Регистр данных сдвигается только при enable=1, а линия valid — каждый такт. Какие входы проще всего выявят ошибку?

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

Поместите фронт остановки enable=0 между двумя разными данными. Valid придёт раньше либо окажется привязан к другой записи. Сравнивайте с эталоном, применяющим одинаковое условие приёма к данным и метаданным.

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