Сегодня утром я заходил в офис калифорнийского отделения Ардуино. Там было межкомпанейское совещание по образовательным программам, на которое меня пригласил менеджер из AMD Тимур Палташев. В конце мероприятия возникла любопытная дискуссия:
Вот сейчас школьников учат программировать Ардуино и другие устройства на основе микроконтроллеров и встроенных процессоров (Лего, Расберри Пай итд). А вот в 1970-е годы школьников учили здесь же, в Калифорнии, собирать схемы на макетной плате, на транзисторах и микросхемах малой степени интеграции (7400 TTL, CMOS 4000 итд) с элементами И-ИЛИ-НЕ и D-триггерами. Это как бы и прогресс — на микроконтроллере можно написать программу, которая бы осмысленно двигала роботической рукой, чего трудно сделать на индивидуальных логических элементах, но как мы вырастим школьников, которые бы умели проектировать (не программировать) сами микроконтроллеры?
Ответ в общем-то очевиден: между индивидуальными логическими элементами и выпущенными на фабрике микроконтроллерами можно поместить программируемые логические интегральные схемы (ПЛИС / FPGA) и использовать триаду «индивидуальные элементы — ПЛИС-ы — микроконтроллеры» чтобы сформировать у детей более полную картину мира, в которой есть не только софтвер и немножко интерфейсинга, но системное
Идея учить школьников по всему фронту цифровой схемотехники и встроенного программирования звучит хорошо теоретически, но как воплотить это в жизнь?
У Arduino уже появились недорогие платы с ПЛИС, да и производители ПЛИС стали распостранять бесплатный софтвер для синтеза без сложных лицензий. Однако на пути к нирване стоят:
- Недружелюбность софтвера для синтеза схем и конфигурация ими ПЛИС-а
- Серьезное отличие параллельной ментальной модели кода на языке описания аппаратуры SystemVerilog от интуитивной понятной ментальной модели последовательного программирования
- Специфически детские проблемы, например: даже младшие школьники (7-10 лет) относительно легко понимают концепцию электрического тока, сопротивления и конденсаторов, комбинационных логических элементов, двоичных арифметических операций — но вот с пониманием последовательностной логики (D-триггеров, счетчиков, сдвиговых регистров, конечных автоматов) происходит затык, хотя это понимают старшие школьники.
Если вы не знаете, что такое ПЛИС, вы сможете прочитать мои старые тексты «Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция», а также «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».
Про ментальные модели и детские проблемы я напишу отдельные посты, а сейчас остановлюсь только на недружелюбности софтвера для синтеза кода на языке описания аппаратуры. Этот софтвер выглядит тяжелым для ребенка даже из скриншотов:
Altera Quartus II:
Xilinx Vivado:
Понятно, что для детей такой GUI не годится. Детям нужен простой чистый GUI типа Ардуино, но с некоторой спецификой синтеза языков описания аппаратуры — например GUI должен показывать размер схемы и максимальную тактовую частоту, на которой может работать схема, не перегружая лишними деталями. А также показывать синтезированную схему:
Написать простой GUI в стиле Ардуино должно быть не очень сложной задачей, так как и Xilinx, и Altera содержат в своих пакетах программы, которые выполняют синтез и трассировку с командной строки, и GUI может вызывать эти программы. Осталось найти, кто бы хотел этим заниматься в виде народного open source проекта. Я пообещал товарищам из Arduino.org посмотреть среди моих российских, украинских и т.д. контактов, кто бы мог этим заняться. Предлагаю обсудить это в комментариях.
Вопрос: А зачем синтезировать схему прошиваемую в ПЛИС из описания на языке Verilog / SystemVerilog / VHDL? Ведь есть туля для высокоуровневого синтеза, которые позволяют синтезировать схему из алгоритма на Си?
Ответ: Тулы этого рода имеют серьезные ограничения на типы схем, которые они могут произвести. Попытайтесь на таком туле спроектировать конвейерный процессор с stalls и forwarding.
Вопрос: А вот я нашла на вебсайте этой самой ардуинной платы c ПЛИС ( http://www.cnx-software.com/2016/10/21/alorium-xlr8-arduino-compatible-altera-max-0-fpga-board-sells-for-75/ ), что ее можно программировать обычной средой Ардуино, с обычными скетчами.
Ответ: Просто производитель синтезировал микроконтроллер AVR и прошил его в ПЛИС. Использовать ПЛИС таким образом — это как использовать CD-ROM дисковод в качестве подставки для кофе. Это делать можно, но этим не исчерпывается суть дисковода. На ПЛИС можно делать самые разные схемы, начиная от простого элемента И и мигания лампочками схемотехническим способом, а не только прошивая большой процессор, спроектированный другими людьми.
Автор: YuriPanchul