exigo 0 9 января, 2018 Опубликовано 9 января, 2018 (изменено) · Жалоба Проверенными методами выделяю память, и передаю начальный адрес в ПЛИС через БАР0, на стороне плис успешно его считываю, там же в БАР0 записываю бит разрешающий писать по данному адресу. В ПЛИС по этому флагу собственно вот такой механизм записи в ПК, в нем очень не уверен, думаю из-за него и проблема. Так же прочитал, что должен быть в конфигурации выставлен бит мастер шины, по 0x4 адресу = 0x0006, т.е. 2 бит выставлен верно. if (write_en_f = '1') then if ((s_axis_tx_tready) = '1') then s_axis_tx_tlast <= '1' after TCQ; s_axis_tx_tvalid <= '1' after TCQ; s_axis_tx_tdata <= ( X"11111111" & --data st_addr & --addr "0000000000000000" & "00000000" & "0000" & "1111" & "01000000" & '0' & "000" & "0000" & '0' & '0' & "00" & "00" & req_len ) after TCQ; s_axis_tx_tkeep <= x"FFFF" after TCQ; end if; else s_axis_tx_tlast <= '0' after TCQ; s_axis_tx_tvalid <= '0' after TCQ; s_axis_tx_tdata <= (others => '0') after TCQ; s_axis_tx_tkeep <= (others => '1') after TCQ; end if; --write_en_f Не уверен, что этого достаточно, или параметры не верны, хочу по начальному адресу для начала хотя бы записать один пакет. На ПК тишина и в области памяти нули. Синего экрана даже нет, как будто ничего и не происходит. Изменено 9 января, 2018 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 15 января, 2018 Опубликовано 15 января, 2018 · Жалоба Скажите, пожалуйста, кто знает, похоже на правду или я кардинально неправильно делаю :) А то всё капаю капаю, а вдруг, где 1 бит не так. Буду благодарен конечно, если скините кусок рабочего кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 15 января, 2018 Опубликовано 15 января, 2018 · Жалоба Скажите, пожалуйста, кто знает, похоже на правду или я кардинально неправильно делаю :) А то всё капаю капаю, а вдруг, где 1 бит не так. Буду благодарен конечно, если скините кусок рабочего кода. А как же "его величество светодиод"? Делая проект на PCI-E нужно не забывать об удобной инфраструктуре отладки, а не гадать в слепую. Надо иметь возможность четко знать "вот тут не так", а "тут как надо". Могу лишь посоветовать или даже скинуть код отладки. Я отлаживаю так: есть некий буфер из полей единого формата, куда я кидаю события или значения каких-то регистров + временная метка в микросекундах например. Когда событий накопилось допустим 1000, я сбрасываю это в UART. Так можно получить ясную картину что где когда происходило и отладить проблему, сверить с моделью. Сам UART на передачу чудовищно прост: просто делитель и {1'b0, data[7:0], 1'b1} всё. Еще один мой подход - PCI-E пользовательскую логику можно вынести в отдельный модуль, и его то уже моделировать, ведь интерфейс PCI-E ядер на мой взгляд примитивен, так что его легко имитировать, и таким образом отлаживать саму логику свой части в Modelsim или ином симуляторе, используя обильный принтинг ($display или $fprintf и т.д.). А уже в top-модуле просто слепить свою логику и PCI-E ядро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 15 января, 2018 Опубликовано 15 января, 2018 (изменено) · Жалоба Да и светодиоды использую для проверки и chipscope, в том то и дело, что на основе моей логике и пакеты формируются и все что надо выставляется, но по заданным адресам на пк так и тишина, вот и грешу на служебные слова в заголовке пакета, что выше скидывал, хотя судя по мануалам везде нули. Функция запаси или автомат формирования запроса и данных, очень меня бы спас А на счет бита, это я про бит мастер шины, мало ли, где что-то подобное упустил. (кстати через светодиод и проверил) Изменено 15 января, 2018 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 15 января, 2018 Опубликовано 15 января, 2018 · Жалоба Да и светодиоды использую для проверки и chipscope, в том то и дело, что на основе моей логике и пакеты формируются и все что надо выставляется, но по заданным адресам на пк так и тишина, вот и грешу на служебные слова в заголовке пакета, что выше скидывал, хотя судя по мануалам везде нули. Функция запаси или автомат формирования запроса и данных, очень меня бы спас А на счет бита, это я про бит мастер шины, мало ли, где что-то подобное упустил. (кстати через светодиод и проверил) Я предлагаю сделать свой отладочный модуль вместо chipscope, некий 9-битный FIFO, где 8 бит данные на каждый байт, а 9-й бит означает начало пакета. Вот это потом вывалить в UART при этом начало пакета предварять символами 0x0D 0x0A. Тогда будет видно - вот такие пакеты зашли, такие вышли. Я так и отлаживал, имея легкочитаемые пакеты перед глазами, в которых легко найти ошибку, неверный битик. Понятно что PCI-E это скорость света, а UART улитка, но всё равно, накопив немного пакетов на огромной скорости, их потом можно неспешно выдавить в UART и скушать терминалом. И да, я не вижу кода драйвера - может настройка неверна в части ПО? Добро пожаловать на paste.org.ru и ссылки сюда, можно просто приложить исходник сюда к сообщениям - этот форум имеет такую функцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 6 марта, 2018 Опубликовано 6 марта, 2018 · Жалоба Снова приветствую, запись завелась, теперь новый затык. Пишу сл. образом: шина 128 бит, Первый TLP пакет(128 бит), и следом 8 пакетов данных. Все чудесно пишется, но только некоторое время. Ниже прилагаю скрин чипскопа. Каждый эксперимент прокачивает +- одинаковое количество данных. Пробовал кольцевой буфер и 1мб и 1кб, результат примерно один. Подскажите пожалуйста, почему падает tx_ready. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 6 марта, 2018 Опубликовано 6 марта, 2018 · Жалоба Снова приветствую, запись завелась, теперь новый затык. Стоп стоп стоп, прошу прощения, так дело не пойдет. Это не форум техподдержки, это по сути публичная база знаний. Что было конкретно сделано чтобы решить проблему? Прошу дать краткое описание решения. Пишу сл. образом: шина 128 бит, Первый TLP пакет(128 бит), и следом 8 пакетов данных. Все чудесно пишется, но только некоторое время. Ниже прилагаю скрин чипскопа. Каждый эксперимент прокачивает +- одинаковое количество данных. Пробовал кольцевой буфер и 1мб и 1кб, результат примерно один. Подскажите пожалуйста, почему падает tx_ready. Используемое IP-ядро само автоматически проверяет доступность "кредитов"? Какое время пишется - надо четко указать. И что происходит когда прокачка данных завершается - она завершается досрочно с зависанием, или аварийно. Или просто пакеты перестают идти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 7 марта, 2018 Опубликовано 7 марта, 2018 (изменено) · Жалоба Дада, вчера не успел на работе) Поставил вивадо и запустил корку дма бета. Изучил формирование пакета и автомат управления сигналами. Собственно, чего и не хватало. До конца помогло разобраться в конфигурации ТЛП запроса, ну и организовал автомат управляющий ногами как на скрине выше. Вот как формируется ТЛП запрос s_axis_tx_tdata <= ( dma_addr & --lo addr X"00000000" & --hi addr X"0600" & --RID "10000000"&--tx_tag "1111" & "1111" & "01100000" & --write '0' & "000" & "0000" & '0' & '0' & "00" & "00" & "0000100000" --32 DW ) after TCQ; Передача как на скрине выше, организована циклическая запись, запись по сигнала Tx_ready. Валится Tx_ready от ядра и все встает(комп не зависает). По времени пересылает 125-130 пачек (TLP+8пакетов данных). Может в ядре что-то сбрасывать надо периодически? Или в конфиге бит какой важный update: через BAR могу управлять dma_en своим сигналом, т.е. pcie устройство не отваливается, но запись более не происходит, т.к. tx_ready от ядра нет upd2: добавил после пачек не 1 такт нулевой а 3, и поток пишется, есть такие же застои иногда, но не сдыхает. По расчетам 1.3 ГБ поток, буду еще экспериментировать с размером посылок, но паузы мне эти не нравятся :) На двух тактах работает несколько секунд и сдыхал. Изменено 7 марта, 2018 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба добавил после пачек не 1 такт нулевой а 3, и поток пишется, есть такие же застои иногда, но не сдыхает. По расчетам 1.3 ГБ поток, буду еще экспериментировать с размером посылок, но паузы мне эти не нравятся :) На двух тактах работает несколько секунд и сдыхал. Что если насыпать туда заведомо лошадиное количество пустых тактов? Что будет? И оставить на час - и понять, будут ли затыки, просадки. Потом можно будет вернуть до 3-4 пустых. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 14 марта, 2018 Опубликовано 14 марта, 2018 · Жалоба Вернул на минимальную паузу в один такт между TLP, добавил в этот такт доп проверку tx_buf (количество свободных буферов ядра), не даю им опуститься ниже 8, если опускается то в отдельном состояние автомата ожидает, пока ядро переварит и продолжает запись. Добился 1.6 ГБ/с. И еще, материнка определила max payload как 128, хотя в ядре 512, в биосе что-то не нарыл как изменить, так бы еще удалось разогнать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 14 марта, 2018 Опубликовано 14 марта, 2018 · Жалоба И еще, материнка определила max payload как 128, хотя в ядре 512, в биосе что-то не нарыл как изменить, так бы еще удалось разогнатьMax payload определяется по совокупности всего пути от вашего устройства до root complex. Если там есть хоть один с max payload в 128, то можете у себя хоть 10G поставить - всё равно будет не более 128 :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 14 марта, 2018 Опубликовано 14 марта, 2018 · Жалоба Вернул на минимальную паузу в один такт между TLP, добавил в этот такт доп проверку tx_buf (количество свободных буферов ядра), не даю им опуститься ниже 8, если опускается то в отдельном состояние автомата ожидает, пока ядро переварит и продолжает запись. Добился 1.6 ГБ/с. И еще, материнка определила max payload как 128, хотя в ядре 512, в биосе что-то не нарыл как изменить, так бы еще удалось разогнать 1.6 Гбайт/с это и есть предел. Обычно можно брать за правду правило - 200 Мбайт/с на 1 lane 1 gen, т.е. x4 gen2 это и есть около 200*4*2 = 1600 Мбайт/с. Вот XAPP1289 где гоняли данные ПЛИС-to-ПЛИС https://www.xilinx.com/support/documentatio...89-dma-pcie.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 24 августа, 2018 Опубликовано 24 августа, 2018 · Жалоба Всем привет, благополучно юзал pcie. Но тут мне обновили ПК и на новом железе все перестало работать. Мой проект успешно позволяет записать управляющие адреса и размер буфера в БАР, но после включения ДМА устройство отваливается и в БАР 0xffffffffff все, или и того виснет комп. Решил проверить на xilinx примерах дма стримера и дма передачи(от которых отталкивался и они работали на старом ПК), после загрузки в железо комп сразу зависает, даже драйвер не дает поставить. Подскажите пожалуйста, в какую сторону копать? В устройстве проблем нет, подключил к компу схожим на мой старый, все путем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 24 августа, 2018 Опубликовано 24 августа, 2018 (изменено) · Жалоба Всем привет, благополучно юзал pcie. Но тут мне обновили ПК и на новом железе все перестало работать. Мой проект успешно позволяет записать управляющие адреса и размер буфера в БАР, но после включения ДМА устройство отваливается и в БАР 0xffffffffff все, или и того виснет комп. Решил проверить на xilinx примерах дма стримера и дма передачи(от которых отталкивался и они работали на старом ПК), после загрузки в железо комп сразу зависает, даже драйвер не дает поставить. Подскажите пожалуйста, в какую сторону копать? В устройстве проблем нет, подключил к компу схожим на мой старый, все путем. Может в теме этот вопрос был отвечен, но я всю тему не помню. Поэтому спрошу - Вы кредиты смотрите? Ждете необходимого минимального значения кредитов прежде чем слать? У меня была такая проблема - на новом быстром компе проблем не было, на старом висло, потому что не успевало выгребать из буферов. В любом случае, так называемые кредиты - очень важная деталь, и ее нужно обязательно проверять в процессе работы. Выше увидел, вы опираетесь на tx_ready. Оно может дает возможность слать, если приемные буфера приемной стороны хоть немного свободны, только достаточно ли в них места? Так что просто на tx_ready я бы не полагался, хотя Xilinx PCI-E еще не нюхал, предстоит до НГ освоить PCI на Xilinx. Изменено 24 августа, 2018 пользователем AVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 27 августа, 2018 Опубликовано 27 августа, 2018 · Жалоба В последних версиях еще отслеживаю кредиты (tx_buf) Но дело в том, что комп быстрее стал, и раньше когда не хватало кредитов он не зависал. И интересно, что xilinx примеры не запускаются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться