В середине апреля в МИЭТ прошел четвертый SoC Design Challenge. Студенты из разных уголков России и Беларуси штурмовали задачи по четырем трекам: топологическое и RTL-проектирование, UVM-верификация и системная верификация SoC. Некоторые треки мы разделили на уровни Basic и Basic+, а предварительно провели для участников цикл лекций для погружения в специфику работы. В статье мы разберем задачи хакатона YADRO и МИЭТ, а также расскажем о некоторых командах.

Системная верификация

В этом треке мы предложили осуществить системную верификацию мультимедийной подсистемы JPEG в составе SoC. Подобные задачи распространены на практике: инженеры часто проверяют, действительно ли подсистема в микросхеме отвечает всем требованиям спецификации.

По сравнению с прошлым годом в задании сделан больший акцент на программную модель подсистемы. Помимо классического маршрута верификации, участникам нужно было пройти путь поиска багов. Для этого мы разработали 14 дизайнов с различными ошибками: с помощью направленных тестов нужно определить их и понять, почему в итоге подсистема не работает. Группы участников разделились на уровни Basic и Basic+ в соответствии с предварительным тестированием.

В качестве условия мы предоставили саму модель, полную документацию к ней, а также систему сборки и запуска тестов. Чтобы оценивать объективнее, учитывали ряд метрик: кодовое покрытие по фичам, количество найденных ошибок и чистоту кода на основе отчетов линтера. В итоге студенты должны были разработать тестовый план, сами тесты и организовать запуски в режиме Continuous Integration.

Теперь расскажем об одной из команд. Никита Смадыч и Егор Шалашнов из команды TransSiberian представляли ДВФУ и СПбГУ. В ходе проекта они писали baremetal-код и проверяли корректность всех фич окружения. В первый день ознакомились с документацией, потом составили план примерно из девяти тестов: чтение из регистров, прерывания, сквозные тестирования и т. д. Ребята признались, что опыта именно в системной верификации у них немного, поэтому что-то приходилось узнавать на ходу, спрашивать организаторов.

Кстати, накануне хакатона третьекурсник Егор устроился системным программистом в компании, разрабатывающей СХД. На полставки, чтобы совмещать с учебой. Никита же подрабатывает проектами в различных сферах — компьютерное зрение, встраиваемые системы, робототехника, автономные полеты — и склоняется к тому, чтобы дальше развиваться в сфере низкоуровневого программирования.

В будущем ребята хотели бы видеть воплощение своей работы в физическом объекте — и системная верификация здесь очень кстати, так как позволяет тщательно оценивать реализацию устройств.

Топологическое проектирование

Трек по топологии мы организуем уже четвертый год. Начиналось все с простых логических элементов, например, 2И-НЕ (NAND2) и триггеров. На их основе участники проектировали счетчики и регистры, которые затем моделировали для определения рабочих параметров. С прошлого года задание трека предусматривает использование не аналогового, а цифрового маршрута проектирования — это точнее отражает реальные задачи инженеров при разработке цифровых схем. Теперь участники уже не рисуют транзисторы и логические элементы сами, а проектируют большие SoC на основе готовых библиотек элементов.

В треке по топологии полностью воссоздан маршрут цифрового физического синтеза. В качестве задания мы даем готовый netlist от команды RTL-проектирования, технические требования и временные ограничения. Затем участники проходят через все этапы физического синтеза, включая планировку кристалла, размещение стандартной логики, синтез дерева тактового сигнала, трассировку и получение финальной топологии. На каждом этапе они проверяют свои результаты, проводят необходимые измерения — хотя некоторые стадии мы и сократили, чтобы все успели в срок. По итогам работы мы принимаем законченную топологию, в которой оцениваем соответствие требованиям и собираем метрики качества — быстродействие, площадь, энергопотребление.

Для задачи мы взяли студенческий проект, который создают стажеры YADRO, и намеренно «испортили» его: перемешали расположение блоков, ячеек ввода/вывода, а также другие параметры. Для подведения итогов собирали статистику проектов и ранжировали ее по списку критериев. Общий уровень участников трека заметно вырос, их вопросы при выполнении задания в этом году стали сложнее.

Здесь мы тоже поговорили с одной из команд. Сергей Лавриненко, Алексей Степанов и Сергей Прокофьев из SSL team представляют МАИ и участвуют в хакатоне уже во второй раз. Но и сейчас проект идет непросто: по мнению ребят, в начале они где-то неправильно поменяли распиновку и теперь приходится искать причины возникших задержек. Помимо этого, им также предстоит уменьшить максимальное падение напряжения.

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

В будущем ребята хотят найти себя в проектировании электронных устройств. Сейчас они участвуют в проектах института, а также немного преподают.

UVM-верификация

Трек UVM-верификации — результат эволюции и переосмысления задач SoC Design Challenge предыдущих лет. В этом году участники работали с конфигурируемым AXI Stream маршрутизатором, который по заданным правилам распределяет транзакции с входных каналов на выходные, избегая коллизий. Для конфигурации блока предусмотрены регистры, доступные по шине APB.

Несмотря на упоминание UVM в названии трека, окружение было несколько упрощено относительно «честного» варианта методологии. Это позволило опытным участникам проявить себя, а начинающим инженерам познакомиться с основными аспектами UVM — объектно-ориентированным подходом в SystemVerilog, модульностью и абстрагированием через моделирование на уровне транзакций.

