Программируемая логика: железо, которое перепрошивается
Знакомимся с FPGA — микросхемой, конфигурацию которой вы задаёте сами, выкладывая внутри неё цифровую схему.
FPGA (Field-Programmable Gate Array, программируемая пользователем вентильная матрица) — это микросхема, внутреннюю логическую схему которой можно задать и многократно изменять уже после изготовления.
Представьте обычный процессор. Он умеет выполнять фиксированный набор инструкций: сложить, сравнить, перейти. Программа — это последовательность таких команд, которые процессор выполняет одну за другой. Гибкость огромна, но есть цена: в каждый момент времени работает по сути один конвейер, и любая задача превращается в длинную ленту шагов во времени.
FPGA устроена принципиально иначе. Внутри неё — море из десятков тысяч элементарных логических блоков и программируемая «матрица соединений» между ними. Загружая в FPGA специальный файл-конфигурацию (его называют битстрим), вы буквально определяете, какой блок к какому подключён и что каждый из них вычисляет. По сути вы выкладываете внутри микросхемы свою собственную цифровую схему — сумматор, фильтр, контроллер, целый процессор. И эта схема существует физически: сигналы бегут по ней параллельно, все её части работают одновременно.
Зачем это нужно: параллелизм на уровне схемы
Ключевое слово — параллелизм. Если вам нужно одновременно обработать 256 каналов данных, на процессоре вы будете крутить цикл из 256 итераций. В FPGA можно разместить 256 одинаковых обрабатывающих блоков, и они отработают все вместе за один такт. Поэтому FPGA незаменима там, где нужна предсказуемая, массово-параллельная обработка потоков данных в реальном времени.
Где FPGA применяют на практике:
- DSP и обработка сигналов: цифровые фильтры, БПФ, обработка радиосигналов — телеком и базовые станции 4G/5G.
- Аппаратные ускорители: финансовая торговля с минимальной задержкой, сжатие данных, шифрование.
- ИИ-ускорители: инференс нейросетей с низкой задержкой и хорошей энергоэффективностью.
- Прототипирование чипов: прежде чем заказать дорогущий ASIC, его схему «обкатывают» на FPGA.
- Промышленность и встраиваемые системы: контроллеры моторов, видеообработка, интерфейсы.
- Исторически — майнинг криптовалют, до прихода специализированных ASIC.
Как работает под капотом
Чтобы прочувствовать масштаб параллелизма, сравним два способа сложить элементы массива. На процессоре это цикл — N шагов во времени:
data = [3, 1, 4, 1, 5, 9, 2, 6]
# Процессорный подход: складываем по одному, шаг за шагом
total = 0
for i, x in enumerate(data):
total += x
print(f"шаг {i}: прибавили {x}, сумма = {total}")
print("Итого:", total)Вывод:
шаг 0: прибавили 3, сумма = 3 шаг 1: прибавили 1, сумма = 4 шаг 2: прибавили 4, сумма = 8 шаг 3: прибавили 1, сумма = 9 шаг 4: прибавили 5, сумма = 14 шаг 5: прибавили 9, сумма = 23 шаг 6: прибавили 2, сумма = 25 шаг 7: прибавили 6, сумма = 31 Итого: 31
В FPGA ту же сумму можно собрать деревом сумматоров: на первом уровне 4 сумматора складывают пары, на втором — 2 сумматора, на третьем — 1. Все сумматоры одного уровня работают одновременно, и результат готов за 3 «слоя» логики, а не за 8 шагов. Вот это дерево:
data: 3 1 4 1 5 9 2 6
\ / \ / \ / \ /
4 5 14 8 <- уровень 1 (4 сумматора параллельно)
\ / \ /
9 22 <- уровень 2 (2 сумматора)
\ /
31 <- уровень 3 (1 сумматор)Чем больше данных, тем сильнее выигрыш: процессору нужно N шагов, схеме — около log₂(N) слоёв. Именно так FPGA «обгоняет» процессор на потоковых задачах — не за счёт высокой тактовой частоты (она у FPGA как раз скромнее), а за счёт того, что делает много дел разом.
Частые ошибки в понимании
- «FPGA — это очень быстрый процессор». Нет. FPGA вообще не процессор: в ней нет инструкций, которые «выполняются». Есть схема, по которой текут сигналы. Хотя внутри FPGA можно построить процессор — но это будет ваша схема процессора, а не встроенный CPU.
- «Конфигурация прошивается навсегда». Чаще наоборот: большинство FPGA хранят конфигурацию в SRAM и теряют её при выключении питания, загружая битстрим заново при старте. Перепрошить можно сколько угодно раз.
- «Verilog — это язык программирования FPGA». Verilog описывает схему, а не алгоритм. Это совсем другое мышление, к которому мы будем привыкать весь курс.
Итог
- FPGA — микросхема, внутри которой вы сами выкладываете цифровую схему, загружая битстрим.
- Главное преимущество — массовый параллелизм: много блоков работают одновременно.
- Применяется в DSP, телекоме, ускорителях, ИИ, прототипировании ASIC.
- Это не процессор и не «быстрый CPU» — это конфигурируемое железо.