- BrainTools - https://www.braintools.ru -
Программирование ПЛИС (FPGA) считается высшим пилотажем в мире цифрового DIY аудио.
Вы можете реализовывать FIFO буферы, которые накапливают аудиоданные и устраняют джиттер, а также создавать собственные цифровые фильтры с характеристиками, заметно превосходящими то, что доступно в серийных ЦАП (или DAC) микросхемах.
Есть только одна проблема, зато существенная.
Нужно научиться программировать на Verilog или VHDL, то есть на языках описания аппаратуры. Их логика [1] сильно отличается от привычных языков программирования и даже от программирования микроконтроллеров.
Если вы занимаетесь этим в качестве хобби и вам уже не двадцать, порог входа может показаться очень высоким. Именно поэтому, хотя я купил отладочный комплект Spartan 6 почти десять лет назад, до дела у меня так и не дошло.
Перенесемся в 2026 год, когда ИИ уже считается «вроде как зрелой» технологией.
Вся молодежь сейчас занимается вайб‑кодингом: просто обсуждает с ИИ, что хочет реализовать, а затем позволяет искусственному интеллекту [2] написать весь код.
После нескольких итераций такого процесса обычно получается что‑то работающее. Возможно, это не элегантно, не оптимизировано и не безопасно, но по крайней мере работает. Сам факт того, что человек без навыков программирования может создать рабочую и, предположительно, полезную программу, выглядит почти невероятно.
И я подумал: а что, если применить этот подход к проектированию на ПЛИС?
Так что я взялся за работу, точнее, за переписку с Gemini Pro 3.1.
Прежде чем продолжить, небольшое замечание. Не все ИИ одинаково способны. Если вы думаете, что сможете провернуть нечто подобное на «бесплатных / быстрых» моделях, вы сильно ошибаетесь. Вам понадобится вся доступная вычислительная мощность. Я справился с базовой подпиской Gemini Pro примерно за 20 долларов в месяц, но доступ к топовым моделям Claude сэкономил бы мне много времени. Для проекта уровня хобби это не такая уж большая проблема, но все же.
Вернемся к делу.
Получив от Gemini подтверждение, что он действительно может написать за меня большую часть кода на Verilog, и осознав, что Spartan 6 уже изрядно устарел, я начал подбирать подходящую ПЛИС.
Главное требование: ее должно быть реально запаять вручную. Я должен был иметь возможность припаять ее к печатной плате (PCB), не заказывая производство уже собранной платы. Это означало: никаких BGA‑корпусов.
Я подумал и остановился на Intel / Altera MAX 10 [3]. У нее есть достаточно мощные варианты в корпусе EQFP на 144 вывода, который можно паять вручную. Отлично.
Отладочную плату 10M08 можно купить на Mouser [4] примерно за 60 долларов.

Правда, программатор, который вам тоже понадобится, USB Blaster, на самом деле стоит чуть дороже [5] самой отладочной платы. У вас может возникнуть соблазн купить клон программатора на eBay. Не покупайте такое устройство. Оно не заработает, даже если ИИ будет утверждать обратное. Я купил такой, попытался заставить его работать и это с треском провалилось. Я спросил у ИИ, почему у меня ничего не получается, и ответ был примерно таким: «А, у тебя тот самый, китайский? Извини, это хлам, он никогда не заработает, просто отдай 60 долларов за нормальный программатор».
В общем, когда у меня на руках оказался рабочий программатор, я открыл Quartus, написал свою первую «мигалку» на Verilog и загрузил ее на отладочную плату. Светодиод начал мигать. Прекрасно.

Следующий шаг: сделать что‑нибудь полезное. С помощью Gemini я начал писать, ладно, на самом деле копипастить фрагменты кода, которые должны были реализовать приемник I2S, FIFO с двумя тактовыми доменами и передатчик I2S, пока только для частоты дискретизации 44,1 кГц и разрядности 32 бита. Предполагалось, что PLL‑блоки будут генерировать необходимые сигналы BCLK, LRCLK и DATA из системной тактовой частоты 50 МГц. Часть процесса свелась к борьбе с ошибками Quartus, особенно при попытках генерировать IP‑ядра и при появлении битых экранов в интерфейсе. Здесь ИИ очень помогал: предлагал решения и обходные пути для ошибок.
Когда тестовый проект был собран, я подключил Amanero как источник I2S, а небольшой ЦАП (цифро‑аналоговый преобразователь) на базе ES9023 как приемник I2S. Аналоговый выход ЦАП я подключил к осциллографу и загрузил код в ПЛИС. Затем воспроизвел тестовый файл с синусоидой 10 кГц и получил… мусор на осциллографе.
Ну а чего я ожидал? Это была практически «слепая» попытка ПЛИС программирования.
Но затем началась магия искусственного интеллекта. Я описал ИИ, что именно делаю и что вижу на осциллографе, и после нескольких вопросов и ответов он точно понял, что происходит. Он предложил внести в код несколько изменений, и, о чудо, я увидел на осциллографе чистый сигнал 10 кГц.

