Jump to content

    
Sign in to follow this  
Dubov

Разработка буфера на ПЛИС

Recommended Posts

Ищу человека, готового взяться за разработку, а лучше имеющего уже готовое решение. Задача тривиальная. Нужен буфер для АЦП на ПЛИС.

Думаю связка может выглядеть так АЦП->(SPI)->ПЛИС(+SRAM/SDRAM)->(SPI)

Как это должно работать: плис забирает данные с АЦП по SPI и складывает данные в память циклически (памяти должно быть минимум 128kb). Раз в секунду по запросу с SPI ПЛИС должна отдавать данные блоком, который накопился за 1 секунду.

Никогда ничего подобного на стороне не заказывал. Пожалуйста, предложения в личку.

 

Share this post


Link to post
Share on other sites

Не совсем понятно, вам что нужно: разработать блок для ПЛИС, выполняющий вышеуказанное или развести платку с ПЛИС, АЦП, памятью и написать блочёк для ПЛИС ?

--ещё что вы подразумиваете под "выдавать данные блоком?" то есть пересылать по SPI или или может лучше что бы штука формирующая запрос сама считывала это всё из памяти ?

Edited by Jollyquark

Share this post


Link to post
Share on other sites
Не совсем понятно, вам что нужно: разработать блок для ПЛИС, выполняющий вышеуказанное или развести платку с ПЛИС, АЦП, памятью и написать блочёк для ПЛИС ?

--ещё что вы подразумиваете под "выдавать данные блоком?" то есть пересылать по SPI или или может лучше что бы штука формирующая запрос сама считывала это всё из памяти ?

нужно разработать блок для ПЛИС.

под передачей блока данных я понимаю следующее: ПЛИС копит данные с АЦП во внешней памяти и раз в секунду отдаёт то что накопилось. Я думмаю что хост(забиратель) может забирать через ПЛИС по SPI.

Edited by Dubov

Share this post


Link to post
Share on other sites

vitus_strom, SDRAM слишком круто для данной задачи + для нормальной поддержки такой памяти нужна более дорогая ПЛИС.

 

Т.к. памяти не так много надо + частота spi скорее всего не превышает 100мгц, то топикстартеру предлагаю систему CPLD + SRAM. Это, по-моему, проще и дешевле. Мои координаты lancer-7(собак)mail.ru

Edited by Inanity

Share this post


Link to post
Share on other sites
Ищу человека, готового взяться за разработку, а лучше имеющего уже готовое решение. Задача тривиальная. Нужен буфер для АЦП на ПЛИС.

Думаю связка может выглядеть так АЦП->(SPI)->ПЛИС(+SRAM/SDRAM)->(SPI)

Как это должно работать: плис забирает данные с АЦП по SPI и складывает данные в память циклически (памяти должно быть минимум 128kb). Раз в секунду по запросу с SPI ПЛИС должна отдавать данные блоком, который накопился за 1 секунду.

Никогда ничего подобного на стороне не заказывал. Пожалуйста, предложения в личку.

Найдите микроконтроллер со встроенной памятью, или с внешней... А ПЛИС в данном случае - это и сложнее и дороже... Если же нужно иметь только одну железку, то пром-РС за 100 долл. - самое то... Ну или стартовый набор с микроконтроллером готовый. На одной стророне SPI, на другой Ethernet 10/100 и никакой головной боли....

Share this post


Link to post
Share on other sites
Найдите микроконтроллер со встроенной памятью, или с внешней... А ПЛИС в данном случае - это и сложнее и дороже... Если же нужно иметь только одну железку, то пром-РС за 100 долл. - самое то... Ну или стартовый набор с микроконтроллером готовый. На одной стророне SPI, на другой Ethernet 10/100 и никакой головной боли....

причём тут Ethernet?

а микроконтроллер действительно может быть и лучше... только вот внешнюю SRAM мне кажется проще на ПЛИС повесить.

Edited by Dubov

Share this post


Link to post
Share on other sites
... только вот внешнюю SRAM мне кажется проще на ПЛИС повесить.

 

Вы пробовали? Не помню кто сказал "Чем больше человек узнает в какой-либо области, тем больше понимает, как мало он знает". Моё мнение ПЛИС надо использовать там, где высокие скорости и микроконтроллер не потянет, во всех остальных случая на контроллере проще и дешевле как в разработке, так и в стоимости. И вообще когда "Задача тривиальная" это всегда грабли для исполнителя, поскольку заказчику ТЗ писать в лом, а понимания что нужно сделать у заказчика и исполнителя всегда сильно расходятся. Это как надо выкопать три ямы на огороде, но только где и какой глубины я не знаю. И вариантов результата два или исполнитель за стоимость трех ям перекапывает весь огород, или заказчик получает три ямы, которые его не устраивают или вообще могут быть у соседа :rolleyes:.

