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

 
 
> Конференция IP/ESC09, Доклад о контроллере DMA для PCI Express
dsmv
сообщение Mar 6 2010, 22:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Доброго времени суток.

В декабре 2009 года я принимал участие в конференции IP/ESC 09;
Сайт конференции: http://www.design-reuse.com/ipesc09/

У меня был доклад посвящённый разработке DMA контроллера для PCI Express;
Название доклада: Scatter-Gather DMA IP Core for PLDA EZDMA IP

Текст и презентация прилагаются:

Прикрепленный файл  IPESC2009_id21_presentation.pdf ( 411.92 килобайт ) Кол-во скачиваний: 476

Прикрепленный файл  IPESC09_id21.pdf ( 35.01 килобайт ) Кол-во скачиваний: 843
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
dmitry-tomsk
сообщение Mar 8 2010, 17:02
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Спасибо за доклад! Очень ценная информация, тоже сейчас озадачен проблемой приёма completion tlp в своём собственном SGDMA контроллере.
А почему Вы выбрали такие огромные буферы для completion (4 кБ)? Пока не встречал материнок, которые бы выдавали больше 128 байт MAX_READ_SIZE. Да и со стороны корок xilinx ограничение 512 байт.
В теории root complex может разбивать ответ на read request на несколько частей и отправлять несколько completion. Интересует вопрос, может ли root complex поменять местами эти completion? Не пробовали для такого случая отлеживать lower address в заголовке TLP completion, чтобы проверить порядок прихода?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Mar 9 2010, 10:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(dmitry-tomsk @ Mar 8 2010, 20:02) *
А почему Вы выбрали такие огромные буферы для completion (4 кБ)?


Это размер минимального фрагмента физической памяти на который делиться выделяемый блок в USER Memory.
Только в USER Memory мы можем выделить большой блок памяти - например 1536 МБайт; Но он будет разбит на страницы по 4 килобайта.

Я использую ядро PLDA. В нём уже достаточно высокий уровень общения с PCI Express. Есть каналы DMA и обращения к регистрам. Т.е. на уровне TLP я не работаю.

Я формирую запрос к контроллеру DMA ядра PLDA на чтение блока размером 4 килобайта.
Ядро PLDA формирует до 8 запросов на чтение. Вот эти запросы ограничены максимальным PAYLOAD 128 или 256 байт.
И ответы могут придти в любом порядке. А могут и вообще не придти - это и будет Completion Timeout.
Если формировать только один запрос и ждать ответа - это очень медленно. А 8 запросов позволяют получить практически непрерывный поток - но требуется сортировка по адресам.
Ядро PLDA сопровождает ответ адресом - скорее всего это как раз используется lower address в заголовке TLP completion.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Mar 9 2010, 11:23
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Спасибо. Понятно. А что если будете читать непрерывный блок памяти > 4 кБ? На мой взгляд, достаточно иметь буфер MAX_READ_SIZE*8 (1 кБ), общий на все каналы. Правда для сортировки придётся использовать теги пакетов, чтобы узнать старшую часть адреса данных и номер канала. Не знаю, позволит ли ядро plda это делать.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Mar 9 2010, 13:48
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(dmitry-tomsk @ Mar 9 2010, 14:23) *
Спасибо. Понятно. А что если будете читать непрерывный блок памяти > 4 кБ? На мой взгляд, достаточно иметь буфер MAX_READ_SIZE*8 (1 кБ), общий на все каналы. Правда для сортировки придётся использовать теги пакетов, чтобы узнать старшую часть адреса данных и номер канала. Не знаю, позволит ли ядро plda это делать.


У меня непрерывный поток данных. Передача может идти в течении многих часов. Поэтому для канала DMA у меня есть два блока памяти размером 4 кбайта.
После того, как 4 килобайта будут приняты - блоки меняются местами. Во второй блок начинается чтение, а из первого данные передаются в FIFO для дальнейшей обработки.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 10:38
Рейтинг@Mail.ru


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