На днях я встретился и взял короткое видеоинтервью у Kathy Giori, Vice President Operations Arduino USA. Мы обсудили с Кати новое веяние, которое уже коснулось и Ардуино-коммьюнити: так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены, то пора делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog и микросхемы ПЛИС / FPGA, матрицы логических элементов с изменяемыми функциями. А для того, чтобы сделать освоение FPGA проще, стоит воскресить упражнения с микросхемами малой степени интеграции, популярные в 1970-х, в качестве приквела к современным FPGA. Все это закроет брешь между физикой и программированием, дискретными элементами и микроконтроллерами, транзистором и Ардуино.

FPGA и платы можно использовать от любого производителя (Xilinx, Altera, Lattice, Digilent, Terasic), все что я пишу ниже, не имеет привязки к той или иной компании.

В разговоре с Кати принимала участие преподаватель Стенфорда Светлана Хутка, которая рассказала Кати об эксперименте по бесплатному обучению школьников использованию FPGA в Киеве, силами преподавателей-энтузиатов из нескольких киевских вузов. После этого я поделился с Кати планами проведения следующего такого эксперимента на известной еще с советских времен летней школе юных программистов в Новосибирске, а также поговорил с другими присутствующими товарищами из Ардуино-коммьюнити о внедрении FPGA в двух школах и одном коледже Silicon Valley.



Плата c FPGA, которую сейчас рекомендует Кати, и которую я несколько переделываю, чтобы приспособить к своим нуждам (про это будет отдельный пост):



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

Обсудим это детально:

1. Зачем учить школьников языкам описания аппаратуры и использованию ПЛИС? Обоснование программы.

В картине мира, представляемой школьным образованием, существует “слепое пятно” в области принципов проектирования цифровой электроники, между физикой и программированием. Курсы роботики и ардуино это слепое пятно не закрывают, так как сводятся к программированию готовых чипов. Упражнения с дискретными элементами и микросхемами малой степени интеграции, хотя и эффективны во введении в основные принципы, базируются на технологиях 1960-1970-х годов и не содержат привязки к современному проектированию. Слепое пятно можно закрыть с помощью введения элементов языков описания аппаратуры (ЯОА) и доступные для школьного экспериментирования микросхемы ПЛИС (программируемые логические интегральные схемы) — матрицы реконфигурируемых логических элементов. Тем самым картина мира становится цельной, и способствует созданию среды для появления большого количества молодых инженеров, имеющих представление о всех сторонах современных микросхем для приложений типа самоуправляемых автомобилей, и способных в будущем специализироваться для проектирования того или иного аспекта таких устройств.

Введение ЯОА и ПЛИС в школьную программу также хорошо привязывается к курсу математики и физики физматшкол — булевская алгебра, арифметические схемы, конечные автоматы.

Заметим, что ЯОА и ПЛИС, несмотря на поверхностное сходство с программированием, используют другие базовые концепции:

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

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



2. Общий план таких курсов:

  • Секция 1. Соединение с физикой, с лабораторными на дискретных компонентах.

  • Секция 2. Основы цифровой логики и арифметики, с лабораторными на микросхемах малой степени интеграции.

  • Секция 3. Проектирование схем на основе синтеза языка описания аппаратуры, с лабораторными на ПЛИС Xilinx или Altera.

  • Секция 4. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.

  • Секция 5. Микроархитектура: строим процессор.

  • Индивидуальный проект: интеграция датчика или другого периферийного устройства с схемой, реализованной в ПЛИС.





3. Итоги киевского эксперимента.

Развернутый текст с итогами киевского эксперимента написал преподаватель Киевского Политехнического Института Евгений Короткий. Я дополню его своими личными выводами. Предыстория — посты на Хабре и Geektimes — 1, 2, 3, 4). В тех постах были заданы вопросы. Вот какие получились ответы:

  1. Гипотеза, что школьники могут использовать Verilog, подтвердилась

  2. Verilog также оказался достаточному количеству школьников интересен (до Киева некоторые коллеги в этом сомневались, утверждая, что детям более интересны проекты типа роботической руки с микроконтроллером)

  3. Идея, что перед использованием Verilog полезно показать школьникам логические элементы и D-триггер на микросхемах малой степени интеграции — не то чтобы однозначно подтвердилась, но получила большее обоснование.

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

  5. Довести школьников от нуля до конечных автоматов, реализующих протоколы типа SPI — за одну неделю по-видимому нереально, а вот до конечного автомата кодового замка или светофора — реально.

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

  7. Во время киевского эксперимента мы пробовали рассказать и про FPGA, и про встроенные процессоры (MediaTek MT7688, находящийся где-то посередине между Ардуино и Интел Галилео или Расбери Пай по производительности). Потом мы сделали хакатон (в Киевско-Могилянской Академии) и пронаблюдали, сколько школьников выбрали для хакатона проект с FPGA и сколько — проект с встроенным процессором. Выяснилось — 50 на 50. Это интересно — до хакатона у меня не было вообще никакого предположения, какая будет разбивка.

  8. У меня было опасение, что школьников может запутать пользовательский интерфейс в Xilinx Vivado, с кучей опций и элементов интерфейса. Но оказалось, что школьникам все равно — сложный GUI их не пугает.

  9. Большинство школьников используют Windows. У меня вместе с моим коллегой Александром Белицем есть идея заготовить для таких мероприятий пару десятков bootable SSD-драйвов с Линуксом (Ubuntu или CentOS) и носить их от мероприятия к мероприятияю. Алекс даже написал скрипт для клонирования таких драйвов. Ubuntu более дружелюбен, но CentOS более официально поддерживается средствами автоматизации проектирования схем на FPGA, в частности Xilinx Vivado и Altera Quartus. Можно ли делать одновременно ликбез по Линуксу и ликбез по Verilog / FPGA во время летнего лагеря? Непонятно, но это можно попробовать.

  10. Оказывается, Xilinx Vivado нещадно глючит приконфигурации Artix-7 FPGA, если использовать дешевые плохо экранированные микро-USB кабели. По какому-то мистическому наитию я перед поездкой в Киев засунул в чемодан дюжину качественных шнуров, и это спасло семинар.

  11. У меня была идея, что использование breadboardable FPGA modules (FPGA плат, которые втыкаются в макетные платы), например Digilent Cmod A7 35T, может облегчить школьникам переход с упражнений с микросхемами малой степени интеграции на упражнения с FPGA. Верна ли эта идея, я так и не понял. Возможно использование более крупных плат с богатым набором периферии, например Terasic DE10-Lite, будет ничуть не хуже. Все равно при переходе с микросхем малой степени интеграции (CMOS 4000 или 74HC) на FPGA — нужно менять напряжение питания (с 9 V или 5 V на 3.3 V), поэтому нельзя воткнуть Cmod A7 вместо скажем CMOD 4013 в одну и ту же макетную плату с лампочками и кнопками, и ожидать, что все будет продолжать работать.

  12. Я подтвердил свое наблюдение, что для проведения краткосрочных (1 неделя) образовательных мероприятий критично, чтобы на месте находилась бригада студентов местного университета, которая бы осуществляла менторство школьников. В киевском случае такую бригаду обеспечил преподаватель Киевского Политехнического Института Евгений Короткий.

  13. Стало более-менее понятно, в каких случаях и в каком объеме стоит включать в программу подобных мероприятий часть про уровень транзисторов и про производства микросхем. Эту часть преподавал доцент Киевского Национального Университета Александр Барабанов, переводчик материалов по курсу Nanometer ASIC для студентов. По-видимому, этот материал стоит в полном объеме включать в годовой курс для школьников, в небольшом — в двухнедельный курс в формате летнего лагеря, но при продолжительности меньше недели нужно наверное сразу (в течение 1 часа после начала) давать школьникам микросхемы малой степени интеграции (например CMOS 4000) и про транзистор упомянуть вскользь, в виде «транзистор — это устройство, в котором ток течет из пукта A в пункт B, если в C стоит напряжение 1 (или 0). Из транзисторов можно строить логические элементы И, ИЛИ, НЕ (показать на картинку)».

  14. Во время лекций перед большой аудиторией школьникам можно показывать схемы, собранные на макетной плате из микросхем малой степени интеграции. Это наглядно, вызывет интерес, а также не требует подключения конструкции к компьютеру — только с батарейке 9 V. Я показывал три таких схемы, наиболее критичных для понимания — логический элемент XOR, комбинационный 4-битный сумматори D-триггер с частотой порядка 1 Герц (т.е. такт в секунду).

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

  16. Для мероприятий подлиннее можно использовать индивидуальные проекты и проверочные работы.



