irum4 0 13 июля, 2012 Опубликовано 13 июля, 2012 · Жалоба Привет, всем! Нужна помощь по DMA для PCI-express! Я уже замаялся, но в толк не возьму почему все так плохо... Сделал проект с DMA для PCI-express на базе XAPP1052 для виртекс 6. Где-то слышал, что он кривенько написан... может быть, вопрос не в этом... Вопрос или даже проблема в том, что пакеты ядро посылаются, а оттуда ну очень медленно выходят и не освобождают буфер. При чем чем длиннее пакет тем быстрее "затык". Для наглядности прикрепляю скрины с чипскопа. Я в ступоре... Мыслей умных нет...что делать и куда смотреть уже и не знаю... Кто может толкните :twak: , чуствую, что решение под ногами, но где Прикол в том, что модель на симуляторе такого не показывает, там все ок... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 16 июля, 2012 Опубликовано 16 июля, 2012 · Жалоба В картинках с ходу разобраться не могу. Можно пояснить что собственно происходит и что ожидается. А посмотреть можно у меня в проекте: http://ds-dev.ru Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
irum4 0 17 июля, 2012 Опубликовано 17 июля, 2012 · Жалоба В картинках с ходу разобраться не могу. Можно пояснить что собственно происходит и что ожидается. А посмотреть можно у меня в проекте: http://ds-dev.ru Ваш проект смотрел... аналогично с ходу разобраться не могу :)... (но может быть придется) На картинках относительно :) все просто... это я так для наглядности... Глобально проблема и вопрос по функционированию pci-express корки ибо это она (точнее я и не знаю почему) глючит. Предистория:есть плата с виртексом 6-м и источником информации которую надо передавать в память компа, есть программа для ее управления, сделал проект на базе XAPP1052 (убрал остановку после передачи пакета и формирования прерывания), странслировал, прошил, запустил, все ок! Чипскоп показал, что пакеты летят, trn_tbuf_av (в связи с большой скоростью пакетов) постепенно доходит до 0 и затем меняется 1 (передаю пакет), 0 (жду пока корка передаст его в память) , 1 и т.д. Начинаю дополнять проект, разными своими необходимостями (обработка, фифо и т.д.) автомат формирования пакетов не трогаю (прерывания вообще заблокировал) и вдруг!!! получаю то что на картинках: trn_tbuf_av начинает показывать, что буферы в корке начинают освобождаться о-очень медленно, значение доходить до 0 , после чего выставляется trn_dst_rdy в 1 и гудбай :(, на этом и стоит, корка ничего не передает, более того, если в этот момент, программа читает чего из платы... комп зависает намертво... Вот такая суть проблемы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 18 июля, 2012 Опубликовано 18 июля, 2012 · Жалоба Может поможет то, что напишу) Работал с ПЛИС 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 0 18 июля, 2012 Опубликовано 18 июля, 2012 · Жалоба На модели такое было когда я ошибался в размере пакета. В этом случае всё останавливалось. Может проскакивает какой то неправильный пакет который затыкает канал обмена ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
irum4 0 19 июля, 2012 Опубликовано 19 июля, 2012 · Жалоба На модели такое было когда я ошибался в размере пакета. В этом случае всё останавливалось. Может проскакивает какой то неправильный пакет который затыкает канал обмена ? Хм-м, возможно, хотя на модели как раз все супер :(, да и формирование пакетов, я не трогаю... данные другие идут, ну и что (мысли вслух)... Интересно, что при коротких пакетах корка дольше "держится", а при более длинных - как на картинке - один пакет передала и все... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RKOB 0 5 октября, 2012 Опубликовано 5 октября, 2012 · Жалоба Я тоже думаю, что дело в формировании пакета. Может ошиблись размером или адресом. Вопрос к вам: куда передаете данные? данные доходят все или есть потери? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться