|
|
  |
Ядро PCI Express Block Plus в Virtex 5 |
|
|
|
Dec 19 2011, 13:00
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(Jack_of_Shadows @ Dec 19 2011, 16:11)  Так, сорри, но я ввел вас в заблуждение. Мне таки позволили расковырять рабочий PC, и я вставил плату с плисом туда (производитель для этого специальную переходную плату дает). Загрузилось сразу же - дефолтная прошивка с установленными в системе драйверами даже объявила о себе в диспетчере устройств, прошивка сгенерированная core generator вроде как тоже (по крайней мере она теперь висит в состоянии L0, как обнаружить ее в системе пока не допер. Все найденные для сканирования pci-шины проги (pcitree, pcidirect) под win7 не запустились).
Получается дело в рут комплексе - MSM945. Но это уже не совсем к этому топику относится Попробуйте bios покопать, power save и прочее. Корегенераторная прошивка ставится как memory controller. Попробуйте мою прошивку, надо только jungo поставить сначала.
|
|
|
|
|
Dec 22 2011, 14:37
|
Местный
  
Группа: Свой
Сообщений: 301
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 647

|
[quote name='Jack_of_Shadows' date='Dec 20 2011, 14:20' post='1007945'] Появились еще вопросы к знатокам PCI Express Block Plus: Если я создаю прошивку скажем PCIe x2, однако на плате физически только одна из этих линий соединена с процессором, возможно ли чтобы прошивка с процессором правильно договорились о ширине шины и сами переключились на х1 ? Подсознательно понимаю что такое должно быть возможно, однако на практике работы не вижу. Добрый день. Реально сталкивался с ситуацией, когда устройство на базе PCI Express Block Plus х4 в некоторых материнках в слотах х16 работает как х4, а в некоторых, как х1. Проверить как опознал ХОСТ устройство можно с помощью программки pci32.exe. Архив в прикрепленном файле. Запуск программы из командной строки pci32.exe > pcicfg.txt запишет информацию обо всех найденных pci и pcie устройствах в файл pcicfg.txt. Удачи.
Прикрепленные файлы
pci32.zip ( 266.87 килобайт )
Кол-во скачиваний: 19
|
|
|
|
|
Dec 26 2011, 06:58
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513

|
Andrew Su, спасибо за програмку, но дело у меня в другом. На данном этапе наконец полностью понял суть проблемы: единственный корректный х1 линк от процессора подается на второй порт в одном из сдвоенных трансиверов виртекса. Если я пытаюсь назначить в корке х1 линк на этот порт, ise ругается что это можно делать только на первый из портов трансивера. Вообще единственное что я могу присвоить моему правильному порту, это нечетный номер в соединении (1, 3 и т. д.). Однако как написано в мануале, если я создал в виртексе шину скажем на 4 линии, то он может ее самостоятельно обрубить до х1 только в том случае, если рабочей будет нулевая линия в этой шине (а не просто одна из линий). На форуме xilinx проскакивала информация о том, что в сдвоенных трансиверах можно инвертировать их номера (нулевой станет первым, первый станет нулевым) поменяв их назначение в одном из файлов корки (pcie_gt_wrapper), однако пока не смог понять как. Так получается, что для моих неудачно выбранных покупных плат это единственный вариант заработать - повесить нулевую линию шины pcie на первый трансивер в сдвоенном блоке.
Прошу прощения за сбивчивое объяснение. Как и раньше буду рад подсказкам, хотя проблема и достаточно редкая.
|
|
|
|
|
Dec 26 2011, 13:02
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(Jack_of_Shadows @ Dec 26 2011, 10:58)  Andrew Su, спасибо за програмку, но дело у меня в другом. На данном этапе наконец полностью понял суть проблемы: единственный корректный х1 линк от процессора подается на второй порт в одном из сдвоенных трансиверов виртекса. Если я пытаюсь назначить в корке х1 линк на этот порт, ise ругается что это можно делать только на первый из портов трансивера. Вообще единственное что я могу присвоить моему правильному порту, это нечетный номер в соединении (1, 3 и т. д.). Однако как написано в мануале, если я создал в виртексе шину скажем на 4 линии, то он может ее самостоятельно обрубить до х1 только в том случае, если рабочей будет нулевая линия в этой шине (а не просто одна из линий). На форуме xilinx проскакивала информация о том, что в сдвоенных трансиверах можно инвертировать их номера (нулевой станет первым, первый станет нулевым) поменяв их назначение в одном из файлов корки (pcie_gt_wrapper), однако пока не смог понять как. Так получается, что для моих неудачно выбранных покупных плат это единственный вариант заработать - повесить нулевую линию шины pcie на первый трансивер в сдвоенном блоке.
Прошу прощения за сбивчивое объяснение. Как и раньше буду рад подсказкам, хотя проблема и достаточно редкая. Странное что-то. Два канала GTP обозначаются одним констрейнтом, а канал выбирается по распиновке клока и данных самим исе. У Вас что ucf был неправильный?
|
|
|
|
|
Dec 26 2011, 14:27
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513

