Comments 206
так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены, то пора делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog
Как-то это выглядит немного странно, на мой взгляд. Учитывая, что в подавляющем большинстве случаев «программирование микроконтроллеров с помощью Ардуино» сводится к поиску в инете готовых скетчей, назвать изучение Verilog следующим шагом — слишком оптимистично, мягко говоря.
Да и связь между микроконтроллерами и FPGA весьма отдаленная, все же это даже идеологически разные вещи. Скорее, это должно звучать как-то так: «А давайте кроме программирования микроконтроллеров с помощью Ардуино будем учить еще и программированию FPGA на Verilog».
Но чтобы написать песню (создать систему на кристалле с аппаратной и программной частью) нужно представлять обе стороны.
Для этой задачи нужно иметь представление о множестве сторон, из которых Ардуины и Verilog — совсем не в начале списка :)
Нет, я не имею ничего против обучения различным аспектам электроники, но почему бы не сделать после изучения Ардуин действительно следующий шаг — реальное программирования современных микроконтроллеров, например тех же STM. А то сейчас это похоже на «запускать бумажные самолетики научились, делаем следующий шаг — переходим к изучению пилотирования авиалайнеров» :)
но почему бы не сделать после изучения Ардуин действительно следующий шаг — реальное программирования современных микроконтроллеров, например тех же STM
Потому что следующий после школы шаг уже называется «университет», а в тексте речь о школьном образовании?..
переходим к изучению пилотирования авиалайнеров
Не вижу, чем программирование ПЛИС чем-то принципиально сложнее программирования того же AVR. Это другая парадигма, и задача хорошего школьного образования — дать представление о том, что эта парадигма существует и как она выглядит.
Это не значит, что на выходе из школы получатся профессиональные разработчики ПЛИС (точно так же, как на выходе из школы не получаются профессиональные биологи и физики, хотя биологию и физику там преподают).
чтоб поступая в университет, человек понимал «область»
Недавно аж целый профессор-метеоролог выдал на всю страну в эфир, что весной снег на крыше намокает и его вес увеличивается...
Э-ээхххх…
Поэтому повторю тезис: задача школы — не давать «необходимые в жизни знания». Задача школы — давать понимание о том, как устроен мир и из чего он в общем и целом состоит, чтобы ребёнок дальше сам мог выбрать интересующую его область и получать в ней уже действительно необходимые ему знания.
для дополнительного внешкольного образования/физматшкол (а уж тем более — специализированных детских лагерей) — самое то, что надо
Во-вторых, я не вижу, чем FPGA принципиально сложнее ардуины. На том и другом светодиодом помигать можно за сравнимое время.
А биологов, географов, математиков и лингвистов вообще практически нисколько не нужно.
Из этого, однако, почему-то не следует, что в школе надо учить вождению автомобиля и не надо — биологии и географии.
Потому что не надо путать школу с ПТУ. Школа не готовит «востребованных обществом специалистов».
И если уж на то пошло, то физика может справиться с демонстрацией чего угодно. Что, однако, не делает ненужной даже химию — которая, конечно, по своей сути в чистом виде небольшой подраздел физики.
«Поморгать светодиодом» можно на чём угодно. Начиная от голых реле и заканчивая нейронными сетями.
А вот какую-нибудь домашнюю метеостанцию делать на FPGA — себя не уважать. Для ПЛИС есть совершенно определённые узкоспециализированные сектора, где нужны их преимущества.
это аналог «изучения нуклеиновых кислот» в школьном курсе химииВообще-то, их изучают. У нас было, по крайней мере.
вообще, нуклеиновые кислоты я приплел как цитату из «вид с высоты» Азимова:
Потому что следующий после школы шаг уже называется «университет», а в тексте речь о школьном образовании?..
Школьному образованию как раз ближе программирование микроконтроллеров. У них гораздо более широкая сфера применения, гораздо выше шанс, что может пригодиться в жизни.
Не вижу, чем программирование ПЛИС чем-то принципиально сложнее программирования того же AVR.
Оно не принципиально сложнее, а принципиально другое. Ну и речь идет не о программировании AVR, а о программировании Ардуин. И я не знаю как в этом конкретном случае, но в своей массе программирование Ардуин изучается на уровне «найти скетч, вставить его, нажать „проверить“, нажать „загрузить“». Как только что-то идет не по сценарию (скетч не работает как надо, не грузится, компилятор выдает ошибки) — паника и вопросы на форумы. То есть умение программировать Ардуины и умение программировать AVR — в большинстве своем отличаются как умение разогреть готовый обед в микроволновке и умение этот обед приготовить из исходных продуктов.
задача хорошего школьного образования — дать представление о том, что эта парадигма существует и как она выглядит.
Вообще, задача школьного образования должна, на мой взгляд, ограничиться просто общими принципами — что это такое и в чем отличие от микроконтроллеров. Если вообще должна задевать эту тему в рамках общей программы.
У них гораздо более широкая сфера применения, гораздо выше шанс, что может пригодиться в жизни
Вы путаете школьное образование со специальным техническим, оно же ПТУ. Навыки, с которыми можно трудоустроиться слесарем третьего разряда сразу по выпуску из учебного заведения, даёт ПТУ.
Школа даёт общее, всеохватывающее представление об окружающем мире, на основании которого школьник может в этом мире ориентироваться — в том числе выбирать дальнейшее направление обучения. Сами по себе биология, физика, география даже в том объёме, в котором их даёт школа, 9 из 10 школьников в жизни никогда не пригодятся — да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.
Программирование в школе преподаётся штатно, на x86. Программирование микроконтроллеров — уже в некоторых школах тоже. Если там будут даваться ещё и ПЛИС — это замечательно, так как ПЛИС — это отличная от микроконтроллеров парадигма.
что это такое и в чем отличие от микроконтроллеров
Это будет отписка для галочки, а не преподавание.
по наблюдениям (сын сейчас заканчивает школу) освоили программирование — двое из класса.
Вы путаете школьное образование со специальным техническим
Мне кажется, что это как раз Вы путаете. Выпускнику средней школы совершенно не нужно в обязательном порядке знать ни программирование микроконтроллеров, ни программирование FPGA, это уже специальное или дополнительное образование. Максимум что школьникам могут давать в обязательном образовании — это базовые понятия.
да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.
Это да, невостребованность знания русского языка очень заметна в русскоязычном интернете :)
Однако это не является поводом вычеркнуть их из школьной программы, оставив в ней одну физкультуру.
А программирование почему тогда не надо знать? Стоит ли его вообще исключить из школьной программы?
Можете ли вы, не заглядывая в гугль, написать отличие мейоза от митоза, вы же знаете биологию?
Не могу, но со школы у меня осталось достаточно знаний, чтобы понять прочитанное в гугле.
Перечислить страны, с которыми граничит Перу, вы же знаете географию?
Тоже нет, но по крайней мере я знаю где это и легко могу найти эти граничные с Перу страны.
А программирование почему тогда не надо знать?
Откуда я знаю почему. Я про программирование ничего не писал.
Вы путаете школьное образование со специальным техническим, оно же ПТУ. Навыки, с которыми можно трудоустроиться слесарем третьего разряда сразу по выпуску из учебного заведения, даёт ПТУ.
Во первых ПТУ сейчас уже НЕТ, а есть колледжи (аля аналог техникумов ).
Школа даёт общее, всеохватывающее представление об окружающем мире, на основании которого школьник может в этом мире ориентироваться — в том числе выбирать дальнейшее направление обучения.
Во вторых, данное, современная отечественная школа не дает и не может дать (данное говорю как практик).
Текущие задачи средних образовательных учреждений как и задачи у бизнес структур одинаковые, зарабатывание денег. Администрации ОУ прежде всего нужно «поголовье» (за это оплата) и успешная итоговая аттестация учащихся (престиж и прочее) и ВСЕ!
Полностью согласен с Mikeware, не о каком программировании, а тем более микроконтроллерах и FPGA речи идти не может.
Если что и есть где то только силами энтузиастов и в кружках дополнительного образования (Дома творчества и прочее).
В третьих, с нашим очередным министром образования и ее идеями школьники не то что информатику, а просто в старшей школе (10-11 классы) учится перестанут.
Ну и последнее, по себе скажу (веду кружок) желающих работать и осваивать новые знания сейчас среди детей ЕДИНИЦЫ!
Сами по себе биология, физика, география даже в том объёме, в котором их даёт школа, 9 из 10 школьников в жизни никогда не пригодятся — да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.
Т.е. 9 из 10 человек никогда не посадят, прости господи, укроп на даче (биология), не починят утюг (физика) и не уедут из своего родного города (география)?
Программирование в школе преподаётся штатно, на x86.
Вы какую-то конкретную школу имели в виду?
Т.е. 9 из 10 человек никогда не посадят, прости господи, укроп на даче (биология), не починят утюг (физика) и не уедут из своего родного города (география)?
На уроках биологии не рассказывают, как сажать укроп, на уроках физики — как чинить утюг, а на уроках географии — как доехать до соседнего города. И да, 9 из 10 человек не смогут вам сообщить, к какому семейству относится укроп, какова зависимость мощности нагревателя от напряжения на нём и каков климат в Перу — хотя это всё как раз на соответствующих уроках рассказывают.
Все-таки у нас с вами какие-то разные школы рядом находятся. В вашей программирование на х86, в моей — просто физика и биология.
Представим себе программирование Ардуино или STM как вождение машины — от пересаживания с Тоеты на Хонду вы не изучите, как работает ее двигатель и коробка передач, даже если вы будете очень много водить. А вот с FPGA — изучите.
На FPGA вы можете сконструировать свой процессор, в том числе аналог процессорного ядра AVR в Ардуино или Cortex-M в STM. Никакое количество программирования эту способность вам не даст.
Вопрос о том, что получится, если дать действительно другой взгляд, не привязанный намертво к концепции фон-нейманновской машины в программировании.
STM — это точно такое же программирование, как и Ардуино
Нет, Вы не поняли. Ардуино позволяет вообще ничего не знать о микроконтроллере, о том как работает его периферия и как ее настраивать, о прерываниях и их роли и т.д. Это складывание готовых кубиков. И вот следующим шагом для желающих было бы как раз умение работать с микроконтроллерами — научиться программировать их не готовыми блоками «вставил-нажал кнопку-заработало», а именно на уровне самих микроконтроллеров и их периферии. Пусть не STM, пусть те же AVR (хотя не вижу смысла изучать устаревшее), но именно программирование микроконтроллеров, а не сборка готовых скетчей.
Ковыряние в регистрах конкретной железки — это занятие для посетителей какого-нибудь радиокружка. В школе оно уместно не более, чем умение самостоятельно рассчитать DC/DC — хотя в принципе вон там на фоточках эти DC/DC на отладках есть.
P.S. И, кстати, STM32 тоже позволяет практически ничего не знать о самом микроконтроллере. Развернул RTOS — и вперёд.
Во первых кое какую периферию настраивать в ардуино всё таки надо
Это не настраивание периферии микроконтролера :)
Во вторых у STM есть замечательная утилита STM32CUBEmx, в которой можно многое настроить просто тыкая галочки.
Я в курсе этой утилиты.
Настраивание любой периферии производится через регистры микроконтроллера. Умея делать это на одном микроконтроллере, Вы легко сможете сделать это и на любом другом. Умея же вызывать библиотечную функцию, Вы сможете вызывать ее только там где она есть.
Так как регистры могут быть разные. Как и функции, только функции легче читаются.Даташиты, в отличии от высокоуровневого API, есть всегда.
И что, я данной функцией не настроил порт на выход?
Нет, Вы вызвали функцию, и можете только надеяться, что она внесла правильные значения в правильные регистры. А если она сделала это неправильно, то без знания микроконтроллера Вы приплыли.
И если я умею через регистры настраивать у периферию у одного микроконтроллера, то не всегда я настрою легко в любом другом. Так как регистры могут быть разные.
Еще раз поясняю, последний. Если Вы знаете как настраивается периферия микроконтроллера (а не вызывается чья-то функция), то при переходе на другой микроконтроллер Вы знаете что делать — найти в документации отвечающие за эту периферию регистры и внести в них нужные значения. А если Вы знаете только функцию, то при переходе на другой микроконтроллер Вы становитесь совершенно беспомощным пока не найдется написанная кем-то нужная функция.
Как и функции, только функции легче читаются.
Вот только регистры у микроконтроллеров есть всегда, в любой среде программирования, в любой момент. А функцию еще должен кто-то написать чтобы ею можно было воспользоваться.
От тех же ардуинщиков то и дело на форумах появляются посты «скачал скетч, а он не работает, помогите». Найти проблему для них уже непосильная задача, потому что они даже не представляют как на самом деле все работает в микроконтроллере.
И еще одно, тоже еще раз и тоже последний: я не против такого подхода в любительской практике. Но знание Ардуин вовсе не означает знания микроконтроллеров.
кому-то нужно одно (плевать на то, какой кристалл), кому-то другое (выжать из кристалла все, что можно)
почему вы считаете, что следующий шаг — это именно «программирование микроконтроллеров»? а может, следующий шаг — подключение к ардуине силового оборудования, или разработка новых датчиков? зачем вообще делать «шаг вглубь» (в любую сторону), если ардуина позволяет реализовать потребности?
вы же после получения прав не сделали «следующий шаг» — получения удостоверения автомеханика (а затем, и разработчика двигателей)? наверное, нужно уметь вовремя остановиться…
учить миллионы школьников FPGA, чтоб на выходе получить пару разработчиков — несколько расточительно.
ну а те, кому интересно — вполне могут и сами к этому прийти, если будут знать о существовании. например, из Ваших статей/видеокурсов (или как это модное направление сейчас называется?)
вообще, как олдскульник — я рад такой инициативе. но здраво размышляя, возникает вопрос — а оно массово — нужно? и самим этим школьникам, чисто практически, и стране?
Это вызывает сильный когнитивный диссонанс, когда человек сталкивается с вычислениями на основе конвейерной обработки данных. При попытке кодировать такое на верилоге программист с опытом сначала всячески норовит представить это в интуитивно привычной (но неработющей форме).
Поэтому было бы интересно поселить в голове у молодого человека две картины вычислительного устройства: программирование (на основе ментальной модели фон-нейманномской машины) и цифровой дизайн на уровне регистровых передач (с концепциями конечного автомата и конвейера).
В первой ментальной модели (программиста) есть такие крипичики как последовательное исполнение, ветви выбора, переменные, выражения, модель плоской адресуемой памяти, циклы, функции (на основе использования стека), рекурсия.
Во второй ментальной модели (электронщика, разработчика логики) есть концепции логического элемента и построенных на них облаков комбинационной логики, выбора с помощью мультиплексора и арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами/циклами; конечный автомат; параллельность операций, для самых продвинутых — концепция конвейера (не только для процессора, но и для арифметических блоков – см. пример с конвейерной реализацией ).
Про конечные автоматы и конвейеры продвинутым учащимся физматшкол знать может довольно интересно. Для студентов-электронщиков – это необходимая часть профессии. Для разработчиков систем из хардвера и софтвера – крайне полезно, чтобы понимать, когда имеет смысл применять хардвер, когда – софтвер.
Но C и железо — это ортогональные направления. Довести C до полной функциональности Verilog можно разве что после долгой обработки напильником, но по пути потеряется весь смысл использования C для описания аппаратуры — а он в том, что программистов на C на рынке труда как говна за баней.
Это, наверное, можно сравнить с визуальным программированием микроконтроллеров, когда программа не пишется на Си, а составляется из кубиков-примитивов в графическом интерфейсе. Это просто, доступно, но никак не гибко и ничего серьезного на этом не сделаешь. Язык Си сам по себе очень чужд идеологии FPGA, и его применение в этой области — костыль :)
вот вам и потребности…
Я спорю о их месте в школьном образовании.
ну и насчет Южной Кореи: самсунг галакси появился не из-за того, что там были разработчики. и автомобили дэу и хундай — тоже. и ЛыЖы тоже. они появились там потому, что там была бизнес-среда, которая заставляла создавать продукты. а разработчиков они уже нашли (купили, переманили, выростили).
Если нужно, можно всегда упоминать «А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?
В принципе, вы делаете хорошее дело, и я уважаю ваш энтузиазм. Но в то же время я вижу проблему в массовом продвижении вещей, которые невозможно массово использовать. Это как предлагать минидомну в каждую школу под лозунгом «стране нужны металлурги».
«А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?
Для того, что бы гиганты вроде Microsoft, FaceBook, Google, Amazon и тп. могли эти встроенные в процессоры блоки конфигурировать под свои задачи. Но, столько разработчиков фпга не нужно, сколько «обычных» программистов.
Для общепромышленных задач фпга тоже не сильно подходит.
Фпга программист — это как физик ядерщик, навеки вечные привязан к АЭС, и вероятно, к какой то определенной.
Их(фпга программистов) много не нужно, поэтому работодатели могут диктовать абсолютно любые условия.
https://habrahabr.ru/post/317558/
Как они это делают?
я полностью согласен с Вами, что знатьи понимать цифроую схемотехнику программисту очень полезно. но не необходимо.
показывать школьникам «все многообразие мира» тоже нужно. но для этого нужна определенная база, и интерес опять же к электронике. Программистов сейчас нужно гораздо больше, чем электроншиков. а системщиков — гораздо меньше, чем электронщиков.
Ну а то, что этот курс необходим студентам «вычислительных специальностей» и интересен физматшкольникам — я согласен полностью. Но это — не «массы», это единицы процентов от «ардуинщиков».
кстати, по опыту — школьники конечные автоматы прекрасно усваивают, и применяют на ардуинах.
И ардуинный VP согласна, и готовит помимо платы выше еще одну FPGA плату от Arduino
Да, конечные автоматы можно реализовать и на Паскале, и на Верилоге.
Но фишка в том, что синтезируемое подмножество Verilog-а — это не язык программирования. Это язык описания схем на уровне регистровых передач. Так же как HTML — это тоже не язык программирования, а язык описания веб-страниц.
Язык программирования — это нечто, жестко привязанное к парадигме фон-нейманновской машины, цепочке инструкций. Она так намертво входит в мозг обучающегося, что потом встречаются окончившие computer science студенты, которые вообще не верят в существование не-фон-нейманновских вычислительных установок. При том, что фон-нейманновский компьютер — это очень частный случай того, что можно сделать на последовательностной логике, с отправными кирпичиками gate — clock — flip-flop.
Я уже не говорю о том, что и конечный автомат — это частный случай использования последовательностной логики. Например в него не вписывается конвейерная обработка, которую при желании можно тоже симулировать на Паскале, но это будет на уровне извращения, как на Фортране писать программы работы с деревьями, без структур, без указателей и без рекурсии, а только с параллельными массивами и индексами.
Основы верилога и FPGA — это очень полезно для того, чтобы сломать жесткую привязку мозга к фон-нейманновской машине и сделать понимание вычислительной установки более объемным, менее плоским. (И нет, изучение POSIX threads тоже не отрывает мышление от фон-нейманновской машины)
Вот пример схемы конечного автомата, синтезируемой из кода на верилоге:
Код:
Код на Verilog из которого синтезируются схемы выше:
http://www.silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/06_optional_introductory_materials_if_necessary_for_the_audience/06_exercises/exercise_3_counter_shift_fsm.html
// Smiling Snail FSM derived from David Harris & Sarah Harris module pattern_fsm_moore ( input clock, input reset_n, input a, output y ); parameter [1:0] S0 = 0, S1 = 1, S2 = 2; reg [1:0] state, next_state; // state register always @ (posedge clock or negedge reset_n) if (! reset_n) state <= S0; else state <= next_state; // next state logic always @* case (state) S0: if (a) next_state = S0; else next_state = S1; S1: if (a) next_state = S2; else next_state = S1; S2: if (a) next_state = S0; else next_state = S1; default: next_state = S0; endcase // output logic assign y = (state == S2); endmodule //---------------------------------------------------------------------------- // Smiling Snail FSM derived from David Harris & Sarah Harris module pattern_fsm_mealy ( input clock, input reset_n, input a, output y ); parameter S0 = 1'b0, S1 = 1'b1; reg state, next_state; // state register always @ (posedge clock or negedge reset_n) if (! reset_n) state <= S0; else state <= next_state; // next state logic always @* case (state) S0: if (a) next_state = S0; else next_state = S1; S1: if (a) next_state = S0; else next_state = S1; default: next_state = S0; endcase // output logic assign y = (a & state == S1); endmodule
и каждой задаче нужен свой инструмент.
я не вижу ничего плохого, если кто-то будет знать еще и верилог, но не вижу ничего хорошего, если он будет знать только верилог.
То есть, я не могу сказать, что вы не правы, но и согласиться, что за верилогом будущее, тоже не могу)) И разумеется, я только за обучение людей, которые хотят учиться, безотносительно того, о каких технологиях речь)
Тут дело к сожалению не в ограниченности инструментов. Тут дело в отсутствии даже идеи методологии, которая бы могла заменить (на достаточно широком спектре дизайнов) register-transfer-level (RTL) methodology (используемой вместе с Verilog и VHDL). Типичные демо тулов для высокоуровневого синтеза уже 25 лет демонстрируют, как хорошо они умеют синтезировать цифровой фильтр, но ни один не может придумать, как сделать forwarding/bypass в процессоре — или даже как просто выразить это в языке, не опускаясь на RTL методологию.
Поэтому то, что вы сказали — это просто вера по ложной аналогии с историями в софтвере.
Я ни в коем случае не предлагаю учить _только_ верилог. Знать верилог без знания одного из императивных языков программирования (C, Pascal, Java, Python) — это тоже неправильно. Для корректной картины инженерного мира нужны обе стороны хардверно-софтверной системы (по крайней мере в физматшколах для инженерно-ориентированных детей).
вопрос в том, надо ли это «в массах», и «кто это будет делать» (ибо школьные учителя… ну, сами понимаете...)
Это вызывает сильный когнитивный диссонанс, когда человек сталкивается с вычислениями на основе конвейерной обработки данныхИ подавляющее большинство людей в жизни с ними не столкнутся.
Про конечные автоматы и конвейеры продвинутым учащимся физматшкол знать может довольно интересноА может и не быть.
у всех людей (ну, почти) в жизни будут дети… давайте учить генетику человека полностью (чтоб могли предсказывать вероятность генетических заболеваний)? а заодно и педагогику? Ну и т.д., до абсурда…
p.s. я не говорю, что это совсем не надо (сильно утрируя можно доказать нужность или ненужность чего-угодно, но это не конструктивно). Речь только о приоритетах. То есть, если у меня будет выбор учть своих детей рекурсии или верилогу, я выберу первое. Я говорю «или» потому, что отведенное на учебу время конечно, и получить все и сразу маловероятно.
Я завел разговор про рекурсию вот с какой целью — с моей точки зрения рекурсия важна, но важно например и конвейерная обработка — для меня это концепции одно уровня важности. Конвейерную обработку показывать на Паскале — это можно, но это извращение. А вот на Верилоге — в самый раз.
А вы говорите, что рекурсия важна, а конвейерность — нет. Апеллируя к числам фибоначчи и рекуррентным последовательностям в курсе школьной математике. Я же говорю, что числа фибоначчи программируются итеративно, следовательно наш спор — о предпочтениях.
(Рекурсия становится незаменимой при обработке деревьев, но в школьной математике этого по-моему нет)
Покажите, каким именно образом важна конвеерная обработка (как концепция), если вы не занимаетесь проектированием процессоров. Кроме того, я счиаю эту концепцию очень простой, и особого смысла показать ее как можно раньше не вижу.
А не-хвостовая? Поиск по бинарному дереву?
*** если вы не занимаетесь проектированием процессоров ***
Это гораздо более общий принцип, применимый даже для арифметических блоков, не говоря уже о сетевых чипах итд — см.
http://panchul.livejournal.com/268104.html
Почему микроэлектроника не сводится к гонке за нанометрами
Поиск по бинарному дереву?
как-то так, если я ничего не путаю
Ок, если не занимаетесь проектированием чипов вообще (а не только процессоров).
рекурсией нельзя осуществить горизонтальный обход дерева.
(вообще похожие дискуссии были в 1985 году о важности введения программирования в школах, и тогда многим тоже казалось, что например игры на японском компьютере MSX Yamaha — этого Россия не достигнет ни через 50 лет, ни через 100, а сейчас есть вот получившая международное признание игра в танчики).
нужно иметь представление и о базе софтверной части, и о базе хардверной части — иначе в обществе не будет потребность для создания своих российских самсунгов и эпплов
Потребность для создания возникает не из знаний устройства… потребность возникает из желания что-то сдедать… а конкретных реализаторов идеи можно для начала и пригласить «снаружи»
но если будет 100500 «реализаторов», но не будет идеи (а равно — рыночной инфраструктуры, институтов) — эти 100500 инженеров в лучшем случае пополнят ряды менеджеров по продажам, а в худшем — ряды безработных…
в подтверждение своей позиции я могу сказать, что в 90-е высвободилось из военпрома огромное количество инженеров и отраслевых ученых, умеющих делать «суперхреновины» на почти мировом уровне. только вот ни самсунга, ни эппла не появилось — появились челноки…
в курсе ИКТ рекурсия нужна в лучшем случае как пример, но если ее и не упомянуть — особого вреда не будет…
Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.
К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге.
При этом, сейчас в мире растет потребность в устройствах для интернета вещей, в умных чипах с аппаратной поддержкой распознавания графических образов, а также системах машинного обучения. Все эти рынки открывают ниши для разработки новых микросхем, которыми могли бы заняться и разработчики России, страны с богатыми инженерными традициями. Так как современное проектирование отделено от производства, а мир глобализован, то российские разработчики могут лицензировать западные средства проектирования и IP-блоки, а также использовать азиатские фабрики.
и т.д.
Никаким количеством программирования Ардуино или STM (что в рамках этих концепций просто разные вариации фон-нейманновской машины) вы это не выучите.
А это совершенно необходимо, чтобы иметь малейшее представление, как работают абсолютно все цифровые чипы на рынке — от айфона до спутника — и как строятся программно-аппаратные системы.
Это гораздо более широкий класс концепций, чем работа с регистрами STM.
Это нужно чтобы создать рынок новых работ, и вовсе не только в FPGA, но и в ASIC design. Или вы хотите, чтобы россияне вечно программировали чужие чипы?
2) Конечные автоматы прекрасно учатся даже в прикладном программировании без всяких ардуинок.
3) А применение у этого какое? Зачем простым смертным микроархитектура?
Или вы хотите, чтобы россияне вечно программировали чужие чипы?
будут программировать чужие фпга. шило на мыло.
Вы же разработку на фпга продвигаете, а не разработку самой фпга.
ЕГЭ в этом году сдает 700 000 школьников. из них информатику (т.е. более-менее интересуется этой областью знаний) — 71 тыс. из них поступят «по направлению» — в лучшем случае 25000 ну и так далее. допустим, что из этих 25000 в год заинтересуются ФПГА 10% -2500.
Вы слишком оптимистичны, у нас в городе 300 выпускников (11класс) Информатику сдают примерно 90 человек, а поступать по профилю ИТ человек 15 из них электроникой интересуются не более 2-3.
Так что 25000 и 10% это слишком радужно. Информатику для сдачи ЕГЭ берут потому что надо что то еще кроме «базы» и многие считают что это легче чем остальные предметы.
сын сдает сейчас оные, поэтому держусь в курсе (сегодня, кстати, физика).
сдавать «кроме базы» что-то совсем не обязательно. и информатика в существующем виде — не самый легкий (из-за невнятности курса) предмет. кроме того, самыми легкими считаются болтологические предметы — обществознание, история.
ну а электроникой интересуются мало. причины простые и взаимосвязанные: 1. все можно купить в китае. 2.инженерная работа непрестижна 3.нет производств
так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены
Юрий (извините, не знаю Вашего отчества), зайдите на любой форум по Ардуино, зайдите на любой сайт данной тематики, посмотрите на сами Ардуино библиотеки, и Вы поймете, насколько Ваше утверждение далеко от истины, даже если использовать «менее», про «более» я даже не заикаюсь.
А с ПЛИС будетеще хуже, я в этом не сомневаюсь — далее собственно вопрос — и на фига?
Зачем учить школьников языкам описания аппаратуры и использованию ПЛИС? Обоснование программы.
В картине мира, представляемой школьным образованием, существует “слепое пятно” в области принципов проектирования цифровой электроники, между физикой и программированием. Курсы роботики и ардуино это слепое пятно не закрывают, так как сводятся к программированию готовых чипов. Упражнения с дискретными элементами и микросхемами малой степени интеграции, хотя и эффективны во введении в основные принципы, базируются на технологиях 1960-1970-х годов и не содержат привязки к современному проектированию. Слепое пятно можно закрыть с помощью введения элементов языков описания аппаратуры (ЯОА) и доступные для школьного экспериментирования микросхемы ПЛИС (программируемые логические интегральные схемы) — матрицы реконфигурируемых логических элементов. Тем самым картина мира становится цельной, и способствует созданию среды для появления большого количества молодых инженеров, имеющих представление о всех сторонах современных микросхем для приложений типа самоуправляемых автомобилей, и способных в будущем специализироваться для проектирования того или иного аспекта таких устройств.
Введение ЯОА и ПЛИС в школьную программу также хорошо привязывается к курсу математики и физики физматшкол — булевская алгебра, арифметические схемы, конечные автоматы.
Заметим, что ЯОА и ПЛИС, несмотря на поверхностное сходство с программированием, используют другие базовые концепции:
Программирование: последовательное исполнение, ветви выбора, циклы, переменные, выражения, массивы (c моделью плоской адресуемой памяти), функции (на основе использования стека), рекурсия.
Проектирование цифровой логики: комбинационный логический элемент; построение из этих элементов облаков комбинационной логики, включающей примитивы выбора с помощью мультиплексоров, а также блоки для реализации арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами; конечный автомат; параллельность операций, иерархия модулей, концепция конвейера (не только для процессора, но и для арифметических блоков).
Далее в конце:
Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.
К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге. Игнорируется возможность интеграции концепций HDL и RTL в программы физматшкол, где их можно было бы привязать к математической логике, теории конечных автоматов и электричеству, подобно тому, как обогатило советские школьные программы введение в середине 1980-х годов элементов программирования.
Я не настолько хорошо разбираюсь в физике, но я неплохо разбираюсь в программировании, особенно встроенных систем, и, поверьте мне, в этой области размер области незнания (вчерашних школьников, причем тех, кто занимается Ардуино, то есть не всех подряд), чудовищен и лично я не понимаю, как и зачем учить их ПЛИС.
http://panchul.com/2013/02/27/microchip_pic32_1/
Вопрос: А почему бы школьникам и младшим студентам не использовать Ардуино-подобную систему разработки MPIDE вместо MPLAB X, используемой в инструкции?
Ответ: MPIDE – небольшая элегантная система для школьников, хоббистов, людей которые не любят читать документацию, а также инженеров, которым нужно смастерить что-то небольшое быстренько. MPLAB X – максимально гибкая профессиональная система, которая поддерживает весь спектр возможностей, предоставляемых PIC32. С моей точки зрения, разница в уровне сложности для начала работы с MPIDE и MPLAB X недостаточно велика, чтобы сначала учить MPIDE, а потом – MPLAB X. Если в конечном итоге человек собирается получить профессиональные навыки, лучше сразу начинать с MPLAB X. Если же целью является скажем научить программированию микроконтроллеров гуманитариев, то лучше использовать MPIDE и на нем оставаться.
При этом следует считаться с фактом — Ардуино понравилось куче преподавателей, они к ним прикипели душой, и вот это так. Да, можно учить еще и STM32 или PIC32, даже научить школьников обращаться с RTOS при желании. Но все это все равно _обычное_программирование_, ничем принципиально не отличающее от программирования на десктопе на Питоне.
А вот цифровая схемотехника — это другая область, с языками, которые строят хардверные структуры, а не цепочки команд, как программы на Си в Ардуино, STM, PIC32, Windows итд.
Причем для понимания как работает тот же айфон, и как его спроектировать, недостаточно научиться встроенному программированию, нужно еще знать и хардверный аспект, по крайней мере видеть, что в этой части вселенной не темная материя с призраками Стива Джобса, а конкретные структуры, выраженные на уровне register transfer level. Это и достигается с помощью внедрения Verilog и FPGA. Кроме этого, детям это нравится.
Ардуино понравилось куче преподавателей, они к ним прикипели душой
Ну еще бы, видимый результат уже на втором занятии и никакой нудятины про регистры, стеки, адресацию памяти :)
все это все равно _обычное_программирование_, ничем принципиально не отличающее от программирования на десктопе на Питоне.
С Ардуиной — да. Надо вывести строку в UART: подключили скетч, вызвали функцию — готово. На десктопе: подключили библиотеку, вызвали функцию — готово. С микроконтролером без высокоуровневых прокладок: сконфигурировали нужные выводы, переключили их на управление периферией, сконфигурировали один из UART-ов, в цикле (для простоты не трогаем прерывания) выплюнули в него строку по одному символу, контролируя окончание передачи каждого.
Ну и вообще в таком случае непонятно зачем дергали Ардуины, они не способствуют развитию навыков ни общего программированию ни программирования микроконтроллеров :) Если у Вас цель научить общему программированию — учите ему на десктопе, нафиг Ардуину. Если цель — научить программированию микроконтроллеров — учите программировать микроконтроллеры, с регистрами, прерываниями, ПДП и т.д., нафиг Ардуину. Вот после этих двух вариантов будет логично дать основы Verilog как альтернативного пути создания автоматов.
Впрочем, до тех пор, пока не требуется продвинутая работа с памятью, на асме не сильно сложнее писать.
А что такого в ASMе МК? Это же не x86 там нет заморочек с защищенным режимом, и программы на десятки мегабайт там пишут не часто. Знал двух программистов МК, один из которых любил писать на ASMе, а другой на Си, и не сказал бы, что скорость разработки и отладки у них кардинально отличалась.
Каждый раз, когда кто-нибудь это пишет, я вспоминаю гневный пост Торвальдса о "неизлечимо поломанном" GCC, который "нельзя выпускать из детского сада". Он конечно, как всегда, в своем репертуаре, и воспринимать его слишком уж серьезно не стоит, но доля правды в его словах есть, и я считаю, что если программист любит ASM и способен решать поставленные перед ним задачи за отведенное время, то ему нет особого смысла связываться с компилятором Си, рискуя нарваться еще и на его дополнительные баги.
но переключаясь с архитектуры на архитектуру — качество кода на асме я обычно теряю. не знаю, как у других…
Да. Но это не моя борьба в текущий момент, хотя я вашей борьбе вполне сочувствую и симпатизирую.
*** Вот после этих двух вариантов будет логично дать основы Verilog как альтернативного пути создания автоматов. ***
Звучит как что-то из мира политики. Типа «не надо давать основы верилога, пока мы не скинули с пьедестала ардуину и не заменили ее нормальному обучению микроконтроллерам с линкер-скриптами и приоритетами прерываний».
Тем самым вы вводите ложную зависимость между очередностью двух на самом деле независимых событий: заменой неприятной вам, но популярной сущности X на более правильную сущность Y — и введением сущности Z. При том, что сущность Z может сосуществовать как с сущностью X, так и с сущностью Y. Даже если промоутеры сущности Z испытывают искреннюю симпатию к вашей борьбе за замену X на Y.
те же контроллеры — это вечные холивары PIC vs AVR, AVR vs STM. внутри STMщиков — Keil vs IAR vs CooCox. и HAL vs SPL… так до обучения дело никогда и не дойдет…
Причем для понимания как работает тот же айфон, и как его спроектировать, недостаточно научиться встроенному программированию, нужно еще знать и хардверный аспект, по крайней мере видеть… конкретные структуры, выраженные на уровне register transfer level. Это и достигается с помощью внедрения Verilog и FPGA.
сравните, какому количеству народа нужно/полезно/интересно «разрабатывать айфон», и какому — «программы под айфон» (ибо сам посебе голый айфон не функциональнее нокии3310)
Вы предлагаете не учить? Если бы в Финляндии и Южной Корее так рассуждали, то там бы не появились Nokia и Samsung. И вообще — детям интересно.
Но автор заслуживает уважения за упорство в продвижении своего видения мира.
Увидев статью, решил посмотреть, что там с вакансиями по этой теме, и у меня сложилось впечатление, что чтобы тебе в жизни когда-нибудь пригодились FPGA, нужно ну очень хотеть заниматься именно этим. В большинстве вакансий где они упоминаются, помимо VHDL и Verilog нужны и более мейнстримовые С, С++, Qt.
Я думаю, что раз взаимосвязь такая тесная, то не обязательно узнавать об FPGA в школе. Если кто-то захочет работать в этой области, у него будет время узнать об этом в вузе, так же как о других подобных специализациях, вроде DSP или PLC. Последние вообще из другой отрасли но там ни менее практически на любой "программистской" специальности дают возможность потрогать все это, чтобы дать возможность осознанно определиться со специализацией. Побуждать же к чему-то конкретному школьников считаю не самым верным решением, особенно при том, что они нередко не очень хорошо представляют как работают триггер и счетчик, какие уж там FPGA.
То, что вы мне сейчас говорите про FPGA/Verilog, в 1984 году говорили про обучение в школе программированию.
Спасибо за то, что делаете эту работу. Что бы ни говорили скептики, заполнение логической дыры между булевой алгеброй и Core i7 — очень важно. Без знакомства с этими вещами народ, как правило, не имеет никакого представления о том, где там внутри компа сидит знаменитая машина Тьюринга, а цифровой автомат… ну, это, наверно, что-то про дистанционное управление оружием :))
Удачи!
P.S. Ваш стронг рашн прононсиэйшн — просто чудо. Не избавляйтесь от него.
Я так и не понял каким боком тут ардуино.
Взял видеоинтервью у вице-президента Ардуино и обсудил с ней преподавание школьникам ПЛИС-ов / FPGA и языка Verilog