В апреле был роснановский семинар по современной схемотехнике для школьников олимпиадного типа. После него группа организаторов собралась в фойе и долго ломала голову, как сделать предмет более интересным и при этом полезным. Чтобы ввести 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. Радиотехника (планы уточняются)

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

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


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

Комментарии (5)


  1. vassabi
    28.05.2019 09:51
    +1

    прикольная идея с «одна команда делает закладку, а вторая — ищет». Расскажете, как попробуете?


    1. YuriPanchul Автор
      28.05.2019 10:09
      +1

      Да. Но это лучше делать на семинаре по MIPSfpga для более взрослой аудитории (а-ля bit.ly/mips-open-at-dac-2019 ). Там промышленное ядро микроконтроллера, в котором 60,000 строк кода, так что найти нетривиально. В schoolMIPS все быстро находится, он слишком маленький (менее тысячи строк кода).


      1. vassabi
        28.05.2019 10:52
        -1

        смотря как и что прятать.
        Можно сделать "закладку попроще", например чтобы (~0 + ~0) выдавал 1.


        1. YuriPanchul Автор
          28.05.2019 17:59

          Ну это не закладка, это просто баг. Закладка — это чтобы сделать нечто вредоносное в системе с управлением снаружи. Например хардверная закладка может помочь софтверному трояну внутри обычной программы помочь сделать что-то нехорошее :-)


  1. Costic
    29.05.2019 15:30

    Внимательно слежу за вашими публикациями (в этот раз ваш русский язык немного смущает меня, особенно «на школе»… должно быть «в школе»). Вы много уделяете внимания образованию и подготовке кадров. Я с вами полностью согласен — «кадры решают всё»! Но кадры надо готовить, нужны рабочие места для стажёров, инженеров, программистов. Если взять 10 студентов старших курсов, то половина из них по окончании ВУЗа не будет работать по специальности. Ещё 2-3 продержаться год-два, а потом или декретный отпуск или коммерция. Останется 2-3 инженера, которые за лет 5 станут ведущими инженерами, а через 10 лет лишь 1 станет тем локомотивом, который будет тянуть коллектив. И это оптимальный вариант при наличии соц пакета и плюшек.
    Теперь к учебному курсу. Предварительная подготовка и вводный базовый курс — это хорошая идея для слушателей (летней школы). На этом этапе можно отобрать заинтересованных людей. А программу курса я бы скорректировал. Мне кажется надо начинать со светодиода и кнопки/выключателя.
    1) Знакомим с wire & reg (Verilog). Кнопка нажата — LED горит, а не нажата — не горит.
    2) Делаем инвертор (NOT). Делаем 2 кнопки и знакомим с AND, OR, XOR.
    3) Используем кнопку №1 для задания состояния (0/1), кнопку №2 — для режима (set/reset), сохраняем/читаем значение в регистр.
    4) Тактирование. Фронты сигнала (нарастание/спад). Мигание светодиодом, делители частоты на 2, 4, 8… Смотрим результаты лог.анализатором.
    5) Умножитель частоты. Основы PLL, фазовые сдвиги. Стабилизация генератора.
    6) Семисегментный индикатор, автомат состояний и др.
    7) Основы работы VGA, расчёт частот, сигналы, виды ЦАП, заливка экрана, двухпортовая память.
    Удачи вам!
    Программа обучения кажется слишком насыщенной.