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] выявляет ошибку.