Логическое проектирование аппаратуры: разработка архитектуры графических процессоров
|
Очная |
Знакомство с языком описания аппаратуры Verilog. |
- Базовые принципы проектирования на Verilog HDL (1 неделя).
- Изучение архитектуры микропроцессорных ядер (1 неделя).
- Разработка архитектуры микро-GPU (1 неделя).
- Реализация компонентов архитектуры микро-GPU на RTL (1 неделя).
- Инженерная верификация компонентов архитектуры микро-GPU (1 неделя).
- Отладка микро-GPU в сборе (2 недели).
- Запуск микро-GPU на ПЛИС-прототипе с выводом изображения на монитор (1 неделя).
|
Логическое проектирование аппаратуры: микроархитектура вычислительных устройств
|
Удалённая |
Знакомство с языком описания аппаратуры Verilog. |
- Базовые принципы проектирования на Verilog HDL (1 неделя).
- Проектирование и отладка целочисленных устройств (2 недели).
- Стандарт вещественной арифметики IEEE 754 (1 неделя).
- Проектирование и отладка устройства умножения чисел формата FP32 (2 недели).
- Проектирование и отладка устройства сложения чисел формата FP32 (2 недели).
|
Функциональная верификация: анализ тестового покрытия
|
Удалённая |
Базовое знание языка программирования Python и регулярных выражений, битовая арифметика. |
- Метрики функционального тестового покрытия. Лексический разбор текстовых файлов, регулярные выражения (4 недели):
- Изучение документации верифицируемого устройства.
- Разработка программы-анализатора журнала исполнения на языке Python, извлекающей информацию об определённых событиях при моделировании из текстового файла журнала исполнения и формирующей отчёт о достигнутом тестом функциональном покрытии в заданной метрике.
- Объединение отчётов о покрытии (2 недели):
- Разработка программы, объединяющей отчёты о покрытии, полученные на основе анализа нескольких журналов исполнения.
- Визуализация отчёта с выводом диаграмм/таблиц (2 недели):
- Изучение какого-либо графического фреймворка на Python, например, PyQt5.
|
Функциональная верификация: автоматизация генерации направленных тестов
|
Удалённая |
Программирование на Python или C++, битовая арифметика. |
- Формирование псевдослучайных конечных автоматов (КА) Мили (1–2 недели):
- Разработка программы, формирующей псевдослучайные КА Мили.
- Формирование последовательностей входных символов для перебора всех состояний, переходов и путей в КА Мили (2 недели):
- Разработка программы, формирующей последовательности входных символов для перебора всех состояний, переходов и путей в КА Мили.
- Проверка полноты покрытия состояний, переходов и путей в КА Мили (1–2 недели):
- Разработка программы, проверяющей полноту покрытия КА Мили последовательностями входных символов по состояниям, переходам и путям.
- Разработка программы для автоматизированной проверки полноты покрытия случайных конечных автоматов, формируемых программой из п. 1, последовательностями входных символов, формируемых программой из п. 2.
- Выполнение проверки полноты покрытия, обеспечение полного покрытия.
- Разработка программной модели наборно-ассоциативной кэш-памяти (2 недели):
- Построение конечного автомата, описывающего поведение набора наборно-ассоциативной кэш-памяти.
- Разработка программной модели наборно-ассоциативной кэш-памяти.
- Генерация наборов адресов памяти для псевдослучайного формирования последовательностей обращений к памяти с повышенной вероятностью вытеснений из кэш-памяти (2 недели):
- Разработка программы, генерирующей псевдослучайные наборы адресов памяти на основании описания адресации в кэш-памяти.
|
Испытание микросхем: разработка ПО для работы с энергонезависимой памятью
|
Очная |
− |
- Введение в язык программирования Python:
- Изучение основ языка программирования Python.
- Написание простейших ознакомительных программ.
- Введение в стандарт IEEE 1149.1 (JTAG):
- Назначение сигналов интерфейса.
- Конечный автомат внутренних состояний интерфейса.
- Основные инструкции.
- Ознакомление с библиотекой взаимодействия с IEEE1149.1 на языке Python.
- Написание программы по считыванию ID процессора по JTAG.
- Изучение работы контроллера энергонезависимой памяти (ПЗУ), в которой хранятся базовые команды для процессора:
- Изучение порядка доступа к контроллеру ПЗУ по JTAG.
- Изучение принципа работы контроллера, доступных команд и устройства блока памяти ПЗУ.
- Определение порядка команд для записи и чтения блока памяти ПЗУ.
- Разработка программы для записи и чтения произвольной строки в блоке памяти ПЗУ:
- Разработка программы с возможностью писать и считывать строки из массива ПЗУ, а также дублирующей памяти SDRAM.
- Разработка графического интерфейса программы (опционально).
|
Испытание микросхем: Разработка ПО для тестирования разъёма DDR4 на материнской плате
|
Очная |
− |
- Введение в язык программирования Python:
- Изучение основ языка программирования Python.
- Написание простейших ознакомительных программ.
- Введение в стандарт IEEE 1149.1 (JTAG):
- Назначение сигналов интерфейса.
- Конечный автомат внутренних состояний интерфейса.
- Основные инструкции.
- Ознакомление с библиотекой взаимодействия с IEEE1149.1 на языке Python.
- Написание программы по считыванию ID процессора по JTAG.
- Составление описания отладочного интерфейса процессора для DDR4:
- Изучение понятия «граничной цепочки» в стандарте IEEE 1149.1.
- Составление описания граничной цепочки процессора на основе данных из специальной САПР.
- Разработка программы для тестирования разъёма DDR4 на материнской плате:
- Изучение принципа работы специального отладочного модуля DDR4.
- Определение типа возможных неисправностей, возникающих при монтаже разъёма DDR4 и процессора.
- Составление набора манипуляций с граничной цепочкой для диагностики этих неисправностей.
- Написание программы для взаимодействия с отладочным модулем на основе описания из предыдущего этапа.
- Проверка разработанной программы на реальной материнской плате:
- Сборка отладочного стенда.
- Проверка программы на исправном разъёме.
- Внесение неисправностей различного вида и проверка обнаружения этих неисправностей программой.
|
Испытание микросхем: Тестирование интерфейса HDMI
|
Очная |
− |
- Введение в язык программирования Python:
- Изучение основ языка программирования Python.
- Написание простейших ознакомительных программ.
- Введение в стандарт IEEE 1149.1 (JTAG):
- Назначение сигналов интерфейса.
- Конечный автомат внутренних состояний интерфейса.
- Основные инструкции.
- Ознакомление с библиотекой взаимодействия с IEEE1149.1 на языке Python.
- Написание программы по считыванию ID процессора по JTAG.
- Изучение устройства блока HDMI:
- Определение (на основе документации) тестовых режимов, в которых может работать блок HDMI в процессоре.
- Определение необходимых для этих режимов условий и тестовых воздействий.
- Изучение последовательности доступа к физуровню по JTAG.
- Изучение принципов работы PLL.
- Определение необходимого набора настроек для релизации тестовых режимов HDMI.
- Изучение способа доступа к PLL по JTAG.
- Разработка ПО для тестирования физуровня HDMI в различных режимах:
- Составление (на основе анализа из предыдущего пункта) тестовых сценариев для различных тестовых режимов блока HDMI.
- Написание программы для реализации этих сценариев.
- Проверка программы на отладочном стенде:
- Сборка отладочного стенда.
- Отладка программы во всех режимах работы (с помощью осциллографа).
- Снятие осциллограмм всех тестовых сценариев.
|
Микропроцессорные модули и проектирование печатных плат
|
Очная |
− |
- Основы целостности питаний (3 недели):
- Освоение методов тестирования качества вторичного электропитания,
- Обретение понимания причинно-следственных связей с схемотехническими и топологическими решениями.
- Основы целостности сигналов (3 недели):
- Освоение методов тестирования целостности сигналов высокочастотных интерфейсов,
- Обретение понимания причинно-следственных связей с схемотехническими и топологическими решениями.
- Освоение маршрута проектирования высокочастотных микропроцессорных модулей (3 недели):
- Освоение маршрута проектирования микропроцессорных модулей.
|
Разработка САПР проектирования электронных устройств
|
Очная, на базе лаборатории средств проектирования микроэлектроники (корпус Физтех.Цифра) |
− |
- Основы разработки ПО:
- Системы контроля версий.
- Работа с внутренним репозиторием GitLab.
- Системы постановки задач и отчётности; тикет-трекерная система MantisBT.
- Разработка стандартного графического интерфейса приложения (меню, панель инструментов, строка состояния, виджеты, компоновка виджетов) на Qt.
- Изучение основ OpenGL: обработка 2D-графики по обсчёту массовых задач.
- Изучение основ OpenCL: разработка численного решение мат. модели на GPU.
- Многопоточное программирование в Qt: организация многопоточного модуля для обеспечения приемлемой скорости взаимодействия и передачи данных между модулями.
|
Системы программирования: компилятор LLVM
|
Удалённая |
Программирование на языках C, C++ (базовый и шаблоны STL). |
- Теория графов и алгоритмы на графах (1 неделя):
- Повторение основ теории графов.
- Изучение алгоритмов на графах, необходимых в разработке компилятора.
- Решение предложенных задач.
- Введение в компиляторные технологии (2 недели).
- Знакомство с компилятором LLVM и его промежуточным представлением (1 неделя).
- Углублённое знакомство с LLVM (2 недели):
- Написание простейших pass’ов для llvm с целью практического знакомства с компилятором и его представлением.
- Реализация своего pass’а (3 недели):
- Написание оптимизации в виде pass’а по изученной теории со второй и третьей недель.
|
Системы программирования: профилировщик
|
Удалённая |
Программирование на языках C, C++ (базовый и шаблоны STL). |
- Введение в системное программирование — процессы и межпроцессное взаимодействие (2 недели):
- Освежение знаний о некоторых системных вызовах.
- Выполнение учебных задач.
- Введение в компиляторные технологии и в профилировщики (1 неделя):
- Архитектура компиляторов, промежуточное представление.
- Время исполнения программы.
- Методы работы профилировщиков: сэмплирование и инструментирование.
- Ответы на вопросы по изученным материалам.
- Знакомство с сэмплирующим профилированием (5–6 недель):
- Подсчёт событий.
- Трасса исполнения программы.
- Дизассемблер с счётчиками инструкций (дополнительно).
- Написание маленького сэмплирующего профилировщика.
|
Операционные системы: Разработка и тестирование ядра Linux
|
Удалённая |
Знание языка C, умение работать в командной оболочке bash , опыт работы с GNU/Linux-системами. |
- Введение в ядро Linux (2 недели):
- Изучение документации ядра Linux и его структуры.
- Обучение сборке и установке ядра на виртуальной машине x86-64.
- Профилирование ядра Linux (2 недели):
- Изучение методологии профилирования ядра Linux.
- Получение профиля исполнения тестовых задач.
- Выявление наиболее требовательных функций из статистики профиля.
- Отладка ядра Linux (2 недели):
- Работа с oops / panic.
- Отладка ошибок памяти и блокировок.
- Изучение набора тестов
syzkaller и Linux Test Project.
- Разработка модуля ядра Linux (4 недели):
- Разработка модуля ядра Linux, реализующего заданный алгоритм работы; оформление его исходных текстов в соответствии с правилами ядра.
|
Операционные системы (ОС): Режим Безопасных Вычислений
|
Удалённая |
Знание языка C, умение работать в командной оболочке bash , опыт работы с GNU/Linux-системами. |
- Введение в режим безопасных вычислений архитектуры Эльбрус (2 недели):
- Изучение документации по РБВ.
- Разбор простых падений программ на языке C.
- Изучение отладчика
gdb .
- Получение исходного текста программы для портирования в РБВ, формирование списка зависимых библиотек (1 неделя):
- Фрмирование списка исходных текстов и зависимых библиотек, необходимых для портирования искомой программы в РБВ.
- Портирование исходного текста программы в РБВ (4 недели):
- Портирование в РБВ выбранной программы по заданию практики.
- Исправление ошибок компиляции и ошибок, возникающих при запуске программы.
- Тестирование портированной программы в РБВ, оформление патчей для её исходного текста (3 недели):
- Тестирование ветвей работы портированной программы.
- Подготовка патчей для исходного текста, хранящихся в системе контроля версий
git .
|
Дистрибутив ОС: Сборка программного обеспечения из исходных текстов
|
Удалённая |
− |
- Знакомство с программными средствами автоматизации сборки программного обеспечения из исходного текста (
cmake , autotools , meson ) (2 недели):
- Написание тестовых примеров автоматизации сборки при помощи
cmake / meson .
- Разбор построения зависимостей пакета, зависимости для этапа сборки на примере сборки пакетов в Debian, Ubuntu, Gentoo (2 недели):
- Изучение сборки пакета из исходного текста.
- Постороение бинарных пакетов.
- Выполнение сборки пакетов из выбранных исходных текстов.
- Знакомство с кросс-сборкой пакетов: зависимости, сценарии, хостовое окружение, базовые команды сборочного движка
rcr-any (2–3 недели):
- Сборка демонстрационно-отладочных примеров в кросс-окружении.
- Анализ зависимостей / связности бинарных пакетов, входящих в образ дистрибутива (2–3 недели).
|