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

 
 
> ADC -> FPGA -> Ethernet
doom13
сообщение Jun 13 2013, 07:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Имеется: ADC (100 МГц, 4 канала), FPGA, Ethrnet PHY. Необходимо осуществить приём данных от АЦП и передачу их по Ethernet.
Для приёма-передачи по Ethernet используется Nios + SgDMA_MEMtoST + SgDMA_STtoMEM + TSE. Вопрос - каким образом лучше организовать приём данных с АЦП с максимальной скоростью и передать их по Ethernet. Видится вариант решения задачи следующим образом:
1. Создать собственный модуль для приёма данных с АЦП и их преобразования в Avolon ST (ADC_to_AvalonST)
2. Далее забираем данные с помощью SgDMA Stream->Memory (SgDMA_STtoMEM) и записываем в память
3. При помощи SgDMA Memory->Stream (SgDMA_MEMtoST) передаём данные из памяти на TSE

ADC_to_AvalonST => SgDMA_STtoMEM => Memory => SgDMA_MEMtoST => TSE
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vadimuzzz
сообщение Jun 15 2013, 04:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



несколько соображений по теме.
во-первых нужен компонент, который будет складывать данные с АЦП в некоторый буфер. буфер желательно побольше, чтобы payload максимизировать. во-вторых нужен некий планировщик (скорее всего в составе первого компонента), который будет распределять память между каналами. а вот дальше надо определиться, сливать данные большими пачками, либо изобразить некий риалтайм (с соотв. понижением частот АЦП). почему имеет смысл использовать udp_tx_offload: он позволяет располагать в памяти данные для передачи в "сыром" виде, без заголовков и прочей шелухи. причем непрерывным куском в памяти. фактически, дескриптор для этого компонента - это указатель + длина пакета, причем пишется через регистры. копирование из памяти в память процессором (а именно это и происходит в основном при формировании заголовков) - это одно из узких мест ниоса. т.о. при использовании аппаратного ускорения задача сведется к передаче буфера по его заполнении (вариант с передачей большими пачками), либо по прерыванию от компонента-планировщика (если выберете вариант с риалтаймом). на правах ИМХО sm.gif

вдогонку: при использовании udp_tx_offload можно оставить программную реализацию протоколов, потом всегда можно переделать.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 15 2013, 22:31
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(vadimuzzz @ Jun 15 2013, 07:33) *
несколько соображений по теме.
во-первых нужен компонент, который будет складывать данные с АЦП в некоторый буфер. буфер желательно побольше, чтобы payload максимизировать. во-вторых нужен некий планировщик (скорее всего в составе первого компонента), который будет распределять память между каналами. а вот дальше надо определиться, сливать данные большими пачками, либо изобразить некий риалтайм (с соотв. понижением частот АЦП). почему имеет смысл использовать udp_tx_offload: он позволяет располагать в памяти данные для передачи в "сыром" виде, без заголовков и прочей шелухи. причем непрерывным куском в памяти. фактически, дескриптор для этого компонента - это указатель + длина пакета, причем пишется через регистры. копирование из памяти в память процессором (а именно это и происходит в основном при формировании заголовков) - это одно из узких мест ниоса. т.о. при использовании аппаратного ускорения задача сведется к передаче буфера по его заполнении (вариант с передачей большими пачками), либо по прерыванию от компонента-планировщика (если выберете вариант с риалтаймом). на правах ИМХО sm.gif

вдогонку: при использовании udp_tx_offload можно оставить программную реализацию протоколов, потом всегда можно переделать.


Почитал ещё форум Gigabit Ethernet IP, где Вы даёте ссылку, и, как понимаю, систему необходимо строить таким образом (второй вариант):
Прикрепленное изображение

Просто когда смотрел Ваш проект, на который указал Konst_777, понял, что у Вас udp_tx_offload используется именно для формирования на железе отправляемых пакетов (может что-то не досмотрел), вроде как у Вас через него должен был прогоняться поток от ASI. Хочу пока оставить уже работающую реализацию ARP, ICMP на программном уровне и получается для TSE необходимо реализовать переключение потоков от Niosa и от железного ускорителя UDP. UDP ускоритель формирует заголовки для пакетов UDP и соединяет заголовок с потоком (буфером) данных, далее всё выдаёт на TSE.

