Altifigence Academy

17 / 20 · Теория

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

Проверяйте члены, метки, фронты и передачи выходов помимо итоговой матрицы.

Разделяйте два эталона

Используйте прямой математический эталон для вычисления широких сумм независимыми циклами i/j/k. Используйте отдельную временную модель для перемещения A вправо и B вниз. Копирование вспомогательной индексации RTL в золотую модель рискует воспроизвести ту же ошибку. Начните с фиксированных рассчитанных вручную примеров, затем расширьте до воспроизводимых случайных входов.

Индексируйте таблицу результатов по job и глобальным выходным координатам. Сравнивайте каждое полученное значение и помечайте ключ полученным. Повторный ключ — дубликат, неожиданный — ошибка адреса, неполученный ожидаемый — пропуск. Нулевые результаты также требуют выдачи. Дополненные координаты вне диапазона никогда не должны сохраняться.

Проверяйте инварианты внутри массива

Каждый PE должен потребить ровно [0,1,...,K−1]. Совпадающие достоверные операнды требуют равных меток job и k. Count остаётся от нуля до K. Фронт паузы удерживает операнды, valid, метки, аккумулятор и count. Clear оставляет count и аккумулятор нулевыми без достоверных токенов. Заблокированный результат удерживает data и job при установленном valid.

УровеньПример ошибкиВероятная причина
Арифметика23 вместо 19Индекс, знак или разрядность
Члены[0,1,1]Дублированный токен
ВремяПоследний PE готов на E2Раннее завершение
ПаузаCount меняется при паузеЧастичное удержание состояния
ВыходКлюч получен дваждыУправление подтверждением передачи

Для примера 2×2 последний PE содержит восемнадцать после E2 и пятьдесят после E3. Ошибка global-done на E2 должна нарушить и числовые, и временные проверки. Наоборот, дублирование и пропуск равных произведений могут сохранить итоговую сумму; отслеживание членов выявляет это совпадение.

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

Согласованно наблюдайте состояние после E_t. Выполнение эталона Node, компиляция RTL, симуляция RTL, синтез, выполнение временных ограничений, выполнение проекта DDS и испытания платы устанавливают разные факты. Предоставленные программы Node проверяют арифметические модели и расписания. Будущие тесты RTL могут использовать те же наборы, но должны сохранять собственные версии инструментов, команды и журналы.

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

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

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

Строка A [1,1] и столбец B [5,5] правильно дают десять. Потребление [0,0] также даёт десять, но дублирует k0 и пропускает k1. Требование и значения, и точного списка членов [0,1] выявляет ошибку.

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