реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> kintex7+pci-e
Flood
сообщение Jan 24 2017, 20:12
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 656
Регистрация: 8-06-06
Пользователь №: 17 871



Выложите схемы обеих плат, без них нет никакого смысла гадать по ucf.
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 25 2017, 03:32
Сообщение #17


Участник
*

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



Цитата(Flood @ Jan 25 2017, 03:12) *
Выложите схемы обеих плат, без них нет никакого смысла гадать по ucf.

Вот схема конечного устройства, а на отладочной плате enclustra pe-1 + kx-1, не отследил линию сброса, только трансиверы
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 27 2017, 09:15
Сообщение #18


Участник
*

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



Что-то так и не пойму, если подключаем к sys_reset PERST, Нормальное состояние сигнала 1, а сброс по 0?
Go to the top of the page
 
+Quote Post
Flood
сообщение Jan 29 2017, 19:04
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 656
Регистрация: 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 для вашей платы.
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 30 2017, 05:03
Сообщение #20


Участник
*

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



Судя по этому, правильно X0Y7
Заметил, что должна быть выставлена PRSNT в '1', может еще какие сигналы забыл, почему-то об этом нигде не увидел.
upd: хотя если выставляю '1', то ресет на 0 зависает

Сообщение отредактировал exigo - Jan 30 2017, 09:25
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Flood
сообщение Jan 30 2017, 16:06
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 656
Регистрация: 8-06-06
Пользователь №: 17 871



Если есть ощущение, что пинаут правильный (что не факт), возможно, что конфигурирование ПЛИС занимает слишком много времени и плата успевает отключить клок.
Об этой проблеме достаточно подробно написано в документации на ядро. Но скорее проблема в пинауте.
Go to the top of the page
 
+Quote Post
exigo
сообщение Feb 3 2017, 02:53
Сообщение #22


Участник
*

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



На плате таковую осциллографом увидел, копаю дальше

Сообщение отредактировал exigo - Feb 3 2017, 08:50
Go to the top of the page
 
+Quote Post
exigo
сообщение Feb 7 2017, 05:15
Сообщение #23


Участник
*

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



Устройство увиделось в системе.
И тактовую и трансиверы потребовалось напрямую задавать.
Go to the top of the page
 
+Quote Post
exigo
сообщение Nov 22 2017, 11:05
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 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
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 22 2017, 11:15
Сообщение #25


фанат Linux'а
*****

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



Цитата(exigo @ Nov 22 2017, 14:05) *
Хотелось бы пример команды с чистой записью из железки в ПК по заданному адресу, возможно однократная.

Сам ПК успешно считал из BAR через эту программу (rw everything), т.е. проходят запросы CplD?
Итак, попытка записать в ПК из железки - откуда берется адрес? И как он попадает в железку, хардкод что ли?

Цитата(exigo @ Nov 22 2017, 14:05) *
решил попробовать написать в ту же область

т.е. данные будут прилетать без запроса? Кто их там ждет? А кто сказал что адрес для устройства и адрес для ядра ОС один и тот же? Не знаю, возможно ли это, я так никогда не делал, может потому компьютер удивляется.


--------------------
Go to the top of the page
 
+Quote Post
exigo
сообщение Nov 23 2017, 03:12
Сообщение #26


Участник
*

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



Цитата(AVR @ Nov 22 2017, 18:15) *
Сам ПК успешно считал из BAR через эту программу (rw everything), т.е. проходят запросы CplD?
Итак, попытка записать в ПК из железки - откуда берется адрес? И как он попадает в железку, хардкод что ли?


т.е. данные будут прилетать без запроса? Кто их там ждет? А кто сказал что адрес для устройства и адрес для ядра ОС один и тот же? Не знаю, возможно ли это, я так никогда не делал, может потому компьютер удивляется.

Да, исходный пример с ядром по записи-чтению в БАР, работает. Запросы проходят, вот я подумал изменить этот кусок, чтобы он писал не в БАР, а мной заданный адрес (для начала прям в коде железно адрес, пробовал разные, а потом через БАР буду задавать выделенную область). Поэтому вот хочу разобраться просто в команде записи по заданному адресу.

//update
Я похоже адрес неправильно ввожу, т.к. там в конце два бита зарезервированы, а адрес 30 разрядный

Сообщение отредактировал exigo - Nov 23 2017, 05:16
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 23 2017, 07:36
Сообщение #27


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 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 младших бита нулевые.


--------------------
Go to the top of the page
 
+Quote Post
exigo
сообщение Nov 24 2017, 10:41
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 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
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 24 2017, 11:10
Сообщение #29


фанат Linux'а
*****

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



Цитата(exigo @ Nov 24 2017, 13:41) *
С выделением памяти есть своя программа, предполагал, пока не передаю выделенный адрес в плис, просто протестировать запись с произвольную ячейку, но видимо так нельзя? (заведомо брал побольше адрес, чтобы он неиспользовался и там нулевые значения были).

Вот не знаю, мне кажется (кажется!) так нельзя. У меня есть собственные догадки, почему так, не буду их афишировать, дабы не прогневать специалистов sm.gif
Лучше полагаться на 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 пишут, что такое редко когда надо.
В принципе, ясно, что ширина адреса это не катастрофа, всегда можно обойти окошечками.


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 25 2017, 12:03
Сообщение #30


фанат Linux'а
*****

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



Еще одна деталь, насчет "нормально адресовать" FFFFFFFF.
http://www.compbegin.ru/articles/view/_76
Цитата
Как мы уже знаем, чисто теоретически 32-х разрядной системе без каких-либо дополнительных ухищрений доступны до 4 гигабайт оперативной памяти (232), но Windows не может использовать весь этот объем, так как часть его отводится под устройства компьютера.
Так что, я полагаю, что ширина ворот для адресации устройств составляет лишь 1 Гбайт. Не могу уверенно утверждать, там далеко я еще не забирался. Возможно для AMD64/x86_64 эта ситуация несколько иначе.


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th December 2017 - 21:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01331 секунд с 7
ELECTRONIX ©2004-2016