Так у меня появилась система, которая принимала сигнал I2S, буферизовала его в FIFO и выводила через передатчик I2S. Это был первый и самый важный шаг к тому, что я хотел реализовать, и все заработало спустя пару часов работы.
И все это без необходимости написать хоть одну строку кода на Verilog. Сплошная победа.
Дальше проект развивался естественным образом.
Мне удалось заставить работать счетчики битов, чтобы определять частоту дискретизации входящих сигналов.
Я запустил внешний MCLK (опорный тактовый сигнал), чтобы выход ПЛИС работал синхронно с ЦАП.
Я запустил двунаправленный UART (универсальный асинхронный приёмопередатчик), чтобы видеть, что происходит внутри ПЛИС, и отдавать ей команды: например, переключить вход или сообщить мне частоту дискретизации.
Но не все заработало сразу. У меня появилась идея реализовать тестовую процедуру PRBS-15 для проверки побитовой точности, чтобы визуально убедиться, что ПЛИС ничего не портит в моем сигнале. Gemini 3.1 Pro не смог понять, почему она не работает. Claude Sonnet 4.6 тоже. Claude Opus 4.7 тоже. Так что я отказался от PRBS и перешел на алгоритм распознавания «известного шаблона». Он заработал сразу, и этого было вполне достаточно.
Затем я добавил совместимость с DSD с автоматическим определением типа сигнала.
И декодер DoP.
И защиту DSD от залипших битов.
И полноценный детектор разрядности.
И светодиоды, которые показывают состояние FIFO‑буфера, а также побитовую точность и приглушение DSD.
И несколько I2S‑входов.
И приемник с декодером S/PDIF, реализованные внутри ПЛИС.
Искусственный интеллект также очень помог с созданием SDC‑файла (Synopsys Design Constraints, файл ограничений для проекта) для проекта. Такой файл обязателен, когда вы работаете с высокочастотными сигналами, чувствительными к джиттеру.
Во время наших обсуждений ИИ приходилось напоминать, что мы уже реализовали, из‑за ограниченного размера контекстного окна. Но в целом он справлялся очень неплохо.
Бывали и случаи, когда он галлюцинировал, из‑за чего я уходил по ложному пути и терял время.
Но настоящая проверка возможностей ИИ, а заодно и моего терпения, началась, когда я дошел до добавления микросхемы PSRAM (псевдостатическая оперативная память [6]) для увеличения времени буферизации.

Это оказалось серьезным испытанием. ИИ написал набор процедур, которые управляли обменом с PSRAM по шине QSPI, обработкой и упаковкой данных, псевдопараллельным чтением и записью в память и еще множеством всего.
Разумеется, с первого раза это не заработало.
И со второго тоже.
И с третьего.
Примерно в этот момент я понял, что смотреть на размытое изображение на экране осциллографа, описывать ИИ, что я вижу, и ждать, что он сам поймет, где именно проблема, уже недостаточно.

Поэтому я попросил ИИ разбить архитектуру ПЛИС на более мелкие части, которые можно тестировать по отдельности. Он назвал это хорошей идеей и именно так и сделал. Мы написали процедуры, которые проверяли данные в PSRAM на повреждения, использовали светодиоды для диагностики и UART для получения большого объема отладочной информации. Но дальше определенного предела это все равно не продвинулось.
В итоге мне пришлось достать логический анализатор Saleae и заняться классической отладкой: подавать известные сигналы и смотреть, что код с ними делает. Это сработало. Вскоре моя ПЛИС уже успешно использовала PSRAM как буфер на 64 Мбит и работала с побитовой точностью.

