Pull to refresh

Comments 206

так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены, то пора делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog

Как-то это выглядит немного странно, на мой взгляд. Учитывая, что в подавляющем большинстве случаев «программирование микроконтроллеров с помощью Ардуино» сводится к поиску в инете готовых скетчей, назвать изучение Verilog следующим шагом — слишком оптимистично, мягко говоря.
Да и связь между микроконтроллерами и FPGA весьма отдаленная, все же это даже идеологически разные вещи. Скорее, это должно звучать как-то так: «А давайте кроме программирования микроконтроллеров с помощью Ардуино будем учить еще и программированию FPGA на Verilog».
Я совершенно согласен с вами, что обучение программированию микроконтроллеров (встроенных процессоров) и проектирование схемотехники конфигурируемой в FPGA — это совершенно ортогональные вещи, как пение и стихосложение. Но чтобы написать песню (создать систему на кристалле с аппаратной и программной частью) нужно представлять обе стороны. Даже если человек в будущем будет специализироваться на чем-то одном.

Но чтобы написать песню (создать систему на кристалле с аппаратной и программной частью) нужно представлять обе стороны.

Для этой задачи нужно иметь представление о множестве сторон, из которых Ардуины и Verilog — совсем не в начале списка :)
Нет, я не имею ничего против обучения различным аспектам электроники, но почему бы не сделать после изучения Ардуин действительно следующий шаг — реальное программирования современных микроконтроллеров, например тех же STM. А то сейчас это похоже на «запускать бумажные самолетики научились, делаем следующий шаг — переходим к изучению пилотирования авиалайнеров» :)
но почему бы не сделать после изучения Ардуин действительно следующий шаг — реальное программирования современных микроконтроллеров, например тех же STM


Потому что следующий после школы шаг уже называется «университет», а в тексте речь о школьном образовании?..

переходим к изучению пилотирования авиалайнеров


Не вижу, чем программирование ПЛИС чем-то принципиально сложнее программирования того же AVR. Это другая парадигма, и задача хорошего школьного образования — дать представление о том, что эта парадигма существует и как она выглядит.

Это не значит, что на выходе из школы получатся профессиональные разработчики ПЛИС (точно так же, как на выходе из школы не получаются профессиональные биологи и физики, хотя биологию и физику там преподают).
если речь идет о дополнительном образовании в школьные годы — ну, почему бы и нет? кому-то интересны ардуины и моргающие светодиоды. кому-то — ездящие по правилам железяки. кто-то вообще интересуется радиоволнами или звуком. все это — электроника. в этом контексте дать школьникам (лицам школьного возраста) поиграться с микроконтроллерами или FPGA — почему бы и нет (как вариант — и с контроллерами систем пром. автоматизации).
чтоб поступая в университет, человек понимал «область»
Сначала дополнительное и физмат-школы, а там посмотрим.
ну а чего смотреть-то? ИТ — это само по себе специфическая вещь, нужные не всем. а профессиональное программирование и проектирование электроники — их маленькие пожмножества. а уж проектирование процессоров/систем с помощью языков описаний — это единицы. будет отрасль — будут и кадры.
А какие-то школьные предметы, преподающиеся после шестого класса, нужны всем? Ну, кроме физкультуры?
Давайте утрировать до конца — учить нужно только базовому письму и чтению, все остальное — лишнее :)
до какой глубины нужно изучать физику, химию, биологию? или, упасигосподи®, историю с обществознанием и прочие культурологии? давайте рисованию учить до уровня института Сурикова, пению до уровня Гнесинки? ну и физкультуре не менее чем до мастера спорта по 6-7 видам?
Вы как-нибудь на досуге определитесь, вы мне тезис «не надо изучать совсем, потому что нужно не всем» доказывать собираетесь или же «не надо изучать слишком глубоко, потому что нужно не всем», а потом приходите.
А что в этом плохого? Гостью из будущего помните?
плохого — то, что нельзя требовать более-менее серьезного изучения всего от всех. не хвати ни времени, ни способностей (да и преподавателей. ибо в школе за 5 лет преподавания физики училка продемонстрировала три или четыре опыта… зато формулы учат. и школа, между прочим, еще «на хорошем счету»)
Вот как ни странно — «общая физика». Тем более что она — реально вечная, эти знания за жизнь человека не устаревают, в отличие от прорвы прочик в т.ч. школьных… Впрочем увы — то что, и как преподают в школе — большей частью действительно нереальный сюр отрванный ото всего… а потом зимой трубы лопаются, потому что народ в массе своей о том, что вода при замерзании расширяется, а коэффициент трения резины по асфальту и по льду — существенно разные — заново учится на собственном опыте, причём не в «физических терминах» «в голове» а каждый строит себе в голове некую чудесатую модель из набора частностей, хотя в школе им всем давали готовую.

Недавно аж целый профессор-метеоролог выдал на всю страну в эфир, что весной снег на крыше намокает и его вес увеличивается...
Э-ээхххх…
Да все предметы нужны. чтобы понимать, что мир велИк, и областей знаний много. даже таких непонятных мне, как «литературоведенье» и «мировая художественная культура».
Абсолютное большинство присутствующих не только не сможет с первой попытки решить какую-нибудь задачку из школьного учебника общей физики, но и ни разу в жизни не сталкивалось с необходимостью её решать.

Поэтому повторю тезис: задача школы — не давать «необходимые в жизни знания». Задача школы — давать понимание о том, как устроен мир и из чего он в общем и целом состоит, чтобы ребёнок дальше сам мог выбрать интересующую его область и получать в ней уже действительно необходимые ему знания.
с тезисом — абсолютно согласен. но изучение fpga в данном случае — это аналог «изучения нуклеиновых кислот» в школьном курсе химии. или «тернарной проблемы Гольдбаха» в школьном курсе математики…

для дополнительного внешкольного образования/физматшкол (а уж тем более — специализированных детских лагерей) — самое то, что надо
Во-первых, в тексте заметки про физматшколы сказано прямо.

Во-вторых, я не вижу, чем FPGA принципиально сложнее ардуины. На том и другом светодиодом помигать можно за сравнимое время.
отличаются — приложением. грубо говоря, водителей нужно больше, чем автомехаников. а автомехаников — гораздо больше, чем разработчиков автомобильных двигателей. все они научатся ездить н амашинах за одинаковое время. и даже заправляться. и стекло протирать. а дальше появляются различия.
На колу мочало, начинай сначала.

А биологов, географов, математиков и лингвистов вообще практически нисколько не нужно.

Из этого, однако, почему-то не следует, что в школе надо учить вождению автомобиля и не надо — биологии и географии.

Потому что не надо путать школу с ПТУ. Школа не готовит «востребованных обществом специалистов».
ну не нужно приписывать мне то, чего я не говорил. и биологи нужны, и географы, и даже эти… простиисторики… и цель школы — показать, что есть такие отрасли знаний. с демонстрацией микроэлектроники справляется (должна, по крайней мере) физика.
Вы почему-то ненужность ПЛИС обосновываете тем, что «программист ПЛИС» не востребован как профессия, а нужность биологии никак в вашей же голове с профессией «биолог» не связывается.

