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

 
 
> PCIe and FPGA
polyvyannyy
сообщение Jun 5 2018, 11:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 16-10-17
Пользователь №: 99 768



Всем привет, уважаемые форумчане!
Возникла необходимость поднять на девборде PCIe 3x8. Референсный дизайн загружен и все работает.
Но теперь нужно сделать прием и отправку своих данных с/на хост. И вот тут то возникла куча вопросов и непониманий. Информации по теории PCIe полно, но никак не удается найти конкретики относительно ПЛИС...какой именно у меня должен быть порядок действий со стороны ПЛИС, чтобы организовать чтение/запись данных в ОЗУ хоста? таблица дискрипторов...кто её формирует, где она хранится?В голове каша и нет четкого понимания.
Прошу помощи у опытных в данной теме людей.
За любые ссылки, проекты, которые можно взять за основу, буду благодарен.

Сообщение отредактировал polyvyannyy - Jun 6 2018, 07:32
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Jun 9 2018, 10:32
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



А Flow Control как-то обрабатываете? Или трафик такой, что гарантировано проблем не возникает?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
AVR
сообщение Jun 9 2018, 11:12
Сообщение #3


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

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



Цитата(dxp @ Jun 9 2018, 13:32) *
А Flow Control как-то обрабатываете? Или трафик такой, что гарантировано проблем не возникает?

Нужно следить за статусами "кредитов", т.е. емкости приемных буферов например ближайшего бриджа или непосредственно хоста - всё это PCI-E ядро само обновляет запросами и сообщает пользователю в ПЛИС. А со стороны драйвера просто такой трафик в моей задаче, что оно само собой разруливается, но в других ситуациях следить надо конечно.

Цитата
Спасибо большое за столь развернутые ответы. Теперь буду приводить мысли в порядок и пробовать)Уверен, будут еще вопросы

С радостью отвечу на все последующие вопросы, на какие смогу.


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 9 2018, 12:53
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(AVR @ Jun 9 2018, 18:12) *
Нужно следить за статусами "кредитов", т.е. емкости приемных буферов например ближайшего бриджа или непосредственно хоста - всё это PCI-E ядро само обновляет запросами и сообщает пользователю в ПЛИС. А со стороны драйвера просто такой трафик в моей задаче, что оно само собой разруливается, но в других ситуациях следить надо конечно.

Да, вот меня больше волнует ситуация, когда не запись из ПЛИС на хост, а чтение потока данных из системной памяти в ПЛИС - нужно очень аккуратно выдавать запросы на запись, чтобы комлешны не забили входные буфера. Такие ситуации хотелось бы помоделировать. Только не очень понятно, каким образом эмулируется на функциональном моделировании физический уровень - ясно, что там нет смысла трансиверы изображать, но хотя бы их функциональность надо. В доках Xilinx упоминается некий PIPE - Physical Interface for PCI Express, который, вроде, и берёт на себя эту задачу. Но что это и как использовать, пока не знаю. Кто в курсе темы, поделитесь опытом, советами?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jun 18 2018, 11:30
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(dxp @ Jun 9 2018, 15:53) *
...
Только не очень понятно, каким образом эмулируется на функциональном моделировании физический уровень - ясно, что там нет смысла трансиверы изображать, но хотя бы их функциональность надо. В доках Xilinx упоминается некий PIPE - Physical Interface for PCI Express, который, вроде, и берёт на себя эту задачу. Но что это и как использовать, пока не знаю. Кто в курсе темы, поделитесь опытом, советами?
В симуляции с PIPE в основном сложности с подключением веревок интерфейсов. Ну и некоторые нюансы с настройкой параметров для PCIe корки для работы с симуляцией PIPE (чтоб не ждать долго инициализации линка). К тому же у Xilinx немного разные наборы сигналов для разных версий PCIe. Ну и некоторые проблемы возникают при генерации корки. Если точнее то раньше можно было сгенерировать корку как обычно c MGT а потом уже при симе параметром выбирать интерфейс PIPE/MGT режим. А сейчас так не получается (на оптимизировали блин) либо генериш и симиш ее с PIPE, либо с MGT.
Если использовать для симуляции root-complex BFM такую же корку от Xilinx то особых проблем для коннекта с PIPE нет.

Например у меня такой вот шаблон для теста PCIe установленных на BD диаграммах.
CODE
// Full path to the tested PCIe end_point
`define EP_INST i_top.i_pcie_sys.i_xdma.inst.pcie3_ip_i.inst
`define EP_PIPE i_top.i_pcie_sys.i_xdma.inst.pcie3_ip_i

