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

 
 
> kintex7+pci-e
exigo
сообщение Jan 19 2017, 08:39
Сообщение #1


Участник
*

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



Добрый день. Есть отладочная плата с kintex7 (xc7k160t) Mercury_PE1 c Mercury_KX1. использую и ISE и Vivado
Требуется организовать передачу данных из плис в компьютер по pcie.
Для начала хочу, чтобы устройство хоть как-то обозначилось на компьютере, для этого конфигурирую ядро без изменений, сразу по умолчанию, и компилирую заголовочный xilinx_pcie_2_1_ep_7x.vhd
Но на компьютере тишина, в чипскоп завел тактовые и осцилографом смотрел на плате - нет входной частоты для pcie, и соответсвенно ничего не работает.
Подскажите пожалуйста, что делаю не так, что упустил?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
exigo
сообщение Nov 22 2017, 11:05
Сообщение #2


Участник
*

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


фанат 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) *
решил попробовать написать в ту же область

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


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


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 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
Сообщение #5


фанат 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 младших бита нулевые.


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


Участник
*

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


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

Группа: Свой
Сообщений: 1 353
Регистрация: 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

Сообщений в этой теме
- exigo   kintex7+pci-e   Jan 19 2017, 08:39
- - RobFPGA   Приветствую! Для начала нужно убедится что пр...   Jan 19 2017, 09:10
- - AVR   Цитата(exigo @ Jan 19 2017, 11:39) Но на ...   Jan 19 2017, 10:00
- - exigo   Мне думалось, что пример должен сразу отрабатывать...   Jan 19 2017, 10:24
|- - Lixlex   Цитата(exigo @ Jan 19 2017, 13:24) Мне ду...   Jan 19 2017, 11:37
||- - exigo   Цитата(Lixlex @ Jan 19 2017, 18:37) Нет, ...   Jan 20 2017, 02:50
||- - toshas   Цитата(exigo @ Jan 20 2017, 05:50) Но рез...   Jan 20 2017, 04:37
||- - exigo   Цитата(toshas @ Jan 20 2017, 11:37) В фай...   Jan 20 2017, 06:49
||- - Flood   Цитата(exigo @ Jan 20 2017, 09:49) значит...   Jan 20 2017, 09:27
||- - exigo   Цитата(Flood @ Jan 20 2017, 16:27) Ядро г...   Jan 20 2017, 09:40
||- - Flood   Цитата(exigo @ Jan 20 2017, 12:40) При ко...   Jan 20 2017, 09:50
|- - AVR   Цитата(exigo @ Jan 19 2017, 13:24) Мне ду...   Jan 19 2017, 12:18
- - Inanity   Дело не только в ref clk. Устройство должно быть г...   Jan 19 2017, 10:59
|- - RobFPGA   Приветствую! Цитата(Inanity @ Jan 19 201...   Jan 19 2017, 11:49
- - exigo   Что-то пересмотрел несколько примеров ucf для разн...   Jan 24 2017, 04:35
- - Flood   Выложите схемы обеих плат, без них нет никакого см...   Jan 24 2017, 20:12
|- - exigo   Цитата(Flood @ Jan 25 2017, 03:12) Выложи...   Jan 25 2017, 03:32
- - exigo   Что-то так и не пойму, если подключаем к sys_reset...   Jan 27 2017, 09:15
|- - Flood   Цитата(exigo @ Jan 27 2017, 12:15) Что-то...   Jan 29 2017, 19:04
- - exigo   Судя по этому, правильно X0Y7 Заметил, что должна ...   Jan 30 2017, 05:03
- - Flood   Если есть ощущение, что пинаут правильный (что не ...   Jan 30 2017, 16:06
- - exigo   На плате таковую осциллографом увидел, копаю дальш...   Feb 3 2017, 02:53
- - exigo   Устройство увиделось в системе. И тактовую и транс...   Feb 7 2017, 05:15
- - AVR   Еще одна деталь, насчет "нормально адресовать...   Nov 25 2017, 12:03
- - exigo   Проверенными методами выделяю память, и передаю на...   Jan 9 2018, 09:32
- - exigo   Скажите, пожалуйста, кто знает, похоже на правду и...   Jan 15 2018, 04:31
|- - AVR   Цитата(exigo @ Jan 15 2018, 07:31) Скажит...   Jan 15 2018, 07:12
- - exigo   Да и светодиоды использую для проверки и chipscope...   Jan 15 2018, 08:26
|- - AVR   Цитата(exigo @ Jan 15 2018, 11:26) Да и с...   Jan 15 2018, 12:47
- - exigo   Снова приветствую, запись завелась, теперь новый з...   Mar 6 2018, 10:12
|- - AVR   Цитата(exigo @ Mar 6 2018, 13:12) Снова п...   Mar 6 2018, 12:00
- - exigo   Дада, вчера не успел на работе) Поставил вивадо и ...   Mar 7 2018, 03:54
|- - AVR   Цитата(exigo @ Mar 7 2018, 06:54) добавил...   Mar 7 2018, 09:39
- - exigo   Вернул на минимальную паузу в один такт между TLP,...   Mar 14 2018, 09:00
|- - XVR   Цитата(exigo @ Mar 14 2018, 12:00) И еще,...   Mar 14 2018, 10:15
|- - toshas   Цитата(exigo @ Mar 14 2018, 12:00) Вернул...   Mar 14 2018, 15:47
- - exigo   Всем привет, благополучно юзал pcie. Но тут мне об...   Aug 24 2018, 09:04
|- - AVR   Цитата(exigo @ Aug 24 2018, 12:04) Всем п...   Aug 24 2018, 11:11
- - exigo   В последних версиях еще отслеживаю кредиты (tx_buf...   Aug 27 2018, 03:38
- - exigo   В чипскоп завел проект, tx_buf заканчиваются и вст...   Sep 7 2018, 08:51
- - RobFPGA   Приветствую! Цитата(exigo @ Sep 7 2018, 1...   Sep 7 2018, 09:09


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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 01:39
Рейтинг@Mail.ru


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