И если уж на то пошло, то физика может справиться с демонстрацией чего угодно. Что, однако, не делает ненужной даже химию — которая, конечно, по своей сути в чистом виде небольшой подраздел физики.
биологов нужно чуть больше, чем разработчиков ПЛИС…
FPGA — это дорого, сложно, узко.
«Поморгать светодиодом» можно на чём угодно. Начиная от голых реле и заканчивая нейронными сетями.
А вот какую-нибудь домашнюю метеостанцию делать на FPGA — себя не уважать. Для ПЛИС есть совершенно определённые узкоспециализированные сектора, где нужны их преимущества.
это аналог «изучения нуклеиновых кислот» в школьном курсе химии
Вообще-то, их изучают. У нас было, по крайней мере.
«проходят,» а не «изучают»
вообще, нуклеиновые кислоты я приплел как цитату из «вид с высоты» Азимова:
Вид с высоты
«В юности я черпал знания в публичных библиотеках. По неопытности читал все без разбора, беря книги с полок подряд — от первой до последней.Обладая досадно хорошей памятью, я приобрел таким образом множество сведений, которые потом безуспешно старался забыть. Однако одним из ценных следствий моего беспорядочного чтения было то, что я полюбил научную литературу сильнее беллетристики. Я очень увлекался книгами по истории, но больше всего мне нравилось изучать труды по естественным и точным наукам.В средней школе я еще делил свои привязанности между историей и точными науками, а при поступлении в колледж я с головой окунулся в науку.В колледже я узнал, что среди главных научных дисциплин мне нужно выбрать «главнейшую» для меня самого. Я заигрывал с зоологией, а потом, на втором курсе, окончательно остановился на химии. Это означало, что мне всего-навсего надо было слушать по одному курсу химии в каждом семестре. Но, поступив в аспирантуру, я понял, что химия химии рознь; для подготовки диссертации надо было выбрать из всех разделов химии один.Постепенно справившись с некоторой присущей мне инертностью, я наконец занялся биохимическими исследованиями. За работу в этой области я получил звание доктора философии и без промедления приступил к преподаванию биохимии в медицинском институте.Но даже эта область знаний оказалась слишком обширной… От беспорядочного чтения — к научной литературе, затем к науке, к химии, к биохимии, и это было еще не все. Занимаясь научной работой, я должен был ограничиться участком в одном из уголков сада — биохимии — и начал трудиться над нуклеиновыми кислотами…»©
В школе все проходят и ничего не изучают, если уж так рассуждать))
изучают, но до определенного уровня. о том, что нклеиновые кислоты есть — знают (в лучшем случае, конечно — но по программе «должны знать»). глубже — вряд ли. а ведь отдельные люди изучают эти самые нуклеиновые кислоты всю жизнь… и понимают, что знают о них мало…
Можно заменить «нуклеиновые кислоты» на «натуральные числа» или на что угодно еще, и смысл утверждения не изменится.
Потому что следующий после школы шаг уже называется «университет», а в тексте речь о школьном образовании?..

Школьному образованию как раз ближе программирование микроконтроллеров. У них гораздо более широкая сфера применения, гораздо выше шанс, что может пригодиться в жизни.
Не вижу, чем программирование ПЛИС чем-то принципиально сложнее программирования того же AVR.

Оно не принципиально сложнее, а принципиально другое. Ну и речь идет не о программировании AVR, а о программировании Ардуин. И я не знаю как в этом конкретном случае, но в своей массе программирование Ардуин изучается на уровне «найти скетч, вставить его, нажать „проверить“, нажать „загрузить“». Как только что-то идет не по сценарию (скетч не работает как надо, не грузится, компилятор выдает ошибки) — паника и вопросы на форумы. То есть умение программировать Ардуины и умение программировать AVR — в большинстве своем отличаются как умение разогреть готовый обед в микроволновке и умение этот обед приготовить из исходных продуктов.
задача хорошего школьного образования — дать представление о том, что эта парадигма существует и как она выглядит.

Вообще, задача школьного образования должна, на мой взгляд, ограничиться просто общими принципами — что это такое и в чем отличие от микроконтроллеров. Если вообще должна задевать эту тему в рамках общей программы.
У них гораздо более широкая сфера применения, гораздо выше шанс, что может пригодиться в жизни


Вы путаете школьное образование со специальным техническим, оно же ПТУ. Навыки, с которыми можно трудоустроиться слесарем третьего разряда сразу по выпуску из учебного заведения, даёт ПТУ.

Школа даёт общее, всеохватывающее представление об окружающем мире, на основании которого школьник может в этом мире ориентироваться — в том числе выбирать дальнейшее направление обучения. Сами по себе биология, физика, география даже в том объёме, в котором их даёт школа, 9 из 10 школьников в жизни никогда не пригодятся — да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.

Программирование в школе преподаётся штатно, на x86. Программирование микроконтроллеров — уже в некоторых школах тоже. Если там будут даваться ещё и ПЛИС — это замечательно, так как ПЛИС — это отличная от микроконтроллеров парадигма.

что это такое и в чем отличие от микроконтроллеров


Это будет отписка для галочки, а не преподавание.
«программирование в школе» — не «на x86», а «на паскале». в лучшем случае. в лицеях и особо продвинутых школах — сишарп и джава.
по наблюдениям (сын сейчас заканчивает школу) освоили программирование — двое из класса.
Вы путаете школьное образование со специальным техническим

Мне кажется, что это как раз Вы путаете. Выпускнику средней школы совершенно не нужно в обязательном порядке знать ни программирование микроконтроллеров, ни программирование FPGA, это уже специальное или дополнительное образование. Максимум что школьникам могут давать в обязательном образовании — это базовые понятия.
да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.

Это да, невостребованность знания русского языка очень заметна в русскоязычном интернете :)
Ему и биологию с географией знать не надо, вообще говоря. Более того, знание о том, как процессор работает, ему в современной жизни потребуется скорее, чем знаний отличий митоза от мейоза или название столицы Гондураса.

Однако это не является поводом вычеркнуть их из школьной программы, оставив в ней одну физкультуру.
Биологию с географией, как и остальные общие предметы, ему знать надо. FPGA — нет, как и микроконтроллеры, строительство, юриспруденцию, хирургию, судовождение, водолазное дело и т.д. и т.п.
А зачем надо знать биологию? Можете ли вы, не заглядывая в гугль, написать отличие мейоза от митоза, вы же знаете биологию? Перечислить страны, с которыми граничит Перу, вы же знаете географию?

А программирование почему тогда не надо знать? Стоит ли его вообще исключить из школьной программы?
Можете ли вы, не заглядывая в гугль, написать отличие мейоза от митоза, вы же знаете биологию?

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

Тоже нет, но по крайней мере я знаю где это и легко могу найти эти граничные с Перу страны.
А программирование почему тогда не надо знать?

Откуда я знаю почему. Я про программирование ничего не писал.
То есть ни биологию, ни географию вам, вопреки вашему же утвреждению, знать в жизни не требуется — и вы их, собственно, и не знаете.
Передергивания, высосанные из пальца выводы… У меня складывается впечатление, что я общаюсь с троллем. Поэтому продолжайте без меня :)
Вы путаете школьное образование со специальным техническим, оно же ПТУ. Навыки, с которыми можно трудоустроиться слесарем третьего разряда сразу по выпуску из учебного заведения, даёт ПТУ.

