?

Log in

No account? Create an account
А что если учить школьников одновременно ПЛИС-ам и микроконтроллерам? Шарики за ролики не заедут? - Юрий Панчул [entries|archive|friends|userinfo]
Money can buy bandwidth. Latency requires bribing God.

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

А что если учить школьников одновременно ПЛИС-ам и микроконтроллерам? Шарики за ролики не заедут? [Feb. 12th, 2017|08:14 am]
Yuri Panchul
В последние семь лет ко мне неоднократно обращались преподаватели детских кружков с вопросом, что бы такое придумать для детей в области электроники, чтобы было 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. Доделать предыдущие дни + лекция по всей электронной промышленности



Что вы думаете?

Согласен
6(35.3%)
Согласен, но перед логическими элементами я бы ввел и дискретные элементы — транзисторы итд
4(23.5%)
В целом согласен, но встроенный Linux — это имхо излишество
1(5.9%)
Я против, лучше пусть строго учатся Ардуино, добавляя датчики и актуаторы
0(0.0%)
Я против, лучше пусть строго учатся Raspberry Pi и Питону, добавляя датчики и актуаторы
0(0.0%)
Я против, Лего — необходимо и достаточно
0(0.0%)
Я не понимаю, чет так уж принципиально отличается программирование микроконтроллеров и ПЛИС
1(5.9%)
А не приведут ли данные увлечения к тому, что школьник не прочитает Анну Каренину и получит 2 по ЕГЭ?
1(5.9%)
У меня альтернативное предложение (написать в комментариях)
4(23.5%)
LinkReply

Comments:
[User Picture]From: panchul
2017-02-12 04:34 pm (UTC)
Ардуины чтобы помигать лампочками или интегрировать сенсор - это еще туда-сюда, но реально проблемно имхо - это когда начинаются разговоры о "продвинутом Ардуино", например приспосабливании его для многозадачности. Это как лодочный мотор к мотороллеру прикрутить и предложить сделать из него моторную лодку. См. напр. https://geektimes.ru/post/285780/


Глава 14 «Многозадачность с единственным процессом». Программисты, пришедшие в мир Arduino из мира больших систем, часто отмечают отсутствие поддержки многозадачности в Arduino как существенное упущение. В этой главе я попробую исправить его и покажу, как преодолеть ограничения однопоточной модели встроенных систем.

(Reply) (Parent) (Thread)
(Deleted comment)
[User Picture]From: olegart
2017-02-12 05:59 pm (UTC)
Ну, про многозадачность-то и на Arduino никто не мешает сделать нормальные треды, и на Cortex-M есть известнейшая RTOS Contiki, в которой нормальных тредов нет.

Здесь возникает лишь принципиальный вопрос — а _зачем_ это делать именно на ардуине, да ещё и под невероятно, запредельно убогой средой разработки?
(Reply) (Parent) (Thread)
(Deleted comment)
[User Picture]From: olegart
2017-02-12 06:13 pm (UTC)
В контики — protothreads, соответственно, всё IPC там сводится к глобальным переменным, кхе-кхе.
(Reply) (Parent) (Thread)
[User Picture]From: Евгений Берсенев
2017-02-13 07:11 am (UTC)
В программировании микроконтроллеров многопоточность присутствует в виде прерываний. Однопоточных систем не существует.

ЗЫ и в Харрисах явно лишним было включение темы кэша. Лучше бы показали детально последовательность проектирования самого примитивного процессорного ядра, достаточного для выполнения алгоритма например вычисления элементов ряда Фибоначчи.
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2017-02-13 03:39 pm (UTC)
*** В программировании микроконтроллеров многопоточность присутствует в виде прерываний. ***

Во-первых, речь идет не о всем программировании микроконтроллеров, а о конкретной ардуинной среде разработки.

Во-вторых, прерывания даже в ардуинной среде разработки имеются, но вы понимаете разницу между например опрашиванием устройств ввода-вывода в обработчике прерывания - и более-менее полноценной RTOS, с переключением контекста между задачами и семафорами?

Для микроконтроллеров AVR (которые используются в Ардуино) вне среды разработки Ардуино есть RTOS-ы кстати.

*** ЗЫ и в Харрисах явно лишним было включение темы кэша. Лучше бы показали детально последовательность проектирования самого примитивного процессорного ядра, достаточного для выполнения алгоритма например вычисления элементов ряда Фибоначчи. ***

Ядро, проектирование которого последовательно показано в главе 7 Харрис & Харрис, достаточно для выполнения алгоритма например вычисления элементов ряда Фибоначчи.
(Reply) (Parent) (Thread)