?

Log in

No account? Create an account
Зашел в офис Ардуино; поговорили о ПЛИС-ах; требуются добровольцы - Юрий Панчул [entries|archive|friends|userinfo]
Money can buy bandwidth. Latency requires bribing God.

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Зашел в офис Ардуино; поговорили о ПЛИС-ах; требуются добровольцы [Mar. 23rd, 2017|01:26 am]
Yuri Panchul
Вчера утром я заходил в офис калифорнийского отделения Ардуино. Там было межкомпанейское совещание по образовательным программам, на которое меня пригласил менеджер из AMD Тимур Палташев. В конце мероприятия возникла любопытная дискуссия:

Вот сейчас школьников учат программировать Ардуино и другие устройства на основе микроконтроллеров и встроенных процессоров (Лего, Расберри Пай итд). А вот в 1970-е годы школьников учили здесь же, в Калифорнии, собирать схемы на макетной плате, на транзисторах и микросхемах малой степени интеграции (7400 TTL, CMOS 4000 итд) с элементами И-ИЛИ-НЕ и D-триггерами. Это как бы и прогресс - на микроконтроллере можно написать программу, которая бы осмысленно двигала роботической рукой, чего трудно сделать на индивидуальных логических элементах, но как мы вырастим школьников, которые бы умели проектировать (не программировать) сами микроконтроллеры?

Ответ в общем-то очевиден: между индивидуальными логическими элементами и выпущенными на фабрике микроконтроллерами можно поместить программируемые логические интегральные схемы (ПЛИС / FPGA) и использовать триаду "индивидуальные элементы - ПЛИС-ы - микроконтроллеры" чтобы сформировать у детей более полную картину мира, в которой есть не только софтвер и немножко интерфейсинга, но системное мышление, в которой задачи распределяются между программированием и схемотехникой, и, пусть на очень простом уровне средней школы, понятны все уровни технологии - от физики полупроводников до транзисторов до логических элементов - до уровня регистровых передач - до уровня микроархитектуры/блочного устройства процессора - до уровня архитектуры/системы команд - до уровня программирования на Си и Питоне - до роботов итд.

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



Идея учить школьников по всему фронту цифровой схемотехники и встроенного программирования звучит хорошо теоретически, но как воплотить это в жизнь?


