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

 
 
> Xilinx Zynq+DDR+DMA+Ethernet, Все в тумане
ConstHw
сообщение Nov 12 2015, 14:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



Всем привет, взываю к помощи так как кажется потерялся в дебрях Цинка.

Что хочется
Принимать данные по Ethernet, складывать их в память DDR3, доставать их оттуда, обеспечить доступ к этим данным другим ядрам.

Что есть
1) Запустил проект с LwIP вроде xapp. Вижу принятые и отправленные пакеты, посмотрел на них в WireShark, пописал свои пакеты туда с PC и обратно с платформы. Но пока для меня это все выглядит как черный ящик, где я с одной стороны вызываю tcp_recv и tcp_recv, которые внутри себя вызывают LwIP стек, который основан на драйверах Xilinx, которые там что то колдуют с регистрами контроллеров памяти,эзернета и ДМА описанными в UG585
2) Запустил проекты с MIG+ процессорное ядро. Пописал данные в память, почитал через AXI,
3) Пописал принятые по TCP данные в MIG напрямую из процессора. Делал напрямую "в лоб"
Код
*(Addr+I) = Val;
Где адрес соответственно ссылается на диапазон памяти принадлежащий подключенному MIG
4) Запустил тестовый проект с AXI DMA, пописал данные в память через него.

Что делать дальше непонятно, так как не понимаю многих вещей
1) Правильно ли я понял, что LwIP работает исключительно в пределах PS, использует только аппаратный DMA, складывает данные только в память, которая подключена к PS?

2) Как в таком случае правильно принять пакеты из Ethernet?
2.1) Если процессор занят обработкой протоколов Ethernet, TCP, IP в рамках выполнения LwIP-программ, то и в память он получается может писать принятые данные сам без ДМА?
2.2) Или он может передавать в DMA команду "бери данные из памяти вот тут вот столько и грузи в MIG"?
2.3) Или надо поток данных из GigE контроллера направить через аппаратный DMA в подключенный напрямую к процессору MIG? И потом вызывать прерывания для обработки?
2.4) Или надо поток данных из GigE напрвавить в MIG через AXI-DMA и дергать прерывание уже им?

3) Обязательно ли в такой задаче использовать TCP/IP? Если например стоит задача передавать данные от PC к непосредственно подключенной плате, можно ли использовать голый Ethernet, складывая свои данные в его payload?

4) Зачем вообще в множестве проектов используется AXI DMA, когда в PS есть аппаратный 8 канальный DMA-330? Почему не обходятся только им?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ConstHw
сообщение Nov 13 2015, 07:22
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



Цитата(RobFPGA @ Nov 12 2015, 16:05) *
Еще одна память ? теперь уже на PL?


Да, именно. Стандартаный Xilinx контроллер MIG для DDR3

Цитата(RobFPGA @ Nov 12 2015, 16:05) *
Данные пересылаются по адресу указанному в дескрипторе буферов для DMA. Можно задать адрес не в памяти а в пространстве GP AXI Master порта к которому будут подключены Ваши корки для обработки пакетов.


Не очень понимаю. Сейчас LwIP возвращает указатель на Pbuf https://www.cs.cmu.edu/~srini/15-441/F01.fu...plit/node5.html Данные, заголовок.
Надо поменять прожку так, чтобы он для аллокации использовал всю память?

Цитата(RobFPGA @ Nov 12 2015, 16:05) *
Это философский вопрос - что значит правильно?
Для ответа на него нужно определится с желаемым - что же вы хотите построить?
Успехов! Rob.

Правильно это без костылей и велосипедов, как было задумано авторами sm.gif

Допустим я вижу указатели на нагрузку и длину пакета
Код
p->payload, p->len

Они хранятся в PS DDR. Хочу положить их в SODIMM DDR.
Надо запустить Memory to memory транзакцию?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Nov 13 2015, 10:15
Сообщение #3


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(ConstHw @ Nov 13 2015, 09:22) *
Правильно это без костылей и велосипедов, как было задумано авторами sm.gif

Я не профессиональный телепат - очень сложно проникать в мысли автора тем более если "...этот пацак все время говорит на языках, продолжение которых не знает" Ку! sm.gif И если без "костылей и велосипедов" - то только ножками шаг за шагом.

Цитата(ConstHw @ Nov 13 2015, 09:22) *
Не очень понимаю. Сейчас LwIP возвращает указатель на Pbuf https://www.cs.cmu.edu/~srini/15-441/F01.fu...plit/node5.html Данные, заголовок.
Надо поменять прожку так, чтобы он для аллокации использовал всю память?

cranky.gif cranky.gif cranky.gif

Цитата(ConstHw @ Nov 13 2015, 09:22) *
Допустим я вижу указатели на нагрузку и длину пакета
Код
p->payload, p->len

Они хранятся в PS DDR. Хочу положить их в SODIMM DDR.
Надо запустить Memory to memory транзакцию?

Да - других способов скопировать данные в памяти я не знаю.
Вопрос только каким способом автору это будет более "правильно" :
A ) вызвав memcpy, ("правильно" с точки зрения простоты)
B ) использовав внутренний DMA, ("правильно" с точки зрения производительности)
С ) задействовал внешний CDMA в PL ("правильно" с точки зрения структуры системы)
D ) собственную корку для пересылки данных ("правильно" со всех точек зрения sm.gif )

В первых двух случаях данные в PL будут попадать через GP AXI Master что ограничивать скорость пересылки шиной 32 бит.
В двух других - доступ к данным идет через HP Slave что более "правильно" с точки зрения скорости.

Успехов! Rob.

Go to the top of the page
 
+Quote Post



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

 


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


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