В Киевском Политехническом Институте прошел хакатон нового типа, с одновременной разработкой и программной (Си, ассемблер), и схемотехнической (Verilog) частей системы, синтезируемой для реализации в микросхемы реконфигурируемой логики (ПЛИС/FPGA). Хакатон также поддерживался одной из кафедр Киевского Национального Университета и Imagination Technologies, разработчиком графического процессора PowerVR внутри Apple iPhone. Результат хакатона превзошел ожидания (об этом ниже), и сейчас разрабатываются планы повторить его в других местах, в частности в Томске или Новосибирске.



Хакатон в КПИ по MIPSfpga был экспериментальным в том смысле, что обычно в хакатонах участники или просто программируют (например решения SaaS), или делают устройства из готовых фиксированных микросхем и программируют их (Ардуино, STM32 Discovery). Здесь же участники и писали программу, и разрабатывали схему, интерфейсный блок на уровне регистровых передач (Register Transfer Level — RTL), после чего встраивали этот блок в синтезируемую систему с процессорным ядром MIPS microAptiv UP и шиной AHB-Lite, и реализовывали эту систему в FPGA.

Вот как это выглядело на экранах их ноут��уков, на FPGA-плате и концептуально:

hw_jpxfldvu


Зачем нужны такие задачи?


Такие упражнения помогут вырастить инженеров систем, знакомых и с разработкой схемотехники, и с программированием, что необходимо в 21 веке, эпохе систем-на-кристалле (СнК — System-on-Chip, SoC). Также это путь к прототипированию специализированных микросхем ASIC (Application Specific Integrated Circuits), таких же, которые стоят в разнообразных встроенных системах — от кофеварок до спутников. Потом украинские исследователи в КПИ и КНУ смогут работать с европейским сервисом Europractice и производить опытные микросхемы на фабрике через MPW shuttle. Если при этом исследователи придумают что-нибудь коммерчески интересное, то они могут использовать такой прототип для привлечения венчурного капитала и создания стартапов в определенных нишах, например нише «умных датчиков» для интернета вещей.



Фотографии и видео с хакатона


Перед хакатоном по MIPSfpga было три дня семинаров Nanometer ASIC и лекций по MIPSfpga. На Nanometer ASIC записалось больше сотни человек и пришло более восьмидесяти:

yuri_panchul_20161108_235748



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

yuri_panchul_20161111_061824

На хакатон остались самые целеустремленные:

yuri_panchul_20161112_073838



С фейсбука ключевого организатора хакатона (Відкрита лабораторія електроніки Lampa КПИ):

… А пока вот видосик с одним из победителей, Денисом Солдатовым, который первым закончил разработку устройства и получил в подарок плату DE0-CV и фирменную флешку MIPSfpga.

Денис интегрировал ультразвуковой дальномер от 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 занимает всего два абзаца текста:

PDF



Заметим, что протокол сенcора (SPI) — последовательный, а протокол шины процессора (AHB-Lite) — параллельный. Сравним:

По протоколу SPI данные передаются и принимаются бит за битом. Это экономит количество сигналов, что важно для протоколов, передающих данные между микросхемами:



По протоколу AHB-Lite биты данных передаются параллельно. Кроме этого, данные в этом протоколе связаны с адресом, причем биты адреса тоже передаются параллельно. Вот диаграммы для части сигналов транзакций чтения и записи на шине AHB-Lite:

Чтение:



Запись:



Для интеграции сенсора в систему нужно спроектировать три компонента:

  1. Хардверный модуль, который принимает данные по протоколу SPI и складирует их в некоторый регистр текущего значения. Код на верилоге для этого модуля находится в файле, а также ниже.

  2. Код на верилоге для передачи данных из этого регистра по шине AHB-Lite в процессорное ядро для обработки данных софтвером, так сказать glue code. Его можно найти в файлах директории, если сделать поиск по строке `ifdef MFP_DEMO_LIGHT_SENSOR..

  3. Софтвер, работающий на процессорном ядре, который принимает данные с датчика освещения и как-то их использует, например выводит значение освещенности на 7-сегментный индикатор на FPGA плате. Это небольшая программа на Си, которая компилируется с помощью стандартной GCC toolchain и линкуется с кодом для инициализации, написанным на ассемблере — см. тут.

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



Вот в какую схему превращается этот код во время логического синтеза с помощью Altera Quartus II версии 16.0 (после анализа, но перед mapping-ом и оптимизацией):



Выводы и планы на будущее


Хакатон по MIPSfpga оказался еще более интересным мероприятием для всех участвующих, чем ожидалось:

  1. Хакатон не был очень легким — к финишу пришли не все, а меньше половины команд
  2. Хакатон не был очень тяжелым — две команды пришла уверенно, еще одна-две — с некоторыми натяжками
  3. В процессе хакатона участники сделали кучу ошибок как новичков, так и более продвинутых разработчиков, в частности:

    1. Тривиальная ошибка новичка: Перепутывание вводов и выводов
    2. Недопонимание механизма работы Verilog-а: Сдвиг на цикл тактового сигнала из-за непонимания концепции дельта-циклов и ожидания немедленного изменения внешнего сигнала внутри комбинационного always-блока в ответ на присваивание сигналу, от которого зависит внешний сигнал через continuous assignment
    3. Недопонимание методологии Register Transfer Level Methodology (RTL): использование контрольных сигналов в «always @(posedge control_signal) ...» вместо «always @(posedge clock)… if (control_signal) ...»
    4. Неправильные timing constraints
    5. Нашли даже ошибку в в коде пакета MIPSfpga!

Посему есть идея повторить такой Хакатон в других странах. Для повторения в России: в Москве лежит 16 плат Altera / Terasic DE0-CV, которые можно использовать для таких мероприятий. В Казахстане и Украине тоже можно чего-нибудь придумать. Если есть идеи, просьба сообщать в комментариях.

Only registered users can participate in poll. Log in, please.
В каких городах следовало бы провести подобные хакатоны?
7.96%Алма-Ата9
1.77%Астана2
2.65%Барнаул3
3.54%Владивосток4
1.77%Воронеж2
9.73%Екатеринбург11
4.42%Казань5
23.01%Львов26
13.27%Минск15
23.89%Москва27
10.62%Нижний Новгород12
9.73%Новосибирск11
15.93%Одесса18
1.77%Рига2
4.42%Самара5
22.12%Санкт-Петербург25
6.19%Томск7
6.19%Хабаровск7
17.7%Харьков20
5.31%Челябинск6
3.54%Другой (пояснить в комментариях)4
113 users voted. 46 users abstained.