`ifdef _ENABLE_GT_
parameter PIPE_SIM = "FALSE";
defparam `EP_INST.EXT_PIPE_SIM = "FALSE";
defparam `EP_INST.PL_EQ_BYPASS_PHASE23 = "FALSE";
`else
parameter PIPE_SIM = "TRUE";
defparam `EP_INST.EXT_PIPE_SIM = "TRUE";
defparam `EP_INST.PL_EQ_BYPASS_PHASE23 = "TRUE";
`endif

// PCIe root-complex BFM (and path to the Xilinx root_complex PCIe instance)
`define RP_PIPE RP.i_rp_tb.i_axi_pcie3
root_complex_bfm #(.PIPE_SIM(PIPE_SIM), ...) RP(.pcie_clk_p(rp_clk_p), ..., mgt_rx_p(rp_rx_p[0]), ..., mgt_tx_p(rp_rx_p[0]), ...);
...
if (PIPE_SIM=="TRUE") begin
initial begin
force `EP_PIPE.common_commands_in =`RP_PIPE.common_commands_out;
force `EP_PIPE.pipe_rx_0_sigs =`RP_PIPE.pipe_tx_0_sigs ;
...
force `RP_PIPE.common_commands_in =`EP_PIPE.common_commands_out;
force `RP_PIPE.pipe_rx_0_sigs =`EP_PIPE.pipe_tx_0_sigs ;
...
end
end
// tested BD module
pcie_sys i_pcie_sys (.pcie_clk_p(rp_clk_p), ..., mgt_rx_p(rp_tx_p[0]), ..., mgt_tx_p(rp_rx_p[0]), ...);
...
initial begin
RP.rp_bfm.reset();
wait (RP.rp_bfm.init_complete);
...
end

Ну а если PCIe BFM сторонний то надо будет мудрить с адаптером PIPE.

Удачи! Rob.

Go to the top of the page
 
+Quote Post
dxp
сообщение Jul 10 2018, 10:11
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Спасибо за ответ, прошу прощения за паузу, не был готов задавать вопросы.

Цитата(RobFPGA @ Jun 18 2018, 18:30) *
В симуляции с PIPE в основном сложности с подключением веревок интерфейсов. Ну и некоторые нюансы с настройкой параметров для PCIe корки для работы с симуляцией PIPE (чтоб не ждать долго инициализации линка). К тому же у Xilinx немного разные наборы сигналов для разных версий PCIe. Ну и некоторые проблемы возникают при генерации корки. Если точнее то раньше можно было сгенерировать корку как обычно c MGT а потом уже при симе параметром выбирать интерфейс PIPE/MGT режим. А сейчас так не получается (на оптимизировали блин) либо генериш и симиш ее с PIPE, либо с MGT.
Если использовать для симуляции root-complex BFM такую же корку от Xilinx то особых проблем для коннекта с PIPE нет.


Вот тут начинаются непонятности. Изучение темы PIPE привело к следующему: PIPE - есть промежуточный внутренний интерфейс (придуманный Интелом) между MAC и физическим уровнем, некий аналог MII/GMII/SGMII и прочих для изернета. И хотя он называется PIPE - Physical Interface for PCI Express, он же используется и для USB, DisplayPort и других высокоскоростных сериальных интерфейсов (понятно, что в каждом случае со своими особенностями).

Т.е. это не какой-то виртуальный отладочный интерфейс, но вполне реальный, боевой. Он может быть как внешним, когда, например, к ПЛИС цепляется внешняя микросхема PCIe PHY (видел дизайн на Spartan3 + NXP PCIe PHY), так и внутренним - удобно передавать между вендорами и на уровне IP ядер в ASIC'остроении.

Понятно, что если решение монолитное, т.е. одна микросхема, в которой всё, то этот PIPE, если он там есть, является внутренним интерфейсом и наружу не высовывается за ненадобностью. Но в ряде случаев его можно использовать для отладки. Например, логичным выглядит при моделировании в симуляторе исключить из оного MGT блоки, которые, во-первых, сложны и эта сложность никак не помогает при функциональном моделировании, а только мешает, во-вторых, работают на высоких частотах, что будет сильно грузить симулятор совершенно без профита. Т.е. соединить тестируемые блоки напрямую через их PIPE интерфейсы, минуя MGT.

Вроде так, поправьте, если неверно понял.

Так вот, учитывая вышесказанное, просится задействовать PIPE для моделирования. В настройках PCIe IP ядра есть следующая опция:

Прикрепленное изображение


о чём в доке (PG054) коротко и просто сказано:

• None: No PIPE mode simulation is available. This is the default value.

• Enable Pipe Simulation: When selected, this option generates the core that can be simulated with PIPE interfaces connected. This option is enabled for both Endpoint and Root Port configurations only when the Shared Logic (clocking) in example design option is selected (see Shared Logic, page 234).

• Enable External PIPE Interface: When selected, this option enables an external third-party bus functional model (BFM) to connect to the PIPE interface of the Integrated Block for PCIe. This feature has been tested only with BFM from Avery Design Systems (XAPP1184 [Ref 21]). For more information, see PIPE Mode Simulations, page 264.

Самое непонятное со вторым пунктом. Вроде сказано, что в этом случае рожается "core that can be simulated with PIPE interfaces connected". Но при этом никаких изменений в портах ядра по сравнению с вариантом None не видно. Где там PIPE интерфейс, которые можно законнектить с ответной частью? Что понимается под PIPE simulation?

Такой интерфейс появляется в третьем случае, про который прямо сказано, что это для коннекта с "external third-party bus functional model". Изучая ваш шаблон, пришёл к выводу, что вы-то как раз этот вариант и используете. Или нет? Судя по сигналам, таки да. sm.gif Но тогда не понятно, откуда взялась BFM от Xilinx для этого варианта, если они сами отсылают к сторонним. Кстати, апноту, а которой они отсылают (XAPP1184), изучил, там всё более-менее понятно, только вот самой модели тоже нет и ссылка к ней [очевидно, давно] протухла. Да и не больно-то и хотелось. sm.gif

Я пробовал все три варианта. Во всех случаях соединение идёт через GT, время прогона одинаковое. Т.ч. по факту оно ни на что не влияет. Что-то сделал не так?

Правильно ли я понял про

Цитата(RobFPGA @ Jun 18 2018, 18:30) *
В симуляции с PIPE в основном сложности с подключением веревок интерфейсов.


что тут речь идёт именно о третьем варианте (Enable External PIPE Interface), где нужно потроха pipe_tx/rx_n_sigs и common_commands_in/out раскидать на правильные сигналы и подключить их к ответной стороне?

Цитата(RobFPGA @ Jun 18 2018, 18:30) *
Ну и некоторые нюансы с настройкой параметров для PCIe корки для работы с симуляцией PIPE (чтоб не ждать долго инициализации линка)

А можно поподробнее: что тут конкретно делается?

Ну, и про симулятор. Каким вы пользуетесь? Вообще и в частности для моделирования PCIe. Компиляция библиотеки для PCIe хочет зашифрованный файл из secureip, и это вызывает сложности с использованием сторонних симуляторов совместно с современной версией Vivado (текущая хочет Model/Questasim 10.6с, которого не найти).

И последний вопрос: есть ли какие-либо проблемы с синтезатором? Ну, например, на одних версиях работает, на других нет? Периодически вижу, как народ жалуется, что вот выходит новая версия вивады/квартуса, и проект перестаёт собираться и/или работать. Вы на какой версии успешно это синтезировали?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- polyvyannyy   PCIe and FPGA   Jun 5 2018, 11:20
- - dsmv   Можно посмотреть на мой старый проект http://ds-de...   Jun 5 2018, 19:09
|- - polyvyannyy   Цитата(dsmv @ Jun 5 2018, 22:09) Можно по...   Jun 6 2018, 07:33
- - AVR   Готов проконсультировать по всем вопросам касатель...   Jun 5 2018, 19:40
- - AVR   Продублирую из лички сюда, чтобы осталось. Всё нап...   Jun 7 2018, 09:08
- - AVR   Цитата"1) настраиваем BAR (можем читать-писат...   Jun 8 2018, 10:20
|- - polyvyannyy   Цитата(AVR @ Jun 8 2018, 13:20) 1) Эти ад...   Jun 9 2018, 10:33
- - dxp   AVR, а вы проводили функциональное моделирование в...   Jun 9 2018, 03:12
|- - AVR   Цитата(dxp @ Jun 9 2018, 06:12) AVR, а вы...   Jun 9 2018, 08:56
|- - AVR   Цитата(dxp @ Jun 9 2018, 15:53) Да, вот м...   Jun 9 2018, 13:10
|- - RobFPGA   Приветствую! Цитата(dxp @ Jul 10 2018, 13...   Jul 10 2018, 13:54
|- - dxp   Цитата(RobFPGA @ Jul 10 2018, 20:54) Уточ...   Jul 11 2018, 12:04
|- - RobFPGA   Приветствую! Цитата(dxp @ Jul 11 2018, 1...   Jul 11 2018, 13:31
|- - dxp   Цитата(RobFPGA @ Jul 11 2018, 20:31) Сам....   Jul 12 2018, 04:35
|- - RobFPGA   Приветствую! Цитата(dxp @ Jul 12 2018, 07...   Jul 12 2018, 06:58
|- - dxp   Цитата(RobFPGA @ Jul 12 2018, 13:58) Лучш...   Jul 12 2018, 07:17
|- - RobFPGA   Цитата(dxp @ Jul 12 2018, 10:17) Понятно....   Jul 12 2018, 07:40
|- - dxp   Цитата(RobFPGA @ Jul 12 2018, 14:40) Да -...   Jul 12 2018, 07:46
- - dxp   Проблема может возникнуть из-за того, что если нак...   Jun 9 2018, 14:56
|- - AVR   Цитата(dxp @ Jun 9 2018, 17:56) Но тогда ...   Jun 9 2018, 16:10
- - AVR   ЦитатаПодскажите пожалуйчта, как из пользовательск...   Jun 17 2018, 11:03
- - polyvyannyy   Цитата(AVR @ Jun 17 2018, 14:03) Что тако...   Jun 18 2018, 09:53
- - doom13   Цитата(polyvyannyy @ Jun 18 2018, 12:53) ...   Jun 18 2018, 10:29
- - AVR   Цитата(polyvyannyy @ Jun 18 2018, 12:53) ...   Jun 18 2018, 10:43


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 07:18
Рейтинг@Mail.ru


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