Здравствуйте.
Хочу поделится интересным наблюдением. Я продолжаю исследовать передачу данных по шине PCI-Express.
Описание эксперимента:
Модуль ADP201x1, контроллер PCI-Express реализован на ПЛИС Virtex 5 LX50T
PCI-Express x8
Chipset P45;
Модуль ADP201x1 умеет формировать тестовую последовательность в двух режимах:
1. С анализом готовности FIFO
2. Без анализа готовности FIFO
В режиме 1, если контроллер PCI-Express не успевает передать данные, то формирование данных приостанавливается. В итоге получаем максимальную скорость передачи данных 1431 Мбайт/с.
В режиме 2 задаётся определённая скажность формирования данных, в итоге получаем поток на фиксированной скорости.
На комьютере выделяется блок памяти 1536 Мбайт. Для программы это выглядит на 32 блока по 48 Мбайт. На физическом уровне память фрагментирована на страницы по 4 килобайта.
Так вот собственно проблема: Если сразу запустить режим 2 на скорости 1400 Мбайт/с, то FIFO переполняется - ошибка. Если сначала запустить режим 1, а через несколько секунд переключиться в режим 2,
то ввод на скорости 1400 Мбайт/с идёт нормально в течении длительного времени. Проверял в течении часа - работает.
Запуск формирования тестовой последовательности производится после запуска канала DMA.
Может это связано с какой-либо динамической конфигурацией мостов PCI-Express ?