Взял видеоинтервью у вице-президента Ардуино и обсудил с ней преподавание школьникам ПЛИС-ов / FPGA и языка Verilog

    На днях я встретился и взял короткое видеоинтервью у 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
    



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



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

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

    Поделиться публикацией
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

                                      P.S. И, кстати, STM32 тоже позволяет практически ничего не знать о самом микроконтроллере. Развернул RTOS — и вперёд.
                                      • +1
                                        Ну да, изучение FPGA гораздо более уместно, чем умение рассчитать DC/DC :)
                                        • 0
                                          Вообще да. Это я вам как человек, умеющий делать обе вещи, говорю.
                                      • 0
                                        Во первых кое какую периферию настраивать в ардуино всё таки надо:
                                            pinMode(12, OUTPUT);
                                            digitalWrite(12, LOW);
                                        

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

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

                                          Я в курсе этой утилиты.
                                          • 0
                                            Это не настраивание периферии микроконтролера :)

                                            А что это тогда?
                                            • 0
                                              Это использование одного из «кубиков» Ардуины. По сути то же, что и галочки в CUBEmx.
                                              • 0
                                                Эта строчка pinMode(12, OUTPUT);

                                                настраивание цифрового порта на выход, а цифровой порт относится к периферии микроконтроллера.
                                                • 0
                                                  Это вызов функции из библиотеки Ардуины.
                                                  Настраивание любой периферии производится через регистры микроконтроллера. Умея делать это на одном микроконтроллере, Вы легко сможете сделать это и на любом другом. Умея же вызывать библиотечную функцию, Вы сможете вызывать ее только там где она есть.
                                                  • 0
                                                    И что, я данной функцией не настрою порт на выход?
                                                    В любом случае я настраиваю периферию, так или иначе.
                                                    Я на STM32 настраиваю периферию подобным образом.
                                                    Вам и написали же
                                                    STM — это точно такое же программирование, как и Ардуино

                                                    И если я умею через регистры настраивать у периферию у одного микроконтроллера, то не всегда я настрою легко в любом другом. Так как регистры могут быть разные. Как и функции, только функции легче читаются.
                                                    • 0
                                                      Так как регистры могут быть разные. Как и функции, только функции легче читаются.
                                                      Даташиты, в отличии от высокоуровневого API, есть всегда.
                                                      • 0
                                                        Даташиты тоже бывают часто недоступны, и что?
                                                    • 0
                                                      И что, я данной функцией не настроил порт на выход?

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

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

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

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

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

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

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

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

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

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

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

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

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

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


                                          Полностью согласен. Вот только сейчас производители fpga начали распространять компиляторы си для fpga (например vivado hls)
                                          • 0
                                            Я автор раннего c-to-verilog компилятора и встречался по этому поводу с Xilinx аж в 1997 году. Все эти c-to-verilog тулы имеют сильные ограничения. Попробуйте написать на нем конвейерный процессор с stalls и forwarding. RTL (register transfer level) еще будет жить долго. Ему предсказывали смерть от c-to-verilog уже 25 лет.
                                            • 0
                                              Дак я тоже пишу для fpga на vhdl. Ну по крайней мере пока.
                                              Просто недавно у нас был в Нижнем Новгороде семинар макрогруп и xilinx,
                                              то, что они показали, выглядело вполне себе работоспособно.
                                              • 0
                                                Я с российскими представителями макрогруп и xilinx тоже знаком. И даже людей, у которых Xilinx купил этот HLS видел на выствке. Если вы мне покажите, как на этом туле написать конвейерный процессор с форвардингом, я изучу его внимательнее. Проблема в том, что я тулов этой категории видел много, они обещали одно и то же (все показывали синтез какого-нибудь фильтра), но процессоры до сих пишутся на верилоге.
                                                • 0
                                                  У меня на плате есть процессор отдельный TMS320C6678.
                                                  Поэтому мне не нужны процессоры на fpga, мне нужны как раз фильтры.
                                            • 0
                                              По мне, так это не более, чем костыль для тех, кому надо по-быстрому состряпать что-то несложное на FPGA :) Но никак не следующий шаг в профессиональном применении.
                                              • 0
                                                А вот представитель xilinx говорил как раз наоборот;)
                                                • 0
                                                  Про то, что у нас пользовательские приложения на десктопах все будут на каком-нибудь javascript писаться и в браузере из облака выполняться, тоже много кто говорил.
                                                  • 0
                                                    Время рассудит, пришел же vhdl/verilog вместо sch.
                                                    Пришёл же си на смену asm.
                                                    • 0
                                                      Потому что C на 99,99 % покрывает функциональные возможности asm, проигрывая в производительности, но резко выигрывая в трудоёмкости.

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

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

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

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

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

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

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



                                                                  • +1
                                                                    Я прошу прощения, может чего не знаю: какие такие FPGA делают китайцы?
                                                                    • 0
                                                                      Китайцы делают платки с 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
                                                                        Я вам больше скажу. Тот же Terasic продает официальные девелопер киты Альтеры (теперь уже Интел) по цене, дешевле чем чипы ПЛИС в интернет магазине альтеры.
                                                                        Как они это делают?
                                                                        • +1
                                                                          Это такая стратегия. Ученики получают все дешево (часто ниже себестоимости), а потом при выходе в продакшен все по полной оплачивается=) Именно потому поиграться на макетке может и правда выгодно и удобно, а запилить свой девайс уже фиг знает — как бы не пришлось макетки разбирать на детали для мелких партий.
                                                                          • 0
                                                                            Если-бы, но увы…
                                                                            … есть просто вторичный рынок FPGA, наковырянных из телеком оборудования
                                                        • +2
                                                          дело в другом: а оно школьникам нужно? тем более — «массово»?
                                                          я полностью согласен с Вами, что знатьи понимать цифроую схемотехнику программисту очень полезно. но не необходимо.
                                                          показывать школьникам «все многообразие мира» тоже нужно. но для этого нужна определенная база, и интерес опять же к электронике. Программистов сейчас нужно гораздо больше, чем электроншиков. а системщиков — гораздо меньше, чем электронщиков.

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

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

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

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

                                                                  Но фишка в том, что синтезируемое подмножество 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
                                                                  

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

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

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

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

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

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