Во первых ПТУ сейчас уже НЕТ, а есть колледжи (аля аналог техникумов ).
Школа даёт общее, всеохватывающее представление об окружающем мире, на основании которого школьник может в этом мире ориентироваться — в том числе выбирать дальнейшее направление обучения.

Во вторых, данное, современная отечественная школа не дает и не может дать (данное говорю как практик).
Текущие задачи средних образовательных учреждений как и задачи у бизнес структур одинаковые, зарабатывание денег. Администрации ОУ прежде всего нужно «поголовье» (за это оплата) и успешная итоговая аттестация учащихся (престиж и прочее) и ВСЕ!
Полностью согласен с Mikeware, не о каком программировании, а тем более микроконтроллерах и FPGA речи идти не может.
Если что и есть где то только силами энтузиастов и в кружках дополнительного образования (Дома творчества и прочее).
В третьих, с нашим очередным министром образования и ее идеями школьники не то что информатику, а просто в старшей школе (10-11 классы) учится перестанут.
Ну и последнее, по себе скажу (веду кружок) желающих работать и осваивать новые знания сейчас среди детей ЕДИНИЦЫ!
Сами по себе биология, физика, география даже в том объёме, в котором их даёт школа, 9 из 10 школьников в жизни никогда не пригодятся — да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.

Т.е. 9 из 10 человек никогда не посадят, прости господи, укроп на даче (биология), не починят утюг (физика) и не уедут из своего родного города (география)?

Программирование в школе преподаётся штатно, на x86.

Вы какую-то конкретную школу имели в виду?
Т.е. 9 из 10 человек никогда не посадят, прости господи, укроп на даче (биология), не починят утюг (физика) и не уедут из своего родного города (география)?


На уроках биологии не рассказывают, как сажать укроп, на уроках физики — как чинить утюг, а на уроках географии — как доехать до соседнего города. И да, 9 из 10 человек не смогут вам сообщить, к какому семейству относится укроп, какова зависимость мощности нагревателя от напряжения на нём и каков климат в Перу — хотя это всё как раз на соответствующих уроках рассказывают.
Полученных школьных знаний достаточно, чтобы самому понять как сажать/чинить/доехать. Проверено на себе еще в доинтернетовскую эпоху, когда нельзя было вот так просто загуглить, а приобретение книги «Юный радиолюбитель» было редкой удачей. И на школьниках 2000-х. Смогли. Три из трех. Утюг.

Все-таки у нас с вами какие-то разные школы рядом находятся. В вашей программирование на х86, в моей — просто физика и биология.
STM — это точно такое же программирование, как и Ардуино, только в Ардуино GCC toolchain припрятана и нет RTOS-ов (только обработка прерывание без переключения контекста), а в STM не припрятана (и можно делать переключение процессов/задач).

Представим себе программирование Ардуино или STM как вождение машины — от пересаживания с Тоеты на Хонду вы не изучите, как работает ее двигатель и коробка передач, даже если вы будете очень много водить. А вот с FPGA — изучите.

На FPGA вы можете сконструировать свой процессор, в том числе аналог процессорного ядра AVR в Ардуино или Cortex-M в STM. Никакое количество программирования эту способность вам не даст.

Вопрос о том, что получится, если дать действительно другой взгляд, не привязанный намертво к концепции фон-нейманновской машины в программировании.
STM — это точно такое же программирование, как и Ардуино

Нет, Вы не поняли. Ардуино позволяет вообще ничего не знать о микроконтроллере, о том как работает его периферия и как ее настраивать, о прерываниях и их роли и т.д. Это складывание готовых кубиков. И вот следующим шагом для желающих было бы как раз умение работать с микроконтроллерами — научиться программировать их не готовыми блоками «вставил-нажал кнопку-заработало», а именно на уровне самих микроконтроллеров и их периферии. Пусть не STM, пусть те же AVR (хотя не вижу смысла изучать устаревшее), но именно программирование микроконтроллеров, а не сборка готовых скетчей.
А школьникам это зачем надо? Ну то есть какие знания о принципах устройства окружающего мира им принесёт тщательное изучение RM0008?

Ковыряние в регистрах конкретной железки — это занятие для посетителей какого-нибудь радиокружка. В школе оно уместно не более, чем умение самостоятельно рассчитать DC/DC — хотя в принципе вон там на фоточках эти DC/DC на отладках есть.

P.S. И, кстати, STM32 тоже позволяет практически ничего не знать о самом микроконтроллере. Развернул RTOS — и вперёд.
Ну да, изучение FPGA гораздо более уместно, чем умение рассчитать DC/DC :)
Вообще да. Это я вам как человек, умеющий делать обе вещи, говорю.
UFO just landed and posted this here
Во первых кое какую периферию настраивать в ардуино всё таки надо

Это не настраивание периферии микроконтролера :)
Во вторых у STM есть замечательная утилита STM32CUBEmx, в которой можно многое настроить просто тыкая галочки.

Я в курсе этой утилиты.
UFO just landed and posted this here
Это использование одного из «кубиков» Ардуины. По сути то же, что и галочки в CUBEmx.
UFO just landed and posted this here
Это вызов функции из библиотеки Ардуины.
Настраивание любой периферии производится через регистры микроконтроллера. Умея делать это на одном микроконтроллере, Вы легко сможете сделать это и на любом другом. Умея же вызывать библиотечную функцию, Вы сможете вызывать ее только там где она есть.
UFO just landed and posted this here
Так как регистры могут быть разные. Как и функции, только функции легче читаются.
Даташиты, в отличии от высокоуровневого API, есть всегда.
UFO just landed and posted this here
UFO just landed and posted this here
И что, я данной функцией не настроил порт на выход?

Нет, Вы вызвали функцию, и можете только надеяться, что она внесла правильные значения в правильные регистры. А если она сделала это неправильно, то без знания микроконтроллера Вы приплыли.
И если я умею через регистры настраивать у периферию у одного микроконтроллера, то не всегда я настрою легко в любом другом. Так как регистры могут быть разные.

Еще раз поясняю, последний. Если Вы знаете как настраивается периферия микроконтроллера (а не вызывается чья-то функция), то при переходе на другой микроконтроллер Вы знаете что делать — найти в документации отвечающие за эту периферию регистры и внести в них нужные значения. А если Вы знаете только функцию, то при переходе на другой микроконтроллер Вы становитесь совершенно беспомощным пока не найдется написанная кем-то нужная функция.
Как и функции, только функции легче читаются.

