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). В тех постах были заданы вопросы. Вот какие получились ответы:
Гипотеза, что школьники могут использовать Verilog, подтвердилась
Verilog также оказался достаточному количеству школьников интересен (до Киева некоторые коллеги в этом сомневались, утверждая, что детям более интересны проекты типа роботической руки с микроконтроллером)
Идея, что перед использованием Verilog полезно показать школьникам логические элементы и D-триггер на микросхемах малой степени интеграции — не то чтобы однозначно подтвердилась, но получила большее обоснование.
Всего после дня опыта с верилогом некоторые школьники начали задавать вразумительные вопросы — например когда применять блокирующее, а когда неблокирующее присваивание.
Довести школьников от нуля до конечных автоматов, реализующих протоколы типа SPI — за одну неделю по-видимому нереально, а вот до конечного автомата кодового замка или светофора — реально.
Также нереально довести за одну неделю по конструирования процессора, но мы попробуем это сделать за две недели в Новосибирске.
Во время киевского эксперимента мы пробовали рассказать и про FPGA, и про встроенные процессоры (MediaTek MT7688, находящийся где-то посередине между Ардуино и Интел Галилео или Расбери Пай по производительности). Потом мы сделали хакатон (в Киевско-Могилянской Академии) и пронаблюдали, сколько школьников выбрали для хакатона проект с FPGA и сколько — проект с встроенным процессором. Выяснилось — 50 на 50. Это интересно — до хакатона у меня не было вообще никакого предположения, какая будет разбивка.
У меня было опасение, что школьников может запутать пользовательский интерфейс в Xilinx Vivado, с кучей опций и элементов интерфейса. Но оказалось, что школьникам все равно — сложный GUI их не пугает.
Большинство школьников используют Windows. У меня вместе с моим коллегой Александром Белицем есть идея заготовить для таких мероприятий пару десятков bootable SSD-драйвов с Линуксом (Ubuntu или CentOS) и носить их от мероприятия к мероприятияю. Алекс даже написал скрипт для клонирования таких драйвов. Ubuntu более дружелюбен, но CentOS более официально поддерживается средствами автоматизации проектирования схем на FPGA, в частности Xilinx Vivado и Altera Quartus. Можно ли делать одновременно ликбез по Линуксу и ликбез по Verilog / FPGA во время летнего лагеря? Непонятно, но это можно попробовать.
Оказывается, Xilinx Vivado нещадно глючит приконфигурации Artix-7 FPGA, если использовать дешевые плохо экранированные микро-USB кабели. По какому-то мистическому наитию я перед поездкой в Киев засунул в чемодан дюжину качественных шнуров, и это спасло семинар.
У меня была идея, что использование 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 в одну и ту же макетную плату с лампочками и кнопками, и ожидать, что все будет продолжать работать.
Я подтвердил свое наблюдение, что для проведения краткосрочных (1 неделя) образовательных мероприятий критично, чтобы на месте находилась бригада студентов местного университета, которая бы осуществляла менторство школьников. В киевском случае такую бригаду обеспечил преподаватель Киевского Политехнического Института Евгений Короткий.
Стало более-менее понятно, в каких случаях и в каком объеме стоит включать в программу подобных мероприятий часть про уровень транзисторов и про производства микросхем. Эту часть преподавал доцент Киевского Национального Университета Александр Барабанов, переводчик материалов по курсу Nanometer ASIC для студентов. По-видимому, этот материал стоит в полном объеме включать в годовой курс для школьников, в небольшом — в двухнедельный курс в формате летнего лагеря, но при продолжительности меньше недели нужно наверное сразу (в течение 1 часа после начала) давать школьникам микросхемы малой степени интеграции (например CMOS 4000) и про транзистор упомянуть вскользь, в виде «транзистор — это устройство, в котором ток течет из пукта A в пункт B, если в C стоит напряжение 1 (или 0). Из транзисторов можно строить логические элементы И, ИЛИ, НЕ (показать на картинку)».
Во время лекций перед большой аудиторией школьникам можно показывать схемы, собранные на макетной плате из микросхем малой степени интеграции. Это наглядно, вызывет интерес, а также не требует подключения конструкции к компьютеру — только с батарейке 9 V. Я показывал три таких схемы, наиболее критичных для понимания — логический элемент XOR, комбинационный 4-битный сумматори D-триггер с частотой порядка 1 Герц (т.е. такт в секунду).
Остается открытым вопрос, можно ли преподавать школьникам идею конвейерной обработки, одну из самых мощных идей в цифровом проектировании и организации вычислений вообще. Для этого необязательно строить конвейерный процессор, можно сделать и конвейерное арифметическое устройство. Наверное это можно упомянуть в самом конце курса, когда дети наиграются с простыми комбинационными и последовательностным схемами и конечными автоматами. Скорее всего это будет интересно очень небольшому подмножеству школьников, но попробовать стоит.
Для мероприятий подлиннее можно использовать индивидуальные проекты и проверочные работы.
Код на GitHub использованный для киевского мероприятия
4. Источники информации для разработки будущих материалов.
Источники информации для преподавателей физматшкол, которые по-видимому будут разрабатывать большую часть детальных материалов, после начальных экспериментов со школьниками на Украине, в России и в Silicon Valley:
Учебник Дэвида Харриса и Сары Харрис “Цифровая схемотехника и архитектура компьютера”, 2-е издание, русский перевод. Этот учебник можно скачать бесплатно, см. статьи на Хабре о нем — 1, 2, 3. Недавно также вышло новое бумажное издание с улучшенной цветной полиграфией
Слайды для преподавателей, дополнение к учебнику Харрис & Харрис. Бесплатное скачивание.
Материалы по курсу From NAND to Tetris, который был создан в Израиле и внедрен в некоторые американские университеты. При этом, имхо, от курса стоит использовать идеи и скелет, но реализацию делать на подмножествах “взрослых” средств проектирования, а не искуственных “детских” средствах, как делает это курс. Ключевые части скачиваются бесплатно.
Книга Чарльза Петзольда “Код”, которая адекватно объясняет на пальцах многие концепции и уровень которой соответствует школьному (идея подсказана преподавателем киевской школы ОРТ Сергеем Дзюбой). Опять же, с моей точки зрения, из книги стоит использовать идеи и скелет, но бОльшую часть материала заменить на более корректный (вместо защелок (D-latch) использовать D-триггеры (D-flip-flop)) и современный, например вместо accumulator-based 6800 и архаичного 8080 использовать подмножество RISC-архитектуры.
Наборы для конструирования схем на макетной плате на основе дискретных компонент и микросхем малой степени интеграции от американской компании ETron Circuit Labs, российской компании Киберфизика, украинской компании Радиомаг (я могу объяснить различия между этими наборами в комментариях, если кому интересно).
Материалы компаний-производителей микросхем ПЛИС (Xilinx, Altera) и образовательных плат с микросхемами ПЛИС (Digilent, Terasic).
Примеры кода, контрольные работы и рекомендации по проектам, разработанные Антоном Моисеевым, Юрием Панчулом, Евгением Коротким, Александром Барабановым и другими инженерами компаний и преподавателями университетов для различных мероприятий в Калифорнии, Казахстане, России и Украине.
5. План на будущее номер 1. Формат годового курса на 35 учебных часов, раскиданных на учебный год по часу в неделю
От физики к дискретным элементам
Что такое ток, напряжение и сопротивление. Как устроена макетная плата. Упражнение: первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов. Переменные резисторы, фоторезисторы.
Что такое транзистор. Обзор переключающих элементов от реле, радиоламп, дискретных транзисторов до транзисторов на микросхемах. Упражнения с тиристором (SCR — silicon controlled rectifier — нагляднее чем транзистор), биполярным p-n-p и n-p-n транзисторами.
Контрольная работа.
От дискретных элементов к комбинационной логике
Булева алгебра и алгебра логики. Операции, выражения, аксиомы и тождества, включая законы де Моргана. Таблицы истинности.
Комбинационные логические элементы И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ-ИЛИ (AND, OR, NOT, NAND, NOR, XOR). Как комбинационные элементы строятся из транзисторов. Упражнение: построить AND, NAND или NOR из дискретных элементов.
Логические элементы в микросхемах малой степени интеграции. Индивидуальное упражнение: каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Что такое такое подтягивающие резисторы и зачем они нужны. Добавляем к предыдущему упражнению кнопки и подтягивающие резисторы.
Контрольная работа.
Двоичная арифметика и ее реализация
Двоичные числа. Преобразование из двоичных в десятичные числа и наоборот. Операции сложения и умножения. Отрицательные числа и дополнительный код.
Реализация полусумматора и полного сумматора с помощью логических элементов. Перенос. Многоразрядный сумматор с последовательным переносом. Упражнение на макетной плате. Упоминание о длинной временной задержке и схемах с более оптимальной задержкой.
Использование 4-битного полного сумматора CMOD 4008. Построение из него 8-битного сумматора и схемы вычитания. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.
Контрольная работа.
Последовательностная логика
Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.
Так как в обвязку 555 входят конденсаторы, могут понадобится дополнительные объяснения, что такое конденсаторы, зачем они нужны в обвязке 555 и как они маркируются. Также может быть полезным и вспомогательное упражнение с зарядкой и разрядкой конденсаторов разной емкости.
Схемы с внутренним состоянием. Построение RS-защелки из логических элементов NAND. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.
Последовательностные блоки — счетчик (CMOS 4029) и сдвиговый регистр (4015). Семисегментный индикатор и его драйвер 4511. Упражнения с этими микросхемами.
Экзамен.
От микросхем малой степени интеграции к ПЛИС — комбинационная логика
Понятие о ПЛИС (программируемой логической интегральной схеме) — матрице реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Упражнение: синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.
Продолжение изучения языка Verilog. Типы данных, выражения, присваивания. Always-блоки и основные операторы. Упражнение: вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.
Продолжение изучения языка Verilog. Иерархия модулей. Упражнение: построение мультиплексоров и сумматоров из подмодулей. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.
Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек. Упражнение: создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования и программы GTKWave для просмотра временных диаграмм.
Презентация группы продвинутых студентов: реализация быстрых сумматоров с ускоренным групповым переносом, моделирование в них временных задержек и сравнение их с сумматорами с последовательным переносом (количество логических элементов и задержки).
Контрольная работа
Проектирование последовательностной логике на языке Verilog с реализацией на ПЛИС
Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog.
Упражнения: реализация D-триггера, счетчика и сдвигового регистра на ПЛИС. Анализ результатов программы статического анализа о максимальной частоте. Демонстрация: использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.
Концепция конечного автомата. Диаграммы изменения состояний. Упражнения: конечные автоматы светофора и кодового замка.
Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце курса) по интеграции датчиков и других периферийных устройств с платой c ПЛИС. Самостоятельная работа: индивидуальный проект, модифицирующий поведение одного из примеров с последовательностной логикой: счетчика, сдвигового регистра или конечного автомата.
Концепция конвейерной обработки. Сравнение конвейерной реализации арифметических блоков, вычисляющих степень и квадратный корень.
Контрольная работа.
Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.
Концепция фон-Нейманновской машины. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Упражнение с симулятором процессора на уровне инструкций — MARS MIPS. Простые программы на ассемблере для вычисления выражений.
Условные и безусловные переходы, метки, циклы. Пример: вычисление чисел Фибоначчи. Индивидуальное упражнение на основе модификации примера.
Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Упражнение: программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.
Контрольная работа.
Микроархитектура: строим процессор
Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.
Продолжение 9.1
Представление студенческих проектов по интеграции с датчиками
Экзамен
6. План на будущее номер 2. Формат двухнедельного летнего лагеря
Знакомство с макетной платой, сопротивлениями и логическими элементами.
Первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов.
Комбинационные логические элементы. Каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Входы подключаются к питанию и земле переходниками, и входы и выходы подключаются к светодиодам.
Вариант упражнения 2 с кнопками и подтягивающими резисторами, с объяснением их функции.
Знакомство с двоичной арифметикой
Использование 4-битного сумматора на микросхеме CMOD 4008.
Построение 8-битного сумматора из двух 4-битных.
Построение схемы вычитания используя тождество -a == ~ a + 1
Знакомство с последовательностной логикой
Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.
Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.
Использование сдвигового регистра для генерации “бегущих огоньков” на основе микросхемы CMOS 4015.
Строим счетчик (CMOS 4029) и подсоединяем к нему семисегментный индикатор через драйвер 4511.
Знакомство с ПЛИС (программируемой логической интегральной схеме) — матрицей реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Типы данных языка Verilog, выражения, присваивания. Always-блоки и основные операторы.
Синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.
Вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.
Продолжение изучения языка Verilog. Иерархия модулей. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек.
Упражнение: построение мультиплексоров из подмодулей.
Создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования, а также программы GTKWave для просмотра временных диаграмм.
Проектирование последовательностной логике на языке Verilog. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog. Анализ результатов программы статического анализа о максимальной частоте.
Реализация счетчика на ПЛИС.
Реализация сдвигового регистра на ПЛИС.
Использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.
Модификация упражнения 2 или упражнения 3 на основе индивидуального задания.
Концепция конечного автомата. Диаграммы изменения состояний. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце школы) по интеграции датчиков и других периферийных устройств с платой c ПЛИС.
Конечный автомат “улыбающаяся улитка”.
Конечный автомат кодового замка на основе индивидуального задания.
Конечный автомат для работы с датчиком освещения.
Архитектура процессора: вид вычислительной установки со стороны программиста. Концепция фон-Нейманновской машины. Использование симулятора процессора на уровне инструкций MARS MIPS.
Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Простые программы для вычисления выражений.
Условные и безусловные переходы, метки, циклы. Программа вычисляющая числа Фибоначчи.
Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.
Микроархитектура: строим процессор.
Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.
Больше о процессорах.
Работа над индивидуальным проектом
Сдача индивидуального проекта
Приложение 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
Как оно работает:
Подробное объяснение — в тексте «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».
Если вы преподаватель и хотите принять участие в разработке таких материалов (это все на общественных началах, без связи с той или иной компанией), сообщите мне в комментариях. Также интересна любая критика.
Andy_Big
Как-то это выглядит немного странно, на мой взгляд. Учитывая, что в подавляющем большинстве случаев «программирование микроконтроллеров с помощью Ардуино» сводится к поиску в инете готовых скетчей, назвать изучение Verilog следующим шагом — слишком оптимистично, мягко говоря.
Да и связь между микроконтроллерами и FPGA весьма отдаленная, все же это даже идеологически разные вещи. Скорее, это должно звучать как-то так: «А давайте кроме программирования микроконтроллеров с помощью Ардуино будем учить еще и программированию FPGA на Verilog».
YuriPanchul
Я совершенно согласен с вами, что обучение программированию микроконтроллеров (встроенных процессоров) и проектирование схемотехники конфигурируемой в FPGA — это совершенно ортогональные вещи, как пение и стихосложение. Но чтобы написать песню (создать систему на кристалле с аппаратной и программной частью) нужно представлять обе стороны. Даже если человек в будущем будет специализироваться на чем-то одном.
Andy_Big
Для этой задачи нужно иметь представление о множестве сторон, из которых Ардуины и Verilog — совсем не в начале списка :)
Нет, я не имею ничего против обучения различным аспектам электроники, но почему бы не сделать после изучения Ардуин действительно следующий шаг — реальное программирования современных микроконтроллеров, например тех же STM. А то сейчас это похоже на «запускать бумажные самолетики научились, делаем следующий шаг — переходим к изучению пилотирования авиалайнеров» :)
olartamonov
Потому что следующий после школы шаг уже называется «университет», а в тексте речь о школьном образовании?..
Не вижу, чем программирование ПЛИС чем-то принципиально сложнее программирования того же AVR. Это другая парадигма, и задача хорошего школьного образования — дать представление о том, что эта парадигма существует и как она выглядит.
Это не значит, что на выходе из школы получатся профессиональные разработчики ПЛИС (точно так же, как на выходе из школы не получаются профессиональные биологи и физики, хотя биологию и физику там преподают).
Mikeware
если речь идет о дополнительном образовании в школьные годы — ну, почему бы и нет? кому-то интересны ардуины и моргающие светодиоды. кому-то — ездящие по правилам железяки. кто-то вообще интересуется радиоволнами или звуком. все это — электроника. в этом контексте дать школьникам (лицам школьного возраста) поиграться с микроконтроллерами или FPGA — почему бы и нет (как вариант — и с контроллерами систем пром. автоматизации).
чтоб поступая в университет, человек понимал «область»
olartamonov
Сначала дополнительное и физмат-школы, а там посмотрим.
Mikeware
ну а чего смотреть-то? ИТ — это само по себе специфическая вещь, нужные не всем. а профессиональное программирование и проектирование электроники — их маленькие пожмножества. а уж проектирование процессоров/систем с помощью языков описаний — это единицы. будет отрасль — будут и кадры.
olartamonov
А какие-то школьные предметы, преподающиеся после шестого класса, нужны всем? Ну, кроме физкультуры?
Andy_Big
Давайте утрировать до конца — учить нужно только базовому письму и чтению, все остальное — лишнее :)
Mikeware
до какой глубины нужно изучать физику, химию, биологию? или, упасигосподи®, историю с обществознанием и прочие культурологии? давайте рисованию учить до уровня института Сурикова, пению до уровня Гнесинки? ну и физкультуре не менее чем до мастера спорта по 6-7 видам?
olartamonov
Вы как-нибудь на досуге определитесь, вы мне тезис «не надо изучать совсем, потому что нужно не всем» доказывать собираетесь или же «не надо изучать слишком глубоко, потому что нужно не всем», а потом приходите.
sadr0b0t
А что в этом плохого? Гостью из будущего помните?
Mikeware
плохого — то, что нельзя требовать более-менее серьезного изучения всего от всех. не хвати ни времени, ни способностей (да и преподавателей. ибо в школе за 5 лет преподавания физики училка продемонстрировала три или четыре опыта… зато формулы учат. и школа, между прочим, еще «на хорошем счету»)
impetus
Вот как ни странно — «общая физика». Тем более что она — реально вечная, эти знания за жизнь человека не устаревают, в отличие от прорвы прочик в т.ч. школьных… Впрочем увы — то что, и как преподают в школе — большей частью действительно нереальный сюр отрванный ото всего… а потом зимой трубы лопаются, потому что народ в массе своей о том, что вода при замерзании расширяется, а коэффициент трения резины по асфальту и по льду — существенно разные — заново учится на собственном опыте, причём не в «физических терминах» «в голове» а каждый строит себе в голове некую чудесатую модель из набора частностей, хотя в школе им всем давали готовую.
Недавно аж целый профессор-метеоролог выдал на всю страну в эфир, что весной снег на крыше намокает и его вес увеличивается...
Э-ээхххх…
Mikeware
Да все предметы нужны. чтобы понимать, что мир велИк, и областей знаний много. даже таких непонятных мне, как «литературоведенье» и «мировая художественная культура».
olartamonov
Абсолютное большинство присутствующих не только не сможет с первой попытки решить какую-нибудь задачку из школьного учебника общей физики, но и ни разу в жизни не сталкивалось с необходимостью её решать.
Поэтому повторю тезис: задача школы — не давать «необходимые в жизни знания». Задача школы — давать понимание о том, как устроен мир и из чего он в общем и целом состоит, чтобы ребёнок дальше сам мог выбрать интересующую его область и получать в ней уже действительно необходимые ему знания.
Mikeware
с тезисом — абсолютно согласен. но изучение fpga в данном случае — это аналог «изучения нуклеиновых кислот» в школьном курсе химии. или «тернарной проблемы Гольдбаха» в школьном курсе математики…
для дополнительного внешкольного образования/физматшкол (а уж тем более — специализированных детских лагерей) — самое то, что надо
olartamonov
Во-первых, в тексте заметки про физматшколы сказано прямо.
Во-вторых, я не вижу, чем FPGA принципиально сложнее ардуины. На том и другом светодиодом помигать можно за сравнимое время.
Mikeware
отличаются — приложением. грубо говоря, водителей нужно больше, чем автомехаников. а автомехаников — гораздо больше, чем разработчиков автомобильных двигателей. все они научатся ездить н амашинах за одинаковое время. и даже заправляться. и стекло протирать. а дальше появляются различия.
olartamonov
На колу мочало, начинай сначала.
А биологов, географов, математиков и лингвистов вообще практически нисколько не нужно.
Из этого, однако, почему-то не следует, что в школе надо учить вождению автомобиля и не надо — биологии и географии.
Потому что не надо путать школу с ПТУ. Школа не готовит «востребованных обществом специалистов».
Mikeware
ну не нужно приписывать мне то, чего я не говорил. и биологи нужны, и географы, и даже эти…
простиисторики… и цель школы — показать, что есть такие отрасли знаний. с демонстрацией микроэлектроники справляется (должна, по крайней мере) физика.olartamonov
Вы почему-то ненужность ПЛИС обосновываете тем, что «программист ПЛИС» не востребован как профессия, а нужность биологии никак в вашей же голове с профессией «биолог» не связывается.
И если уж на то пошло, то физика может справиться с демонстрацией чего угодно. Что, однако, не делает ненужной даже химию — которая, конечно, по своей сути в чистом виде небольшой подраздел физики.
Mikeware
биологов нужно чуть больше, чем разработчиков ПЛИС…
rexen
FPGA — это дорого, сложно, узко.
«Поморгать светодиодом» можно на чём угодно. Начиная от голых реле и заканчивая нейронными сетями.
А вот какую-нибудь домашнюю метеостанцию делать на FPGA — себя не уважать. Для ПЛИС есть совершенно определённые узкоспециализированные сектора, где нужны их преимущества.
BigBeaver
Mikeware
«проходят,» а не «изучают»
вообще, нуклеиновые кислоты я приплел как цитату из «вид с высоты» Азимова:
BigBeaver
В школе все проходят и ничего не изучают, если уж так рассуждать))
Mikeware
изучают, но до определенного уровня. о том, что нклеиновые кислоты есть — знают (в лучшем случае, конечно — но по программе «должны знать»). глубже — вряд ли. а ведь отдельные люди изучают эти самые нуклеиновые кислоты всю жизнь… и понимают, что знают о них мало…
BigBeaver
Можно заменить «нуклеиновые кислоты» на «натуральные числа» или на что угодно еще, и смысл утверждения не изменится.
Andy_Big
Школьному образованию как раз ближе программирование микроконтроллеров. У них гораздо более широкая сфера применения, гораздо выше шанс, что может пригодиться в жизни.
Оно не принципиально сложнее, а принципиально другое. Ну и речь идет не о программировании AVR, а о программировании Ардуин. И я не знаю как в этом конкретном случае, но в своей массе программирование Ардуин изучается на уровне «найти скетч, вставить его, нажать „проверить“, нажать „загрузить“». Как только что-то идет не по сценарию (скетч не работает как надо, не грузится, компилятор выдает ошибки) — паника и вопросы на форумы. То есть умение программировать Ардуины и умение программировать AVR — в большинстве своем отличаются как умение разогреть готовый обед в микроволновке и умение этот обед приготовить из исходных продуктов.
Вообще, задача школьного образования должна, на мой взгляд, ограничиться просто общими принципами — что это такое и в чем отличие от микроконтроллеров. Если вообще должна задевать эту тему в рамках общей программы.
olartamonov
Вы путаете школьное образование со специальным техническим, оно же ПТУ. Навыки, с которыми можно трудоустроиться слесарем третьего разряда сразу по выпуску из учебного заведения, даёт ПТУ.
Школа даёт общее, всеохватывающее представление об окружающем мире, на основании которого школьник может в этом мире ориентироваться — в том числе выбирать дальнейшее направление обучения. Сами по себе биология, физика, география даже в том объёме, в котором их даёт школа, 9 из 10 школьников в жизни никогда не пригодятся — да что там, им по большому счёту даже математика с русским языком не сильно пригодятся.
Программирование в школе преподаётся штатно, на x86. Программирование микроконтроллеров — уже в некоторых школах тоже. Если там будут даваться ещё и ПЛИС — это замечательно, так как ПЛИС — это отличная от микроконтроллеров парадигма.
Это будет отписка для галочки, а не преподавание.
Mikeware
«программирование в школе» — не «на x86», а «на паскале». в лучшем случае. в лицеях и особо продвинутых школах — сишарп и джава.
по наблюдениям (сын сейчас заканчивает школу) освоили программирование — двое из класса.
Andy_Big
Мне кажется, что это как раз Вы путаете. Выпускнику средней школы совершенно не нужно в обязательном порядке знать ни программирование микроконтроллеров, ни программирование FPGA, это уже специальное или дополнительное образование. Максимум что школьникам могут давать в обязательном образовании — это базовые понятия.
Это да, невостребованность знания русского языка очень заметна в русскоязычном интернете :)
olartamonov
Ему и биологию с географией знать не надо, вообще говоря. Более того, знание о том, как процессор работает, ему в современной жизни потребуется скорее, чем знаний отличий митоза от мейоза или название столицы Гондураса.
Однако это не является поводом вычеркнуть их из школьной программы, оставив в ней одну физкультуру.
Andy_Big
Биологию с географией, как и остальные общие предметы, ему знать надо. FPGA — нет, как и микроконтроллеры, строительство, юриспруденцию, хирургию, судовождение, водолазное дело и т.д. и т.п.
olartamonov
А зачем надо знать биологию? Можете ли вы, не заглядывая в гугль, написать отличие мейоза от митоза, вы же знаете биологию? Перечислить страны, с которыми граничит Перу, вы же знаете географию?
А программирование почему тогда не надо знать? Стоит ли его вообще исключить из школьной программы?
Andy_Big
Не могу, но со школы у меня осталось достаточно знаний, чтобы понять прочитанное в гугле.
Тоже нет, но по крайней мере я знаю где это и легко могу найти эти граничные с Перу страны.
Откуда я знаю почему. Я про программирование ничего не писал.
olartamonov
То есть ни биологию, ни географию вам, вопреки вашему же утвреждению, знать в жизни не требуется — и вы их, собственно, и не знаете.
Andy_Big
Передергивания, высосанные из пальца выводы… У меня складывается впечатление, что я общаюсь с троллем. Поэтому продолжайте без меня :)
ru_vlad
Во первых ПТУ сейчас уже НЕТ, а есть колледжи (аля аналог техникумов ).
Во вторых, данное, современная отечественная школа не дает и не может дать (данное говорю как практик).
Текущие задачи средних образовательных учреждений как и задачи у бизнес структур одинаковые, зарабатывание денег. Администрации ОУ прежде всего нужно «поголовье» (за это оплата) и успешная итоговая аттестация учащихся (престиж и прочее) и ВСЕ!
Полностью согласен с Mikeware, не о каком программировании, а тем более микроконтроллерах и FPGA речи идти не может.
Если что и есть где то только силами энтузиастов и в кружках дополнительного образования (Дома творчества и прочее).
В третьих, с нашим очередным министром образования и ее идеями школьники не то что информатику, а просто в старшей школе (10-11 классы) учится перестанут.
Ну и последнее, по себе скажу (веду кружок) желающих работать и осваивать новые знания сейчас среди детей ЕДИНИЦЫ!
borec1
Т.е. 9 из 10 человек никогда не посадят, прости господи, укроп на даче (биология), не починят утюг (физика) и не уедут из своего родного города (география)?
Вы какую-то конкретную школу имели в виду?
olartamonov
На уроках биологии не рассказывают, как сажать укроп, на уроках физики — как чинить утюг, а на уроках географии — как доехать до соседнего города. И да, 9 из 10 человек не смогут вам сообщить, к какому семейству относится укроп, какова зависимость мощности нагревателя от напряжения на нём и каков климат в Перу — хотя это всё как раз на соответствующих уроках рассказывают.
borec1
Полученных школьных знаний достаточно, чтобы самому понять как сажать/чинить/доехать. Проверено на себе еще в доинтернетовскую эпоху, когда нельзя было вот так просто загуглить, а приобретение книги «Юный радиолюбитель» было редкой удачей. И на школьниках 2000-х. Смогли. Три из трех. Утюг.
Все-таки у нас с вами какие-то разные школы рядом находятся. В вашей программирование на х86, в моей — просто физика и биология.
YuriPanchul
STM — это точно такое же программирование, как и Ардуино, только в Ардуино GCC toolchain припрятана и нет RTOS-ов (только обработка прерывание без переключения контекста), а в STM не припрятана (и можно делать переключение процессов/задач).
Представим себе программирование Ардуино или STM как вождение машины — от пересаживания с Тоеты на Хонду вы не изучите, как работает ее двигатель и коробка передач, даже если вы будете очень много водить. А вот с FPGA — изучите.
На FPGA вы можете сконструировать свой процессор, в том числе аналог процессорного ядра AVR в Ардуино или Cortex-M в STM. Никакое количество программирования эту способность вам не даст.
Вопрос о том, что получится, если дать действительно другой взгляд, не привязанный намертво к концепции фон-нейманновской машины в программировании.
Andy_Big
Нет, Вы не поняли. Ардуино позволяет вообще ничего не знать о микроконтроллере, о том как работает его периферия и как ее настраивать, о прерываниях и их роли и т.д. Это складывание готовых кубиков. И вот следующим шагом для желающих было бы как раз умение работать с микроконтроллерами — научиться программировать их не готовыми блоками «вставил-нажал кнопку-заработало», а именно на уровне самих микроконтроллеров и их периферии. Пусть не STM, пусть те же AVR (хотя не вижу смысла изучать устаревшее), но именно программирование микроконтроллеров, а не сборка готовых скетчей.
olartamonov
А школьникам это зачем надо? Ну то есть какие знания о принципах устройства окружающего мира им принесёт тщательное изучение RM0008?
Ковыряние в регистрах конкретной железки — это занятие для посетителей какого-нибудь радиокружка. В школе оно уместно не более, чем умение самостоятельно рассчитать DC/DC — хотя в принципе вон там на фоточках эти DC/DC на отладках есть.
P.S. И, кстати, STM32 тоже позволяет практически ничего не знать о самом микроконтроллере. Развернул RTOS — и вперёд.
Andy_Big
Ну да, изучение FPGA гораздо более уместно, чем умение рассчитать DC/DC :)
olartamonov
Вообще да. Это я вам как человек, умеющий делать обе вещи, говорю.
dernuss
Во первых кое какую периферию настраивать в ардуино всё таки надо:
Во вторых у STM есть замечательная утилита STM32CUBEmx, в которой можно многое настроить просто тыкая галочки.
Andy_Big
Это не настраивание периферии микроконтролера :)
Я в курсе этой утилиты.
dernuss
А что это тогда?
Andy_Big
Это использование одного из «кубиков» Ардуины. По сути то же, что и галочки в CUBEmx.
dernuss
Эта строчка
pinMode(12, OUTPUT);
настраивание цифрового порта на выход, а цифровой порт относится к периферии микроконтроллера.
Andy_Big
Это вызов функции из библиотеки Ардуины.
Настраивание любой периферии производится через регистры микроконтроллера. Умея делать это на одном микроконтроллере, Вы легко сможете сделать это и на любом другом. Умея же вызывать библиотечную функцию, Вы сможете вызывать ее только там где она есть.
dernuss
И что, я данной функцией не настрою порт на выход?
В любом случае я настраиваю периферию, так или иначе.
Я на STM32 настраиваю периферию подобным образом.
Вам и написали же
И если я умею через регистры настраивать у периферию у одного микроконтроллера, то не всегда я настрою легко в любом другом. Так как регистры могут быть разные. Как и функции, только функции легче читаются.
BigBeaver
dernuss
Даташиты тоже бывают часто недоступны, и что?
Andy_Big
Можно пример? :)
dernuss
пример чего?
Andy_Big
Нет, Вы вызвали функцию, и можете только надеяться, что она внесла правильные значения в правильные регистры. А если она сделала это неправильно, то без знания микроконтроллера Вы приплыли.
Еще раз поясняю, последний. Если Вы знаете как настраивается периферия микроконтроллера (а не вызывается чья-то функция), то при переходе на другой микроконтроллер Вы знаете что делать — найти в документации отвечающие за эту периферию регистры и внести в них нужные значения. А если Вы знаете только функцию, то при переходе на другой микроконтроллер Вы становитесь совершенно беспомощным пока не найдется написанная кем-то нужная функция.
Вот только регистры у микроконтроллеров есть всегда, в любой среде программирования, в любой момент. А функцию еще должен кто-то написать чтобы ею можно было воспользоваться.
От тех же ардуинщиков то и дело на форумах появляются посты «скачал скетч, а он не работает, помогите». Найти проблему для них уже непосильная задача, потому что они даже не представляют как на самом деле все работает в микроконтроллере.
И еще одно, тоже еще раз и тоже последний: я не против такого подхода в любительской практике. Но знание Ардуин вовсе не означает знания микроконтроллеров.
dernuss
А если записали данные в регистр, то можете только надеяться что ошибки нет ни в даташите, ни в самом микроконтроллере.
Я что то уже не припомню когда программировал микроконтроллер и под него не было API. Наверное когда писал под МК51 на asm лет 15 назад.
На форумах много постов почему не работает код на STM32 и так далее…
Mikeware
с другой стороны, в ардуине библиотечным вызовом я сконфигурирую вывод и в «расово верной» ардуине, и в ее клонах на STM32. тогда как делать это «ручками» для AVR и для STM — это две большие разницы.
кому-то нужно одно (плевать на то, какой кристалл), кому-то другое (выжать из кристалла все, что можно)
Andy_Big
В принципе согласен, хотя разницы эти не такие уж большие :)
Mikeware
«позволяет» и «заставляет» — разные вещи. тот, кому интересно — может лезть вглубь ардуины, до «голого кристалла».
почему вы считаете, что следующий шаг — это именно «программирование микроконтроллеров»? а может, следующий шаг — подключение к ардуине силового оборудования, или разработка новых датчиков? зачем вообще делать «шаг вглубь» (в любую сторону), если ардуина позволяет реализовать потребности?
вы же после получения прав не сделали «следующий шаг» — получения удостоверения автомеханика (а затем, и разработчика двигателей)? наверное, нужно уметь вовремя остановиться…
Andy_Big
Я не говорю, что это обязательно, я говорю, что после освоения Ардуин «делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog» не выглядит логичным. Гораздо более логичным будет более подробное изучение микроконтроллеров без высокоуровневых кубиков Ардуины. И повторюсь — для желающих.
Mikeware
ну, был у нас учебный курс проектирования систем из секционников. т.е. теоретически мы могли создать свой процесссор (примерно то, что сделали в Буране). только я не слышал о том, чтоб на секционниках что-то делали массово.
учить миллионы школьников FPGA, чтоб на выходе получить пару разработчиков — несколько расточительно.
ну а те, кому интересно — вполне могут и сами к этому прийти, если будут знать о существовании. например, из Ваших статей/видеокурсов (или как это модное направление сейчас называется?)
Mikeware
программирование ардуино среди школьников — все-таки не настолько массовое. и даже если оно массовое — переход к FPGA и Verilog не выглядит естественно…
вообще, как олдскульник — я рад такой инициативе. но здраво размышляя, возникает вопрос — а оно массово — нужно? и самим этим школьникам, чисто практически, и стране?
YuriPanchul
Для школьников: писание программного кода на любом языке типа C, Паскаля или Питона вносит в подсознание парадигму фон-нейманновской машины (примерно как советский школьный дневник навсегда впихивал в подсознание как должна выглядеть неделя), потом на всю жизнь вычисление будет представляться как цепочки команд, с if-ами, циклами, в крайнем случае – как несколько цепочек таких команд, идущих параллельно.
Это вызывает сильный когнитивный диссонанс, когда человек сталкивается с вычислениями на основе конвейерной обработки данных. При попытке кодировать такое на верилоге программист с опытом сначала всячески норовит представить это в интуитивно привычной (но неработющей форме).
Поэтому было бы интересно поселить в голове у молодого человека две картины вычислительного устройства: программирование (на основе ментальной модели фон-нейманномской машины) и цифровой дизайн на уровне регистровых передач (с концепциями конечного автомата и конвейера).
В первой ментальной модели (программиста) есть такие крипичики как последовательное исполнение, ветви выбора, переменные, выражения, модель плоской адресуемой памяти, циклы, функции (на основе использования стека), рекурсия.
Во второй ментальной модели (электронщика, разработчика логики) есть концепции логического элемента и построенных на них облаков комбинационной логики, выбора с помощью мультиплексора и арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами/циклами; конечный автомат; параллельность операций, для самых продвинутых — концепция конвейера (не только для процессора, но и для арифметических блоков – см. пример с конвейерной реализацией ).
Про конечные автоматы и конвейеры продвинутым учащимся физматшкол знать может довольно интересно. Для студентов-электронщиков – это необходимая часть профессии. Для разработчиков систем из хардвера и софтвера – крайне полезно, чтобы понимать, когда имеет смысл применять хардвер, когда – софтвер.
dernuss
Полностью согласен. Вот только сейчас производители fpga начали распространять компиляторы си для fpga (например vivado hls)
YuriPanchul
Я автор раннего c-to-verilog компилятора и встречался по этому поводу с Xilinx аж в 1997 году. Все эти c-to-verilog тулы имеют сильные ограничения. Попробуйте написать на нем конвейерный процессор с stalls и forwarding. RTL (register transfer level) еще будет жить долго. Ему предсказывали смерть от c-to-verilog уже 25 лет.
dernuss
Дак я тоже пишу для fpga на vhdl. Ну по крайней мере пока.
Просто недавно у нас был в Нижнем Новгороде семинар макрогруп и xilinx,
то, что они показали, выглядело вполне себе работоспособно.
YuriPanchul
Я с российскими представителями макрогруп и xilinx тоже знаком. И даже людей, у которых Xilinx купил этот HLS видел на выствке. Если вы мне покажите, как на этом туле написать конвейерный процессор с форвардингом, я изучу его внимательнее. Проблема в том, что я тулов этой категории видел много, они обещали одно и то же (все показывали синтез какого-нибудь фильтра), но процессоры до сих пишутся на верилоге.
dernuss
У меня на плате есть процессор отдельный TMS320C6678.
Поэтому мне не нужны процессоры на fpga, мне нужны как раз фильтры.
Andy_Big
По мне, так это не более, чем костыль для тех, кому надо по-быстрому состряпать что-то несложное на FPGA :) Но никак не следующий шаг в профессиональном применении.
dernuss
А вот представитель xilinx говорил как раз наоборот;)
olartamonov
Про то, что у нас пользовательские приложения на десктопах все будут на каком-нибудь javascript писаться и в браузере из облака выполняться, тоже много кто говорил.
dernuss
Время рассудит, пришел же vhdl/verilog вместо sch.
Пришёл же си на смену asm.
olartamonov
Потому что C на 99,99 % покрывает функциональные возможности asm, проигрывая в производительности, но резко выигрывая в трудоёмкости.
Но C и железо — это ортогональные направления. Довести C до полной функциональности Verilog можно разве что после долгой обработки напильником, но по пути потеряется весь смысл использования C для описания аппаратуры — а он в том, что программистов на C на рынке труда как говна за баней.
Andy_Big
Это, возможно, сильнее продвинет FPGA в массы, как Ардуино продвинула микроконтроллеры, но не будет востребовано в профессиональной сфере :)
Это, наверное, можно сравнить с визуальным программированием микроконтроллеров, когда программа не пишется на Си, а составляется из кубиков-примитивов в графическом интерфейсе. Это просто, доступно, но никак не гибко и ничего серьезного на этом не сделаешь. Язык Си сам по себе очень чужд идеологии FPGA, и его применение в этой области — костыль :)
dernuss
Зато такой подход позволяет привлечь программистов на си к программированию fpga ;)
А то программистов vhdl/verilog мало, а программистов си много.
Mikeware
а потребности в «программистах vhdl/verilog»?
dernuss
потребности есть, конечно ниже чем си программистов,
но не настолько, насколько их сейчас меньше.
Mikeware
ткунлся сейчас на хахару — программистов ФПГА надо навскидку 2 — на 35 тыр, и на 80. и тут же висят вакансии одинэсников «от 100» и «от 110».
вот вам и потребности…
dernuss
Я получаю больше одинэсников ;)
Mikeware
одиэсник одинэснику рознь…
как, впрочем, и город городу.
и если в москве еще можно как-то сравнивать, то в нижнежопинске…
dernuss
я в нижнежопинске ;((
YuriPanchul
FPGA — это плацдарм ко всему проектированию цифровых микросхем. В Южной Корее тоже было мало разработчиков на Verilog и VHDL, и если бы там все рассуждали как вы, то смартфоны Samsung Galaxy там бы не появились.
Mikeware
Юрий, да я не спорю о преимущистваг ПЛИС и ЯОА.
Я спорю о их месте в школьном образовании.
ну и насчет Южной Кореи: самсунг галакси появился не из-за того, что там были разработчики. и автомобили дэу и хундай — тоже. и ЛыЖы тоже. они появились там потому, что там была бизнес-среда, которая заставляла создавать продукты. а разработчиков они уже нашли (купили, переманили, выростили).
BigBeaver
Не продвинет. FPGA тупо дорого.
Andy_Big
Благодаря китайцам, ныне не так уж и дорого :)
BigBeaver
В сравнении с MCU? Ну фиииг знает.
Andy_Big
Не в сравнении, в абсолютных цифрах :) Их нет смысла сравнивать, они для разных задач.
BigBeaver
Факт, но тогда все еще хуже — задач для FPGA довольно мало пока.
Andy_Big
Это да, согласен :)
YuriPanchul
Главная задача для FPGA с моей колокольни — это быть наглядным способом учить будущих проектировщиков ASIC-ов и систем, а также иллюстрировать математические концепции школьникам олимпиадного типа. Масштаб их применений в массовых устройствах менее важен.
Если нужно, можно всегда упоминать «А для чего, по-вашему, Intel купил Altera за 17 миллиардов долларов и теперь Altera FPGA называется Intel FPGA»?
BigBeaver
Я помню все это из прошлых дискуссий с вами))
В принципе, вы делаете хорошее дело, и я уважаю ваш энтузиазм. Но в то же время я вижу проблему в массовом продвижении вещей, которые невозможно массово использовать. Это как предлагать минидомну в каждую школу под лозунгом «стране нужны металлурги».
YuriPanchul
Ну я же не просто предлагаю — меня приглашают. Значит кому-то нужна и минидомна. Иначе бы я не выезжал из Саннивейл, где я ваяю кусочек MIPS I6500 — технически на порядки более редкая, хитрая и массовая деятельность чем все эти образовательные программы (про то, чему я учусь у своих коллег, в учебниках вообще не пишут, а наш клиент — Mobileye, сейчас часть Intel-а, чип для самоуправляемого автомобиля EyeQ5).
ukt
Для того, что бы гиганты вроде Microsoft, FaceBook, Google, Amazon и тп. могли эти встроенные в процессоры блоки конфигурировать под свои задачи. Но, столько разработчиков фпга не нужно, сколько «обычных» программистов.
Для общепромышленных задач фпга тоже не сильно подходит.
Фпга программист — это как физик ядерщик, навеки вечные привязан к АЭС, и вероятно, к какой то определенной.
Их(фпга программистов) много не нужно, поэтому работодатели могут диктовать абсолютно любые условия.
YuriPanchul
Вы просто не очень понимаете, как FPGA вписывается в общую картину. Большинство микросхем в мире — это ASIC, а FPGA используются для прототипирования, образования и малых серий. См. в частности:
https://habrahabr.ru/post/317558/
nckma
Я прошу прощения, может чего не знаю: какие такие FPGA делают китайцы?
Andy_Big
Китайцы делают платки с FPGA по цене меньше, чем тут стоит один чип — https://www.aliexpress.com/item/Altera-FPGA-Board-ALTERA-Cyclone-IV-EP4CE10-Board-FPGA-Development-Kit-USB-Blaster-Abundant-Hardware-Resource/32778903912.html
nckma
Я вам больше скажу. Тот же Terasic продает официальные девелопер киты Альтеры (теперь уже Интел) по цене, дешевле чем чипы ПЛИС в интернет магазине альтеры.
Как они это делают?
BigBeaver
Это такая стратегия. Ученики получают все дешево (часто ниже себестоимости), а потом при выходе в продакшен все по полной оплачивается=) Именно потому поиграться на макетке может и правда выгодно и удобно, а запилить свой девайс уже фиг знает — как бы не пришлось макетки разбирать на детали для мелких партий.
SADKO
Если-бы, но увы…
… есть просто вторичный рынок FPGA, наковырянных из телеком оборудования
Mikeware
дело в другом: а оно школьникам нужно? тем более — «массово»?
я полностью согласен с Вами, что знатьи понимать цифроую схемотехнику программисту очень полезно. но не необходимо.
показывать школьникам «все многообразие мира» тоже нужно. но для этого нужна определенная база, и интерес опять же к электронике. Программистов сейчас нужно гораздо больше, чем электроншиков. а системщиков — гораздо меньше, чем электронщиков.
Ну а то, что этот курс необходим студентам «вычислительных специальностей» и интересен физматшкольникам — я согласен полностью. Но это — не «массы», это единицы процентов от «ардуинщиков».
кстати, по опыту — школьники конечные автоматы прекрасно усваивают, и применяют на ардуинах.
YuriPanchul
Детям в Киеве понравилось делать кодовый замок на верилоге (простой конечный автомат). Раз нравится — можно использовать. Опробуем теперь в Новосибирске.
И ардуинный VP согласна, и готовит помимо платы выше еще одну FPGA плату от Arduino
Mikeware
простой конечный автомат прекрасно реализуется на классических императивных языках программирования (насчет функциональных — я слаб). и даже «регулярные выражения» — это конечный автомат.
safari2012
нас на теор.кибернетике их учили писать на паскале.
YuriPanchul
При желании можно и на фортране писать обработку списков и компиляторы. Использовать параллельные массивы и индексы для хранения узлов дерева. Но это было бы странное использование фортрана, не так ли?
Да, конечные автоматы можно реализовать и на Паскале, и на Верилоге.
Но фишка в том, что синтезируемое подмножество 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
Mikeware
функциональные языки — они не являются «цепочкой инструкций».
и каждой задаче нужен свой инструмент.
я не вижу ничего плохого, если кто-то будет знать еще и верилог, но не вижу ничего хорошего, если он будет знать только верилог.
YuriPanchul
Я в курсе про lazy evaluation в функциональных языках. Но в конечном итоге они все равно или транслируются в цепочки инструкций, или интерпретируются цепочками инструкций. А вот Verilog становится схемой, которая является более общим случаем, чем фон-нейманновская машина.
BigBeaver
Нет принципиальной проблемы транслировать верилог в цепочку инструкций.
YuriPanchul
Да, именно так верилог и симулируется. Но его основное использование — это логический синтез схем, и именно эта технология привела к тому, что у нас сейчас есть айфоны. Без нее их бы не было, так как предыдущая технология 1980-х годов (рисование схем мышкой на экране) не обеспечивала достаточно высокой производительности разработчика микросхем. Именно введение синтеза верилога и VHDL как мейнстрима электронной индустрии 25 с лишним лет назад привело к появлению современных высокоинтегрированных чипов.
BigBeaver
Я это написал только потому, что вы при сравнении языков делаете упор на то, во что они транслируются. Я считаю этот подход неверным — можно транслировать все во все при желании. Историческую роль верилога, имхо, можно связать с тем, что тогда не было возможности строить описания схем иначе. Сейчас я, например, не вижу принципиальной проблемы синтезировать схемы на основе декларативной математики типа матлабовской (это очень образно пример).
YuriPanchul
Тут мы заходим в область, которая называется «высокоуровневый синтез». Успеха на этом пути еще никто не достиг, хотя последние 25 лет я слышал не менее 25 презентаций о том, что скоро верилогу конец настанет (включая свою собственную — https://en.wikipedia.org/wiki/C_Level_Design. Т.е. пока тот же Apple для айфонов и Tesla для тесел используют верилог. Например я еще не видел описанный в декларативном виде конвейерный процессор с stalls и forwarding, даже совсем простой.
BigBeaver
Ну 25 лет назад обьективно не было возможностей, и это все было в лучшем случае умозрительными концепциями (имхо). Сейчас это больше вопрос привыеч и востребованности (имхо). То есть, новых инструментов (пока) нет, а специалистов по старым (пока) много. Не могу сказать, что я очень хорош в этой сфере, но думаю, что следующие лет 5-10 будет сохраняться равновесное состояние, а потом верилог подвинется, как раньше подвинулись плюсы.
То есть, я не могу сказать, что вы не правы, но и согласиться, что за верилогом будущее, тоже не могу)) И разумеется, я только за обучение людей, которые хотят учиться, безотносительно того, о каких технологиях речь)
YuriPanchul
*** но думаю, что следующие лет 5-10 будет сохраняться равновесное состояние, а потом верилог подвинется, как раньше подвинулись плюсы ***
Тут дело к сожалению не в ограниченности инструментов. Тут дело в отсутствии даже идеи методологии, которая бы могла заменить (на достаточно широком спектре дизайнов) register-transfer-level (RTL) methodology (используемой вместе с Verilog и VHDL). Типичные демо тулов для высокоуровневого синтеза уже 25 лет демонстрируют, как хорошо они умеют синтезировать цифровой фильтр, но ни один не может придумать, как сделать forwarding/bypass в процессоре — или даже как просто выразить это в языке, не опускаясь на RTL методологию.
Поэтому то, что вы сказали — это просто вера по ложной аналогии с историями в софтвере.
YuriPanchul
*** но не вижу ничего хорошего, если он будет знать только верилог. ***
Я ни в коем случае не предлагаю учить _только_ верилог. Знать верилог без знания одного из императивных языков программирования (C, Pascal, Java, Python) — это тоже неправильно. Для корректной картины инженерного мира нужны обе стороны хардверно-софтверной системы (по крайней мере в физматшколах для инженерно-ориентированных детей).
YuriPanchul
См ответ https://geektimes.ru/post/289827/#comment_10121697
potan
Может проще и правильнее заменить C/паскаль/питон на Haskell?
Mikeware
Дейкстра предлаал начинать обучение программированию с функциональных языков…
вопрос в том, надо ли это «в массах», и «кто это будет делать» (ибо школьные учителя… ну, сами понимаете...)
potan
Как раз «в массах» очень надо прививать использование надежных языков. Начинающие или не прфессиональные программисты могут делать много ошибок, от которых защищают хорошая система типов и отсутсвие неявного состояния. А их код используется все чаще.
С учителями пороблема…
herr_kaizer
А может и не быть.
YuriPanchul
Подавляющее большинство людей в жизни и с рекурсией не столкнутся. Ее вы тоже предлагаете не учить?
Mikeware
значительная часть людей в жизни сталкивается с изменениями в собственных психических процессах. Давайте в школе учить для начала моноаминовую гипотезу? а затем и дальнейшее развитие?
у всех людей (ну, почти) в жизни будут дети… давайте учить генетику человека полностью (чтоб могли предсказывать вероятность генетических заболеваний)? а заодно и педагогику? Ну и т.д., до абсурда…
YuriPanchul
Мне все-таки интересно, как вы ответите на прямой вопрос о рекурсии. Рекурсию в школе изучать? Вы можете ответить «да» или «нет»? (В зависимость от ответа «да» или «нет», у меня будут сразу два другие вопроса)
BigBeaver
Концепция рекурсии важна в математике. В частности — в вычислительных методах. На любой более/менее негуманитарной специальности нужно иметь хотя бы минимальное представление о ней.
YuriPanchul
А как же школьники СССР жили до 1985 года без рекурсии? (Программирование в школах ввели в 1985 году) Как-то и факториалы учили, и ряды, и даже теоремы с индукцией.
BigBeaver
Численные методы были менее востребованы, не? Вычислительных машин (должной производительности) не было же, численная маткматика без них бесполезна (почти). Но вообще, я не учился в 80-х (и в СССР вообще успел только родиться, по сути), так что честно скажу, что не знаю, как они обходились, и чем занимались. Но судя по рассказам отца все было очень-очень иначе, и программирование (тогда еще в машинных кодах) было чем-то для избранных. Сейчас это не так, потому и важно дать эти концепции. Проектирование sock все еще для избранных, потому предлагаемые вами концепции менее важны.
p.s. я не говорю, что это совсем не надо (сильно утрируя можно доказать нужность или ненужность чего-угодно, но это не конструктивно). Речь только о приоритетах. То есть, если у меня будет выбор учть своих детей рекурсии или верилогу, я выберу первое. Я говорю «или» потому, что отведенное на учебу время конечно, и получить все и сразу маловероятно.
YuriPanchul
На машинных кодах в СССР программировали в 1950-е, а потом (в 1960-е) на Коболе (для учета производства) и Фортране (физики), потом на PL/1, в начале 1980-х была смесь фортран-кобол-pl/1-паскаль (плюс немассово ассемблер) и в середине 1980-х стал распостраняться Си. Уже в 1970-х это было точно не для «избранных». При этом в учебнике для мехмата МГУ начала 1980-х еще были машинные коды с последующим переходом на Algol-60, но это было необычно для того времени и немного извращенно (не соответствовало времени).
Mikeware
ну, нас учили программированию на ЯСК (это такой «русский ассемблер для Минск-32») на УПЦ. там же показывали и примеры машкодов. В институте — для основной массы инженерных специальностей, у которых было «программирование» (а это было далеко не у всех) — был фортран. и задания в ВЦ на перфокартах. только отдельные кафедры имели свой «дисплейный класс» — в основном, связанные с вычтехникой. там уже «на выбор» — от кодов (в те времена систему команд 8080 и PDP помнил на память), включая различные ассемблеры — и до ЯВУ… впрочем, первый компилятор мы написали на фортране, а первый дизассемблер — на бейсике… и ничего…
BigBeaver
Я честно не помню, в каких годах учился отец (думаю, что в районе 70-х), но он программировал в машинных кодах, забивая потом это дело в перфоленту на телетайпе, емнип. Я даже видел тетради с записями всякой такой фигни)) Разумеется, в 80-х этого уже не было, но и до современного уровня было, как до луны.
Mikeware
рекуррентные соотношения давали и до 85 года (я сам закончил школу в 85-м).
YuriPanchul
Рекуррентность в курсе математики и рекурсия в программировании — это не одно и то же. Числа Фибоначчи и ряды можно программировать и итерацией.
Я завел разговор про рекурсию вот с какой целью — с моей точки зрения рекурсия важна, но важно например и конвейерная обработка — для меня это концепции одно уровня важности. Конвейерную обработку показывать на Паскале — это можно, но это извращение. А вот на Верилоге — в самый раз.
А вы говорите, что рекурсия важна, а конвейерность — нет. Апеллируя к числам фибоначчи и рекуррентным последовательностям в курсе школьной математике. Я же говорю, что числа фибоначчи программируются итеративно, следовательно наш спор — о предпочтениях.
(Рекурсия становится незаменимой при обработке деревьев, но в школьной математике этого по-моему нет)
BigBeaver
Любая хвостовая рекурсия разворачивается в цикл. Обхода деревьев это, вроде, касается. В школе они есть на информатике, как минимум, в профильных классах.
Покажите, каким именно образом важна конвеерная обработка (как концепция), если вы не занимаетесь проектированием процессоров. Кроме того, я счиаю эту концепцию очень простой, и особого смысла показать ее как можно раньше не вижу.
YuriPanchul
*** Любая хвостовая рекурсия разворачивается в цикл. Обхода деревьев это, вроде, касается. ***
А не-хвостовая? Поиск по бинарному дереву?
*** если вы не занимаетесь проектированием процессоров ***
Это гораздо более общий принцип, применимый даже для арифметических блоков, не говоря уже о сетевых чипах итд — см.
http://panchul.livejournal.com/268104.html
Почему микроэлектроника не сводится к гонке за нанометрами
BigBeaver
как-то так, если я ничего не путаю
Ок, если не занимаетесь проектированием чипов вообще (а не только процессоров).
YuriPanchul
Он просто реализует рекурсию через явный стек. Это та же рекурсия, но под другим именем (мне нужно было это сказать в комменте выше, но я это опустил для простоты)
BigBeaver
Как хранятся данные — отдельный вопрос. Механизм реализации чисто итеративный. Также обратите внимание на:
YuriPanchul
Рекурсия на уровне ассемблера тоже реализуется с помощью стека — причем на RISC процессорах используются одни и те же команды для вталкивания и выталкивания из стека — что на реализации с неявным стеком, что на реализации с явным стеком. На CISC (например x86 бывает явный push и pop, но это просто сокращение)
BigBeaver
В общем, мне лень дискутировать о терминологии. Тем более, что важность рекурсии я не отрицаю. Как насчет второго вопроса? (он мне более интересен)
YuriPanchul
Второй вопрос — о важности концепции конвейерности. Ну вам она кажется неважной, мне она кажется не менее (скорее более) важной для мира хардвера, чем вам рекурсия для мира софтвера. Это субъективно. Но что объективно — для цельной картины мира нужно иметь представление и о базе софтверной части, и о базе хардверной части — иначе в обществе не будет потребность для создания своих российских самсунгов и эпплов, а все будут в лучшем случае ковыряться в деталях битов memory-mapped регистров микроконтроллеров с целью программирования готовых чипов, спроектированных в других странах.
(вообще похожие дискуссии были в 1985 году о важности введения программирования в школах, и тогда многим тоже казалось, что например игры на японском компьютере MSX Yamaha — этого Россия не достигнет ни через 50 лет, ни через 100, а сейчас есть вот получившая международное признание игра в танчики).
BigBeaver
Вопрос не в этом. Мне интересно, где понимание конвейеров важно кроме проектирования чипов. Я не говорю, что это вообще не нужно. Но считаю очень узкой специализацией. Но возможно, я чего-то не знаю, и у вас есть другие примеры?
Mikeware
Потребность для создания возникает не из знаний устройства… потребность возникает из желания что-то сдедать… а конкретных реализаторов идеи можно для начала и пригласить «снаружи»
YuriPanchul
В электронной индустрии сложная структура реализаторов (RTL design engineer — functional verification engineer — performance modeling engineer — physical ASIC design — итд), целыми компаниями их из Silicon Valley выписывать нереально, а чтобы выучить, требуется долгое время (это не как в софтвере для писания вебсайтов).
Mikeware
будет идея — можно и выписать/организовать удаленную совместную работу/заказать часть работы.
но если будет 100500 «реализаторов», но не будет идеи (а равно — рыночной инфраструктуры, институтов) — эти 100500 инженеров в лучшем случае пополнят ряды менеджеров по продажам, а в худшем — ряды безработных…
YuriPanchul
Без понимания идеи будут только поверхностные, типа me too. А с выросшей средой — рынок сейчас становится глобальный.
Mikeware
у нас спор перешел в плоскость «что первее — курица, али яйцо»® :-)
в подтверждение своей позиции я могу сказать, что в 90-е высвободилось из военпрома огромное количество инженеров и отраслевых ученых, умеющих делать «суперхреновины» на почти мировом уровне. только вот ни самсунга, ни эппла не появилось — появились челноки…
Mikeware
да, и насчет «глобального рынка»… именно это позволяет прикинуть, что ваше начинание с изучением приведет не к созданию «отечественных самсунгов», а с перетеканием «наших мозгов» в «ихние самсунги» (возможно, даже удаленно)
Mikeware
в курсе математики рекурсия нужна и изучается (рекуррентные соотношения), вроде как сейчас классе в 9.
в курсе ИКТ рекурсия нужна в лучшем случае как пример, но если ее и не упомянуть — особого вреда не будет…
YuriPanchul
Насчет страны я написал здесь:
Mikeware
в мире -растет. в стране — нет. и если школьник этим заинтересуется (выучится, и сделает своей профессией), то у него будет два пути: либо «идти в мир», либо «идти по миру»…
YuriPanchul
Ну вот например недавний чип от российской компании ЭЛВИС для умных камер — я написал заметку о нем на Хабре неделю назад:
Mikeware
ЕГЭ в этом году сдает 700 000 школьников. из них информатику (т.е. более-менее интересуется этой областью знаний) — 71 тыс. из них поступят «по направлению» — в лучшем случае 25000 ну и так далее. допустим, что из этих 25000 в год заинтересуются ФПГА 10% -2500. у нас есть 2500 рабочих мест в год?
SADKO
Автор выше популярно объясняет, что смысл не в том что-бы наплодить инженеров, а в том что бы посеять идеи, применение которым найдётся далеко за пределами разработки железа и софта…
Mikeware
несколько странный метод посева идей с помощью специфического железа и не менее специфического софта.
YuriPanchul
Это не «специфическое железо» и не «специфический софт», а общие концепции 1) три основы цифровой электроники — gate, clock, flip-flop; 2) концепция конечного автомата; 3) что такое процессор с стороны железа и со стороны софта — граница между архитектурой и микроархитектурой.
Никаким количеством программирования Ардуино или STM (что в рамках этих концепций просто разные вариации фон-нейманновской машины) вы это не выучите.
А это совершенно необходимо, чтобы иметь малейшее представление, как работают абсолютно все цифровые чипы на рынке — от айфона до спутника — и как строятся программно-аппаратные системы.
Это гораздо более широкий класс концепций, чем работа с регистрами STM.
Это нужно чтобы создать рынок новых работ, и вовсе не только в FPGA, но и в ASIC design. Или вы хотите, чтобы россияне вечно программировали чужие чипы?
BigBeaver
1) Это вузовский курс электроники. Школьником кроме Gate особо не надо ничего
2) Конечные автоматы прекрасно учатся даже в прикладном программировании без всяких ардуинок.
3) А применение у этого какое? Зачем простым смертным микроархитектура?
YuriPanchul
А детям в Киеве понравилось делать кодовый замок на верилоге (простой конечный автомат). Раз нравится — можно использовать. Опробуем теперь в Новосибирске.
ukt
будут программировать чужие фпга. шило на мыло.
Вы же разработку на фпга продвигаете, а не разработку самой фпга.
YuriPanchul
Нет, я продвигаю разработку ASIC, а FPGA использую как тренажер
Mikeware
почему вы ограничиваетеь концепциями цифровой электроники, а не рассматриваете глубоко те же транзисторы? устройство триггеров? полупроводники- все их заперещенные зоны, влияние различных примесей, технологии производства микросхем вообще и FPGA в частности? :-)
ru_vlad
Вы слишком оптимистичны, у нас в городе 300 выпускников (11класс) Информатику сдают примерно 90 человек, а поступать по профилю ИТ человек 15 из них электроникой интересуются не более 2-3.
Так что 25000 и 10% это слишком радужно. Информатику для сдачи ЕГЭ берут потому что надо что то еще кроме «базы» и многие считают что это легче чем остальные предметы.
borec1
При этом в вузы даже на IT специальности чаще требуют физику, чем информатику (кстати, по той же самой причине — легче сдается).
Mikeware
ИТ-специальности — понятие довольно широкое.
но в целом, физика требуется при поступлени на бОльшее количество специальностей.
Mikeware
Я взял статистику по экзаменам из РГ. (https://rg.ru/2017/05/29/glava-rosobrnadzora-otvetil-na-voprosy-vypusknikov-i-roditelej-pro-ege.html)
сын сдает сейчас оные, поэтому держусь в курсе (сегодня, кстати, физика).
сдавать «кроме базы» что-то совсем не обязательно. и информатика в существующем виде — не самый легкий (из-за невнятности курса) предмет. кроме того, самыми легкими считаются болтологические предметы — обществознание, история.
ну а электроникой интересуются мало. причины простые и взаимосвязанные: 1. все можно купить в китае. 2.инженерная работа непрестижна 3.нет производств
GarryC
Юрий (извините, не знаю Вашего отчества), зайдите на любой форум по Ардуино, зайдите на любой сайт данной тематики, посмотрите на сами Ардуино библиотеки, и Вы поймете, насколько Ваше утверждение далеко от истины, даже если использовать «менее», про «более» я даже не заикаюсь.
А с ПЛИС будетеще хуже, я в этом не сомневаюсь — далее собственно вопрос — и на фига?
YuriPanchul
Я же написал в посте — или вы бросили читать после первых пары абзацев? Ну для вашего удобства скопирую, зачем:
Далее в конце:
GarryC
Может быть, Вы не поняли мой основной посыл, но, если бы «слепое пятно» было бы только между физикой и программированием, я был бы только рад.
Я не настолько хорошо разбираюсь в физике, но я неплохо разбираюсь в программировании, особенно встроенных систем, и, поверьте мне, в этой области размер области незнания (вчерашних школьников, причем тех, кто занимается Ардуино, то есть не всех подряд), чудовищен и лично я не понимаю, как и зачем учить их ПЛИС.
Andy_Big
Более того, не меньшее слепое пятно существует между Ардуино и микроконтроллерами как таковыми :) Прыгать из Ардуино в FPGA… Мне совершенно непонятна такая логика.
YuriPanchul
Между нами говоря, я вообще считаю, что программировать микроконтроллеры стоит сразу учить со «взрослыми» тулами — я изложил эту точку зрения в свое время по ссылке ниже. Там я писал про PIC32 и Микрочип, но это все совершенно так же относится и к STM32 и AVR:
При этом следует считаться с фактом — Ардуино понравилось куче преподавателей, они к ним прикипели душой, и вот это так. Да, можно учить еще и STM32 или PIC32, даже научить школьников обращаться с RTOS при желании. Но все это все равно _обычное_программирование_, ничем принципиально не отличающее от программирования на десктопе на Питоне.
А вот цифровая схемотехника — это другая область, с языками, которые строят хардверные структуры, а не цепочки команд, как программы на Си в Ардуино, STM, PIC32, Windows итд.
Причем для понимания как работает тот же айфон, и как его спроектировать, недостаточно научиться встроенному программированию, нужно еще знать и хардверный аспект, по крайней мере видеть, что в этой части вселенной не темная материя с призраками Стива Джобса, а конкретные структуры, выраженные на уровне register transfer level. Это и достигается с помощью внедрения Verilog и FPGA. Кроме этого, детям это нравится.
dernuss
Ну для понимания как работает айфон, ещё необходимо понимать СВЧ, антенны, распространение радиоволн и т.д…
Andy_Big
Ну еще бы, видимый результат уже на втором занятии и никакой нудятины про регистры, стеки, адресацию памяти :)
С Ардуиной — да. Надо вывести строку в UART: подключили скетч, вызвали функцию — готово. На десктопе: подключили библиотеку, вызвали функцию — готово. С микроконтролером без высокоуровневых прокладок: сконфигурировали нужные выводы, переключили их на управление периферией, сконфигурировали один из UART-ов, в цикле (для простоты не трогаем прерывания) выплюнули в него строку по одному символу, контролируя окончание передачи каждого.
Ну и вообще в таком случае непонятно зачем дергали Ардуины, они не способствуют развитию навыков ни общего программированию ни программирования микроконтроллеров :) Если у Вас цель научить общему программированию — учите ему на десктопе, нафиг Ардуину. Если цель — научить программированию микроконтроллеров — учите программировать микроконтроллеры, с регистрами, прерываниями, ПДП и т.д., нафиг Ардуину. Вот после этих двух вариантов будет логично дать основы Verilog как альтернативного пути создания автоматов.
dernuss
Ага, да и не на СИ, а на ASM или вообще в машинных кодах. Только олдскул, только хардкор.
BigBeaver
Зачем так утрировать? У си все хорошо с прямым управлением памятью и работой с регистрами.
Впрочем, до тех пор, пока не требуется продвинутая работа с памятью, на асме не сильно сложнее писать.
dernuss
А почему нет?
Andy_Big
Вы можете сразу машинными кодами писать, если так тянет к созданию и дальнейшему преодолению трудностей :)
M_AJ
А что такого в ASMе МК? Это же не x86 там нет заморочек с защищенным режимом, и программы на десятки мегабайт там пишут не часто. Знал двух программистов МК, один из которых любил писать на ASMе, а другой на Си, и не сказал бы, что скорость разработки и отладки у них кардинально отличалась.
Andy_Big
Да ничего такого в нем нет, разве что с читаемостью и поддержкой кода у Си получше обстоят дела, да и удобство разработки гораздо выше. А качество современных компиляторов в большинстве случаев почти нивелирует возможный выигрыш в размерах или скорости работы ассемблерного кода.
BigBeaver
Есть мнение, что компилятор даже код на плюсах собирает лучше, чем человек пишет на асме.
dernuss
Так же есть мнение, отличное от этого ;)
BigBeaver
Зависит от сложности, полагаю)
M_AJ
Каждый раз, когда кто-нибудь это пишет, я вспоминаю гневный пост Торвальдса о "неизлечимо поломанном" GCC, который "нельзя выпускать из детского сада". Он конечно, как всегда, в своем репертуаре, и воспринимать его слишком уж серьезно не стоит, но доля правды в его словах есть, и я считаю, что если программист любит ASM и способен решать поставленные перед ним задачи за отведенное время, то ему нет особого смысла связываться с компилятором Си, рискуя нарваться еще и на его дополнительные баги.
BigBeaver
Все верно. Обратного никто и не утверждает)
Andy_Big
Это применимо к любому инструменту — если человек им хорошо владеет и справляется с поставленными задачами, то нет смысла переучивать его на другой инструмент :)
Mikeware
человек человеку рознь :-)
но переключаясь с архитектуры на архитектуру — качество кода на асме я обычно теряю. не знаю, как у других…
YuriPanchul
*** Если у Вас цель научить общему программированию — учите ему на десктопе, нафиг Ардуину. Если цель — научить программированию микроконтроллеров — учите программировать микроконтроллеры, с регистрами, прерываниями, ПДП и т.д., нафиг Ардуину. ***
Да. Но это не моя борьба в текущий момент, хотя я вашей борьбе вполне сочувствую и симпатизирую.
*** Вот после этих двух вариантов будет логично дать основы Verilog как альтернативного пути создания автоматов. ***
Звучит как что-то из мира политики. Типа «не надо давать основы верилога, пока мы не скинули с пьедестала ардуину и не заменили ее нормальному обучению микроконтроллерам с линкер-скриптами и приоритетами прерываний».
Тем самым вы вводите ложную зависимость между очередностью двух на самом деле независимых событий: заменой неприятной вам, но популярной сущности X на более правильную сущность Y — и введением сущности Z. При том, что сущность Z может сосуществовать как с сущностью X, так и с сущностью Y. Даже если промоутеры сущности Z испытывают искреннюю симпатию к вашей борьбе за замену X на Y.
Andy_Big
Нет, опять Вы не поняли :) Ну да ладно, не буду тужиться объяснять дальше, раз у меня это явно не получается :)
Mikeware
ардуино — оно стандартизировало многие аспекты. начиная от физического интерфейса, и заканчивая софтом. любой стандарт лучше его отсутсвия. И на этапе обучения многообразие может даже вредить. Ну и, конечно, оно сформировало свою экосистему… поэтому ардуина удобна в использовании. позволяет быстро создать прототип, добиться результата. кого-то этот результат вполне удовлетворит. кто-то пойдет дальше (либо изучая уже коннтроллеры, либо заказывая железо профессионалам).
те же контроллеры — это вечные холивары PIC vs AVR, AVR vs STM. внутри STMщиков — Keil vs IAR vs CooCox. и HAL vs SPL… так до обучения дело никогда и не дойдет…
сравните, какому количеству народа нужно/полезно/интересно «разрабатывать айфон», и какому — «программы под айфон» (ибо сам посебе голый айфон не функциональнее нокии3310)
YuriPanchul
*** сравните, какому количеству народа нужно/полезно/интересно «разрабатывать айфон», и какому — «программы под айфон» ***
Вы предлагаете не учить? Если бы в Финляндии и Южной Корее так рассуждали, то там бы не появились Nokia и Samsung. И вообще — детям интересно.
Mikeware
я предлагаю делать это не в школе (в которой нет ресурсов). а в широкой сети внешкольного образования, ныне сжавшейся до невозможности.
dernuss
Думаю это слепое пятно существует только у вас.
dernuss
Учить не ПЛИС, а булевой алгебре, арифметическим схемам, конечным автоматам и т.д.
YuriPanchul
Именно! ПЛИС — это просто удобная платформа для практического приложения такого обучения.
old_bear
Содержание 99% процентов комментариев к этой статье я предсказал даже не открывая её.
Но автор заслуживает уважения за упорство в продвижении своего видения мира.
Mikeware
он увлеченный человек. со всеми плюсами и минусами этого…
M_AJ
Увидев статью, решил посмотреть, что там с вакансиями по этой теме, и у меня сложилось впечатление, что чтобы тебе в жизни когда-нибудь пригодились FPGA, нужно ну очень хотеть заниматься именно этим. В большинстве вакансий где они упоминаются, помимо VHDL и Verilog нужны и более мейнстримовые С, С++, Qt.
YuriPanchul
FPGA — это плацдарм ко всему проектированию цифровых микросхем. В Южной Корее тоже было мало разработчиков на Verilog и VHDL, и если бы там все рассуждали как вы, то смартфоны Samsung Galaxy там бы не появились.
M_AJ
Я думаю, что раз взаимосвязь такая тесная, то не обязательно узнавать об FPGA в школе. Если кто-то захочет работать в этой области, у него будет время узнать об этом в вузе, так же как о других подобных специализациях, вроде DSP или PLC. Последние вообще из другой отрасли но там ни менее практически на любой "программистской" специальности дают возможность потрогать все это, чтобы дать возможность осознанно определиться со специализацией. Побуждать же к чему-то конкретному школьников считаю не самым верным решением, особенно при том, что они нередко не очень хорошо представляют как работают триггер и счетчик, какие уж там FPGA.
YuriPanchul
Тем не менее, детям в Киеве понравилось делать кодовый замок на верилоге (простой конечный автомат). Раз нравится — можно использовать. И ардуиновская VP говорит, что поддерживает 1) плату на снимке 2) кто-то у нее пишет книжку по FPGA для детей и 3) они будут делать еще одну официальную ардуиновскую плату.
То, что вы мне сейчас говорите про FPGA/Verilog, в 1984 году говорили про обучение в школе программированию.
Mogwaika
Поверьте, делать например пиротехнику им понравится ещё больше!
А если бы химию преподавали плохо, не появилось бы всяких 3М в США…
YuriPanchul
Кстати DSP и PLC — некорректные аналогии. Какие применения у PLC вне завода? И для DSP нужно знать матанализ заведомо больше чем в школе (преобразование Фурье итд). А в FPGA и Verilog простые принципы (при этом _другие_ чем у программирования), тренируют мозг, важная связь с взрослой жизнью, позволяют построить свой процессор, дети, как показал эксперимент, воспринимают это с интересом.
Mikeware
PLC «вне завода» применялось, например, в немаленьком загородном доме некоего «локального олигарха» — для управления поливом/бассейном/летним кинозалом…
приходилось видеть (правда, издалека) такое на молочной ферме.
иногда встречаются энтузиасты, делающие на них «умный дом».
maslyaev
По своему опыту скажу, что Verilog взрывает мозг программиста, привыкшего к более традиционным средствам. Когда наконец врубаешься в эту магию, и оно наконец-то после заливки через бластер начинает работать — полный восторг.
Спасибо за то, что делаете эту работу. Что бы ни говорили скептики, заполнение логической дыры между булевой алгеброй и Core i7 — очень важно. Без знакомства с этими вещами народ, как правило, не имеет никакого представления о том, где там внутри компа сидит знаменитая машина Тьюринга, а цифровой автомат… ну, это, наверно, что-то про дистанционное управление оружием :))
Удачи!
P.S. Ваш стронг рашн прононсиэйшн — просто чудо. Не избавляйтесь от него.
YuriPanchul
*** P.S. Ваш стронг рашн прононсиэйшн — просто чудо. Не избавляйтесь от него. ***
Ни за что! Пусть трепещут!