У ардуинщиков уже появились недорогие платы с ПЛИС, да и производители ПЛИС стали распостранять бесплатный софтвер для синтеза без сложных лицензий. Однако на пути к нирване стоят:


  1. Недружелюбность софтвера для синтеза схем и конфигурация ими ПЛИС-а

  2. Серьезное отличие параллельной ментальной модели кода на языке описания аппаратуры SystemVerilog от интуитивной понятной ментальной модели последовательного программирования

  3. Специфически детские проблемы, например: даже младшие школьники (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 дисковод в качестве подставки для кофе. Это делать можно, но этим не исчерпывается суть дисковода. На ПЛИС можно делать самые разные схемы, начиная от простого элемента И и мигания лампочками схемотехническим способом, а не только прошивая большой процессор, спроектированный другими людьми.
LinkReply

Comments:
[User Picture]From: kincajou
2017-03-23 08:40 am (UTC)
мало того, можно сделать демонстрационную ПЛИС из мелких логических чипов. А если совсем себя не жалеть, то и саму мелкую логику собрать на отдельных транзисторах..
(Reply) (Thread)
[User Picture]From: panchul
2017-03-23 08:46 am (UTC)
Ни хрена себе как народ с 7400 извратился! Я такого еще не видел, хотя из общих соображений такое возможно.
(Reply) (Parent) (Thread)
[User Picture]From: andrey_yurin
2017-03-23 08:50 am (UTC)
Юрий. основная проблема ПЛИС "для школьников" в том, что они в отличие от микроконтроллеров весьма скучные и не приносят отдачи. Ну вот, например, АВР-микроконтроллер 8 бит. Порог вхождения в какую-нибудь ардуину относительно низкий. Плюс много разных датчиков, моторчиков и прочей периферии. В итоге это интересно. А в чём интерес собирать схему на логике? Ну в 80-е понятно - там ардуины не было. Но сейчас? Долго, скучно и неинтересно. Это всёравно, что на день рожденья вместо торта со свечками поставить на стол кастрюлю гречневой каши со словами: "так полезнее". Оно-то полезнее, да. Но вот разочарование от этого...
(Reply) (Thread)
[User Picture]From: kincajou
2017-03-23 10:14 am (UTC)
LEGO почему-то пользуется популярностью
(Reply) (Parent) (Thread)
[User Picture]From: andrey_yurin
2017-03-23 10:19 am (UTC)
Не очень понял взаимосвязь между LEGO и логикой. LEGO большой, красочный и цветной. Можно построить домики, машинки, деревья и ещё кучу всякого. А что интересное сделать из логических микросхем?
(Reply) (Parent) (Thread)
[User Picture]From: kincajou
2017-03-23 12:10 pm (UTC)
ну, не поняли так не поняли. Что ж поделать.
(Reply) (Parent) (Thread)
[User Picture]From: 1i7
2017-03-23 03:16 pm (UTC)
Писать дизайн на Верилоге - это не то же самое, что собирать логику из простых кубиков. Язык, конечно, специфический по сравнению с классическим программированием, но вполне верхнеуровневый. На ПЛИСах с Верилогом вполне нормально осилить стейт-машины, которые будут рулить всякими внешними устройствами, при этом они будут раборать абсолютно параллельно, на контроллере так не сделать. Главная задача - сделать так, чтобы эти стейт-машины достаточно легко подключались к контроллеру, на котором будет работать сервисная обвязка (печатать буковки в сериал порт, подключиться к облаку по вайфаю и т.п.), которую на Верилоге делать, конечно, не удобно.
(Reply) (Parent) (Thread)
[User Picture]From: andrey_yurin
2017-03-23 03:24 pm (UTC)
Ну по условиям задачи, вроде как, подразумевается, что этим должны заниматься не люди, работающие по профессии. А школьники. Так вот я о том, что школьникам стейт-машины будут не интересны от слова: "совсем". Равно как и MAC-операция A=B*C+D. А если нет интереса, то нет и желания изучать что-либо.
(Reply) (Parent) (Thread)
[User Picture]From: 1i7
2017-03-23 05:58 pm (UTC)
>школьникам стейт-машины будут не интересны от слова: "совсем"

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

https://vimeo.com/42450944
https://vimeo.com/42452733
https://vimeo.com/42452808

это стейт-машины в чистом виде, было нормально весело
(Reply) (Parent) (Thread)
[User Picture]From: andrey_yurin
2017-03-24 05:40 am (UTC)
Посмотрел ссылки. Пожалуй соглашусь, что главное в этом деле толковый преподаватель :) Хотя что по мне, то с автоматами знакомиться лучше всего начинать не через их уравнения и наборы триггеров, а через абстрактное представление в Verilog/VHDL. И только после этого переходить к их реализации на логике в виде отдельных элементов. Я-то сужу по своему опыту. До меня теорию автоматов пытались донести в университете. Лучше бы и не доносили.
(Reply) (Parent) (Thread)
[User Picture]From: 1i7
2017-03-24 07:41 am (UTC)
именно на Верилоге
(Reply) (Parent) (Thread)
From: sur_kg
2017-03-25 09:05 pm (UTC)
> с автоматами знакомиться лучше всего начинать не через их уравнения и наборы триггеров, а через абстрактное представление в Verilog/VHDL

Это черевато, как и программирование без хотя бы приблизительного понимания архитектуры памяти.

Хотя есть и другая сторона медали. Меня, например, коробит от вида "простого" лямбда-выражения, когда я пытаюсь себе представить, в виде чего это лямбда-выражение существует в памяти. После этого я не могу спать по ночам не хочу использовать лямбда-выражения. Хотя я могу вообразить человека, который в архитектуре памяти ничего не понимает, а в лямбда-выражениях - как рыба в воде.

Что Вы понимаете под "уравнениями автоматов"?
(Reply) (Parent) (Thread)
From: sur_kg
2017-03-23 06:06 pm (UTC)
Мне тут пришлось недавно сделать коротенькую презентацию по курсу Digital Integrated Circiuit Design via FPGA (который я преподаю %) ), и у меня родилась идея, как продемонстрировать преимущества FPGA над микроконтроллерами. Для этого берется элементарная на первый взгляд задача - проигрывать консонансные аккорды двумя миниатюрными PC-speaker-ами.

Суть в том, что, имея голый микроконтроллер, легко пищать одним спикером (просто подключив его напрямую к порту и в цикле делая { portA=0; sleep(T/2); portA=1; sleep(T/2); }). При этом, разумеется, кроме пищания процессор ничего делать не может. Пищать двумя спикерами уже на порядок сложнее, а добиться при этом того, чтобы частоты основных звуковых тонов были точно равны некоторым заданным значениям - почти нереально.

На FPGA же это сделать проще простого - несколько десятков строк кода на Verilog. Я сделал демо-проект для платы DE10-Lite (используются только 2 пина GPIO, ну и 7-segment-ы для отображения текущего адреса ROM-а где записаны ноты и периудов (T = 1/F) проигрываемых в данный момент нот), могу выложить на GitHub. Единственное, я побоялся подключать спикеры с их низким входным сопротивлением напрямую к GPIO, подключал через 200-Омные сопротивления на макетной плате, поэтому пищит оно не очень громко.