Share this post


Link to post
Share on other sites
причём тут Ethernet?

а микроконтроллер действительно может быть и лучше... только вот внешнюю SRAM мне кажется проще на ПЛИС повесить.

Объясняю еще раз. У Вас в постановке задачи нет инженерного подхода. Это - "сляпаем, а потом будем думать, что же нам было надо"... Читайте про "гайку М3", Вам полезно будет...

В ПЛИС надо сделать контроллер памяти и его отладить. Потом сделать связь с РС. Кстати, SPI в РС просто так не втыкается, да и на кабель не подвешивается...

Микроконтроллеры сейчас гораздо дешевле, чем ПЛИС. Имеют встроенную память. А, главное, для них уже давно написаны ОСРВ. А в операционке Ethernet - библиотечная функция и примеров полно. А Ethernet гарантирует доставку данных. Причем на любое расстояние...

А что касается "накопился за 1 секунду" и "памяти должно быть минимум 128kb" - то и это не совсем так. Поскольку прием по SPI производится по ДМА, то ресурсов он не жрет. Поэтому, отдавать данные в РС можно начинать одновременно с началом их приема в SPI. А поскольку АЦП, работающий по SPI принципиально медленный (кстати, где расчет времени на прием-передачу данных от АЦП? Нужны ли там запросы готовности АЦП, сколько данных из АЦП принимается за 1 еденицу времени?), то микроконтроллер, такой как Блэкфин еще и успеет сделать сжатие данных. Он не будет передавать все подряд, а только изменения. А это еще более уменьшит буфер для отсчетов из АЦП... Можно конечно, поставить микроконтроллер с USB, а потом мучиться со связью...

Смотрите готовые стартовые наборы, например на starterkit.ru.

Еще раз - Читайте про "гайку М3", и только потом формулируйте задачу правильно!

Share this post


Link to post
Share on other sites
Объясняю еще раз. У Вас в постановке задачи нет инженерного подхода. Это - "сляпаем, а потом будем думать, что же нам было надо"... Читайте про "гайку М3", Вам полезно будет...

В ПЛИС надо сделать контроллер памяти и его отладить. Потом сделать связь с РС. Кстати, SPI в РС просто так не втыкается, да и на кабель не подвешивается...

Микроконтроллеры сейчас гораздо дешевле, чем ПЛИС. Имеют встроенную память. А, главное, для них уже давно написаны ОСРВ. А в операционке Ethernet - библиотечная функция и примеров полно. А Ethernet гарантирует доставку данных. Причем на любое расстояние...

А что касается "накопился за 1 секунду" и "памяти должно быть минимум 128kb" - то и это не совсем так. Поскольку прием по SPI производится по ДМА, то ресурсов он не жрет. Поэтому, отдавать данные в РС можно начинать одновременно с началом их приема в SPI. А поскольку АЦП, работающий по SPI принципиально медленный (кстати, где расчет времени на прием-передачу данных от АЦП? Нужны ли там запросы готовности АЦП, сколько данных из АЦП принимается за 1 еденицу времени?), то микроконтроллер, такой как Блэкфин еще и успеет сделать сжатие данных. Он не будет передавать все подряд, а только изменения. А это еще более уменьшит буфер для отсчетов из АЦП... Можно конечно, поставить микроконтроллер с USB, а потом мучиться со связью...

Смотрите готовые стартовые наборы, например на starterkit.ru.

Еще раз - Читайте про "гайку М3", и только потом формулируйте задачу правильно!

Уважаемый! С чего вы взяли что втыкать надо в PC? Втыкать надо в в ARM9 с Embedded Linux где есть SPI! К качестве хоста будет выступать как раз одна из тех плат, ссылку на которые вы дали.

и не лень вам писать такие длинные и в сущности бесполезные посты?

Отдавать нужно именно блоками! Никакие сжатия и передача по изменению ненужны. Хватит тут выдумывать...

ВСЕМ кто откликнулся в личку я подробно изложил задачу. Уже есть господа у которых в готовом виде то что мне нужно.

 

