Перейти к содержанию

Лабораторная 5.5 — Сравнение float, fixed-point и RTL

Цель

Сделать воспроизводимое сравнение трёх уровней реализации одного FIR-блока:

  • эталонная модель с плавающей точкой;
  • программная fixed-point модель (Q1.15);
  • эталонные RTL-векторы из учебного Verilog-testbench.

Работа отвечает на практический вопрос интеграции:

Согласована ли fixed-point модель с RTL численно и какие компромиссы по ресурсам и задержке нужно указать в отчёте?

Зачем это нужно

Когда проект разделён на три мира (float-модель, определяющая алгоритм, fixed-point модель, предсказывающая железо, и RTL, который и есть железо) самый ценный вопрос звучит так: «совпадают ли они, а если нет, то насколько и почему?». Расхождение, найденное здесь, стоит минуту; то же расхождение, найденное на плате, стоит сборки bitstream и сессии отладки. Сравнение заодно объясняет, для чего каждая модель: float-модель это эталон, по которому судят fixed-point модель, а fixed-point модель это эталон, по которому судят RTL. Точного совпадения ожидают только во втором сравнении.

Исполняемый файл

Файл Назначение
blocks/block_05_fpga_hdl_flow/python/lab_5_5_float_fixed_rtl_comparison.py считает метрики ошибки и таблицу ресурсов/задержки

Запуск из корня репозитория:

python blocks/block_05_fpga_hdl_flow/python/lab_5_5_float_fixed_rtl_comparison.py

Сгенерированные артефакты

docs/assets/lab55_float_fixed_rtl_error.png
docs/assets/lab55_float_fixed_rtl_resource_table.md
docs/assets/lab55_float_fixed_rtl_metrics.json

Результаты сравнения

Вывод Смысл
RMSE float-RTL средняя разница между float-моделью и целочисленными RTL-векторами
RMSE fixed-RTL средняя разница между моделью Q1.15 и RTL-векторами
MAX abs error наихудшее расхождение в единицах LSB
таблица ресурсов/задержки сводка компромиссов реализации для отчёта

Чего ожидать

Запуск по умолчанию сравнивает 8 валидных выходных отсчётов 4-коэффициентного IQ FIR:

Compared valid samples: 8
RMSE float-RTL: 0.2778 LSB
RMSE fixed-RTL: 0.0000 LSB
MAX |float-RTL|: 0.3750 LSB
MAX |fixed-RTL|: 0.0000 LSB
Fixed exact match with RTL: True

Здесь встречаются два разных вида «совпадения», и их нельзя путать:

  • Fixed и RTL совпадают точно (0 LSB). Fixed-point модель на Python и Verilog реализуют одну и ту же целочисленную арифметику (произведения Q1.15, то же округление и насыщение), поэтому любая ненулевая разница: ошибка в одном из них. Это жёсткая проверка «прошёл/не прошёл».
  • Float и RTL расходятся до 0,375 LSB. Это не ошибка: float-модель не округляет, поэтому отличается от любой целочисленной реализации на величину квантования, здесь меньше одного LSB. Это проверка допуска (pass_float_within_1_lsb), а не равенства.

Таблица ресурсов и задержки это оценка для обсуждения архитектуры (скрипт прямо это указывает), а не результат синтеза; реальные цифры берутся из отчётов Vivado по использованию ресурсов и таймингу (см. шаблоны отчётов Блока 5).

Чек-лист отчёта

  • Приложен график ошибки и указан RMSE float/fixed относительно RTL.
  • Указано, совпадает ли fixed-point точно с RTL-векторами.
  • Таблица ресурсов/задержки включена в приложение отчёта.
  • Объяснено, почему float используется как алгоритмический эталон.