реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите новичку с выбором, выбрать FPGA для работы с АЦП ADS16xx
van_de_luxe
сообщение Oct 17 2017, 07:09
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 1-04-10
Пользователь №: 56 348



Приветствую
Решаю задачку получения данных с АЦП ADS1672 с частотой 625ksps. Контроллер с такой частотой данных уже не справляется (или справляется, но на пределе, что все время занимает работа с АЦП). Хочу перенести часть нагрузки на внешнюю ПЛИС, а именно чтение данных(3 байта в доп. коде) по SPI (на скорости 20, а в перспективе 30 Мбит/с), конвертирование данных в напряжение (float), подергать ножками в случае превышения порогов по напряжению, передать данные на микроконтроллер по к.н. параллельному интерфейсу
Когда-то щупал FPGA, даже на verilog светодиодами поморгал, но сейчас в голове ничего не осталось. Подскажите какую ПЛИС можно выбрать для этих задач, сколько она примерно будет стоить, на чем лучше разрабатывать ПО (видел графические генераторы кода, verilog, vhdl.. , среды разработки), какой дешевый программатор к ним прикупить, и подскажите хороший источник примеров/исходников
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 17 2017, 10:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(van_de_luxe @ Oct 17 2017, 10:09) *
Решаю задачку получения данных с АЦП ADS1672 с частотой 625ksps. Контроллер с такой частотой данных уже не справляется (или справляется, но на пределе, что все время занимает работа с АЦП).
... передать данные на микроконтроллер по к.н. параллельному интерфейсу
Вы считаете, что если МК не успевает забрать данные по последовательному интерфейсу, то он успеет забрать те же данные по параллельному? rolleyes.gif Боюсь вас разочаровать, но просто 'передать данные на микроконтроллер' не сработает - нужно как то уменьшить их объем

Go to the top of the page
 
+Quote Post
van_de_luxe
сообщение Oct 17 2017, 10:42
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 1-04-10
Пользователь №: 56 348



Цитата(XVR @ Oct 17 2017, 14:21) *
Вы считаете, что если МК не успевает забрать данные по последовательному интерфейсу, то он успеет забрать те же данные по параллельному? rolleyes.gif Боюсь вас разочаровать, но просто 'передать данные на микроконтроллер' не сработает - нужно как то уменьшить их объем

Почему же не сработает? скорость передачи будет минимум в 8 раз больше, а это освободит время на другие задачи. Да и обработка там не сложная (напряжение посчитать и с порогами сравнить), ее я в ПЛИС хочу сделать.
В МК есть проблема с временем реакции на внешнее прерывание, ПЛИС должна справиться быстрее.
Проблема не с объемом данных, а с задержками начала обмена

Сообщение отредактировал van_de_luxe - Oct 17 2017, 10:44
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Oct 17 2017, 10:50
Сообщение #4


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(van_de_luxe @ Oct 17 2017, 13:42) *
Почему же не сработает? скорость передачи будет минимум в 8 раз больше, а это освободит время на другие задачи. Да и обработка там не сложная (напряжение посчитать и с порогами сравнить), ее я в ПЛИС хочу сделать.
В МК есть проблема с временем реакции на внешнее прерывание, ПЛИС должна справиться быстрее.
Проблема не с объемом данных, а с задержками начала обмена

Если хотите применять ПЛИС тогда есть ли вообще смысл в МК ?
Go to the top of the page
 
+Quote Post
van_de_luxe
сообщение Oct 17 2017, 11:10
Сообщение #5





Группа: Участник
Сообщений: 14
Регистрация: 1-04-10
Пользователь №: 56 348



Цитата(Flip-fl0p @ Oct 17 2017, 14:50) *
Если хотите применять ПЛИС тогда есть ли вообще смысл в МК ?

Над этим я тоже думал, может и уберу
Go to the top of the page
 
+Quote Post
magnum16
сообщение Oct 17 2017, 11:43
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 11-09-06
Пользователь №: 20 283



Я бы посоветовал Altera MAX 10. Примеры есть на https://marsohod.org/ , например. Стандартный программатор USB blaster называется.
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 17 2017, 13:03
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



контроллер не справляется это если spi ногодрыганием изображать что-ли?
пересылкой данных должно дма заниматься никак процессор не трогая вообще, а у любых кортексовМ особенно с FPU для работы с флоат (хотя опять же ЗАЧЕМ?), и частотой под сотню МГц будет почти пара сотен тактов на каждый отсчёт АЦП, тут не то что ножкой дернуть по порогу, тут ФФТ можно успеть сделать.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 17 2017, 13:38
Сообщение #8


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(_pv @ Oct 17 2017, 16:03) *
контроллер не справляется это если spi ногодрыганием изображать что-ли?
пересылкой данных должно дма заниматься никак процессор не трогая вообще, а у любых кортексовМ особенно с FPU для работы с флоат (хотя опять же ЗАЧЕМ?), и частотой под сотню МГц будет почти пара сотен тактов на каждый отсчёт АЦП, тут не то что ножкой дернуть по порогу, тут ФФТ можно успеть сделать.

так DMA режим настроить надо sm.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
van_de_luxe
сообщение Oct 17 2017, 14:32
Сообщение #9





Группа: Участник
Сообщений: 14
Регистрация: 1-04-10
Пользователь №: 56 348



Цитата(_pv @ Oct 17 2017, 17:03) *
контроллер не справляется это если spi ногодрыганием изображать что-ли?
пересылкой данных должно дма заниматься никак процессор не трогая вообще, а у любых кортексовМ особенно с FPU для работы с флоат (хотя опять же ЗАЧЕМ?), и частотой под сотню МГц будет почти пара сотен тактов на каждый отсчёт АЦП, тут не то что ножкой дернуть по порогу, тут ФФТ можно успеть сделать.