Код на GitHub использованный для киевского мероприятия



4. Источники информации для разработки будущих материалов.

Источники информации для преподавателей физматшкол, которые по-видимому будут разрабатывать большую часть детальных материалов, после начальных экспериментов со школьниками на Украине, в России и в Silicon Valley:

  1. Учебник Дэвида Харриса и Сары Харрис “Цифровая схемотехника и архитектура компьютера”, 2-е издание, русский перевод. Этот учебник можно скачать бесплатно, см. статьи на Хабре о нем — 1, 2, 3. Недавно также вышло новое бумажное издание с улучшенной цветной полиграфией

  2. Слайды для преподавателей, дополнение к учебнику Харрис & Харрис. Бесплатное скачивание.

  3. Материалы по курсу From NAND to Tetris, который был создан в Израиле и внедрен в некоторые американские университеты. При этом, имхо, от курса стоит использовать идеи и скелет, но реализацию делать на подмножествах “взрослых” средств проектирования, а не искуственных “детских” средствах, как делает это курс. Ключевые части скачиваются бесплатно.

  4. Книга Чарльза Петзольда “Код”, которая адекватно объясняет на пальцах многие концепции и уровень которой соответствует школьному (идея подсказана преподавателем киевской школы ОРТ Сергеем Дзюбой). Опять же, с моей точки зрения, из книги стоит использовать идеи и скелет, но бОльшую часть материала заменить на более корректный (вместо защелок (D-latch) использовать D-триггеры (D-flip-flop)) и современный, например вместо accumulator-based 6800 и архаичного 8080 использовать подмножество RISC-архитектуры.

  5. Наборы для конструирования схем на макетной плате на основе дискретных компонент и микросхем малой степени интеграции от американской компании ETron Circuit Labs, российской компании Киберфизика, украинской компании Радиомаг (я могу объяснить различия между этими наборами в комментариях, если кому интересно).

  6. Материалы компаний-производителей микросхем ПЛИС (Xilinx, Altera) и образовательных плат с микросхемами ПЛИС (Digilent, Terasic).

  7. Примеры кода, контрольные работы и рекомендации по проектам, разработанные Антоном Моисеевым, Юрием Панчулом, Евгением Коротким, Александром Барабановым и другими инженерами компаний и преподавателями университетов для различных мероприятий в Калифорнии, Казахстане, России и Украине.





5. План на будущее номер 1. Формат годового курса на 35 учебных часов, раскиданных на учебный год по часу в неделю

  1. От физики к дискретным элементам

    1. Что такое ток, напряжение и сопротивление. Как устроена макетная плата. Упражнение: первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов. Переменные резисторы, фоторезисторы.

    2. Что такое транзистор. Обзор переключающих элементов от реле, радиоламп, дискретных транзисторов до транзисторов на микросхемах. Упражнения с тиристором (SCR — silicon controlled rectifier — нагляднее чем транзистор), биполярным p-n-p и n-p-n транзисторами.

    3. Контрольная работа.

  2. От дискретных элементов к комбинационной логике

    1. Булева алгебра и алгебра логики. Операции, выражения, аксиомы и тождества, включая законы де Моргана. Таблицы истинности.

    2. Комбинационные логические элементы И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ-ИЛИ (AND, OR, NOT, NAND, NOR, XOR). Как комбинационные элементы строятся из транзисторов. Упражнение: построить AND, NAND или NOR из дискретных элементов.

    3. Логические элементы в микросхемах малой степени интеграции. Индивидуальное упражнение: каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Что такое такое подтягивающие резисторы и зачем они нужны. Добавляем к предыдущему упражнению кнопки и подтягивающие резисторы.

    4. Контрольная работа.

  3. Двоичная арифметика и ее реализация

    1. Двоичные числа. Преобразование из двоичных в десятичные числа и наоборот. Операции сложения и умножения. Отрицательные числа и дополнительный код.

    2. Реализация полусумматора и полного сумматора с помощью логических элементов. Перенос. Многоразрядный сумматор с последовательным переносом. Упражнение на макетной плате. Упоминание о длинной временной задержке и схемах с более оптимальной задержкой.

    3. Использование 4-битного полного сумматора CMOD 4008. Построение из него 8-битного сумматора и схемы вычитания. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.

    4. Контрольная работа.

  4. Последовательностная логика

    1. Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.

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

    2. Схемы с внутренним состоянием. Построение RS-защелки из логических элементов NAND. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.

    3. Последовательностные блоки — счетчик (CMOS 4029) и сдвиговый регистр (4015). Семисегментный индикатор и его драйвер 4511. Упражнения с этими микросхемами.

  5. Экзамен.

  6. От микросхем малой степени интеграции к ПЛИС — комбинационная логика

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

    2. Продолжение изучения языка Verilog. Типы данных, выражения, присваивания. Always-блоки и основные операторы. Упражнение: вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.

    3. Продолжение изучения языка Verilog. Иерархия модулей. Упражнение: построение мультиплексоров и сумматоров из подмодулей. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.

    4. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек. Упражнение: создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования и программы GTKWave для просмотра временных диаграмм.

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

    6. Контрольная работа

  7. Проектирование последовательностной логике на языке Verilog с реализацией на ПЛИС

    1. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog.

    2. Упражнения: реализация D-триггера, счетчика и сдвигового регистра на ПЛИС. Анализ результатов программы статического анализа о максимальной частоте. Демонстрация: использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.

    3. Концепция конечного автомата. Диаграммы изменения состояний. Упражнения: конечные автоматы светофора и кодового замка.

    4. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце курса) по интеграции датчиков и других периферийных устройств с платой c ПЛИС. Самостоятельная работа: индивидуальный проект, модифицирующий поведение одного из примеров с последовательностной логикой: счетчика, сдвигового регистра или конечного автомата.

    5. Концепция конвейерной обработки. Сравнение конвейерной реализации арифметических блоков, вычисляющих степень и квадратный корень.

    6. Контрольная работа.

  8. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.

    1. Концепция фон-Нейманновской машины. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Упражнение с симулятором процессора на уровне инструкций — MARS MIPS. Простые программы на ассемблере для вычисления выражений.

    2. Условные и безусловные переходы, метки, циклы. Пример: вычисление чисел Фибоначчи. Индивидуальное упражнение на основе модификации примера.

    3. Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Упражнение: программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.

    4. Контрольная работа.

  9. Микроархитектура: строим процессор

    1. Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.

    2. Продолжение 9.1

  10. Представление студенческих проектов по интеграции с датчиками

  11. Экзамен





6. План на будущее номер 2. Формат двухнедельного летнего лагеря

  1. Знакомство с макетной платой, сопротивлениями и логическими элементами.

    1. Первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов.

    2. Комбинационные логические элементы. Каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Входы подключаются к питанию и земле переходниками, и входы и выходы подключаются к светодиодам.

    3. Вариант упражнения 2 с кнопками и подтягивающими резисторами, с объяснением их функции.

  2. Знакомство с двоичной арифметикой

    1. Использование 4-битного сумматора на микросхеме CMOD 4008.
      Построение 8-битного сумматора из двух 4-битных.

    2. Построение схемы вычитания используя тождество -a == ~ a + 1

  3. Знакомство с последовательностной логикой

    1. Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.

    2. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.

    3. Использование сдвигового регистра для генерации “бегущих огоньков” на основе микросхемы CMOS 4015.

    4. Строим счетчик (CMOS 4029) и подсоединяем к нему семисегментный индикатор через драйвер 4511.

  4. Знакомство с ПЛИС (программируемой логической интегральной схеме) — матрицей реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Типы данных языка Verilog, выражения, присваивания. Always-блоки и основные операторы.

    1. Синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.

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

    3. Продолжение изучения языка Verilog. Иерархия модулей. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек.

    4. Упражнение: построение мультиплексоров из подмодулей.

    5. Создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования, а также программы GTKWave для просмотра временных диаграмм.

  5. Проектирование последовательностной логике на языке Verilog. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog. Анализ результатов программы статического анализа о максимальной частоте.

    1. Реализация счетчика на ПЛИС.

    2. Реализация сдвигового регистра на ПЛИС.

    3. Использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.

    4. Модификация упражнения 2 или упражнения 3 на основе индивидуального задания.

  6. Концепция конечного автомата. Диаграммы изменения состояний. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце школы) по интеграции датчиков и других периферийных устройств с платой c ПЛИС.

    1. Конечный автомат “улыбающаяся улитка”.

    2. Конечный автомат кодового замка на основе индивидуального задания.

    3. Конечный автомат для работы с датчиком освещения.

  7. Архитектура процессора: вид вычислительной установки со стороны программиста. Концепция фон-Нейманновской машины. Использование симулятора процессора на уровне инструкций MARS MIPS.

    1. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Простые программы для вычисления выражений.

    2. Условные и безусловные переходы, метки, циклы. Программа вычисляющая числа Фибоначчи.

    3. Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.

  8. Микроархитектура: строим процессор.

    1. Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.

    2. Больше о процессорах.

  9. Работа над индивидуальным проектом

  10. Сдача индивидуального проекта





