dmitry-tomsk 0 19 декабря, 2011 Опубликовано 19 декабря, 2011 · Жалоба Так, сорри, но я ввел вас в заблуждение. Мне таки позволили расковырять рабочий PC, и я вставил плату с плисом туда (производитель для этого специальную переходную плату дает). Загрузилось сразу же - дефолтная прошивка с установленными в системе драйверами даже объявила о себе в диспетчере устройств, прошивка сгенерированная core generator вроде как тоже (по крайней мере она теперь висит в состоянии L0, как обнаружить ее в системе пока не допер. Все найденные для сканирования pci-шины проги (pcitree, pcidirect) под win7 не запустились). Получается дело в рут комплексе - MSM945. Но это уже не совсем к этому топику относится Попробуйте bios покопать, power save и прочее. Корегенераторная прошивка ставится как memory controller. Попробуйте мою прошивку, надо только jungo поставить сначала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jack_of_Shadows 0 20 декабря, 2011 Опубликовано 20 декабря, 2011 · Жалоба Появились еще вопросы к знатокам PCI Express Block Plus: Если я создаю прошивку скажем PCIe x2, однако на плате физически только одна из этих линий соединена с процессором, возможно ли чтобы прошивка с процессором правильно договорились о ширине шины и сами переключились на х1 ? Подсознательно понимаю что такое должно быть возможно, однако на практике работы не вижу. В виртексе каждый GTX трансивер имеет тактовый вход. Но если вдруг мне понадобилось использовать определенный трансивер, но тактовый сигнал брать с другого (из-за ошибочной разводки платы), ISE выдает ошибку что-то вроде "When using a GTP/GTX with a REFCLK coming from anIBUFDS element near another GTP/GTX, each GTP in between the source and destination must be instantiated in the correct manner (See AR 33473). If you don't instantiate these other GTP tiles the software tools will route the REFCLK correctly, but the design may not work in hardware." В указанном AR мало чего понял. Если кто сталкивался, подскажите от чего оттолкнуться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 22 декабря, 2011 Опубликовано 22 декабря, 2011 · Жалоба Появились еще вопросы к знатокам 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jack_of_Shadows 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба Andrew Su, спасибо за програмку, но дело у меня в другом. На данном этапе наконец полностью понял суть проблемы: единственный корректный х1 линк от процессора подается на второй порт в одном из сдвоенных трансиверов виртекса. Если я пытаюсь назначить в корке х1 линк на этот порт, ise ругается что это можно делать только на первый из портов трансивера. Вообще единственное что я могу присвоить моему правильному порту, это нечетный номер в соединении (1, 3 и т. д.). Однако как написано в мануале, если я создал в виртексе шину скажем на 4 линии, то он может ее самостоятельно обрубить до х1 только в том случае, если рабочей будет нулевая линия в этой шине (а не просто одна из линий). На форуме xilinx проскакивала информация о том, что в сдвоенных трансиверах можно инвертировать их номера (нулевой станет первым, первый станет нулевым) поменяв их назначение в одном из файлов корки (pcie_gt_wrapper), однако пока не смог понять как. Так получается, что для моих неудачно выбранных покупных плат это единственный вариант заработать - повесить нулевую линию шины pcie на первый трансивер в сдвоенном блоке. Прошу прощения за сбивчивое объяснение. Как и раньше буду рад подсказкам, хотя проблема и достаточно редкая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба Andrew Su, спасибо за програмку, но дело у меня в другом. На данном этапе наконец полностью понял суть проблемы: единственный корректный х1 линк от процессора подается на второй порт в одном из сдвоенных трансиверов виртекса. Если я пытаюсь назначить в корке х1 линк на этот порт, ise ругается что это можно делать только на первый из портов трансивера. Вообще единственное что я могу присвоить моему правильному порту, это нечетный номер в соединении (1, 3 и т. д.). Однако как написано в мануале, если я создал в виртексе шину скажем на 4 линии, то он может ее самостоятельно обрубить до х1 только в том случае, если рабочей будет нулевая линия в этой шине (а не просто одна из линий). На форуме xilinx проскакивала информация о том, что в сдвоенных трансиверах можно инвертировать их номера (нулевой станет первым, первый станет нулевым) поменяв их назначение в одном из файлов корки (pcie_gt_wrapper), однако пока не смог понять как. Так получается, что для моих неудачно выбранных покупных плат это единственный вариант заработать - повесить нулевую линию шины pcie на первый трансивер в сдвоенном блоке. Прошу прощения за сбивчивое объяснение. Как и раньше буду рад подсказкам, хотя проблема и достаточно редкая. Странное что-то. Два канала GTP обозначаются одним констрейнтом, а канал выбирается по распиновке клока и данных самим исе. У Вас что ucf был неправильный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jack_of_Shadows 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 (изменено) · Жалоба Констрейнт для сдвоенного GTP один и клок на него один. А вот данные строго определены - на нулевой трансивер четные линии шины, на первый нечетные. Вот по этому поводу рисунок из мануала: Да и как канал может быть выбран по распиновке данных, если данные самим ise разрешается вешать только на нулевые трансиверы (в остальных случаях вылазит ошибка). Изменено 26 декабря, 2011 пользователем Jack_of_Shadows Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба Констрейнт для сдвоенного GTP один и клок на него один. А вот данные строго определены - на нулевой трансивер четные линии шины, на первый нечетные. Вот по этому поводу рисунок из мануала: Да и как канал может быть выбран по распиновке данных, если данные самим ise разрешается вешать только на нулевые трансиверы (в остальных случаях вылазит ошибка). Действительно, странно выбрана распиновка плис. В таблице 5-3 вообще сказано, что для FX30T можно использовать только трансивер X0Y3 для PCIEx1. В Вашем ucf пины указаны только для тактовой, как на схеме подключены пины rx tx пары? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jack_of_Shadows 0 27 декабря, 2011 Опубликовано 27 декабря, 2011 · Жалоба По поводу таблицы с поддерживаемыми трансиверами, в пункте перед ней "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. И здесь пока я упираюсь в ограничения приведенной мною выше таблицы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jack_of_Shadows 0 27 декабря, 2011 Опубликовано 27 декабря, 2011 · Жалоба И снова спасибо всем кто пытался помочь, наконец-то добился связи своих двух плат. В итоге заработал вариант, который я описал в предыдущем посте. Трансиверы в сдвоенном GTX_DUAL блоке удалось поменять местами с помощью правки соответствующего файла корки - pcie_gtx_wrapper.v, путем изменения в списке подключения всех 0 и 1 местами (например .RXN0(GT_RXN[i+0]), и .RXN1(GT_RXN[i+1]), на .RXN1(GT_RXN[i+0]), и .RXN0(GT_RXN[i+1]),) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lixlex 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба Здравствуйте. Я пытаюсь разобраться с кодом 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба внутри 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 ..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lixlex 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба toshas, благодарю за ответ! А можно ли расширить эти области памяти хотябы до 64Кб? Адрес, который выделяется из пакета, пришедшего по AXI имеет разрядность всего 10 бит(с учетом префикса). Этого уж явно не хватит на 64Кб :( и еще где бы почитать про формат пакета от корки PCIe, приходящий по AXI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба конечно, для этого нужно указать требуемый объем BAR, а затем увеличить разрядность шины адреса в примере и делать присвоение не со 2 по 10 биты, а со 2 по 16 или больше. адрес передается 32х битный в пакете. формат пакета определен протоколом PCIe и описан в спецификации. на шину AXI разрядностью 64бита ложится по два DW из пакета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lixlex 0 21 марта, 2013 Опубликовано 21 марта, 2013 · Жалоба Правильно ли я понимаю, что в примере используется не весь адрес, который содержится в пакете, а только младшие 8 бит, а остальная часть отбрасывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 21 марта, 2013 Опубликовано 21 марта, 2013 · Жалоба именно так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться