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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> kintex7+pci-e
exigo
сообщение Jan 19 2017, 08:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 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
RobFPGA
сообщение Jan 19 2017, 09:10
Сообщение #2


Знающий
****

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



Приветствую!

Для начала нужно убедится что правильно назначены пины в constrain файле.

Многие материнки если в течении 100 ms после reset не обнаружили PCIe устройство могут отключать ref clk на этот слот для экономии.
Так что смотреть clk осцилографом надо сразу после reset.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 19 2017, 10:00
Сообщение #3


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

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



Цитата(exigo @ Jan 19 2017, 11:39) *
Но на компьютере тишина, в чипскоп завел тактовые и осцилографом смотрел на плате - нет входной частоты для pcie, и соответсвенно ничего не работает.
Подскажите пожалуйста, что делаю не так, что упустил?
Я могу ошибаться, но вроде как есть возможность работы PCI-E без клока от материнской платы, хотя рекомендуют его всё же брать, иначе в режимах с spread spectrum запас может быть предельно мал. Как-то так.
Соответственно, это не причина что не работает, правильно подсказывают - может пины неверно назначены, я бы смотрел как они настроены в примере к плате. Кроме того, так как проект почти пустой, есть вероятность что компилятор просто выкинул всю логику. Вроде есть и прием и передача в таких проектах, но тем не менее, мне попадалось и такое - если нет задействования "внутриплисных" интерфейсов то ядро вычистилось под ноль - тоже советую проверить.


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


Участник
*

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



Мне думалось, что пример должен сразу отрабатывать.
В настройках выбирается внутренний аппаратный блок, генерируется constrain. Как я понимаю, там должны быть уже указаны задействованые пины, и не требуется вносить изменения?

Вот ссылка на мой UCF
https://www.dropbox.com/s/5yv8p8lz4y0uybm/m...x1_top.ucf?dl=0

Сообщение отредактировал exigo - Jan 19 2017, 10:25
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jan 19 2017, 10:59
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 6-07-12
Пользователь №: 72 653



Дело не только в ref clk. Устройство должно быть готово через 100мс, чтобы успешно пройти enumeration, иначе до свидания, даже если ref clk с матери не используется.

ТС, убедитесь, что успеваете сконфигурироваться. Если не успеваете, то можно питать плату отдельно от компа, конфигурировать её, потом выполнить перезагрузку компа. Для первых тестов будет достаточно, а потом разберётесь, почему не успеваете. Скорее всего изменение схемы конфигурации ПЛИС + увеличение частоты решат проблему.

Сообщение отредактировал Inanity - Jan 19 2017, 11:04
Go to the top of the page
 
+Quote Post
Lixlex
сообщение Jan 19 2017, 11:37
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



Цитата(exigo @ Jan 19 2017, 13:24) *
Мне думалось, что пример должен сразу отрабатывать.
В настройках выбирается внутренний аппаратный блок, генерируется constrain. Как я понимаю, там должны быть уже указаны задействованые пины, и не требуется вносить изменения?

Нет, пины надо править под вашу плату.

Сообщение отредактировал Lixlex - Jan 19 2017, 11:38
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 19 2017, 11:49
Сообщение #7


Знающий
****

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



Приветствую!

Цитата(Inanity @ Jan 19 2017, 13:59) *
Дело не только в ref clk. Устройство должно быть готово через 100мс, чтобы успешно пройти enumeration, иначе до свидания, даже если ref clk с матери не используется.

ТС, убедитесь, что успеваете сконфигурироваться. Если не успеваете, то можно питать плату отдельно от компа, конфигурировать её, потом выполнить перезагрузку компа. Для первых тестов будет достаточно, а потом разберётесь, почему не успеваете. Скорее всего изменение схемы конфигурации ПЛИС + увеличение частоты решат проблему.


На начальном этапе это не столь важно - enumeration происходит при каждом reset материнки. Так что если и не успели после power on то после следующего reset FPGA уже сконфигурированна.

Удачи! Rob.


Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 19 2017, 12:18
Сообщение #8


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

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



Цитата(exigo @ Jan 19 2017, 13:24) *
Мне думалось, что пример должен сразу отрабатывать.
Ого... А Вы компьютер с этой платой перезагружаете перед попытками обнаружить устройство? Я бы под это дело отдельный комп выделил. Книга по теме прочитана? Мне вот такая нравится "PCI Express Technology. Comprehensive Guide to Generations 1.x, 2.x, 3.0", правда она дорогая, но... wink.gif Однако и ее, как ни странно, недостаточно для полного понимания, особенно со стороны хоста, драйвера и BIOS (если есть).


--------------------
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 20 2017, 02:50
Сообщение #9


Участник
*

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



Цитата(Lixlex @ Jan 19 2017, 18:37) *
Нет, пины надо править под вашу плату.

Кто-нибудь может скинуть название плис, и констрейн файл, чтобы я разобрался как оно было подключено. (лучше конечно когда использовалось ядро 7 серии)
А то в интернете сколько находил, примерно так же стандартно, нет конкретного упоминания той или иной ноги

У меня есть отладочная плата как выше писал, программа на флешке записана, в биосе убрал всякие энергосбережения, попробовал вначале запитать плату, чтобы программа подгрузилась и инициализировалась, после включаю компьютер. Но результата ноль пока, тоже грешу на пины, смущает что не требуется указывать конкретные ноги (как в ддр ядре например), но нет примера чтоб узнать как правильно, по даташитам просто компилируют, и якобы ядро конфигурируется на аппаратный блок pci-e конкретно выбранной плис, и соответственно ноги настроены.
Есть еще конечное устройство(с такой же плис) для которого поднимается pci-e, оно подключено по pci-e кабелю, и там тоже я вначале питание подаю, а потом ПК включаю, но результат пока тот-же.

Сообщение отредактировал exigo - Jan 20 2017, 03:07
Go to the top of the page
 
+Quote Post
toshas
сообщение Jan 20 2017, 04:37
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 14-02-06
Пользователь №: 14 339



Цитата(exigo @ Jan 20 2017, 05:50) *
Но результата ноль пока, тоже грешу на пины, смущает что не требуется указывать конкретные ноги (как в ддр ядре например)


В файлах ограничений может использоваться привязка к координатам конкретного блока, неявно она же и задает ножки, т.к. конкретный блок имеет конкретное фиксированное подключение.

Например вместо перечисления ног можно задать положение буфера так:
set_property LOC IBUFDS_GTE2_X0Y0 [get_cells refclk_ibuf]
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 20 2017, 06:49
Сообщение #11


Участник
*

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



Цитата(toshas @ Jan 20 2017, 11:37) *
В файлах ограничений может использоваться привязка к координатам конкретного блока, неявно она же и задает ножки, т.к. конкретный блок имеет конкретное фиксированное подключение.

Например вместо перечисления ног можно задать положение буфера так:
set_property LOC IBUFDS_GTE2_X0Y0 [get_cells refclk_ibuf]


значит ядро норм генерирует
Go to the top of the page
 
+Quote Post
Flood
сообщение Jan 20 2017, 09:27
Сообщение #12


Знающий
****

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



Цитата(exigo @ Jan 20 2017, 09:49) *
значит ядро норм генерирует

Ядро генерируется корректно, но наверняка не для вашей платы.
Возьмите схемы мезонина и базовой платы и выясните, к каким пинам ПЛИС подсоединены сброс (PERST), клок и лейны PCI-e. Соответственно отредактикуйте ucf / xdc и наступит счастье.

Вот эти строки в вашем ucf на чем основаны? И почему не задан LOC для sys_rst_n?

Код
NET "sys_rst_n" TIG;
NET "sys_rst_n" IOSTANDARD = LVCMOS18 | PULLUP | NODELAY;

INST "refclk_ibuf" LOC = IBUFDS_GTE2_X0Y3;

INST "pcie_7x_vhdl_i/gt_top_i/pipe_wrapper_i/pipe_lane[0].gt_wrapper_i/gtx_channel.gtxe2_channel_i" LOC = GTXE2_CHANNEL_X0Y7;

INST "pcie_7x_vhdl_i/pcie_top_i/pcie_7x_i/pcie_block_i" LOC = PCIE_X0Y0;
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 20 2017, 09:40
Сообщение #13


Участник
*

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



Цитата(Flood @ Jan 20 2017, 16:27) *
Ядро генерируется корректно, но наверняка не для вашей платы.
Возьмите схемы мезонина и базовой платы и выясните, к каким пинам ПЛИС подсоединены сброс (PERST), клок и лейны PCI-e. Соответственно отредактикуйте ucf / xdc и наступит счастье.

Вот эти строки в вашем ucf на чем основаны? И почему не задан LOC для sys_rst_n?

Код
NET "sys_rst_n" TIG;
NET "sys_rst_n" IOSTANDARD = LVCMOS18 | PULLUP | NODELAY;

INST "refclk_ibuf" LOC = IBUFDS_GTE2_X0Y3;

INST "pcie_7x_vhdl_i/gt_top_i/pipe_wrapper_i/pipe_lane[0].gt_wrapper_i/gtx_channel.gtxe2_channel_i" LOC = GTXE2_CHANNEL_X0Y7;

INST "pcie_7x_vhdl_i/pcie_top_i/pcie_7x_i/pcie_block_i" LOC = PCIE_X0Y0;


При конфигурации выбран X0Y0 (ну для х1 вариантов то и нет), и все это из примера, про ресет тоже задумывался, sys_rst_n подключить к PERST ?
Go to the top of the page
 
+Quote Post
Flood
сообщение Jan 20 2017, 09:50
Сообщение #14


Знающий
****

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



