Привет.
Может кто сталкивался с разработкой асинхронных PCIe? У нас в системе процессор и ПЛИС тактируются каждый от своих 100МГц. Идет большой трафик и иногда, смотря по FPGA - трафик затыкается на 3-30мкс. Причем задержка фиксированная для определенной хардварной конфигурации. Со стороны FPGA выглядит так, что входные данные вдруг перестают приходить а для передачи Transmit TLP credits начинают стремительно уменьшаться, пока не достигают 0. Через какое-то время кредиты резко появляются и коммуникация возобновляется. Spread-Spectrum и ASPM вроде как отключены. ASYNC включен.
Прогнали BER тесты между ПЛИС через бэкплейн - все работает без ошибок на 5Гбит.
Вопрос к знатокам, а можно ли PCIe свичи загнать в режим, в котором можно было бы делать BER тесты - ну например какой-нибудь loopback. PLX/IDT что-то такое поддерживают?
Обнаружился интересный эффект. Оказалось, что коммуникация затыкается на этапе DDR память - PCIe свитч. Т.е. что-то, блокирует коммуникацию. Я так понимаю, что это возможно процессор во время обработки прерываний, так как блокировки учащаются, если двигать мышкой или нажимать на клавиатуру. Кто-то встречался с таким?
С таким не сталкивался, не работал с таким конкретно железом. Но попробую пованговать.
Первое - что на стороне хоста? Что там за ПО? Какой драйвер? Какой механизм обмена данными? Если полагаетесь на готовые DMA контроллеры готовые драйверы, то понятно что там масса причин почему хост может быть не готов принимать новые данные.
Было дело с затыками записи из FPGA в DDR. Система (чипсет?) не давала сигнал готовности устройству. В тот момент у нас была двухсокетная материнка, и мы свалили это всё на межсокетную когерентность, потому что на односокетной проблема ушла.
хотя может быть это просто DDR refresh был или memory scrubbing (ECC). фиг знает.
а вообще PCIe - не реалтайм by design, поэтому никто ничего не гарантирует. извините.
В том-то и дело, что ПЛИС пишет прямо в DDR. При этом, если на хосте крутится Linux, то затыки возникают если просто дернуть мышкой или нажать клавишу на клавиатуре. Если же запустить RTOS(мы используем VxWorks), то затыки почти не проявляются - раз в 5-10 минут, но при этом их длительность становится больше. А что такое DDR refresh? Ей как-то можно управлять? Память с ECC. Хост - процессор Skylake на чипсете CM236
Попробуйте в BIOS setup перевести USB 3.0 -> USB 2.0
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)