?

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


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

(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
(Deleted comment)
[User Picture]From: olegart
2017-02-12 05:56 pm (UTC)
Из школ-то зачем? Для школ это нормальный уровень. Сначала какой-нибудь Scratch, потом ардуина с её пародией на IDE.

Вот из технических вузов — да, гнать ссаными тряпками.
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]From: levtsn
2017-02-12 04:24 pm (UTC)

Добре

(Reply) (Thread)
From: realurix
2017-02-12 04:29 pm (UTC)
Тебе бы опрос сделать другой - галочками отмечать что нужно. В целом мы так в Королёве детей давно учим в "Кванториумах". Идею у нас, которую мы разрабатываем более 3-х лет, конечно, слямзили.

Edited at 2017-02-12 04:33 pm (UTC)
(Reply) (Thread)
[User Picture]From: gubervas
2017-02-12 04:38 pm (UTC)
Не нашел своего любимого пункта: "Из-за рубежа плюете ?".

Печалька ...
(Reply) (Thread)
[User Picture]From: craftwr
2017-02-12 06:19 pm (UTC)
Моделист-конструктор это вещь. А так никак.
(Reply) (Thread)
[User Picture]From: 1500py470
2017-02-12 06:45 pm (UTC)
В такую плату можно и BackChip встроить, и показать как программировать на IEC языках промышленную автоматику, это заложит набор знаний который может потом в профессию перерости.
(Reply) (Thread)
[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) (Expand)
[User Picture]From: livejournal
2017-02-12 07:04 pm (UTC)

А что если учить школьников одновременно ПЛИС-ам и мик

User ottonturk_g referenced to your post from А что если учить школьников одновременно ПЛИС-ам и микроконтроллерам? Шарики за ролики не заедут? saying: [...] в А что если учить школьников одновременно ПЛИС-ам и микроконтроллерам? Шарики за ролики не заедут? [...]
(Reply) (Thread)
[User Picture]From: a3atbb
2017-02-12 07:20 pm (UTC)

Вы идиот или придуриваетесь?

Понимаю если бы учили актуальным знаниям типа программирования нейросеток, блокчейн или хотя бы Python.

Но зачем тратить время на древнее говно мамонтов, которое ни уму, ни сердцу и 100% никогда уже не пригодится?
(Reply) (Thread)
[User Picture]From: panchul
2017-02-12 07:45 pm (UTC)

Вы или троллите, или вообще не в курсе, о чем идет речь

Вы или троллите, или вообще не в курсе, о чем идет речь.

Все современные системы на кристалле, начиная от SoC в Apple iPhone - построены на основе маршрута RTL2GDSII, который основывается на знании языка описания аппаратуры Verilog и методологии Register Transfer Level (RTL).

Для изучения этих технологий используются лабы на ПЛИС / FPGA.

Также для введения в Verilog и RTL необходимо четкое понимание концепций логического элемента, D-триггера и сигнала тактовой частоты. Что проще всего вводится на микросхемах малой степени интеграции, несмотря на их старость.

Нейросетки, блокчейны и Python этого не заменяют, наоборот, нейросетки биткоины реализуются на FPGA, а Питон можно использовать для введения в встроенные системы, но изучения цифровой логики он опять же никак не заменяет.

(Reply) (Parent) (Thread) (Expand)
[User Picture]From: ultranomad
2017-02-12 08:51 pm (UTC)
Очень правильная методика - знаю по личному опыту далекой юности. Вот только в языках программирования я бы начинал не с С, а все-таки с ассемблера, хотя бы мимоходом.
(Reply) (Thread)
From: realurix
2017-02-12 09:52 pm (UTC)
> в языках программирования я бы начинал не с С
Программирование - это умение излагать на некоем формальном языке описание того, что нужно сделать чтобы достичь желаемого результата. Умение программировать сродни изящной словесности - практика, практика и ещё раз практика. А Дейкстра ещё в 50-х годах сказал: "языки портят программистов"...

Edited at 2017-02-12 09:52 pm (UTC)
(Reply) (Parent) (Thread) (Expand)