RSS блога
Подписка
Мини отладочная плата на ПЛИС Xilinx Spartan-3E XC3S500E
- Цена: $25.34
- Перейти в магазин
Поскольку под микроконтроллеры программировать не умею для домашнего баловства заказал маленькую платку с ПЛИС (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 платкой питания (на самом деле тупо в режиме переходника, без задействования драйверов).
Написал простенький драйвер и запустил бегающий градиент.
На первый взгляд всё работает, посылка пришла быстро, примерно за 20 дней, а на следующий заказ продавец обещал скидку, если попрошу.
В дальнейшем могу написать про баловство с похожей платой на 6м спартане и высокоскоростным АЦП/ЦАП модулем с али.
По сравнению с отладочными платами типа 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
module wsdrv( input clk,rst,
input en,
input [23:0] clr,
input fn,
output wire data, rd
);
parameter wait_time = 2510;
parameter TP = 62;
parameter T0H = 15;
parameter T1H = 45;
reg dat;
assign data = dat;
reg [23:0] clr_reg;
reg rdr;
reg [4:0] ccn;
reg [7:0] bcn;
reg [15:0] fncn;
assign fl = bcn==TP-1;
assign fb = ccn==23&fl;
assign rd = rdr;
always@(posedge clk) begin
clr_reg <= en? {clr[0],clr[1],clr[2],clr[3],clr[4],clr[5],clr[6],clr[7],clr[16],clr[17],clr[18],clr[19],clr[20],clr[21],clr[22],clr[23],clr[8],clr[9],clr[10],clr[11],clr[12],clr[13],clr[14],clr[15]}: clr_reg;
ccn <= rst? 0: en? 0: fb? 0: fl? ccn+1: ccn;
bcn <= rst? 0: en? 0: fl? 0: bcn+1;
fncn <= rst? wait_time: fn? 0: fncn==wait_time? fncn: fncn+1;
dat <= rst? 0: fncn!=wait_time? 0: clr_reg[ccn]&bcn<T1H? 1: clr_reg[ccn]&bcn>=T1H? 0: !clr_reg[ccn]&bcn<T0H? 1: !clr_reg[ccn]&bcn>=T0H? 0: 0;
rdr <= (fncn==wait_time&ccn==23&bcn==TP-4)|(fncn==wait_time-1);
end
endmodule
На первый взгляд всё работает, посылка пришла быстро, примерно за 20 дней, а на следующий заказ продавец обещал скидку, если попрошу.
В дальнейшем могу написать про баловство с похожей платой на 6м спартане и высокоскоростным АЦП/ЦАП модулем с али.
+289 |
64716
168
|
Самые обсуждаемые обзоры
+77 |
3989
147
|
+58 |
4162
73
|
Конечно!
Осциллограф будем собирать?
И хреново что шаг 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 мм шаг.
Дешевле МК научиться программировать…