Поскольку под микроконтроллеры программировать не умею для домашнего баловства заказал маленькую платку с ПЛИС (FPGA) Xilinx Spartan-3E XC3S500E. Так же на али встречал версии с XC3S250E, но цены отличаются не намного и смысла брать младшую версию не вижу.
По сравнению с отладочными платами типа digilent данная плата имеет весьма скромные размеры 52х57 мм, не имеет много лишнего обвеса и стоит значительно дешевле. А если кому-то это нужно, есть платы «mother board» с дополнительными элементами и отдельные модули обвязки, как например в наборе тут.
Распиновка и прочие параметры расписаны на вики-сайте разработчика waveshare wiki.
Сверху на плате распаяна fpga в корпусе PQG208. Пользователю доступно 116=32+42+42 gpio ножек на гребёнках с шагом 2мм (плюс несколько пинов 3,3 и 5 В), кнопка загрузки программы из энергонезависимой памяти, кнопка сброса и 4 красных светодиода которые можно использовать в работе и два служебных. Плюс 10-пиновый разъём jtag (да, никаких прошивок по usb, нужен программатор, у меня был оригинальный Xilinx, сейчас заказал реплику, пока едет).
На нижней стороны платы установлена микросхема памяти xcf04s для хранения прошивки, генератор NSK E83C на 50 МГц и три AMS1117 на 1,2, 2,5 и 3,3 В.
Заявлено питание 5 В, но может стабильно работать примерно от 3,4 В на частоте 50МГц (Наверное можно питать и от 3,3 В если обойти один AMS).
Если нужны другие тактовые частоты с помощью ядра dcm (которых у этого кристалла 4 штуки) можно сгенерировать тактовые частоты 5-311 МГц (за исключением случаев, когда дробный коэффициент деления частоты имеет слишком большие числа в числителе или знаменателе).
Для проверки работоспособности этой платы и недавно заказанной ленты WS2812b решил сделать простенькую гирлянду. Запитал всё (и WS2812b возможно не пробовал зажигать все 288 светиков на полную, но для проверки 5В 1.5А хватило) от usb блока питания от телефона через breadboard с mini-usb платкой питания (на самом деле тупо в режиме переходника, без задействования драйверов).
Написал простенький драйвер и запустил бегающий градиент.
Часть кода драйвера на verilog
Вот кусочек кода, который отправляет 24 бита RGB в ленту на 50МГц по сигналу en и зажигает по fn
На первый взгляд всё работает, посылка пришла быстро, примерно за 20 дней, а на следующий заказ продавец обещал скидку, если попрошу.
В дальнейшем могу написать про баловство с похожей платой на 6м спартане и высокоскоростным АЦП/ЦАП модулем с али.
Планирую купить+19Добавить в избранноеОбзор понравился+33
+53
Это был тест без всяких притязаний на универсальность с кучей костылей и чипскопом без описания и комментов.
Выложил кусок кода похожего на драйвер, а весь проект могу скинуть по запросу, т.к. всякие облачные хранилища мне кажется забанят ссылку.
Поскольку под микроконтроллеры программировать не умею
… то быстренько освоил один из HDL языков. Ну очень оригинально)) Я помню свои мучения с Flex10K при попытке изобразить что то типа частотомера и приделать его к шине ISA.
Ну я умею matlab и verilog (я ни где не говорил, что быстренько), с сями не сложилось пока, как сгенерить код из матлаба в атмегу или stm, с точными временными рамками (а мне по тактам думать проще) и прочим я не знаю.
На всякий случай спрошу: {clr[0],clr[1],clr[2],clr[3],clr[4],clr[5],clr[6],clr[7]..} не тоже, что и {clr[0:7],...}?
И вопрос более по существу: там в окрестностях Altera и Actel не пробегали?
Я не знал, что возможна такая запись в присваивании, может быть и одно и то же))
Actel лежит скучает, но тут код вроде бы универсальный на всём запустится. Что вас по нему интересует?
Я не сразу понял про Alter-у и Actel. Актелевскую я давно себе покупал на ebay откуда-то из Израиля, редкие они всё же и на али почти не видно, а вот альтеровские есть CycloneII EP2C5T144, но я с альтерами дела не имел, не знаю насколько хорошая именно эта микросхема. Или даже этого же разработчика в аналогичном формате и за те же деньги: CoreEP2C8 EP2C8Q208C8N
Подскажите пожалуйста, нужно управлять 12-ю линейками по 800 пикселей. Стоит ли брать для этих целей данную плату, нужно не только цветом но и яркостью управлять. Ардуино с яркостью на 800 пикселей не может справиться, скорости не хватает.
Есть файл одна строка 800 блоков вида RRGGBB RRGGBB RRGGBB. Обновляеться 10 раз в секунду. Так вот если все значения в блоке больше 7С то линия обновляеться быстро, если меньше то вся линейка начинает меняться уже последовательно. Если мы хотим получив строку уменьшить все значения на 20% и потом отправить в линейку, она не меняет ее мгновенно. Так у нас с ардуино было.
А на ардуине сделано через отправку аппаратным uart-ом? Я пока не понял почему значение цвета как-то влияет на обновление…
Я ещё раз уточню, через какой интерфейс ПЛИС примет 800*24*12*10=2,3Мбит/с?
Ну тут есть 20 аппаратных умножителей, они запросто перемножат ваши данные на нужную величину изменения яркости, единственное тут не хватит памяти, чтобы сделать буфер на 12 целых кадров по 800блоков, но оно наверное и не нужно, главное параллельно потоку как-то сообщать/вычислять начало кадра.
Тут проблема в том, что FPGA — это очень специфичная штука :) По сути — это большая-большая логическая матрица, запихнутая в одну микросхему. И обойтись только ей — обычно невозможно.
Обычно делают связку — микроконтроллер читает и обрабатывает данные и по удобному ему высокоскоростному интерфейсу отдаёт на FPGA, которая уже работает с периферией в нужном периферии формате. Можно, конечно, сэмулировать контроллер прямо в FPGA (старшие модели это позволяют), но это из пушки по воробьям. А в вашем случае порекомендовал бы просто посмотреть на значительно более быстрые STM32.
Ммм. А что за цап/ацп высокоскоростной? Потом в чем отличие программирования под эту штуку и скажем ардуино? Там уже проще не куда. Даже есть графические кодогенераторы.
Главное радикальное отличие в том, что ПЛИС и Микроконтроллер это принципиально разные вещи. В МК описывается последовательность действий, а в ПЛИС схема соединения железа.
Поэтому фраза звучит примерно как «ездить на велосипеде я не умею, поэтому я поехал за пивом на приходской щите». И пойми меня правильно. Я таким сравнением не осуждаю автора. Возможно в его случае это действительно быстрее и проще чем учиться держать равновесие на велосипеде. Но советовать такой путь всем я бы не стал.
Ммм. выходит плис — это считай тот же мк, но без привязки и ограничений функционала на ногах и внутри? Т.е. хочу 20 SPI, получу 20 SPI, а хочу 10 SPI и 10 PWN на тех же ногах… Но потом по идее все равно на этих ячейках выполняется код? Конечно сочно, но дорого. Скажем отдать даже те же 500-800 рублей на моргание светодидом. да я понял суть — Гонять воробья в поле. Спасибо за разъяснение.
Тут есть маленькая RAM, конкретно 360кбит (+73кбит на логике).
Флешку предлагается использовать внешнюю. Просто у процессора логика фиксированная и ему можно послать команду и данные, а тут можно самому объединить нужную комбинацию логики.
Ну не пошло на то.
Процессор выполняет задачи по строкам, шаг за шагом, а программируемая логика делает это сразу.
Допустим нужно обратотать сигнал от сотни датчиков одновременно, так вот процессору потребуется пройти от 1-го до 100-го за какое-то время которое ограничено тактовой частотой.
ПЛИС сделает это за один удар и выдаст на выходе нужный результат. Как будто вы построили огномную плату плату из логических элементов. Там ограничивающий фактор только быстродействие этих элементов.
Вобщем по этому в аппаратах УЗИ, радарах и прочих подобных вещах стоят ПЛИС и DSP а не самые мощные процессоры.
Вы не слышали за многопоточность? Та же мега 328 может сама по себе несколько пвм паралельно с разными параметрами, чтот там еще? Сериал аппаратный. Прерывания. И это доллар за штуку. Т.е. возможности соответствуют цене. Но суть я уже уяснил.
Полезная однако функция!
В следующий раз когда нужно будет вытаскивать в реальном времени пару сотен байт из 70-и мегабитного параллельного спутникового потока поставим мегу 328 ;)
Ну скажем так, формально ты можешь на плис написать МК и на этом виртуальном МК запустить исполняемый код. Так иногда делают, но это не единственный вариант использования ПЛИС.
Скажем возьмем МК, у тебя в МК скажем есть модуль CAN. Ты загружаешь в него данные, а дальше этот модуль сам занимается формированием импульсов на ногах МК, сам следит за правами доступа к шини, сам формирует и принимает пакеты и т д не отвлекая основную программу своими потребностями. Вобщем программирование ПЛИС как раз и строится из того, что описывается устройство таких модулей. Причем эти модули могут работать полностью параллельно.
Да. да. Спасибо. Я так это себе и представлял. А выходит так что каждая логическая единица работает грубо говоря сама по себе? Т.е. паралельная работа? Грубо говоря как я понял я из определенного количества ячеек соберу скажем 2 каких-то процесса, то работа одного не будет влиять на работу. не так. Работа одного не будет влиять на производительность другого процесса?
Именно так. В одном модуле ты описываешь аппаратную реализацию. Поэтому например создав несколько экземпляров одного модуля ты по сути создаешь несколько независимых устройств.
Пока нет времени разобраться, а скажем что у него на ногах будет? Как я понимаю часть ног на модуле для полечения параметров ЦАП, а часть для отдачи АЦП? Просто штука веселая.
Спасибо автору, но хотелось бы больше информации про плис. Какой максимальный ток на ногу gpio, какова среда разработки, какие возможности у микросхемы?!
Шаг у гребенки 2мм или 2,54?
Насколько я понял 16мА (но не факт, что сразу на все ноги в банке, возможно есть ещё ограничения). Даташит на семейство тут, если подскажете какие примерно возможности вас интересуют, могу попробовать прикинуть.
Про шаг писал, что 2мм, у «материнки» возможно 2,5. Есть плата с 6м спартаном, там 2,54 мм шаг.
Конечно!
Осциллограф будем собирать?
И хреново что шаг 2мм, а не 2.54 =(
Выложил кусок кода похожего на драйвер, а весь проект могу скинуть по запросу, т.к. всякие облачные хранилища мне кажется забанят ссылку.
Для тру адептов K&R, конечно ужоснах, зато стильно, модно, молодежно… По цене аэробуса, но кого это останавливало?
И вопрос более по существу: там в окрестностях Altera и Actel не пробегали?
Actel лежит скучает, но тут код вроде бы универсальный на всём запустится. Что вас по нему интересует?
Подскажите пожалуйста, нужно управлять 12-ю линейками по 800 пикселей. Стоит ли брать для этих целей данную плату, нужно не только цветом но и яркостью управлять. Ардуино с яркостью на 800 пикселей не может справиться, скорости не хватает.
Откуда и как планируете передавать данные о цвете пикселей?
Я ещё раз уточню, через какой интерфейс ПЛИС примет 800*24*12*10=2,3Мбит/с?
Ну тут есть 20 аппаратных умножителей, они запросто перемножат ваши данные на нужную величину изменения яркости, единственное тут не хватит памяти, чтобы сделать буфер на 12 целых кадров по 800блоков, но оно наверное и не нужно, главное параллельно потоку как-то сообщать/вычислять начало кадра.
Обычно делают связку — микроконтроллер читает и обрабатывает данные и по удобному ему высокоскоростному интерфейсу отдаёт на FPGA, которая уже работает с периферией в нужном периферии формате. Можно, конечно, сэмулировать контроллер прямо в FPGA (старшие модели это позволяют), но это из пушки по воробьям. А в вашем случае порекомендовал бы просто посмотреть на значительно более быстрые STM32.
Поэтому фраза звучит примерно как «ездить на велосипеде я не умею, поэтому я поехал за пивом на приходской щите». И пойми меня правильно. Я таким сравнением не осуждаю автора. Возможно в его случае это действительно быстрее и проще чем учиться держать равновесие на велосипеде. Но советовать такой путь всем я бы не стал.
Флешку предлагается использовать внешнюю. Просто у процессора логика фиксированная и ему можно послать команду и данные, а тут можно самому объединить нужную комбинацию логики.
Процессор выполняет задачи по строкам, шаг за шагом, а программируемая логика делает это сразу.
Допустим нужно обратотать сигнал от сотни датчиков одновременно, так вот процессору потребуется пройти от 1-го до 100-го за какое-то время которое ограничено тактовой частотой.
ПЛИС сделает это за один удар и выдаст на выходе нужный результат. Как будто вы построили огномную плату плату из логических элементов. Там ограничивающий фактор только быстродействие этих элементов.
Вобщем по этому в аппаратах УЗИ, радарах и прочих подобных вещах стоят ПЛИС и DSP а не самые мощные процессоры.
В следующий раз когда нужно будет вытаскивать в реальном времени пару сотен байт из 70-и мегабитного параллельного спутникового потока поставим мегу 328 ;)
Скажем возьмем МК, у тебя в МК скажем есть модуль CAN. Ты загружаешь в него данные, а дальше этот модуль сам занимается формированием импульсов на ногах МК, сам следит за правами доступа к шини, сам формирует и принимает пакеты и т д не отвлекая основную программу своими потребностями. Вобщем программирование ПЛИС как раз и строится из того, что описывается устройство таких модулей. Причем эти модули могут работать полностью параллельно.
Для ПЛИС тоже есть графические генераторы…
Параметры не настраиваемые.
Шаг у гребенки 2мм или 2,54?
Даташит на семейство тут, если подскажете какие примерно возможности вас интересуют, могу попробовать прикинуть.
Про шаг писал, что 2мм, у «материнки» возможно 2,5. Есть плата с 6м спартаном, там 2,54 мм шаг.
Дешевле МК научиться программировать…