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

 
 
 
Reply to this topicStart new topic
> 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
RobFPGA
сообщение Nov 12 2015, 15:05
Сообщение #2


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

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



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

Цитата(ConstHw @ Nov 12 2015, 16:03) *
Всем привет, взываю к помощи так как кажется потерялся в дебрях Цинка.

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

Что есть
1) Запустил проект с LwIP вроде xapp. Вижу принятые и отправленные пакеты, посмотрел на них в WireShark, пописал свои пакеты туда с PC и обратно с платформы. Но пока для меня это все выглядит как черный ящик, где я с одной стороны вызываю tcp_recv и tcp_recv, которые внутри себя вызывают LwIP стек, который основан на драйверах Xilinx, которые там что то колдуют с регистрами контроллеров памяти,эзернета и ДМА описанными в UG585

Ну вот Ваше желание уже почти исполнилось! Ведь пакеты уже принимаются и складываются в DDR3 память подключенную к PS

Цитата(ConstHw @ Nov 12 2015, 16:03) *
2) Запустил проекты с MIG+ процессорное ядро. Пописал данные в память, почитал через AXI,

Еще одна память ? теперь уже на PL?
Цитата(ConstHw @ Nov 12 2015, 16:03) *
3) Пописал принятые по TCP данные в MIG напрямую из процессора. Делал напрямую "в лоб"
Код
*(Addr+I) = Val;
Где адрес соответственно ссылается на диапазон памяти принадлежащий подключенному MIG
4) Запустил тестовый проект с AXI DMA, пописал данные в память через него.

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

Данные пересылаются по адресу указанному в дескрипторе буферов для DMA. Можно задать адрес не в памяти а в пространстве GP AXI Master порта к которому будут подключены Ваши корки для обработки пакетов.

Цитата(ConstHw @ Nov 12 2015, 16:03) *
2) Как в таком случае правильно принять пакеты из Ethernet?

Это философский вопрос - что значит правильно?
Для ответа на него нужно определится с желаемым - что же вы хотите построить?

Успехов! Rob.

Go to the top of the page
 
+Quote Post
ConstHw
сообщение Nov 13 2015, 07:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #4


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

Группа: Свой
Сообщений: 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
doom13
сообщение Nov 25 2016, 08:43
Сообщение #5


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

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



Приветствую.
Возник вопрос - как правильно подключать AXI DMA к PS?
DMA использует режим Scatter-Gather, управляется драйвером Linux (дескрипторы и буферы для данных
выделяются ядром динамически в PS DDR3). M_AXI_SG (32 bit) и M_AXI_S2MM (64 bit) получают доступ к PS DDR3 через S_AXI_HP порт процессорной системы.
Есть ли смысл подключения M_AXI_SG через S_AXI_GP порт?
Спасибо.
Go to the top of the page
 
+Quote Post
t_34
сообщение Aug 14 2018, 07:45
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 2-02-17
Пользователь №: 95 272



Добрый день. Возник такой же вопрос. Подскажите идеологию саму, как правильно надо делать? Плата zc706, надо поднять ethernet, который будет принимать данные и отсылать их в PL DDR3. Надо использовать именно PL память, чтобі собственные IP ядра имели к ней доступ. Как правильно подключить PL DDR3 к процессору?
1. В аппаратной части использовать порт процессора М_AXI_GP0, который будет подключен к AXI Interconect, а к AXI Interconect подключу MIG
2. В аппаратной части использовать порт процессора М_AXI_GP0, который через AXI Interconect будет подключен к AXI DMA, AXI DMA подключить к MIG (не знаю пока можно так делать или нет).
Напишите, пожалуйста, что и как правильно. В какую сторону надо копать.
На процессоре zynq планирую создать проект в SDK на базе LwIP echo server, который будет полученые tcp пакеті складывать по адрессу PL DDR3.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 14 2018, 09:11
Сообщение #7


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

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



Приветствую!
Цитата(t_34 @ Aug 14 2018, 10:45) *
Добрый день. Возник такой же вопрос. Подскажите идеологию саму, как правильно надо делать? Плата zc706, надо поднять ethernet, который будет принимать данные и отсылать их в PL DDR3. Надо использовать именно PL память, чтобі собственные IP ядра имели к ней доступ. Как правильно подключить PL DDR3 к процессору?
Ох уж это "правильно" Я на вскидку могу придумать 5-7 вариантов и все они будут правильные (для меня).
Будет ли они праведильными для Вас будет зависит от критериев этой правильности.

