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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Xilinx 7 Series PCIe
doom13
сообщение Jul 1 2015, 06:00
Сообщение #1


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

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



Приветствую.
Много спрашивал в этой теме, но пока ещё больше вопросов чем ответов. Решил создать свою.
Вот тут очень интересная тема, но мне пока туда рано - надо, чтоб всё заработало с WinDriver.

Пытаюсь разбираться с PCIe на базе Virtex 7, ядром AXI Bridge for PCI Express Gen 3 Subsystem и соответственно с xapp1171. Отдельно завёл DDR3, CDMA. Не могу понять принцип работы собранной в xapp1171 системы (сама система и карта памяти на рисунке). Есть CDMA, а кто им управляет? Правильно ли понимаю, что это должен делать драйвер со стороны компа?
Обязательно ли использовать CDMA? Возможно ли просто подключить к мосту память, чтобы он сам записывал/считывал в/из неё данные? Как понимаю, мост записывает данные в какую-то область памяти (translation_bram), а потом CDMA должен перекинуть их в DDR3.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 06:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 09:00) *
Отдельно завёл DDR3, CDMA. Не могу понять принцип работы собранной в xapp1171 системы (сама система и карта памяти на рисунке). Есть CDMA, а кто им управляет?

Контрольные регистры ДМА мапируются в BAR pcie. Таким образом pcie как мастер пишет в контрольные регистры CDMA.

Цитата
Правильно ли понимаю, что это должен делать драйвер со стороны компа?

Совершенно верно, комп через pcie мастер пишет в контрольные регистры cdma, давая команду на передачу данных, и адреса куда и откуда.


Цитата
Обязательно ли использовать CDMA? Возможно ли просто подключить к мосту память, чтобы он сам записывал/считывал в/из неё данные? Как понимаю, мост записывает данные в какую-то область памяти (translation_bram), а потом CDMA должен перекинуть их в DDR3.

Обязательно, тк CDMA позволяет работать burst ами, а pcie мастер работает на подобие процессора одиночными транзакциями
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 07:32
Сообщение #3


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

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



Цитата(farbius @ Jul 1 2015, 09:54) *
Обязательно, тк CDMA позволяет работать burst ами, а pcie мастер работает на подобие процессора одиночными транзакциями

Но ведь прежде чем CDMA сможет перебрасывать данные PCIe мост должен их положить в память ПЛИС? Т.е. чтоб было что перебрасывать в DDR3, надо, чтоб был буфер с данными в памяти ПЛИС. Или CDMA "через мост" (pcie slave) получает доступ к буферам на ПК, и сразу принимая данные от моста запихивает их в DDR3?
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 07:41
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 10:32) *
Или CDMA "через мост" (pcie slave) получает доступ к буферам на ПК, и сразу принимая данные от моста запихивает их в DDR3?

Совершенно верно, именно поэтому есть axi bar и pcie bar. На ПК драйвер выделяет буфер, адрес которого пишется в контрольные регистры pcie.
Далее в дма пишется адрес axi bar источника и назначение адрес ддр.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 08:19
Сообщение #5


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

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



Спасибо, картинка немного вырисовывается.
Драйвер со стороны ПК без использования может писать память FPGA (медленно, но может). Вот пробую реализовать это, но что-то делаю не так.
Использую Vivado 2015.1 и новое ядро моста и оно немного отличается от того, что описано в xapp1171. Вопрос, что делаю не так?
В системе есть MicroBlaze + local memory, ядро моста, AXI BRAM controller. Карта памяти полученной системы и настройки моста на рисунке. На ПК запускаю Jungo.WinDriver, но что-то в нем только Configuration Space и Interrupt (см. рисунок), если плату не перепрошивать, то есть ещё и область Memory (видимо загружается какой-то factory образ).
На вкладке PCIe:BARs задаётся параметр PCIe_2_AXI, правильно ли, что это адрес памяти (базовый адрес) куда будет писать мост (WinDriver -> PCIe -> bridge -> memory)?

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 09:33
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 11:19) *
Спасибо, картинка немного вырисовывается.
Драйвер со стороны ПК без использования может писать память FPGA (медленно, но может). Вот пробую реализовать это, но что-то делаю не так.
Использую Vivado 2015.1 и новое ядро моста и оно немного отличается от того, что описано в xapp1171. Вопрос, что делаю не так?
В системе есть MicroBlaze + local memory, ядро моста, AXI BRAM controller. Карта памяти полученной системы и настройки моста на рисунке. На ПК запускаю Jungo.WinDriver, но что-то в нем только Configuration Space и Interrupt (см. рисунок), если плату не перепрошивать, то есть ещё и область Memory (видимо загружается какой-то factory образ).

