SOC Design Challenge 2024(Yadro)
трек: Системное программирование
команда: InnoSystemC
место: 4
О ЧЕМ ТРЕК
Системные программисты решают много интересных и амбициозных задач в маршруте проектирования систем на кристалле (СнК). Современные СнК включают в себя большое количество разнообразных подсистем — от низкоскоростной периферии до всевозможных ускорителей. На ранних этапах проектирования основной вызов для команд — это проверка соответствия заявленным требованиям, то есть верификация цифровой аппаратуры. При этом системные программисты первыми начинают разрабатывать всевозможные пользовательские функциональные сценарии, которые будут использованы в СнК. С помощью функциональных эмуляторов и RTL-симуляторов они могут проводить исследования и запускать различные сценарии проверки.
ЗАДАЧИ ТРЕКА
Участники смогут проявить свои возможности и таланты для решения задач функциональной верификации со стороны software-разработки. На основе функциональной модели СнК необходимо разработать на языке С сценарии проверки блоков, входящих в прототип исследуемого СнК. Подключить в режиме косимуляции дополнительное оборудование и оценить полноту проверок путем сбора покрытия.
КРИТЕРИИ ОЦЕНИВАНИЯ
Успех в соревнования будет определяться:
- полнотой проверок для каждого блока из состава СнК;
- скоростью разработки функциональных сценариев;
- знаниями языка SystemVerilog и С в разработке сценариев тестового окружения с использованием функциональных эмуляторов и RTL-симуляторов в режиме косимуляции;
- архитектурным подходом в разработке библиотек и программ на языке С.
- Кроме процессора, участникам доступно окружение для тестирования и оценки производительности.
ТРЕБУЕМЫЙ ОПЫТ И НАВЫКИ
- опыт разработка программ на С;
- знакомство с языком описания аппаратуры SystemVerilog;
- знакомство с Python для задач автоматизации проверок.
Структура репозитория
├───apb_uart
│ ├───cmake
│ ├───rtl
│ │ ├───sim.sv - Top модуль. Здесь подключаются: renode, apb_uart, uart_requester и другие модули
│ │ ├───apb_uart.sv
│ │ ├───uart_interrupt.sv
│ │ ├───uart_rx.sv
│ │ ├───uart_rx.sv
│ │ └───io_generic_fifo.sv
│ └───sim
├───common
│ ├───irq.c irq.h - обработка прерываний.
│ ├───sc_print.c sc_print.h - реализация ввода/вывода в консоль
│ └───mem.h - обращения к памяти.
├───renode
│ ├───src
│ ├───Plugins
│ ├───VerilatorPlugin
│ └───VerilatorIntegrationLibrary
│ ├───hdl
│ │ ├───renode.sv - Обработка входящих запросов по DPI
│ │ ├───imports
│ │ │ └───renode_pkg.sv - Реализация DPI функций для взаимодействия Renode и Verilator.
│ │ └───modules
│ │ ├───apb3
│ │ ├───axi
│ │ ├───uart
│ │ │ └───uart_requester.sv - Реализация коннектора DPI для UART, этот модуль предстоит реализовать!
│ │ └──renode_interrupts.sv - Передача сигналов прерываний между Renode и Verilator.
│ └───src
│ ├───buses
│ ├───communication
│ └───peripherals
│
│
│
├───tests - Директория с тестами UART
│ └───apb_uart_example
│ ├───app.c - код теста
│ └───Makefile - мейкфайл теста
└───Makefile - Корневой мейкфайл проекта с таргетами для сборки и запуска тестов
Описание
Хакатан SOC design Challenge 2024 от компании Yadro. Трек "Системное программирование". Команда InnoSystemC - 4 место