?

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: dimaviolinist
2017-02-12 07:03 pm (UTC)
Вот я гуманитарий. Скрипач — это же гуманитарий?

1) Согласен, но перед логическими элементами я бы ввел и дискретные элементы — транзисторы.
А так же RС генератор и зачем, собственно, резисторы 1) подтягивающие 2)токоограничивающие. Плюс делитель напряжения. Просто как инфу, без теории, в практике применения.
2) Поменять местами микроконтроллеры и FPGA (2<->3). Микроконтроллеры (не в форме ардуино, ардуино действительно игрушка, недалеко ушедшая от конструкторов сайтов)перед FPGA. Всё же, понимание цепочки логических элементов, по идее, для большинства сложнее, чем даже средней сложности код на С. Но это мои наблюдения.

Я так понимаю, подразумевается, что школьники С, как минимум, должны знать. Хотя бы на уровне if for while и вызов функции (параметры) return. Если нет, то, как мне кажется, программа крутовата.

Кстати, MPLAB X вполне себе доступна для понимания. Я бы даже сказал, что она простенькая (но это я уже в ней поработал). Вот только никак не могу вытянутый hex в asm listing превратить. Скорее всего, это уже моя тупизна :)
(Reply) (Thread)
[User Picture]From: panchul
2017-02-12 07:07 pm (UTC)
*** резисторы 1) подтягивающие 2)токоограничивающие ***

Ну это в (1) вводится. С транзисторами - может быть.

(Reply) (Parent) (Thread)
From: realurix
2017-02-12 09:47 pm (UTC)
А про АЦП/ЦАП забыл? Или не знал?
(Reply) (Parent) (Thread)