В общем, есть плата с XC5VLX30T, во всю используется DMA через PCI-express...
Изначально Endpoint Block Plus for PCI Express был сгенерён с частотой интерфейса 250 МГц, всё нормально работало, но по мере заполнения кристалла всякой дополнительной фигнёй, разводка всё реже и реже стала укладываться в констреинты, пока это не стало выглядеть совсем печально.
Было решено пересоздать этот блок с частотой интерфейса 125 МГц. После этого на двух из трёх рабочих машин всё продолжило прекрасно работать, а на одной (мать P5WDG2 WS PRO) радостно зависло.
Раскопки с чипскопом показали, что при чтении из памяти через DMA страницы размером 4К стабильно и всегда пропадают два TLP-пакета данных.
Пропадают в произвольном месте, вроде бы обычно ближе к концу страницы, вроде всегда не подряд, всегда два.
В readme к Endpoint Block Plus обнаружено вот такое вот known issue:
- TLP dropped on receive interface due to Completion Streaming Issue
o CR 473226
Completion TLP getting dropped on receive interface due to receiver
overflow when using Completion Streaming mode.
Вроде похоже, но фиг знает.
Кто-нибудь сталкивался с чем-то подобным?
Есть какие-нибудь мысли?