Тренировочный лагерь по схемотехнике для танков и закладкам в процессоры

В апреле был роснановский семинар по современной схемотехнике для школьников олимпиадного типа. После него группа организаторов собралась в фойе и долго ломала голову, как сделать предмет более интересным и при этом полезным. Чтобы ввести Verilog и ПЛИС например в формат Олимпиад НТИ. Было решено отказаться от математически интересных, но несколько абстрактных для школьника задач типа протоколов когерентности кэшей в многопроцессорных системах. Также не вызвала особого энтузиазма идея автоматической теплицы с датчиками, так как ее сто раз реализовали на ардуино и STM32, и ПЛИС-ы не добавляют в теплицы ничего интересного.

И вдруг — Эврика! А если проводить соревнования по графическим играми, сделанных на чистой схемотехнике, без программирования, как делали игры типа Пин-Понг наши предки во времена Брежнева и Картера. И проводить не на древних микросхемах К561, а на современных Xilinx и Altera (то бишь Intel FPGA) и с использованием тех же технологий проектирования на уровне регистровых передач, которые используют проектировщики в Apple, Intel и SpaceX.

Короче, мы этим займемся в 8-26 июля на летней школе в Зеленограде. Часть школы, о плане которой пойдет речь в этом пост, посвящена основам цифровой схемотехники, первым шагам в архитектуру и микроархитектуру процессоров, а также (даже скорее в основном) аппаратной компьютерной графике.

Я попробую привезти в Зеленоград в качестве помощницы свою дочь-студентку Элизабет, если она вовремя получит паспорт и российскую визу. Элизабет, будучи русско-украинско-японкой, владеет только английским. Вот в Зеленограде и выучит основы русского. А заодно научит правильному английскому произношению инструкторов, которые готовы помочь на школе (необязательно из МИЭТ, можно из МФТИ, МГУ, МИФИ):

Сегодня я смастерил один из примеров для школы — игру в танчики. Большую часть кода я взял из примера в книжке Designing Video Game Hardware in Verilog by Steven Hugg, December 15, 2018. Стивен Хагг показал код на некоем красивом, но непромышленном симуляторе. Я думаю, что обучаться на таком симуляторе — это как нюхать цветы в противогазе, поэтому я синтезировал код и залил получившуюся конфигурацию в реальное железо — дешевую китайскую плату ZEOWAA. Для этого мне пришлось переписать генерацию развертки VGA, сделать код более синтезируемым и убрать некоторые методологические непорядки в использовании тактовых сигналов. Выложил результат на GitHub.

Вот как это выглядит в симуляторе Стивена Хагга:

Вот как это выглядит у меня в первом приближении, после механического совмещения wrapper-а для платы, генератора развертки и кода Стивена, а также исправления всяких мелочей, которые не работают в Intel FPGA Quartus Lite Edition, синтеза и заливки:

Но лагерь будет не только об играх с генерацией развертки VGA, ПЗУ, спрайтах итд. Мы еще и скрестим это с процессорами. Чтобы сравнить реализацию игр на аппаратных конечных автоматах с аппаратно-программной реализацией. Для этого мы используем учебное процессорное ядро schoolMIPS, которое описано в см. постах Станислава на Хабре и wiki по schoolMIPS на GitHub.

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

Можно ли обнаружить такую закладку софтверным антивирусом? Нет. Софтвер такое вообще не видит, пока оно не происходит. Можно ли обнаружить, исследуя микросхему под электронным микроскопом? Тоже нет, в промышленном процессоре миллиарды транзисторов, даже в ардуине — сотни тысяч. Даже если иметь на руках исходники процессора, спрятать в десятках-сотнях тысяч или миллионах строк на верилоге можно многое, особенно если разные части процессора выполняют части хитро продуманного плана.

Можно даже организовать состязание, когда одна команда создает закладку, а другая ее находит.

В летней школе в Зеленограде может участвовать любой школьник, который прошел три модуля теоретического онлайн-курса от РОСНАНО с профориентационным обзором современных методов проектирования микросхем (все это бесплатно и даже с выдачей призов):

  1. От транзистора до микросхемы
  2. Логическая сторона цифровой схемотехники
  3. Физическая сторона цифровой схемотехники

Предварительная программа курса — дискуссия по ней приветствуется:

Неделя 1. Основы цифровой логики.

День 1. Микросхемы малой степени интеграции, упражнения с комбинаторной логикой.
День 2. Микросхемы малой степени интеграции, упражнения с последовательностной логикой.
День 3. ПЛИС, упражнения с кнопками, переключателями, LED, семисегментным индикатором.
День 4. ПЛИС, вывод геометрических фигур на VGA.
День 5. ПЛИС, конечный автомат для игры в танчики, гонки или Angry Birds.

Неделя 2. Процессор

День 1. Программирование на языке ассемблера.
День 2. Однотактовый процессор schoolMIPS.
День 3. Интеграция процессора с выводом геометрических фигур на VGA.
День 4. Лекция про прерывания и многозадачность. Индивидуальный проект — программируемая на процессоре видео игра с выводом на VGA.
День 5. Лекция про конвейер. Конкурс индивидуальных проектов.

Неделя 3. Программируемое радио. Программа блока состоит из трех основных частей:

– основы электродинамики и распространения радиоволн (теоретическая часть);
– принцип работы приемо-передающего тракта (теория и практика);
– основы цифровой обработки сигналов – фильтрация, спектральный анализ (теория и практика).

День 1. Теоретические основы электродинамики и распространения радиоволн. Структурная схема передающего тракта, функции составных частей. Сигналы (гармонический, прямоугольный). Практическое занятие по сигналам с использованием NI Elvis.
День 2. Перенос сигналов на высокую частоту. Математическое обоснование переноса частоты с использованием Matlab. Практическое занятие по переносу частоты с использованием NI Datex.
День 3. Усиление и излучение сигналов. Практическое занятие с использованием NI Datex. Демонстрация направленности антенн.
День 4. Фильтрация сигнала. Практическое занятие с использованием NI Datex. Фильтрация цифрового сигнала в Matlab
День 5. Перенос сигналов на низкую частоту. Практическое занятие с использованием NI Datex. Обобщение пройденного материала, подведение итогов.

Кстати, многое из материалов Стивена Хагга, из которых я подсматриваю информацию про спрайты итд — идет из древнего видеопроцессора Texas Instruments TMS9918 который стоял в японском компьютере Yamaha MSX, который импортировало правительство Горбачева для компьютеризации советских школ. Когда я сам был школьником, даже управлять этим видеопроцессором из ассемблерной программы работающей на главном процессоре Zilog Z80 было нетривиально, а уж спроектировать этот видеопроцессор — вообще. Из-за рывка технологий автоматизации проектирования микросхем (Electronic Design Automation — EDA) это стало возможно современным школьникам, и даже полезно для обучению дизайна современных чипов (книга Стивен Хагга — 2018 года).

Но для ныне поседевших советских школьников — вы помните эту игру на Ямахе?

Насчет Electronic Design Automation. Помимо лагеря для школьников, мы тут с Элизабет помогаем провести семинар по сходной тематике для взрослых, но не в Зеленограде, а в Лас-Вегасе, на выставке Design Automation Conference — DAC, и не с учебными, а с промышленными процессорами, и не с графикой, а с сопроцессором для ИИ. Такой семинар — это естественный следущий шаг для школьников, которые пройдут школу в Зеленограде и потом поучатся в МИЭТ, МИФИ, МФТИ, ВШЭ МИЭМ, МГУ, ИТМО, ЛЭТИ, СГАУ, НГТУ и других университетах, в которых преподают элементы маршрута проектирования микросхем RTL-to-GDSII, компьютерную архитектуру и лабы по синтезу для ПЛИС/FPGA.

About Юрий Панчул