Я на начальном этапе делал так (работал в XPS 14.7 для ml605.)
Собрал проект: только pcie корка с дма (можно и без) и светодиоды. У меня на 32 р системе программа pcietree.

Pcie Bars брал только bar 0, задав его объем (у вас 32 килобайта). В pci2axi записал адрес своих leds (gpio) на шине (у вас там записано число 0х12340).
Прошил, перезагрузил ПК. Открываю pcietree, вижу свою плату как контроллер памяти с BAR0. В bar 0 c ПК пишу число например c нулевым оффсетом, такая запись аналогична записи в регистр gpio корки также с нулевым офсетом. Так зажигаю светодиоды.
Все.

Систему можно собрать для axi4 без микроблейза, т.к. мастер у вас есть (pcie) и слейв (gpio)

Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 11:23
Сообщение #7


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

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



Цитата(farbius @ Jul 1 2015, 12:33) *

Очень помогли разобраться с вопросом, спасибо.

Цитата(farbius @ Jul 1 2015, 12:33) *
Систему можно собрать для axi4 без микроблейза, т.к. мастер у вас есть (pcie) и слейв (gpio)

MicroBlaze добавил для того, чтоб в SDK в окне Memory можно было смотреть содержимое памяти в которую пишет мост (адрес 0х1234_0000), запись пока без DMA.

Почитал доку на Jungo.WinDriver и всё (пока запись/чтение со стороны ПК в память по адресу 0х1234_0000) заработало. Могу писать/читать данные в памяти FPGA. Проблема была в том, что в Jungo.WinDriver надо было сгенерить INF-файл и выбрать галку Install, после этого появился BAR0 и возможность чтения/записи памяти FPGA.

Вопрос по WinDriver (см рисунок), каким образом задаётся адрес BAR0 0xF73F8000 и что это за адрес? Его размер 32 кБ как и буфера PF0_BAR0 в настройках PCIe:BARs (рисунок в сообщении #5). Т.е. система (WinDriver) определяет наличие буфера (адресного пространства), на которое ссылается мост, адреса назначает по своему усмотрению?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 11:38
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 14:23) *
Вопрос по WinDriver (см рисунок), каким образом задаётся адрес BAR0 0xF73F8000 и что это за адрес? Его размер 32 кБ как и буфера PF0_BAR0 в настройках PCIe:BARs (рисунок в сообщении #5). Т.е. система (WinDriver) определяет наличие буфера (адресного пространства), на которое ссылается мост, адреса назначает по своему усмотрению?

ВЕРНО, Это транслированный адрес из системы с axi4 в системе ПК.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 12:11
Сообщение #9


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

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



Вот тут ещё не совсем понимаю.
BAR0, что на рисунке окна WinDriver (адреса 0xF73F_8000 - 0х73FF_FFFF), - это только для работы со стороны ПК, т.е. ПК (а далее Bridge PCIe Master) задаёт что будет писать/читать? На ПК под него памяти нет, память внешняя в ПЛИС?
Как выделяется адресное пространство (память на ПК) доступное на запись/чтение со стороны AXI Master?
Вобщем BAR0 создаёт память с двух сторон PCIe? Если я выделяю 32 кБ памяти в FPGA под PCIe To AXI BAR0, драйвер на компе создаёт соответствующий буфер или он будет пользоваться мостом и адресовать буфер в ПЛИС?
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 12:46
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 15:11) *
Вот тут ещё не совсем понимаю.
BAR0, что на рисунке окна WinDriver (адреса 0xF73F_8000 - 0х73FF_FFFF), - это только для работы со стороны ПК, т.е. ПК (а далее Bridge PCIe Master) задаёт что будет писать/читать? На ПК под него памяти нет, память внешняя в ПЛИС?

