В подкасте «Битовые Маски» ведущие Лена Лепилкина и Антон Афанасьев обсуждают с экспертами системное программирование и разработку «железа». В 25-м выпуске гостем стал Михаил Коробков — создатель сообщества FPGA-Systems и одноименного журнала, ПЛИСовод-энтузиаст и по совместительству старший инженер по разработке СнК в YADRO

Мы выбрали несколько интересных историй нашего героя. Больше — в полном видео и аудиоверсии подкаста.

Михаил Коробков учился в Рязанском радиотехническом университете — именно там началась его история с ПЛИС. Сперва это были ПЛИС от Altera с кодом на архаичном языке AHDL (Altera HDL) и EPF 10K (Flex 10K), клоны которой до сих пор применяются в отечественном производстве. А первым коммерческим проектом на ПЛИС у гостя подкаста был коммутатор для сигналов гигагерцового диапазона — именно на ПЛИС Михаил коммутировал антенные решетки. 

До прихода в YADRO Михаил успел поработать в НИИ космического приборостроения, тренинг-центре Xilinx (Inline Group), Siemens и Menta eFPGA.

Содержание

И на Марсе, и в телевизоре — что такое ПЛИС и где ее можно найти

Михаил: ПЛИС — это микросхема широкого профиля. Ее применяют в разных сферах — это может быть и цифровая обработка сигналов, и прототипирование, и портативная электроника, и даже телефоны. 

Недавно я побывал на форуме Микроэлектроника-2025 и видел ПЛИС от Lattice в одном из серверов «Бештау». Она выполняет функцию board management controller — ПЛИС мониторит и делает секвенсинг питания, проверяет последовательность включения процессора и необходимой периферии.

Помимо серверов, ПЛИС часто применяют в камерах наружного наблюдения. Передавать информацию с камер куда-то на сервер — невыгодная история, так как должен быть большой канал передачи данных. В обход можно поставить в камеру маленькую ПЛИС и системный кристалл типа Zynq. Процессорная часть будет отвечать за поднятие Linux и стека TCP/IP, а на ПЛИС будут вычисляться алгоритмы обработки изображения — выделение номера и какие штрафы начислить. Все это можно сделать внутри самой камеры с ПЛИС. К тому же это довольно экономно по энергопотреблению — по ваттам выходит точно меньше, чем у графической карты. 

ПЛИС очень часто применяют в космосе — причем как и на низкой орбите, так и на высокой. И, соответственно, может быть два типа ПЛИС. Если ПЛИС летает на низкой орбите, можно запустить большое количество маленьких космических спутников — примерно так делает Илон Маск, потому что такие ПЛИС стоят мало по сравнению с другим видом ПЛИС — радстойкими, которые в сотни раз дороже. И, например, ПЛИС обычного и радстойкого Virtex-5 — это тысяча долларов и сто тысяч долларов соответственно. Радстойкие ПЛИС запускали на Марс в роверах.

В потребительской электронике или технике специального назначения также встречается ПЛИС. Даже есть история о том, что первые телевизоры со стандартом HDMI выпускались с ПЛИС Spartan. 

ПЛИС как изделие имеет границу окупаемости. Это значит, что если вы выпускаете сотни или тысячи изделий, вы можете поставить ПЛИС, которая легко реконфигурируется, что-то поправить в прошивке и оперативно выпустить обновление. Но если устройств уже больше сотни тысяч, то выгоднее будет сделать ASIC. Таким образом, у ASIC дорогая разработка, но дешевое массовое производство, а у ПЛИС — ровно наоборот. Поэтому, выбирая ПЛИС, в долгосрочной перспективе можно проиграть.

Где еще можно найти ПЛИС, слушайте в подкасте с 38 минуты.

Про виды ПЛИС и их экосистемы

В основе классификации ПЛИС лежит производительность. Допустим, можно классифицировать по начинке стандартных блоков и наличию готовых IP-ядер, различных фильтров, кодеков и интерфейсов с разными протоколами. Поддерживается ли сторонними САПР или не поддерживается? Есть ли экосистема и какая? Например, MATLAB у Lattice нет, но есть у Altera и Xilinx. У последней вообще есть замечательный system-generator, благодаря которому можно нарисовать все в Simulink и получить готовый пр��тотип.

При наличии хорошей экосистемы инженер, который занимается алгоритмами цифровой обработки сигналов, может спокойно работать в MATLAB и не знать никаких Verilog. Для того, чтобы эта математика легла в ПЛИС и исполнилась на нужной частоте, надо просто открыть MATLAB и проверить написанный в Simulink алгоритм. То есть на «внутрянку» ПЛИС внимание можно не обращать, только на частоту и на количество DSP-ячеек или блочной памяти — на то, что нужно для вашего алгоритма. 

