|
Реализация 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 19 2011, 04:07
|
Участник

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

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

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

|
Цитата(dmitry-tomsk @ Feb 20 2011, 14:43)  запросы со страницами не связаны, они равны mps или mrs. Что такое mps, mrs? в корке альтеровской есть регистр, в котором максимальный размер запроса. Цитата Страницы нужны потому что windows больше мегабайта непрерывный кусок памяти выделять отказывается. page, вообще-то 4килобайта. и пересекать ее нельзя. И линух тоже больше чем сколько-то не дает (не помню сколько) но это можно побороть.
|
|
|
|
|
Feb 26 2011, 20:34
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(dmitry-tomsk @ Feb 20 2011, 18:50)  mps - max payload size, mrs - max read size, определяются чипсетом (root complex), для большинства чипсетов 128 байт. За пересечением границ должен следить автомат, формирующий запросы. если точнее, то они определяются по согласованию между возможностями ОС, чипсета и Core. а непрерывный кусок памяти ядра windows можно выделить больше 1 Мб, кажется 16... но не помню, давно драйвер писал Цитата(dmitry-tomsk @ Feb 26 2011, 23:02)  Понятно, спасибо. А не наблюдали, случайно, зависания операционной системы при максимальной загрузке приёмной линии? У меня на x1 упорно виснит, если поток данных читать быстрее чем 167 мбайт в секунду, приходится ограничивать скорость чтения (: ой, че только не наблюдали, висло по разному... и искажения периодически появлялись. В основном правда из-за размеров TLP и DMA-блока данных. Сидели пыхтели вдвоем, я писал драйвер, а коллега правил обвязку. Сначала подправили кусок кода, чтоб правильно писать в регистры (из ендпоинта) и соотв. читать регистры (из драйвера) флаги о состоянии и готовности буферов. Там была такая фишка, что последний пакет блока не успевал "долететь" в буфер на хост, а драйвер забирал уже весь буфер, т.к. регистры показывали что все готово. Потом на высоких скоростях одно ядро CPU было занято на 100% только на мониторинг регистров и рестарт контроллера, - переписали другой фрагмент обвязки и драйвера. Потом понадобилось пересылать доп. данные - дописали третий, и т.д. много мелких неприятностей, с которыми приходилось бороться днями и неделями
|
|
|
|
|
Feb 26 2011, 21:26
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(Fast @ Feb 27 2011, 00:34)  если точнее, то они определяются по согласованию между возможностями ОС, чипсета и Core. а непрерывный кусок памяти ядра windows можно выделить больше 1 Мб, кажется 16... но не помню, давно драйвер писал
ой, че только не наблюдали, висло по разному... и искажения периодически появлялись. В основном правда из-за размеров TLP и DMA-блока данных.
Сидели пыхтели вдвоем, я писал драйвер, а коллега правил обвязку. Сначала подправили кусок кода, чтоб правильно писать в регистры (из ендпоинта) и соотв. читать регистры (из драйвера) флаги о состоянии и готовности буферов. Там была такая фишка, что последний пакет блока не успевал "долететь" в буфер на хост, а драйвер забирал уже весь буфер, т.к. регистры показывали что все готово. Потом на высоких скоростях одно ядро CPU было занято на 100% только на мониторинг регистров и рестарт контроллера, - переписали другой фрагмент обвязки и драйвера. Потом понадобилось пересылать доп. данные - дописали третий, и т.д. много мелких неприятностей, с которыми приходилось бороться днями и неделями У меня sgdma режим и кольцевые буферы по 50 МБайт, так что таких проблем не было. А вот чтение виснет, скорость для x1 предельная - чипскоп показывает, что обмен идёт, ошибок нет, а ОС висит мёртво. Как только вставляю паузы в последовательности запросов - всё нормально. Возможно, на x8 hard ip не может полностью загрузить полосу и такого эффекта нет, но проверить пока не на чем. А что за железо у Вас?
|
|
|
|
|
Mar 4 2011, 07:23
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 28-01-10
Из: Новосибирск
Пользователь №: 55 106

|
Цитата(dmitry-tomsk @ Feb 27 2011, 03:26)  У меня sgdma режим и кольцевые буферы по 50 МБайт, так что таких проблем не было. А вот чтение виснет, скорость для x1 предельная - чипскоп показывает, что обмен идёт, ошибок нет, а ОС висит мёртво. Как только вставляю паузы в последовательности запросов - всё нормально. Возможно, на x8 hard ip не может полностью загрузить полосу и такого эффекта нет, но проверить пока не на чем. А что за железо у Вас? У нас была похожая проблема. http://electronix.ru/forum/index.php?showtopic=73356Вкратце, на дефолтных настройках при слишком бодром потоке данных корка начинала сбрасывать пакеты. А не получив ожидаемого числа пакетов колом может встать уже любая часть системы ) Вылечилось одной галочкой в настройках корки.
|
|
|
|
|
Mar 4 2011, 19:48
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(Anatol' @ Mar 4 2011, 10:23)  У нас была похожая проблема. http://electronix.ru/forum/index.php?showtopic=73356Вкратце, на дефолтных настройках при слишком бодром потоке данных корка начинала сбрасывать пакеты. А не получив ожидаемого числа пакетов колом может встать уже любая часть системы ) Вылечилось одной галочкой в настройках корки. Спасибо за помощь. Правда у меня не вылечилось, да и корка сама не висит, обмен идёт, ошибок не показывает, а windows висит (:
|
|
|
|
Сообщений в этой теме
L_Konstantin Реализация PCI-E x4 на Virtex5 Feb 18 2011, 10:57  DmitryR Может разведено криво, и TX/RX пары наводят друг н... Feb 18 2011, 11:49              Methane Цитата(dmitry-tomsk @ Feb 20 2011, 17... Feb 20 2011, 16:00                 Methane Цитата(Anatol' @ Mar 4 2011, 09:23) В... Mar 4 2011, 07:26 dmitry-tomsk Цитата(L_Konstantin @ Feb 18 2011, 14:57)... Feb 18 2011, 19:17 ZAO Цитата(L_Konstantin @ Feb 18 2011, 13:57)... Feb 21 2011, 08:01 L_Konstantin Цитата(ZAO @ Feb 21 2011, 14:01) Сталкива... Feb 22 2011, 10:47 D-Luxe Какая у тя плата? Посоветуй какую-нибудь плату Xil... Feb 22 2011, 12:48 L_Konstantin Цитата(D-Luxe @ Feb 22 2011, 18:48) ... Feb 24 2011, 03:24  Bad0512 Цитата(L_Konstantin @ Feb 24 2011, 09:24)... Feb 25 2011, 12:02 Fast у нас на 5м Virtex все работало на x8, примерно 1... Feb 26 2011, 11:11 Methane Цитата(Fast @ Feb 26 2011, 13:11) для нач... Feb 26 2011, 12:15  Fast Цитата(Methane @ Feb 26 2011, 15:15) Реал... Feb 26 2011, 19:50   dmitry-tomsk Цитата(Fast @ Feb 26 2011, 23:50) позволя... Feb 26 2011, 20:02 dmitry-tomsk Цитата(Fast @ Feb 26 2011, 14:11) у нас ... Feb 26 2011, 15:09 L_Konstantin Наконец разобрались с проблемой!...
Дело было ... Mar 5 2011, 09:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|