Сегодня утром я заходил в офис калифорнийского отделения Ардуино. Там было межкомпанейское совещание по образовательным программам, на которое меня пригласил менеджер из 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 дисковод в качестве подставки для кофе. Это делать можно, но этим не исчерпывается суть дисковода. На ПЛИС можно делать самые разные схемы, начиная от простого элемента И и мигания лампочками схемотехническим способом, а не только прошивая большой процессор, спроектированный другими людьми.
Поделиться с друзьями
-->

Комментарии (141)


  1. Alcor
    22.03.2017 10:32
    +1

    Понятно, что для детей такой GUI не годится

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


  1. tmin10
    22.03.2017 10:51
    +2

    В altera quartus можно и руками схемы из элементов собирать и код на VHDL писать, изучали в университете, сложностей особо не было именно с GUI, главное понять логику работы.


    1. YuriPanchul
      22.03.2017 10:53

      Да и для старших школьников это не проблема. Было бы интересно показать FPGA младшим школьникам. Например для 10-летнего Quartus тяжел имхо.


      1. Rumlin
        22.03.2017 11:00
        +2

        Нужен определенный уровень понимания математики, логики, абстракции.


        1. YuriPanchul
          22.03.2017 11:12

          Ну то что второклассники осваивают двоичные числа — это факт, наблюдал. Логику и-или-нет тоже. Вот последовательностная логика идет более туго, но можно начать с упражнений с простыми D-триггерами вот такого рода, а потом объяснить как из этого вытекают конечные автоматы (но это для более старшего возраста ):


      1. REPISOT
        22.03.2017 12:10
        +3

        Да тут проблема не с интерфейсом. «Для 10-летнего» проблема — электроника в принципе. Вундеркинды не в счет. Они и Quartus освоят.


        1. SADKO
          22.03.2017 14:54

          Из личной практики, шестилетние дети с интересом играются в симулятор логики, интересные поделки перенося на хлеборезку…
          … да и с последовательной логикой нет проблем, из логики клепают триггеры, из триггеров регистры, это-же прикольно, бегущий огонёк

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

          PPS.Что с удивлением отметил некогда для себя, симуляторы им нравятся даже больше чем хлеборезка!


          1. Mogwaika
            22.03.2017 15:01

            Только после вашего коммента понял, что это хлеборезка, а не доска с «бородой» (beardboard) из проводов, а всего лишь пару букв поменял местами при первом прочтении и дальше не обращал внимания…


  1. iv_k
    22.03.2017 10:51
    +2

    Как мне кажется, дети достаточно хорошо могут освоить и полноценный софт. Покажите им последовательность действий для выполнения задания, они поначалу повторят по-попугайски, потом привыкнут и будут понимать что делают. А вот задание, чтобы заинтересовать — другой вопрос.
    Про ардуину. Человек, который начал программировать в их IDE очень тяжело переходит на «взрослые» IDE. Привык потому что. И не понимает того, что там под капотом делается.


    1. GreenStore
      22.03.2017 11:06

      > Человек, который начал программировать в их IDE очень тяжело переходит на «взрослые» IDE

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


      1. iv_k
        22.03.2017 11:15

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

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


        1. GreenStore
          22.03.2017 11:23

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


          1. iv_k
            22.03.2017 11:29

            > Не наблюдаете, значит им это просто не надо.

            Вот именно.

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

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


            1. GreenStore
              22.03.2017 11:35
              +1

              Учить что-то новое нужно с какой-то целью. С целью решения более сложных задач, с целью нахождения работы с большей зарплатой…

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


              1. iv_k
                22.03.2017 11:44

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

                Никакого. Но на работу с более менее приличной зарплатой требуется не знание Arduino IDE, а знание профессиональных инструментов. Поэтому вот так. Эту пропасть просто так не перепрыгнуть.


                1. GreenStore
                  22.03.2017 12:29

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


                1. Zenitchik
                  22.03.2017 17:46
                  +2

                  Более-менее приличную зарплату я в другой области деятельности получаю. Arduino — оно не для работы.


        1. vconst
          22.03.2017 11:25
          +2

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


      1. REPISOT
        22.03.2017 13:17

        Человек, решивший перейти с ардуино, открыв нрмальную IDE вроде CVAVR или AtmelStudio, сталкивается с тем, что вообще не знает что делать после создания проекта.

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

        И кстати,

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

        наоборот — тоже не вижу.


        1. vconst
          22.03.2017 13:38
          +1

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

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

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

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

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


          1. AleXP3
            23.03.2017 09:51

            В Леонардо продаются nano?


            1. vconst
              23.03.2017 09:54

              *в местном магазине: леонардо, нано…


        1. iig
          22.03.2017 19:29
          +2

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


          1. Zenitchik
            22.03.2017 21:58

            Можно и на PICах. Помигать лампочкой на них совсем не трудно.


  1. Rumlin
    22.03.2017 10:53

    Xilinx Vivado напоминает Eclipse. Скорее всего его можно доделать.У Texas Instruments подобно сделан CCS, но обвешан всякими плюшками типа Grace, GUI Composer
    http://mcuhq.com/11/msp430-launchpad-gui-composer-example
    image
    Очень наглядная вещь.


  1. Mogwaika
    22.03.2017 10:56
    +2

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


    1. YuriPanchul
      22.03.2017 11:01

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


      1. Mogwaika
        22.03.2017 11:27
        +2

        Я не исключаю полезности какого-нибудь курса на курсере, о том как помигать лампочкой на ПЛИС, я сам писал пару статей о том, как змейку на гирлянде запустить на spartan-е, но это было интересно полутора человекам, заинтересованным железками, а среди школьников будет совсем маленький процент тех, кому это интересно и кто это поймёт…


        1. Zenitchik
          22.03.2017 17:50

          Среди людей в принципе очень маленький процент тех, кому интересно и кто поймёт _вписать_нужное_. Предрасположенность человека к освоению _вписать_нужное_ не удастся выявить, пока не попытаешься его этому научить.


    1. fpir
      22.03.2017 13:12
      +2

      И иметь выпускников, которые не знают ни математики, ни физики… ни арудино, ни скриптов. Все кто знает математику либо вернулись к изучению если вовремя почувствовали её необходимость для скриптов, или ученики, без преувеличения, гениальных педагогов, которые смогли заинтересовать абстракциями математики.


  1. GreenStore
    22.03.2017 10:58

    А не начать ли работу над этой проблемой со стороны программных эмуляторов ПЛИС, симуляции требуемых эффектов, источников сигналов и Web-IDE, не требующее вообще никакой установки?

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


    1. YuriPanchul
      22.03.2017 11:03

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


      1. GreenStore
        22.03.2017 11:18

        Так пусть мигает светодиод, только в браузере. После браузера можно переходить на железо, если есть желание и возможность.

        Иначе, может быть и будет много заказов arduino-подобных-плат, только 90% из них просто будет пылиться на полке.


  1. Konachan700
    22.03.2017 11:06
    +2

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


    1. GreenStore
      22.03.2017 11:11

      А я думаю, что проблема сложности профессиональных IDE лежит в их универсальности. Как только уберем универсальность, так они сразу станут на порядки проще.


    1. Mogwaika
      22.03.2017 11:14
      +2

      Вы примерно симулинк с system generator описали, но это дорого.


    1. Andruwkoo
      23.03.2017 17:24

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


  1. yarric
    22.03.2017 11:10
    +2

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


    1. YuriPanchul
      22.03.2017 11:15
      -1

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


      1. Mogwaika
        22.03.2017 11:19
        +2

        А ещё нам нужно проектировать реакторы холодного термоядерного синтеза и придумывать и синтезировать лекарства от неизлечимых болезней, давайте на всякий случай готовить побольше специалистов с 1 класса…


      1. yarric
        22.03.2017 11:35
        +2

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


        1. iv_k
          22.03.2017 11:42
          +1

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

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


          1. yarric
            22.03.2017 11:59
            +1

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


            1. iv_k
              22.03.2017 12:23

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

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


              1. yarric
                22.03.2017 23:53
                +2

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


                1. YuriPanchul
                  23.03.2017 00:12

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

                  Или вы может вообще считаете, что в России не нужно дизайнить своих чипов, а только программировать готовые чипы от Intel, Apple, MediaTek, Broadcom, Qualcomm, Microchip и т.д. и т.п.?


                  1. Mogwaika
                    23.03.2017 01:12
                    +1

                    Вы упорно перечисляете разработчиков СБИС, хотя просто ПЛИСоводов в десятки раз больше…


                    1. YuriPanchul
                      23.03.2017 01:19
                      +1

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


        1. YuriPanchul
          22.03.2017 21:08

          Я когда-то читал, что в мире около 100,000 инженеров, которые используют verilog (ссылку нужно искать).

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

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


  1. old_bear
    22.03.2017 11:32
    +1

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


    1. yarric
      22.03.2017 11:40
      +1

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


      1. Rumlin
        22.03.2017 11:45

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


        1. yarric
          22.03.2017 12:04

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


          1. Rumlin
            22.03.2017 14:58

            Думаю контроллеры не осилят Java. Представить себе Java микроконтроллеры можно на примере Android телефонов — много ресурсов тратится на совместимость между платформами.


            1. GreenStore
              22.03.2017 15:02

              Причем здесь «много ресурсов тратится на совместимость между платформами» и Java?


              1. Rumlin
                22.03.2017 15:04

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


                1. GreenStore
                  22.03.2017 15:11

                  Если код выполняется на виртуальной машине, то затраты на его перенос стремятся к нулю. См., например https://habrahabr.ru/post/324550/ (Анализ исходного кода Another World).


                  1. Rumlin
                    22.03.2017 15:21

                    Вопрос в существовании виртуальной машины для микроконтроллера.


                    1. GreenStore
                      22.03.2017 15:29

                      Виртуальную машину можно написать на C.


                    1. bezdnacom
                      22.03.2017 17:22

                      Уже есть. (см. Jazelle)


                      1. Rumlin
                        22.03.2017 19:03

                        Судя по датам это надежды начала века что ява сможет всё


                        1. YuriPanchul
                          23.03.2017 00:06

                          Это надежды не «начала века», а еще 1973 года (виртуальная машина p-кода на которой исполняется Паскаль — https://en.wikipedia.org/wiki/P-code_machine


                          1. Rumlin
                            23.03.2017 19:21

                            тем более показывает что это неэффективно. Хотя и заманчиво.


            1. yarric
              22.03.2017 23:58
              +1

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


              1. bezdnacom
                23.03.2017 09:50

                Там же есть замена им — сигналы.


                1. iig
                  23.03.2017 11:36

                  В языке C? Сигналы бывают в POSIX-совместимых ОС.


                  1. bezdnacom
                    23.03.2017 12:03

                    … и их поддерживает C. Это те же прерывания. Или я что-то путаю.


                    1. iig
                      23.03.2017 12:10

                      Либо мы о разных вещах, либо у нас разная терминология.
                      1. Можно ли обработать сигнал SIGINT на AtMega8? (на языке С, естественно)
                      2. Какому сигналу соответствует прерывание от Timer0 в AtMega? DOS прерывание INT21? (раз сигналы и прерывания это одно и то же)


                      1. bezdnacom
                        23.03.2017 12:31

                        Ошибся я. Сигналы — обертка для прерываний предлагаемая стандартом POSIX. Поэтому, если бы на ATMega была POSIX-совместимая система, то можно было бы ловить сигналы.


                        1. bezdnacom
                          23.03.2017 12:39
                          -1

                          P.S. Нашел вот такое чудо — ?Clinux . Этакий Linux для микроконтроллеров и, возможно, там есть сигналы.


                        1. iig
                          23.03.2017 12:46
                          +1

                          Ну да ;) Только «язык C» и «POSIX-совместимая система» — очень слабо связанные понятия. На C можно писать и для не POSIX — там не будет сигналов. Или на микропитоне для esp8266 — там сигналов не будет, а прерывания будут.


                          1. iig
                            23.03.2017 12:53
                            +1

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


              1. iig
                23.03.2017 11:21

                Хм. Я писал обработчики прерываний для atmega8 на C и для esp8266 на С++ (в arduino ide) и не знал что их (прерываний), оказывается, нет.


                1. YuriPanchul
                  23.03.2017 11:29

                  Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)

                  это был коммент не вам а товарищу выше


                1. YuriPanchul
                  23.03.2017 11:29

                  Это бы коммента не вам, а товарищу выше


              1. YuriPanchul
                23.03.2017 11:29
                +1

                Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)


    1. Konachan700
      22.03.2017 11:44
      -1

      Не всегда так. Я пришел в программирование МК еще задолго до ардуино. И первым проектом, исключая хелловорлд, была платка для ATA-диска, которая запускает Secure Erase и показывает, сколько времени осталось примерно до завершения. Так вот я бы не осилил подобную штуку, если бы не генератор проектов в IDE — выбрал флажками, какие прерывания нужны, какие таймеры запустить, и так далее — оно все сгенерировало. С нуля очень сложно было разобраться.
      В ПЛИСах без графического редактора вообще делать нечего новичку. Я сам до сих пор хожу вокруг них и не решаюсь потыкать веточкой как следует.


      1. old_bear
        22.03.2017 13:08
        +5

        Нет ничего сложного в ПЛИС-ах. Это я вам как плисовод с 15-летним стажем говорю. Шутка.
        А если серьёзно, то область применения схемотехники слишком узка и нет особой необходимости обучать 100500 школьников её тонкостям. А для общего представления пары картинок в презентации более чем достаточно. Так же как 99% школьников вполне удовлетворены простой картинкой, которая объясняет принцип работы ядерного реактора.
        Но если речь идёт про твёрдую цель заняться схемотехникой профессионально, то визуальное HDL-программирование — это ловушка. Я лично знаю один замечательный проект, который скончался из-за срыва сроков по причине использования визуальной схемотехники. А использовалась там эта визуальная схемотехника из-за того, что исполнителей «так научили». Вот они и рисовали и перерисовывали до одурения схемы пока время не вышло.
        При этом хочу особо заметить, что во первых я вовсе не выступаю против графических средств для создания «рыбы». Особенно если речь идёт об облегчении работы по прикручиванию «ног», подключения сторонних ядер и прочего подобного. Но это не должно заменять сам рабочий процесс.
        И во вторых, я прекрасно осознаю ценность визуализации сложной схемотехники при документировании. Но эта визуализация должна получаться из HDL-я, а не наоборот.
        P.S. Заранее извиняюсь, но стараниями доброжелателей я ограничен одним сообщением в час и, вероятно, скоро это ограничение ужесточится до одного сообщения в день. Так что, если у вас есть желание развить это обсуждение конкретно со мной, то пишите в личку.


      1. YuriPanchul
        22.03.2017 21:16
        +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. YuriPanchul
      22.03.2017 21:10
      +1

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


  1. tmin10
    22.03.2017 11:57

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


    1. Konachan700
      22.03.2017 12:06

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


      1. Rumlin
        22.03.2017 15:02

        Для заинтересовать должны работать внешкольное образование, т.к. не всем эти знания нужны. На внешкольное образование вечно «денег нет» и всё остальное.


        1. YuriPanchul
          22.03.2017 21:21

          А всем ли нужно программирование? Об этом спрашивали в середине 1980-х годов при внедрении в школах информатики.

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

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


          1. Rumlin
            23.03.2017 21:18
            +1

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


            1. YuriPanchul
              24.03.2017 17:46
              +1

              Если логику привязать к конкретным поделками на макетной плате, она лучше усвоится, запомнится


              1. Zenitchik
                24.03.2017 22:11
                +1

                Не факт. Схемотехника — это не только логика, и не вся логика. Если на то пошло, то логику лучше закреплять через программирование, а не через макетирование.


    1. GreenStore
      22.03.2017 12:35
      +1

      > зачем вообще растить школьников, которые будут проектировать микропроцессоры

      Для FPGA много задач, не связанных с проектированием микропроцессоров.


    1. YuriPanchul
      22.03.2017 21:19
      +1

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

      Собственно в середине 1980-х это и спрашивали. Сейчас, когда частота процессоров общего назначения перестала рости и становятся важными гетерогенные системы, которые включают как CPU, так и специализированные хардверные блоки, важно научить школьника видению системы как комбинации из хардвера и софтвера, а не как программирование растущих на дереве / привозимых с другого конца земли микропроцессоров.


  1. Neuromantix
    22.03.2017 13:59
    -3

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


    1. vconst
      22.03.2017 14:03
      +1

      Если вы не знаете С, то даже с Ардуино вас ждет разочарование…


      1. Neuromantix
        22.03.2017 14:11
        -1

        Поэтому я плюнул и взял лабвью.


        1. Mogwaika
          22.03.2017 14:21
          +1

          И там нет встроенных скриптов и функций на Си-подобном языке?


          1. Neuromantix
            22.03.2017 14:28
            +1

            Возможно есть, но я мне они пока не понадобились.

            Машины тьюринга я в универе программировал, и это было куда понятнее множества современных языков.


            1. Mogwaika
              22.03.2017 14:45

              И да, тут выше предлагали варианты соединять проводками квадратики с триггерами и IP-корками в схематике, Вас такое программирование ПЛИСов не устроит?


              1. Neuromantix
                22.03.2017 14:48

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


                1. Mogwaika
                  22.03.2017 14:54

                  Ну не обязательно весь синхронный, там можно последовательно кучу логики наворотить и только в самом конце защёлкнуть медленным клоком…
                  Более того, LabView позволяет blackbox с Verilog-ом вставлять, так что я бы советовал вам с ним таки разобраться, можно крутые приборы с красивым гуём делать.


            1. vconst
              23.03.2017 12:55
              +1

              C — современный и непонятный язык?! Простите, а в универе вы машины тьюринга программировали на лампах?


              1. Neuromantix
                23.03.2017 13:29
                +1

                В кодах я их программировал.

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

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


                1. vconst
                  23.03.2017 13:43

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

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

                  Касаемо Хелловорда — скетч на С для Ардуинки, аналогичный вашему лабвьюшному, набрасывается за несколько минут, а график Эксель сам строить умеет.


                  1. Neuromantix
                    23.03.2017 14:47

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


                    1. vconst
                      23.03.2017 15:10
                      +1

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

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

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

                      Хотя, я думаю, изучить основы C на уровне пригодном для Ардуинки, вам лишним не будет, просто для собственного развития, что бы не быть «подобным флюсу». Это довольно простой язык, со строгой типизацией, в нем сложно «выстрелить себе в ногу» и тп.


                    1. iig
                      23.03.2017 15:14
                      +1

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

                      А если мне нужна мигалка на светодиоде — то проще взять 2шт КТ315
                      — ну да. А если 315 нет, а 361 есть — задача не решается? А то я впихнул в те же места на плате такие же корпуса а оно не работает. Если человек плохо понимает, что он делает — инструмент не виноват.


        1. vconst
          23.03.2017 09:57
          +2

          //растерянно
          C для Ардуино, это сложно или неудобно?.. Там всего то нужно — четыре оператора да три команды


    1. Mogwaika
      22.03.2017 14:19
      +2

      Раз не знаете, можете считать, что он не похож, ни на один, просто иногда встречаются похожие слова и знаки препинания.
      Можете посмотреть на примеры программирования машины тьюринга, оно точно мало на что похоже…


  1. scratch_book
    22.03.2017 14:04
    +4

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


    1. GeMir
      22.03.2017 16:38
      +1

      Поддерживаю. Вопрос «как мы вырастим школьников, которые бы умели проектировать (не программировать) сами микроконтроллеры?» лишён смысла. Школьники не должны уметь проектировать микроконтроллеры, так же как не должны уметь проектировать железнодорожные мосты.


      1. YuriPanchul
        22.03.2017 21:25

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

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

        В 1980-х спрашивали, зачем школьников учить программированию. Вы считаете, что и программированию школьников учить не нужно?


        1. GeMir
          22.03.2017 21:38
          +2

          Вы уж определитесь, хотите вы, чтобы школьники в вашем мире «проектировали микроконтроллеры» или же всё же ознакомились с фундаментальными идеями информатики. Это не совсем одно и то же, скажем так.


          1. YuriPanchul
            22.03.2017 21:43
            +1

            Всем может быть полезно ознакомится с фундаментальными идеями, для картины мира. А тем кто особо заинтересуется — можно построить на FPGA простое микропроцессорное ядро, это несколько сотен строк кода на Verilog. См. глава 7 вот такой книжки, которая доступна старшим школьникам: https://habrahabr.ru/post/317558/


            1. GeMir
              22.03.2017 21:55
              +1

              «Школьники» для вас — это дети школьного возраста, интересующиеся (по крайней мере, по словам родителей) электроникой?

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


              1. YuriPanchul
                23.03.2017 00:03
                +2

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


                1. GeMir
                  23.03.2017 00:18
                  +1

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


                  1. YuriPanchul
                    23.03.2017 00:30

                    В построении простого процессора появляется как минимум одна идея такого же уровня фундаментальности, как и рекурсия в софтвере — это конвейерная обработка.

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

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

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


                    1. GeMir
                      23.03.2017 00:40

                      «Это действительно не для всех» — о том и речь.

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

                      «Можно объяснить за пару уроков» — многое можно объяснить за пару уроков. С той же логикой и автоматами замечательно работается на листочке в клеточку. В том числе и на контрольных. В том числе и в ВУЗе.


                      1. YuriPanchul
                        23.03.2017 00:53

                        Ну давайте возмем конкретику. Ниже — простейший конечный автомат. Схема и код на 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
                        



                        1. GeMir
                          23.03.2017 01:01

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

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


                          1. YuriPanchul
                            23.03.2017 01:13

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

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


                            1. Zenitchik
                              23.03.2017 09:35

                              нагляднее, когда ваш мозг уже связал ее с неким процессом во времени

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


                              1. YuriPanchul
                                24.03.2017 17:50

                                С комбинационной логикой проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. С конечными автоматами — диаграммы переходов состояний прямо в конфигурацию ПЛИС не синтезируются (хотя такие тулы были в 1990-е), а вот код позволяет получить работающее железо через синтез и конфигурацию ПЛИС-а.


                                1. Zenitchik
                                  24.03.2017 22:16
                                  +1

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


  1. serafims
    22.03.2017 14:08
    +3

    Все эти вещи типа ардуино нужны для того, чтобы научить школьника ДУМАТЬ. Над решением задачи, над алгоритмом, над оптимизацией. Низкий порог вхождения адекватен, ведь тот, кто научился ДУМАТЬ, уже будет что-то искать, разбираться, а если ему это не интересно, но он уже научился думать — он пойдет, станет врачом и придумает крутой современный инструмент для проведения операций, например.
    Так что пора попрощаться с мечтами, что все школьники, поигравшись с ардуино, станут программистами, системщиками и т.п., половине из них это не будет интересно, но в этом-то и кайф, те, кому интересно, познакомятся и с ПЛИС, и так далее.
    Для обучения все же немного дискретной логики нужно использовать, потом ардуино, или контроллер 8051, потом ПЛИС…


    1. iig
      23.03.2017 00:14
      +1

      Чтобы научить думать, надо начинать с кубиков, конструкторов Лего… Если ребёнок не умеет (не хочет, потому что неинтересно) решать детские задачи из кубиков, вряд ли его заинтересуют микроконтроллеры.


  1. IvanTamerlan
    22.03.2017 17:23

    Про обучение. Моя версия развития событий (если бы я решал проблему).
    Есть нисходящее изучение и восходящее. Вначале проц, потом отдельные блоки, так и до транзисторов дойдем и наоборот.
    Одним из недостатков обучения является отсутствие короткой связи между созданием и результатом (может растянуться на дни/недели), дальнейшее социальное одобрение (показать другим).
    Сложность IDE способствует сложной кривой обучения.

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

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

    P.S. возможно, кому-то мой подход может не понравится. Не спорю. Приглашают к аргументированной беседы. Также хочу увидеть критику моих подходов, ибо в «споре рождается истина». Не исключено, что я могу быть не прав. Либо проведу корректировку методов, чтобы они более подходили реальности. Это все всего лишь концепт.
    Спасибо за внимание!


  1. ittakir
    22.03.2017 17:30
    +2

    Упорству (или упрямству) Панчула можно позавидовать.
    Однако, будь у него профессия, связанная с физикой ускорителей и элементарных частиц, он бы так же носился везде с идеями внедрения физики элементарных частиц в школьный курс? Ходил бы по школам с мини-ускорителями? Приставал бы к ITER'овцам, чтобы они организовали экскурсии для первоклашек?


    1. YuriPanchul
      22.03.2017 21:34

      Дык я не «пристаю», меня приглашают. Вот вчера пригласили на это заседание в Сан-Хосе. А в июле меня пригласили провести вот такое мероприятие на Детской Школе Юных Программистов в Новосибирске:

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

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

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

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

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

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

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

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


  1. Stan88
    22.03.2017 19:03
    +2

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


    1. iig
      22.03.2017 19:47
      +2

      Боюсь даже представить, на что может быть похож школьный курс «Введение в кибернетику». Когда вижу аналогичный курс про информатику — плакать хочется. А как вспомню курс про базы данных в универе… Так сложно и непонятно обьяснить простую тему… :(


      1. IvanTamerlan
        22.03.2017 21:26
        +2

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


        1. Zenitchik
          22.03.2017 21:55

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


  1. Stan88
    22.03.2017 20:59

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

    Не важно на сколько сложная информация. Важно объяснить зачем она нужна и постараться подать ее максимально приближенно к практике. А предмет информатика, в моем понимании и в том виде в котором преподается в школах, изрядно устарел. Однако в наше время просто необходимо иметь базовые понятия по электронике.


    1. Zenitchik
      22.03.2017 21:57

      Предмет информатика не может не устареть. Материал в нашей отрасли устаревает быстрее, чем технически возможно издать учебник.


      1. GeMir
        23.03.2017 01:12

        Устаревают темы и инструменты а не предмет или наука. Те же концепции цикла или рекурсии как были актуальными, так и остаются.


    1. Zenitchik
      22.03.2017 22:02

      Только 2-3 человека из 30 понимали о чем речь. И это в математически-направленном классе. Не сказать что это было чем-то за облачно сложным, однако совершенно не понятным для чего это все нужно!

      Всё правильно. Математика пригождается только умным детям.


      1. iig
        22.03.2017 23:10
        +2

        Ага. «Покупаем по 100, продаем по 200. Вот на эти 2% мы и живём» (ц) анекдот.


  1. Alsmir85
    23.03.2017 10:24
    +1

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


  1. darkkosinus
    24.03.2017 03:30

    А чем плох http://papilio.cc/?


    1. Roman_Popov
      24.03.2017 17:51

      Интересная штука, надо пристальнее посмотреть


    1. YuriPanchul
      24.03.2017 18:00
      +2

      Сама плата ничем не плоха, но вот подход «we simplify FPGA design by providing easy to use drag and drop circuit libraries» является спорным, причем буквально спорным, т.е. я лично спорил на этот счет с менеджером образовательных программ нашей компании в UK Робертом Оуэном. Я ему говорю «ни мы [процессорная группа MIPS Business Unit в Imagination Technologies, ни наши промышленные клиенты, не строят системы на кристалле и IP блоки, собирая их мышкой на экране из кубиков». Он «да ты ничего не понимаешь, студентам нравится возить мышкой по экрану».

      Дело в том, что кажущаяся легкость работы с GUI в данном случае — обманчива. Проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. А с даже небольшим усложнением дизайна (простой процессор) писать код на верилоге становится на два порядка поще, чем делать мышкой schematic entry. Порог с верилогом выше, но ненамного, особенно если сначала смотреть на схемы, синтезируемые из кода — см. напр. 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. Zenitchik
        24.03.2017 22:21
        +1

        Тут спорить не приходится. Можно водить мышкой по экрану, но потом всё равно приходится вбивать циферки, которые мышкой вводить… несколько неудобно. Очень быстро оказывается, что проще вбить вообще всё, а мышь только добавляет операций.


  1. MShekunov
    24.03.2017 17:51

    Вспоминаем книгу «Электроника. Шаг за шагом», автор Рудольф Сворень.
    Помните, там были прекрасные вставки цветных страниц со схемами/блоками? А в конце книги раздел про автоматику? Кажется, мне тогда было лет 12-13 (сейчас 32), когда я познакомился с этой книгой. И как раз самыми интересными мне казались схемы с логическими элементами. Отталкивала сложность сборки логических элементов на транзисторах. От транзисторов пришёл к К155. И как было бы здорово заполнить пробел длиною в 5 лет (пока не стал изучать МК в учебном заведении) возможностью работы с ПЛИС.
    Ардуино, электроника, ПЛИС — всё это хорошо, только в качестве внеурочного, кружкового изучения.