Вот только регистры у микроконтроллеров есть всегда, в любой среде программирования, в любой момент. А функцию еще должен кто-то написать чтобы ею можно было воспользоваться.
От тех же ардуинщиков то и дело на форумах появляются посты «скачал скетч, а он не работает, помогите». Найти проблему для них уже непосильная задача, потому что они даже не представляют как на самом деле все работает в микроконтроллере.
И еще одно, тоже еще раз и тоже последний: я не против такого подхода в любительской практике. Но знание Ардуин вовсе не означает знания микроконтроллеров.
UFO just landed and posted this here
с другой стороны, в ардуине библиотечным вызовом я сконфигурирую вывод и в «расово верной» ардуине, и в ее клонах на STM32. тогда как делать это «ручками» для AVR и для STM — это две большие разницы.
кому-то нужно одно (плевать на то, какой кристалл), кому-то другое (выжать из кристалла все, что можно)
В принципе согласен, хотя разницы эти не такие уж большие :)
«позволяет» и «заставляет» — разные вещи. тот, кому интересно — может лезть вглубь ардуины, до «голого кристалла».
почему вы считаете, что следующий шаг — это именно «программирование микроконтроллеров»? а может, следующий шаг — подключение к ардуине силового оборудования, или разработка новых датчиков? зачем вообще делать «шаг вглубь» (в любую сторону), если ардуина позволяет реализовать потребности?
вы же после получения прав не сделали «следующий шаг» — получения удостоверения автомеханика (а затем, и разработчика двигателей)? наверное, нужно уметь вовремя остановиться…
Я не говорю, что это обязательно, я говорю, что после освоения Ардуин «делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog» не выглядит логичным. Гораздо более логичным будет более подробное изучение микроконтроллеров без высокоуровневых кубиков Ардуины. И повторюсь — для желающих.
ну, был у нас учебный курс проектирования систем из секционников. т.е. теоретически мы могли создать свой процесссор (примерно то, что сделали в Буране). только я не слышал о том, чтоб на секционниках что-то делали массово.
учить миллионы школьников FPGA, чтоб на выходе получить пару разработчиков — несколько расточительно.
ну а те, кому интересно — вполне могут и сами к этому прийти, если будут знать о существовании. например, из Ваших статей/видеокурсов (или как это модное направление сейчас называется?)
программирование ардуино среди школьников — все-таки не настолько массовое. и даже если оно массовое — переход к FPGA и Verilog не выглядит естественно…
вообще, как олдскульник — я рад такой инициативе. но здраво размышляя, возникает вопрос — а оно массово — нужно? и самим этим школьникам, чисто практически, и стране?
Для школьников: писание программного кода на любом языке типа C, Паскаля или Питона вносит в подсознание парадигму фон-нейманновской машины (примерно как советский школьный дневник навсегда впихивал в подсознание как должна выглядеть неделя), потом на всю жизнь вычисление будет представляться как цепочки команд, с if-ами, циклами, в крайнем случае – как несколько цепочек таких команд, идущих параллельно.

Это вызывает сильный когнитивный диссонанс, когда человек сталкивается с вычислениями на основе конвейерной обработки данных. При попытке кодировать такое на верилоге программист с опытом сначала всячески норовит представить это в интуитивно привычной (но неработющей форме).

Поэтому было бы интересно поселить в голове у молодого человека две картины вычислительного устройства: программирование (на основе ментальной модели фон-нейманномской машины) и цифровой дизайн на уровне регистровых передач (с концепциями конечного автомата и конвейера).

В первой ментальной модели (программиста) есть такие крипичики как последовательное исполнение, ветви выбора, переменные, выражения, модель плоской адресуемой памяти, циклы, функции (на основе использования стека), рекурсия.

Во второй ментальной модели (электронщика, разработчика логики) есть концепции логического элемента и построенных на них облаков комбинационной логики, выбора с помощью мультиплексора и арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами/циклами; конечный автомат; параллельность операций, для самых продвинутых — концепция конвейера (не только для процессора, но и для арифметических блоков – см. пример с конвейерной реализацией ).

Про конечные автоматы и конвейеры продвинутым учащимся физматшкол знать может довольно интересно. Для студентов-электронщиков – это необходимая часть профессии. Для разработчиков систем из хардвера и софтвера – крайне полезно, чтобы понимать, когда имеет смысл применять хардвер, когда – софтвер.
UFO just landed and posted this here
Я автор раннего c-to-verilog компилятора и встречался по этому поводу с Xilinx аж в 1997 году. Все эти c-to-verilog тулы имеют сильные ограничения. Попробуйте написать на нем конвейерный процессор с stalls и forwarding. RTL (register transfer level) еще будет жить долго. Ему предсказывали смерть от c-to-verilog уже 25 лет.
UFO just landed and posted this here
Я с российскими представителями макрогруп и xilinx тоже знаком. И даже людей, у которых Xilinx купил этот HLS видел на выствке. Если вы мне покажите, как на этом туле написать конвейерный процессор с форвардингом, я изучу его внимательнее. Проблема в том, что я тулов этой категории видел много, они обещали одно и то же (все показывали синтез какого-нибудь фильтра), но процессоры до сих пишутся на верилоге.
UFO just landed and posted this here
По мне, так это не более, чем костыль для тех, кому надо по-быстрому состряпать что-то несложное на FPGA :) Но никак не следующий шаг в профессиональном применении.
UFO just landed and posted this here
Про то, что у нас пользовательские приложения на десктопах все будут на каком-нибудь javascript писаться и в браузере из облака выполняться, тоже много кто говорил.
UFO just landed and posted this here
Потому что C на 99,99 % покрывает функциональные возможности asm, проигрывая в производительности, но резко выигрывая в трудоёмкости.

Но C и железо — это ортогональные направления. Довести C до полной функциональности Verilog можно разве что после долгой обработки напильником, но по пути потеряется весь смысл использования C для описания аппаратуры — а он в том, что программистов на C на рынке труда как говна за баней.
Это, возможно, сильнее продвинет FPGA в массы, как Ардуино продвинула микроконтроллеры, но не будет востребовано в профессиональной сфере :)
Это, наверное, можно сравнить с визуальным программированием микроконтроллеров, когда программа не пишется на Си, а составляется из кубиков-примитивов в графическом интерфейсе. Это просто, доступно, но никак не гибко и ничего серьезного на этом не сделаешь. Язык Си сам по себе очень чужд идеологии FPGA, и его применение в этой области — костыль :)
UFO just landed and posted this here
а потребности в «программистах vhdl/verilog»?
UFO just landed and posted this here
ткунлся сейчас на хахару — программистов ФПГА надо навскидку 2 — на 35 тыр, и на 80. и тут же висят вакансии одинэсников «от 100» и «от 110».
вот вам и потребности…
UFO just landed and posted this here
одиэсник одинэснику рознь…
как, впрочем, и город городу.
и если в москве еще можно как-то сравнивать, то в нижнежопинске…
UFO just landed and posted this here
FPGA — это плацдарм ко всему проектированию цифровых микросхем. В Южной Корее тоже было мало разработчиков на Verilog и VHDL, и если бы там все рассуждали как вы, то смартфоны Samsung Galaxy там бы не появились.
Юрий, да я не спорю о преимущистваг ПЛИС и ЯОА.
Я спорю о их месте в школьном образовании.
ну и насчет Южной Кореи: самсунг галакси появился не из-за того, что там были разработчики. и автомобили дэу и хундай — тоже. и ЛыЖы тоже. они появились там потому, что там была бизнес-среда, которая заставляла создавать продукты. а разработчиков они уже нашли (купили, переманили, выростили).
Не продвинет. FPGA тупо дорого.
Благодаря китайцам, ныне не так уж и дорого :)
В сравнении с MCU? Ну фиииг знает.
Не в сравнении, в абсолютных цифрах :) Их нет смысла сравнивать, они для разных задач.
Факт, но тогда все еще хуже — задач для FPGA довольно мало пока.
Главная задача для FPGA с моей колокольни — это быть наглядным способом учить будущих проектировщиков ASIC-ов и систем, а также иллюстрировать математические концепции школьникам олимпиадного типа. Масштаб их применений в массовых устройствах менее важен.

