Перейти к содержанию
    

Tue

Свой
  • Постов

    175
  • Зарегистрирован

  • Посещение

Весь контент Tue


  1. Подскажите, а вы делали так на ПЛИС Spartan-6 с одним Tile (или GTP_DUAL) блоком или с несколькими ? Есть Spartan-6 XC6SLXT25T-2FGG484 с двумя GTP-трансиверами в одном Tile. Пытаюсь понять можно ли поднять на нем одновременно PCIe x1 + Eth1G. Пока думаю что нельзя, может я ошибаюсь. Поэтому смотрю Artix-7. Выше коллеги пишут: Спасибо, буду изучать.
  2. Если использовать ПЛИС с несколькими GTP Quad, то да, думаю не должно быть препятствий. А интересует как раз ПЛИС с одним GTP Quad и одновременная реализация разных протоколов Да, в самом первом сообщение забыл написать, что PCIe хотелось бы использовать идущую в комплекте Hard IP, а не писать самому.
  3. Подскажите, можно ли в 7ом семействе XILINX (Artix7, Kintex7) на одной микросхеме (например XC7A15T FGG484) одновременно реализовать PCIe x1 и Ethernet 1G ? У этой микросхемы 4 GTP трансивера. Позволяет ли использовать один из них для одного протокола (PCIe), а другой для другого (Eth) ? В свое время у ALTERA (Intel) на Cyclone 4GX этого нельзя было делать, может быть и на 5ом (неуверен)
  4. Это происходит само собой. При запуске гостевой ОС этот кабель автоматически туда не пробрасывается (VMware). Я это делаю вручную.
  5. Не понимаю фразу "драйвера должны прогрузить в кабель прошивку". Что это значит и как это сделать?
  6. Удалось решить проблему следующим образом. Для IMPACT в Cable Setup сделал "remote", при этом на Хостовой ОС запустил cse_server. Таким образом получилось в гостевой ОС запустить прошивание и ChipScope. USB так и не поборол.
  7. Для VirtualBox ставил Extension_Pack, для VMware ставил VMware Tools. Кабель в виртуальной ОС в диспетчере устройств виден, но IMPACT его не находит. Может Win7 x32 надо ? Или какой-то VirtualBox/VMware постарее поставить ?
  8. Пробовал VirtualBox 7.0.6 - USB-кабель пробрасывается в виртуальную машину, но IMPACT не находит. После этого пробовал VMware-workstation-full-17.0.0-20800274 - USB-кабель пробрасывается в виртуальную машину, но IMPACT не находит. Система в виртуальной машине Win7 x64. У кого-нибудь получалось сидя в виртуальной машину прошивать из нее ?
  9. Глянул Ваш top.v. В принципе подключено нормально, но как-то мало выводов в XCVR_NativePHY. Вы это пробуете в железе или в моделировании ? Если в железе, то что-то подаете на прием или в loopback ? Можете сюда выложить ip-файлы для ATX_PLL, Reset_controlller и XCVR_NativePHY. Я свой reset_controller не придумывал, Альтеровский работает вполне нормально. Прикладываю свою обертку для трансивера. Здесь только ATX_PLL вынесена из этого модуля, она выше по иерархии. XCVR_eth_10g_base_r_wrap.v
  10. rx_cdr_refclk переделали на вкладке "RX PMA" ? Почему на 322.265625 ? Что мешает подавать ту же 156.25 что и для ATX PLL ? Reset_controller использовали альтеровский или самописный ? Как подключали ?
  11. Здравствуйте. Скажите, правильно ли я понимаю, что в Cyclone 10 GX убрали поддержку Multi-function PCI ? Ее ввели в Cyclone 5 GX (если я не путаю), а вот в Cyclone 10 GX опять убрали. Как теперь разрабатывать многофункциональность ? Вроде есть какой-то режим "Configuration bypass", но это все-таки не то же самое.
  12. Вот ссылка на описание этого интерфейса в документе: https://www.intel.com/content/altera-www/gl...ik1410564885345 hip_reconfig_rst_n reset signal и npor reset signal это два разных сигнала. Вот они пишут "Release the npor reset signal". Простите, а когда сделать его assert ? Документация составлена странно. Да, после рестарта компьютера действительно происходит сброс на PCIe разъеме. Но после перезагрузки компьютера через hip_reconfig интерфейс я считываю обновленное значение RevisionID. Оно не стерлось. Однако через конфигурационные чтения выдает старое, как-будто вообще ничего не изменял.
  13. Пробовал ctrl-alt-delete после прописывания, пробовал без него - результата нет. Со стороны PCIe значение не видно, хотя если читать через hip_reconfig интерфейс оно там есть. Бред. Сразу прописываешь и заниматься не надо - это всех семействах ПЛИС Altera/Intel с Hard PCIe. Мне же нужно некоторые поля, которые изначально read-only изменять в зависимости от управляющих сигналов.
  14. Здравствуйте. Использую PCIe Hard IP на Cyclone 5 GX. Понадобилось изменить read-only значения в конфигурационном пространстве корки. Документация говорит следующее: "The Cyclone V Hard IP for PCI Express reconfiguration block allows you to dynamically change the value of configuration registers that are read-only ... You must enable this optional functionality by turning on Enable Hard IP Reconfiguration in the parameter editor". Активировал его, появились сигналы вида hip_reconfig... + ser_shift_load + interface_sel. Даже приведена времянка как подавать сигналы, чтобы все было ок. Делаю все в точности как на времянке. Значения читаются-пишутся. То есть я записал, потом прочитал и вижу что читается то, что записывал. Довольно странно, что в документации нет таблицы с адресами регистров, к которым получаешь доступ выставляя адрес на hip_reconfig_address[9:0]. Опытным путем установил что адрес 0x8 это VendorID, 0x9 это DeviceID, 0xA это RevisionID. Мне вот нужен RevisionID. Пишу по этому адресу нужное мне значение, проверяю что записалось. Перезагружаю комп, читаю конфигурацию со стороны PCIe - а значение не изменилось. В связи с этим вопрос. Кто-нибудь делал такое ? У Вас получилось ? Что я сделал не так ? Делал подобное на Cyclone 4GX и все получилось. Там немного по-другому, хотя похоже. И даже в документации есть табличка с адресами регистров. Там еще есть адрес 0, по которому надо записать 0, чтобы разрешить эту Dynamic Reconfiguration
  15. Я говорил об установлении стандарта ввода-вывода пина в Assignment Editor. Там можно для пина задать LVDS - тогда он будет дифференциальным, а можно задать 2.5V - тогда он будет однополярным. Понятно что питание банков этих выводов будет 2.5В в обоих случаях.
  16. Я так и делал вначале. И почему-то rx_inclock приемной ПЛИС, на который заведен tx_outclock передающей ПЛИС оказывается в два раза выше, чем ожидаю (показывал на картинке на третьей странице в данной теме). Для rx_inclock и tx_outclock I/O Standard в назначении пинов задаю как LVDS. Если для rx_inclock меняю I/O Standard на 2.5V (хоть это и неправильно), то частота становится нормальной, ожидаемой, не в два раза выше. Для tx_outclock (который выдается из ALTLVDS_TX, если выбрана конфигурация без внешней PLL) поменять I/O Standard на 2.5V не могу, почему-то Квартус 15.0 на этапе Ассемблера крашится (возникает какая-то ошибка) Расстояние небольшое, около 2см. Тут дело не в расстоянии, а в необходимой высокой скорости передачи. GXB-трансиверы исчерпались для другого. Вчера попробовал не 600Мбит/с, а 300. Та же самая история.
  17. Это понятно :) Как это учитывать ? Из документации и каких-то разрозненных источников я понял, что до Cyclone 5 DDR использовался, начиная с Cyclone 5 там аппаратный SERDES, без DDR. Так ли это ? Вот если бы у вас стояла задача соединить два Cyclone 5 по LVDS, вы бы делали это через ALTLVDS_TX/RX ? tx_outclock выдавать вообще надо ? Или если на приемном конце разгоняем PLL в ALTLVDS_RX (в режиме External PLL или нет, неважно) от какой-то своей частоты (не tx_outclock от передатчика), то можно и не выдавать tx_outclock ? Тогда получается что принимаемые данные не привязаны ни к какой частоте, ничто не разграничивает байты. Как приемник будет понимать когда защелкивать сериализированные данные, чтобы это было надежно ? Про rx_channel_data_align да, понятно что он делает bit-slip, сдвигает биты в байте. А как добиваться в приемнике верного защелкивания самого бита (это все без DPA ибо Cyclone5) ? Ну вот есть у PLL (если делаем ALTLVDS_RX в режиме External PLL) возможность (pll_phase_en, pll_updn, pll_cntsel сигналы) динамического изменения фазы любых выходящих с нее клоков . Как понять в какую сторону и на сколько двигать, какие критерии ?
  18. Еще остались непонятными следующие вопросы: 1. Если говорим о передаче (ALTLVDS_TX) нужно ли вместе с tx_out выдавать tx_outclock ? 1.1 Если да, то что за частоту нужно выдавать, откуда ее брать ? Частоту параллельных данных (slow_clock) ? 1.2 Выдавать как I/O Standard LVDS ? Или как обычный, не диф. парой, однополярный ? 1.3 Как вообще констрейнится через sdc такой интерфейс ? 2. По приему (ALTLVDS_RX) тоже подобные вопросы. Нужно ли заводить rx_inclock ? 2.1 Он нужен просто для получения частоты fast_clock (скажем 600Мбит/с -> 600МГц) ? Могу ли для получения такой частоты (а также rx_enable, rx_coreclock) использовать обычную PLL и любую частоту для разгона PLL ? 2.2 Непонятно про сигнал rx_channel_data_align. Дергаю его, но никакого изменения. Если речь идет о многоразрядном LVDS-канале, то каждый разряд rx_channel_data_align отвечает за свою LVDS линию и их можно дергать независимо ли это не так ? 2.3 Тот же вопрос про констрейны через sdc ? Если у кого-то есть рабочий проект с LVDS-приемником/передатчиком для Cyclone 5, можно выложить тут архив проекта, касающийся только приема-передачи. Вместе с назначениями пинов и их I/O Standard ?
  19. Конечно умеет. Наберите в командной строке MATLAB'a eml_hdl_design_patterns и увидите огромное кол-во блоков (как пример), реализованных на m-языке, которые можно спокойно выводить в HDL. Так и свои собственные блоки пишутся любые.
  20. Да, обучения я предусмотрел и сделал (в модели). Но пока до этого не дошло. Мне бы с частотами разобраться.
  21. Пытаюсь разработать два независимых (один туда, другой обратно) LVDS-канала передачи данных между двумя ПЛИС Cyclone 5 GX (конкретно 5CGXFC7C6F23I7). "Путаница" в документации, практически полное отсутствие примеров завели меня в тупик и я вынужден обратиться сюда. В обоих ПЛИС делаю одинаковые ALTLVDS_TX, ALTLVDS_RX. Частота входных данных 150МГц, коэффициент сериализации 4, выходной поток 600Мбит/с на один LVDS-канал. Думаю это комфортные условия для данного кристалла. Всего 17 LVDS-каналов. ALTLVDS_TX, ALTLVDS_RX делаю НЕ в режиме "External PLL mode". То есть все частоты для работы блоки делают внутри себя сами. В ALTLVDS_TX задаю параметр "outclock divide factor (B)" равным 4, ставлю галку "Use 'tx_outclock' output port" и "Use 'tx_coreclock' output port". На входной порт ALTLVDS_TX/tx_inclock подаю 150МГц, питаю данными, выдаваемым схемой, которая запитывается от частоты tx_coreclock В ALTLVDS_RX и задавать то особо нечего. Input data rate ставлю 600Мбит/с, input clock rate clock frequency ставлю 150МГц. Выходной порт tx_outclock блока ALTLVDS_TX в одной ПЛИС соединяю с входным портом rx_inclock блока ALTLVDS_RX в другой ПЛИС. В моделировании tx_outclock выдает частоту 150МГц, в железе пока непонятно. В ModelSim все работает замечательно. В железе не работает, возникает много вопросов. 1. В документе "LVDS SERDES Transmitter/Receiver IP Cores User Guide" 2017.06.19 в таблице 2 для ALTLVDS Transmitter указаны частоты для моего (четного) коэффициента сериализации: Fast Clock = Data Rate/2 Slow Clock (outclock)= Data Rate/2*B Core Clock = Data Rate/J То есть для моего случая должы быть такие значения: Fast Clock = 300МГц. Slow Clock = 1200МГц (если буквально понимать формулу). Если понимать ее как Slow Clock = Data Rate/(2*B), то должно быть 75МГЦ. Core clock = 150МГц. В TimeQuest'е я вижу Fast Clock = 600МГц, Slow Clock = 150МГц, Core Clock (который имеет скважность 100/J = 25% в моем случае) равен 150МГц. Это первая неопределенность (фундаментальная), которая у меня возникает в разработке LVDS-канала. Возможно документация (достаточно новая) для Cyclone-семейства исходит из того, что Cyclone до 5-го используют DDIO, а в 5-ом уже используется аппаратный блок сериализации, без DDIO. Отсюда возникает эта путаница, но от осознания этого легче не становится. 2. Из-за того, что в документации я вижу одно, в ModelSim другое, а в TimeQuest третье решил вывести в SignalTAP счетчики, запитать их разными частотами и посмотреть что же получается в железе. На картинке фрагмент из SignalTAP'a. Частота SignalTAP равна 150МГц (назовем ее avl_clk). Счетчик здесь немного необычный. Считает не каждый первый такт, а каждый второй такт. Так лучше видно. 2.1 Из диаграмы видно, что первый счетчик (запитанный tx_coreclock) и второй счетчик (запитанный частотой SignalTAP avl_clk) идут одним темпом. Из этого становится понятно, что частота tx_coreclock равна avl_clk и обе равны 150МГц. 2.2 Дальше идет счетчик с частотой rx_coreclock (частота приемных десериализированных данных). Видно что он изменяется каждый первый такт. Это, как я понимаю, означает, что она в два раза выше частот avl_clk, tx_coreclock и равна 300МГц. Почему ? Непонятно 2.3 Дальше идет lvds_rx_inclk. Это tx_outclock (Slow Clock) от блока ALTLVDS_TX из соседней ПЛИС. Судя по тому, ка к меняются значения каждый такт (090h, 092h, 094h, 096h, 098h, ...) у меня складывается ощущение, что она в 4 раза выше частоты SignalTAP, то есть 600МГц. Почему ? Непонятно. Еще непонятны замирания счетчика (например на значении 0B6h на картинке) 2.4 Из-за такого поведения счетчика lvds_rx_inclk у меня нет уверенности в том, что tx_outclock равен 150МГц. Когда писал эти вопросы провел эксперимент. Подал на tx_outclock частоту не с ALTVDS_TX/tx_outclock, а частоту с PLL с гарантированно известной частотой 150МГц. Эта частота поступает с другой ПЛИС на lvds_rx_inclk в ПЛИС, с которой снимаю SignalTAP. 4-й счетчик стал считать аналогично 3-ему, то есть каждый такт менять значение. Как такое может быть, если эта частота и частота SignalTAP номинально равны (могут и быть незначительные отклонения в несколько десятков ppm) ? 3. Может быть я как-то неправильно настраиваю ALTLVDS_TX, ALTLVDS_RX ? Может кто-нибудь подсказать, как будет правильно их настроить? Что с чем соединять, чтобы получить LVDS-канал. Где какие должны быть частоты ? Поняв как правильно настроить передатчики и приемники буду двигать дальше.
  22. Тоже обнаружил что "Pre-emphasis pre-tap" и "Pre-emphasis second post-tap" в Cyclone5 не работают. Пользуюсь 14-м Квартусом, думал что дальше лучше, но не тут то было. Как говорится "ну а что вы хотели за эти деньги" :)
×
×
  • Создать...