|
Констрейнт для сдвоенного GTP один и клок на него один. А вот данные строго определены - на нулевой трансивер четные линии шины, на первый нечетные. Вот по этому поводу рисунок из мануала:
Да и как канал может быть выбран по распиновке данных, если данные самим ise разрешается вешать только на нулевые трансиверы (в остальных случаях вылазит ошибка).
Сообщение отредактировал Jack_of_Shadows - Dec 26 2011, 14:29
|
|
|
|
|
Dec 26 2011, 17:37
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(Jack_of_Shadows @ Dec 26 2011, 17:27)  Констрейнт для сдвоенного GTP один и клок на него один. А вот данные строго определены - на нулевой трансивер четные линии шины, на первый нечетные. Вот по этому поводу рисунок из мануала:
Да и как канал может быть выбран по распиновке данных, если данные самим ise разрешается вешать только на нулевые трансиверы (в остальных случаях вылазит ошибка). Действительно, странно выбрана распиновка плис. В таблице 5-3 вообще сказано, что для FX30T можно использовать только трансивер X0Y3 для PCIEx1. В Вашем ucf пины указаны только для тактовой, как на схеме подключены пины rx tx пары?
|
|
|
|
|
Dec 27 2011, 07:08
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513

|
По поводу таблицы с поддерживаемыми трансиверами, в пункте перед ней "Relocating the Endpoint Block Plus Core" сказано, что они являются рекомендуемыми ввиду их максимальной близости к физическому блоку PCI Express, переход к другим трансиверам возможен, однако в этом случае xilinx не предоставляет техническую поддержку  (в итоге максимальная частота проекта получалась в районе 239 МГц, и он отлично работал при 100 МГц опоры в обычном PC. Предполагаю, что с X0Y3 он бы и на 250 МГц завелся, однако в моей плате этот GTP занят SATA интерфейсом). Вообще на моей плате распиновка такова: Единственная возможная для использования x1 линия: X0Y2, RX - MGTRXP1_112 (M1) & MGTRXN1_112 (L1), TX - MGTTXP1_112 (N2) & MGTTXN1_112 (M2) Возможные тактовые линии: X0Y1, T4 & T3 (идут через драйверную микросхему с PEx16_x8_x4_Clkp/n) X0Y0, AB4 & AB3 (идут напрямую с PEx1_3Clkp/n). Я понимаю что нет ничего хорошего в том, что данные подключены к одному GTP, а клоки к другому, но уж что имею. Линии которые предполагались к использованию как основные, со стороны процессора подключены к шине PEG (PCI Express Graphics, заточена исключительно под работу с видеокартами, не может масштабироваться на меньше чем х16). Пока моя основная идея возможного костыля в такой ситуации это делать шину х4, захватывая оба нужных трансивера, и заставить ее завестись как х1. И здесь пока я упираюсь в ограничения приведенной мною выше таблицы.
|
|
|
|
|
Mar 19 2013, 12:12
|
Участник

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

|
Здравствуйте. Я пытаюсь разобраться с кодом PIO от Xilinx, который присутствует в корке PCIe. В этом примере вся память разбита на области по 2 Кб(всего 4 области). С компа обращаюсь к этой памяти через прогу RW-Everything. из даташита на эту корку вычитал следующее: Each space is implemented with a 2 KB memory. If the corresponding BAR is configured to a wider aperture, accesses beyond the 2 KB limit wrap around and overlap the 2 KB memory space. Попробовал записать произвольные значения в память начиная с адреса, содержащегося в BAR. Действительно, как сказано в даташите, значения повторяются каждые 2 Кб. Но не как не пойму каким образом обращаться к остальным областям? В исходниках выбор области осуществляется исходя из значения двухбитового префикса адреса, который поступает в блок PIO_RX_ENGINE по шине AXI. Но как его задавать я так и не понял. Может каждая область должна привязываться к своему BARу? При конфигурировании корки я активировал только один BAR
|
|
|
|
|
Mar 20 2013, 04:59
|
Местный
  
Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339

|
внутри PIO_RX_ENGINE в зависимости от типа пришедшего пакета есть ряд присвоений этому адресу: например, Код wr_addr <= #TCQ {region_select[1:0],m_axis_rx_tdata[10:2]}; region_select выбирается чуть ниже, этот case можно настроить для работы по разным BAR и получить доступ к разным 2К. Код assign mem64_bar_hit_n = ~m_axis_rx_tuser[2]; assign io_bar_hit_n = 1'b1; assign mem32_bar_hit_n = ~m_axis_rx_tuser[4]; assign erom_bar_hit_n = ~m_axis_rx_tuser[8];
always @* begin case ({io_bar_hit_n, mem32_bar_hit_n, mem64_bar_hit_n, erom_bar_hit_n})
4'b0111 : begin region_select <= #TCQ 2'b00; // Select IO region end // 4'b0111 .....
|
|
|
|
|
Mar 20 2013, 06:45
|
Участник

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

|
toshas, благодарю за ответ! А можно ли расширить эти области памяти хотябы до 64Кб? Адрес, который выделяется из пакета, пришедшего по AXI имеет разрядность всего 10 бит(с учетом префикса). Этого уж явно не хватит на 64Кб  и еще где бы почитать про формат пакета от корки PCIe, приходящий по AXI?
|
|
|
|
|
Mar 21 2013, 10:20
|
Участник

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

|
Правильно ли я понимаю, что в примере используется не весь адрес, который содержится в пакете, а только младшие 8 бит, а остальная часть отбрасывается?
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|