Он-лайн соревнование для разработчиков аппаратуры на Verilog
Пришла в голову следующая идея: сделать он-лайн соревнование лучших модулей заданных устройств на языке Verilog (можно добавить и другие языки разработки аппаратуры VHDL, например).
Веб-интерфейс
На специальном сайте действует система регистрации пользователей. Зарегистрироваться может любой желающий. На сайте функционирует постепенно пополняющаяся база задач. Каждый пользователь может решать любую из предложенных задач. Ведется рейтинг пользователей (принцип оценивания для начала можно по количеству корректно решенных задач).
Каждая задача фактически сводится к разработке заданного модуля. Перечисляются все технические требования к модулю. Список входов, выходов и их разрядность, функциональность каждого входа, требуемые данные на выходе, именование модуля, а также примеры тестовых данных, т.е. возможные значения на входах. Задача пользователя разработать текстовое представление модуля соответствующее стандартам Verilog и отправить на сервер через форму (либо через текстовое поле, либо загрузив текстовый файл).
После добавления задачи на сервер она становится в общую очередь, которая обрабатывается сервером последовательно. Список заданий в очереди (в том числе обработанные задания) виден всем пользователям, а именно: ник отправившего пользователя, название задачи, результат симуляции, количество полученных очков. Очередь заданий можно посмотреть как для заданной задачи, так и для заданного пользователя.
У каждой задачи есть рейтинг решений с перечислением пользователей и количеством баллов. Постольку поскольку в микроэлектронике могут быть важны разные параметры работы (обычно это тактовая частота или задержка критического пути, площадь устройства и рассеиваемая мощность), то рейтингов для одной задачи может быть несколько.
Как работает серверная часть?
Условия симуляции известны всем участникам: железо сервера, операционная система, характеристики фриварного (?) Verilog верификатора и симулятора. Доступна для локальной загрузки открытая библиотека стандартных ячеек *.lib (может отличаться для разных задач). В идеале все эти компоненты должны быть опубликованы под свободными лицензиями в сети.
Система последовательно по cron’у обрабатывает решения присланные пользователями. Вначале запускается верификация присланного решения на заданном ЗАКРЫТОМ наборе данных (для некоторых задача, набор проверок можно сделать генерируемым или запускать проверки в случайном порядке). На этом этапе анализируется, что разработанный модуль работает правильно, т.е. на выходе мы получаем правильные данные. В случае ошибки на этапе синтаксического разбора решения выводим сообщение «синтаксическая ошибка» и полное описание ошибки. Если верификатор рухнул по тем или иным причинам выводим ошибку «внутренняя ошибка верификатора». В случае ошибки верификации выводим сообщение что «верификация провалена» (без доп. деталей). Если все тесты прошли, как требуется, выводим сообщение «верификация пройдена».
Следующий этап проверки: компиляция решения в рамках заданной технологической библиотеки, с последующей симуляцией и определением: задержки критического пути, площади устройства и потребляемой мощности. На основе этих величин решению выставляются баллы.
Зачем это нужно юзерам?
1) Для образовательных целей. К примеру, преподаватель может проверить, правда ли вы решили задачу, и насколько эффективно.
2) Как известно многими вещами интереснее заниматься в игровой форме.
3) Для части типовых задач решения можно сделать открытыми, соответственно можно ознакомиться с решениями других участников, что бы открыть для себя какие-то новые подходы к разработке аппаратуры.
4) Можно использовать систему при тестировании базовых знаний для приема на работу.
Зачем это может быть нужно производителям Verilog-симуляторов?
1) Фактически не открывая его в паблик можно дать возможность решать на нем фиксированные задачи реальным пользователям.
2) Приучить пользователей к особенностям синтаксиса своего симулятора
3) Получить бесплатное тестирование своего симулятора
4) Дополнительная реклама и возможность стать стандартом деФакто для разработчиков аппаратуры.
Зачем это может быть нужно создателям подобной системы?
1) Получить доступ к эффективным решениям задач
2) Возможность размещать платные задачи от производителей оборудования. К примеру, для мобильников важны модули с малым потреблением энергии, делать задачи с упором на электропотребление. Для спец. процессоров, важна скорость выполнения и.т.д.
3) Иметь возможность непосредственно приглашать наиболее успешных решателей на стажировку или постоянную работу.
4) Организовать большое комьюнити разработчиков аппаратуры, которое по моим наблюдением, несколько разобщено.
Для программистов подобных систем, которые успешно функционирует довольно много (например, http://spoj.pl), однако для разработчиков аппаратуры пока ни одной. Ждем-с.