Вот чем я занимался последние двадцать дней.
Было очень интересно на практике понять, на что именно способны ПЛИС. Например, настоящим открытием стало осознание, что создаваемые мной функциональные блоки по сути работают параллельно, а никакого «процессорного времени», которое делится между компонентами, здесь нет. Такова детерминированная природа этих устройств. Сигнал с заданными характеристиками всегда будет обрабатываться с одной и той же скоростью, какой бы сложной ни становилась остальная часть проекта. Я могу просто добавлять модули, которые «подключаются» к тому же сигналу и что‑то с ним делают, без каких‑либо последствий для исходной обработки сигнала.
Должен сказать, давно мне не было так интересно разбираться с «новой технологией». Было крайне приятно осознавать, что проект такой сложности действительно можно навайбкодить. Хотя в итоге я все же немного выучил Verilog. Не потому что пришлось, а потому что захотел.
Итак, может ли любой человек просто взять отладочную плату и получить рабочий FIFO‑реклокер?
Это зависит от того, насколько хорошо вы понимаете архитектуру ЦАП.
Вам придется объяснять ИИ, чего именно вы хотите добиться, и шаг за шагом направлять его к цели. Но нельзя просто сказать ему: «Сделай мне ПЛИС, которая выполняет FIFO‑буферизацию сигналов I2S и DSD», и ожидать, что он справится. Если вы дадите один‑единственный запрос с описанием всей задумки, даже максимально подробный, он с вероятностью 100% не заработает, а вам потом придется мучительно разбираться, что именно сломалось.
Так что процесс займет время.
Но если проявить настойчивость и иметь под рукой логический анализатор, в конце концов у вас получится, как получилось у меня.

Следующим шагом будет разработка собственной печатной платы для ПЛИС и необходимого каскада реклокинга, который должен идти после нее.
А пока я буду ждать изготовления печатной платы, займусь кодом для повышения частоты дискретизации и цифровой фильтрации.
Потенциал здесь огромный.
P. S. При написании этого текста ИИ вообще не использовался. В отличие от кода для ПЛИС.

Так что, если вам тоже стало интересно, где заканчивается «просто попросить ИИ написать код» и начинается настоящая инженерная работа, можно продолжить эксперимент уже на открытых уроках OTUS.
Там не будут обещать, что один промпт заменит вам архитектуру, отладку и понимание предметной области. Зато можно разобраться, как на практике работают LLM, ИИ‑агенты и инженерные workflow, почему модели иногда уверенно ведут не туда и как использовать их так, чтобы в конце все‑таки получить не мусор на осциллографе, а что‑то работающее.
Ближе всего к теме этой истории:
20 мая в 20:00 — «Что надо знать про работу LLM моделей». Записаться [7]
27 мая в 20:00 — «Мифы про ИИ‑агентов: что реально работает в 2026 году». Записаться [8]
15 июня в 20:00 — «Интеграция ИИ‑агентов в рабочую разработку: обвязка агента навыками и MCP». Записаться [9]
Уроки бесплатные, проходят в рамках онлайн‑курсов, и ведут их преподаватели‑практики. Можно прийти, посмотреть, задать вопросы и понять, где ИИ действительно помогает инженеру, а где по‑прежнему нужны логический анализатор, терпение и способность не верить модели на слово.
📌 Подписывайтесь на блог OTUS [10], чтобы не пропускать разборы про ИИ, разработку и инженерную практику без магического мышления [11].
Автор: kmoseenk
Источник [12]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/30205
URLs in this post:
[1] логика: http://www.braintools.ru/article/7640
[2] интеллекту: http://www.braintools.ru/article/7605
[3] Intel / Altera MAX 10: https://www.altera.com/products/fpga/max/10
[4] на Mouser: https://gr.mouser.com/ProductDetail/Altera/EK-10M08E144?qs=AX3SRYwdf7FCUbD2xGBE%252BQ%3D%3D
[5] чуть дороже: https://gr.mouser.com/ProductDetail/993-P0302
[6] память: http://www.braintools.ru/article/4140
[7] Записаться : https://otus.pw/ecDe/
[8] Записаться : https://otus.pw/imGg/
[9] Записаться : https://otus.pw/653X/
[10] блог OTUS: https://habr.com/ru/companies/otus/profile/
[11] мышления: http://www.braintools.ru/thinking
[12] Источник: https://habr.com/ru/companies/otus/articles/1032870/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1032870
Нажмите здесь для печати.