Вы пробовали? Не помню кто сказал "Чем больше человек узнает в какой-либо области, тем больше понимает, как мало он знает". Моё мнение ПЛИС надо использовать там, где высокие скорости и микроконтроллер не потянет, во всех остальных случая на контроллере проще и дешевле как в разработке, так и в стоимости. И вообще когда "Задача тривиальная" это всегда грабли для исполнителя, поскольку заказчику ТЗ писать в лом, а понимания что нужно сделать у заказчика и исполнителя всегда сильно расходятся. Это как надо выкопать три ямы на огороде, но только где и какой глубины я не знаю. И вариантов результата два или исполнитель за стоимость трех ям перекапывает весь огород, или заказчик получает три ямы, которые его не устраивают или вообще могут быть у соседа :rolleyes:.

теперь вам отвечу: уже нашлась контора у которой поставленая задача реализована именно на ПЛИС и у них уже всё готово.

 

 

Объясняю суть задачи: нужно в систему на ARM9 c ОС(Linux) завести данные от АЦП. Частота дискретизации АЦП 64кГц. Стало быть прерывания с такой частотой в линуксе сожрут всё время(т.е. будет жутко всё тормозить). Напрашивается вывод: сделать аппаратный буфер-мост между АЦП и хостом. Тогда система под Linux сможет забирать данные скажем раз в секунду, но большими пачками (по SPI, который работает на частоте клока не менее 40МГц). Всё!

Если использовать тот же Блекфин да ещё и с ОСРВ - то никакого смысла в Linux на ARM9 нет.

Edited by Dubov

Share this post


Link to post
Share on other sites
и не лень вам писать такие длинные и в сущности бесполезные посты?

Отдавать нужно именно блоками! Никакие сжатия и передача по изменению ненужны. Хватит тут выдумывать...

Уважаемый, Dubov. Коллеги с форума по своей доброте душевной предлагают Вам проверенные своим опытом варианты реализации "туманной" задачи обмена. Никто тут, кроме Вас, не "выдумывает", ибо в своем старттопике Вы написали

Думаю связка может выглядеть так АЦП->(SPI)->ПЛИС(+SRAM/SDRAM)->(SPI)

Если бы Вы изначально в топикстарте нормально описали задачу, чтобы мы тут не гадали, что Вам в итоге нужно?...

Уважаемый! С чего вы взяли что втыкать надо в PC? Втыкать надо в в ARM9 с Embedded Linux где есть SPI! К качестве хоста будет выступать как раз одна из тех плат, ссылку на которые вы дали.
... столько вопросов бы к Вам не возникло и никто бы тут ничего не выдумывал...

Правильно поставленный вопрос - половина ответа.

Уважаемый iosifk правильно сказал:

У Вас в постановке задачи нет инженерного подхода.

Share this post


Link to post
Share on other sites
Если использовать тот же Блекфин да ещё и с ОСРВ - то никакого смысла в Linux на ARM9 нет.

Не хотел зря время тратить, но вижу что тема не сдохла и ее другие читают...

Что бы я мог предложить:

1. Прицепить SPI на контроллер ДМА, так чтобы не было прерываний - "Стало быть прерывания с такой частотой в линуксе сожрут "... а было бы только одно, по концу приемма пакета данных

2. Если это так сложно, то можно взять более быстродействующий процессор, для которого SPI - это медленный порт и желательно его зарядить см. п.1

3. Ну если и это сложно, то я бы взял еще один микроконтроллер. Для серийного изделия - 20-ти ногий "мелкий и дешевый", для разового - такой же АРМ, чтобы не плодить разные платы. Память тоже взял бы с SPI одну или несколько микросхем. И тогда "мелкий" по одному порту принимал бы, а по другому записывал бы в память. Потом по второму или по третьему (это как удобней реализовать, то ли через отдельные линии, то ли через CS) отдавал бы в АРМ. Все получится очень дешево и может быть сделано "одними руками", а не разными... Об этом я писал в статье "Квадрига..."

 

А вот о чем не было сказано, так это об управлении АЦП. Там ведь тоже что-то нужно делать? И с АРМ должен быть протокол. Запрос-ответ? Или данные кинули в пустоту, а потом ловим сбойные коды, которые неизвестно где искать: в АЦП, в памяти или в SPI... Для циклических измерений проще, а если событие однократное? Где будем искать ошибки?

И в микроконтроллере реализовать отладочный режим гораздо проще.

