Цитата(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)
Удачи.