Цитата(Katrisha @ May 4 2012, 18:29)

Согласно википедии

при частоте 33.33 МГц - пиковая проходная способность 133Мбайт/с.
Да, есть такое дело... но подобная скорость достижима
только в режиме Bus Master, да еще и при работе крупными пакетиками...
Цитата(Katrisha @ May 4 2012, 18:29)

1. PCI 2.2, разрядность 32, частота 33.33 МГц, напряжение 3.3В
2. Чтение/запись в память.
3. Мое устройство не может быть мастером. Все инициирует ПК.
4. Мое устройство вставлено в ПК )
Нужно еще одно уточнение: какой у Вас используется PC ?
Но общая суть проблемы мне ясна - сам с подобным мучился.
Как я понял, суть проблемы приблизительно следующая:
1. Дам 90%, что Вы используете PC с PCI-E... а PCI находится после PCI-E->PCI Bridge
2. В этом случае необходимо учесть особенности работы PCI-E. А вот тут есть одна неприятная особенность.
PCI-E - очень похож на full duplex Ethernet; соответственно, на низком уровне, каналы TX и RX практически никак не связаны, поэтому допускается огромная (по меркам PCI) задержка на ответ: пока к Target дойдёт пакетик, пока Target его переварит, пока обратно прийдёт пакетик... - куча времени проходит.
3. С другой стороны у Вас явно используется non-prefetchable BAR (и это, почти наверняка, правильно для Вашего случая), что не позволяет PCI-E->PCI Bridge зачитать наперёд данные (а вдруг они изменятся - prefetch же не просто так выключен)... Процессор, по каким-то причинам, не может сделать блочное чтение. Поэтому его одиночные операции чтения и доходят до Вашего устройства в неизменном виде...
Я нашел следующие пути решения этой проблемы:
1. Переход на Bus Master режим. Т.к. BM реализуете именно Вы, то достаточно реализовать только те Mem Read/Write команды которые Вам необходимы (т.е. 0111 - Memory Write и, может быть, 0110 - Memory Read, если она необходима). PC RAM прекрасно кэшируется, поэтому блочные операции работают весьма быстро. Правда с BM Mem Write есть одна мелкая заморочка: прерывание к CPU может обогнать данные, которые были отправлены в ОЗУ, лечится I/O Read'ом CPU->Ваше устройство (как описано в PCI спецификации), либо использованием MSI, но вот за MSI не уверен, поэтому это необходимо уточнить.
2. Мелкое ускорение: CPU может генерировать сдвоенные операции чтения, если использовать MMX инструкции.
3. Крохотное ускорение: можно поддержать Fast Back-to-Back (5 лет назад мне это удалось сделать в убогоньком Spartan-2, поэтому в современных ПЛИС не должно вызывать особых проблем).