Но об этом ТС не пишет. Думаю, что он сам этого еще не понимает. Ну а ПЛИС - сделают ему копию стартового набора с параллельной дорогой памятью, без контрольных кодов, без подтверждения. Ну, зато дорого... И "гайка" в виде SPI работать будет, а "остальное" - нет!

Удачи!

Share this post


Link to post
Share on other sites

Видел такие штуки на ПЛИС - обычное решение.

В системе сбора данных 8 одноканальных АЦП вешались на ПЛИС, с плис данные выходили в паралельном виде.

Edited by TigerSHARC

Share this post


Link to post
Share on other sites
Не хотел зря время тратить, но вижу что тема не сдохла и ее другие читают...

Что бы я мог предложить:

1. Прицепить SPI на контроллер ДМА, так чтобы не было прерываний - "Стало быть прерывания с такой частотой в линуксе сожрут "... а было бы только одно, по концу приемма пакета данных

 

если вешать АЦП непосредственно на ARM(Linux) то АЦП будет выдавать прерывание о готовности данных каждые 1/64000 = 156мкс. - это бешеная частота для прерываний в Linux (в Linux до 1кГц прерывания можно ловить). никакой пакетной передачи не получится. Само слово"пакет" подразумевает буфер для его хранения.

 

2. Если это так сложно, то можно взять более быстродействующий процессор, для которого SPI - это медленный порт и желательно его зарядить см. п.1

 

для ARM9 - SPI это медленый порт. Если бы я писал на голом железе, я так бы и сделал и вопрос был бы исчерпан. Но у меня Linux со всеми вытекающими.

 

3. Ну если и это сложно, то я бы взял еще один микроконтроллер. Для серийного изделия - 20-ти ногий "мелкий и дешевый", для разового - такой же АРМ, чтобы не плодить разные платы. Память тоже взял бы с SPI одну или несколько микросхем. И тогда "мелкий" по одному порту принимал бы, а по другому записывал бы в память. Потом по второму или по третьему (это как удобней реализовать, то ли через отдельные линии, то ли через CS) отдавал бы в АРМ. Все получится очень дешево и может быть сделано "одними руками", а не разными... Об этом я писал в статье "Квадрига..."

 

Ради бога. Я согласен на вариант с микроконтроллером. Только вот загвоздка. Для моей задачи память должна быть двупортовая, чтобы и считывать и писать данные.

Я упомянул сразу ПЛИС только потому что уже видел такую реализацию.

не вижу проблем сделать на ПЛИС качественно и "одними руками".

 

Извините, но помоему, вы ищите повод упомянуть о своих статьях.

 

А вот о чем не было сказано, так это об управлении АЦП. Там ведь тоже что-то нужно делать? И с АРМ должен быть протокол. Запрос-ответ? Или данные кинули в пустоту, а потом ловим сбойные коды, которые неизвестно где искать: в АЦП, в памяти или в SPI... Для циклических измерений проще, а если событие однократное? Где будем искать ошибки?

И в микроконтроллере реализовать отладочный режим гораздо проще.

Но об этом ТС не пишет. Думаю, что он сам этого еще не понимает. Ну а ПЛИС - сделают ему копию стартового набора с параллельной дорогой памятью, без контрольных кодов, без подтверждения. Ну, зато дорого... И "гайка" в виде SPI работать будет, а "остальное" - нет!

Удачи!

 

управление АЦП - это получение от АЦП сигнала готовности данных(сигнал прерывания на отдельной ноге) и получение данных по SPI (АЦП как slave). Протокол с ARM: ПЛИС (всё же ПЛИС) посылает на ARM сигнал прерывания(тоже на отдельной ноге) как толкьо блок данных готов в памяти, ARM (SPI master) забирает данные. Пока ARM забирает данные, ПЛИС копит следующий блок в буфере (получается пинг-понг буфер).

 

 

Если бы Вы изначально в топикстарте нормально описали задачу, чтобы мы тут не гадали, что Вам в итоге нужно?...

 

Зачем гадать? Если есть заинтересованость взяться за дело - люди пишут в личку. Есть заинтересованность потрещать - пишут сюда.

 

Здесь я описал проблему. Решение мне предлагают заинтересованные авторы в личке(коих уже не один).

Share this post


Link to post
Share on other sites
Я упомянул сразу ПЛИС только потому что уже видел такую реализацию.

не вижу проблем сделать на ПЛИС качественно и "одними руками".

...

Решение мне предлагают заинтересованные авторы в личке (коих уже не один).

И сколько стОит решение на ПЛИС? Неужели, дешевле 22$ ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this