Попробую объяснить как понял сам. Могу ошибаться, знающие поправят).
Мост подразумевает отображение адресного пространства ПЛИС в ПК и наоборот.

Итак режим pcie мастер. При перезагрузке компьютера и инициализации платы с PCIe операционная система "видит" BAR0 и мапирует его свою память. Если посмотрите в диспетчер устройств, ОС определяет плату как контроллер памяти. В вашем случае адреса 0xF73F_8000 - 0х73FF_FFFF.

Цитата
Как выделяется адресное пространство (память на ПК) доступное на запись/чтение со стороны AXI Master?


Режим axi мастер (например cdma мастер). В настройках корки pcie выставляются буфера на axi2pcie. При перезагрузке система ничего не выделяет. Тут работает драйвер. Он при запуске выделяет область физической памяти и возвращает динамический адрес этой памяти, кот необходимо записать в контрольные регистры pcie корки.
На плис у вас будут на шине выделены axibar со своими адресами. С этими адресами и работает CDMA. А корка транслирует адреса физической памяти в адресное пространство системы на ПЛИС.
Как то так)

Сообщение отредактировал farbius - Jul 1 2015, 12:47
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 13:17
Сообщение #11


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

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



Спасибо понятно. Т.е. PCIe BARs - память в ПЛИС, а AXI BARs - память в системе (ПК) выделяемая драйвером. Сначала так и думал, а потом всё запуталось. Тогда ещё спрошу, а можно ли с помощью WinDriver или ещё какой-то стандартной проги выделить эту память (под AXI BARs), чтоб проверить работу Mastera со стороны FPGA? Или тут уже только разбираться с написанием драйвера?
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 13:27
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 16:17) *
Тогда ещё спрошу, а можно ли с помощью WinDriver или ещё какой-то стандартной проги выделить эту память (под AXI BARs), чтоб проверить работу Mastera со стороны FPGA? Или тут уже только разбираться с написанием драйвера?


Нужно писать программу. там функция что то типа allocate_buffer_dma. Про нее почитайте. Она должна возвратить адрес физической памяти, который нужно записать в контрольные регистры pcie корки. Контрольные регистры необходимо отмапировать "в себя", т.е. на BAR0 например. И записывать адрес в режиме pcie мастер
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 13:31
Сообщение #13


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

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



Передачу большого потока данных для PCIe всегда будет выполнять DMA в системе FPGA (возможно несколько) или тут можно заюзать какой-либо ресурс (тот же DMA) системы ПК?
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Jul 1 2015, 13:49
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(doom13 @ Jul 1 2015, 16:31) *
Передачу большого потока данных для PCIe всегда будет выполнять DMA в системе FPGA (возможно несколько) или тут можно заюзать какой-либо ресурс (тот же DMA) системы ПК?

читаю данные с ПК через ДМА, пишу поток datamover ом.
То есть ПК пишет в регистры ДМА откуда(физическая память ПК), куда (в моем случае ДДР на ПЛИС или непосредственно на логику ПЛИС) и сколько.
А поток с ПЛИС пишу через datamover.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 1 2015, 14:10
Сообщение #15


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

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



Цитата(farbius @ Jul 1 2015, 16:49) *
читаю данные с ПК через ДМА, пишу поток datamover ом.
То есть ПК пишет в регистры ДМА откуда(физическая память ПК), куда (в моем случае ДДР на ПЛИС или непосредственно на логику ПЛИС) и сколько.
А поток с ПЛИС пишу через datamover.

Немного не то. Имел ввиду (просто интересно) возможно ли задачу переброса данных переложить на железо компьютера или это будет сложнее и менее производительно? Что-то типа драйвера управляющего DMA центрального процессора который и отвечает за переброс данных по PCIe. Или доступ к чужому железу не получить?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:30
Рейтинг@Mail.ru


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