Flood 12 24 января, 2017 Опубликовано 24 января, 2017 · Жалоба Выложите схемы обеих плат, без них нет никакого смысла гадать по ucf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 25 января, 2017 Опубликовано 25 января, 2017 · Жалоба Выложите схемы обеих плат, без них нет никакого смысла гадать по ucf. Вот схема конечного устройства, а на отладочной плате enclustra pe-1 + kx-1, не отследил линию сброса, только трансиверы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 27 января, 2017 Опубликовано 27 января, 2017 · Жалоба Что-то так и не пойму, если подключаем к sys_reset PERST, Нормальное состояние сигнала 1, а сброс по 0? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 12 29 января, 2017 Опубликовано 29 января, 2017 · Жалоба Что-то так и не пойму, если подключаем к sys_reset PERST, Нормальное состояние сигнала 1, а сброс по 0? На слоте PERST# - активный 0. Насчет выложенных картинок - это не схема, а какие-то обрывки. Вы снова предлагаете гадать по неполной информации. Могу предположить, что: INST "pcie_7x_v1_11_i/gt_top_i/pipe_wrapper_i/pipe_lane[0].gt_wrapper_i/gtx_channel.gtxe2_channel_i" LOC = GTXE2_CHANNEL_X0Y4; Но не уверен, что это правильно. Схемы-то толком нет. Обратитесь в саппорт изготовителя отладочной платы с вопросом: дайте ucf на PCI Express для вашей платы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 30 января, 2017 Опубликовано 30 января, 2017 (изменено) · Жалоба Судя по этому, правильно X0Y7 Заметил, что должна быть выставлена PRSNT в '1', может еще какие сигналы забыл, почему-то об этом нигде не увидел. upd: хотя если выставляю '1', то ресет на 0 зависает Изменено 30 января, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 12 30 января, 2017 Опубликовано 30 января, 2017 · Жалоба Если есть ощущение, что пинаут правильный (что не факт), возможно, что конфигурирование ПЛИС занимает слишком много времени и плата успевает отключить клок. Об этой проблеме достаточно подробно написано в документации на ядро. Но скорее проблема в пинауте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 3 февраля, 2017 Опубликовано 3 февраля, 2017 (изменено) · Жалоба На плате таковую осциллографом увидел, копаю дальше Изменено 3 февраля, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 7 февраля, 2017 Опубликовано 7 февраля, 2017 · Жалоба Устройство увиделось в системе. И тактовую и трансиверы потребовалось напрямую задавать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 (изменено) · Жалоба Здравствуйте, взялся за реализацию обмена по pcie. Плата с Kintex7. Пк Win7, смотрю память программой RW-Everything, ну и собственная есть для чтения из БАРов и памяти. Подключил пример с ядром 7 Series FPGAs Integrated Block for PCI Express v1.7. Чтение и запись, работа с БАРами получилась, теперь стоит задача, чтобы железо писало по заданному адресу. В корке по запросу чтения из БАРа реализована запись сл. образом: s_axis_tx_tdata <= ( rd_data & req_rid & req_tag & '0' & lower_addr & completer_id & "000" & '0' & byte_count & '0' & PIO_CPLD_FMT_TYPE & --"1001010" '0' & req_tc & "0000" & req_td & req_ep & req_attr & "00" & req_len ) after TCQ; Начал городить запись в память по заданному адресу, решил попробовать написать в ту же область (в моем случае под БАР выделяется память с адреса 0xF610000), изменил пакет сл образом. s_axis_tx_tdata <= ( rd_data & X"F6100000" & req_rid & req_tag & req_lb & --здесь значение "1111" --не совсем понял назначение этих двух переменных, но в примерах дма такие значения. req_fb & -- здесь значение "1111" "01000000" & --запись в память '0' & req_tc & "0000" & req_td & req_ep & req_attr & "00" & req_len ) after TCQ; После попытки чтения, комп подвисает немного, но данных нет, пробовал по другому адресу, тоже ничего. Подскажите, пожалуйста, может служебные переменные "вырванные" из запроса на чтение БАР(шины m_axis_rx_tdata) не подходят в данном случае. Хотелось бы пример команды с чистой записью из железки в ПК по заданному адресу, возможно однократная. Изменено 23 ноября, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Хотелось бы пример команды с чистой записью из железки в ПК по заданному адресу, возможно однократная. Сам ПК успешно считал из BAR через эту программу (rw everything), т.е. проходят запросы CplD? Итак, попытка записать в ПК из железки - откуда берется адрес? И как он попадает в железку, хардкод что ли? решил попробовать написать в ту же область т.е. данные будут прилетать без запроса? Кто их там ждет? А кто сказал что адрес для устройства и адрес для ядра ОС один и тот же? Не знаю, возможно ли это, я так никогда не делал, может потому компьютер удивляется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 (изменено) · Жалоба Сам ПК успешно считал из BAR через эту программу (rw everything), т.е. проходят запросы CplD? Итак, попытка записать в ПК из железки - откуда берется адрес? И как он попадает в железку, хардкод что ли? т.е. данные будут прилетать без запроса? Кто их там ждет? А кто сказал что адрес для устройства и адрес для ядра ОС один и тот же? Не знаю, возможно ли это, я так никогда не делал, может потому компьютер удивляется. Да, исходный пример с ядром по записи-чтению в БАР, работает. Запросы проходят, вот я подумал изменить этот кусок, чтобы он писал не в БАР, а мной заданный адрес (для начала прям в коде железно адрес, пробовал разные, а потом через БАР буду задавать выделенную область). Поэтому вот хочу разобраться просто в команде записи по заданному адресу. //update Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный Изменено 23 ноября, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный Для Windows не подскажу, но по аналогии в Linux можно (в качестве самого базового способа) вызвать dma_alloc_coherent и выделить некоторый буфер, например 4096 байт. И получив два адреса, один отдается устройство в которое оно может писать в произвольный момент времени, а ядро ОС может читать что записало устройство по второму адресу. Отсюда и вопрос - как Вы выделяете память, приведите пример. И какие меры приняты, чтобы оба адреса оставались постоянными, чтоб их можно было чуть ли не зашить в прошивку. Если пользуетесь сторонней программой, то похоже это тот самый момент, когда надо уже начинать писать свой драйвер. Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный Да, там есть такое дело, адрес должен быть с шагом 4 байта, если не ошибаюсь, и действительно 2 младших бита нулевые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 24 ноября, 2017 Опубликовано 24 ноября, 2017 (изменено) · Жалоба Для Windows не подскажу, но по аналогии в Linux можно (в качестве самого базового способа) вызвать dma_alloc_coherent и выделить некоторый буфер, например 4096 байт. И получив два адреса, один отдается устройство в которое оно может писать в произвольный момент времени, а ядро ОС может читать что записало устройство по второму адресу. Отсюда и вопрос - как Вы выделяете память, приведите пример. И какие меры приняты, чтобы оба адреса оставались постоянными, чтоб их можно было чуть ли не зашить в прошивку. Если пользуетесь сторонней программой, то похоже это тот самый момент, когда надо уже начинать писать свой драйвер. Да, там есть такое дело, адрес должен быть с шагом 4 байта, если не ошибаюсь, и действительно 2 младших бита нулевые. С выделением памяти есть своя программа, предполагал, пока не передаю выделенный адрес в плис, просто протестировать запись с произвольную ячейку, но видимо так нельзя? (заведомо брал побольше адрес, чтобы он неиспользовался и там нулевые значения были). Изменено 24 ноября, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 24 ноября, 2017 Опубликовано 24 ноября, 2017 · Жалоба С выделением памяти есть своя программа, предполагал, пока не передаю выделенный адрес в плис, просто протестировать запись с произвольную ячейку, но видимо так нельзя? (заведомо брал побольше адрес, чтобы он неиспользовался и там нулевые значения были). Вот не знаю, мне кажется (кажется!) так нельзя. У меня есть собственные догадки, почему так, не буду их афишировать, дабы не прогневать специалистов :) Лучше полагаться на API операционной системы, и всё будет работать. Это не микроконтроллер, совсем произвольно так с адресами нельзя поступать, всё (адреса шин) должно штатным образом отображаться одно в другое. А по поводу адреса в ПЛИС, при 32 битной адресации address[31:2], [1,0] - reserv. Получается адрес максимум 30 разрядный? 3FFFFFFF максимальный адрес, или адрес считывается вместе с младшими нулями? и нормально можно адресовать FFFFFFFF. А как же 64-битная адресация у PCI-E? Тут http://xillybus.com/tutorials/pci-express-...utorial-guide-1 пишут, что такое редко когда надо. В принципе, ясно, что ширина адреса это не катастрофа, всегда можно обойти окошечками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 25 ноября, 2017 Опубликовано 25 ноября, 2017 · Жалоба Еще одна деталь, насчет "нормально адресовать" FFFFFFFF. http://www.compbegin.ru/articles/view/_76 Как мы уже знаем, чисто теоретически 32-х разрядной системе без каких-либо дополнительных ухищрений доступны до 4 гигабайт оперативной памяти (232), но Windows не может использовать весь этот объем, так как часть его отводится под устройства компьютера.Так что, я полагаю, что ширина ворот для адресации устройств составляет лишь 1 Гбайт. Не могу уверенно утверждать, там далеко я еще не забирался. Возможно для AMD64/x86_64 эта ситуация несколько иначе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться