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