Если нужно, можно всегда упоминать «А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?
Я помню все это из прошлых дискуссий с вами))
В принципе, вы делаете хорошее дело, и я уважаю ваш энтузиазм. Но в то же время я вижу проблему в массовом продвижении вещей, которые невозможно массово использовать. Это как предлагать минидомну в каждую школу под лозунгом «стране нужны металлурги».
Ну я же не просто предлагаю — меня приглашают. Значит кому-то нужна и минидомна. Иначе бы я не выезжал из Саннивейл, где я ваяю кусочек MIPS I6500 — технически на порядки более редкая, хитрая и массовая деятельность чем все эти образовательные программы (про то, чему я учусь у своих коллег, в учебниках вообще не пишут, а наш клиент — Mobileye, сейчас часть Intel-а, чип для самоуправляемого автомобиля EyeQ5).
«А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?

Для того, что бы гиганты вроде Microsoft, FaceBook, Google, Amazon и тп. могли эти встроенные в процессоры блоки конфигурировать под свои задачи. Но, столько разработчиков фпга не нужно, сколько «обычных» программистов.

Для общепромышленных задач фпга тоже не сильно подходит.

Фпга программист — это как физик ядерщик, навеки вечные привязан к АЭС, и вероятно, к какой то определенной.
Их(фпга программистов) много не нужно, поэтому работодатели могут диктовать абсолютно любые условия.
Вы просто не очень понимаете, как FPGA вписывается в общую картину. Большинство микросхем в мире — это ASIC, а FPGA используются для прототипирования, образования и малых серий. См. в частности:

https://habrahabr.ru/post/317558/



Я прошу прощения, может чего не знаю: какие такие FPGA делают китайцы?
Китайцы делают платки с FPGA по цене меньше, чем тут стоит один чип — https://www.aliexpress.com/item/Altera-FPGA-Board-ALTERA-Cyclone-IV-EP4CE10-Board-FPGA-Development-Kit-USB-Blaster-Abundant-Hardware-Resource/32778903912.html
Я вам больше скажу. Тот же Terasic продает официальные девелопер киты Альтеры (теперь уже Интел) по цене, дешевле чем чипы ПЛИС в интернет магазине альтеры.
Как они это делают?
Это такая стратегия. Ученики получают все дешево (часто ниже себестоимости), а потом при выходе в продакшен все по полной оплачивается=) Именно потому поиграться на макетке может и правда выгодно и удобно, а запилить свой девайс уже фиг знает — как бы не пришлось макетки разбирать на детали для мелких партий.
Если-бы, но увы…
… есть просто вторичный рынок FPGA, наковырянных из телеком оборудования
дело в другом: а оно школьникам нужно? тем более — «массово»?
я полностью согласен с Вами, что знатьи понимать цифроую схемотехнику программисту очень полезно. но не необходимо.
показывать школьникам «все многообразие мира» тоже нужно. но для этого нужна определенная база, и интерес опять же к электронике. Программистов сейчас нужно гораздо больше, чем электроншиков. а системщиков — гораздо меньше, чем электронщиков.

Ну а то, что этот курс необходим студентам «вычислительных специальностей» и интересен физматшкольникам — я согласен полностью. Но это — не «массы», это единицы процентов от «ардуинщиков».

кстати, по опыту — школьники конечные автоматы прекрасно усваивают, и применяют на ардуинах.
Детям в Киеве понравилось делать кодовый замок на верилоге (простой конечный автомат). Раз нравится — можно использовать. Опробуем теперь в Новосибирске.

И ардуинный 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

функциональные языки — они не являются «цепочкой инструкций».
и каждой задаче нужен свой инструмент.
я не вижу ничего плохого, если кто-то будет знать еще и верилог, но не вижу ничего хорошего, если он будет знать только верилог.
Я в курсе про lazy evaluation в функциональных языках. Но в конечном итоге они все равно или транслируются в цепочки инструкций, или интерпретируются цепочками инструкций. А вот Verilog становится схемой, которая является более общим случаем, чем фон-нейманновская машина.
Нет принципиальной проблемы транслировать верилог в цепочку инструкций.
Да, именно так верилог и симулируется. Но его основное использование — это логический синтез схем, и именно эта технология привела к тому, что у нас сейчас есть айфоны. Без нее их бы не было, так как предыдущая технология 1980-х годов (рисование схем мышкой на экране) не обеспечивала достаточно высокой производительности разработчика микросхем. Именно введение синтеза верилога и VHDL как мейнстрима электронной индустрии 25 с лишним лет назад привело к появлению современных высокоинтегрированных чипов.
Я это написал только потому, что вы при сравнении языков делаете упор на то, во что они транслируются. Я считаю этот подход неверным — можно транслировать все во все при желании. Историческую роль верилога, имхо, можно связать с тем, что тогда не было возможности строить описания схем иначе. Сейчас я, например, не вижу принципиальной проблемы синтезировать схемы на основе декларативной математики типа матлабовской (это очень образно пример).
Тут мы заходим в область, которая называется «высокоуровневый синтез». Успеха на этом пути еще никто не достиг, хотя последние 25 лет я слышал не менее 25 презентаций о том, что скоро верилогу конец настанет (включая свою собственную — https://en.wikipedia.org/wiki/C_Level_Design. Т.е. пока тот же Apple для айфонов и Tesla для тесел используют верилог. Например я еще не видел описанный в декларативном виде конвейерный процессор с stalls и forwarding, даже совсем простой.
Ну 25 лет назад обьективно не было возможностей, и это все было в лучшем случае умозрительными концепциями (имхо). Сейчас это больше вопрос привыеч и востребованности (имхо). То есть, новых инструментов (пока) нет, а специалистов по старым (пока) много. Не могу сказать, что я очень хорош в этой сфере, но думаю, что следующие лет 5-10 будет сохраняться равновесное состояние, а потом верилог подвинется, как раньше подвинулись плюсы.

То есть, я не могу сказать, что вы не правы, но и согласиться, что за верилогом будущее, тоже не могу)) И разумеется, я только за обучение людей, которые хотят учиться, безотносительно того, о каких технологиях речь)
*** но думаю, что следующие лет 5-10 будет сохраняться равновесное состояние, а потом верилог подвинется, как раньше подвинулись плюсы ***

Тут дело к сожалению не в ограниченности инструментов. Тут дело в отсутствии даже идеи методологии, которая бы могла заменить (на достаточно широком спектре дизайнов) register-transfer-level (RTL) methodology (используемой вместе с Verilog и VHDL). Типичные демо тулов для высокоуровневого синтеза уже 25 лет демонстрируют, как хорошо они умеют синтезировать цифровой фильтр, но ни один не может придумать, как сделать forwarding/bypass в процессоре — или даже как просто выразить это в языке, не опускаясь на RTL методологию.

