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

 
 
> Почему PCIe может повесить windows?, virtex-5 pcie аппаратный блок
dmitry-tomsk
сообщение Oct 1 2010, 17:48
Сообщение #1


Знающий
****

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



Столкнулся с проблемой отладки PCIe аппаратного блока Virtex-5. Свой контроллер осуществляет чтение из памяти PC по pcie - отправляет mrd запросы, ждёт cpld ответы. Если обмен типа - запрос передачи блока (размер до 1 мбайта, не влияет), затем ожидание окончания, затем следующий запрос - всё нормально. Если ожидания нет и чтение идёт непрерывно - виснет винда, а обмен идёт! Чипскоп показывает непрерывный поток cpld в ответ на mrd запросы. Конфигурация блока - completion streaming, до 32 запросов на чтение перед получением первого ответа. Где можно поискать ошибку? Уже и идей то не осталось, всё проверил. За состоянием буферов на материнке следил чипскопом, в нуле только non-posted data, причём всегда. Передача данных в память PC спокойно идёт на полной скорости (mwr запросы).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Voiceц
сообщение Oct 4 2010, 07:06
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 29-09-06
Пользователь №: 20 798



Цитата(dmitry-tomsk @ Oct 1 2010, 21:48) *
Столкнулся с проблемой отладки PCIe аппаратного блока Virtex-5. Свой контроллер осуществляет чтение из памяти PC по pcie - отправляет mrd запросы, ждёт cpld ответы. Если обмен типа - запрос передачи блока (размер до 1 мбайта, не влияет), затем ожидание окончания, затем следующий запрос - всё нормально. Если ожидания нет и чтение идёт непрерывно - виснет винда, а обмен идёт! Чипскоп показывает непрерывный поток cpld в ответ на mrd запросы. Конфигурация блока - completion streaming, до 32 запросов на чтение перед получением первого ответа. Где можно поискать ошибку? Уже и идей то не осталось, всё проверил. За состоянием буферов на материнке следил чипскопом, в нуле только non-posted data, причём всегда. Передача данных в память PC спокойно идёт на полной скорости (mwr запросы).

Попробуйте не пересекать в запросе границу адреса 4 кБ, что означает в вашем случае (размер запроса до 1 МБ) запрашивать данные не за один раз, а за несколько. Вот выдержка из протокола (2.0), раздел 2.2.7:
Requests must not specify an Address/Length combination which causes a Memory Space access to cross a 4-KB boundary.
• Receivers may optionally check for violations of this rule. If a Receiver implementing this check determines that a TLP violates this rule, the TLP is a Malformed TLP
♦ If checked, this is a reported error associated with the Receiving Port (see Section 6.2)
Удачи.

Сообщение отредактировал Voiceц - Oct 4 2010, 07:07
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Oct 4 2010, 07:11
Сообщение #3


Знающий
****

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



Границы блока не пересекаются. Тесты целостности данных проходят. И при паузах между обменами ОС не виснет.
Go to the top of the page
 
+Quote Post
vmp
сообщение Oct 4 2010, 07:41
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Может быть вы просто занимаете всю полосу пропускания памяти или контроллера? В результате процессору нет возможности читать из памяти команды и данные, что выглядит как "зависание".
Если после "зависания" остановить обмены, система отвиснет?
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Oct 4 2010, 07:59
Сообщение #5


Знающий
****

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



Цитата(vmp @ Oct 4 2010, 10:41) *
Может быть вы просто занимаете всю полосу пропускания памяти или контроллера? В результате процессору нет возможности читать из памяти команды и данные, что выглядит как "зависание".
Если после "зависания" остановить обмены, система отвиснет?

PCIex1 никак не может занять всю полосу, кроме того передача из устройства в память РС на полной скорости и непрерывно заисания не производит. Была идея, что кто-то пытается прочитать из устройства, например, регистр состояния, а входной буфер занят. Вот драйвер в ОС и ждёт ответа, но ведь это должно контроллироваться враппером или самим блоком PCIe V-5. Да и как это проверить?
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Oct 5 2010, 16:21
Сообщение #6


Знающий
****

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



Дополню, что если completion streaming отключить и ограничить число запросов до 8/MAX_READ_SIZE/RCB (4 на моей материнке), то зависания не происходит, но скорость чтения всего 165 МБайт в секунду, против 203 МБайт в секунду скорости чтения.
Go to the top of the page
 
+Quote Post

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

 


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


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