А что если учить школьников одновременно ПЛИС-ам и микроконтроллерам?
В последние семь лет ко мне неоднократно обращались преподаватели детских кружков с вопросом, что бы такое придумать для детей в области электроники, чтобы было 1) интересно 2) конвертировалось бы в будущую специальность и 3) давало бы что-нибудь качественно другое, чем уже устоявшиеся среди преподавателей лего-ардуины-и-разберри-паи.
Подход, который я хотел бы предложить в этой заметке — это конструирование устройств на основе макентной платы, используя примитивы разных уровней абстракции. Прежде чем описать суть предложения, я приведу аналогию. Допустим, нам нужно исследовать местность между городом A и городом B. Из A в B можно проехать на автомашине, рассматривая окрестности дороги. Но еще лучше — проехать не только на автомашине, но и потом проплыть тот же маршрут на подводной лодке, пролететь его на самолете, походить в некоторых местах пешком, а также прорубить кусок шахты на участке между городами на проходческом комбайне. По ходу дела ученик получит не только опыт вождения автомобиля, но и представление о структуре недр, морской экосистеме, нравах жителей и общей карте местности.
Теперь суть предложения. Ученик за несколько дней выполняет серию простых электронных проектов, которые имеют сходную функциональность, но используют в качестве строительных кубиков разные объекты, в том числе:
1. Микросхемы малой степени интеграции, по несколько логических элементов в каждой
2. Программируемые логические интегральные схемы, десятки тысяч ячеек с изменяемой логической функцией
3. Микроконтроллеры
4. Встраиваемые процессоры
В качестве базового пособия для таких упражнений используются избранные места из популярного учебника Харрис & Харрис, доступного на русском языке, в том числе в виде официально бесплатной электронной версии ( https://habrahabr.ru/post/306982/ ). В бумажном виде эту книжку можно заказать здесь и здесь:
Замечу, что (3) перекрывается по тематике с ардуинами, а (4) — с расберри пай. (1) уже вводилось в истории для обучения школьников, но имеет ограниченную полезность без соединения с другими уровнями через (2). Именно (2) и сравнение (1)-(2)-(3) отличает это предложение от уже используемых. Все четыре типа кубика могут монтироваться на одну и ту же монтажную плату, но имеют разную разную природу, требующую разные методы для работы с ними.
Макетная плата для монтажа в гнезда (breadboard) — это простое устройство для прототипирования электронных схем без паяльника. Оно включает сотни гнезд, часть из которых уже соединена металлическими полосами, с возможностью дополнительных соединений перемычками (jumpers). Уже в 1970-е годы некоторые педагоги обнаружили, что детям интересно строить на таких платах разного рода поделки на основе микросхем малой степени интеграции: мигающие огоньки, счетчики, сирены и т.д. Технику из Калифорнии по имени Gary A. Gibson удалось внедрить это в школах (см. описание одного их таких наборов на https://www.dropbox.com/s/xy4k8s5652i1iy7/TronixBook2.pdf?dl=0 ). Вот пример такой схемы:
Внутри каждой такой микросхемы всего несколько логических элементов:
Наборы Гибсона являются практических идеальными, чтобы «потрогать» и ввести такие концепции как логический элемент (gate — AND, OR, NOT), триггер (D-flip-flop) и сигнал тактовой частоты (clock). Сейчас, в 21 веке, эти наборы с небольшими модификациями продолжает продавать компания ETron Circuit Labs. В России похожие наборы продает ООО «Киберфизика».
При этом уже в 1980-е годы интерес к таким наборам упал, так как в промышленности стали использовать больше микроконтроллеров, чем микросхем малой степени интеграции, а логически плавный переход от индивидуальных логических элементов к микроконтроллерам через проектирование микросхем был однозначно недоступным для школьников.
Одновременно в тех же 1980-х годах возникли две технологии, которые спустя 20 лет изменили ситуацию снова. Одна из таких технологий — это логический синтез из языков описания аппаратуры (Hardware Description Language — HDL), используя уровень регистровых передач (Register Transfer Level — RTL). Другая технология — программируемые логические интегральные схемы (Field Programmable Gate Array — FPGA), матрицы логических ячеек, функцию которых можно менять с помощью перепрошивки конфигурационной памяти. Последнее отличается от классического программирования, ибо в случае ПЛИС/FPGA мы строим схему, а не пишем цепочку инструкций программы.
Сейчас существуют недорогие ПЛИС/FPGA, платы с которыми которые можно вставлять в макетную плату. Теперь вместо физических соединений нескольких логических элементов перемычками (jumpers) школьник может строить схемы из десятков тысяч логических элементов меняя конфигурацию ПЛИС/FPGA. См. заметку Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:
Помимо простых конечных автоматов и арифметических устройств школьник может построить, реконфигурируя такую микросхему, и простой микропроцессор — см. Глава 7 в Харрис & Харрис.
А недавно компания Digilent (отделение National Instruments) выпустила еще один вставляемый в макетную плату модуль Cmod A7-35T с ПЛИС бОльшей емкости Xilinx Artix-7, в который можно поместить и используемое в промышленности микропроцессорное ядро MIPS microAptiv UP, базовая конфигурация которого доступна бесплатно в виде пакета MIPSfpga (но это уже не для школьников, а скорее для студентов вузов):
Наконец, в макетную плату можно вставить и модуль с микроконтроллером, который можно программировать на C. Тем самым можно сравнить программирование встроенного процессора с построением схемы в ПЛИС-е в предыдущем упражнении. Как программировать подобный микроконтроллер, я описал в свое время в заметке Как начать работать с Microchip PIC32. Часть первая.
Замечу, что для программирования Microchip PIC32 можно использовать и Ардуино-подобную систему разработки MPIDE, и профессиональную среду MPLAB X, в которой можно например использовать RTOS-ы. С моей точки зрения, разница в уровне сложности для начала работы с MPIDE и MPLAB X недостаточно велика, чтобы сначала учить MPIDE, а потом – MPLAB X. Если в конечном итоге человек собирается получить профессиональные навыки, лучше сразу начинать с MPLAB X. Если же целью является скажем научить программированию микроконтроллеров гуманитариев, то лучше использовать MPIDE и на нем оставаться.
Наконец, в макетную плату можно вставить и модуль со встроенным процессором, на котором может работать версия Линукса — OpenWrt. Помигать лампочками на компьютере со встроенным Линуксом — тоже неплохое упражнение, чтобы понять, какие дополнительные уровни это добавляет (драйверы, kernel/user mode и т.д.):
Под конец, школьнику можно показать лекцию про всю последовательность проектирования и производства микросхем от спецификации до микросхемы на фабрике. Это свяжет его упражнения с ПЛИС/FPGA на недорогой студенческой плате с массовым производством. Для этого можно сделать научно-популярную выжимку из курса Специализированные интегральные схемы наноуровня:
Итого, если бы у меня стояла задача прокатить школьников галопом по Европам за несколько дней, то я бы делал это так:
День 1 до обеда. Сборка комбинационных схем на макетной плате с микросхемами малой степени интеграции:
1.1 Упражнение с логическими элементами AND, OR, NOT
1.2 Укражнение с сумматором и 7-сегментным индикатором
День 1 после обеда. Сборка последовательностных схем на макетной плате с микросхемами малой степени интеграции:
1.2 Упражнение с генератором тактового сигнала 555 и D-триггером
1.3 Упражнение с счетчиком, бегающими огоньками и 7-сегментным индикатором
День 2. Повторение дня 1, но с Verilog и FPGA
День 3. Повторение дня 1, но с микроконтроллером и на C
День 4. Повторение дня 1, но с встроенным процессором и Линуксом OpenWrt
День 5. Доделать предыдущие дни + лекция по всей электронной промышленности