Поэтому то, что вы сказали — это просто вера по ложной аналогии с историями в софтвере.
*** но не вижу ничего хорошего, если он будет знать только верилог. ***

Я ни в коем случае не предлагаю учить _только_ верилог. Знать верилог без знания одного из императивных языков программирования (C, Pascal, Java, Python) — это тоже неправильно. Для корректной картины инженерного мира нужны обе стороны хардверно-софтверной системы (по крайней мере в физматшколах для инженерно-ориентированных детей).
Может проще и правильнее заменить C/паскаль/питон на Haskell?
Дейкстра предлаал начинать обучение программированию с функциональных языков…
вопрос в том, надо ли это «в массах», и «кто это будет делать» (ибо школьные учителя… ну, сами понимаете...)
Как раз «в массах» очень надо прививать использование надежных языков. Начинающие или не прфессиональные программисты могут делать много ошибок, от которых защищают хорошая система типов и отсутсвие неявного состояния. А их код используется все чаще.
С учителями пороблема…
Это вызывает сильный когнитивный диссонанс, когда человек сталкивается с вычислениями на основе конвейерной обработки данных
И подавляющее большинство людей в жизни с ними не столкнутся.
Про конечные автоматы и конвейеры продвинутым учащимся физматшкол знать может довольно интересно
А может и не быть.
Подавляющее большинство людей в жизни и с рекурсией не столкнутся. Ее вы тоже предлагаете не учить?
значительная часть людей в жизни сталкивается с изменениями в собственных психических процессах. Давайте в школе учить для начала моноаминовую гипотезу? а затем и дальнейшее развитие?
у всех людей (ну, почти) в жизни будут дети… давайте учить генетику человека полностью (чтоб могли предсказывать вероятность генетических заболеваний)? а заодно и педагогику? Ну и т.д., до абсурда…
Мне все-таки интересно, как вы ответите на прямой вопрос о рекурсии. Рекурсию в школе изучать? Вы можете ответить «да» или «нет»? (В зависимость от ответа «да» или «нет», у меня будут сразу два другие вопроса)
Концепция рекурсии важна в математике. В частности — в вычислительных методах. На любой более/менее негуманитарной специальности нужно иметь хотя бы минимальное представление о ней.
А как же школьники СССР жили до 1985 года без рекурсии? (Программирование в школах ввели в 1985 году) Как-то и факториалы учили, и ряды, и даже теоремы с индукцией.
Численные методы были менее востребованы, не? Вычислительных машин (должной производительности) не было же, численная маткматика без них бесполезна (почти). Но вообще, я не учился в 80-х (и в СССР вообще успел только родиться, по сути), так что честно скажу, что не знаю, как они обходились, и чем занимались. Но судя по рассказам отца все было очень-очень иначе, и программирование (тогда еще в машинных кодах) было чем-то для избранных. Сейчас это не так, потому и важно дать эти концепции. Проектирование sock все еще для избранных, потому предлагаемые вами концепции менее важны.

p.s. я не говорю, что это совсем не надо (сильно утрируя можно доказать нужность или ненужность чего-угодно, но это не конструктивно). Речь только о приоритетах. То есть, если у меня будет выбор учть своих детей рекурсии или верилогу, я выберу первое. Я говорю «или» потому, что отведенное на учебу время конечно, и получить все и сразу маловероятно.
На машинных кодах в СССР программировали в 1950-е, а потом (в 1960-е) на Коболе (для учета производства) и Фортране (физики), потом на PL/1, в начале 1980-х была смесь фортран-кобол-pl/1-паскаль (плюс немассово ассемблер) и в середине 1980-х стал распостраняться Си. Уже в 1970-х это было точно не для «избранных». При этом в учебнике для мехмата МГУ начала 1980-х еще были машинные коды с последующим переходом на Algol-60, но это было необычно для того времени и немного извращенно (не соответствовало времени).
ну, нас учили программированию на ЯСК (это такой «русский ассемблер для Минск-32») на УПЦ. там же показывали и примеры машкодов. В институте — для основной массы инженерных специальностей, у которых было «программирование» (а это было далеко не у всех) — был фортран. и задания в ВЦ на перфокартах. только отдельные кафедры имели свой «дисплейный класс» — в основном, связанные с вычтехникой. там уже «на выбор» — от кодов (в те времена систему команд 8080 и PDP помнил на память), включая различные ассемблеры — и до ЯВУ… впрочем, первый компилятор мы написали на фортране, а первый дизассемблер — на бейсике… и ничего…
Я честно не помню, в каких годах учился отец (думаю, что в районе 70-х), но он программировал в машинных кодах, забивая потом это дело в перфоленту на телетайпе, емнип. Я даже видел тетради с записями всякой такой фигни)) Разумеется, в 80-х этого уже не было, но и до современного уровня было, как до луны.
рекуррентные соотношения давали и до 85 года (я сам закончил школу в 85-м).
Рекуррентность в курсе математики и рекурсия в программировании — это не одно и то же. Числа Фибоначчи и ряды можно программировать и итерацией.

Я завел разговор про рекурсию вот с какой целью — с моей точки зрения рекурсия важна, но важно например и конвейерная обработка — для меня это концепции одно уровня важности. Конвейерную обработку показывать на Паскале — это можно, но это извращение. А вот на Верилоге — в самый раз.

А вы говорите, что рекурсия важна, а конвейерность — нет. Апеллируя к числам фибоначчи и рекуррентным последовательностям в курсе школьной математике. Я же говорю, что числа фибоначчи программируются итеративно, следовательно наш спор — о предпочтениях.

(Рекурсия становится незаменимой при обработке деревьев, но в школьной математике этого по-моему нет)
Любая хвостовая рекурсия разворачивается в цикл. Обхода деревьев это, вроде, касается. В школе они есть на информатике, как минимум, в профильных классах.

Покажите, каким именно образом важна конвеерная обработка (как концепция), если вы не занимаетесь проектированием процессоров. Кроме того, я счиаю эту концепцию очень простой, и особого смысла показать ее как можно раньше не вижу.
*** Любая хвостовая рекурсия разворачивается в цикл. Обхода деревьев это, вроде, касается. ***

А не-хвостовая? Поиск по бинарному дереву?

*** если вы не занимаетесь проектированием процессоров ***

Это гораздо более общий принцип, применимый даже для арифметических блоков, не говоря уже о сетевых чипах итд — см.

http://panchul.livejournal.com/268104.html
Почему микроэлектроника не сводится к гонке за нанометрами
Он просто реализует рекурсию через явный стек. Это та же рекурсия, но под другим именем (мне нужно было это сказать в комменте выше, но я это опустил для простоты)
Как хранятся данные — отдельный вопрос. Механизм реализации чисто итеративный. Также обратите внимание на:
рекурсией нельзя осуществить горизонтальный обход дерева.
Рекурсия на уровне ассемблера тоже реализуется с помощью стека — причем на RISC процессорах используются одни и те же команды для вталкивания и выталкивания из стека — что на реализации с неявным стеком, что на реализации с явным стеком. На CISC (например x86 бывает явный push и pop, но это просто сокращение)
В общем, мне лень дискутировать о терминологии. Тем более, что важность рекурсии я не отрицаю. Как насчет второго вопроса? (он мне более интересен)
Второй вопрос — о важности концепции конвейерности. Ну вам она кажется неважной, мне она кажется не менее (скорее более) важной для мира хардвера, чем вам рекурсия для мира софтвера. Это субъективно. Но что объективно — для цельной картины мира нужно иметь представление и о базе софтверной части, и о базе хардверной части — иначе в обществе не будет потребность для создания своих российских самсунгов и эпплов, а все будут в лучшем случае ковыряться в деталях битов memory-mapped регистров микроконтроллеров с целью программирования готовых чипов, спроектированных в других странах.

