Jump to content

    
Sign in to follow this  
Airy_brn

PCI Express на Spartan 6

Recommended Posts

Здравствуйте!

Реализую 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 трансиверы.

Может, кто сталкивался с этим? Это все-таки аппаратный глюк или пытаться дальше копать свой проект?

Share this post


Link to post
Share on other sites
количество свободных буферов (trn_tbuf_av) не увеличивается,

 

Посмотри мой проект для SP605 http://ds-dev.ru/projects/ds-dma/files

Передача пакетов реализована в файле core64_tx_engine_m4.vhd

Передачу по DMA я начинаю только если есть четыре или более свободных буферов. Ответ на чтение происходит если есть хотя бы один свободный буфер.

Этот вариант работает с макмимальной скоростью. Проект тестировал Kuzmi4, скорость ввода 215 Мбайт/с.

 

 

Share this post


Link to post
Share on other sites

...пришлось надолго отвлечься от задачи, но проблема никуда не делась...

dsmv, спасибо за пример, но выяснилось, что передача у меня организована таким же образом...

Смогла выяснить, что "зависание" происходит после следующей ситуации: я пишу некоторое количество пакетов в PCIe блок, количество свободных буферов и Flow Control TX Credit уменьшаются. Потом количество свободных буферов увеличивается на 2, хотя Flow Control TX Credit остается без изменений. После этого Flow Control TX Credit возвращаются к первоначальному значению, а trn_tbuf_av уже не изменяется.

Проблема эта скорее всего не железная, т.к. на кристалле LX100T ситуация точно такая же.

Share this post


Link to post
Share on other sites
Проблема эта скорее всего не железная, т.к. на кристалле LX100T ситуация точно такая же.

 

А вот это похоже на неправильное формирование пакета. Я сталкивался с таким на модели, когда не совпадал размер пакета и поле Lenght в заголовке.

Share this post


Link to post
Share on other sites

А проблема оказалась вообще не там, где искали!

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

Share this post


Link to post
Share on other sites

А это особенно интересно. Наверное другие PCIE устройства в этом слоте работают.

 

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

 

 

 

Share this post


Link to post
Share on other sites

Плата с мостом от Gennum работает.

А кривость заключалась в том, что нулевой бит выхода cfg_dstatus (Correctable Error Detected) через пару секунд после сброса становился 1 и MAX_PAYLOAD_SIZE записывался 256 байт, хотя в нормальном режиме на моей материнке это 128 байт.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this