Зашел в офис Ардуино; поговорили о ПЛИС-ах; требуются добровольцы

    Сегодня утром я заходил в офис калифорнийского отделения Ардуино. Там было межкомпанейское совещание по образовательным программам, на которое меня пригласил менеджер из AMD Тимур Палташев. В конце мероприятия возникла любопытная дискуссия:

    Вот сейчас школьников учат программировать Ардуино и другие устройства на основе микроконтроллеров и встроенных процессоров (Лего, Расберри Пай итд). А вот в 1970-е годы школьников учили здесь же, в Калифорнии, собирать схемы на макетной плате, на транзисторах и микросхемах малой степени интеграции (7400 TTL, CMOS 4000 итд) с элементами И-ИЛИ-НЕ и D-триггерами. Это как бы и прогресс — на микроконтроллере можно написать программу, которая бы осмысленно двигала роботической рукой, чего трудно сделать на индивидуальных логических элементах, но как мы вырастим школьников, которые бы умели проектировать (не программировать) сами микроконтроллеры?

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



    Идея учить школьников по всему фронту цифровой схемотехники и встроенного программирования звучит хорошо теоретически, но как воплотить это в жизнь?

    У Arduino уже появились недорогие платы с ПЛИС, да и производители ПЛИС стали распостранять бесплатный софтвер для синтеза без сложных лицензий. Однако на пути к нирване стоят:

    1. Недружелюбность софтвера для синтеза схем и конфигурация ими ПЛИС-а
    2. Серьезное отличие параллельной ментальной модели кода на языке описания аппаратуры SystemVerilog от интуитивной понятной ментальной модели последовательного программирования
    3. Специфически детские проблемы, например: даже младшие школьники (7-10 лет) относительно легко понимают концепцию электрического тока, сопротивления и конденсаторов, комбинационных логических элементов, двоичных арифметических операций — но вот с пониманием последовательностной логики (D-триггеров, счетчиков, сдвиговых регистров, конечных автоматов) происходит затык, хотя это понимают старшие школьники.


    Если вы не знаете, что такое ПЛИС, вы сможете прочитать мои старые тексты «Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция», а также «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».

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

    Altera Quartus II:



    Xilinx Vivado:



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



    Написать простой GUI в стиле Ардуино должно быть не очень сложной задачей, так как и Xilinx, и Altera содержат в своих пакетах программы, которые выполняют синтез и трассировку с командной строки, и GUI может вызывать эти программы. Осталось найти, кто бы хотел этим заниматься в виде народного open source проекта. Я пообещал товарищам из Arduino.org посмотреть среди моих российских, украинских и т.д. контактов, кто бы мог этим заняться. Предлагаю обсудить это в комментариях.

    Вопрос: А зачем синтезировать схему прошиваемую в ПЛИС из описания на языке Verilog / SystemVerilog / VHDL? Ведь есть туля для высокоуровневого синтеза, которые позволяют синтезировать схему из алгоритма на Си?

    Ответ: Тулы этого рода имеют серьезные ограничения на типы схем, которые они могут произвести. Попытайтесь на таком туле спроектировать конвейерный процессор с stalls и forwarding.

    Вопрос: А вот я нашла на вебсайте этой самой ардуинной платы c ПЛИС ( http://www.cnx-software.com/2016/10/21/alorium-xlr8-arduino-compatible-altera-max-0-fpga-board-sells-for-75/ ), что ее можно программировать обычной средой Ардуино, с обычными скетчами.

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

    Подробнее
    Реклама
    Комментарии 148
    • +1
      Понятно, что для детей такой GUI не годится

      Нормальный интерфейс, на мой взгляд.
      В возрасте многих текущих детей, которые сейчас радостно пишут на Arduino IDE, мы благополучно писали на Delphi и Builder, и, черт возьми, неплохо это было.
      У современной Arduino IDE от IDE — только название, и, на мой взгляд, это неправильно.
      • +2
        В altera quartus можно и руками схемы из элементов собирать и код на VHDL писать, изучали в университете, сложностей особо не было именно с GUI, главное понять логику работы.
        • 0
          Да и для старших школьников это не проблема. Было бы интересно показать FPGA младшим школьникам. Например для 10-летнего Quartus тяжел имхо.
          • +2
            Нужен определенный уровень понимания математики, логики, абстракции.
            • 0
              Ну то что второклассники осваивают двоичные числа — это факт, наблюдал. Логику и-или-нет тоже. Вот последовательностная логика идет более туго, но можно начать с упражнений с простыми D-триггерами вот такого рода, а потом объяснить как из этого вытекают конечные автоматы (но это для более старшего возраста ):

            • +3
              Да тут проблема не с интерфейсом. «Для 10-летнего» проблема — электроника в принципе. Вундеркинды не в счет. Они и Quartus освоят.
              • 0
                Из личной практики, шестилетние дети с интересом играются в симулятор логики, интересные поделки перенося на хлеборезку…
                … да и с последовательной логикой нет проблем, из логики клепают триггеры, из триггеров регистры, это-же прикольно, бегущий огонёк

                PS.Правда ребята, монтессорята, и не то что бы они все были гениями by design, некоторые очень даже наоборот…

                PPS.Что с удивлением отметил некогда для себя, симуляторы им нравятся даже больше чем хлеборезка!
                • 0
                  Только после вашего коммента понял, что это хлеборезка, а не доска с «бородой» (beardboard) из проводов, а всего лишь пару букв поменял местами при первом прочтении и дальше не обращал внимания…
          • +2
            Как мне кажется, дети достаточно хорошо могут освоить и полноценный софт. Покажите им последовательность действий для выполнения задания, они поначалу повторят по-попугайски, потом привыкнут и будут понимать что делают. А вот задание, чтобы заинтересовать — другой вопрос.
            Про ардуину. Человек, который начал программировать в их IDE очень тяжело переходит на «взрослые» IDE. Привык потому что. И не понимает того, что там под капотом делается.
            • 0
              > Человек, который начал программировать в их IDE очень тяжело переходит на «взрослые» IDE

              Считаю это мифом. Откуда он взялся вообще?
              • 0
                > Считаю это мифом. Откуда он взялся вообще?

                Считайте мифом.
                Я озвучиваю свое мнение. Ардуинщиков, переходящих в профессиональное программирование микроконтроллеров не наблюдаю. Те, которых знаю, сразу начинали на «больших» IDE.
                • 0
                  Не наблюдаете, значит им это просто не надо. На новый инструмент переходят, когда текущего перестает хватать и за это имеет смысл заплатить.
                  • 0
                    > Не наблюдаете, значит им это просто не надо.

                    Вот именно.

                    > На новый инструмент переходят, когда текущего перестает хватать и за это имеет смысл заплатить.

                    И их надо учить почти с самого начала. Пробовал как-то. В итоге люди бросают, говорят что нафиг им это не надо, сложно.
                    • +1
                      Учить что-то новое нужно с какой-то целью. С целью решения более сложных задач, с целью нахождения работы с большей зарплатой…

                      Учить новый инструмент ради инструмента — какой смысл?
                      • 0
                        > Учить новый инструмент ради инструмента — какой смысл?

                        Никакого. Но на работу с более менее приличной зарплатой требуется не знание Arduino IDE, а знание профессиональных инструментов. Поэтому вот так. Эту пропасть просто так не перепрыгнуть.
                        • 0
                          Для работы с более менее приличной зарплатой объем знаний инструмента много меньше других общих и специальных знаний.
                          • +2
                            Более-менее приличную зарплату я в другой области деятельности получаю. Arduino — оно не для работы.
                    • +2
                      Ардуинщиков, переходящих в профессиональное программирование микроконтроллеров не наблюдаю
                      Так Ардуино это хобби на уровне «смастерить дома по мелочи», а программирование микроконтроллеров — это зарабатывание денег, для которого нужен осознанный выбор профессии и серьезная база.
                    • 0
                      Человек, решивший перейти с ардуино, открыв нрмальную IDE вроде CVAVR или AtmelStudio, сталкивается с тем, что вообще не знает что делать после создания проекта.

                      Arduino это не IDE, это концепция программирования «черного ящика» (то есть абстрактного микроконтроллера в вакууме на отладочной плате) «готовыми» функциями. Без знаний принципа работы, внутреннего устройства, архитектуры. Для детей поиграть — пойдет. Сделать за вечер термометр, который завтра уже разберешь — пойдет. Сделать промышленное устройство — уже нет.

                      И кстати,
                      Ардуинщиков, переходящих в профессиональное программирование микроконтроллеров не наблюдаю

                      наоборот — тоже не вижу.
                      • +1
                        Хочется мне сделать самому дистанционный диммер для домашнего освещения, я покупаю в местном магазине Леонардо, Нано, пару модулей и колхозю самоделку. Получается работающая неказистая штуковина условно — за тысячу-полторы рублей.

                        Хочется мне во всей квартире сделать такое управление, заказываю мелким оптом с Али Лилипадов, Нано и модули — получаю несколько рабочих устройств, каждое за условные 500 рублей.

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

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

                        Каждый новый уровень сложнее и требовательнее к навыкам — примерно на порядок. Что совершенно логично. А количество специалистов на каждом уровне — меньше на порядок, что тоже не удивительно. На каждые каждые десять тысяч самоделкинов-ардуинщиков, приходится один разработчик ПЛИС.
                        • 0
                          В Леонардо продаются nano?
                          • 0
                            *в местном магазине: леонардо, нано…
                        • +2
                          Для того, чтобы помигать лампочкой, не нужны глубокие знания архитектуры. Но если понадобится — никто ж не запрещает почитать про архитектуру ATMEGA. И залить внутрь ардуины отладочной платы свою прошивку, написанную на благородном асме ;)
                          • 0
                            Можно и на PICах. Помигать лампочкой на них совсем не трудно.
                    • 0
                      Xilinx Vivado напоминает Eclipse. Скорее всего его можно доделать.У Texas Instruments подобно сделан CCS, но обвешан всякими плюшками типа Grace, GUI Composer
                      http://mcuhq.com/11/msp430-launchpad-gui-composer-example
                      image
                      Очень наглядная вещь.
                      • +2
                        Ардуины и прочие умения писать скрипты нужны не чтобы вырастить крутых программистов, а чтобы немного расширить возможности обывателей, т.е. потребителей, имхо.
                        Школьников лучше учить базовой теории математики, физики, химии… а дальше разберутся, кому что интереснее.
                        • 0
                          Но даже для картины мира обывателя может быть полезным знать, что существует не только парадигма программирования фон-нейманновской машины как цепочки последовательных инструкций, но вот и такой не-фон-нейманновский уровень регистровых передач и связанный с ним уровень netlist и еще ниже физического транзистора. Это полезно знать не только электронщику или программисту, но и например будущему финансисту проектов гаджетов.
                          • +2
                            Я не исключаю полезности какого-нибудь курса на курсере, о том как помигать лампочкой на ПЛИС, я сам писал пару статей о том, как змейку на гирлянде запустить на spartan-е, но это было интересно полутора человекам, заинтересованным железками, а среди школьников будет совсем маленький процент тех, кому это интересно и кто это поймёт…
                            • 0
                              Среди людей в принципе очень маленький процент тех, кому интересно и кто поймёт _вписать_нужное_. Предрасположенность человека к освоению _вписать_нужное_ не удастся выявить, пока не попытаешься его этому научить.
                          • +2
                            И иметь выпускников, которые не знают ни математики, ни физики… ни арудино, ни скриптов. Все кто знает математику либо вернулись к изучению если вовремя почувствовали её необходимость для скриптов, или ученики, без преувеличения, гениальных педагогов, которые смогли заинтересовать абстракциями математики.
                          • 0
                            А не начать ли работу над этой проблемой со стороны программных эмуляторов ПЛИС, симуляции требуемых эффектов, источников сигналов и Web-IDE, не требующее вообще никакой установки?

                            А уже после создание такого инструмента для быстрого старта и обучения основам можно дорабатывать инструмент для аппаратной части, для тех, кто пройдет первый этап.
                            • 0
                              Мигание лампочек на ПЛИС для ребенка имхо более занятно, чем наблюдение waveforms в Icarus Verilog или даже симулятора с платой и квазиреалистическими картинками. Но тут конечно могут быть разные мнения.
                              • 0
                                Так пусть мигает светодиод, только в браузере. После браузера можно переходить на железо, если есть желание и возможность.

                                Иначе, может быть и будет много заказов arduino-подобных-плат, только 90% из них просто будет пылиться на полке.
                            • +2
                              Ну, дело не только в IDE. Проблема глубже. В ардуино упростили все и максимально. Любой может прочесть мануал в виде брошюрки на 50-100 страниц и начать кодить. Не надо знать, как оно работает, вся низкоуровневая часть спрятана в либы. Порог входа в ардуино примерно такой же, как в php или в бейсик\паскаль, то есть нулевой.
                              В ПЛИСах же надо знать математику на хорошем уровне, чтобы сделать что-то круче мигалки диодом — сразу минус 90% потенциальных пользователей, ибо преподавание математики во многих случаях идет карательными методами, и ее большинство школьников не понимает\не любит. По себе это помню, когда заставляли учить какую-то нудную сложную фигню, но для чего она, было тайной. Надо знать кучу теории по логике, приличная такая книжка. В конце-концов, платы с ПЛИСами стоят на порядок дороже ардуин даже на али. Упрощенная IDE не взлетит. Просто не взлетит.
                              Если браться за популяризацию ПЛИСов, то, в первую очередь, нужен простой графический редактор, когда рисуешь схему, оно делает верилог из нее. К каждому элементу написать мануал с анимацией, как данный логический элемент работает. Потом собрать большие библиотеки всего, что есть под открытыми лицензиями, привести к состоянию ардуино: взял макрокомпонент (например, блок счетчика) с палитры, кинул в схему, соединил — ПРОФИТ. Для начального обучения этого хватит за глаза, а вот дальше, когда весьма ограниченных возможностей редактора будет не хватать, человек полезет на вкладку верилога, как лезут в либы ардуино с целью оптимизаций.
                              Короче говоря, нужно уменьшать порог входа до нуля, только тогда кто-то захочет использовать ПЛИС в домашних\учебных проектах.
                              • 0
                                А я думаю, что проблема сложности профессиональных IDE лежит в их универсальности. Как только уберем универсальность, так они сразу станут на порядки проще.
                                • +2
                                  Вы примерно симулинк с system generator описали, но это дорого.
                                  • 0

                                    Практически любая IDE для плис умеет схемы рисовать как вы говорите. Кинул элемент и оно считает или мультиплексирует или сохраняет. Только основная сложность ПЛИС не в логике, а в интерфейсах. Математика, кстати, не так уж и нужна (в основном булева алгебра нужна, а она достаточно проста).

                                  • +2

                                    Насколько вообще востребованным является скилл проектирования микроконтроллеров в наше время, чтобы учить этому аж со школы? Сейчас мало кто этим занимается, поскольку рынок уже поделен и спрос на специалистов не большой.

                                    • –1
                                      Почему только микроконтроллеры? А чипы для самоуправляемых автомобилей? А чипы для интернета вещей? Везде море специализированных микросхем. Даже Интел купил производителя ПЛИС Альтера и сейчас начинает ставить reconfigurable logic в свои процессоры в качестве дополнительного блока.
                                      • +2
                                        А ещё нам нужно проектировать реакторы холодного термоядерного синтеза и придумывать и синтезировать лекарства от неизлечимых болезней, давайте на всякий случай готовить побольше специалистов с 1 класса…
                                        • +2

                                          И как много начинающих инженеров нужно Intel в год? Есть десяток производителей чипов, которые занимают 90% рынка, в каждом трудятся по этой тематике, допустим по 5000 инженеров, которые вполне справляются с R&D и обновлением линейки. Ну каждый нанимает ещё, предположим по 20 человек в год. И это на весь мир. По сравнению с количеством выпускников школ это мизерное количество, так что для 99% процентов выпускников эти знания будут абсолютно ненужны. Скорее им могут понадобиться знания по обычному программированию.

                                          • +1
                                            > И как много начинающих инженеров нужно Intel в год?

                                            Не только интел разрабатывает микросхемы. А на FPGA-шников вообще спрос большой. Профессионалов как обычно не хватает.
                                            • +1

                                              По ключевому слову FPGA hh.ru выдал аж 122 вакансии по всем регионам и странам.

                                              • 0
                                                > По ключевому слову FPGA hh.ru выдал аж 122 вакансии по всем регионам и странам.

                                                мало? в линкедине посмотрите.
                                                • +2

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

                                                  • 0
                                                    Работ в России мало потому что в России есть только несколько команд, где это востребовано — http://elvees.ru http://milandr.ru http://module.ru http://mcst.ru http://baikaleletronics.ru и еще несколько. Это проблема курицы и яйца. Чтобы это развить, нужно иметь кучу инженеров с данными skills.

                                                    Или вы может вообще считаете, что в России не нужно дизайнить своих чипов, а только программировать готовые чипы от Intel, Apple, MediaTek, Broadcom, Qualcomm, Microchip и т.д. и т.п.?
                                                    • +1
                                                      Вы упорно перечисляете разработчиков СБИС, хотя просто ПЛИСоводов в десятки раз больше…
                                                      • +1
                                                        Несомненно, но так как сам я работаю в части индустрии, где делаются ASIC-и для массовых устройств, и ПЛИС используются у нас для отладки, то мне такой перекос простителен — я смотрю на рост прежде всего этой индустрии. Понятно, что возможности ПЛИС для DSP, телекоммуникационных устройств, криптографии, малосерийных специализированных вычислителей тоже еще полностью не реализованы и это тоже создает рынок работ.
                                            • 0
                                              Я когда-то читал, что в мире около 100,000 инженеров, которые используют verilog (ссылку нужно искать).

                                              В штатах около 300,000 электронщиков:
                                              http://www.computerworld.com/article/2483786/it-careers/electrical-engineering-employment-trending-down.html

                                              В любом случае, знания о базовых кирпичиках цифровой логики хорошо подкрепляют школьную физику и математику (двоичные числа, конечные автоматы, физика полупроводников), а идея устройства микропроцессора хорошо дополняет школьный курс программирования.
                                        • +1
                                          IMHO, обучение «программировать ПЛИС-ы» путём рисования картинок в каком-то простом IDE — это прямой и удобный путь. Но это путь в тупик из которого потом очень трудно выйти в нормальную рабочую среду, где всё что нужно пишется на HDL-е.
                                          Если речь идёт про расширение кругозора детей на область схемотехники, то это можно сделать при помощи ограниченного набора абстрактных квадратиков из которых строится простая схема и по нажатию кнопочки всё взрывается демонстрируется результат её работы. Уверен, что таких игрушек уже немало существует.
                                          А вот если дитё выразит интерес к этой области, то можно переходить к объяснению, что все эти квадратики легко и непринуждённо описываются HDL-инструкциями. Но учить «визуальной схемотехнике» не надо — производительность такого подхода подплинтусная, вменяемых тулзов чуть больше нуля, переносимость практически отсутствует. И потом придётся переучивать, причём преодолевая детскую привязанность к красивым схемам, которые сами собой преобразуются в код.
                                          • +1

                                            А потом повзрослевшему ребёнку захочется кушать и придётся осваивать Java и ООП, в котором всё делается по-другому.

                                            • 0
                                              Поэтому лучше осваивать IDE, где придется учить Cи.
                                              • 0

                                                Думаете, что Java не осилят?

                                                • 0
                                                  Думаю контроллеры не осилят Java. Представить себе Java микроконтроллеры можно на примере Android телефонов — много ресурсов тратится на совместимость между платформами.
                                                  • 0
                                                    Причем здесь «много ресурсов тратится на совместимость между платформами» и Java?
                                                    • 0
                                                      Потому что код будет работать на некой виртуальной машине. Хотя может как-то изголятся сделать компиляцию в машинный код конкретного микропроцессора, но боюсь для поддержки всего зоопарка микроконтроллеров это будет дорого.
                                                      • 0
                                                        Если код выполняется на виртуальной машине, то затраты на его перенос стремятся к нулю. См., например https://habrahabr.ru/post/324550/ (Анализ исходного кода Another World).
                                                        • 0
                                                          Вопрос в существовании виртуальной машины для микроконтроллера.
                                                          • 0
                                                            Виртуальную машину можно написать на C.
                                                            • 0
                                                              Уже есть. (см. Jazelle)
                                                              • 0
                                                                Судя по датам это надежды начала века что ява сможет всё
                                                                • 0
                                                                  Это надежды не «начала века», а еще 1973 года (виртуальная машина p-кода на которой исполняется Паскаль — https://en.wikipedia.org/wiki/P-code_machine
                                                                  • 0
                                                                    тем более показывает что это неэффективно. Хотя и заманчиво.
                                                      • +1

                                                        Как-то у вас слишком контрастно всё: если не Java, то сразу C. Есть языки высокого уровня, которые компилируются в native code. C примечателен разве что тем, что из него умудрились выкинуть даже такие базовые вещи, как прерывания, которые поддерживает почти любой процессор на уровне железа.

                                                        • 0
                                                          Там же есть замена им — сигналы.
                                                          • 0
                                                            В языке C? Сигналы бывают в POSIX-совместимых ОС.
                                                            • 0
                                                              … и их поддерживает C. Это те же прерывания. Или я что-то путаю.
                                                              • 0
                                                                Либо мы о разных вещах, либо у нас разная терминология.
                                                                1. Можно ли обработать сигнал SIGINT на AtMega8? (на языке С, естественно)
                                                                2. Какому сигналу соответствует прерывание от Timer0 в AtMega? DOS прерывание INT21? (раз сигналы и прерывания это одно и то же)
                                                                • 0
                                                                  Ошибся я. Сигналы — обертка для прерываний предлагаемая стандартом POSIX. Поэтому, если бы на ATMega была POSIX-совместимая система, то можно было бы ловить сигналы.
                                                                  • –1
                                                                    P.S. Нашел вот такое чудо — μClinux . Этакий Linux для микроконтроллеров и, возможно, там есть сигналы.
                                                                    • +1
                                                                      Ну да ;) Только «язык C» и «POSIX-совместимая система» — очень слабо связанные понятия. На C можно писать и для не POSIX — там не будет сигналов. Или на микропитоне для esp8266 — там сигналов не будет, а прерывания будут.
                                                                      • +1
                                                                        В любом случае, что сигналы, что прерывания — никак не свойство языка.
                                                            • 0
                                                              Хм. Я писал обработчики прерываний для atmega8 на C и для esp8266 на С++ (в arduino ide) и не знал что их (прерываний), оказывается, нет.
                                                              • 0
                                                                Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)

                                                                это был коммент не вам а товарищу выше
                                                                • 0
                                                                  Это бы коммента не вам, а товарищу выше
                                                                • +1
                                                                  Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)
                                                        • –1
                                                          Не всегда так. Я пришел в программирование МК еще задолго до ардуино. И первым проектом, исключая хелловорлд, была платка для ATA-диска, которая запускает Secure Erase и показывает, сколько времени осталось примерно до завершения. Так вот я бы не осилил подобную штуку, если бы не генератор проектов в IDE — выбрал флажками, какие прерывания нужны, какие таймеры запустить, и так далее — оно все сгенерировало. С нуля очень сложно было разобраться.
                                                          В ПЛИСах без графического редактора вообще делать нечего новичку. Я сам до сих пор хожу вокруг них и не решаюсь потыкать веточкой как следует.
                                                          • +5
                                                            Нет ничего сложного в ПЛИС-ах. Это я вам как плисовод с 15-летним стажем говорю. Шутка.
                                                            А если серьёзно, то область применения схемотехники слишком узка и нет особой необходимости обучать 100500 школьников её тонкостям. А для общего представления пары картинок в презентации более чем достаточно. Так же как 99% школьников вполне удовлетворены простой картинкой, которая объясняет принцип работы ядерного реактора.
                                                            Но если речь идёт про твёрдую цель заняться схемотехникой профессионально, то визуальное HDL-программирование — это ловушка. Я лично знаю один замечательный проект, который скончался из-за срыва сроков по причине использования визуальной схемотехники. А использовалась там эта визуальная схемотехника из-за того, что исполнителей «так научили». Вот они и рисовали и перерисовывали до одурения схемы пока время не вышло.
                                                            При этом хочу особо заметить, что во первых я вовсе не выступаю против графических средств для создания «рыбы». Особенно если речь идёт об облегчении работы по прикручиванию «ног», подключения сторонних ядер и прочего подобного. Но это не должно заменять сам рабочий процесс.
                                                            И во вторых, я прекрасно осознаю ценность визуализации сложной схемотехники при документировании. Но эта визуализация должна получаться из HDL-я, а не наоборот.
                                                            P.S. Заранее извиняюсь, но стараниями доброжелателей я ограничен одним сообщением в час и, вероятно, скоро это ограничение ужесточится до одного сообщения в день. Так что, если у вас есть желание развить это обсуждение конкретно со мной, то пишите в личку.
                                                            • +1
                                                              В ПЛИС нужен не графический редактор, а графический viewer, который показывает, в какие схемы синтезатор превращает код на 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/08_quizes/quiz_4_synthesis_1.html

                                                            • +1
                                                              Я согласен, что рисование схем мышкой не надо. Но показывать, в какие схемы синтезатор превращает код на Verilog — необходимо, иначе не будет понимания.
                                                            • 0
                                                              Хм, а зачем вообще растить школьников, которые будут проектировать микропроцессоры? Этим должны заниматься инженеры после получения серьёзного образования в этой области.
                                                              • 0
                                                                Очевидно для того, чтобы заинтересовать хоть кого-то идти учится на нужную профу. Чтобы попадало меньше случайных людей в ВУЗах, которые, закончив учебу, идут работать не по профилю каким-нибудь продавцом или менеджером.
                                                                • 0
                                                                  Для заинтересовать должны работать внешкольное образование, т.к. не всем эти знания нужны. На внешкольное образование вечно «денег нет» и всё остальное.
                                                                  • 0
                                                                    А всем ли нужно программирование? Об этом спрашивали в середине 1980-х годов при внедрении в школах информатики.

                                                                    Если следовать вашей логике, то можно спросить: «Хм, а зачем вообще растить школьников, которые будут программировать микропроцессоры? Этим должны заниматься инженеры после получения серьёзного образования в этой области.»

                                                                    Сейчас, когда частота процессоров общего назначения перестала рости и становятся важными гетерогенные системы, которые включают как CPU, так и специализированные хардверные блоки, важно научить школьника видению системы как комбинации из хардвера и софтвера, а не как программирование растущих на дереве / привозимых с другого конца земли микропроцессоров.
                                                                    • +1
                                                                      Программирование не нужно — большинству нужен Word и Excell. А кому надо, тот начнет сам читать, учить, пойдет на некие внешкольные занятия. Тогда он получит актуальные знания, а не прошедший через министерство образования курс с информацией, устаревшей лет на 10.
                                                                      Для успешного (само)обучения нужен базовый фундамент — математика, логика и т.д.
                                                                      • +1
                                                                        Если логику привязать к конкретным поделками на макетной плате, она лучше усвоится, запомнится
                                                                        • +1
                                                                          Не факт. Схемотехника — это не только логика, и не вся логика. Если на то пошло, то логику лучше закреплять через программирование, а не через макетирование.
                                                                          • 0
                                                                            Как вы с помощью программирования закрепите последовательностную логику и ее частный случай — конвейерную обработку? С примерами программного кода, пожалуйста.
                                                                            • +1
                                                                              А никак. Т.е. если это возможно, то лично я не умею.
                                                                              Но относится ли последовательная логика к «базовому фундаменту»? «Базовый фундамент» логики — это Аристотелевы силлогизмы, они же — Булева алгебра.
                                                                              • 0
                                                                                Я вас понял. Вы вероятно не знаете, что это такое, поэтому не можете оценить, это важно или нет. Булева алгебра — это только половина фундамента цифровой электроники. Вторая половина — это последовательностная логика. Без нее компьютеры могли бы только вычислять таблицы умножения для школьников — засунул с одной стороны аргументы, вытащил из другой стороны результат, однозначно определяемый только аргументами. Последовательностная логика добавляет в эту схему внутреннее состояние, после чего становится возможным повторять операции во времени, строить процессоры итд.
                                                                                • 0
                                                                                  половина фундамента цифровой электроники

                                                                                  Я очень рад, но ветка начиналась с того, что

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

                                                                                  Для успешного (само)обучения нужен базовый фундамент — математика, логика и т.д.

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

                                                                                  UPD:
                                                                                  Почитал немного про секвенциальную логику. В чём трудность программной реализации? Вы никогда не писали конечный автомат?
                                                                • +1
                                                                  > зачем вообще растить школьников, которые будут проектировать микропроцессоры

                                                                  Для FPGA много задач, не связанных с проектированием микропроцессоров.
                                                                  • +1
                                                                    Если следовать вашей логике, то можно спросить: «Хм, а зачем вообще растить школьников, которые будут программировать микропроцессоры? Этим должны заниматься инженеры после получения серьёзного образования в этой области.»

                                                                    Собственно в середине 1980-х это и спрашивали. Сейчас, когда частота процессоров общего назначения перестала рости и становятся важными гетерогенные системы, которые включают как CPU, так и специализированные хардверные блоки, важно научить школьника видению системы как комбинации из хардвера и софтвера, а не как программирование растущих на дереве / привозимых с другого конца земли микропроцессоров.
                                                                  • –3
                                                                    Я вот хотел пощупать ПЛИС, (языков программирования я не знаю никаких). взялся за веритлог — и вроде все просто, но в учебнике через абзац «мы старались сделать синтаксис верилога похожим на Си», «мы старались сделать это похожим на Си, то похожим на Си» — зачем? Я не знаю Си, и знать его не хочу, зачем мне гибрид ежа с каракатицей вместо языка, действительно пригодного и заточенного под работу с конкреным типом железа? Есть ли возможность программировать плис на чем-то не похожем ни на Си, ни на иные последовательные языки? Желательно чтобы оно было, что называется, интуитивно понятно. Увы, я не нашел.
                                                                    • +1
                                                                      Если вы не знаете С, то даже с Ардуино вас ждет разочарование…
                                                                      • –1
                                                                        Поэтому я плюнул и взял лабвью.
                                                                        • +1
                                                                          И там нет встроенных скриптов и функций на Си-подобном языке?
                                                                          • +1
                                                                            Возможно есть, но я мне они пока не понадобились.

                                                                            Машины тьюринга я в универе программировал, и это было куда понятнее множества современных языков.
                                                                            • 0
                                                                              И да, тут выше предлагали варианты соединять проводками квадратики с триггерами и IP-корками в схематике, Вас такое программирование ПЛИСов не устроит?
                                                                              • 0
                                                                                Нет, т.к. там все равно нужно делать синхронный дизайн и тп, и в итоге верилог выходит проще.
                                                                                • 0
                                                                                  Ну не обязательно весь синхронный, там можно последовательно кучу логики наворотить и только в самом конце защёлкнуть медленным клоком…
                                                                                  Более того, LabView позволяет blackbox с Verilog-ом вставлять, так что я бы советовал вам с ним таки разобраться, можно крутые приборы с красивым гуём делать.
                                                                              • +1
                                                                                C — современный и непонятный язык?! Простите, а в универе вы машины тьюринга программировали на лампах?
                                                                                • +1
                                                                                  В кодах я их программировал.

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

                                                                                  Я вообще не имею представления о программировании, и если верилог позволяет хотя б представить происходяще в виде схемы. то все остальное — это очень темный и очень дремучий лес.
                                                                                  • 0
                                                                                    Я не в теме, Лабвью позволяет работать с реальными микроконтроллерами и другими устройствами, или только как компьютерная эмуляция? Там можно назначать переменные и константы, писать функции?

                                                                                    По поводу темного леса, даже не знаю что сказать. Для Ардуино от C требуется такой минимум-миниморум, что я даже не могу прикинуть, сколько времени потребуется на освоение синтаксиса. Полчаса? Час? День? Мне кажется, оно того стоит. Посмотрел на скриншоты Лабвью и ужаснулся, компактность «кода» — это не про нее. Видимо это совсем узкоспециализированный инструмент, мне сложно судить.

                                                                                    Касаемо Хелловорда — скетч на С для Ардуинки, аналогичный вашему лабвьюшному, набрасывается за несколько минут, а график Эксель сам строить умеет.
                                                                                    • 0
                                                                                      Позволяет работать, но только с НИшными железками, к сожалению.
                                                                                      По поводу ардуины — возможно, я чего-то недопонял, возможно дело в том, что все учебники по чему бы то ни было пишутся людьми, в этом разбирающимися настолько хорошо, что многие вещи подразумеваются, но не описываются. Вот пример как раз с порта читать http://robocraft.ru/blog/arduino/76.html — возьмите любой кусок кода и посмотрите на него с точки зрения человека, не знающего. Скорее всего это будет воспринято как абракадабра, перемежаемая некими очевидными строками. Логики этой абракадабры понять сложно. Те учебники. что я читал, обычно написаны так: нам надо действие Х. Подключаем библиотеки (зачем? можно ли без них? Как их выбирать, эти библиотеки? Где их вообще брать и тд), инициализируем порт (опять — зачем? что будет если не инициализировать, каков механизм инициализации порта), пишем код. О написании кода обычно идет по станедартной схеме — переменные такие, сякие, массивы, примитивы и прочее. Для чего оно? как его готовить, с чем есть, где что использовать — сиди и догадывайся сам. А уж если потребуется нестандартная задача (не мигалка, не часы, не управлялка моторчиком) — то вообще не знаешь, что делать — ни примеров, ни библиотек, ничего. А если туда еще и матан прибавляется?
                                                                                      Я не к тому. что язык Х плох, а Y — хорош, а к тому, что многие очевидные вещи для непосвященных совсем не очевидны. Ну скажем, умею я обрезать яблони, могу сказать — вот на этой ветке яблоки будут, на этой — через год будут, на этой будут, если укоротить. а эту вообще убрать. Большинство непосвященных видит дерево, или отдельные ветви в лучшем случае. Можно долго перечислять все эти плодушки, кольчатки, копьеца, углы отхождения, типы почек и тд и тп, но если показать на примере 3-4 деревьев все нюансы, то понимание предмета резко улучшается. А пока мне все это напоминает комп. игру — пинаем крыс, берем уровень, прокачиваем владение компьютером или звездолетом. Мигалки светодиодами, вывод библиотеки символов на дисплей — это. конечно, нужно. но ни на шаг не приближает к решению задачи. В чем мне лично понравилась лабвью — в том, что там можно решать задачу — обрабатывать нужное, а все дисплеи, порты, кнопки и ручки уже готовые — прикрутил и все. А если мне нужна мигалка на светодиоде — то проще взять 2шт КТ315 или один корпус логики.
                                                                                      • +1
                                                                                        Видимо мне очень сложно судить с позиций человека, совершенно не представляющего самих основ программирования на C и работой с консолью… потому что статья по ссылке не произвела впечатления китайской грамоты, за минуту не разобраться, но за 10 — никаких проблем, вроде все просто. Здоровенные куски кода относятся к устройству библиотеки и даны для примера, само управление портом, на основе библиотек, довольно простое, консольная утилита с минимумом параметров.

                                                                                        Таки надо понимать, что Ардуино это хоббийная железка для мелких домашних самоделок. Более того, есть даже хейтеры Ардуино, которые бесятся от того, когда видят цены на всякие модули, потому что хоть они и стоят 100-200 рублей, реально там комплектующих на порядок меньше. Плюсы именно в простоте и модульности, развитом сообществе, на все вопросы легко найти ответ, не надо углубляться в программирование микроконтроллеров на низком уровне, народ охотно платит за это. Но что-то серьезное или серийное на Ардуино делать нет смысла, выйдет или дорого, или громоздко, или просто колхозно.
                                                                                        Например, для простого моргания светодиодом достаточно простейшего мультивибратора, или вообще конденсатора с парой резисторов — цены на такие компоненты уже порядка десятков копеек — а не сотен рублей.

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

                                                                                        Хотя, я думаю, изучить основы C на уровне пригодном для Ардуинки, вам лишним не будет, просто для собственного развития, что бы не быть «подобным флюсу». Это довольно простой язык, со строгой типизацией, в нем сложно «выстрелить себе в ногу» и тп.
                                                                                        • +1
                                                                                          Мигалки светодиодами, вывод библиотеки символов на дисплей — это. конечно, нужно. но ни на шаг не приближает к решению задачи.
                                                                                          — смотря какая задача. Если нужно работать с com-портом — да, мигать светодиодом не обязательно. Если нужно чего-то выводить на дисплей — нужно хоть немного понимать, как дисплей работает.

                                                                                          А если мне нужна мигалка на светодиоде — то проще взять 2шт КТ315
                                                                                          — ну да. А если 315 нет, а 361 есть — задача не решается? А то я впихнул в те же места на плате такие же корпуса а оно не работает. Если человек плохо понимает, что он делает — инструмент не виноват.
                                                                              • +2
                                                                                //растерянно
                                                                                C для Ардуино, это сложно или неудобно?.. Там всего то нужно — четыре оператора да три команды
                                                                            • +2
                                                                              Раз не знаете, можете считать, что он не похож, ни на один, просто иногда встречаются похожие слова и знаки препинания.
                                                                              Можете посмотреть на примеры программирования машины тьюринга, оно точно мало на что похоже…
                                                                            • +4

                                                                              Зачем сразу школьников ПЛИСам учить. У нас что, все студенты уже с ними знакомы? Давайте может сначала студентов профильных и смежных специальностей этому обучим, и только потом школьников. У нас в институте были какие-то цифровые автоматы, так их реально 20% студентов понимала, а остальные сдали кое-как и забыли.

                                                                              • +1
                                                                                Поддерживаю. Вопрос «как мы вырастим школьников, которые бы умели проектировать (не программировать) сами микроконтроллеры?» лишён смысла. Школьники не должны уметь проектировать микроконтроллеры, так же как не должны уметь проектировать железнодорожные мосты.
                                                                                • 0
                                                                                  Сейчас, когда частота процессоров общего назначения перестала рости и становятся важными гетерогенные системы, которые включают как CPU, так и специализированные хардверные блоки, важно научить школьника видению системы как комбинации из хардвера и софтвера, а не как программирование растущих на дереве / привозимых с другого конца земли микропроцессоров.

                                                                                  Это часть картины мира, ее необязательно учить в деталях. Базовые кирпичики цифровой системы: логический элемент, тактовый сигнал, D-триггер. Двоичные числа. Концепция конечного автомата. Идея устройства процессора.

                                                                                  В 1980-х спрашивали, зачем школьников учить программированию. Вы считаете, что и программированию школьников учить не нужно?
                                                                                  • +2
                                                                                    Вы уж определитесь, хотите вы, чтобы школьники в вашем мире «проектировали микроконтроллеры» или же всё же ознакомились с фундаментальными идеями информатики. Это не совсем одно и то же, скажем так.
                                                                                    • +1
                                                                                      Всем может быть полезно ознакомится с фундаментальными идеями, для картины мира. А тем кто особо заинтересуется — можно построить на FPGA простое микропроцессорное ядро, это несколько сотен строк кода на Verilog. См. глава 7 вот такой книжки, которая доступна старшим школьникам: https://habrahabr.ru/post/317558/
                                                                                      • +1
                                                                                        «Школьники» для вас — это дети школьного возраста, интересующиеся (по крайней мере, по словам родителей) электроникой?

                                                                                        Я не имею ничего против внешкольных «мастерских архитекторов микросхем», но в общеобразовательной школьной программе для всех тому, что вы предлагаете, места нет.
                                                                                        • +2
                                                                                          Интересно, почему для всех нужно давать концепции переменной в программе, массивов, циклов while и for и подпрограмм (включая рекурсию) — а вот концепцию логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата, который изменяет состояние по тактовому сигналу — это не для всех? Вы можете написать в развернутой форме аргументы?
                                                                                          • +1
                                                                                            Вы в «мастерских» не только перечисленным занимаетесь (см. «мы повторим построенные схемы на языке описания аппаратуры SystemVerilog») и «построить простой процессор» совершенно не является фундаментальной идеей, а рекурсия, циклы, различные системы исчисления, автоматы и логика — очень даже являются (потому и включены в школьную программу).
                                                                                            • 0
                                                                                              В построении простого процессора появляется как минимум одна идея такого же уровня фундаментальности, как и рекурсия в софтвере — это конвейерная обработка.

                                                                                              Ну ладно, отложим процессор в сторону — это действительно не для всех.

                                                                                              Но вы согласны с утверждением: «концепции переменной в программе, массивов, циклов while и for и подпрограмм — это концепции одинаковой степени фундаментальности, как и концепции логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата»?

                                                                                              Насчет языка SystemVerilog — его подмножество можно объяснить за пару уроков. Писать логику лучше на нем. А как еще? Картинками (схемами и диаграммами состояний)? Ну это как изучать программирование не на Паскале или Питоне, а блок-схемами, кстати, так пытались делать для детей (к меня есть детская книжка начала 1980-х годов с блок-схемами).
                                                                                              • 0
                                                                                                «Это действительно не для всех» — о том и речь.

                                                                                                «Но вы согласны с утверждением» — никогда не утвержал обратного. Уже хотя бы потому, что я это преподаю.

                                                                                                «Можно объяснить за пару уроков» — многое можно объяснить за пару уроков. С той же логикой и автоматами замечательно работается на листочке в клеточку. В том числе и на контрольных. В том числе и в ВУЗе.
                                                                                                • 0
                                                                                                  Ну давайте возмем конкретику. Ниже — простейший конечный автомат. Схема и код на SystemVerilog. Вы утверждаете, что схема более наглядна чем код? Или что схема будет понята как что-то конкретное, а не абстрактное без «прощупывания» этого на FPGA плате?





                                                                                                  Код на 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
                                                                                                  


                                                                                                  • 0
                                                                                                    «Вы утверждаете, что схема более наглядна чем код?» — очень надеюсь, что это был сарказм. Да, утверждаю.

                                                                                                    «Не абстрактное без «прощупывания» этого на FPGA плате?» — без понятия, что вы имеете в виду под «прощупыванием», но совершенно точно уверен, что графика с тремя состояниями и шестью переходами намного нагляднее любого из форматов представления, предложенных на странице 177.
                                                                                                    • 0
                                                                                                      Графика на рисунке 3.30 нагляднее, когда ваш мозг уже связал ее с неким процессом во времени (сканировании нулей и единичек улиткой или, что эквивалентно, нажимании на кнопку на FPGA с работающим на частоте 0.5 герца тактовым сигналом). Да, тогда схема очевидна. Но если мозг не вопринимает диаграмму состояний как процесс во времени, то диаграмма будет восприниматься как абстрактная картинка. И код — способ реализации диаграммы состояний в реальном железе, работающем во времени.

                                                                                                      Ну ладно, я вашу позицию понял. Она может быть верна, но чтобы сделать окончательный вывод, мне нужно сделать чистый эксперимент на детях. Вот с этим конечным автоматом (и вообще классом автоматов для распознавания последовательностей), а также простым процессором. Что я и собираюсь сделать.
                                                                                                      • 0
                                                                                                        нагляднее, когда ваш мозг уже связал ее с неким процессом во времени

                                                                                                        То же можно сказать и о коде, пока нет знаний, как он будет выполняться — это просто набор букв.
                                                                                                        Зато схема компактна, а код слишком длинен, чтобы воспринимать его целиком.
                                                                                                        • 0
                                                                                                          С комбинационной логикой проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. С конечными автоматами — диаграммы переходов состояний прямо в конфигурацию ПЛИС не синтезируются (хотя такие тулы были в 1990-е), а вот код позволяет получить работающее железо через синтез и конфигурацию ПЛИС-а.
                                                                                                          • +1
                                                                                                            Согласен. Вводить код с клавиатуры — легче, чем рисовать на экране (чем бы то ни было). А главное — точнее.
                                                                                                            А вот воспринимать визуально — для КА — железно граф переходов, для логики — зависит от сложности выражения.
                                                                              • +3
                                                                                Все эти вещи типа ардуино нужны для того, чтобы научить школьника ДУМАТЬ. Над решением задачи, над алгоритмом, над оптимизацией. Низкий порог вхождения адекватен, ведь тот, кто научился ДУМАТЬ, уже будет что-то искать, разбираться, а если ему это не интересно, но он уже научился думать — он пойдет, станет врачом и придумает крутой современный инструмент для проведения операций, например.
                                                                                Так что пора попрощаться с мечтами, что все школьники, поигравшись с ардуино, станут программистами, системщиками и т.п., половине из них это не будет интересно, но в этом-то и кайф, те, кому интересно, познакомятся и с ПЛИС, и так далее.
                                                                                Для обучения все же немного дискретной логики нужно использовать, потом ардуино, или контроллер 8051, потом ПЛИС…
                                                                                • +1
                                                                                  Чтобы научить думать, надо начинать с кубиков, конструкторов Лего… Если ребёнок не умеет (не хочет, потому что неинтересно) решать детские задачи из кубиков, вряд ли его заинтересуют микроконтроллеры.
                                                                                • 0
                                                                                  Про обучение. Моя версия развития событий (если бы я решал проблему).
                                                                                  Есть нисходящее изучение и восходящее. Вначале проц, потом отдельные блоки, так и до транзисторов дойдем и наоборот.
                                                                                  Одним из недостатков обучения является отсутствие короткой связи между созданием и результатом (может растянуться на дни/недели), дальнейшее социальное одобрение (показать другим).
                                                                                  Сложность IDE способствует сложной кривой обучения.

                                                                                  Это было вводные.

                                                                                  Теперь упрощаем. Ориентирование — как на детей от 3-х лет, так и на представителей старшего поколения, которые любят говорить «я ничего не понимаю в технике» или «я боюсь сломать/повредить». То есть нужно заинтересовать?
                                                                                  Самый простая версия — игра. Причем никакой привязки (!) к микроэлектронике. Простенькая игрушка, хоть в стиле «3 в ряд». Можно подобрать и другие жанры (на самостоятельную разработку).
                                                                                  Как и в любой игре — есть уровни. Каждый следующий уровень — добавляется новые функции.
                                                                                  ***
                                                                                  Уровень, где уже мы не просто уничтожаем блоки, а пытаемся строить логические схемы, которые будут уничтожать блоки. (отсылка к игре Factorio)
                                                                                  ***
                                                                                  Как насчет теперь не просто играть в игру, а выполнять настоящие заказы? Например: «создать такую-то схему». Получим бонусы, потратим в той же соц.сети (это к примеру). Человеку опыт.
                                                                                  ***
                                                                                  Формируется онлайн-библиотека с детскими поделками. Постепенно появляются и более серьезные работы, которые вполне сгодятся и для реальных задач.
                                                                                  ***
                                                                                  Заводы заинтересованы в поддержке экосистемы и будут присылать свою рекламу: «всего за N$ вы можете распечатать любое издели из библиотеки или создать свое изделие».
                                                                                  — Подведем итоги:
                                                                                  — для решения проблемы нужен [эко]системный подход;
                                                                                  — быть готовым к тому, что решение может принести пользу и другим отраслям;
                                                                                  — использовать идеологию OpenSource и другие подобные подходы;
                                                                                  — игровой дружелюбный интерфейс;
                                                                                  — переход в реальность (игра тут выполняет роль песочницы);
                                                                                  И т.д.
                                                                                  Задача — заинтересовать людей. Больше интересующихся — больше тех, кто станет системщиками. Немалую важность играет и доступность материалов (тип изложения, язык).
                                                                                  Игровой подход может вообще избавить человека от знания какого-либо языка. Тот же тетрис — не требует перевода на другие языки. Тут названия блоков (в той же схемотехнике) — это всего лишь графический элемент.

                                                                                  P.S. возможно, кому-то мой подход может не понравится. Не спорю. Приглашают к аргументированной беседы. Также хочу увидеть критику моих подходов, ибо в «споре рождается истина». Не исключено, что я могу быть не прав. Либо проведу корректировку методов, чтобы они более подходили реальности. Это все всего лишь концепт.
                                                                                  Спасибо за внимание!
                                                                                  • +2
                                                                                    Упорству (или упрямству) Панчула можно позавидовать.
                                                                                    Однако, будь у него профессия, связанная с физикой ускорителей и элементарных частиц, он бы так же носился везде с идеями внедрения физики элементарных частиц в школьный курс? Ходил бы по школам с мини-ускорителями? Приставал бы к ITER'овцам, чтобы они организовали экскурсии для первоклашек?
                                                                                    • 0
                                                                                      Дык я не «пристаю», меня приглашают. Вот вчера пригласили на это заседание в Сан-Хосе. А в июле меня пригласили провести вот такое мероприятие на Детской Школе Юных Программистов в Новосибирске:

                                                                                      http://school.iis.nsk.su/lshyup-2017/masterskie-6

                                                                                      Мастерская №1 «Мастерская архитекторов микросхем»
                                                                                      Мастер: Юрий Панчул

                                                                                      Цифровое железо, от логических элементов до собственного процессора

                                                                                      Хотите узнать, как проектируют микросхемы в современных устройствах — от телефона до космического корабля? Последние 25 лет это делают с помощью методологии логического синтеза кода на языках описания аппаратуры. Именно эту технологию мы выучим в нашей мастерской и применим для проектирования собственных устройств.

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

                                                                                      Затем мы повторим построенные схемы на языке описания аппаратуры SystemVerilog и промоделируем их на программе-симуляторе. Но как мы можем воплотить их в микросхемы? Ведь заказ коммерческой микросхемы на фабрике очень дорогой? К счастью, существуют “перестраиваемые” программируемые логические интегральные схемы (ПЛИС), платы с которыми которые мы и будем использовать для наших занятий.

                                                                                      Помимо упражнений с арифметическими блоками и конечными автоматами, мы попробуем построить простой процессор, похожий по микроархитектуре на процессор Mongoose-V внутри космического корабля New Horizons, который год назад пролетел мимо Плутона.

                                                                                      Заодно мы изучим немного программирования на ассемблере, концепцию прерываний, сравним свой процессор с промышленными микроконтроллерами и встроенными микропроцессора, вплоть до микропроцессора EyeQ5 для самодвижущегося автомобиля, который планируется для выпуска в 2020 году.

                                                                                    • +2
                                                                                      Мое личное мнение — ни к чему такие сложности для обычного школьника. Даже Ардуино, не говоря уже об ПЛИС. Можно сделать вводный предмет, «Кибернетика» скажем, и там общим взглядом пройтись по базовым понятиям. С картинками, видео-роликами и прочим. Может даже несколькими лабораторными, но опять-таки, сугубо по личному желанию! Не нужно делать это принудиловкой для всех, толку от этого много не будет. Вот то что действительно необходимо и чего у меня, как и у большинства школьников эпохи 90-х не было, так это разнообразных кружков. Туда каждый может прийти по своему желанию. Скажем увидел школьник на уроке «Кибернетики» что это такое и заинтересовался. И пришел в соответствующий кружок. Мне в этом плане Япония очень импонирует. У них в школе тьма всяких разнообразных кружков. И ребенок после школы занят (а не курит и ищет приключений пока родители на работе) и польза получена. И не нужно тут рассказывать что если ребенок захочет, то он все равно найдет себе «приключений». На примере своего детства — я очень хотел попасть в кружок по интересам (та же электроника, робототехника, физика, музыка на конец). Но суровых реалиях выживания конечно же ничего подобного не было. И тут еще другой фактор влияет — в кружок ты приходишь по собственному желанию! Ты не чувствуешь того что тебя заставляют что-то делать. А для детей это очень важный фактор. И к примеру если бы в школе ввели курс электроники, я бы все равно его недолюбливал, так меня этим обязали. Хотя не у всех школьников такое представление, но боюсь что у большинства!)
                                                                                      • +2
                                                                                        Боюсь даже представить, на что может быть похож школьный курс «Введение в кибернетику». Когда вижу аналогичный курс про информатику — плакать хочется. А как вспомню курс про базы данных в универе… Так сложно и непонятно обьяснить простую тему… :(
                                                                                        • +2
                                                                                          У меня ощущение иной раз складывается, что школы и университеты созданы для того, чтобы вызывать отвращение к учебе в общем и даже к любимым предметам в частности.
                                                                                          Конечно, многое зависит от преподавателя. Один и тот же предмет у разных преподавателей — и первая группа ненавиди предмет, а другая готова до конца жизни им заниматься.
                                                                                          Но тут влияет и сама методика преподавания, материальная база, ее доступность, какие предметы и что они включают.
                                                                                          У меня в школе было так:
                                                                                          — вот вы можете увидеть микроскоп. Он так выглядет. Но пользоваться им нельзя, он один, еще повредите. Поэтому перерисовыем из книги картинки, как будто вы это увидели в микроскоп
                                                                                          • 0
                                                                                            А мы в школе пользовались микроскопами. И из лабы в лабу рисовали одни и те же клетки, которые видели в этой проклятой кожице лука. Красить её йодом мы перестали на второй же раз — ничего контрастного там не проявляется.
                                                                                            • 0
                                                                                              еще один недостаток.
                                                                                              Кожица лука не такая привлекательная. И многие лук вообще не любят. Да и клетки тут статичные.
                                                                                              Переиначим ситуацию. Раздать каждому по колбочке с инфузориями, дафниями и прочими. А потом устраивать природную ситуацию — пусть большие рачки едят маленьких. Все это будет в движении в одной капле, но столько экспы!
                                                                                              Пройдет время, на улице дождь. И тут:
                                                                                              — Дети, вот вам колбочки, давайте посмотрим что обитает в лужах!
                                                                                              И под микроскоп.
                                                                                              Тут и вопрос гигиены. И какие препараты (типа антибактериального мыла) влияют на бактерии. А еще можно поизучать дрожжи.
                                                                                              Все, успех биологии у школьников возрастет. Конечно, уничтожить интерес можно фразой:
                                                                                              — Каждому из вас нужно принести по 10 работ до конца недели, начертить схему дафнии, ее расписание дня. А еще провести анализ развития такой-то колонии грибков.
                                                                                              Интерес будет уничтожен. Тех, кого не унизит школа — будет уничтожать университет. И появятся инженеры, которые кое-как закончили «потому что родители сказали» и ненавидеть свой предмет. Но работы нет, предложат остаться в аспирантуру, да и уже сила привычки. Потом станет преподавать.
                                                                                              На новом витке этот преподаватель создаст новые задания, целью которых убить интерес. И история повторится.
                                                                                              • 0
                                                                                                Лука мы сожрали немерено. А вот рисовать его из лабы в лабу на оценку — совсем не прикалывало.

                                                                                                >Но работы нет, предложат остаться в аспирантуру, да и уже сила привычки

                                                                                                Работа есть. За неё плохо платят, но это определённо прибыльнее, чем аспирантура.
                                                                                      • 0
                                                                                        На сколько я помню введение в теорию вероятностей у нас было уже в 10 классе. Совместно с дифференциальными и интегральными счислениями. Только 2-3 человека из 30 понимали о чем речь. И это в математически-направленном классе. Не сказать что это было чем-то за облачно сложным, однако совершенно не понятным для чего это все нужно!) И если честно — не понимаю до сих пор зачем этим пичкали школьников!) Так же и в универе редкий препод вышки снисходил (еже ли сам-то знал) физический и практический смысл курса!)

                                                                                        Не важно на сколько сложная информация. Важно объяснить зачем она нужна и постараться подать ее максимально приближенно к практике. А предмет информатика, в моем понимании и в том виде в котором преподается в школах, изрядно устарел. Однако в наше время просто необходимо иметь базовые понятия по электронике.
                                                                                        • 0
                                                                                          Предмет информатика не может не устареть. Материал в нашей отрасли устаревает быстрее, чем технически возможно издать учебник.
                                                                                          • 0
                                                                                            Устаревают темы и инструменты а не предмет или наука. Те же концепции цикла или рекурсии как были актуальными, так и остаются.
                                                                                          • 0
                                                                                            Только 2-3 человека из 30 понимали о чем речь. И это в математически-направленном классе. Не сказать что это было чем-то за облачно сложным, однако совершенно не понятным для чего это все нужно!

                                                                                            Всё правильно. Математика пригождается только умным детям.
                                                                                            • +2
                                                                                              Ага. «Покупаем по 100, продаем по 200. Вот на эти 2% мы и живём» (ц) анекдот.
                                                                                          • +1
                                                                                            Помню, в универе, перед работой с альтерой, нам дали несколько лабороторок по промышленным микроконтроллерам logo фирмы siemence. Там все очень просто, триггеры да логические элементы, мне кажется что то подобное для детей в самый раз. Ну это касается именно схемной реализации, не на языке, но так наверное и надо, сначала на низком уровне все разобрать, и потом уже идти дальше.