Какова же мораль идея этой затеи? Она в том, что если в проект на Arduino захочется включить фичу, которая не поддерживается стандартной обвязкой, нужно покупать плату расширения. Хотите пищать, не загружая постоянно процессор? Покупайте плату-пищалку. Хотите пищать в две ноты? Покупайте еще одну плату-пищалку плату с двумя пищалками (плату с одной пищалкой мы уже купили, да). Детям, как никому другому, знакома ситуация "хочется, а денег нету". Тут и можно дать им FPGA с лозунгом "железные узлы можно скачать, как софт (и потом портировать на имеющуюся в руках конфигурацию FPGA-чип+обвязка), а то, что не получается найти в интернете - и самим написать". В данном случае придется удовольствоваться тем, что понимание конечных автоматов придет со временем, по мере отладки и проектиования систем

PS+offtopic: Юрий, я вот все собираюсь Вам написать большое подробное письмо, но я - прокастинирующий ленивый раздолбай никак не соберусь. Извиняйте, пожалуйста.
(Reply) (Thread)
[User Picture]From: sir66
2017-03-23 07:31 pm (UTC)
А в чем проблнма пищания нужным тоном на двух спикерах? Для этого в Ардуине каунтеры есть на которых делается аппаратный шим. При некоторой сноровке даже вполне можно wav ы проигрывать. То есть как раз для получения качественного звука поддержка на уровне FPGA очень даже желательна, но ога не нужна не как альтернатива, а как дополнительная поддержка процессору.
(Reply) (Parent) (Thread)
From: sur_kg
2017-03-23 08:53 pm (UTC)
Я, к сожалению, никогда не работал с ардуино, но, насколько я понял по результатам поверхностного знакомства, - каунтеры (как и много чего еще) на ардуино являются опцией (пусть и имеющейся на многих платах по дефолту), которую, возможно, придется докупать . Суть в том, чтобы не докупать платы с контроллерами, нужными для таких опций, а писать их и шить в FPGA.

Насчет WAV-звука - если хочется одновременно с его воспроизведением делать что-то еще полезное, то, помимо написания на Verilog (или покупки железного) звукового адаптера, придется жестко долбаться с прерываниями, а лучше уже использовать какую-нибудь RTOS.
(Reply) (Parent) (Thread)
[User Picture]From: sir66
2017-03-23 09:21 pm (UTC)
Ваш ответ из серии - я Пастернака не читал, но я скажу.. Счетчики и поддержка аппаратного ШИМа есть даже в самых младших контроллерах AVR. И точно есть во всех ардуинках, которые, впрочем, не только на AVR.

Для работы со звуком есть замечательная библиотечка Audio (все возможности которой, впрочем, реализуются только на старших ардуинках с ARM процессорами). Там все на прерываниях и скрыто от прользователя, можно на обычном Arduino IDE строить достаточно сложные схемы с множеством аудио входов, миксерами и различными аудио выходами, можно реализоваывть различные синтезаторы и пр. Все исключительно в фоне и напрерываниях, как я уже сказал, на верхнем уровне можно совершенно спокойно крутить другой функционал с циклами и ожиданиями, есои нужно. Можно даже работать с MP3. Да, наверное, полнофункциональная real time OS была бы более правильной платформой, но я пока не видел ничего то подобного Audio для подобных систем. Микроконтроллер и полноценная ОС не очень хорошо совмещаются, ресурсов маловато.

Серьезные ардуиновские библиотеки это в своем роде шедевр програмисткого минимализма, такую функциональность при мизерном размере кода Вы мало где еще найдете.

Еше рекомендую посмотреть, например, ардуиновские прошивки для мкльтикоптеров или 3d принтеров. На них целая культура основывается.

Edited at 2017-03-23 09:26 pm (UTC)
(Reply) (Parent) (Thread)
From: sur_kg
2017-03-25 08:51 pm (UTC)
> Счетчики и поддержка аппаратного ШИМа есть даже в самых младших контроллерах

Это верно, я как-то уж слишком абстрактно представлял себе микроконтроллер, не подумал, что на МК общего назначения уже давно принято делать солидную обвязку прямо на кристалле.

> Для работы со звуком есть замечательная библиотечка Audio

Это очень круто, вот только вопрос - насколько сложно эту библиотеку приспособить для работы с произвольным звуковым адаптером?

> Еше рекомендую посмотреть, например, ардуиновские прошивки для мкльтикоптеров или 3d принтеров.

Обязательно посмотрю, если буду работать с мультикоптерами или 3d принтерами.


Edited at 2017-03-25 08:52 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: sir66
2017-03-23 09:35 pm (UTC)
Кстати, с тезисом, что железные узлы можно скачивать, как софт и, как срфт дорабатывать если использовать FPGA я полностью согласен. Имено этого мне не хватает во многих моих проектах и я попробую FPGA в ближайшее время освоить и задействовать. И именно этот подход нужно практиковать при обучении.
(Reply) (Parent) (Thread)
[User Picture]From: fatoff
2017-03-23 09:09 pm (UTC)
Чтобы аккуратно вырезать картинку целого окна в Windows: Ctrl-Alt-PrintScreen. Полученную картинку можете сразу вставлять в редакторы по Ctrl-V. P.S. Это по памяти, на линухе не многу проверить.

Edited at 2017-03-23 09:10 pm (UTC)
(Reply) (Thread)
[User Picture]From: fraks_nsk
2017-03-31 01:31 am (UTC)
По Alt+PrintScreen.
Но в посте видимо так и сделано. То что кажется видны окружающие вещи - это рамка окна полупрозрачная.
(Reply) (Parent) (Thread)
[User Picture]From: murmau
2017-03-24 10:54 pm (UTC)

Юрий, зайдите на алиэкспресс, и поищите  связку stm32 fpga icore или чтото вроде этого. Китайцы уже давно продают платки на которых одновременно алтеровская fpga и обычный проц stm32. И это таки я считаю идеальный вариант. И почему та же альтера не сделала в своих fpga аппаратное процессорное ядро для меня зогадка.  Ибо ну люто неудобно получается. По идее должна быть часть которая реализуется аппаратно (fpga) и остальное делает программа в процессоре. Так вот процессора то и нет. И еще один лютый тупак в современных fpga - а какого хрена так мало оперативки?  Sdram снаружи ну люто неудобно.


Короче, добавьте к современным fpga встроенный процессор (stm32, avr, mips, да хоть z80, без разницы) заведите ноги fpga в адресное пространство того процессора, добавьте оперативную память, доступную и из процессора и из fpga, и будет студентам и программирование и разработка устройства. Ну на верхности же лежит все, ну почему не сделано?



Edited at 2017-03-24 11:27 pm (UTC)
(Reply) (Thread)
[User Picture]From: murmau
2017-03-26 09:44 am (UTC)
Цена? Доступность? Не увидел каким образом fpga может в память процессора обращаться (в тот самый гигабайт ddr3)

Edited at 2017-03-26 09:47 am (UTC)
(Reply) (Parent) (Thread)
From: sur_kg
2017-03-26 02:09 pm (UTC)
> Цена? Доступность?

Хотите более дешевое - производите сами )

> Не увидел каким образом fpga может в память процессора обращаться (в тот самый гигабайт ddr3)

Увы, я не работал с этими чипами и даже не читал их мануал. Вы читали? Мне самому интересно, можете коротко сказать, как там соединены FPGA и проц и как, по-Вашему, следовало бы это сделать?
(Reply) (Parent) (Thread)
[User Picture]From: Алексей Борисевич
2017-03-29 04:38 am (UTC)
я делал два последних проекта своих на Altera Cyclone V SoC. однозначно рулезная вещь!
fpga никак в память процессора не обращается -- у в ней самой есть свой отдельный контроллер ddr3 памяти. а с процессором она связана через AXI шину, причем есть AXI-to-Avalon мост. т.е. все что было сделано для Nios можно присабачить и туда.
(Reply) (Parent) (Thread)
[User Picture]From: Алексей Борисевич
2017-03-29 04:34 am (UTC)
не рекламы ради (я сам к этой конторе не имею отношения), но мне лично нравится такая идея
http://www.aloriumtech.com/products/xlr8-altera-max10-development-board/
приятное (FPGA) с полезным (ардуино тулчейн)

Edited at 2017-03-29 04:39 am (UTC)
(Reply) (Thread)
[User Picture]From: panchul
2017-03-29 04:58 am (UTC)
Вы не дочитали до конца поста :-)
(Reply) (Parent) (Thread)
[User Picture]From: Алексей Борисевич
2017-03-29 05:29 am (UTC)
ха. прошу прощения)
(Reply) (Parent) (Thread)
[User Picture]From: slava68
2017-03-29 09:06 am (UTC)
Заказал из Китая плату с Cyclone IV , Начал осваивать Quartus II
Мотивировала к этому, рекламируемая вами книга-учебник :-)))
Уже задумываюсь, что такое мне может потребоваться на ПЛИС, что я не мог сделать на AVR, чтобы терять столько времени.

Пока вижу только "очень быстродействующие DSP" и "просто побаловаться".

Ардуинка с ПЛИС, несомненно, хорошая идея, и то, что туда можно "прошить" AVR упрощает "порог вхождения".
Хорошо бы сохранить совместимость с шилдами, очень геморройно, когда ПЛИС 3.3В, 2.5В или ещё хуже 1.2В
(Reply) (Thread)