Зашел в офис Ардуино; поговорили о ПЛИС-ах; требуются добровольцы
Сегодня утром я заходил в офис калифорнийского отделения Ардуино. Там было межкомпанейское совещание по образовательным программам, на которое меня пригласил менеджер из AMD Тимур Палташев. В конце мероприятия возникла любопытная дискуссия:
Вот сейчас школьников учат программировать Ардуино и другие устройства на основе микроконтроллеров и встроенных процессоров (Лего, Расберри Пай итд). А вот в 1970-е годы школьников учили здесь же, в Калифорнии, собирать схемы на макетной плате, на транзисторах и микросхемах малой степени интеграции (7400 TTL, CMOS 4000 итд) с элементами И-ИЛИ-НЕ и D-триггерами. Это как бы и прогресс — на микроконтроллере можно написать программу, которая бы осмысленно двигала роботической рукой, чего трудно сделать на индивидуальных логических элементах, но как мы вырастим школьников, которые бы умели проектировать (не программировать) сами микроконтроллеры?
Ответ в общем-то очевиден: между индивидуальными логическими элементами и выпущенными на фабрике микроконтроллерами можно поместить программируемые логические интегральные схемы (ПЛИС / FPGA) и использовать триаду «индивидуальные элементы — ПЛИС-ы — микроконтроллеры» чтобы сформировать у детей более полную картину мира, в которой есть не только софтвер и немножко интерфейсинга, но системное мышление, в которой задачи распределяются между программированием и схемотехникой, и, пусть на очень простом уровне средней школы, понятны все уровни технологии — от физики полупроводников до транзисторов до логических элементов — до уровня регистровых передач — до уровня микроархитектуры/блочного устройства процессора — до уровня архитектуры/системы команд — до уровня программирования на Си и Питоне — до роботов итд.
Если вы не знаете, что такое ПЛИС, вы сможете прочитать мои старые тексты «Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция», а также «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».
Идея учить школьников по всему фронту цифровой схемотехники и встроенного программирования звучит хорошо теоретически, но как воплотить это в жизнь?
У ардуинщиков уже появились недорогие платы с ПЛИС, да и производители ПЛИС стали распостранять бесплатный софтвер для синтеза без сложных лицензий. Однако на пути к нирване стоят:
- Недружелюбность софтвера для синтеза схем и конфигурация ими ПЛИС-а
- Серьезное отличие параллельной ментальной модели кода на языке описания аппаратуры 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 дисковод в качестве подставки для кофе. Это делать можно, но этим не исчерпывается суть дисковода. На ПЛИС можно делать самые разные схемы, начиная от простого элемента И и мигания лампочками схемотехническим способом, а не только прошивая большой процессор, спроектированный другими людьми.
3 Comments
Quartus, вроде бы, можно использовать из make-файлов. Связка make + Visual Studio Code — первое, что приходит в голову. А вот насчет симуляции — то у того же Modelsim — интерфейс нереально перегружен, мне это кажется большей проблемой…
Из моего опыта.
Сам я с института мелкосхемами занимался. Познакомился с радиотехниками которые обучались ПЛИСам. Типичная и самая распространённая их ошибка — полное отсутствие timing constrains. Естественно что проект работает не так как надо, а как повезёт. Чтобы setup-ы, hold-ы выставить эт для начала даташит изучить надо. На англицком ессно.
Как этому школьников научить?
Школьникам нужно давать готовые файлы с timing constraints. Нужно заготовить набор файлов с timing constraints для дюжины разных плат. Для школьных дизайнов используется один clock с известной частотой (как правило 50 MHz, хотя бывают и платы с генераторами на 12 MHz и на 100 MHz). При этом все вводы и выводы на верхнем уровне должны быть registered, и все до вводов и после выводов объявлено false path. Таким образом они могут делать push-button synthesis и просто смотреть, какая при этом получается максимальная тактовая частота от регистра к регистру внутри их дизайна. Про setup, hold и aperture стоит показать картинку (как и про propagation и contamination delays), но особо завязать в этом не стоит, как и не стоит их учить разным опциям в TCL файле для timing constraints.