exigo 0 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Добрый день. Есть отладочная плата с kintex7 (xc7k160t) Mercury_PE1 c Mercury_KX1. использую и ISE и Vivado Требуется организовать передачу данных из плис в компьютер по pcie. Для начала хочу, чтобы устройство хоть как-то обозначилось на компьютере, для этого конфигурирую ядро без изменений, сразу по умолчанию, и компилирую заголовочный xilinx_pcie_2_1_ep_7x.vhd Но на компьютере тишина, в чипскоп завел тактовые и осцилографом смотрел на плате - нет входной частоты для pcie, и соответсвенно ничего не работает. Подскажите пожалуйста, что делаю не так, что упустил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Приветствую! Для начала нужно убедится что правильно назначены пины в constrain файле. Многие материнки если в течении 100 ms после reset не обнаружили PCIe устройство могут отключать ref clk на этот слот для экономии. Так что смотреть clk осцилографом надо сразу после reset. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Но на компьютере тишина, в чипскоп завел тактовые и осцилографом смотрел на плате - нет входной частоты для pcie, и соответсвенно ничего не работает. Подскажите пожалуйста, что делаю не так, что упустил? Я могу ошибаться, но вроде как есть возможность работы PCI-E без клока от материнской платы, хотя рекомендуют его всё же брать, иначе в режимах с spread spectrum запас может быть предельно мал. Как-то так. Соответственно, это не причина что не работает, правильно подсказывают - может пины неверно назначены, я бы смотрел как они настроены в примере к плате. Кроме того, так как проект почти пустой, есть вероятность что компилятор просто выкинул всю логику. Вроде есть и прием и передача в таких проектах, но тем не менее, мне попадалось и такое - если нет задействования "внутриплисных" интерфейсов то ядро вычистилось под ноль - тоже советую проверить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 19 января, 2017 Опубликовано 19 января, 2017 (изменено) · Жалоба Мне думалось, что пример должен сразу отрабатывать. В настройках выбирается внутренний аппаратный блок, генерируется constrain. Как я понимаю, там должны быть уже указаны задействованые пины, и не требуется вносить изменения? Вот ссылка на мой UCF https://www.dropbox.com/s/5yv8p8lz4y0uybm/m...x1_top.ucf?dl=0 Изменено 19 января, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 19 января, 2017 Опубликовано 19 января, 2017 (изменено) · Жалоба Дело не только в ref clk. Устройство должно быть готово через 100мс, чтобы успешно пройти enumeration, иначе до свидания, даже если ref clk с матери не используется. ТС, убедитесь, что успеваете сконфигурироваться. Если не успеваете, то можно питать плату отдельно от компа, конфигурировать её, потом выполнить перезагрузку компа. Для первых тестов будет достаточно, а потом разберётесь, почему не успеваете. Скорее всего изменение схемы конфигурации ПЛИС + увеличение частоты решат проблему. Изменено 19 января, 2017 пользователем Inanity Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lixlex 0 19 января, 2017 Опубликовано 19 января, 2017 (изменено) · Жалоба Мне думалось, что пример должен сразу отрабатывать. В настройках выбирается внутренний аппаратный блок, генерируется constrain. Как я понимаю, там должны быть уже указаны задействованые пины, и не требуется вносить изменения? Нет, пины надо править под вашу плату. Изменено 19 января, 2017 пользователем Lixlex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Приветствую! Дело не только в ref clk. Устройство должно быть готово через 100мс, чтобы успешно пройти enumeration, иначе до свидания, даже если ref clk с матери не используется. ТС, убедитесь, что успеваете сконфигурироваться. Если не успеваете, то можно питать плату отдельно от компа, конфигурировать её, потом выполнить перезагрузку компа. Для первых тестов будет достаточно, а потом разберётесь, почему не успеваете. Скорее всего изменение схемы конфигурации ПЛИС + увеличение частоты решат проблему. На начальном этапе это не столь важно - enumeration происходит при каждом reset материнки. Так что если и не успели после power on то после следующего reset FPGA уже сконфигурированна. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Мне думалось, что пример должен сразу отрабатывать.Ого... А Вы компьютер с этой платой перезагружаете перед попытками обнаружить устройство? Я бы под это дело отдельный комп выделил. Книга по теме прочитана? Мне вот такая нравится "PCI Express Technology. Comprehensive Guide to Generations 1.x, 2.x, 3.0", правда она дорогая, но... ;) Однако и ее, как ни странно, недостаточно для полного понимания, особенно со стороны хоста, драйвера и BIOS (если есть). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 20 января, 2017 Опубликовано 20 января, 2017 (изменено) · Жалоба Нет, пины надо править под вашу плату. Кто-нибудь может скинуть название плис, и констрейн файл, чтобы я разобрался как оно было подключено. (лучше конечно когда использовалось ядро 7 серии) А то в интернете сколько находил, примерно так же стандартно, нет конкретного упоминания той или иной ноги У меня есть отладочная плата как выше писал, программа на флешке записана, в биосе убрал всякие энергосбережения, попробовал вначале запитать плату, чтобы программа подгрузилась и инициализировалась, после включаю компьютер. Но результата ноль пока, тоже грешу на пины, смущает что не требуется указывать конкретные ноги (как в ддр ядре например), но нет примера чтоб узнать как правильно, по даташитам просто компилируют, и якобы ядро конфигурируется на аппаратный блок pci-e конкретно выбранной плис, и соответственно ноги настроены. Есть еще конечное устройство(с такой же плис) для которого поднимается pci-e, оно подключено по pci-e кабелю, и там тоже я вначале питание подаю, а потом ПК включаю, но результат пока тот-же. Изменено 20 января, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 20 января, 2017 Опубликовано 20 января, 2017 · Жалоба Но результата ноль пока, тоже грешу на пины, смущает что не требуется указывать конкретные ноги (как в ддр ядре например) В файлах ограничений может использоваться привязка к координатам конкретного блока, неявно она же и задает ножки, т.к. конкретный блок имеет конкретное фиксированное подключение. Например вместо перечисления ног можно задать положение буфера так: set_property LOC IBUFDS_GTE2_X0Y0 [get_cells refclk_ibuf] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 20 января, 2017 Опубликовано 20 января, 2017 · Жалоба В файлах ограничений может использоваться привязка к координатам конкретного блока, неявно она же и задает ножки, т.к. конкретный блок имеет конкретное фиксированное подключение. Например вместо перечисления ног можно задать положение буфера так: set_property LOC IBUFDS_GTE2_X0Y0 [get_cells refclk_ibuf] значит ядро норм генерирует Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 20 января, 2017 Опубликовано 20 января, 2017 · Жалоба значит ядро норм генерирует Ядро генерируется корректно, но наверняка не для вашей платы. Возьмите схемы мезонина и базовой платы и выясните, к каким пинам ПЛИС подсоединены сброс (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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 20 января, 2017 Опубликовано 20 января, 2017 · Жалоба Ядро генерируется корректно, но наверняка не для вашей платы. Возьмите схемы мезонина и базовой платы и выясните, к каким пинам ПЛИС подсоединены сброс (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 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 20 января, 2017 Опубликовано 20 января, 2017 · Жалоба При конфигурации выбран X0Y0 (ну для х1 вариантов то и нет), и все это из примера, про ресет тоже задумывался, sys_rst_n подключить к PERST ? Еще раз: возьмите схемы ваших плат и составьте ucf согласно этим схемам. Авторам примера генерации ядра неизвестно, на какую плату вы генерируете ядро. Если бы это была родная отладочная плата KC705 - тогда да, ее распиновка Xilinx-у известна. Ну а про вашу откуда он должен узнать, если не от вас? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
exigo 0 24 января, 2017 Опубликовано 24 января, 2017 (изменено) · Жалоба Что-то пересмотрел несколько примеров 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) Изменено 24 января, 2017 пользователем exigo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться