|
Буфер для PCI Express |
|
|
|
Sep 2 2015, 05:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Приветствую. Собираю систему для передачи данных от 10G Ethernet по PCIe в ПК (см. рисунок). Приёмник MAC-уровня для 10G Ethernet пока моделирую Traffic Generator-ом. Прерывание от S2MM FIFO заводится в ПК и обрабатывается драйвером. Использовал DC FIFO (для перехода между clock domains, Ethernet тактируется 156.25 МГц, PCIe - 250 МГц) и S2MM FIFO (для преобразования AXI4-Stream в AXI4). S2MM FIFO генерирует прерывание либо по достижению определённого уровня заполнения, либо по приёму очередного пакета данных. Traffic Generator управляется MicroBlaze (пока, для отладки) и может генерировать пакет 1024*64bit в цикле или постоянно. Если использую прерывание по заполнению уровня (1024 позиции фифо), то приходится ставить большую задержку между запусками Traffic Generator-а, чтобы CDMA успевал выгребать данные до накопления новых 1024 позиций, иначе передача фифо забивается и прерывание больше не срабатывает. Тогда попробовал использовать прерывание по приёму пакета и забирать максимальное число данных кратное 1024 позициям фифо. Тут Traffic Generator может работать в непрерывном режиме (CDMA постоянно забирает данные), но есть ощущение, что при заполнении фифо Traffic Generator может некоторое время ожидать следующей передачи. Вопросы: 1) Правильно ли реализую сам буфер, возможно есть более удобное решение? 2) Как выбрать размер FIFO и размер разовой передачи CDMA с учётом разных скоростей работы FIFO на запись/чтение и времени, требуемого для обработки прерывания и запуска CDMA драйвером?
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Sep 30 2015, 20:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Получается, для системной памяти Aperture - это размер адресного пространства начиная с адреса, который записан в Translation. В Translation записываю физический адрес выделяемого блока памяти 4MB, для остальных блоков уже не получится. Если же в Translation записать начальный физический адрес системной памяти, тогда всё становится понятно. Как это делается, как определить начальный адрес памяти ядра/системы? Или это он и есть: Цитата(RobFPGA @ Sep 30 2015, 23:06)  ФИЗИЧЕСКИЙ адрес ВСЕЙ памяти системы известен он НЕ меняется в процессе работы У вас ведь памяти не 2^64 байт? Например если у вас стоит 16G памяти то задав ОДНО окно Base=0x0_0000_0000 Aperture Hight=0x3_FFFF_FFFF, PCIe Translation=0x0_0000_0000 Вы сможете работать со всей имеющейся у вас памятью (ну почти ) т.е. в Translation регистр AXIBAR2PCIEBAR записываем 0 и тогда при выделении блока памяти его физический адрес можно использовать в дескрипторе? Но тут как-то странно получается, через один бар DMA может видеть всю системную память? Если железо будет видеть всю системную память, то при сбое оно убъёт систему?!
|
|
|
|
|
Sep 30 2015, 21:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(doom13 @ Sep 30 2015, 23:42)  Получается, для системной памяти Aperture - это размер адресного пространства начиная с адреса, который записан в Translation Да это так Цитата(doom13 @ Sep 30 2015, 23:42)  ... В Translation записываю физический адрес выделяемого блока памяти 4MB, для остальных блоков уже не получится. А так делать не надо Цитата(doom13 @ Sep 30 2015, 23:42)  Если же в Translation записать начальный физический адрес системной памяти, тогда всё становится понятно. Как это делается, как определить начальный адрес памяти ядра/системы? Это надо мангу ой мануалы на OC покурить - думаю найдете пару-тройку полезных няшек  Цитата(doom13 @ Sep 30 2015, 23:42)  Или это он и есть: т.е. в Translation регистр AXIBAR2PCIEBAR записываем 0 и тогда при выделении блока памяти его физический адрес можно использовать в дескрипторе? Бинго ! Ноль это в самом постом случае - можно так же учитывать этот оффсет при пересчете указателей на физический адрес например если у вас буфера сидят на другом физическом проце. Цитата(doom13 @ Sep 30 2015, 23:42)  Но тут как-то странно получается, через один бар DMA может видеть всю системную память? А чего старинного ? Классические DMA, то есть те которые сидят непосредственно на PCIe контроллере, так мир и видят - плоский стоящий на 3 китах  И да - чуь что н не так - моменто в море А тут целый bridge! который более универсален в применении и не только под DMA рассчитан - вот вводит в ступор от многообразия возможностей. Успехов! Rob
|
|
|
|
|
Oct 1 2015, 09:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(RobFPGA @ Oct 1 2015, 00:13)  Ноль это в самом постом случае - можно так же учитывать этот оффсет при пересчете указателей на физический адрес например если у вас буфера сидят на другом физическом проце. Может быть подскажете, как определить начальный физический адрес памяти в системе? Спасибо. Или он равен "0"?
|
|
|
|
Сообщений в этой теме
doom13 Буфер для PCI Express Sep 2 2015, 05:59 krux тупое S2MM fifo вам на 10G не поможет. скорости не... Sep 2 2015, 06:07 doom13 Цитата(krux @ Sep 2 2015, 09:07) посмотри... Sep 2 2015, 06:19 krux ЦитатаА что не так с FIFO?
формально, с FIFO всё н... Sep 2 2015, 08:52 doom13 Цитата(krux @ Sep 2 2015, 11:52) формальн... Sep 2 2015, 09:28 krux ЦитатаМануал на Intel 82599 10 GbE Controller прос... Sep 2 2015, 16:51 doom13 Цитата(krux @ Sep 2 2015, 19:51) в реальн... Sep 3 2015, 06:46 krux 1 таблица дескрипторов - это 128 буферов, на 128 S... Sep 3 2015, 08:32 doom13 Возник вопрос, в какой памяти должна размещаться т... Sep 28 2015, 07:05 RobFPGA Приветствую!
Цитата(doom13 @ Sep 3 2015,... Sep 28 2015, 12:23  doom13 Цитата(RobFPGA @ Sep 28 2015, 15:23) Для ... Sep 28 2015, 13:00 RobFPGA Приветствую!
Для начала почитайте LogiCORE IP... Sep 28 2015, 14:23 doom13 Цитата(RobFPGA @ Sep 28 2015, 17:23) Для ... Sep 28 2015, 15:07  RobFPGA Приветствую!
Цитата(doom13 @ Sep 28 2015... Sep 28 2015, 15:47   doom13 Цитата(RobFPGA @ Sep 28 2015, 18:47)
Что... Sep 28 2015, 16:08   doom13 Цитата(RobFPGA @ Sep 28 2015, 18:47) Ну а... Sep 28 2015, 18:54 Golikov A. с 2 таблицами проще, что софт сможет монопольно не... Sep 29 2015, 06:16 RobFPGA Приветствую!
Цитата(Golikov A. @ Sep 29 ... Sep 29 2015, 07:10 doom13 Столкнулся с тем, что ядро Linux не хочет выделять... Sep 30 2015, 14:28 RobFPGA Приветствую!
Цитата(doom13 @ Sep 30 2015... Sep 30 2015, 16:03  doom13 Цитата(RobFPGA @ Sep 30 2015, 19:03)
При... Sep 30 2015, 16:34   RobFPGA Приветствую.
Цитата(doom13 @ Sep 30 2015, 19... Sep 30 2015, 16:42 krux ЦитатаКак понимаю, чтоб DMA мог работать по цепочк... Sep 30 2015, 17:27 doom13 Хорошо.
Поясните мне вот это: AXI to PCIe Bridge и... Sep 30 2015, 19:56 RobFPGA Приветствую!
Цитата(doom13 @ Sep 30 2015... Sep 30 2015, 20:06 doom13 Нашёл, dmidecode показывает всю системную информац... Oct 1 2015, 18:44 doom13 Для ядра AXI Bridge for PCIe Gen 3 есть такая зако... Oct 2 2015, 13:31 RobFPGA Приветствую!
Цитата(doom13 @ Oct 2 2015,... Oct 2 2015, 14:49 doom13 Что-то я вообще запутался, как оно работает.
А как... Oct 2 2015, 16:07 krux ЦитатаЧто-то я вообще запутался, как оно работает.... Oct 2 2015, 17:56 doom13 Цитата(krux @ Oct 2 2015, 20:56) зависит ... Oct 2 2015, 19:52  RobFPGA Приветствую!
Цитата(doom13 @ Oct 2 2015,... Oct 2 2015, 21:03   doom13 Цитата(RobFPGA @ Oct 3 2015, 00:03) Поэто... Oct 3 2015, 08:29   doom13 Цитата(RobFPGA @ Oct 3 2015, 00:03)
Цита... Oct 6 2015, 08:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|