Приложение A. Что такое язык описания аппаратуры Verilogи как он связан с проектированием микросхем

Из поста на Geektimes Оруженосцы микроэлектроники. Видеорепортаж с конференции по проектированию электроники в Сан-Франциско.

В последние 25 лет дизайн микросхемы чаще всего пишется на языке описания аппаратуры Verilog (в Европе и у военных — VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы.

Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. — получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы. Самые известные фабрики этого типа принадлежат компании Taiwan Semiconductor Manufacturing Company или TSMC.




Приложение B. Что такое ПЛИС / FPGA и почему изучение ПЛИС нельзя заменить более глубоким изучением Ардуино или Расберри Пай

Из поста на Хабре Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:

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

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

Внизу — схема простейшего блока FPGA, в который входит look-up table (LUT) и flip-flop. Правда в этой схеме не показаны мультиплексоры, которые меняют функцию ячейки, и соединения с конфигурационной памятью.



Диаграммы, иллюстрирующие структуру FPGA:



И еще одна:






Приложение C. Отрывок из заметки про конференции в Томске про то, как образование школьников в данной области привязано к образованию студентов

Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.

К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге. Игнорируется возможность интеграции концепций HDL и RTL в программы физматшкол, где их можно было бы привязать к математической логике, теории конечных автоматов и электричеству, подобно тому, как обогатило советские школьные программы введение в середине 1980-х годов элементов программирования.


Помимо конференции в Томске и планируемого следующего эксперимента в июле а Новосибирске, который поддерживается Новосибирской Летней Школой Юных Программистов, есть еще ранний план организовывать такой эксперимент в Казахстане (этом в частности заинтересована Венера Жаналина посещавшая киевский семинар).



Приложение D. Примеры простейшего кода на Verilog и порождаемые им схемы

module adder
(
    input      a,
    input      b,
    input      carry_in,
    output reg sum,
    output reg carry_out
);

    reg p, q;

    always @*
    begin
        p = a ^ b;
        q = a & b;

        sum       = p ^ carry_in;
        carry_out = q | (p & carry_in);
    end

endmodule



module counter
(
    input             clock,
    input             resetn,

    input             load,
    input      [15:0] load_data,
    output reg [15:0] count
);

    always @ (posedge clock or negedge resetn)
    begin
        if (! resetn)
            count <= 0;
        else if (load)
            count <= load_data;
        else
            count <= count + 1;
    end

endmodule



Как оно работает:



Подробное объяснение — в тексте «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».

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

Поделиться с друзьями
-->

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


  1. Andy_Big
    06.06.2017 09:35
    +3

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

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


    1. YuriPanchul
      06.06.2017 09:42

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


      1. Andy_Big
        06.06.2017 10:00
        +2

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

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


        1. olartamonov
          06.06.2017 10:08

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


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

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


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

          Это не значит, что на выходе из школы получатся профессиональные разработчики ПЛИС (точно так же, как на выходе из школы не получаются профессиональные биологи и физики, хотя биологию и физику там преподают).


          1. Mikeware
            06.06.2017 10:13

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


            1. olartamonov
              06.06.2017 10:14
              +1

              Сначала дополнительное и физмат-школы, а там посмотрим.


              1. Mikeware
                06.06.2017 10:36
                +1

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


                1. olartamonov
                  06.06.2017 10:46
                  +1

                  А какие-то школьные предметы, преподающиеся после шестого класса, нужны всем? Ну, кроме физкультуры?


                  1. Andy_Big
                    06.06.2017 10:53

                    Давайте утрировать до конца — учить нужно только базовому письму и чтению, все остальное — лишнее :)


                  1. Mikeware
                    06.06.2017 10:57

                    до какой глубины нужно изучать физику, химию, биологию? или, упасигосподи®, историю с обществознанием и прочие культурологии? давайте рисованию учить до уровня института Сурикова, пению до уровня Гнесинки? ну и физкультуре не менее чем до мастера спорта по 6-7 видам?


                    1. olartamonov
                      06.06.2017 11:04

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


                    1. sadr0b0t
                      06.06.2017 12:27

                      А что в этом плохого? Гостью из будущего помните?


                      1. Mikeware
                        06.06.2017 12:32

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


                  1. impetus
                    06.06.2017 12:24
                    +1

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

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


                    1. Mikeware
                      06.06.2017 12:28

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


                    1. olartamonov
                      06.06.2017 13:26
                      +1

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

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


                      1. Mikeware
                        06.06.2017 13:37

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

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


                        1. olartamonov
                          06.06.2017 13:39

                          Во-первых, в тексте заметки про физматшколы сказано прямо.

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


                          1. Mikeware
                            06.06.2017 14:12

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


                            1. olartamonov
                              06.06.2017 14:14

                              На колу мочало, начинай сначала.

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

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

                              Потому что не надо путать школу с ПТУ. Школа не готовит «востребованных обществом специалистов».


                              1. Mikeware
                                06.06.2017 14:17

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


                                1. olartamonov
                                  06.06.2017 14:20

                                  Вы почему-то ненужность ПЛИС обосновываете тем, что «программист ПЛИС» не востребован как профессия, а нужность биологии никак в вашей же голове с профессией «биолог» не связывается.

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


                                  1. Mikeware
                                    06.06.2017 14:57

                                    биологов нужно чуть больше, чем разработчиков ПЛИС…


                          1. rexen
                            06.06.2017 22:43

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


                        1. BigBeaver
                          06.06.2017 13:46

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


                          1. Mikeware
                            06.06.2017 14:05

                            «проходят,» а не «изучают»
                            вообще, нуклеиновые кислоты я приплел как цитату из «вид с высоты» Азимова:

                            Вид с высоты
                            «В юности я черпал знания в публичных библиотеках. По неопытности читал все без разбора, беря книги с полок подряд — от первой до последней.Обладая досадно хорошей памятью, я приобрел таким образом множество сведений, которые потом безуспешно старался забыть. Однако одним из ценных следствий моего беспорядочного чтения было то, что я полюбил научную литературу сильнее беллетристики. Я очень увлекался книгами по истории, но больше всего мне нравилось изучать труды по естественным и точным наукам.В средней школе я еще делил свои привязанности между историей и точными науками, а при поступлении в колледж я с головой окунулся в науку.В колледже я узнал, что среди главных научных дисциплин мне нужно выбрать «главнейшую» для меня самого. Я заигрывал с зоологией, а потом, на втором курсе, окончательно остановился на химии. Это означало, что мне всего-навсего надо было слушать по одному курсу химии в каждом семестре. Но, поступив в аспирантуру, я понял, что химия химии рознь; для подготовки диссертации надо было выбрать из всех разделов химии один.Постепенно справившись с некоторой присущей мне инертностью, я наконец занялся биохимическими исследованиями. За работу в этой области я получил звание доктора философии и без промедления приступил к преподаванию биохимии в медицинском институте.Но даже эта область знаний оказалась слишком обширной… От беспорядочного чтения — к научной литературе, затем к науке, к химии, к биохимии, и это было еще не все. Занимаясь научной работой, я должен был ограничиться участком в одном из уголков сада — биохимии — и начал трудиться над нуклеиновыми кислотами…»©


                            1. BigBeaver
                              06.06.2017 14:07

                              В школе все проходят и ничего не изучают, если уж так рассуждать))


                              1. Mikeware
                                06.06.2017 14:09

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


                                1. BigBeaver
                                  06.06.2017 14:23

                                  Можно заменить «нуклеиновые кислоты» на «натуральные числа» или на что угодно еще, и смысл утверждения не изменится.


          1. Andy_Big
            06.06.2017 10:32

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

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

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

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


            1. olartamonov
              06.06.2017 10:39

              У них гораздо более широкая сфера применения, гораздо выше шанс, что может пригодиться в жизни


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

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

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

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


              Это будет отписка для галочки, а не преподавание.


              1. Mikeware
                06.06.2017 10:45
                +1

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


              1. Andy_Big
                06.06.2017 10:47

                Вы путаете школьное образование со специальным техническим

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

                Это да, невостребованность знания русского языка очень заметна в русскоязычном интернете :)


                1. olartamonov
                  06.06.2017 10:53

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

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


                  1. Andy_Big
                    06.06.2017 11:29

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


                    1. olartamonov
                      06.06.2017 11:31

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

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


                      1. Andy_Big
                        06.06.2017 11:44

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

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

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

                        Откуда я знаю почему. Я про программирование ничего не писал.


                        1. olartamonov
                          06.06.2017 11:45

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


                          1. Andy_Big
                            06.06.2017 12:04

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


              1. ru_vlad
                06.06.2017 15:53

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

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

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


              1. borec1
                06.06.2017 20:13

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

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

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

                Вы какую-то конкретную школу имели в виду?


                1. olartamonov
                  06.06.2017 20:39

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


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


                  1. borec1
                    06.06.2017 20:56

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

                    Все-таки у нас с вами какие-то разные школы рядом находятся. В вашей программирование на х86, в моей — просто физика и биология.


        1. YuriPanchul
          06.06.2017 10:16

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

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

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

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


          1. Andy_Big
            06.06.2017 10:39
            +3

            STM — это точно такое же программирование, как и Ардуино

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


            1. olartamonov
              06.06.2017 10:45

              А школьникам это зачем надо? Ну то есть какие знания о принципах устройства окружающего мира им принесёт тщательное изучение RM0008?

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

              P.S. И, кстати, STM32 тоже позволяет практически ничего не знать о самом микроконтроллере. Развернул RTOS — и вперёд.


              1. Andy_Big
                06.06.2017 11:09
                +1

                Ну да, изучение FPGA гораздо более уместно, чем умение рассчитать DC/DC :)


                1. olartamonov
                  06.06.2017 11:12

                  Вообще да. Это я вам как человек, умеющий делать обе вещи, говорю.


            1. dernuss
              06.06.2017 10:47

              Во первых кое какую периферию настраивать в ардуино всё таки надо:

                  pinMode(12, OUTPUT);
                  digitalWrite(12, LOW);
              

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


              1. Andy_Big
                06.06.2017 11:00

                Во первых кое какую периферию настраивать в ардуино всё таки надо

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

                Я в курсе этой утилиты.


                1. dernuss
                  06.06.2017 11:07

                  Это не настраивание периферии микроконтролера :)

                  А что это тогда?


                  1. Andy_Big
                    06.06.2017 11:20

                    Это использование одного из «кубиков» Ардуины. По сути то же, что и галочки в CUBEmx.


                    1. dernuss
                      06.06.2017 11:23

                      Эта строчка pinMode(12, OUTPUT);

                      настраивание цифрового порта на выход, а цифровой порт относится к периферии микроконтроллера.


                      1. Andy_Big
                        06.06.2017 11:34

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


                        1. dernuss
                          06.06.2017 12:42

                          И что, я данной функцией не настрою порт на выход?
                          В любом случае я настраиваю периферию, так или иначе.
                          Я на STM32 настраиваю периферию подобным образом.
                          Вам и написали же

                          STM — это точно такое же программирование, как и Ардуино

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


                          1. BigBeaver
                            06.06.2017 12:46

                            Так как регистры могут быть разные. Как и функции, только функции легче читаются.
                            Даташиты, в отличии от высокоуровневого API, есть всегда.


                            1. dernuss
                              06.06.2017 12:51

                              Даташиты тоже бывают часто недоступны, и что?


                              1. Andy_Big
                                06.06.2017 13:09

                                Можно пример? :)


                                1. dernuss
                                  06.06.2017 13:14

                                  пример чего?


                          1. Andy_Big
                            06.06.2017 12:54

                            И что, я данной функцией не настроил порт на выход?

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

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

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


                            1. dernuss
                              06.06.2017 13:02

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

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

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

                              Я что то уже не припомню когда программировал микроконтроллер и под него не было API. Наверное когда писал под МК51 на asm лет 15 назад.

                              От тех же ардуинщиков то и дело на форумах появляются посты «скачал скетч, а он не работает, помогите».

                              На форумах много постов почему не работает код на STM32 и так далее…


                        1. Mikeware
                          06.06.2017 12:53

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


                          1. Andy_Big
                            06.06.2017 13:15

                            В принципе согласен, хотя разницы эти не такие уж большие :)


            1. Mikeware
              06.06.2017 10:51

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


              1. Andy_Big
                06.06.2017 11:15

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


          1. Mikeware
            06.06.2017 10:41

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


  1. Mikeware
    06.06.2017 09:41
    +3

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


    1. YuriPanchul
      06.06.2017 09:44
      +4

      Для школьников: писание программного кода на любом языке типа C, Паскаля или Питона вносит в подсознание парадигму фон-нейманновской машины (примерно как советский школьный дневник навсегда впихивал в подсознание как должна выглядеть неделя), потом на всю жизнь вычисление будет представляться как цепочки команд, с if-ами, циклами, в крайнем случае – как несколько цепочек таких команд, идущих параллельно.

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

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

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

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

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


      1. dernuss
        06.06.2017 09:52

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


        Полностью согласен. Вот только сейчас производители fpga начали распространять компиляторы си для fpga (например vivado hls)


        1. YuriPanchul
          06.06.2017 10:03

          Я автор раннего c-to-verilog компилятора и встречался по этому поводу с Xilinx аж в 1997 году. Все эти c-to-verilog тулы имеют сильные ограничения. Попробуйте написать на нем конвейерный процессор с stalls и forwarding. RTL (register transfer level) еще будет жить долго. Ему предсказывали смерть от c-to-verilog уже 25 лет.


          1. dernuss
            06.06.2017 10:06

            Дак я тоже пишу для fpga на vhdl. Ну по крайней мере пока.
            Просто недавно у нас был в Нижнем Новгороде семинар макрогруп и xilinx,
            то, что они показали, выглядело вполне себе работоспособно.


            1. YuriPanchul
              06.06.2017 10:22

              Я с российскими представителями макрогруп и xilinx тоже знаком. И даже людей, у которых Xilinx купил этот HLS видел на выствке. Если вы мне покажите, как на этом туле написать конвейерный процессор с форвардингом, я изучу его внимательнее. Проблема в том, что я тулов этой категории видел много, они обещали одно и то же (все показывали синтез какого-нибудь фильтра), но процессоры до сих пишутся на верилоге.


              1. dernuss
                06.06.2017 10:28

                У меня на плате есть процессор отдельный TMS320C6678.
                Поэтому мне не нужны процессоры на fpga, мне нужны как раз фильтры.


        1. Andy_Big
          06.06.2017 10:06

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


          1. dernuss
            06.06.2017 10:07

            А вот представитель xilinx говорил как раз наоборот;)


            1. olartamonov
              06.06.2017 10:13

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


              1. dernuss
                06.06.2017 10:18

                Время рассудит, пришел же vhdl/verilog вместо sch.
                Пришёл же си на смену asm.


                1. olartamonov
                  06.06.2017 10:27

                  Потому что C на 99,99 % покрывает функциональные возможности asm, проигрывая в производительности, но резко выигрывая в трудоёмкости.

                  Но C и железо — это ортогональные направления. Довести C до полной функциональности Verilog можно разве что после долгой обработки напильником, но по пути потеряется весь смысл использования C для описания аппаратуры — а он в том, что программистов на C на рынке труда как говна за баней.


            1. Andy_Big
              06.06.2017 10:18

              Это, возможно, сильнее продвинет FPGA в массы, как Ардуино продвинула микроконтроллеры, но не будет востребовано в профессиональной сфере :)
              Это, наверное, можно сравнить с визуальным программированием микроконтроллеров, когда программа не пишется на Си, а составляется из кубиков-примитивов в графическом интерфейсе. Это просто, доступно, но никак не гибко и ничего серьезного на этом не сделаешь. Язык Си сам по себе очень чужд идеологии FPGA, и его применение в этой области — костыль :)


              1. dernuss
                06.06.2017 10:21

                Язык Си сам по себе очень чужд идеологии FPGA, и его применение в этой области — костыль :)

                Зато такой подход позволяет привлечь программистов на си к программированию fpga ;)
                А то программистов vhdl/verilog мало, а программистов си много.


                1. Mikeware
                  06.06.2017 10:53

                  а потребности в «программистах vhdl/verilog»?


                  1. dernuss
                    06.06.2017 10:56
                    -1

                    потребности есть, конечно ниже чем си программистов,
                    но не настолько, насколько их сейчас меньше.


                    1. Mikeware
                      06.06.2017 11:02
                      +1

                      ткунлся сейчас на хахару — программистов ФПГА надо навскидку 2 — на 35 тыр, и на 80. и тут же висят вакансии одинэсников «от 100» и «от 110».
                      вот вам и потребности…


                      1. dernuss
                        06.06.2017 11:09

                        Я получаю больше одинэсников ;)


                        1. Mikeware
                          06.06.2017 11:16

                          одиэсник одинэснику рознь…
                          как, впрочем, и город городу.
                          и если в москве еще можно как-то сравнивать, то в нижнежопинске…


                          1. dernuss
                            06.06.2017 11:17

                            я в нижнежопинске ;((


                      1. YuriPanchul
                        06.06.2017 21:57

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


                        1. Mikeware
                          07.06.2017 07:11

                          Юрий, да я не спорю о преимущистваг ПЛИС и ЯОА.
                          Я спорю о их месте в школьном образовании.
                          ну и насчет Южной Кореи: самсунг галакси появился не из-за того, что там были разработчики. и автомобили дэу и хундай — тоже. и ЛыЖы тоже. они появились там потому, что там была бизнес-среда, которая заставляла создавать продукты. а разработчиков они уже нашли (купили, переманили, выростили).


              1. BigBeaver
                06.06.2017 11:44
                +2

                Не продвинет. FPGA тупо дорого.


                1. Andy_Big
                  06.06.2017 11:54

                  Благодаря китайцам, ныне не так уж и дорого :)


                  1. BigBeaver
                    06.06.2017 11:57
                    +1

                    В сравнении с MCU? Ну фиииг знает.


                    1. Andy_Big
                      06.06.2017 12:12

                      Не в сравнении, в абсолютных цифрах :) Их нет смысла сравнивать, они для разных задач.


                      1. BigBeaver
                        06.06.2017 12:24
                        +1

                        Факт, но тогда все еще хуже — задач для FPGA довольно мало пока.


                        1. Andy_Big
                          06.06.2017 12:26

                          Это да, согласен :)


                        1. YuriPanchul
                          06.06.2017 21:55

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

                          Если нужно, можно всегда упоминать «А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?


                          1. BigBeaver
                            06.06.2017 22:01

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


                            1. YuriPanchul
                              06.06.2017 23:06

                              Ну я же не просто предлагаю — меня приглашают. Значит кому-то нужна и минидомна. Иначе бы я не выезжал из Саннивейл, где я ваяю кусочек MIPS I6500 — технически на порядки более редкая, хитрая и массовая деятельность чем все эти образовательные программы (про то, чему я учусь у своих коллег, в учебниках вообще не пишут, а наш клиент — Mobileye, сейчас часть Intel-а, чип для самоуправляемого автомобиля EyeQ5).


                          1. ukt
                            07.06.2017 02:25

                            «А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?

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

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

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


                            1. YuriPanchul
                              07.06.2017 03:05
                              +1

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

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




                  1. nckma
                    06.06.2017 20:08
                    +1

                    Я прошу прощения, может чего не знаю: какие такие FPGA делают китайцы?


                    1. Andy_Big
                      06.06.2017 20:27

                      Китайцы делают платки с FPGA по цене меньше, чем тут стоит один чип — https://www.aliexpress.com/item/Altera-FPGA-Board-ALTERA-Cyclone-IV-EP4CE10-Board-FPGA-Development-Kit-USB-Blaster-Abundant-Hardware-Resource/32778903912.html


                      1. nckma
                        06.06.2017 20:30
                        +1

                        Я вам больше скажу. Тот же Terasic продает официальные девелопер киты Альтеры (теперь уже Интел) по цене, дешевле чем чипы ПЛИС в интернет магазине альтеры.
                        Как они это делают?


                        1. BigBeaver
                          06.06.2017 20:35
                          +1

                          Это такая стратегия. Ученики получают все дешево (часто ниже себестоимости), а потом при выходе в продакшен все по полной оплачивается=) Именно потому поиграться на макетке может и правда выгодно и удобно, а запилить свой девайс уже фиг знает — как бы не пришлось макетки разбирать на детали для мелких партий.


                          1. SADKO
                            08.06.2017 14:10

                            Если-бы, но увы…
                            … есть просто вторичный рынок FPGA, наковырянных из телеком оборудования


      1. Mikeware
        06.06.2017 09:55
        +2

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

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

        кстати, по опыту — школьники конечные автоматы прекрасно усваивают, и применяют на ардуинах.


        1. YuriPanchul
          06.06.2017 21:51

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

          И ардуинный VP согласна, и готовит помимо платы выше еще одну FPGA плату от Arduino


          1. Mikeware
            07.06.2017 07:16

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


            1. safari2012
              08.06.2017 17:34

              нас на теор.кибернетике их учили писать на паскале.


              1. YuriPanchul
                08.06.2017 21:13

                При желании можно и на фортране писать обработку списков и компиляторы. Использовать параллельные массивы и индексы для хранения узлов дерева. Но это было бы странное использование фортрана, не так ли?

                Да, конечные автоматы можно реализовать и на Паскале, и на Верилоге.

                Но фишка в том, что синтезируемое подмножество Verilog-а — это не язык программирования. Это язык описания схем на уровне регистровых передач. Так же как HTML — это тоже не язык программирования, а язык описания веб-страниц.

                Язык программирования — это нечто, жестко привязанное к парадигме фон-нейманновской машины, цепочке инструкций. Она так намертво входит в мозг обучающегося, что потом встречаются окончившие computer science студенты, которые вообще не верят в существование не-фон-нейманновских вычислительных установок. При том, что фон-нейманновский компьютер — это очень частный случай того, что можно сделать на последовательностной логике, с отправными кирпичиками gate — clock — flip-flop.

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

                Основы верилога и FPGA — это очень полезно для того, чтобы сломать жесткую привязку мозга к фон-нейманновской машине и сделать понимание вычислительной установки более объемным, менее плоским. (И нет, изучение POSIX threads тоже не отрывает мышление от фон-нейманновской машины)

                Вот пример схемы конечного автомата, синтезируемой из кода на верилоге:





                Код:

                Код на Verilog из которого синтезируются схемы выше:

                http://www.silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/06_optional_introductory_materials_if_necessary_for_the_audience/06_exercises/exercise_3_counter_shift_fsm.html

                // Smiling Snail FSM derived from David Harris & Sarah Harris
                
                module pattern_fsm_moore
                (
                    input  clock,
                    input  reset_n,
                    input  a,
                    output y
                );
                
                    parameter [1:0] S0 = 0, S1 = 1, S2 = 2;
                
                    reg [1:0] state, next_state;
                
                    // state register
                
                    always @ (posedge clock or negedge reset_n)
                        if (! reset_n)
                            state <= S0;
                        else
                            state <= next_state;
                
                    // next state logic
                
                    always @*
                        case (state)
                
                        S0:
                            if (a)
                                next_state = S0;
                            else
                                next_state = S1;
                
                        S1:
                            if (a)
                                next_state = S2;
                            else
                                next_state = S1;
                
                        S2:
                            if (a)
                                next_state = S0;
                            else
                                next_state = S1;
                
                        default:
                
                            next_state = S0;
                
                        endcase
                
                    // output logic
                
                    assign y = (state == S2);
                
                endmodule
                
                //----------------------------------------------------------------------------
                
                // Smiling Snail FSM derived from David Harris & Sarah Harris
                
                module pattern_fsm_mealy
                (
                    input  clock,
                    input  reset_n,
                    input  a,
                    output y
                );
                
                    parameter S0 = 1'b0, S1 = 1'b1;
                
                    reg state, next_state;
                
                    // state register
                
                    always @ (posedge clock or negedge reset_n)
                        if (! reset_n)
                            state <= S0;
                        else
                            state <= next_state;
                
                    // next state logic
                
                    always @*
                        case (state)
                
                        S0:
                            if (a)
                                next_state = S0;
                            else
                                next_state = S1;
                
                        S1:
                            if (a)
                                next_state = S0;
                            else
                                next_state = S1;
                
                        default:
                
                            next_state = S0;
                
                        endcase
                
                    // output logic
                
                    assign y = (a & state == S1);
                
                endmodule
                


                1. Mikeware
                  09.06.2017 07:25

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


                  1. YuriPanchul
                    09.06.2017 08:16

                    Я в курсе про lazy evaluation в функциональных языках. Но в конечном итоге они все равно или транслируются в цепочки инструкций, или интерпретируются цепочками инструкций. А вот Verilog становится схемой, которая является более общим случаем, чем фон-нейманновская машина.


                    1. BigBeaver
                      09.06.2017 09:43

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


                      1. YuriPanchul
                        09.06.2017 10:19

                        Да, именно так верилог и симулируется. Но его основное использование — это логический синтез схем, и именно эта технология привела к тому, что у нас сейчас есть айфоны. Без нее их бы не было, так как предыдущая технология 1980-х годов (рисование схем мышкой на экране) не обеспечивала достаточно высокой производительности разработчика микросхем. Именно введение синтеза верилога и VHDL как мейнстрима электронной индустрии 25 с лишним лет назад привело к появлению современных высокоинтегрированных чипов.


                        1. BigBeaver
                          09.06.2017 10:30

                          Я это написал только потому, что вы при сравнении языков делаете упор на то, во что они транслируются. Я считаю этот подход неверным — можно транслировать все во все при желании. Историческую роль верилога, имхо, можно связать с тем, что тогда не было возможности строить описания схем иначе. Сейчас я, например, не вижу принципиальной проблемы синтезировать схемы на основе декларативной математики типа матлабовской (это очень образно пример).


                          1. YuriPanchul
                            09.06.2017 10:44

                            Тут мы заходим в область, которая называется «высокоуровневый синтез». Успеха на этом пути еще никто не достиг, хотя последние 25 лет я слышал не менее 25 презентаций о том, что скоро верилогу конец настанет (включая свою собственную — https://en.wikipedia.org/wiki/C_Level_Design. Т.е. пока тот же Apple для айфонов и Tesla для тесел используют верилог. Например я еще не видел описанный в декларативном виде конвейерный процессор с stalls и forwarding, даже совсем простой.


                            1. BigBeaver
                              09.06.2017 14:23

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

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


                              1. YuriPanchul
                                09.06.2017 19:45

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

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

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


                  1. YuriPanchul
                    09.06.2017 08:25

                    *** но не вижу ничего хорошего, если он будет знать только верилог. ***

                    Я ни в коем случае не предлагаю учить _только_ верилог. Знать верилог без знания одного из императивных языков программирования (C, Pascal, Java, Python) — это тоже неправильно. Для корректной картины инженерного мира нужны обе стороны хардверно-софтверной системы (по крайней мере в физматшколах для инженерно-ориентированных детей).



      1. potan
        06.06.2017 10:43
        +2

        Может проще и правильнее заменить C/паскаль/питон на Haskell?


        1. Mikeware
          06.06.2017 11:05

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


          1. potan
            06.06.2017 12:40

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


      1. herr_kaizer
        07.06.2017 08:24

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


        1. YuriPanchul
          08.06.2017 21:29

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


          1. Mikeware
            09.06.2017 07:37

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


            1. YuriPanchul
              09.06.2017 08:19

              Мне все-таки интересно, как вы ответите на прямой вопрос о рекурсии. Рекурсию в школе изучать? Вы можете ответить «да» или «нет»? (В зависимость от ответа «да» или «нет», у меня будут сразу два другие вопроса)


              1. BigBeaver
                09.06.2017 09:47

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


                1. YuriPanchul
                  09.06.2017 10:32

                  А как же школьники СССР жили до 1985 года без рекурсии? (Программирование в школах ввели в 1985 году) Как-то и факториалы учили, и ряды, и даже теоремы с индукцией.


                  1. BigBeaver
                    09.06.2017 10:41

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

                    p.s. я не говорю, что это совсем не надо (сильно утрируя можно доказать нужность или ненужность чего-угодно, но это не конструктивно). Речь только о приоритетах. То есть, если у меня будет выбор учть своих детей рекурсии или верилогу, я выберу первое. Я говорю «или» потому, что отведенное на учебу время конечно, и получить все и сразу маловероятно.


                    1. YuriPanchul
                      09.06.2017 10:52

                      На машинных кодах в СССР программировали в 1950-е, а потом (в 1960-е) на Коболе (для учета производства) и Фортране (физики), потом на PL/1, в начале 1980-х была смесь фортран-кобол-pl/1-паскаль (плюс немассово ассемблер) и в середине 1980-х стал распостраняться Си. Уже в 1970-х это было точно не для «избранных». При этом в учебнике для мехмата МГУ начала 1980-х еще были машинные коды с последующим переходом на Algol-60, но это было необычно для того времени и немного извращенно (не соответствовало времени).


                      1. Mikeware
                        09.06.2017 12:01

                        ну, нас учили программированию на ЯСК (это такой «русский ассемблер для Минск-32») на УПЦ. там же показывали и примеры машкодов. В институте — для основной массы инженерных специальностей, у которых было «программирование» (а это было далеко не у всех) — был фортран. и задания в ВЦ на перфокартах. только отдельные кафедры имели свой «дисплейный класс» — в основном, связанные с вычтехникой. там уже «на выбор» — от кодов (в те времена систему команд 8080 и PDP помнил на память), включая различные ассемблеры — и до ЯВУ… впрочем, первый компилятор мы написали на фортране, а первый дизассемблер — на бейсике… и ничего…


                      1. BigBeaver
                        09.06.2017 14:26

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


                  1. Mikeware
                    09.06.2017 11:54

                    рекуррентные соотношения давали и до 85 года (я сам закончил школу в 85-м).


                    1. YuriPanchul
                      09.06.2017 19:28

                      Рекуррентность в курсе математики и рекурсия в программировании — это не одно и то же. Числа Фибоначчи и ряды можно программировать и итерацией.

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

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

                      (Рекурсия становится незаменимой при обработке деревьев, но в школьной математике этого по-моему нет)


                      1. BigBeaver
                        09.06.2017 19:43

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

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


                        1. YuriPanchul
                          09.06.2017 20:26

                          *** Любая хвостовая рекурсия разворачивается в цикл. Обхода деревьев это, вроде, касается. ***

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

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

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

                          http://panchul.livejournal.com/268104.html
                          Почему микроэлектроника не сводится к гонке за нанометрами


                          1. BigBeaver
                            09.06.2017 20:31

                            Поиск по бинарному дереву?

                            как-то так, если я ничего не путаю

                            Ок, если не занимаетесь проектированием чипов вообще (а не только процессоров).


                            1. YuriPanchul
                              09.06.2017 21:30

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


                              1. BigBeaver
                                09.06.2017 22:58

                                Как хранятся данные — отдельный вопрос. Механизм реализации чисто итеративный. Также обратите внимание на:

                                рекурсией нельзя осуществить горизонтальный обход дерева.


                                1. YuriPanchul
                                  09.06.2017 23:48

                                  Рекурсия на уровне ассемблера тоже реализуется с помощью стека — причем на RISC процессорах используются одни и те же команды для вталкивания и выталкивания из стека — что на реализации с неявным стеком, что на реализации с явным стеком. На CISC (например x86 бывает явный push и pop, но это просто сокращение)


                                  1. BigBeaver
                                    09.06.2017 23:52

                                    В общем, мне лень дискутировать о терминологии. Тем более, что важность рекурсии я не отрицаю. Как насчет второго вопроса? (он мне более интересен)


                                    1. YuriPanchul
                                      10.06.2017 00:01

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

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


                                      1. BigBeaver
                                        10.06.2017 00:10

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


                                      1. Mikeware
                                        13.06.2017 08:05

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

                                        Потребность для создания возникает не из знаний устройства… потребность возникает из желания что-то сдедать… а конкретных реализаторов идеи можно для начала и пригласить «снаружи»


                                        1. YuriPanchul
                                          13.06.2017 10:10

                                          В электронной индустрии сложная структура реализаторов (RTL design engineer — functional verification engineer — performance modeling engineer — physical ASIC design — итд), целыми компаниями их из Silicon Valley выписывать нереально, а чтобы выучить, требуется долгое время (это не как в софтвере для писания вебсайтов).


                                          1. Mikeware
                                            13.06.2017 10:14

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


                                            1. YuriPanchul
                                              13.06.2017 10:19

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


                                              1. Mikeware
                                                13.06.2017 10:22

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


                                              1. Mikeware
                                                13.06.2017 10:25
                                                +1

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


              1. Mikeware
                09.06.2017 11:52

                в курсе математики рекурсия нужна и изучается (рекуррентные соотношения), вроде как сейчас классе в 9.
                в курсе ИКТ рекурсия нужна в лучшем случае как пример, но если ее и не упомянуть — особого вреда не будет…


    1. YuriPanchul
      06.06.2017 09:49

      Насчет страны я написал здесь:

      Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.

      К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге.

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

      и т.д.


      1. Mikeware
        06.06.2017 09:57
        +1

        в мире -растет. в стране — нет. и если школьник этим заинтересуется (выучится, и сделает своей профессией), то у него будет два пути: либо «идти в мир», либо «идти по миру»…


        1. YuriPanchul
          06.06.2017 10:06

          Ну вот например недавний чип от российской компании ЭЛВИС для умных камер — я написал заметку о нем на Хабре неделю назад:



          1. Mikeware
            06.06.2017 11:24

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


            1. SADKO
              06.06.2017 12:00

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


              1. Mikeware
                06.06.2017 12:43
                +1

                несколько странный метод посева идей с помощью специфического железа и не менее специфического софта.


                1. YuriPanchul
                  06.06.2017 17:46
                  +1

                  Это не «специфическое железо» и не «специфический софт», а общие концепции 1) три основы цифровой электроники — gate, clock, flip-flop; 2) концепция конечного автомата; 3) что такое процессор с стороны железа и со стороны софта — граница между архитектурой и микроархитектурой.

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

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

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

                  Это нужно чтобы создать рынок новых работ, и вовсе не только в FPGA, но и в ASIC design. Или вы хотите, чтобы россияне вечно программировали чужие чипы?


                  1. BigBeaver
                    06.06.2017 18:11

                    1) Это вузовский курс электроники. Школьником кроме Gate особо не надо ничего
                    2) Конечные автоматы прекрасно учатся даже в прикладном программировании без всяких ардуинок.
                    3) А применение у этого какое? Зачем простым смертным микроархитектура?


                    1. YuriPanchul
                      06.06.2017 21:49

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


                  1. ukt
                    07.06.2017 02:14

                    Или вы хотите, чтобы россияне вечно программировали чужие чипы?

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


                    1. YuriPanchul
                      07.06.2017 02:59

                      Нет, я продвигаю разработку ASIC, а FPGA использую как тренажер


                  1. Mikeware
                    07.06.2017 07:20

                    почему вы ограничиваетеь концепциями цифровой электроники, а не рассматриваете глубоко те же транзисторы? устройство триггеров? полупроводники- все их заперещенные зоны, влияние различных примесей, технологии производства микросхем вообще и FPGA в частности? :-)


            1. ru_vlad
              06.06.2017 16:16

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

              Вы слишком оптимистичны, у нас в городе 300 выпускников (11класс) Информатику сдают примерно 90 человек, а поступать по профилю ИТ человек 15 из них электроникой интересуются не более 2-3.
              Так что 25000 и 10% это слишком радужно. Информатику для сдачи ЕГЭ берут потому что надо что то еще кроме «базы» и многие считают что это легче чем остальные предметы.


              1. borec1
                06.06.2017 20:19

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


                1. Mikeware
                  07.06.2017 07:29

                  ИТ-специальности — понятие довольно широкое.
                  но в целом, физика требуется при поступлени на бОльшее количество специальностей.


              1. Mikeware
                07.06.2017 07:27

                Я взял статистику по экзаменам из РГ. (https://rg.ru/2017/05/29/glava-rosobrnadzora-otvetil-na-voprosy-vypusknikov-i-roditelej-pro-ege.html)
                сын сдает сейчас оные, поэтому держусь в курсе (сегодня, кстати, физика).
                сдавать «кроме базы» что-то совсем не обязательно. и информатика в существующем виде — не самый легкий (из-за невнятности курса) предмет. кроме того, самыми легкими считаются болтологические предметы — обществознание, история.
                ну а электроникой интересуются мало. причины простые и взаимосвязанные: 1. все можно купить в китае. 2.инженерная работа непрестижна 3.нет производств


  1. GarryC
    06.06.2017 13:53

    так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены

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


    1. YuriPanchul
      06.06.2017 17:51

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

      Зачем учить школьников языкам описания аппаратуры и использованию ПЛИС? Обоснование программы.

      В картине мира, представляемой школьным образованием, существует “слепое пятно” в области принципов проектирования цифровой электроники, между физикой и программированием. Курсы роботики и ардуино это слепое пятно не закрывают, так как сводятся к программированию готовых чипов. Упражнения с дискретными элементами и микросхемами малой степени интеграции, хотя и эффективны во введении в основные принципы, базируются на технологиях 1960-1970-х годов и не содержат привязки к современному проектированию. Слепое пятно можно закрыть с помощью введения элементов языков описания аппаратуры (ЯОА) и доступные для школьного экспериментирования микросхемы ПЛИС (программируемые логические интегральные схемы) — матрицы реконфигурируемых логических элементов. Тем самым картина мира становится цельной, и способствует созданию среды для появления большого количества молодых инженеров, имеющих представление о всех сторонах современных микросхем для приложений типа самоуправляемых автомобилей, и способных в будущем специализироваться для проектирования того или иного аспекта таких устройств.

      Введение ЯОА и ПЛИС в школьную программу также хорошо привязывается к курсу математики и физики физматшкол — булевская алгебра, арифметические схемы, конечные автоматы.

      Заметим, что ЯОА и ПЛИС, несмотря на поверхностное сходство с программированием, используют другие базовые концепции:

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

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


      Далее в конце:

      Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.

      К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге. Игнорируется возможность интеграции концепций HDL и RTL в программы физматшкол, где их можно было бы привязать к математической логике, теории конечных автоматов и электричеству, подобно тому, как обогатило советские школьные программы введение в середине 1980-х годов элементов программирования.


      1. GarryC
        06.06.2017 18:25

        Может быть, Вы не поняли мой основной посыл, но, если бы «слепое пятно» было бы только между физикой и программированием, я был бы только рад.

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


        1. Andy_Big
          06.06.2017 20:45
          -1

          Более того, не меньшее слепое пятно существует между Ардуино и микроконтроллерами как таковыми :) Прыгать из Ардуино в FPGA… Мне совершенно непонятна такая логика.


          1. YuriPanchul
            06.06.2017 21:47

            Между нами говоря, я вообще считаю, что программировать микроконтроллеры стоит сразу учить со «взрослыми» тулами — я изложил эту точку зрения в свое время по ссылке ниже. Там я писал про PIC32 и Микрочип, но это все совершенно так же относится и к STM32 и AVR:

            http://panchul.com/2013/02/27/microchip_pic32_1/

            Вопрос: А почему бы школьникам и младшим студентам не использовать Ардуино-подобную систему разработки MPIDE вместо MPLAB X, используемой в инструкции?

            Ответ: MPIDE – небольшая элегантная система для школьников, хоббистов, людей которые не любят читать документацию, а также инженеров, которым нужно смастерить что-то небольшое быстренько. MPLAB X – максимально гибкая профессиональная система, которая поддерживает весь спектр возможностей, предоставляемых PIC32. С моей точки зрения, разница в уровне сложности для начала работы с MPIDE и MPLAB X недостаточно велика, чтобы сначала учить MPIDE, а потом – MPLAB X. Если в конечном итоге человек собирается получить профессиональные навыки, лучше сразу начинать с MPLAB X. Если же целью является скажем научить программированию микроконтроллеров гуманитариев, то лучше использовать MPIDE и на нем оставаться.


            При этом следует считаться с фактом — Ардуино понравилось куче преподавателей, они к ним прикипели душой, и вот это так. Да, можно учить еще и STM32 или PIC32, даже научить школьников обращаться с RTOS при желании. Но все это все равно _обычное_программирование_, ничем принципиально не отличающее от программирования на десктопе на Питоне.

            А вот цифровая схемотехника — это другая область, с языками, которые строят хардверные структуры, а не цепочки команд, как программы на Си в Ардуино, STM, PIC32, Windows итд.

            Причем для понимания как работает тот же айфон, и как его спроектировать, недостаточно научиться встроенному программированию, нужно еще знать и хардверный аспект, по крайней мере видеть, что в этой части вселенной не темная материя с призраками Стива Джобса, а конкретные структуры, выраженные на уровне register transfer level. Это и достигается с помощью внедрения Verilog и FPGA. Кроме этого, детям это нравится.


            1. dernuss
              06.06.2017 21:54

              Причем для понимания как работает тот же айфон, и как его спроектировать, недостаточно научиться встроенному программированию, нужно еще знать и хардверный аспект, по крайней мере видеть, что в этой части вселенной не темная материя с призраками Стива Джобса, а конкретные структуры, выраженные на уровне register transfer level. Это и достигается с помощью внедрения Verilog и FPGA.

              Ну для понимания как работает айфон, ещё необходимо понимать СВЧ, антенны, распространение радиоволн и т.д…


            1. Andy_Big
              06.06.2017 23:19
              -1

              Ардуино понравилось куче преподавателей, они к ним прикипели душой

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

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


              1. dernuss
                06.06.2017 23:49

                Если цель — научить программированию микроконтроллеров — учите программировать микроконтроллеры, с регистрами, прерываниями, ПДП и т.д., нафиг Ардуину.

                Ага, да и не на СИ, а на ASM или вообще в машинных кодах. Только олдскул, только хардкор.


                1. BigBeaver
                  06.06.2017 23:53

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


                  1. dernuss
                    06.06.2017 23:59

                    А почему нет?


                1. Andy_Big
                  06.06.2017 23:54

                  Вы можете сразу машинными кодами писать, если так тянет к созданию и дальнейшему преодолению трудностей :)


                  1. M_AJ
                    07.06.2017 00:01

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


                    1. Andy_Big
                      07.06.2017 00:08

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


                      1. BigBeaver
                        07.06.2017 00:11

                        Есть мнение, что компилятор даже код на плюсах собирает лучше, чем человек пишет на асме.


                        1. dernuss
                          07.06.2017 00:17

                          Так же есть мнение, отличное от этого ;)


                          1. BigBeaver
                            07.06.2017 00:26

                            Зависит от сложности, полагаю)


                        1. M_AJ
                          07.06.2017 00:43

                          Каждый раз, когда кто-нибудь это пишет, я вспоминаю гневный пост Торвальдса о "неизлечимо поломанном" GCC, который "нельзя выпускать из детского сада". Он конечно, как всегда, в своем репертуаре, и воспринимать его слишком уж серьезно не стоит, но доля правды в его словах есть, и я считаю, что если программист любит ASM и способен решать поставленные перед ним задачи за отведенное время, то ему нет особого смысла связываться с компилятором Си, рискуя нарваться еще и на его дополнительные баги.


                          1. BigBeaver
                            07.06.2017 00:53

                            Все верно. Обратного никто и не утверждает)


                          1. Andy_Big
                            07.06.2017 01:11

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


                        1. Mikeware
                          07.06.2017 07:37

                          человек человеку рознь :-)
                          но переключаясь с архитектуры на архитектуру — качество кода на асме я обычно теряю. не знаю, как у других…


              1. YuriPanchul
                06.06.2017 23:57
                +1

                *** Если у Вас цель научить общему программированию — учите ему на десктопе, нафиг Ардуину. Если цель — научить программированию микроконтроллеров — учите программировать микроконтроллеры, с регистрами, прерываниями, ПДП и т.д., нафиг Ардуину. ***

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

                *** Вот после этих двух вариантов будет логично дать основы Verilog как альтернативного пути создания автоматов. ***

                Звучит как что-то из мира политики. Типа «не надо давать основы верилога, пока мы не скинули с пьедестала ардуину и не заменили ее нормальному обучению микроконтроллерам с линкер-скриптами и приоритетами прерываний».

                Тем самым вы вводите ложную зависимость между очередностью двух на самом деле независимых событий: заменой неприятной вам, но популярной сущности X на более правильную сущность Y — и введением сущности Z. При том, что сущность Z может сосуществовать как с сущностью X, так и с сущностью Y. Даже если промоутеры сущности Z испытывают искреннюю симпатию к вашей борьбе за замену X на Y.


                1. Andy_Big
                  07.06.2017 00:02
                  -1

                  Нет, опять Вы не поняли :) Ну да ладно, не буду тужиться объяснять дальше, раз у меня это явно не получается :)


            1. Mikeware
              07.06.2017 08:07

              ардуино — оно стандартизировало многие аспекты. начиная от физического интерфейса, и заканчивая софтом. любой стандарт лучше его отсутсвия. И на этапе обучения многообразие может даже вредить. Ну и, конечно, оно сформировало свою экосистему… поэтому ардуина удобна в использовании. позволяет быстро создать прототип, добиться результата. кого-то этот результат вполне удовлетворит. кто-то пойдет дальше (либо изучая уже коннтроллеры, либо заказывая железо профессионалам).
              те же контроллеры — это вечные холивары PIC vs AVR, AVR vs STM. внутри STMщиков — Keil vs IAR vs CooCox. и HAL vs SPL… так до обучения дело никогда и не дойдет…

              Причем для понимания как работает тот же айфон, и как его спроектировать, недостаточно научиться встроенному программированию, нужно еще знать и хардверный аспект, по крайней мере видеть… конкретные структуры, выраженные на уровне register transfer level. Это и достигается с помощью внедрения Verilog и FPGA.

              сравните, какому количеству народа нужно/полезно/интересно «разрабатывать айфон», и какому — «программы под айфон» (ибо сам посебе голый айфон не функциональнее нокии3310)


              1. YuriPanchul
                07.06.2017 08:45

                *** сравните, какому количеству народа нужно/полезно/интересно «разрабатывать айфон», и какому — «программы под айфон» ***

                Вы предлагаете не учить? Если бы в Финляндии и Южной Корее так рассуждали, то там бы не появились Nokia и Samsung. И вообще — детям интересно.


                1. Mikeware
                  07.06.2017 09:20

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


          1. dernuss
            06.06.2017 23:58

            Думаю это слепое пятно существует только у вас.


        1. dernuss
          06.06.2017 21:09
          +1

          Учить не ПЛИС, а булевой алгебре, арифметическим схемам, конечным автоматам и т.д.


          1. YuriPanchul
            06.06.2017 21:35

            Именно! ПЛИС — это просто удобная платформа для практического приложения такого обучения.


  1. old_bear
    06.06.2017 17:51
    +2

    Содержание 99% процентов комментариев к этой статье я предсказал даже не открывая её.
    Но автор заслуживает уважения за упорство в продвижении своего видения мира.


    1. Mikeware
      07.06.2017 07:39

      он увлеченный человек. со всеми плюсами и минусами этого…


  1. M_AJ
    06.06.2017 19:29

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


    1. YuriPanchul
      06.06.2017 21:34

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


      1. M_AJ
        07.06.2017 00:22

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


        1. YuriPanchul
          07.06.2017 01:05

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

          То, что вы мне сейчас говорите про FPGA/Verilog, в 1984 году говорили про обучение в школе программированию.


          1. Mogwaika
            07.06.2017 11:13

            Поверьте, делать например пиротехнику им понравится ещё больше!
            А если бы химию преподавали плохо, не появилось бы всяких 3М в США…


        1. YuriPanchul
          07.06.2017 01:14

          Кстати DSP и PLC — некорректные аналогии. Какие применения у PLC вне завода? И для DSP нужно знать матанализ заведомо больше чем в школе (преобразование Фурье итд). А в FPGA и Verilog простые принципы (при этом _другие_ чем у программирования), тренируют мозг, важная связь с взрослой жизнью, позволяют построить свой процессор, дети, как показал эксперимент, воспринимают это с интересом.


          1. Mikeware
            08.06.2017 14:29

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


  1. maslyaev
    06.06.2017 22:33
    +1

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

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

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


    1. YuriPanchul
      07.06.2017 00:03

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

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