Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с DMA для PCI-express
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
irum4
Привет, всем! help.gif
Нужна помощь по DMA для PCI-express!
Я уже замаялся, но в толк не возьму почему все так плохо...
Сделал проект с DMA для PCI-express на базе XAPP1052 для виртекс 6. Где-то слышал, что он кривенько
написан... может быть, вопрос не в этом... Вопрос или даже проблема в том, что пакеты ядро
посылаются, а оттуда ну очень медленно выходят и не освобождают буфер. При чем чем длиннее пакет
тем быстрее "затык".
Для наглядности прикрепляю скрины с чипскопа.
Я в ступоре... Мыслей умных нет...что делать и куда смотреть уже и не знаю...
Кто может толкните twak.gif , чуствую, что решение под ногами, но где wacko.gif
Прикол в том, что модель на симуляторе такого не показывает, там все ок...
dsmv
В картинках с ходу разобраться не могу. Можно пояснить что собственно происходит и что ожидается.

А посмотреть можно у меня в проекте: http://ds-dev.ru


irum4
Цитата(dsmv @ Jul 16 2012, 17:54) *
В картинках с ходу разобраться не могу. Можно пояснить что собственно происходит и что ожидается.

А посмотреть можно у меня в проекте: http://ds-dev.ru


Ваш проект смотрел... аналогично с ходу разобраться не могу sm.gif... (но может быть придется)
На картинках относительно sm.gif все просто... это я так для наглядности...
Глобально проблема и вопрос по функционированию pci-express корки ибо это она (точнее я и не знаю почему) глючит.
Предистория:есть плата с виртексом 6-м и источником информации которую надо передавать в память компа, есть программа для ее управления, сделал проект на базе XAPP1052 (убрал остановку после передачи пакета и формирования прерывания), странслировал, прошил, запустил, все ок! Чипскоп показал, что пакеты летят, trn_tbuf_av (в связи с большой скоростью пакетов) постепенно доходит до 0 и затем меняется 1 (передаю пакет), 0 (жду пока корка передаст его в память) , 1 и т.д. Начинаю дополнять проект, разными своими необходимостями (обработка, фифо и т.д.) автомат формирования пакетов не трогаю (прерывания вообще заблокировал) и вдруг!!! получаю то что на картинках:
trn_tbuf_av начинает показывать, что буферы в корке начинают освобождаться о-очень медленно, значение доходить до 0 , после чего выставляется trn_dst_rdy в 1 и гудбай sad.gif, на этом и стоит, корка ничего не передает, более того, если в этот момент, программа читает чего из платы... комп зависает намертво...
Вот такая суть проблемы...
novartis
Может поможет то, что напишу)
Работал с ПЛИС Altera Stratix IV.
Терминология у них такая:
tx_st_ready - сигнал готовности принимать данные коркой,
tx_st_data - 128-битное слово для передачи.
Для передачи данных я формировал пакет максимум из девяти 128-битных слов:
первое слово - заголовок, 8 последующих - непосредственно данные.
В заголовке указывался адрес, куда на ПК надо складывать данные, ну и другая службная информация (все в соответствии со спецификацией на PCIE и описанием корки).

Данные вычитывались из некого буфера размером 150 слов (каждое слово по 128 бит).
Пересылать нужно было разное количество слов, как меньше 150 слов, так и больше 150.

Если меньше 150 - никаких проблем, ready - иногда скакало, буфер заполнялся/освобождался, но все работало.
Если больше 150, то посылалось так (150 разбивал на 8 слов и еще довесок в 6 слов):
8 8 8 8 8 8 8 6, потом у меня была пауза на ожидание, пока вновь заполнится буфер, после опять 8 8 8 ... Х. Х- не имеет значения.
При этом адресацию данных не нарушал, то есть последовательно заполнял выделенную мне память на стороне ПК, не обращая внимания на остановки и паузы.
В этом случае ready скакал ужасно. Если передавал много пачек по 150 слов, то корка PCIE падала на мертво (ready в ноль) после 7 пачки (точно не помню), вешая в последствии комп.

Побядил эту байду так: увеличил буфер до 152 слов, сделав его кратным 8.
Теперь передаю так:
8 8 8 8 8 8 8 8, пауза на заполнение буфера, 8 8 8 8 8 8 8 8, пауза, ..., 8 8 8 ... Х.

Корка с тех пор уже не вешалась)))

Для себя решил, что проблема в какойто хитрож..умной адресации данных, которую я нарушал.
dsmv
На модели такое было когда я ошибался в размере пакета. В этом случае всё останавливалось. Может проскакивает какой то неправильный пакет который затыкает канал обмена ?
irum4
Цитата(dsmv @ Jul 18 2012, 17:47) *
На модели такое было когда я ошибался в размере пакета. В этом случае всё останавливалось. Может проскакивает какой то неправильный пакет который затыкает канал обмена ?

Хм-м, возможно, хотя на модели как раз все супер sad.gif, да и формирование пакетов, я не трогаю... данные другие идут, ну и что (мысли вслух)...
Интересно, что при коротких пакетах корка дольше "держится", а при более длинных - как на картинке - один пакет передала и все...
RKOB
Я тоже думаю, что дело в формировании пакета. Может ошиблись размером или адресом.
Вопрос к вам: куда передаете данные? данные доходят все или есть потери?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.