реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Airy_brn
сообщение Sep 20 2011, 10:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 14-01-10
Пользователь №: 54 788



Здравствуйте!
Реализую 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 трансиверы.
Может, кто сталкивался с этим? Это все-таки аппаратный глюк или пытаться дальше копать свой проект?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 20 2011, 18:03
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(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 Мбайт/с.

Go to the top of the page
 
+Quote Post
Airy_brn
сообщение Oct 25 2011, 08:31
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 14-01-10
Пользователь №: 54 788



...пришлось надолго отвлечься от задачи, но проблема никуда не делась...
dsmv, спасибо за пример, но выяснилось, что передача у меня организована таким же образом...
Смогла выяснить, что "зависание" происходит после следующей ситуации: я пишу некоторое количество пакетов в PCIe блок, количество свободных буферов и Flow Control TX Credit уменьшаются. Потом количество свободных буферов увеличивается на 2, хотя Flow Control TX Credit остается без изменений. После этого Flow Control TX Credit возвращаются к первоначальному значению, а trn_tbuf_av уже не изменяется.
Проблема эта скорее всего не железная, т.к. на кристалле LX100T ситуация точно такая же.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Oct 27 2011, 04:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(Airy_brn @ Oct 25 2011, 12:31) *
Проблема эта скорее всего не железная, т.к. на кристалле LX100T ситуация точно такая же.


А вот это похоже на неправильное формирование пакета. Я сталкивался с таким на модели, когда не совпадал размер пакета и поле Lenght в заголовке.
Go to the top of the page
 
+Quote Post
Airy_brn
сообщение Oct 27 2011, 10:41
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 14-01-10
Пользователь №: 54 788



А проблема оказалась вообще не там, где искали!
На моей материнке есть разъемы PCI-Express, подключенные напрямую к южному мосту, а есть подключенные через свитч. Плата стояла в разъеме, который через свитч и конфигурировалась после сброса слегка криво. В другом разъеме все заработало! И на других машинах тоже.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Oct 27 2011, 12:00
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



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

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


Go to the top of the page
 
+Quote Post
Airy_brn
сообщение Oct 30 2011, 05:54
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 14-01-10
Пользователь №: 54 788



Плата с мостом от Gennum работает.
А кривость заключалась в том, что нулевой бит выхода cfg_dstatus (Correctable Error Detected) через пару секунд после сброса становился 1 и MAX_PAYLOAD_SIZE записывался 256 байт, хотя в нормальном режиме на моей материнке это 128 байт.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 23:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016