Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCI Express на Spartan 6
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Airy_brn
Здравствуйте!
Реализую PCI Express на стандартном Endpoint ядре Spartan 6 (LX45T). При не очень большом потоке данных все замечательно - DMA передачи ходят в обоих направлениях. Однако при увеличении потока происходит очень странная ситуация - само ядро (Integrated Endpoint Block) начинает глючить: количество свободных буферов (trn_tbuf_av) не увеличивается, хотя пакеты из блока в машину уходят (этот вывод я сделала из того, что Flow Control Credit буфера возвращаются к значениям, которые были до передачи).
В Errata на Spartan 6 LX45T описана ошибка, которая очень может приводить к таким последствиям. А именно - "if the endpoint block for PCIe® receives multiple Packet Not Accepted DLLPs (NAKs) while also having small TLPs in the queue, the transmitter can lock up". Но это для ревизии 1, а у меня JTAG'ом опряделяется ревизия 3. В других Errata на Spartan 6 рассматриваются сразу и LX, и LXT семейства, и там вообще нет ничего про PCI Express и GTP трансиверы.
Может, кто сталкивался с этим? Это все-таки аппаратный глюк или пытаться дальше копать свой проект?
dsmv
Цитата(Airy_brn @ Sep 20 2011, 14:31) *
количество свободных буферов (trn_tbuf_av) не увеличивается,


Посмотри мой проект для SP605 http://ds-dev.ru/projects/ds-dma/files
Передача пакетов реализована в файле core64_tx_engine_m4.vhd
Передачу по DMA я начинаю только если есть четыре или более свободных буферов. Ответ на чтение происходит если есть хотя бы один свободный буфер.
Этот вариант работает с макмимальной скоростью. Проект тестировал Kuzmi4, скорость ввода 215 Мбайт/с.

Airy_brn
...пришлось надолго отвлечься от задачи, но проблема никуда не делась...
dsmv, спасибо за пример, но выяснилось, что передача у меня организована таким же образом...
Смогла выяснить, что "зависание" происходит после следующей ситуации: я пишу некоторое количество пакетов в PCIe блок, количество свободных буферов и Flow Control TX Credit уменьшаются. Потом количество свободных буферов увеличивается на 2, хотя Flow Control TX Credit остается без изменений. После этого Flow Control TX Credit возвращаются к первоначальному значению, а trn_tbuf_av уже не изменяется.
Проблема эта скорее всего не железная, т.к. на кристалле LX100T ситуация точно такая же.
dsmv
Цитата(Airy_brn @ Oct 25 2011, 12:31) *
Проблема эта скорее всего не железная, т.к. на кристалле LX100T ситуация точно такая же.


А вот это похоже на неправильное формирование пакета. Я сталкивался с таким на модели, когда не совпадал размер пакета и поле Lenght в заголовке.
Airy_brn
А проблема оказалась вообще не там, где искали!
На моей материнке есть разъемы PCI-Express, подключенные напрямую к южному мосту, а есть подключенные через свитч. Плата стояла в разъеме, который через свитч и конфигурировалась после сброса слегка криво. В другом разъеме все заработало! И на других машинах тоже.
dsmv
А это особенно интересно. Наверное другие PCIE устройства в этом слоте работают.

И в чём заключается кривизна конфигурирования ?


Airy_brn
Плата с мостом от Gennum работает.
А кривость заключалась в том, что нулевой бит выхода cfg_dstatus (Correctable Error Detected) через пару секунд после сброса становился 1 и MAX_PAYLOAD_SIZE записывался 256 байт, хотя в нормальном режиме на моей материнке это 128 байт.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.