*** ИМХО преимущества знания и программирования на ПЛИС также неочевидны по сравнению с ардуиной. ***
ПЛИС и Ардуино лежат в столь же разных областях, как учебник правил дорожного движения и учебник по конструированию автомобилей. Сколько бы вы не водили машину, вы не поймете, как работает ее двигатель. С Ардуиной люди пишут программу, с ПЛИС они конструируют электронную схему. Программируя Ардуино, невозможно понять, как сконструировано само Ардуино, а вот реализуя примеры на ПЛИС, можно за несколько итераций самому сконструировать простой процессор, подобный тому, который находится в Ардуино.
Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция
… внутри FPGA по сути находится конструктор из тысяч логических элементов наподобие элементов в K155ЛА3, но в FPGA их можно соединять не руками с помощью проводов, а меняя содержимое специальной памяти, биты которое соединены с мультиплексорами, которые меняют логические функции ячеек FPGA и соединения между ними:
Описание RTL2GDSII flow — маршрут проектирования современных массовых микросхем, к которому идет путь от упражнения с ПЛИС (из второго текста):
В последние 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.
Ну например там была проблема для префетчера в L2 кэше, он дистанционно помогал ее отлаживать; далее он давал байкаловцам рекомендации по максимизации производительности с помощью неких установок в Cop0 и других регистрах; наконец (это не только про байкаловцев но и про других пользователей ядер MIPS) он написал что-то в ядре Линукса.
Сама плата ничем не плоха, но вот подход «we simplify FPGA design by providing easy to use drag and drop circuit libraries» является спорным, причем буквально спорным, т.е. я лично спорил на этот счет с менеджером образовательных программ нашей компании в UK Робертом Оуэном. Я ему говорю «ни мы [процессорная группа MIPS Business Unit в Imagination Technologies, ни наши промышленные клиенты, не строят системы на кристалле и IP блоки, собирая их мышкой на экране из кубиков». Он «да ты ничего не понимаешь, студентам нравится возить мышкой по экрану».
С комбинационной логикой проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. С конечными автоматами — диаграммы переходов состояний прямо в конфигурацию ПЛИС не синтезируются (хотя такие тулы были в 1990-е), а вот код позволяет получить работающее железо через синтез и конфигурацию ПЛИС-а.
Несомненно, но так как сам я работаю в части индустрии, где делаются ASIC-и для массовых устройств, и ПЛИС используются у нас для отладки, то мне такой перекос простителен — я смотрю на рост прежде всего этой индустрии. Понятно, что возможности ПЛИС для DSP, телекоммуникационных устройств, криптографии, малосерийных специализированных вычислителей тоже еще полностью не реализованы и это тоже создает рынок работ.
Графика на рисунке 3.30 нагляднее, когда ваш мозг уже связал ее с неким процессом во времени (сканировании нулей и единичек улиткой или, что эквивалентно, нажимании на кнопку на FPGA с работающим на частоте 0.5 герца тактовым сигналом). Да, тогда схема очевидна. Но если мозг не вопринимает диаграмму состояний как процесс во времени, то диаграмма будет восприниматься как абстрактная картинка. И код — способ реализации диаграммы состояний в реальном железе, работающем во времени.
Ну ладно, я вашу позицию понял. Она может быть верна, но чтобы сделать окончательный вывод, мне нужно сделать чистый эксперимент на детях. Вот с этим конечным автоматом (и вообще классом автоматов для распознавания последовательностей), а также простым процессором. Что я и собираюсь сделать.
Ну давайте возмем конкретику. Ниже — простейший конечный автомат. Схема и код на SystemVerilog. Вы утверждаете, что схема более наглядна чем код? Или что схема будет понята как что-то конкретное, а не абстрактное без «прощупывания» этого на FPGA плате?
Код на Verilog из которого синтезируются схемы выше:
В построении простого процессора появляется как минимум одна идея такого же уровня фундаментальности, как и рекурсия в софтвере — это конвейерная обработка.
Ну ладно, отложим процессор в сторону — это действительно не для всех.
Но вы согласны с утверждением: «концепции переменной в программе, массивов, циклов while и for и подпрограмм — это концепции одинаковой степени фундаментальности, как и концепции логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата»?
Насчет языка SystemVerilog — его подмножество можно объяснить за пару уроков. Писать логику лучше на нем. А как еще? Картинками (схемами и диаграммами состояний)? Ну это как изучать программирование не на Паскале или Питоне, а блок-схемами, кстати, так пытались делать для детей (к меня есть детская книжка начала 1980-х годов с блок-схемами).
Работ в России мало потому что в России есть только несколько команд, где это востребовано — http://elvees.ru http://milandr.ru http://module.ru http://mcst.ru http://baikaleletronics.ru и еще несколько. Это проблема курицы и яйца. Чтобы это развить, нужно иметь кучу инженеров с данными skills.
Или вы может вообще считаете, что в России не нужно дизайнить своих чипов, а только программировать готовые чипы от Intel, Apple, MediaTek, Broadcom, Qualcomm, Microchip и т.д. и т.п.?
Интересно, почему для всех нужно давать концепции переменной в программе, массивов, циклов while и for и подпрограмм (включая рекурсию) — а вот концепцию логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата, который изменяет состояние по тактовому сигналу — это не для всех? Вы можете написать в развернутой форме аргументы?
Всем может быть полезно ознакомится с фундаментальными идеями, для картины мира. А тем кто особо заинтересуется — можно построить на FPGA простое микропроцессорное ядро, это несколько сотен строк кода на Verilog. См. глава 7 вот такой книжки, которая доступна старшим школьникам: https://habrahabr.ru/post/317558/
По вопросам можно обращаться по адресу info@school.iis.nsk.su (Татьяне Ивановне Тихоновой)
ПЛИС и Ардуино лежат в столь же разных областях, как учебник правил дорожного движения и учебник по конструированию автомобилей. Сколько бы вы не водили машину, вы не поймете, как работает ее двигатель. С Ардуиной люди пишут программу, с ПЛИС они конструируют электронную схему. Программируя Ардуино, невозможно понять, как сконструировано само Ардуино, а вот реализуя примеры на ПЛИС, можно за несколько итераций самому сконструировать простой процессор, подобный тому, который находится в Ардуино.
Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция
https://habrahabr.ru/post/250511/
и Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались
http://panchul.com/2011/07/28/basics-of-hardware-design-for-software-engineers/
Описание что такое ПЛИС из первого текста:
Описание RTL2GDSII flow — маршрут проектирования современных массовых микросхем, к которому идет путь от упражнения с ПЛИС (из второго текста):
Дело в том, что кажущаяся легкость работы с GUI в данном случае — обманчива. Проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. А с даже небольшим усложнением дизайна (простой процессор) писать код на верилоге становится на два порядка поще, чем делать мышкой schematic entry. Порог с верилогом выше, но ненамного, особенно если сначала смотреть на схемы, синтезируемые из кода — см. напр. http://www.silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/06_optional_introductory_materials_if_necessary_for_the_audience/08_quizes/quiz_4_synthesis_1.html
Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)это был коммент не вам а товарищу выше
Ну ладно, я вашу позицию понял. Она может быть верна, но чтобы сделать окончательный вывод, мне нужно сделать чистый эксперимент на детях. Вот с этим конечным автоматом (и вообще классом автоматов для распознавания последовательностей), а также простым процессором. Что я и собираюсь сделать.
Код на 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
Ну ладно, отложим процессор в сторону — это действительно не для всех.
Но вы согласны с утверждением: «концепции переменной в программе, массивов, циклов while и for и подпрограмм — это концепции одинаковой степени фундаментальности, как и концепции логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата»?
Насчет языка SystemVerilog — его подмножество можно объяснить за пару уроков. Писать логику лучше на нем. А как еще? Картинками (схемами и диаграммами состояний)? Ну это как изучать программирование не на Паскале или Питоне, а блок-схемами, кстати, так пытались делать для детей (к меня есть детская книжка начала 1980-х годов с блок-схемами).
Или вы может вообще считаете, что в России не нужно дизайнить своих чипов, а только программировать готовые чипы от Intel, Apple, MediaTek, Broadcom, Qualcomm, Microchip и т.д. и т.п.?