Добрый день всем.
Хочу поделиться опытом собственной ошибки.
Есть плата на базе Virtex5 FXT70. Интерфейс PCIe x4. Реализовано чтение/запись по инициативе ХОСТА и запись из платы в память ХОСТА в режиме прямого доступа.
На разных материнках в слотах х16 работала без проблем. Проблема обнаружилась на материнской плате AS-C74 (процессор Xeon-E3, Intel® C200 Series Chipset) и повторилась на другом типе материнки, но с таким же процессором и чипсетом.
При установке платы в PCIe слот х16, выходящий на сам процессор, всё нормально работает. При установке в слот х4, выходящий на мост "мёртвое" зависание компьютера при выполнении платой запроса чтения от процессора.
В результате обнаружилось, что причина состоит в ошибке формирования поля Byte Count пакета Copletion (ответ на запрос чтения).
Контроллер PCIe на самом процессоре на ошибочно сформированное поле "не обращал внимания", а контроллер моста обнаруживал несоответствие стандарту, что приводило к зависанию.
В очередной раз довелось убедиться в значимости фразы Жванецкого: "Тщательнее надо..., тщательнее..."
Всем удачи.