Цифровая обработка сигналов
Real-Time DSP: FPGA, DSP-ядра и fixed-point арифметика
Система аварийного торможения в автомобиле имеет 100 мс от обнаружения препятствия до начала торможения. Половина уходит на механику. Оставшиеся 50 мс: LiDAR, RADAR, камера, fusion, решение. GPU не справится - latency непредсказуема. FPGA и DSP-ядра - специализированный ответ на задачи, где промах deadline стоит жизни.
- Tesla Autopilot: Xilinx FPGA для обработки LiDAR в 0.3 мс вместо 2 мс на GPU
- Qualcomm Hexagon DSP: wake-word detection при потреблении 10 мВт - несколько часов батареи в сутки
- Radar ADAS: 1024-точечный FFT каждые 100 мкс на TI C6000 DSP для обнаружения препятствий
- Профессиональный аудио: SSL 9000 консоль - FPGA для 96 каналов при задержке менее 1 мс
FPGA: программируемая кремниевая сеть
LiDAR в Tesla Model S обрабатывает 1 миллион точек в секунду. Задержка должна быть менее 1 мс. GPU справится, но потребляет 250 Вт. FPGA (Xilinx Zynq UltraScale+): 15 Вт и детерминированная латентность 0.3 мс. Секрет: на FPGA алгоритм реализован аппаратно, а не программно.
**FPGA архитектура.** Look-Up Tables (LUT) реализуют любую булеву функцию за один такт. DSP48 блоки - аппаратные умножители-накопители (MAC). Block RAM - встроенная двухпортовая память. Interconnect - программируемая сеть соединений. Вместо CPU fetch-decode-execute, FPGA исполняет все операции параллельно в конвейере.
**FPGA vs ASIC vs GPU.** FPGA: гибкий, перепрограммируемый, 10-100x медленнее ASIC, 10x дешевле в малых тиражах. ASIC (Apple Neural Engine, Google TPU): максимальная эффективность, нельзя перепрограммировать, стоимость маски 10-50 млн USD. GPU: программируемый, высокая пропускная способность, недетерминированная латентность. Для real-time с жёсткими latency constraints - FPGA или ASIC.
Почему FPGA даёт детерминированную латентность, а GPU - нет?
DSP процессоры: MAC и специализированные ISA
Qualcomm Snapdragon 888 включает Hexagon DSP - 6 аппаратных MAC unit, работающих параллельно. Обработка аудио 24/7 при потреблении 10 мВт вместо 500 мВт GPU. Специализированные DSP-ядра существуют рядом с ARM CPU в каждом смартфоне - именно они обрабатывают wake-word detection, шумоподавление и эхокомпенсацию.
**Very Long Instruction Word (VLIW).** TI C6000 и Qualcomm Hexagon используют VLIW: одна инструкция содержит 8 независимых операций, выполняемых параллельно за один такт. Компилятор (а не CPU hardware scheduler) раскладывает зависимости. Это упрощает аппаратуру, но требует умного компилятора - ручная оптимизация на VLIW DSP в 2x-5x быстрее компилятора.
Почему DSP-ядра выгоднее GPU для постоянной обработки аудио на смартфоне?
Fixed-Point арифметика: точность против скорости
NVIDIA H100 делает 2000 TFLOPS в FP16. Qualcomm Hexagon - 26 TOPS в INT8. Разница не только в размере чипа: INT8 требует в 2 раза меньше памяти, в 4 раза меньше энергии и быстрее из-за ширины шины данных. Для DSP на батарейном питании fixed-point не опция - это необходимость.
**Quantization Noise.** При переходе от float к Q15 возникает ошибка квантования. Для равномерного квантования она моделируется как белый шум с дисперсией e^2 = Delta^2/12, где Delta = 2^(-N+1) - шаг квантования. Критический эффект для IIR фильтров: полюсы могут сдвинуться при квантовании коэффициентов, приводя к нестабильности. FIR всегда стабилен при квантовании.
Почему при умножении двух Q15 чисел результат хранят в 32-битном аккумуляторе?
Real-Time Pipeline: latency vs throughput
Радар ADAS в автомобиле обрабатывает 1024-точечный FFT каждые 100 мкс. С GPU: 5 мкс FFT, но 2 мс latency из-за DMA transfer и OS overhead. С FPGA: 20 мкс FFT, но latency 25 мкс - детерминированный. При аварийном торможении 25 мкс реакции критичны.
**WCET анализ.** Worst-Case Execution Time - максимальное возможное время выполнения при любых входных данных. Для safety-critical систем (авиация, медицина) WCET должен быть доказан, а не измерен. Инструменты: AbsInt aiT, Rapita RVS. Причины недетерминированности: cache misses, branch prediction, прерывания. FPGA или bare-metal DSP без кешей дают математически доказуемый WCET.
Быстрее = лучше для real-time систем
Real-time требует детерминированной латентности, а не максимальной скорости. FPGA с 20 мкс FFT лучше GPU с 5 мкс FFT, если у GPU worst-case latency 2 мс из-за OS jitter.
Авиационные системы сертифицируются по DO-178C: не 'работает быстро', а 'гарантированно работает за N мкс при любых условиях'. Это принципиально другое требование.
Почему в real-time DSP коде запрещён dynamic memory allocation (malloc)?
Ключевые идеи
- FPGA: аппаратный конвейер из LUT, DSP48 MAC, Block RAM - детерминированная латентность без OS jitter
- DSP-ядра: специализированные MAC units (Hexagon, C6000) - MAC-intensive вычисления при 10-50x меньшем потреблении чем GPU
- Fixed-point Q15: 16-bit с 15 дробными битами, SNR 92 дБ; Q15*Q15=Q30 хранится в 32-bit аккумуляторе
- Real-time pipeline: double buffering, нет malloc, нет printf, WCET < deadline / 2
- Latency vs Throughput: FPGA 20 мкс FFT с гарантированным WCET лучше GPU 5 мкс с OS jitter 2 мс
Связанные темы
Real-time DSP реализует алгоритмы предыдущих уроков в аппаратных ограничениях.
- FIR-фильтры — FIR - основной вычислительный блок для FPGA DSP48 и SIMD MAC units
- Компрессия: JPEG, MP3, H.264 — Кодеки реализуются на FPGA и DSP для real-time encode/decode
- DSP на собеседовании — Fixed-point и real-time constraints - типичные вопросы на DSP-интервью
Вопросы для размышления
- IIR фильтры нестабильны при квантовании коэффициентов в Q15. Как это проявляется и как Q31 или float решает проблему?
- Как HLS (High-Level Synthesis) инструменты вроде Xilinx Vitis позволяют использовать C++ для синтеза FPGA вместо VHDL?
- Что такое WCET анализ и почему для авиационных систем он должен быть доказан формально, а не измерен эмпирически?
Связанные уроки
- dsp-14 — Компрессия JPEG/MP3 реализуется на FPGA - нужно понять что именно ускоряется
- dsp-07 — FIR-фильтры - основной compute-блок, который маппится на FPGA и DSP MAC units
- dsp-16 — Собеседование по DSP включает вопросы о fixed-point и real-time constraints
- arch-14-multicore — FPGA pipeline параллелизм аналогичен CPU instruction-level parallelism
- os-18-io-advanced