В Киевском Политехническом Институте прошел хакатон нового типа, с одновременной разработкой и программной (Си, ассемблер), и схемотехнической (Verilog) частей системы, синтезируемой для реализации в микросхемы реконфигурируемой логики (ПЛИС/FPGA). Хакатон также поддерживался одной из кафедр Киевского Национального Университета и Imagination Technologies, разработчиком графического процессора PowerVR внутри Apple iPhone. Результат хакатона превзошел ожидания (об этом ниже), и сейчас разрабатываются планы повторить его в других местах, в частности в Томске или Новосибирске.
Хакатон в КПИ по MIPSfpga был экспериментальным в том смысле, что обычно в хакатонах участники или просто программируют (например решения SaaS), или делают устройства из готовых фиксированных микросхем и программируют их (Ардуино, STM32 Discovery). Здесь же участники и писали программу, и разрабатывали схему, интерфейсный блок на уровне регистровых передач (Register Transfer Level — RTL), после чего встраивали этот блок в синтезируемую систему с процессорным ядром MIPS microAptiv UP и шиной AHB-Lite, и реализовывали эту систему в FPGA.
Вот как это выглядело на экранах их ноутбуков, на FPGA-плате и концептуально:
Зачем нужны такие задачи?
Такие упражнения помогут вырастить инженеров систем, знакомых и с разработкой схемотехники, и с программированием, что необходимо в 21 веке, эпохе систем-на-кристалле (СнК — System-on-Chip, SoC). Также это путь к прототипированию специализированных микросхем ASIC (Application Specific Integrated Circuits), таких же, которые стоят в разнообразных встроенных системах — от кофеварок до спутников. Потом украинские исследователи в КПИ и КНУ смогут работать с европейским сервисом Europractice и производить опытные микросхемы на фабрике через MPW shuttle. Если при этом исследователи придумают что-нибудь коммерчески интересное, то они могут использовать такой прототип для привлечения венчурного капитала и создания стартапов в определенных нишах, например нише «умных датчиков» для интернета вещей.
Фотографии и видео с хакатона
Перед хакатоном по MIPSfpga было три дня семинаров Nanometer ASIC и лекций по MIPSfpga. На Nanometer ASIC записалось больше сотни человек и пришло более восьмидесяти:
На лекционную часть про MIPSfpga тоже пришло довольно много людей, причем опрос выявил, что среди них довольно много владеют Verilog, знаниями про архитектуру и микроархитектуру:
На хакатон остались самые целеустремленные:
С фейсбука ключевого организатора хакатона (Відкрита лабораторія електроніки Lampa КПИ):
Денис интегрировал ультразвуковой дальномер от Digilent (https://goo.gl/Txoxl6) в систему-на-кристалле MIPSfpga. Написал на Verilog интерфейсный модуль, который работает с сенсором по аппаратному uart и имеет управляющие регистры, отображенные в адресное пространство MIPSfpga посредством шины AMBA. Также Денис написал управляющую программу, которая считывает показания датчика из упомянутых регистров и при превышении порога подает звуковой сигнал определенной частоты. ...
Фоточки с еще одной командой победителей!
Сергей Сачов и Валера Марченко интегрировали в систему-на-кристалле MIPSfpga клавиатуру от Digilent (https://goo.gl/Xmbba6). Ребята написали на Verilog интерфейсный модуль, который работает с клавиатурой по 16-пиновому интерфейсу и имеет регистр, содержащий код нажатой клавиши, отображенный в адресное пространство MIPSfpga посредством шины AMBA. Также была написана управляющая программа, которая считывает код нажатой клавиши из упомянутого регистра и выводит соотвествующее клавише число на семисегментный индикатор.
И еще одна команда:
Посмотреть 50 фотографий с Nanometer ASIC и MIPSfpga в Киеве
Теперь поговорим про техническую часть.
Предварительные разъяснения к технической части
Пару слов для тех читателей, которые не знакомы с тем, что такое Verilog, ASIC и FPGA:
Из поста на Geektimes «Оруженосцы микроэлектроники. Видеорепортаж с конференции по проектированию электроники в Сан-Франциско»:
Пока мы обсудили кульминацию микроэлектронного проекта — изготовление микросхемы на фабрике. Но как такой проект начинается?
В последние 25 лет дизайн микросхемы чаще всего пишется на языке описания аппаратуры Verilog ([ранее] в Европе и у военных — VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы.
Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. — получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы. Самые известные фабрики этого типа принадлежат компании Taiwan Semiconductor Manufacturing Company или TSMC.
Из поста на Habrahabr Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:
В самом простом варианте FPGA состоит из матрицы однородных ячеек, в функцию каждой из которых можно поменять с помощью мультиплексоров, подсоединенных к битам конфигурационной памяти. Одна ячейка может стать гейтом AND с четырьмя вводами и одним выводом, другая — однобитным регистром и т.д. Загружаем в конфигурационную память последовательность битов из памяти — и в FPGA образуется заданная электронная схема, которая может быть процессором, контроллером дисплея и т.д.
ПЛИС-ы / FPGA — не процессоры, «программируя» ПЛИС (заполняя конфигурационную память ПЛИС-а) вы создаете электронную схему (хардвер), в то время как при программировании процессора (фиксированного хардвера) вы подсовываете ему цепочку написанных в память последовательных инструкций программы (софтвер).
Если вы хотите изучить такой материал с нуля, вы можете бесплатно скачать Harris & Harris, чрезвычайно популярный учебник, скачивание русского перевода которого положило британский сайт Imagination два раза (первый раз, второй раз).
Если учебник для вас слишком большой и вам хочется просто бегло понять основные концепции, вы можете скачать набор слайдов (тоже бесплатно), которые помогают преподавателям читать лекции на основе Harris & Harris. Эти слайды являются дополнением к учебнику, они также эффективны для самообразования и быстрого введения в предмет.
И наконец, по пожеланиям читателей, в дополнение к бесплатной электронной версии Harris & Harris, в новогоднюю ночь выйдет бумажная версия Harris & Harris, правда не бесплатная (целлюлоза дороже электронов):
Правда Харрис-энд-Харрис помогает в основном если вы хотите изучить фронт-энд (то бишь логическое проектирование цифровых микросхем и микроархитектуру). Если же вы хотите получить ликбез по физической части проектирования и производства, то вы можете скачать перевод на русский язык слайдов Чарльза Данчека.
Кроме этого, eNANO (дочка РОСНАНО по образовательным программам) собирается добавить видео лекций Чарльза Данчека (с синхронным переводом на русский) вот в этот каталог:
Но вернемся к хакатону в КПИ:
Организация хакатона
Главными организаторами хакатона были Кафедра конструирования электронно-вычислительной аппаратуры Факультета электроники КПИ, Відкрита лабораторія електроніки Lampa КПИ, Студентський простір Belka и Кафедра компьютерной инженерии Факультета радиофизики, электроники и компьютерных систем Киевского национального университета имени Тараса Шевченко.
На фотографии слева доцент Киевского Университета КНУ Александр Барабанов, он переводил на русский язык часть Harris & Harris, а также значительную часть материалов по MIPSfpga, Nanometer ASIC и Connected MCU. Справа Евгений Короткий, руководитель Лампы КПИ:
Шановні учасники хакатону, привіт!
Сподіваємось ви вже ознайомились з MIPSfpga та переліком периферії запропонованої для інтеграції.
Кілька організаційних моментів.
Задача хакатону.
Необхідно інтегрувати периферійний пристрій в систему на кристалі на основі MIPSfpga. Інтеграція полягає у відображенні регістрів периферійного пристрою в адресний простір MIPSfpga. Необхідно написати на Verilog / VHDL періфеійний модуль, який буде висіти на шині AHB-Lite, буде містити набір регістрів, що повторюють регістри пристрою і синхронізувати вміст цих регістрів з регістрами пристрою. Ну і виконувати обмін даними з пристроєм по протоколу цього пристрою. Також треба буде написати програму для MIPSfpga, що демонструє роботу з периферійним пристроєм.
Оновлений перелік периферійних пристроїв:
https://docs.google.com/spreadsheets/d/1djURILzdHSwnvxC5SzO4izU2imyimAgjOuqXAef6-rQ/edit?usp=sharing
Однак ми вирішили не обмежуватись лише інтеграцією периферійних пристроїв. Якщо у вас виникнуть інші цікаві ідеї проектів на основі MIPSfpga, надішліть їх на цю поштову адресу.
Команди.
У нас буде 14 FPGA плат на які портовано MIPSfpga (9 плат DE2, 1 плата DE1, 4 плати DE0-CV). Тому максимум може бути 14 команд. Ви можете принести власну fpga плату з переліку тих, на які портовано MIPSfpga (перелік тут:
https://github.com/MIPSfpga/mipsfpga-plus/tree/master/boards), або якусь іншу fpga плату (тоді вам доведеться додактково портувати на неї MIPSfpga і це буде додатковим плюсом), максимальна кількість команд може бути збільшена.
Ви уже можете формувати команди. Список периферії для інтеграції відкритий для реагування:
https://docs.google.com/spreadsheets/d/1djURILzdHSwnvxC5SzO4izU2imyimAgjOuqXAef6-rQ/edit?usp=sharing
Щоб потрапити до команди з інтеграції певного пристрою впишіть своє прізвище в стовбчик «Команда». У випадку наявності в команді кількох учасників вписуйте прізвища через кому. Людина яка зареєструється першою стає капітаном команди. Звертаємо вашу увашу, що у гугл таблиць доступна вся історія редагування.
Таймінги хакатону.
Починаємо о 8-й ранку. Протягом дня у нас буде два обіди і дві менторські сесії, протягом яких будемо оцінювати прогрес (час ментрських сесій уточнимо трохи пізніше, оскільки це поки не принципово). Також протягом дня можете вільно задавати запитання менторам (Юрій Панчул, Короткий Євген) з питань цифрового дизайну, MIPSfpga та його програмування.
Презентації створених проектів починаються о 20-й годині.Презентація являє собою демонстрацію роботи пристрою, протягом якої ви розказуєте, що було зроблено. Для презентації можете користуватися проектором. В презентації та демонстрції може приймати участь кілька людей. Тривалість презантації — 3 хвилини. О 20-45 завершуємо презентації. Приблизно о 21-00 оголосимо переможців та роздамо призи всім учасникам.
Призи.
Головний приз — плата Altera DE0-CV з числа тих, що використовувались у хакатоні. Якщо ми не зможемо визначитись з кращим проектом, подаруємо плати двом кращим командам. Зверніть увагу, що головний приз дарується команді. Як ви його ділитимете — на ваш розсуд. Також усі учасники отримають заохочувальні призи, про які ви дізнаєтесь під час нагородження. Єдине що можемо зараз сказати — вони точно будуть вам корисні.
Їжа.
Протягом хакатону буде дві перерви на обід. Їжу придбаємо в Noodle Doodle:
https://eda.ua/restorany/lapsha-bar-noodle-doodle?gclid=CjwKEAiAr4vBBRCG36e415-_l1wSJAAatjJZgqN6K9uVvj4_XnQRioEBzgScrYK6BNi0lZb-HWTfbxoCZDzw_wcBЯкщо у вас є побажання по стравам, можете надіслати їх Дмитру
(https://vk.com/im?sel=75362095) до вечора п'ятниці. Можна обрати якусь одну страву на кожен з двох прийомів їжі.До зустрічі на хакатоні)
— З повагою,
Організатори заходу
Пример для участников — датчик освещения
В качестве примера участникам хакатона был показан код для интеграции датчика освещения — Digilent PmodALS — Ambient Light Sensor. Вот так выглядит датчик:
Для передачи данных датчик использует последовательный протокол SPI. Вариант протокола, используемого сенсором — довольно прост; его описание в документации с сайта компании-производителя Digilent занимает всего два абзаца текста:
Заметим, что протокол сенcора (SPI) — последовательный, а протокол шины процессора (AHB-Lite) — параллельный. Сравним:
По протоколу SPI данные передаются и принимаются бит за битом. Это экономит количество сигналов, что важно для протоколов, передающих данные между микросхемами:
По протоколу AHB-Lite биты данных передаются параллельно. Кроме этого, данные в этом протоколе связаны с адресом, причем биты адреса тоже передаются параллельно. Вот диаграммы для части сигналов транзакций чтения и записи на шине AHB-Lite:
Чтение:
Запись:
Для интеграции сенсора в систему нужно спроектировать три компонента:
- Хардверный модуль, который принимает данные по протоколу SPI и складирует их в некоторый регистр текущего значения. Код на верилоге для этого модуля находится в файле, а также ниже.
- Код на верилоге для передачи данных из этого регистра по шине AHB-Lite в процессорное ядро для обработки данных софтвером, так сказать glue code. Его можно найти в файлах директории, если сделать поиск по строке `ifdef MFP_DEMO_LIGHT_SENSOR..
- Софтвер, работающий на процессорном ядре, который принимает данные с датчика освещения и как-то их использует, например выводит значение освещенности на 7-сегментный индикатор на FPGA плате. Это небольшая программа на Си, которая компилируется с помощью стандартной GCC toolchain и линкуется с кодом для инициализации, написанным на ассемблере — см. тут.
Код на верилоге для хардверного модуля, который принимает данные по протоколу SPI и складирует их в регистр текущего значения:
Вот в какую схему превращается этот код во время логического синтеза с помощью Altera Quartus II версии 16.0 (после анализа, но перед mapping-ом и оптимизацией):
Выводы и планы на будущее
Хакатон по MIPSfpga оказался еще более интересным мероприятием для всех участвующих, чем ожидалось:
- Хакатон не был очень легким — к финишу пришли не все, а меньше половины команд
- Хакатон не был очень тяжелым — две команды пришла уверенно, еще одна-две — с некоторыми натяжками
- В процессе хакатона участники сделали кучу ошибок как новичков, так и более продвинутых разработчиков, в частности:
- Тривиальная ошибка новичка: Перепутывание вводов и выводов
- Недопонимание механизма работы Verilog-а: Сдвиг на цикл тактового сигнала из-за непонимания концепции дельта-циклов и ожидания немедленного изменения внешнего сигнала внутри комбинационного always-блока в ответ на присваивание сигналу, от которого зависит внешний сигнал через continuous assignment
- Недопонимание методологии Register Transfer Level Methodology (RTL): использование контрольных сигналов в «always @(posedge control_signal) ...» вместо «always @(posedge clock)… if (control_signal) ...»
- Неправильные timing constraints
- Нашли даже ошибку в в коде пакета MIPSfpga!
Посему есть идея повторить такой Хакатон в других странах. Для повторения в России: в Москве лежит 16 плат Altera / Terasic DE0-CV, которые можно использовать для таких мероприятий. В Казахстане и Украине тоже можно чего-нибудь придумать. Если есть идеи, просьба сообщать в комментариях.
Автор: YuriPanchul