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

    Думаю, многие программисты, начиная от питонистов-датасайентистов и заканчивая суровыми разработчиками драйверов, временами возводят очи горе и мечтательно вздыхают: «Эх, п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-разработка или краудфандинговый проект в области электроники, буду благодарен вам за ссылку.
    Поддержать автора
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 13

      0
      как-то сложно. почему бы не сделать, как в mbed? микроконтроллер представляется системе как mass storage устройство, на которое можно скинуть bitstream и он же загрузит его в fpga. веб сервис же после синтеза просто предлагает скачать этот файл.
        0
        Потому что FPGA НЕ МИКРОКОНТРОЛЛЕР! При разработке нужно пройти семь кругов ада довольно сложный процесс. Начиная от синтеза, заканчивая маппингом, прейсментом и роутингом. В зависимости от сложности, проект UART+I2C+SPI может собираться от 5 до 30 минут (при очень высоких частотах и большой плотности размещения). А потом нужно сконфигурировать саму ПЛИСину. Не залить программный код в память, а именно сконфигурировать. Это конечно происходит по такому же последовательному интерфейсу, но тут нет никаких «фишек» чистый поток единиц и нулей.
        Поэтому перенос всех «тяжелых» работ в облако выглядит очень заманчиво. И может вправду понизит порог страдания вхождения в разработку на FPGA (заметьте, НЕ программирования)
          +1
          ты не понял мой вопрос. зачем городить костыли ввиде webusb, когда можно просто в облаке собрать битстрим и скинуть его на mass storage.
            0
            Возможно причина как раз в специфике работы Латтисов (не имел дела с этим производителем), либо причина в стремлении прикрепить платку к конкретному веб хранилищу, чтобы человеки не могли применять её «налево». Тут всё покрыто тайной ;)
            +1
            Не вижу принципиальной разницы.
            При разработке нужно пройти семь кругов ада довольно сложный процесс. Начиная от синтеза, заканчивая маппингом, прейсментом и роутингом. В зависимости от сложности, проект UART+I2C+SPI может собираться от 5 до 30 минут (при очень высоких частотах и большой плотности размещения).

            Синтез, как и компилирование прошивки проиходит полностью off-line в том смысле в этом процессе не требуется подключенный целевой кристалл.
            А потом нужно сконфигурировать саму ПЛИСину. Не залить программный код в память, а именно сконфигурировать. Это конечно происходит по такому же последовательному интерфейсу, но тут нет никаких «фишек» чистый поток единиц и нулей.

            По большому счету принципиальной разницы и нет. Что в одном что в другом случае с данными производится некая процедура передачи на целевой кристалл. А т.к. как нам сказали в статье, размер «прошивки» всего 3КБ, ничто не мешает вот этому микроконтроллеру принять по usb прошивку и изобразить из себя прошивающий хост, благо все эти процедуры производителями расписаны достаточно подробно.
              0
              Чуть выше я ответил на вопрос. Добавлю, что хотя «продвигать» FPGA в массы и является благородной целью, тем не манее даже сами производители не всегда открывают полную документацию для разработчиков. Что приводит к куче инливидуальных разработок и неоднократных наступаний на грабли.
                0
                Тоже про них слышал только название, но быстрый гуглёж выдал такой документ: iCE40 Programming and Configuration из которого видно что шьется эта FPGA вообще по обычному SPI. И сам-же производитель говорит что можно конфигурировать внешним контроллером:
                ice40prog
                Так что проблем и принципиальных отличий по-прежнему не вижу.
                  0
                  Значит преподаватель сильно повлиял на студента и вместо создания открытого продукта, было решено делать как всегда закрытый проприетарный сандбокс.
                    0
                    Особенно сильно что такое это WebUSB не смотрел, но кажется контролллер для того и стоит чтобы принять некоторый бинарник и зашить его в ПЛИС. Т.е., КМК, надо просто изменить прошивку набортного контроллера и он вполне сможет изображать из себя MSD.
          0
          Какой-то AWS EC2 F1 для бедных для тех кто не осилил оригинал.
            –1
            Я не совсем понимаю, с чем связано такое ограничение

            Технология FPGA вроде как под экспортными ограничениями, некоторые страны СНГ как раз в списке тех, кому нельзя поставлять (во всяком случае софт для работы с FPGA, поправьте, если ошибаюсь).
            У Xilinx (это другой вендор FPGA, но суть та же) на сайте такое:
            Furthermore due to strict export control policy, it is no longer possible to create or to maintain an online account in some E or D category countries. See here for more information.

            Наверно автор проекта не хочет получить проблем с регулированием.
              +1

              Похоже на развернутый на сервере Project IceStorm: http://www.clifford.at/icestorm/

                0
                В TSSOP-20 у ST множество МК, например широко используется STM32F042, которые как раз с USB. А STM32L041F6 — без.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое