Программируемая логика: железо, которое перепрошивается

Знакомимся с 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» — это конфигурируемое железо.
Проверьте себя
1. В чём главное архитектурное преимущество FPGA перед обычным процессором?
AБолее высокая тактовая частота
BМассовый параллелизм на уровне схемы — много блоков работают одновременно
CБольший объём оперативной памяти
DПоддержка большего числа инструкций
2. Что такое битстрим (bitstream) в контексте FPGA?
AПоток входных данных для обработки
BФайл-конфигурация, задающий внутреннюю схему FPGA
CСкомпилированная программа на C
DПротокол передачи данных по сети
3. Почему утверждение «FPGA — это просто очень быстрый процессор» неверно?
AFPGA медленнее любого процессора
BВ FPGA нет выполняемых инструкций — есть схема, по которой параллельно текут сигналы
CFPGA не умеет выполнять арифметику
DПроцессор тоже является FPGA