(вообще похожие дискуссии были в 1985 году о важности введения программирования в школах, и тогда многим тоже казалось, что например игры на японском компьютере MSX Yamaha — этого Россия не достигнет ни через 50 лет, ни через 100, а сейчас есть вот получившая международное признание игра в танчики).
Вопрос не в этом. Мне интересно, где понимание конвейеров важно кроме проектирования чипов. Я не говорю, что это вообще не нужно. Но считаю очень узкой специализацией. Но возможно, я чего-то не знаю, и у вас есть другие примеры?
нужно иметь представление и о базе софтверной части, и о базе хардверной части — иначе в обществе не будет потребность для создания своих российских самсунгов и эпплов

Потребность для создания возникает не из знаний устройства… потребность возникает из желания что-то сдедать… а конкретных реализаторов идеи можно для начала и пригласить «снаружи»
В электронной индустрии сложная структура реализаторов (RTL design engineer — functional verification engineer — performance modeling engineer — physical ASIC design — итд), целыми компаниями их из Silicon Valley выписывать нереально, а чтобы выучить, требуется долгое время (это не как в софтвере для писания вебсайтов).
будет идея — можно и выписать/организовать удаленную совместную работу/заказать часть работы.
но если будет 100500 «реализаторов», но не будет идеи (а равно — рыночной инфраструктуры, институтов) — эти 100500 инженеров в лучшем случае пополнят ряды менеджеров по продажам, а в худшем — ряды безработных…
Без понимания идеи будут только поверхностные, типа me too. А с выросшей средой — рынок сейчас становится глобальный.
у нас спор перешел в плоскость «что первее — курица, али яйцо»® :-)
в подтверждение своей позиции я могу сказать, что в 90-е высвободилось из военпрома огромное количество инженеров и отраслевых ученых, умеющих делать «суперхреновины» на почти мировом уровне. только вот ни самсунга, ни эппла не появилось — появились челноки…
да, и насчет «глобального рынка»… именно это позволяет прикинуть, что ваше начинание с изучением приведет не к созданию «отечественных самсунгов», а с перетеканием «наших мозгов» в «ихние самсунги» (возможно, даже удаленно)
в курсе математики рекурсия нужна и изучается (рекуррентные соотношения), вроде как сейчас классе в 9.
в курсе ИКТ рекурсия нужна в лучшем случае как пример, но если ее и не упомянуть — особого вреда не будет…
Насчет страны я написал здесь:

Системы на кристалле (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-блоки, а также использовать азиатские фабрики.

и т.д.

в мире -растет. в стране — нет. и если школьник этим заинтересуется (выучится, и сделает своей профессией), то у него будет два пути: либо «идти в мир», либо «идти по миру»…
ЕГЭ в этом году сдает 700 000 школьников. из них информатику (т.е. более-менее интересуется этой областью знаний) — 71 тыс. из них поступят «по направлению» — в лучшем случае 25000 ну и так далее. допустим, что из этих 25000 в год заинтересуются ФПГА 10% -2500. у нас есть 2500 рабочих мест в год?
Автор выше популярно объясняет, что смысл не в том что-бы наплодить инженеров, а в том что бы посеять идеи, применение которым найдётся далеко за пределами разработки железа и софта…
несколько странный метод посева идей с помощью специфического железа и не менее специфического софта.
Это не «специфическое железо» и не «специфический софт», а общие концепции 1) три основы цифровой электроники — gate, clock, flip-flop; 2) концепция конечного автомата; 3) что такое процессор с стороны железа и со стороны софта — граница между архитектурой и микроархитектурой.

Никаким количеством программирования Ардуино или STM (что в рамках этих концепций просто разные вариации фон-нейманновской машины) вы это не выучите.

А это совершенно необходимо, чтобы иметь малейшее представление, как работают абсолютно все цифровые чипы на рынке — от айфона до спутника — и как строятся программно-аппаратные системы.

Это гораздо более широкий класс концепций, чем работа с регистрами STM.

Это нужно чтобы создать рынок новых работ, и вовсе не только в FPGA, но и в ASIC design. Или вы хотите, чтобы россияне вечно программировали чужие чипы?
1) Это вузовский курс электроники. Школьником кроме Gate особо не надо ничего
2) Конечные автоматы прекрасно учатся даже в прикладном программировании без всяких ардуинок.
3) А применение у этого какое? Зачем простым смертным микроархитектура?
А детям в Киеве понравилось делать кодовый замок на верилоге (простой конечный автомат). Раз нравится — можно использовать. Опробуем теперь в Новосибирске.
Или вы хотите, чтобы россияне вечно программировали чужие чипы?

будут программировать чужие фпга. шило на мыло.
Вы же разработку на фпга продвигаете, а не разработку самой фпга.
Нет, я продвигаю разработку ASIC, а FPGA использую как тренажер
почему вы ограничиваетеь концепциями цифровой электроники, а не рассматриваете глубоко те же транзисторы? устройство триггеров? полупроводники- все их заперещенные зоны, влияние различных примесей, технологии производства микросхем вообще и FPGA в частности? :-)
ЕГЭ в этом году сдает 700 000 школьников. из них информатику (т.е. более-менее интересуется этой областью знаний) — 71 тыс. из них поступят «по направлению» — в лучшем случае 25000 ну и так далее. допустим, что из этих 25000 в год заинтересуются ФПГА 10% -2500.

Вы слишком оптимистичны, у нас в городе 300 выпускников (11класс) Информатику сдают примерно 90 человек, а поступать по профилю ИТ человек 15 из них электроникой интересуются не более 2-3.
Так что 25000 и 10% это слишком радужно. Информатику для сдачи ЕГЭ берут потому что надо что то еще кроме «базы» и многие считают что это легче чем остальные предметы.
При этом в вузы даже на IT специальности чаще требуют физику, чем информатику (кстати, по той же самой причине — легче сдается).
ИТ-специальности — понятие довольно широкое.
но в целом, физика требуется при поступлени на бОльшее количество специальностей.
Я взял статистику по экзаменам из РГ. (https://rg.ru/2017/05/29/glava-rosobrnadzora-otvetil-na-voprosy-vypusknikov-i-roditelej-pro-ege.html)
сын сдает сейчас оные, поэтому держусь в курсе (сегодня, кстати, физика).
сдавать «кроме базы» что-то совсем не обязательно. и информатика в существующем виде — не самый легкий (из-за невнятности курса) предмет. кроме того, самыми легкими считаются болтологические предметы — обществознание, история.
ну а электроникой интересуются мало. причины простые и взаимосвязанные: 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-х годов элементов программирования.
Может быть, Вы не поняли мой основной посыл, но, если бы «слепое пятно» было бы только между физикой и программированием, я был бы только рад.

Я не настолько хорошо разбираюсь в физике, но я неплохо разбираюсь в программировании, особенно встроенных систем, и, поверьте мне, в этой области размер области незнания (вчерашних школьников, причем тех, кто занимается Ардуино, то есть не всех подряд), чудовищен и лично я не понимаю, как и зачем учить их ПЛИС.
Более того, не меньшее слепое пятно существует между Ардуино и микроконтроллерами как таковыми :) Прыгать из Ардуино в FPGA… Мне совершенно непонятна такая логика.
Между нами говоря, я вообще считаю, что программировать микроконтроллеры стоит сразу учить со «взрослыми» тулами — я изложил эту точку зрения в свое время по ссылке ниже. Там я писал про PIC32 и Микрочип, но это все совершенно так же относится и к STM32 и AVR:

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. Кроме этого, детям это нравится.
UFO just landed and posted this here
Ардуино понравилось куче преподавателей, они к ним прикипели душой

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

