Между транзистором и Ардуиной: планирование семинаров по электронике для школьников в Киеве и Новосибирске

Более 30 лет назад, в 1986 году, я участвовал во Всесоюзной Новосибирской Летней Школе Юных Программистов, где получил диплом 1 степени за разработку поддержки многозадачности в языке Си на компьютере MSX Yamaha. Тогда я написал на ассемблере Z80 обработчик прерывания по таймеру, в котором переключал контекст задач. Для времени и возраста было вполне. И вот теперь, в 2017 году, я решил поехать на ЛШЮП снова, но уже в качестве инструктора, и уже согласовал программу с организаторами. В процессе я познакомлю слушателей с некоторым инсайдом индустриальных проектов, в которых я участвую в Silicon Valley, в частности проекта чипа EyeQ5 для самоуправляемого автомобиля, который планируется для выпуска в 2020 году.

А еще до Новосибирска я решил съездить в Киев, где в том же 1986 году учился в физматшколе номер 145 (откуда меня собственно и отправили в Новосибирск). Но план 2017 года в Киеве еще не утвержден, он на стадии обсуждения, которое я предлагаю провести в комментариях.

Кратко:

1. Недельный семинар для школьников в Киеве, с возможной датой в конце апреля. Введение школьников в электронику, используя микросхемы малой степени интеграции на макетной плате, с переходом на FPGA, микроконтроллеры и встроенные процессоры для IoT, все в виде breadboardable модулей. От младших школьников (для них только комбинационная логика на микросхемах малой степени интеграции) до старших школьников (для них последовательностная логика, языки описания аппаратуры и синтез). И для обычных школ, и для физматшкол. Работа с украинской компанией-партнером для создания наборов для школьников.

Табличка с проектом программы

2. Двухнедельная «мастерская» для школьников на знаменитой Летней Школе Юных Программистов в Новосибирске в второй половине июля. Предполагаемый материал включает материал, который готовится для семинара в Киеве, но с вариациями, например вместо FPGA Xilinx видимо будут FPGA Altera, а вместо набора от украинской компании будет использоваться похожий набор от российской компании. Кроме этого, так как в Новосибирске будет больше специально отобранных детей и вдвое больше времени, мы попробуем ввести некоторый продвинутый материал, в частности концепцию конвейерной обработки и конструирование простого процессора на FPGA.

Анонс: http://school.iis.nsk.su/lshyup-2017/masterskie-6

Сначала анонс в Новосибиоске:

http://school.iis.nsk.su/lshyup-2017/masterskie-6

Мастерская №1 «Мастерская архитекторов микросхем»
Мастер: Юрий Панчул

Цифровое железо, от логических элементов до собственного процессора

Хотите узнать, как проектируют микросхемы в современных устройствах — от телефона до космического корабля? Последние 25 лет это делают с помощью методологии логического синтеза кода на языках описания аппаратуры. Именно эту технологию мы выучим в нашей мастерской и применим для проектирования собственных устройств.

Мы начнем с трех ключевых кирпичиков цифровой электроники — логического элемента, тактового сигнала и D-триггера, памяти для одного бита информации. Для наглядности мы освоим их старомодным способом, соединяя проводами микросхемы малой степени интеграции на макетной плате.

Затем мы повторим построенные схемы на языке описания аппаратуры SystemVerilog и промоделируем их на программе-симуляторе. Но как мы можем воплотить их в микросхемы? Ведь заказ коммерческой микросхемы на фабрике очень дорогой? К счастью, существуют “перестраиваемые” программируемые логические интегральные схемы (ПЛИС), платы с которыми которые мы и будем использовать для наших занятий.

Помимо упражнений с арифметическими блоками и конечными автоматами, мы попробуем построить простой процессор, похожий по микроархитектуре на процессор Mongoose-V внутри космического корабля New Horizons, который год назад пролетел мимо Плутона.

Заодно мы изучим немного программирования на ассемблере, концепцию прерываний, сравним свой процессор с промышленными микроконтроллерами и встроенными микропроцессора, вплоть до микропроцессора EyeQ5 для самоуправляемого автомобиля, который планируется для выпуска в 2020 году.

Идея организовать мероприятие в Киеве пришла в голову профессору Светлане Владимировне Хуткой, которая до этого три года преподавала в Стенфорде (тематика: демократические преобразования в Украине) и насмотрелась на преподавательсткие традиции титанов калибра Джона Хеннесси, бывшего президента Стенфорда, изобретателя процессорной архитектуры MIPS и соавтора двух самых популярных учебников компьютерной архитектуры: Computer Architecture: A Quantitative Approach и Computer Organization and Design: the Hardware/Software Interface. Профессор Светлана Владимировна в центре, мужчина в галстуке — Джон Хеннесси:


Теперь может возникнуть вопрос: а почему мастерская начинается с микросхем малой степени интеграции?

Именно это спросил у меня на днях Владислав Халамов из Российская ассоциация образовательной робототехники. Он посмотрел вот на такое видео, которое я снял у себя в саду:

и задал вопрос, на который я расписал Владиславу ответ:

Теперь пройдем шаг за шагом по программе возможного киевского мероприятия, которая является подмножеством мероприятия в Новосибирске. Начинается с транзисторов:

На фотографии слева доцент киевского университета КНУ Александр Барабанов, он расскажет про транзистор и физику. Справа Евгений Короткий, руководитель лаборатории Лампа киевского политеха КПИ, он расскажет про таймер 555:

Теперь переходим к комбинационной логике и арифметике:

Школьники получат индивидуальные задания со следующими микросхемами:

И поэкспериментируют с логикой каждой, втыкая входы в 0 или 9V и рассматривая горит ли светодиод, подключенный к выходу:

Это упражнение можно усложнить, подсоединив кнопки. Заодно можно рассказать про подтягивающие резисторы (про резисторы для ограничения тока через светодиоды мы расскажем раньше):

После этого участники освоят двоичную арифметику и построят сумматор с микросхемами CMOS 4008:

Теперь иы вернемся в XXI век и сделаем те же упражнения с логикой и арифметикой, но с микросхемами ПЛИС / FPGA. Для этого существует вот такой вставляемый в макетную плату модуль:

Вот пара примеров кода на Verilog и синтезированного из него схем, которые прошиваются в ПЛИС. Из контрольных, которые будут использоваться во время семинаров (как минимум в Новосибирске, где будет больше времени для контрольных):

module top1
(
    input      a,
    input      b,
    input      carry_in,
    output reg sum,
    output reg carry_out
);

    reg p, q;

    always @*
    begin
        p = a ^ b;
        q = a & b;

        sum       = p ^ carry_in;
        carry_out = q | (p & carry_in);
    end

endmodule

Если в Киеве возникнет N преподавателей, которые готовы совместно сделать обучающие материалы для школьников на основе этих FPGA модулей, то я готов им после семинара эти модули оставить. Но с условием, что они потом напишут статьи на Хабре и (если идет речь про образовательный пакет MIPSfpga) статью на сайте Imagination Technologies (пример 1, пример 2, пример 3, пример 4, пример 5):

С последовательностной логикой важный момент — объяснение что такое и зачем нужен D-триггер. Это нагляднее делать с микросхемами малой степени интеграции:

Потом можно сделать сдвиговый регистр и счетчик — сначала с микросхемами малой степени интеграции, а потом на ПЛИС:

module shift_register
(
    input             clock,
    input             resetn,
    input             in,
    input             enable,
    output            out,
    output reg [15:0] data
);

    always @ (posedge clock or negedge resetn)
    begin
        if (! resetn)
            data <= 16'b0;
        else if (enable)
            data <= { in, data [15:1] };
            // data <= (data >> 1) | (in << 15);
    end
    
    assign out = data [0];

endmodule

Наконец, после схемотехники можно поговорить, как это те же самые действия (бегающие огоньки, работу с датчиками освещения) сделать не в схемотехнике / реконфигурируемом хардвере, а с помощью программирования микроконтроллеров / в софтвере:

Для этого я использую вставляемый в макетную плату модуль с микроконтроллером Microchip PIC32MX, про который я расскажу в отдельном посте:

Например бегающие огоньки, реализованные на нем программным образом, выглядят так:

void main (void)
{
    int n;
    
    TRISC = 0;  // Setting LEDs on breadboard as outputs connected to port C
    n     = 0x23;

    for (;;)
    {
        n = (n >> 1) | ((n & 1) << 7);
        PORTC = n << 2;
        delay (1000);
    }
}

Тоже вроде и код, но код на Верилоге и код на Си имеют разную природу - первый описывает схему, а второй - цепочку команд, инструкций процессора в парадигме машины фон-Неймана.

Также планируется использовать модуль LinkIt Smart 7688 с чипом от MediaTek, который может исполнять встроенный вариант Линукса под названием OpenWRT. К внешним устройствам с него можно обращаться как в стандартной Unix-овой парадигме open/read/write/close/ioctl, так и через библиотеку MRAA, которая пришла от Intel Edison и Galileo, и на Питоне:

Наконец можно провести и Хакатон:

На нем младшие школьники могут делать проекты с микросхемами малой степени интеграции, а старшие - подсоединять к микроконтроллерам, ПЛИС и встроенным процессорам различные периферийные устройства, например сенсоры:

Кстати, Владислав Халамов из образовательно-роботической ассоциации с важностью внедрения ПЛИС согласился:

Итого, что скажете, господа? Особенно интересует мнение преподавателей из Киева, так как план этого мероприятия еще не устаканился.