|
|
  |
kintex7+pci-e |
|
|
|
Jan 25 2017, 03:32
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Цитата(Flood @ Jan 25 2017, 03:12)  Выложите схемы обеих плат, без них нет никакого смысла гадать по ucf. Вот схема конечного устройства, а на отладочной плате enclustra pe-1 + kx-1, не отследил линию сброса, только трансиверы
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 27 2017, 09:15
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Что-то так и не пойму, если подключаем к sys_reset PERST, Нормальное состояние сигнала 1, а сброс по 0?
|
|
|
|
|
Jan 29 2017, 19:04
|
Знающий
   
Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871

|
Цитата(exigo @ Jan 27 2017, 12:15)  Что-то так и не пойму, если подключаем к 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 для вашей платы.
|
|
|
|
|
Jan 30 2017, 05:03
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Судя по этому, правильно X0Y7 Заметил, что должна быть выставлена PRSNT в '1', может еще какие сигналы забыл, почему-то об этом нигде не увидел. upd: хотя если выставляю '1', то ресет на 0 зависает
Сообщение отредактировал exigo - Jan 30 2017, 09:25
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 3 2017, 02:53
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
На плате таковую осциллографом увидел, копаю дальше
Сообщение отредактировал exigo - Feb 3 2017, 08:50
|
|
|
|
|
Feb 7 2017, 05:15
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Устройство увиделось в системе. И тактовую и трансиверы потребовалось напрямую задавать.
|
|
|
|
|
Nov 22 2017, 11:05
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Здравствуйте, взялся за реализацию обмена по 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) не подходят в данном случае. Хотелось бы пример команды с чистой записью из железки в ПК по заданному адресу, возможно однократная.
Сообщение отредактировал exigo - Nov 23 2017, 05:16
|
|
|
|
|
Nov 22 2017, 11:15
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(exigo @ Nov 22 2017, 14:05)  Хотелось бы пример команды с чистой записью из железки в ПК по заданному адресу, возможно однократная. Сам ПК успешно считал из BAR через эту программу (rw everything), т.е. проходят запросы CplD? Итак, попытка записать в ПК из железки - откуда берется адрес? И как он попадает в железку, хардкод что ли? Цитата(exigo @ Nov 22 2017, 14:05)  решил попробовать написать в ту же область т.е. данные будут прилетать без запроса? Кто их там ждет? А кто сказал что адрес для устройства и адрес для ядра ОС один и тот же? Не знаю, возможно ли это, я так никогда не делал, может потому компьютер удивляется.
--------------------
|
|
|
|
|
Nov 23 2017, 03:12
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Цитата(AVR @ Nov 22 2017, 18:15)  Сам ПК успешно считал из BAR через эту программу (rw everything), т.е. проходят запросы CplD? Итак, попытка записать в ПК из железки - откуда берется адрес? И как он попадает в железку, хардкод что ли?
т.е. данные будут прилетать без запроса? Кто их там ждет? А кто сказал что адрес для устройства и адрес для ядра ОС один и тот же? Не знаю, возможно ли это, я так никогда не делал, может потому компьютер удивляется. Да, исходный пример с ядром по записи-чтению в БАР, работает. Запросы проходят, вот я подумал изменить этот кусок, чтобы он писал не в БАР, а мной заданный адрес (для начала прям в коде железно адрес, пробовал разные, а потом через БАР буду задавать выделенную область). Поэтому вот хочу разобраться просто в команде записи по заданному адресу. //update Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный
Сообщение отредактировал exigo - Nov 23 2017, 05:16
|
|
|
|
|
Nov 23 2017, 07:36
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(exigo @ Nov 23 2017, 06:12)  Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный Для Windows не подскажу, но по аналогии в Linux можно (в качестве самого базового способа) вызвать dma_alloc_coherent и выделить некоторый буфер, например 4096 байт. И получив два адреса, один отдается устройство в которое оно может писать в произвольный момент времени, а ядро ОС может читать что записало устройство по второму адресу. Отсюда и вопрос - как Вы выделяете память, приведите пример. И какие меры приняты, чтобы оба адреса оставались постоянными, чтоб их можно было чуть ли не зашить в прошивку. Если пользуетесь сторонней программой, то похоже это тот самый момент, когда надо уже начинать писать свой драйвер. Цитата(exigo @ Nov 23 2017, 06:12)  Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный Да, там есть такое дело, адрес должен быть с шагом 4 байта, если не ошибаюсь, и действительно 2 младших бита нулевые.
--------------------
|
|
|
|
|
Nov 24 2017, 10:41
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 30-01-15
Пользователь №: 84 837

|
Цитата(AVR @ Nov 23 2017, 14:36)  Для Windows не подскажу, но по аналогии в Linux можно (в качестве самого базового способа) вызвать dma_alloc_coherent и выделить некоторый буфер, например 4096 байт. И получив два адреса, один отдается устройство в которое оно может писать в произвольный момент времени, а ядро ОС может читать что записало устройство по второму адресу. Отсюда и вопрос - как Вы выделяете память, приведите пример. И какие меры приняты, чтобы оба адреса оставались постоянными, чтоб их можно было чуть ли не зашить в прошивку.
Если пользуетесь сторонней программой, то похоже это тот самый момент, когда надо уже начинать писать свой драйвер.
Да, там есть такое дело, адрес должен быть с шагом 4 байта, если не ошибаюсь, и действительно 2 младших бита нулевые. С выделением памяти есть своя программа, предполагал, пока не передаю выделенный адрес в плис, просто протестировать запись с произвольную ячейку, но видимо так нельзя? (заведомо брал побольше адрес, чтобы он неиспользовался и там нулевые значения были).
Сообщение отредактировал exigo - Nov 24 2017, 10:47
|
|
|
|
|
Nov 24 2017, 11:10
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(exigo @ Nov 24 2017, 13:41)  С выделением памяти есть своя программа, предполагал, пока не передаю выделенный адрес в плис, просто протестировать запись с произвольную ячейку, но видимо так нельзя? (заведомо брал побольше адрес, чтобы он неиспользовался и там нулевые значения были). Вот не знаю, мне кажется (кажется!) так нельзя. У меня есть собственные догадки, почему так, не буду их афишировать, дабы не прогневать специалистов  Лучше полагаться на API операционной системы, и всё будет работать. Это не микроконтроллер, совсем произвольно так с адресами нельзя поступать, всё (адреса шин) должно штатным образом отображаться одно в другое. Цитата(exigo @ Nov 24 2017, 13:41)  А по поводу адреса в ПЛИС, при 32 битной адресации address[31:2], [1,0] - reserv. Получается адрес максимум 30 разрядный? 3FFFFFFF максимальный адрес, или адрес считывается вместе с младшими нулями? и нормально можно адресовать FFFFFFFF. А как же 64-битная адресация у PCI-E? Тут http://xillybus.com/tutorials/pci-express-...utorial-guide-1 пишут, что такое редко когда надо. В принципе, ясно, что ширина адреса это не катастрофа, всегда можно обойти окошечками.
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|