Ещё, если можно, вопрос: для первого варианта решения, если какой-то компонент будет выдавать данные в формате ST Avalon на SgDMA ST to Memory, далее другой SgDMA Memory to ST запихивать их в TSE, что в этом случае будет грузить сам процессор, его задача сводится к составлению списка дескрипторов их обработке, копирование памяти осуществляет SgDMA, который, насколько я понимаю, работает независимо от Nios? Почему данный вариант плох и нереализуем?
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Jun 16 2013, 09:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(doom13 @ Jun 16 2013, 01:31) *
...Почему данный вариант плох и нереализуем?

Этот вариант неплох и реализуем. Скорость обмена будет зависеть от процессора Nios II. Попробуйте.
Только, Вам еще нужно добавить SgDMA_Memory_to_Memory. А лучше, заменить ADC_to_AvalonST на ADC_to_AvalonMM и вместо SgDMA_ST_to_Memory использовать SgDMA_Memory_to_Memory. Если скорость обмена окажется низкой, то потребуется разработать сопроцессор дескрипторов для SgDMA_Memory_to_Memory.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- doom13   ADC -> FPGA -> Ethernet   Jun 13 2013, 07:54
- - Копейкин   Пусть данные АЦП 8-битные. Тогда: 100МГц х 4канала...   Jun 13 2013, 08:35
|- - doom13   Цитата(Копейкин @ Jun 13 2013, 11:35) Пус...   Jun 13 2013, 09:17
- - Konst_777   Цитата(doom13 @ Jun 13 2013, 10:54) Имеет...   Jun 13 2013, 09:08
- - Konst_777   Цитата(doom13 @ Jun 13 2013, 10:54) Видит...   Jun 13 2013, 12:00
- - doom13   Здравствуйте. Посмотрел проект и ip-core udp_tx_of...   Jun 14 2013, 08:26
- - doom13   Варианты реализации:   Jun 14 2013, 08:26
- - iosifk   Цитата(doom13 @ Jun 13 2013, 11:54) Имеет...   Jun 14 2013, 09:09
|- - doom13   Цитата(iosifk @ Jun 14 2013, 12:09) Если ...   Jun 14 2013, 10:32
|- - Lmx2315   QUOTE (iosifk @ Jun 14 2013, 13:09) Стык ...   Jun 14 2013, 10:35
|- - iosifk   Цитата(Lmx2315 @ Jun 14 2013, 14:35) ..на...   Jun 14 2013, 11:20
|- - winipuh   Цитата(iosifk @ Jun 14 2013, 15:20) или ф...   Jun 14 2013, 12:12
|- - doom13   Цитата(winipuh @ Jun 14 2013, 15:12) Это ...   Jun 14 2013, 13:04
|- - vadimuzzz   Цитата(doom13 @ Jun 16 2013, 05:31) Почит...   Jun 18 2013, 23:58
|- - doom13   Цитата(vadimuzzz @ Jun 19 2013, 02:58) ud...   Jun 19 2013, 14:34
|- - vadimuzzz   Цитата(doom13 @ Jun 19 2013, 21:34) Поясн...   Jun 21 2013, 01:56
- - Konst_777   Цитата(doom13 @ Jun 13 2013, 10:54) Видит...   Jun 15 2013, 08:24
|- - doom13   Цитата(Konst_777 @ Jun 15 2013, 11:24) Вс...   Jun 15 2013, 21:09
- - doom13   Затестил два варианта работы. Пока для проверки ис...   Jun 18 2013, 13:43
- - Golikov A.   обычно контроллер памяти многопортовый. и да ДМА ...   Jun 18 2013, 14:23
|- - doom13   Цитата(Golikov A. @ Jun 18 2013, 17:23) о...   Jun 18 2013, 14:43
- - Golikov A.   если есть память 2 портовая - это здорово, 2 устро...   Jun 18 2013, 14:54
|- - doom13   Цитата(Golikov A. @ Jun 18 2013, 17:54) е...   Jun 18 2013, 15:02
- - gosu-art   Многие, для таких задач, ставят по 2 независимых к...   Jun 20 2013, 04:31
- - Golikov A.   Програма из ДДР и данные в ДДР - конечно это все п...   Jun 20 2013, 04:53


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

 


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


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