Altifigence Academy

21 / 24 · Теория

Совместите таблицу ожидаемых результатов с локальными инвариантами

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

Привяжите верификацию к приёму входа

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

Для принятых входов ADD tag10:(250,10) и tag11:(3,5) ожидайте [(10,4,carry1),(11,8,carry0)]. Достоверный, но остановленный выход не удаляет запись. Выдача tag10 удаляет только эту запись. Повторный tag10 или значение 8 с меткой 12 неверны даже при совпадении некоторых чисел. Включайте все значимые флаги и сопутствующие поля.

ПроверкаПримеры ошибок
Выход против эталонной очередиАрифметика, порядок, неверные метки
Accepted-delivered=occupancyПотеря, дублирование, фиктивная выдача
Стабильные остановленные полезные данныеПерезапись до приёма
Заполненность в пределахПереполнение FIFO или чтение пустой очереди
Пустая эталонная очередь после опустошенияОтсутствующий последний результат

Локальные инварианты определяют первый ошибочный фронт вместо одного итогового несовпадения. Внутренняя заполненность — count FIFO плюс биты valid ступеней. Добавляйте учёт отмены, если разрешены reset или flush, и используйте одно правило фронта в обоих мониторах.

Совмещайте числовые границы с временными случаями: ноль, максимальные значения, перенос и заём, последовательный трафик, пустые такты, длинные остановки, замена при заполненности и конечное опустошение. Записывайте начальные значения генератора случайных чисел для повторяемых ошибок. По возможности перебирайте малые пространства управления.

Проверки завершения требуют предположения о продвижении и тайм-аута. Когда приёмник постоянно готов, незавершённая работа должна опустошиться. При бесконечных остановках требуйте сохранения и ограниченной заполненности. Намеренное повреждение переноса или задержки метки должно ломать проверки; такой мутационный тест измеряет чувствительность. Успешные модели Node не проверяют соединения HDL, поведение X/Z, пересечение тактовых доменов или временные характеристики реализации. Сообщайте только реально наблюдённую область выполнения.

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

Accepted=9 и delivered=5. Count FIFO равен двум, обе ступени достоверны. Согласован ли учёт? Если принят ещё один вход без выдачи, а заполненность остаётся четыре, что вероятно произошло?

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

Учёт совпадает: 9-5=2+1+1=4. После нового приёма без выдачи разность становится пять. Заполненность четыре указывает на приём без места или перезаписанный элемент. Исследуйте готовность на первом ошибочном фронте.

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