С Ардуиной — да. Надо вывести строку в UART: подключили скетч, вызвали функцию — готово. На десктопе: подключили библиотеку, вызвали функцию — готово. С микроконтролером без высокоуровневых прокладок: сконфигурировали нужные выводы, переключили их на управление периферией, сконфигурировали один из UART-ов, в цикле (для простоты не трогаем прерывания) выплюнули в него строку по одному символу, контролируя окончание передачи каждого.
Ну и вообще в таком случае непонятно зачем дергали Ардуины, они не способствуют развитию навыков ни общего программированию ни программирования микроконтроллеров :) Если у Вас цель научить общему программированию — учите ему на десктопе, нафиг Ардуину. Если цель — научить программированию микроконтроллеров — учите программировать микроконтроллеры, с регистрами, прерываниями, ПДП и т.д., нафиг Ардуину. Вот после этих двух вариантов будет логично дать основы Verilog как альтернативного пути создания автоматов.
UFO just landed and posted this here
Зачем так утрировать? У си все хорошо с прямым управлением памятью и работой с регистрами.
Впрочем, до тех пор, пока не требуется продвинутая работа с памятью, на асме не сильно сложнее писать.
UFO just landed and posted this here
Вы можете сразу машинными кодами писать, если так тянет к созданию и дальнейшему преодолению трудностей :)

А что такого в ASMе МК? Это же не x86 там нет заморочек с защищенным режимом, и программы на десятки мегабайт там пишут не часто. Знал двух программистов МК, один из которых любил писать на ASMе, а другой на Си, и не сказал бы, что скорость разработки и отладки у них кардинально отличалась.

Да ничего такого в нем нет, разве что с читаемостью и поддержкой кода у Си получше обстоят дела, да и удобство разработки гораздо выше. А качество современных компиляторов в большинстве случаев почти нивелирует возможный выигрыш в размерах или скорости работы ассемблерного кода.
Есть мнение, что компилятор даже код на плюсах собирает лучше, чем человек пишет на асме.
UFO just landed and posted this here
Зависит от сложности, полагаю)

Каждый раз, когда кто-нибудь это пишет, я вспоминаю гневный пост Торвальдса о "неизлечимо поломанном" 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. И вообще — детям интересно.
я предлагаю делать это не в школе (в которой нет ресурсов). а в широкой сети внешкольного образования, ныне сжавшейся до невозможности.
UFO just landed and posted this here
UFO just landed and posted this here
Именно! ПЛИС — это просто удобная платформа для практического приложения такого обучения.
Содержание 99% процентов комментариев к этой статье я предсказал даже не открывая её.
Но автор заслуживает уважения за упорство в продвижении своего видения мира.
он увлеченный человек. со всеми плюсами и минусами этого…

Увидев статью, решил посмотреть, что там с вакансиями по этой теме, и у меня сложилось впечатление, что чтобы тебе в жизни когда-нибудь пригодились FPGA, нужно ну очень хотеть заниматься именно этим. В большинстве вакансий где они упоминаются, помимо VHDL и Verilog нужны и более мейнстримовые С, С++, Qt.

FPGA — это плацдарм ко всему проектированию цифровых микросхем. В Южной Корее тоже было мало разработчиков на Verilog и VHDL, и если бы там все рассуждали как вы, то смартфоны Samsung Galaxy там бы не появились.

Я думаю, что раз взаимосвязь такая тесная, то не обязательно узнавать об FPGA в школе. Если кто-то захочет работать в этой области, у него будет время узнать об этом в вузе, так же как о других подобных специализациях, вроде DSP или PLC. Последние вообще из другой отрасли но там ни менее практически на любой "программистской" специальности дают возможность потрогать все это, чтобы дать возможность осознанно определиться со специализацией. Побуждать же к чему-то конкретному школьников считаю не самым верным решением, особенно при том, что они нередко не очень хорошо представляют как работают триггер и счетчик, какие уж там FPGA.

Тем не менее, детям в Киеве понравилось делать кодовый замок на верилоге (простой конечный автомат). Раз нравится — можно использовать. И ардуиновская VP говорит, что поддерживает 1) плату на снимке 2) кто-то у нее пишет книжку по FPGA для детей и 3) они будут делать еще одну официальную ардуиновскую плату.

То, что вы мне сейчас говорите про FPGA/Verilog, в 1984 году говорили про обучение в школе программированию.
Поверьте, делать например пиротехнику им понравится ещё больше!
А если бы химию преподавали плохо, не появилось бы всяких 3М в США…
Кстати DSP и PLC — некорректные аналогии. Какие применения у PLC вне завода? И для DSP нужно знать матанализ заведомо больше чем в школе (преобразование Фурье итд). А в FPGA и Verilog простые принципы (при этом _другие_ чем у программирования), тренируют мозг, важная связь с взрослой жизнью, позволяют построить свой процессор, дети, как показал эксперимент, воспринимают это с интересом.
PLC «вне завода» применялось, например, в немаленьком загородном доме некоего «локального олигарха» — для управления поливом/бассейном/летним кинозалом…
приходилось видеть (правда, издалека) такое на молочной ферме.
иногда встречаются энтузиасты, делающие на них «умный дом».
По своему опыту скажу, что Verilog взрывает мозг программиста, привыкшего к более традиционным средствам. Когда наконец врубаешься в эту магию, и оно наконец-то после заливки через бластер начинает работать — полный восторг.

Спасибо за то, что делаете эту работу. Что бы ни говорили скептики, заполнение логической дыры между булевой алгеброй и Core i7 — очень важно. Без знакомства с этими вещами народ, как правило, не имеет никакого представления о том, где там внутри компа сидит знаменитая машина Тьюринга, а цифровой автомат… ну, это, наверно, что-то про дистанционное управление оружием :))
Удачи!

P.S. Ваш стронг рашн прононсиэйшн — просто чудо. Не избавляйтесь от него.
*** P.S. Ваш стронг рашн прононсиэйшн — просто чудо. Не избавляйтесь от него. ***

Ни за что! Пусть трепещут!


Я так и не понял каким боком тут ардуино.

Sign up to leave a comment.

Articles