Но есть обратная история, когда из ПЛИС хотят выжать максимум, — тогда за дело берутся истинные профессионалы, которые сидят и разрабатывают чуть ли не на LUT. Вместо DSP-блоков там отдельные расчетные компоненты, а в саму систему заливают масло для охлаждения — настолько это мощный аппарат.

Про особенности «низкоуровневого» программирования на ПЛИС слушайте с 48 минуты.

Порог входа в ПЛИС и как Vivado спасает время 

Когда я только начинал в ПЛИС — все было гораздо дороже. Сейчас дела обстоят иначе — есть Gowin и AliExpress, поэтому отладочную ПЛИС можно найти меньше чем за тысячу рублей. А еще 10 лет назад одна такая обошлась мне в 10–12 тысяч. Это довольно большие деньги по сравнению с тем, что можно было бы потратить при освоении микроконтроллеров. Их вообще можно было осваивать бесплатно — поставить себе на компьютер Keil Studio, потыкаться в Assembler, посмотреть, как оно компилируется. В крайнем случае можно было поставить эмулятор обычного процессора. В ПЛИС же так нельзя. Порог вхождения в ПЛИС гораздо выше, чем порог вхождения в микроконтроллеры. 

При этом я не могу сказать, что производство ПЛИС сложнее производства микроконтроллеров. ПЛИС — это та же микросхема, тот же ASIC, только, грубо говоря, реконфигурируемый. И все это производят на какой-то фабрике — все как-то привязаны к производству. 

Делая высокопроизводительный ПЛИС, нужно перерыть ни один десяток патентов, чтобы понять, как это работает. Допустим, в современных ПЛИС lookup table — это не просто ячейка памяти. Здесь отдельный LUT может выступать и сдвиговым регистром, и вычислять логические функции, и даже быть интерконнектом. То есть это многофункциональное устройство. Архитектурно — квадратик, а внутри квадратика — три или четыре разных функции, которые определяются вашими задачами. Нужно сделать сдвиговый регистр? Для этого больше не нужно 32 триггера, потому что это все уже есть в LUT. Таким образом, можно сэкономить кучу ресурсов и роутинг-цепей.  

Только вот загвоздка в том, что если даже ваш проект синтезировался, не факт, что он может быть размещен на кристалле. Особенно если этот проект большой. А если он все-таки будет размещен на кристалле, то еще не факт, что он разведется. 

Меня позабавила одна команда Vivado — можно было на начальных этапах проекта ее написать, а она сразу определяла, разведется ли проект или нет. Это экономит очень много времени, поскольку наши проекты могут собираться до 20 часов. Конечно, это не как у физдизайнеров, когда проект собирается неделю. Но итераций у нас больше, поэтому времени все равно уходит достаточно. 

Что делают, если проект не влезает на кристалл, что такое partitioning и сколько стоит эмулятор RTL-эмулятора, слушайте в подкасте с 1:06:00

eFPGA и несбывшаяся мечта

Всего четыре компании в мире сейчас занимаются eFPGA (Embedded FPGA) — в целом у такого FPGA очень нишевое применение, например, в ЦЕРН. Сама по себе матрица ПЛИС достаточно маленькая — это помогает ей, например, ловить отклики от частиц. 

Для eFPGA надо купить матрицу ПЛИС, которая будет выступать как IP-ядро после установки ее к себе в процессор. Когда я работал в Menta eFPGA, у меня возникла идея взять архитектуру eFPGA и сделать ее на «Микроне». Пускай она будет квадратная и выглядит как кирпич, но это будет нормальная ПЛИС на десятки тысяч LUT. Мы в свою очередь наставим на нее DSP-блоков или блочной памяти — чего хотим. Преимущество eFPGA в том, что можно самому составить архитектуру.

Такая архитектура — DSP-ячейки, блочная память, LUT — это все конфигурируется на этапе создания eFPGA. Можно сделать десять или сорок колонок памяти, добавить DSP-ячейки и даже вставить свои кастомные блоки. То есть можно написать какой-нибудь хороший ускоритель, который помещается в заданную ширину и длину, расположить его, и получится аппаратный блок внутри ПЛИС. А затем запустить ее в массовое производство на фабрике. Это была классная идея, но априори особого отклика она не нашла.

Компания Dialog, например, выпускала самую дешевую ПЛИС «ForgeFPGA» — она стоила 50 центов. Конкретно эта ПЛИС была однократно программируемой — у нее было всего 900 LUT. Можно было просто купить килограмм таких и вставить в какие-то маленькие приложения вместо CPLD. И внутри этой ПЛИС был корпусированный eFPGA. То есть по сути та же идея, которую я хотел воплотить здесь, в РФ, — взять eFPGA и закорпусировать ее. 

