Перейти к содержанию
    

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

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

Вот тут очень интересная тема, но мне пока туда рано - надо, чтоб всё заработало с WinDriver.

 

Пытаюсь разбираться с PCIe на базе Virtex 7, ядром AXI Bridge for PCI Express Gen 3 Subsystem и соответственно с xapp1171. Отдельно завёл DDR3, CDMA. Не могу понять принцип работы собранной в xapp1171 системы (сама система и карта памяти на рисунке). Есть CDMA, а кто им управляет? Правильно ли понимаю, что это должен делать драйвер со стороны компа?

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

post-63539-1435730334_thumb.png

post-63539-1435730339_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отдельно завёл DDR3, CDMA. Не могу понять принцип работы собранной в xapp1171 системы (сама система и карта памяти на рисунке). Есть CDMA, а кто им управляет?

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

 

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

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

 

 

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

Обязательно, тк CDMA позволяет работать burst ами, а pcie мастер работает на подобие процессора одиночными транзакциями

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обязательно, тк CDMA позволяет работать burst ами, а pcie мастер работает на подобие процессора одиночными транзакциями

Но ведь прежде чем CDMA сможет перебрасывать данные PCIe мост должен их положить в память ПЛИС? Т.е. чтоб было что перебрасывать в DDR3, надо, чтоб был буфер с данными в памяти ПЛИС. Или CDMA "через мост" (pcie slave) получает доступ к буферам на ПК, и сразу принимая данные от моста запихивает их в DDR3?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или CDMA "через мост" (pcie slave) получает доступ к буферам на ПК, и сразу принимая данные от моста запихивает их в DDR3?

Совершенно верно, именно поэтому есть axi bar и pcie bar. На ПК драйвер выделяет буфер, адрес которого пишется в контрольные регистры pcie.

Далее в дма пишется адрес axi bar источника и назначение адрес ддр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, картинка немного вырисовывается.

Драйвер со стороны ПК без использования может писать память 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)?

post-63539-1435737684_thumb.jpg

post-63539-1435737809_thumb.jpg

post-63539-1435737813_thumb.jpg

post-63539-1435738222_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, картинка немного вырисовывается.

Драйвер со стороны ПК без использования может писать память 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)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Систему можно собрать для 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) определяет наличие буфера (адресного пространства), на которое ссылается мост, адреса назначает по своему усмотрению?

post-63539-1435749752_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

ВЕРНО, Это транслированный адрес из системы с axi4 в системе ПК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут ещё не совсем понимаю.

BAR0, что на рисунке окна WinDriver (адреса 0xF73F_8000 - 0х73FF_FFFF), - это только для работы со стороны ПК, т.е. ПК (а далее Bridge PCIe Master) задаёт что будет писать/читать? На ПК под него памяти нет, память внешняя в ПЛИС?

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

Вобщем BAR0 создаёт память с двух сторон PCIe? Если я выделяю 32 кБ памяти в FPGA под PCIe To AXI BAR0, драйвер на компе создаёт соответствующий буфер или он будет пользоваться мостом и адресовать буфер в ПЛИС?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут ещё не совсем понимаю.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо понятно. Т.е. PCIe BARs - память в ПЛИС, а AXI BARs - память в системе (ПК) выделяемая драйвером. Сначала так и думал, а потом всё запуталось. Тогда ещё спрошу, а можно ли с помощью WinDriver или ещё какой-то стандартной проги выделить эту память (под AXI BARs), чтоб проверить работу Mastera со стороны FPGA? Или тут уже только разбираться с написанием драйвера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Нужно писать программу. там функция что то типа allocate_buffer_dma. Про нее почитайте. Она должна возвратить адрес физической памяти, который нужно записать в контрольные регистры pcie корки. Контрольные регистры необходимо отмапировать "в себя", т.е. на BAR0 например. И записывать адрес в режиме pcie мастер

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Передачу большого потока данных для PCIe всегда будет выполнять DMA в системе FPGA (возможно несколько) или тут можно заюзать какой-либо ресурс (тот же DMA) системы ПК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Передачу большого потока данных для PCIe всегда будет выполнять DMA в системе FPGA (возможно несколько) или тут можно заюзать какой-либо ресурс (тот же DMA) системы ПК?

читаю данные с ПК через ДМА, пишу поток datamover ом.

То есть ПК пишет в регистры ДМА откуда(физическая память ПК), куда (в моем случае ДДР на ПЛИС или непосредственно на логику ПЛИС) и сколько.

А поток с ПЛИС пишу через datamover.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

читаю данные с ПК через ДМА, пишу поток datamover ом.

То есть ПК пишет в регистры ДМА откуда(физическая память ПК), куда (в моем случае ДДР на ПЛИС или непосредственно на логику ПЛИС) и сколько.

А поток с ПЛИС пишу через datamover.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...