Pull to refresh

WebFPGA — разработка на Verilog в браузере

Reading time7 min
Views5.7K
Думаю, многие программисты, начиная от питонистов-датасайентистов и заканчивая суровыми разработчиками драйверов, временами возводят очи горе и мечтательно вздыхают: «Эх, пoжёcтчe бы чего, похардкорнее...». Мы, конечно, говорим про Verilog, язык описания и моделирования электронных систем. Verilog всегда стоял особняком среди языков программирования; позволяя решать задачи, которые не осилить никаким иным образом, он, однако, требует наличия специфической аппаратной платформы, ПЛИС — программируемой логической интегральной схемы. Порог входа в разработку на Verilog относительно высок, но, возможно, скоро он станет чуть ниже, потому что прямо сейчас идёт

Краудфандинговый проект: WebFPGA.
Суть проекта: Отладочная плата для ПЛИС iCE40UP5k. Всё программное обеспечение для разработки и отладки размещено в облаке, взаимодействие с платой происходит в браузере при помощи API WebUSB.
Платформа: Kickstarter.
Автор: Райан Якобс (программист), Мик Якобс (инженер-электронщик).
Локация: Лос-Анджелес, Калифорния, США.



На плате объединены ПЛИС Lattice iCE40UP5k (5280 логических ячеек, 32 GPIO, 1 Мбит SRAM) и микроконтроллер «STM32F04-Series»; более точно модель микроконтроллера разработчик не сообщает, но судя по фотографии платы, это TSSOP-20, а в TSSOP-20 ST Microelectronics выпускает только один микроконтроллер «STM32F04-Series» — STM32L041F6 за €2.02.

Интересно, что один из авторов проекта, Райан Якобс — студент UCLA, толкового резюме у него пока нет, поэтому он дает ссылку на GitHub, на котором уже успел заработать 1700 звёзд.

Пока облачная часть проекта хостится на 6 серверах (точные характеристики не озвучиваются, из всей спецификации известно только, что это «сдвоенные Xeon»), разработчик обещает, что часть собранных в результате кампании средств пойдет на выплаты за уже купленное оборудование, если же собранная сумма превысит цель проекта в $10000, то эти дополнительные средства будут сигналом, говорящем о большом количестве потенциальных пользователей и серверный парк будет расширен. По словам автора, облачное хранилище вроде Amazon или Azure совершенно не вписывается в текущую бизнес-модель, поэтому сразу было решено разворачивать весь бэкенд на собственных серверах.

Чтобы предупредить возможные волнения среди потенциальных пользователей по поводу недостаточной вычислительной мощности серверов, Райан заверяет, что «серверы используются только для синтезирования и передачи конечному пользователю бинарного кода, размер которого составляет всего 3 килобайта». На мой взгляд, объем трафика действительно невелик — «наверх» уходит исходный код на Verilog, который можно еще и хорошо сжать, «вниз» приходит бинарная прошивка, размер которой действительно невелик в силу относительно небольшой ёмкости используемой ПЛИС.

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

Лично моё знакомство с ПЛИС пришлось на первую половину нулевых (это были ПЛИС Actel, прошивка которых разрабатывалась в связке Libero + Synplify + ModelSim) и, насколько я помню, процесс синтеза даже для несложных, учебных проектов никогда не был молниеносным. Собственно, как и любому процессу компиляции, синтезу свойственны всяческие периодические заминки и заикания, но будем надеяться, что среднее время отклика сервера будет в рамках человеческого терпения. Кстати, когда в FAQ автор говорит об оптимизации компиляции путем кэширования бинарных файлов (в случае, если код Verilog-файла и флаги компилятора были неизменными, пользователю просто отдается последний полученный бинарник), то упоминает о том, что «вам не нужно будет 2 минуты ожидать завершения процесса синтеза».

Если вас по каким-то причинам не устраивает разработка через браузер (как минимум можно предположить, что первое время процесс будет сыроват), то вы можете работать с ПЛИС через IceStorm/iCECube.

Если вас заинтересовала технология WebUSB, то можете обратить внимание на следующие открытые проекты (все ссылки ведут на GitHub, так что можете сразу залезть этим проектам под капот):

  • WebUSB + Arduino. Работает только на Arduino-совместимых платах с полноценным USB, вроде Arduino Zero или Adafruit Feather 32u4.
  • WebLight. Светодиод, подключенный к микроконтроллеру ATtiny85 и контролируемый через интернет. Разумеется, если вы можете контролировать светодиод, вы можете контролировать и другие внешние устройства, всё, что можно подключить к GPIO.
  • Yubikey HOTP. Устройства для защиты личных данных на компьютерах и смартфонах. Работают с Facebook, Gmail, GitHub и многими другими сервисами.
  • webdfu. USB DFU используется для программирования микроконтроллеров. Сам я использую это режим для программирования устройств на базе микроконтроллеров STM32. Теперь, если наладчику нужно обежать технологическую установку и обновить прошивку нескольких десятков устройств, можно брать с собой не ноутбук с Windows, а Android-телефон.
  • JS IDE для RTOS Zephyr Project, позволяющий загружать код на все совместимые с Zephyr платы, а их больше сотни. Так что прямо сейчас купить что-нибудь вроде STM32F723E Discovery или UDOO Neo Full и писать код для них прямо в телефоне.