Как сложилась судьба ForgeFPGA и другие подробности о том, где eFPGA находит свое применение, Михаил рассказывает с 1:30:00.

Высокоуровневый синтез

ПЛИС программируют с незапамятных времен — с 1984 года. VHDL, Verilog и System Verilog — это три базовых сочетаемых компонента, которые реализуют нативное программирование на ПЛИС. 

Но VHDL потихоньку отмирает. И в полупроводниковой индустрии, где занимаются разработкой ASIC, VHDL практически не встречается. Или когда я работал в Menta, бывало такое, что приходил заказчик и просил переписать VHDL-«корку» на Verilog. Также уходу VHDL способствуют UVM-верификация на SystemVerilog и тулы с расширенной поддержкой Verilog. Можно сказать, что и сам Verilog тоже потихоньку уходит из-за популярности SystemVerilog, так как в нем удалось объединить и Verilog, и частичку VHDL. 

Еще с 90-х годов многие компании предпринимали попытки сд��лать что-то более универсальное и перетянуть разработчиков embedded-систем, которые пишут на C/С++, OpenCL или даже на каком-нибудь Java в эту когорту — чтобы эти разработчики использовали ПЛИС в качестве аппаратной платформы. Это называется high-level synthesis (HLS). Этой теме был посвящен один из моих первых стримов — 45 минут я рассказывал, что такое HLS и как им пользоваться. Кажется, Юрий Владимирович Панчул тоже этим занимался

Зачем оно нужно? Есть класс алгоритмов, которые хорошо параллелятся и которые не очень удобно считать на процессорах. Например, матричное умножение, на котором построена вся видеообработка, — это несколько подряд идущих циклов. Было бы хорошо эти циклы развернуть. Зачем нам считать восемь раз подряд, когда можно посчитать восемь элементов параллельно? И зачем нам делать второй цикл, когда можем развернуть еще восемь элементов и сразу посчитать 64 элемента? И так далее. В случае ПЛИС кодогенерация получается обалденная. Банальная операция из цепочки циклов легко разворачивается и ложится на параллельную логику ПЛИС. 

Но просто так взять код, написанный на C, и переложить на архитектуру ПЛИС не получится — у нее есть ограничения. Например, для того же матричного умножения элементы матрицы надо где-то хранить и откуда-то потом брать, нужна память, а она двухпортовая, не восьми- или десятипортовая. Каждый раз есть тупик в виде аппаратных ограничений. Без учета архитектуры ПЛИС эта кодогенерация бессмысленна. Но все равно эта технология начала продвигаться уже достаточно давно. 

В 2012 году Xilinx очень плотно за нее взялась, как раз когда появилась среда Vivado HLS. Xilinx выпустил примеры и даже OpenCV переложили на свою платформу. То есть можно было взять OpenCV-код и получить этот код в Verilog, уже адаптированный под ПЛИС. В таких средах и функции на C/C++ можно было ускорить, просто по нажатию кнопки передав их в ПЛИС.

Что это за среды и как запускать Python на ПЛИС, можно узнать в подкасте. Таймкод — 1:44:00.

Про будущее ПЛИС

ПЛИС всегда развиваются согласно трендам. Допустим, сейчас на пике популярности искусственный интеллект, и поэтому начали появляться специальные вычислительные IP-ядра в ПЛИС как раз для таких задач. Или когда дело касается серверов, если нужно провести большую обработку данных, то для этого хорошо подходит ПЛИС.

Поэтому будущее у ПЛИС есть, но оно зависит от индустрии. Как, например, было в 90-е, когда хорошо пошел телеком — в ПЛИС появились DSP-блоки с блочной памятью и на ПЛИС было удобно выполнять алгоритм цифровой обработки сигналов. В 2000-х начался бум скоростной передачи данных — в ПЛИС появились трансиверы и их стали применять в этой сфере. Нужно было убрать связку между процессором и ПЛИС — их сделали в одном корпусе. То есть, что скажет индустрия, то и будет в ПЛИС. Но, конечно, хочется чего-то новенького. 

Что же ждет ПЛИС, слушайте с 1:52:00.


Еще в подкасте:

  • 8:00 Как платформа для фрилансеров послужила началом российского сообщества ПЛИСоводов.

  • 31:00 Про связь ПЛИС и трех токсичных индустрий — крипту, HFT и ИИ.

  • 45:00 Почему у Gowin и Lattice одинаковые логотипы.

  • 58:00 Чем на самом деле занимается инженер по прототипированию FPGA.

  • 1:24:00 Как обстоят дела с отечественными ПЛИС.

  • 1:56:00 Чат в телеграм, конференция и журнал — чем занимается сообщество FPGA-Systems.

Полную версию подкаста можно посмотреть и послушать на Истовом Инженере →