между двумя стробами DataReady 1600 нс
переход в обработчик прерывания занимает около 200 нс
еще около 200 нс на настройку DMA
на чистую передачу данных на 20 МГц тратится 24*(1/20М)=1200 нс
Одна неверная операция и начинаем терять данные
В реальности, работая по прерываниям+DMA я пропускаю 1 отсчет из двух, т.к. настройка DMA и отладочный ногодрыг съедают еще пару сотен нс

Цитата(magnum16 @ Oct 17 2017, 15:43) *
Я бы посоветовал Altera MAX 10. Примеры есть на https://marsohod.org/ , например. Стандартный программатор USB blaster называется.

В этих ПЛИС есть встроенная память для прошивки или в них вообще прошивка как таковая это конфигурирование внутренней структуры, которая сохраняется без питания?
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 17 2017, 15:06
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(van_de_luxe @ Oct 17 2017, 17:32) *
между двумя стробами DataReady 1600 нс
переход в обработчик прерывания занимает около 200 нс
еще около 200 нс на настройку DMA
на чистую передачу данных на 20 МГц тратится 24*(1/20М)=1200 нс
Гм, вы настраиваете DMA на каждую передачу? wacko.gif Неудивительно, что не успевает.

А внешняя FPGA должна будет вам собирать байты по SPI и выдавать пачками в МК с буферизацией? Т.е. вы хотите сделать внешний буфер на FPGA потому что не смогли настроить нормально внутренний (DMA) в МК?
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Oct 17 2017, 15:08
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



А что вы подразумеваете под "200 нс на настройку DMA"? Это же делается один раз...
А что за микроконтроллер используете?


--------------------
Go to the top of the page
 
+Quote Post
van_de_luxe
сообщение Oct 17 2017, 15:15
Сообщение #12





Группа: Участник
Сообщений: 14
Регистрация: 1-04-10
Пользователь №: 56 348



Цитата(XVR @ Oct 17 2017, 19:06) *
Гм, вы настраиваете DMA на каждую передачу? wacko.gif Неудивительно, что не успевает.

А внешняя FPGA должна будет вам собирать байты по SPI и выдавать пачками в МК с буферизацией? Т.е. вы хотите сделать внешний буфер на FPGA потому что не смогли настроить нормально внутренний (DMA) в МК?

А как его нужно настраивать? поделитесь секретом

Если его настроить скажем сразу на 30 байт, он их все сразу и перекачает, непрерывно, а данные-то в АЦП по DR готовы. А приостанавливать и запускать работу DMA/SPI после каждых 3 байт это не сильно быстрее (и гемор там с SPI есть, что его за 1 байт до окончания нужно тормозить, чтобы корректно остановился), чем его настроить заново. Там и настройки то - адреса и размер указать, интерфейс запустить.
Go to the top of the page
 
+Quote Post
magnum16
сообщение Oct 17 2017, 15:26
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 11-09-06
Пользователь №: 20 283



Цитата(van_de_luxe @ Oct 17 2017, 17:32) *
В этих ПЛИС есть встроенная память для прошивки или в них вообще прошивка как таковая это конфигурирование внутренней структуры, которая сохраняется без питания?

есть память
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Oct 17 2017, 18:46
Сообщение #14


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(van_de_luxe @ Oct 17 2017, 18:15) *
А как его нужно настраивать? поделитесь секретом

..если данные постоянно идут - то надо по DMA писать по очереди в два буфера и обрабатывать их по очереди, причём обычно в настройках DMA уже продумано чтобы оно прыгало с одного буфера на другой , что у вас за микроконтроллер?


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Oct 17 2017, 19:18
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Цитата(van_de_luxe @ Oct 17 2017, 22:15) *
А как его нужно настраивать? поделитесь секретом
А о каком контроллере идёт речь? В STM32 DMA настраиваетя один раз, дальше оно само всё работает.
Цитата(van_de_luxe @ Oct 17 2017, 22:15) *
Если его настроить скажем сразу на 30 байт, он их все сразу и перекачает, непрерывно ...
Это если настроить DMA в режиме память->память.
Цитата(van_de_luxe @ Oct 17 2017, 22:15) *
... а данные-то в АЦП по DR готовы
Вам нужно после импульса DR прочитать из SPI 4-ре байта в память? Если у вас STM32, попробуйте по прерыванию GPIO ножки, к которой подключен DR запускать чтение по SPI. А DMA настройте на режим периферия->память, с инкрементом указателя памяти и режимом цикличности + работу DMA по событию выставления SPI-ем флага "буфер приёмника не пуст" (RXNE) + включаете прерывания DMA по событию завершения половины обмена и по окончании обмена (HTIE и TCIE). И делайте всю обработку в этих прерываниях, когда в памяти накопится достаточно данных (а буфер можно выделить большой - сколько памяти хватит). Это уже вам сэкономит время.

Не уверен, что так точно можно сделать, но вот как ещё можно доработать: если есть свободный таймер и второй канал DMA то можно не тратить время на обработку прерывания GPIO. Таймер настраиваем на подсчёт импульсов на ножке DR (считать будем до одного, т.е. обрабатывать каждый сигнал DR), этот сигнал запускает второй канал DMA, настроенное в режиме память->периферия для копирования в spi четырёх байт без циклического режима. А так как в SPI при записи происходит одновременно чтение, то получится после импульса DR копирование четырёх байт в память первым каналом DMA. Т.е. контроллер вообще может ничего не делать, только периодически отлавливая прерывания HTIF и TCIF от первого канала DMA.


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016