Цитата(t_34 @ Aug 14 2018, 10:45) *
1. В аппаратной части использовать порт процессора М_AXI_GP0, который будет подключен к AXI Interconect, а к AXI Interconect подключу MIG
2. В аппаратной части использовать порт процессора М_AXI_GP0, который через AXI Interconect будет подключен к AXI DMA, AXI DMA подключить к MIG (не знаю пока можно так делать или нет).
...
На процессоре zynq планирую создать проект в SDK на базе LwIP echo server, который будет полученые tcp пакеті складывать по адрессу PL DDR3.
Правильно для начала почитать описание Zynq, AXI шины и MIG контроллера.
Затем прикинуть и нарисовать на листике структуру обработки данных с предполагаемыми объемами данных - что от куда приходить - куда сохраняется - кто и что будет читать|писать данные - как часто? Затем совместив это с остатком знаний от чтения доков подумать как можно использовать то что уже есть. Оценив результат повторить итерацию 2-3 раза. Затем когда бумага кончится поделится с нами результатом. sm.gif Ну а мы естественно скажем что это не правильно и предложим свои варианты.

Внешние IP core в PL могут прекрасно получать доступ к данным в памяти PS DDR (через HP AXI порт). И если пропускной способности достаточно то можно напрямую пускать пастись Ваши IP в память PS. Ну или поставив CDMA таскать эти данные и складывать в тот же в PL MIG. Если же использовать М_AXI_GP* то в этом случае CPU может напрямую писать в память (memcpy) или использовать встроенный в ZYNQ DMA.

Цитата(t_34 @ Aug 14 2018, 10:45) *
... Напишите, пожалуйста, что и как правильно. В какую сторону надо копать.
Если картошку сажать то вширь, если уголек добывать то вглубь, "подкоп" под начальника не предлагаю sm.gif

Удачи! Rob.
Go to the top of the page
 
+Quote Post
t_34
сообщение Aug 20 2018, 06:35
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 2-02-17
Пользователь №: 95 272



Добрый день!
Сделал пока так как описал в первом варианте: В аппаратной части использую порт процессора М_AXI_GP0, который подключен к AXI Interconect, а к AXI Interconect подключу MIG ядру. В SDK проект на основе xapp1026 - TCP RX throughput test. Запустил консольную программу iperf для тестирования пропускной способности, если принятые пакеты не писать во внешнюю PL DDR3, то скорость порядка 40 Мbit/s, если писать во внешнюю PL DDR3 принятые пакеты, то скорость падает до 11 Мbit/s.
Если загрузить в SDK проект на основании xapp1026 - TCP TX throughput test, то есть когда я постоянно с платы шлю пакеты (в данном проекте я не использую PL DDR3), то скорость передачи iperf показывает порядка 250 Мbit/s.
Почему скорость приема так отличается от скорости передачи? Возможно это специфика кода проекта xapp1026, не уверен. Поделитесь у кого какие скоростя были на основание данного проекта xapp1026
Go to the top of the page
 
+Quote Post
t_34
сообщение Aug 21 2018, 15:21
Сообщение #9





Группа: Новичок
Сообщений: 3
Регистрация: 2-02-17
Пользователь №: 95 272



Добрый вечер! Возник еще один вопрос! За основу для SDK взят проект echo server xapp1026, передаю с помощью iperf файл данных с ПК на плату zc706, полученные данные пишу в память. Как понять, что пришел последний пакет данных, TCP соединение закрывается FIN пакетом на сколько я знаю. В коде echo server как можно задетектировать этот пакет? или как мне отобразить статус TCP соединения?
Go to the top of the page
 
+Quote Post
monty
сообщение Aug 22 2018, 06:33
Сообщение #10


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

Группа: Свой
Сообщений: 130
Регистрация: 19-12-05
Пользователь №: 12 399



Цитата(doom13 @ Nov 25 2016, 15:43) *
Приветствую.
Возник вопрос - как правильно подключать AXI DMA к PS?
DMA использует режим Scatter-Gather, управляется драйвером Linux (дескрипторы и буферы для данных
выделяются ядром динамически в PS DDR3). M_AXI_SG (32 bit) и M_AXI_S2MM (64 bit) получают доступ к PS DDR3 через S_AXI_HP порт процессорной системы.
Есть ли смысл подключения M_AXI_SG через S_AXI_GP порт?
Спасибо.


Как подключать зависит от того какой поток (сколько и за какое время) и сколько каналов (потоков). Если данных не очень много то можно всё через ***_GP пустить. Обычно данные (когда они быстрые и ихмного) )подключаются через S_AXI_HP(порт цынка), а управление через M_AXI_GP(порт цынка). Если ваш контроллер и дескрипторы сам забирает, то конечно, не стесняйтесь, подключайте его к S_AXI_GP PS.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 12:03
Рейтинг@Mail.ru


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