Цитата(exigo @ Jan 20 2017, 12:40) *
При конфигурации выбран X0Y0 (ну для х1 вариантов то и нет), и все это из примера, про ресет тоже задумывался, sys_rst_n подключить к PERST ?

Еще раз: возьмите схемы ваших плат и составьте ucf согласно этим схемам. Авторам примера генерации ядра неизвестно, на какую плату вы генерируете ядро. Если бы это была родная отладочная плата KC705 - тогда да, ее распиновка Xilinx-у известна.
Ну а про вашу откуда он должен узнать, если не от вас?
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 24 2017, 04:35
Сообщение #15


Участник
*

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



Что-то пересмотрел несколько примеров ucf для разных плат, и где как.
Подключил sys_rst к светодиоду и user_rst. При перезагрузке sys_rst мигает, но user_rst постоянно в 1( не горит), а для успешной инициализации как понимаю должен в 0 выставится.
Ниже прилагаю поправленный ucf, добавил пин с разъема sys_rst.
Добавил пины тактирования и закомментировал буфер, пока от всяких махинаций результат один (как написал выше).

Код
NET "sys_rst_n" TIG;
NET "sys_rst_n" LOC = M20 | IOSTANDARD = LVCMOS33 | PULLUP | NODELAY;
#INST "refclk_ibuf" LOC = IBUFDS_GTE2_X0Y3;
# PCIe Lane 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_X0Y7;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_block_i" LOC = PCIE_X0Y0;
#
# BlockRAM placement
#
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_rx/brams[3].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X5Y35;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_rx/brams[2].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y36;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_rx/brams[1].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y35;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_rx/brams[0].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y34;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_tx/brams[0].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y33;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_tx/brams[1].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y32;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_tx/brams[2].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y31;
INST "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_bram_top/pcie_brams_tx/brams[3].ram/use_tdp.ramb36/ramb_bl.ramb36_dp_bl.ram36_bl" LOC = RAMB36_X4Y30;
###############################################################################
# Timing Constraints
###############################################################################
NET "sys_clk" TNM_NET = "SYSCLK";
NET "ext_clk.pipe_clock_i/clk_125mhz" TNM_NET = "CLK_125";
NET "ext_clk.pipe_clock_i/clk_250mhz" TNM_NET = "CLK_250";
NET "ext_clk.pipe_clock_i/userclk1" TNM_NET = "CLK_USERCLK";
NET "ext_clk.pipe_clock_i/userclk2" TNM_NET = "CLK_USERCLK2";
TIMESPEC "TS_SYSCLK"  = PERIOD "SYSCLK" 100 MHz HIGH 50 %;
TIMESPEC "TS_CLK_125"  = PERIOD "CLK_125" TS_SYSCLK*1.25 HIGH 50 % PRIORITY 1;
#TIMESPEC "TS_CLK_250" = PERIOD "CLK_250" TS_SYSCLK*2.5 HIGH 50 % PRIORITY 2;
TIMESPEC "TS_CLK_USERCLK" = PERIOD "CLK_USERCLK" TS_SYSCLK/1.6 HIGH 50 %;
TIMESPEC "TS_CLK_USERCLK2" = PERIOD "CLK_USERCLK2" TS_SYSCLK/1.6 HIGH 50 %;

NET "sys_clk_n"                 LOC =  "D5" | IOSTANDARD = "LVDS"; #| DIFF_TERM = "FALSE";
NET "sys_clk_p"                 LOC =  "D6" | IOSTANDARD = "LVDS";# | DIFF_TERM = "FALSE";

INST "ext_clk.pipe_clock_i/mmcm_i"  LOC = MMCME2_ADV_X0Y2;
PIN "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_block_i.PLPHYLNKUPN" TIG;
PIN "pcie_7x_v1_11_i/pcie_top_i/pcie_7x_i/pcie_block_i.PLRECEIVEDHOTRST" TIG;
PIN "ext_clk.pipe_clock_i/mmcm_i.RST" TIG;
NET "pcie_7x_v1_11_i/gt_top_i/pipe_wrapper_i/user_resetdone*" TIG;
NET "ext_clk.pipe_clock_i/pclk_sel" TIG;
NET "pcie_7x_v1_11_i/gt_top_i/pipe_wrapper_i/pipe_lane[0].pipe_rate.pipe_rate_i/*" TNM_NET = FFS "MC_PIPE";
TIMESPEC "TS_PIPE_RATE" = FROM "MC_PIPE" TS_CLK_USERCLK*0.5;
#NET "pcie_7x_v1_11_i/gt_top_i/pipe_wrapper_i/pipe_reset.pipe_reset_i/cpllreset" TIG;

И еще подскажите, пожалуйста, программу для отслеживания pci-e устройства (win7 x64)

Сообщение отредактировал exigo - Jan 24 2017, 10:40
Go to the top of the page
 
+Quote Post

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

 


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


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