На странице проекта разработчики говорят о поддержке технологии WebUSB в браузерах Chrome, Opera и Edge, но на mozilla.org сейчас другая информация, Edge в списке совместимых браузеров отсутствует:



Учитывая то, что Microsoft Edge сейчас занимает всего 5.2 % рынка браузеров, это не критично, но, если у вас всё-таки Edge, имейте ввиду возможную несовместимость. С другой стороны, теперь появилась возможность разработки для ПЛИС в Chrome OS, что раньше было принципиально невозможно.

Стоит ли помочь этому проекту? На мой взгляд, стоит. К сожалению, когда я уж было хотел вступить в ряды бэкеров, оказалось, что для заказа WebFPGA необходимо быть жителем США или Канады. Если же вы житель глобального «замкадья», то автор дипломатично просит связаться с ним и обещает подумать, что с этим можно сделать. Я не совсем понимаю, с чем связано такое ограничение, обычно авторы краудфандинговых кампаний просто определяют разную стоимость доставки предмета в разные страны (в соответствии с тарифами почты страны локализации проекта), так что посылку можно получить и в менее благополучных регионах, чем Северная Америка.

ПЛИС iCE40UP5k, насколько я знаю, не подпадает ни под какие экспортные ограничения и лежит в свободном доступе на Mouser по цене €6.46. Микроконтроллер STM32L041F6 за €2.02 тем более доступен для свободного заказа. Возможно, автор краудфандинговой кампании решил руководствоваться принципом Парето 80/20 и мягко отказаться от работы с заказчиками за пределами цивилизованной ойкумены? Если он действительно тянет проект в одиночку, то это может оказаться правильным бизнес-решением.

Проект, конечно, несколько спорный. Разработка на Verilog в браузере с использованием облачного программного обеспечения — ну вроде круто; особенно для стран, где уважительное отношение к проприетарному ПО подкрепляется многочисленными реальными судебными прецедентами и скачать какую-нибудь действительно крутую и удобную IDE для разработки на Verilog с торрентов, а потом еще и использовать её в своей коммерческой деятельности — явление, гораздо менее распространенное, чем, скажем, в странах бывш. СССР. Сам я с торрентов, конечно же, ничего не качаю и вам не советую, но вот кто-нибудь вполне может так поступить, от него всего можно ожидать.

С другой стороны, сейчас есть возможность использовать какую-нибудь бесплатную среду программирования для ПЛИС (хотя бы iCEcube2, который, хотя и привязывается в вашему аккаунту Lattice и MAC-адресу рабочей машины, но раздается совершенно бесплатно) плюс недорогую отладочную плату от китайского производителя, так что при невозможности купить специализированное ПО обязательно ориентироваться на облачные вычисления совсем не обязательно. Но — проект достаточно крут и сам по себе (Verilog! В браузере! WOW!), и может привести в результате развития к чему-то большему. Может быть, со временем родится экосфера, близкая к сообществам пользователей Arduino или Raspberry Pi и энтузиасты любительской разработки ПЛИС смогут обмениваться Verilog-кодом, скомпилированными ядрами и другими наработками так же свободно, как сейчас это происходит в мире микроконтроллеров. В целом, мне кажется, что плюсы кампании перевешивают минусы.

К чести авторов краудфандинговой кампании, они не замалчивают факт существования конкурентных устройств, которые тоже пытаются сочетать интересную начинку и достаточно низкую цену:

  • MojoBoard V3, цена $75, несет на борту ПЛИС Spartan 6 XC6SLX9 в корпусе TQFP-144, гребенки на 84 GPIO микроконтроллер-компаньон ATmega32U4;
  • IceBreaker, еще один краудфандинговый проект, уже удачно закрытый; за $69 предлагается плата с ПЛИС Lattice iCE40UP5k и преобразователем FT2232;
  • TinyFPGA BX, цена $38, ПЛИС ICE40LP8K (7680 логических ячеек), 41 контакт GPIO.

Лично я, живя в России, не могу полноценно поучаствовать в проекте WebFPGA, но я отправил Райану $5 при помощи опции «Сделать пожертвование без вознаграждения» (это что-то вроде кнопки «Отправить деньги автору», имеющейся на Хабре). Во-первых, мне кажется, что сам по себе проект весьма интересен и полезен. Во-вторых, небольшое пожертвование автоматически подписывает меня на все новости по проекту, так что я чувствую немножко Уорреном Баффетом, который иногда покупает по одной акции заинтересовавшей его компании, чтобы потом, будучи акционером, хотя и миноритарным, ежегодно получать полный пакет отчетности.

Судя по личности авторов, один из которых днюет и ночует на GitHub'е, так что даже в случае, если проект не взлетит, мы всё равно получим большое количество весьма полезного исходного кода, и, возможно, со временем найдутся люди, готовые, так сказать, поднять упавшее знамя.

Я веду небольшой блог, связанный с open source hardware и краудфандингом; если у вас на примете есть интересная DIY-разработка или краудфандинговый проект в области электроники, буду благодарен вам за ссылку.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 15: ↑13 and ↓2+11
Comments13

Articles