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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
Копейкин
сообщение Jun 13 2013, 08:35
Сообщение #2


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

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Пусть данные АЦП 8-битные.
Тогда: 100МГц х 4канала х 8 = 3,2 ГБит/сек.
Нет-ли ошибки?
Или передаются накопленные за ограниченный период данные?
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Jun 13 2013, 09:08
Сообщение #3


Знающий
****

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



Цитата(doom13 @ Jun 13 2013, 10:54) *
Имеется: ADC (100 МГц, 4 канала)...

И какую же скорость передачи нужно обеспечить? И что будет принимать такой поток?

Цитата(doom13 @ Jun 13 2013, 10:54) *
ADC_to_AvalonST => SgDMA_STtoMEM => Memory => SgDMA_MEMtoST => TSE

Лучше так: ADC_to_AvalonST => udp_tx_offload => TSE. Это упрощенная схема, более полная выглядит так:
Код
Nios II Processor => On-Chip FIFO Memory |
                                         |Avalon-ST Multiplexer => TSE
    ADC_to_AvalonST => udp_tx_offload => |

Компонент "udp_tx_offload" находится в папке "IP" проекта "sdr400cpu_ng". vadimuzzz, автор проекта, выложил его в этой теме.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 13 2013, 09:17
Сообщение #4


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

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



Цитата(Копейкин @ Jun 13 2013, 11:35) *
Пусть данные АЦП 8-битные.
Тогда: 100МГц х 4канала х 8 = 3,2 ГБит/сек.
Нет-ли ошибки?
Или передаются накопленные за ограниченный период данные?


На данном этапе это не принципиально, будут ещё DDC-конверторы стоять, задача запихнуть данные в TSE которым рулит Nios, чтобы не сильно грузить процессор при использовании максимально возможной частоты АЦП.

Цитата(Konst_777 @ Jun 13 2013, 12:08) *
И какую же скорость передачи нужно обеспечить? И что будет принимать такой поток?


Скорость до 1Gb/s, передаваться будут не все данные, пока расчёт идёт на максимально возможную скорость.

Цитата(Konst_777 @ Jun 13 2013, 12:08) *
Лучше так: ADC_to_AvalonST => udp_tx_offload => TSE. Это упрощенная схема, более полная выглядит так:
Код
Nios II Processor => On-Chip FIFO Memory |
                                         |Avalon-ST Multiplexer => TSE
    ADC_to_AvalonST => udp_tx_offload => |

Компонент "udp_tx_offload" находится папке "IP" проекта "sdr400cpu_ng". vadimuzzz, автор проекта, выложил его в этой теме.


Спасибо, буду пробовать.
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Jun 13 2013, 12:00
Сообщение #5


Знающий
****

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



Цитата(doom13 @ Jun 13 2013, 10:54) *
Видится вариант решения задачи следующим образом:...

Все-таки, Ваш вариант решения надежнее.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 14 2013, 08:26
Сообщение #6


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

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



Здравствуйте. Посмотрел проект и ip-core udp_tx_offload от автора vadimuzzz. Прикрутил по-быстрому к своему проекту, что-то заработало, данные передаются, но со всеми особенностями udp_tx_offload пока не разбирался. Насколько понимаю - непосредственно udp_tx_offload - немного не то, что имелось в виду. Фактически udp_tx_offload - реализация UDP на уровне железа. В моём случае UDP, ARP, ICMP уже реализованы на программном уровне, возможно, тут есть свои преимущества, но пока вопрос не в этом.
Ethernet уже есть, вопрос - каким образом прокачать максимально возможный поток данных от источника (в моём случае АЦП) извне SOPC-системы, чтобы не сильно грузить Nios, и чтобы оставалиль рабочими UDP, ARP, ICMP.
Ваш вариант с использованием Avalon-ST Multiplexer видится приемлемым, но пока не использовал данное ядро. Как понимаю, Nios должен будет выбирать - какой поток выдать на TSE (либо например ответ на ARP запрос, который формируется софтом, либо udp-пакет с данными от АЦП, который формируется на уровне железа). При использовании второго варианта видятся сложности с длинной udp пакета (может это и не так).

Сообщение отредактировал doom13 - Jun 14 2013, 08:47
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 14 2013, 08:26
Сообщение #7


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

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



Варианты реализации:
Прикрепленное изображение


Сообщение отредактировал doom13 - Jun 14 2013, 08:47
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 14 2013, 09:09
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(doom13 @ Jun 13 2013, 11:54) *
Имеется: ADC (100 МГц, 4 канала), FPGA, Ethrnet PHY. Необходимо осуществить приём данных от АЦП и передачу их по Ethernet.