Задача хакатона охватила наиболее «творческие» этапы верификации, существующие в департаменте разработки SoC YADRO: подготовка плана верификации и разработка эталонной модели устройства. В сжатые сроки нужно было не просто усвоить спецификацию устройства, но и грамотно расставить приоритеты в разработке — чтобы успеть найти максимальное количество ошибок в дизайне.

Для хакатона подготовили 20 вариантов дизайна с ошибками разной сложности — от несоответствия значения регистра по сбросу до действительно нетривиальных краевых случаев нарушения маршрутизации или арбитрации, что проявляются лишь при определенном стечении обстоятельств. Что же сломано на самом деле, дизайн или их эталонная модель — с таким вопросом приходилось сталкиваться каждой команде после моделирования очередного дизайна.

Это не помешало командам добиться впечатляющих результатов: за три дня хакатона они подготовили 73 баг-репорта, из которых всего 8 были ложными. Некоторые участники даже превзошли организаторов в дотошности работы со спецификацией дизайна: были выделены две «фичи», упущенные при подготовке задания.

Для оценки в этом году дополнительно ввели критерий красоты кода. Эксперты выделили участников, которые буквально изобрели регистровую модель UVM заново, а также уместно использовали несинтезируемые конструкции SystemVerilog: очереди, события, ассоциативные и динамические массивы.

На UVM-треке мы познакомились с командой x85. Тимур Толстых и Антон Корнилов представляли первый и второй курс КФУ. К середине второго дня хакатона они успели сделать план верификации и разбирались в коде на SystemVerilog, чтобы запустить тесты, отловить баги и написать баг-репорт. Определяя причину ошибки, ребята сначала пытались ее локализовать, чтобы затем выполнить точечную проверку.

В будущем Тимур хочет программировать на C и разрабатывать операционные системы. На момент хакатона он ждал тестовое задание по направлению C++ для летней стажировки YADRO Импульс — надеемся, у него получилось. Антон уже работал инженером-программистом в робототехнической компании, но в будущем хочет заняться чем-то более низкоуровневым, так что тоже изучает C и C++.

RTL-проектирование

В RTL-треке мы предусмотрели отдельные задания для уровней Basic и Basic+. В Basic студенты работали с AXI Performance Monitor, который собирает статистику по шине AXI. В качестве условия мы предоставили дизайн этого монитора — функционально полный, но реализованный максимально неэффективно. А также верификационное окружение, скрипты для синтеза и подсчета итоговых баллов.

Чтобы оптимизировать монитор, участникам нужно было разобраться в архитектуре устройства и в теме RTL. Главная проблема — сделать так, чтобы монитор не влиял на пропускную способность. За это итоговый скрипт сразу накладывал значительный штраф. С помощью скрипта участники могли заранее понять, сколько баллов получит их решение. В целом подобные задачи по оптимизации RTL часто встречаются в реальной работе инженера.

На уровне Basic+ студенты работали уже с НПУ — нейропроцессорным ускорителем. В качестве условия они получили его примитивную версию, которая работает с одним байтом за раз: берет байт из данных, байт из матрицы свертки, перемножает их, записывает в регистр и ждет новой передачи. Для нейронных сетей обычно используют вычисления с плавающей точкой, но для аппаратуры можно предоставить целочисленный тип данных — это уменьшит площадь устройства и число обращений к памяти. Для оптимизации НПУ участникам очень важно разобраться, как правильно читать данные из матрицы.

Возможных направлений работы здесь немало: например, можно создать вычислительный конвейер, а затем перейти к прямоугольным массивам — развернуть несколько строк матрицы и передавать данные с пространственно-временным выравниванием, чтобы данные сходились в ячейке в нужный момент. Но для этого придется решить проблему с ограничением шины: она позволяет вычислять за раз только 32 байта, так что данные нужно где-то накапливать. С развитием искусственного интеллекта подобные задачи становятся все более актуальными.

«Турбо-котики» Алана Кудзагова, Алёна Иванова и Вячеслав Назариков учатся на третьем курсе СПбПУ и участвуют в треке Basic. Во второй день хакатона ребята начали разбираться с оптимизацией модуля, отвечающего за сбор статистики, в том числе попытались уменьшить его площадь за счет снижения числа мультиплексоров, возникавших в циклах. Основной же задачей команда на тот момент видела работу с памятью, которую нужно было упорядочивать и уменьшать по площади.

Вне хакатона Алана будет участвовать в совместном проекте СПбПУ и YADRO в области 5G. Алёна и Вячеслав планируют стажировку, обязательную после третьего курса.

Итоги и будущее SoC Design Challenge

Призеры хакатона получили уникальные медали, изготовленные из кремниевых пластин, фирменный мерч YADRO, другие призы от компании и что еще ценнее — fast track на летнюю стажировку YADRO Импульс и дополнительные баллы при поступлении в магистратуру МИЭТ. Стоит отметить: мы были очень рады видеть некоторых участников хакатона во второй раз. Значит, им это точно понравилось и ребята готовы вновь бороться за первые места.

Мы стремимся к тому, чтобы SoC Design Challenge полностью покрывал маршрут разработки микропроцессора. Сейчас треки уже охватывают немало областей и в перспективе их станет еще больше. Второе направление работы — это взаимная интеграция треков. Сейчас они изолированы и в каждом даются свои уникальные задания. Было бы здорово объединить все в едином процессе, чтобы SoC Design Challenge полностью охватывал путь от идеи до готовой к использованию микросхемы.

Комментарии (0)