|
Реализация PCI-E x4 на Virtex5, Endpoint Block Plus v1.10 for PCI Express |
|
|
|
Feb 18 2011, 10:57
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
Имеется собственная плата с FPGA Virtex5, устанавливается в слот PCI-E x4. В операционке (Винда) собственный драйвер.
При передаче данных по DMA (устройство в режиме master) только в одну сторону, либо операции передачи данных в ПК, либо из ПК, все работает отлично.
Но захотелось большего, и решили запустить full-duplex. И вот здесь возникла проблема: портятся данные, которые приходят из устройства в ПК. Причем при проведении теста (заполнение памяти устройства константой и ее вычитывание), приложение на компе получает просто странные данные, никаким образом не коррелирующие с исходными. Причем в ChipScope, при попытке обнаружить передачу в EndPoint не заданной константы, этого не обнаружено, что заставляет думать о проблеме с Endpoint либо с его конфигурацией и параметрами...
Есть ли у кого опыть запуска PCIe ядра в дуплексном режиме?
|
|
|
|
|
Feb 18 2011, 11:34
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
Цитата(Methane @ Feb 18 2011, 17:22)  У меня нормально работало. Альтера. А вычитывание регистров итд нормально работало?
Между прочим, а что такое фулл-дуплекс? Кто запросы выдавал, компетишены получал? Обращение к BAR - проблем не замечено. Контроллер TLP уровня и, соответсвенно, разбирание всех пакетов - собственный компонент. Немного не понял вопрос, поэтому попробую уточнить: когда происходит копирование потоков данных через DMA в память хоста, либо чтение из нее - все ОК. Проблемы именно когда происходят одновременные операции записи по DMA и чтения - это я и называю Full-Duplex...
|
|
|
|
|
Feb 18 2011, 12:22
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(L_Konstantin @ Feb 18 2011, 13:34)  Обращение к BAR - проблем не замечено. Контроллер TLP уровня и, соответсвенно, разбирание всех пакетов - собственный компонент. Аналогично делал. Цитата Немного не понял вопрос, поэтому попробую уточнить: когда происходит копирование потоков данных через DMA в память хоста, либо чтение из нее - все ОК. Проблемы именно когда происходят одновременные операции записи по DMA и чтения - это я и называю Full-Duplex... Все равно не понял. У меня одновременно пахало и чтение и запись. Как данные в FIFO появлялись на burst максимальной длинны, они отправлялись в хост. Когда в FIFO появлялось место на полный burst на чтение, на хост отправлялся запрос на чтение и когда приходил компетишен, он отправлялся в FIFO. Поясните что у вас. Цитата(DmitryR @ Feb 18 2011, 13:49)  Может разведено криво, и TX/RX пары наводят друг на друга? Сильно сомневаюсь.
|
|
|
|
|
Feb 18 2011, 15:38
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
Цитата(Methane @ Feb 18 2011, 18:22)  Все равно не понял. У меня одновременно пахало и чтение и запись. Как данные в FIFO появлялись на burst максимальной длинны, они отправлялись в хост. Когда в FIFO появлялось место на полный burst на чтение, на хост отправлялся запрос на чтение и когда приходил компетишен, он отправлялся в FIFO.
Поясните что у вас. У меня два потока данных: устройство одновременно занимается видеозахватом (входной поток порядка 500 Мбит/с) и воспроизведение другого видео из хоста (поток порядка 250 МБис/с). Соответственно это совершенно независимые потоки - на уровне драйвера они также существуют параллельно. Первоначально можно было сделать либо видеозахват на все 500 Мбис, либо 250 видеозахват и 250 воспроизведение. Поэтому Full-Dulpex и необходим чтобы загрузить железку по полной.
|
|
|
|
|
Feb 18 2011, 16:17
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(L_Konstantin @ Feb 18 2011, 17:38)  У меня два потока данных: устройство одновременно занимается видеозахватом (входной поток порядка 500 Мбит/с) и воспроизведение другого видео из хоста (поток порядка 250 МБис/с). Соответственно это совершенно независимые потоки - на уровне драйвера они также существуют параллельно. На чтение, как именно у вас реализовано? Сколько тегов использовано? Цитата Первоначально можно было сделать либо видеозахват на все 500 Мбис, либо 250 видеозахват и 250 воспроизведение. Поэтому Full-Dulpex и необходим чтобы загрузить железку по полной. Нет в PCIе такой штуки как фул или халф дуплекс.
|
|
|
|
|
Feb 18 2011, 16:52
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
Цитата(Methane @ Feb 18 2011, 22:17)  На чтение, как именно у вас реализовано? Сколько тегов использовано? у меня контроллер TLP представляет собой 2 state-машины (одна на прием данных с шины, вторая на передачу) и собственно арбитра, который обслуживает клиентов (чтения и записи). Чтение данных из хоста выполняется по классическом схеме: запрос на чтение памяти (RdReq), а затем девайсу приходят пакеты (Cmpl) с запрошенными данными. Записть данных в хост - просто запись в память по схеме master. Все транзакции по 4МБ (1024 страницы) для получения максимальной производительности.
|
|
|
|
|
Feb 18 2011, 19:17
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(L_Konstantin @ Feb 18 2011, 14:57)  Имеется собственная плата с FPGA Virtex5, устанавливается в слот PCI-E x4. В операционке (Винда) собственный драйвер.
При передаче данных по DMA (устройство в режиме master) только в одну сторону, либо операции передачи данных в ПК, либо из ПК, все работает отлично.
Но захотелось большего, и решили запустить full-duplex. И вот здесь возникла проблема: портятся данные, которые приходят из устройства в ПК. Причем при проведении теста (заполнение памяти устройства константой и ее вычитывание), приложение на компе получает просто странные данные, никаким образом не коррелирующие с исходными. Причем в ChipScope, при попытке обнаружить передачу в EndPoint не заданной константы, этого не обнаружено, что заставляет думать о проблеме с Endpoint либо с его конфигурацией и параметрами...
Есть ли у кого опыть запуска PCIe ядра в дуплексном режиме? Есть на ML506 на x1. Всё работает. А какое железо испольуется? Если сомнения в железе, могу помочь. Высылайте свой ucf файл, сгенерю тестовую прошивку, тестовая программа у меня под windows (jungo windriver). Правда я сам на x4 не тестировал, железа такого пока нет.
|
|
|
|
|
Feb 19 2011, 04:07
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
Цитата(Methane @ Feb 18 2011, 23:51)  Это как? Один запрос на 4 мегабайта? (как оно в заголовок влезло?) неправильно выразился... запросы конечно по 4К, но у меня есть у меня есть 1024 адреса страниц (заранее подготовленных) и соответственно я их обрабатываю за раз - блок получается 4 МБ....
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|