42 / 63 · Теория
Проверка сдвиговых схем и выравнивание данных с valid
Находите ошибки, скрытые симметричными шаблонами, и сдвиг valid на один цикл.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Выберите битовую строку, выявляющую ошибку
Сдвиг только 0000 или 1111 скрывает инверсию направления. Отслеживайте позиции асимметричным шаблоном вроде 1000 или одной единицей. Только нулевые начальные состояния тоже могут скрыть часть ошибок инициализации и хранения.
Для 3-битного регистраРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее из 000 с входами 1,0,0 получаем 001→010→100. Обратное направление даёт 100→010→001, отличаясь уже на первом фронте.
Проверьте эталон в двух представлениях
На каждом действительном фронте сравнивайте числовую модель с реальными срезамиСрез выбирает непрерывный диапазон битов вектора. Выбранный диапазон определяет ширину результата и порядок битов. Подробнее и конкатенацией RTL. Для N=3 можно полностью проверить 8 состояний × 2 входа = 16 переходов, затем отдельно добавить сочетания reset и enable.
Каждый столбец — запись наблюдения одного положительного фронтаПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее. Входы показаны непосредственно перед фронтом, состояния со словом «после» в имени — сразу после обновления. Выравнивание столбцов обозначает порядок выборок, а не физическую задержку распространенияЗадержка распространения — время от изменения входа до установления правильного выхода. Логическая эквивалентность выражений и их временные характеристики — разные вопросы. Подробнее.
Начальное q=000. На втором фронте enable=0, поэтому даже при изменении din сохраняется q=001. Считайте фронты и принятые входы отдельно.
Показать данные диаграммы
| Сигнал | Диаграмма | Значения шины |
|---|---|---|
| фронт | 2345 | E0 → E1 → E2 → E3 |
| enable | 101. | |
| din | 10.1 | |
| q после | 2.34 | 001 → 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 придёт раньше либо окажется привязан к другой записи. Сравнивайте с эталоном, применяющим одинаковое условие приёма к данным и метаданным.