Трассировка и мониторинг в Verilator

Есть довольно известный инструмент для разработки аппаратных систем — Verilator (https://www.veripool.org/verilator/). Он принимает описание процессора на языке Verilog и генерирует по нему эмулятор на языке C, на котором можно посмотреть, как ведёт себя реальный процессор. Это позволяет, в частности, выполнять трассировку и мониторинг внутреннего состояния процессора, которые были бы невозможны на реальном “железе” из-за ограничений по объёму кристалла.

Кое-какие трассы Verilator умеет порождать и без нас, однако далеко не всё — например, нет возможности контролировать внутреннюю память процессора при выполнении инструкции. Достаточно хорошо трассировка и мониторинг реализованы в симуляторе Spike (https://github.com/riscv-software-src/riscv-isa-sim), надо сделать для Verilator что-то подобное. Обратите внимание, трассировка выполняется в сгенерированном Verilator коде, так что по сути надо будет править генератор.

Логи Spike как пример желаемого результата нам обещали прислать, но можно работать и без них.

Планируемые результаты

  • Форк репозитория Verilator с реализованной поддержкой трассировки наподобие той, что есть в Spike
  • Пуллреквест в апстрим, прошедший ревью Syntacore.

Этапы разработки

  1. Изучение Verilator и Spike на уровне пользователя (в частности, запуск ядра SCR1 (https://github.com/syntacore/scr1) на Verilator). Описание возможностей по трассировке и мониторингу Verilator и Spike.
  2. Изучение архитектуры и кода Verilator.
  3. Проектирование механизма трассировки и мониторинга.
  4. Реализация.
  5. Прохождение ревью, исправление замечаний.
  6. Подготовка итогового отчёта.

План коммуникаций

Научный руководитель — Кириленко Яков Александрович. Требуется как минимум раз в неделю отчитываться научному руководителю о ходе работы.

Консультант со стороны Syntacore — Сергей Якушкин или кто-то, кого он назначит, порядок коммуникации с ним определится по мере работы над проектом.

Требования к студенту

Умение не теряться в командной строке Linux, некоторые навыки программирования на C++.

Уровень

2 курс, 3 курс


Руководитель

Кириленко Яков Александрович


Консультант

Кириленко Яков Александрович


Источник

YADRO