Если можно, то ответьте на мой вопрос: зачем Вам в данном случае нужна именно ПЛИС? Ведь задача получения данных от АЦП вполне тривиальна и ДМА есть в любом микроконтроллере. Стык с Ethrnet - гигабитный МАС - тоже не проблема. А уж обработка данных для Ethrnet в быстром процессоре всяко будет быстрее и дешевле, чем в ПЛИС...
Так зачем же идти по дорогому и трудному пути?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 14 2013, 10:32
Сообщение #9


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

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



Цитата(iosifk @ Jun 14 2013, 12:09) *
Если можно, то ответьте на мой вопрос: зачем Вам в данном случае нужна именно ПЛИС? Ведь задача получения данных от АЦП вполне тривиальна и ДМА есть в любом микроконтроллере. Стык с Ethrnet - гигабитный МАС - тоже не проблема. А уж обработка данных для Ethrnet в быстром процессоре всяко будет быстрее и дешевле, чем в ПЛИС...
Так зачем же идти по дорогому и трудному пути?


Если я правильно Вас понимаю, Вы имели в виду использование FPGA + DSP. FPGA принимает данные от АЦП, далее процессор выплёвывает их в Ethernet (АЦП –100 МГц, 4 канала, 16 бит, DDR LVDS интерфейс по 2 линии на канал, общий frame clock и bit clock). Но на плате не предусматривается использование DSP. Вообще разрабатывается прототип платы с 4-мя такими АЦП, и, при использовании максимально возможной частоты АЦП, Ethernet не сможет прокачать такой поток данных:

16 * 4 * 4 * 50MHz = 12.8 Gb/s

Предусматриваются ещё оптоволоконные трансиверы для использования АЦП на максимальной частоте.
Ethernet ставится с целью возможности замены старой системы с расчётом на максимальный поток данных:

16 * 4 * 4 * 1,28 MHz = 327.68 Mb/s

Или

(16 * 2) * 4 * 4 * 1.28 MHz = 655.36 Mb/s (комплексные данные)

Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jun 14 2013, 10:35
Сообщение #10


отэц
*****

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



QUOTE (iosifk @ Jun 14 2013, 13:09) *
Стык с Ethrnet - гигабитный МАС - тоже не проблема.

..на каком микроконтроллере 1G не проблема ?


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 14 2013, 11:20
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Lmx2315 @ Jun 14 2013, 14:35) *
..на каком микроконтроллере 1G не проблема ?

Тексосовские DSP или фрискейловские imx


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
winipuh
сообщение Jun 14 2013, 12:12
Сообщение #12


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

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Цитата(iosifk @ Jun 14 2013, 15:20) *
или фрискейловские imx

Это у которых в ерате указано про ограничение в 400 Мбит/с? sm.gif
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 14 2013, 13:04
Сообщение #13


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

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



Цитата(winipuh @ Jun 14 2013, 15:12) *
Это у которых в ерате указано про ограничение в 400 Мбит/с? sm.gif


Пока мне этого будет достаточно. Вопрос каким образом проще и правильнее запихнуть данные в TSE, которым управляет NIOS. Пока попробовал использовать Avalon ST multiplexer, чтобы разобраться с предложенным Konst_777 способом решения моей задачи. Передача пошла, но только с одного входа (in0) Avalon ST multiplexer. На один вход mux подаётся TSE RX (получился своеобразный loopback), на другой - SgDMA Memory to Stream. В итоге работает передача только от одного источника, если их поменять местами - то начинает работать от другого.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jun 15 2013, 04:33
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 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
Konst_777
сообщение Jun 15 2013, 08:24
Сообщение #15


Знающий
****

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



Цитата(doom13 @ Jun 13 2013, 10:54) *
Видится вариант решения задачи следующим образом:...

Все таки, какой тип задачи Вы решаете:
  1. Регистрация данных с последующей их обработкой в нереальном времени.
  2. Обработка данных в реальном времени.

Анализируя эту тему можно предположить, что Ваш проект относится к типу 2. Но, может быть, Вы пытаетесь решать задачу 1, как задачу 2? В этом случае, скорее всего, Вы совершаете ошибку.

Цитата(doom13 @ Jun 14 2013, 11:26) *
Варианты реализации:...

Как Вам уже объяснил vadimuzzz, программное формирование UDP пакетов с данными АЦП не позволит получить скорость обмена 40 Мбайт/сек. В то время как аппаратное способно обеспечить и 100 Мбайт/сек. Другой вопрос, что будет принимать такой поток и сумеет ли оно его обработать.

Цитата(doom13 @ Jun 14 2013, 16:04) *
...Пока попробовал использовать Avalon ST multiplexer... В итоге работает передача только от одного источника, если их поменять местами - то начинает работать от другого.

Поскольку vadimuzzz сейчас посещает этот форум, то вместо фразы "проект в студию!" рекомендую Вам пригласить Вадима для участия в Вашем проекте. Это позволит Вам сэкономить деньги и время, обеспечить высокое качество и сохранить приватность Вашей разработки.
Go to the top of the page
 
+Quote Post

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

 


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


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