Изучаю PCIe на ките альтеры с Cyclone-IV. В качестве основы для прошивки использую то, что генерит бесплатный IP compiler for PCI Express.
Написал простейший драйвер под WinXP, который мапит бары в user space и отдает эти виртуальные адреса приложению Win32 (вернее, приложение у драйвера их запрашивает). DMA не использую.
В приложении я просто делаю записи по этим адресам. Указатели объявил типа __int64 *.
В ПЛИСине с помощью SignalTap смотрю, что из корки сыпется в обработчик TLP.
Вот что мне не понятно:
Если я делаю запись по виртуальному адресу, например : *pBuffer = 0xBEEFCAFEDEADFACE, то вижу, что из корки летит 2 TLP. Один со старшей частью, а второй с младшей.
Если в указатель буду пихать больше данных, например с помощью memcpy, то из корки прилетит столько TLP, сколько 32-битных слов я запишу в указатель.
Я расчитывал, что все данные будут в одном единственном TLP.
Подскажите, в какую сторону копать?