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

 
 
> 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
Ответов
t_34
сообщение Aug 20 2018, 06:35
Сообщение #2





Группа: Новичок
Сообщений: 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



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

 


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


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