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

bogaev_roman

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о bogaev_roman

  • Звание
    Профессионал
  • День рождения 14.03.1984

Информация

  • Город
    Химки
  1. Добрый день, уважаемые форумчане. Поставли задачу - получить максимальную пропускную способность для трансивера. Условия - чип 5agxfb5k4, в банке 6 трансиверов, реально подключены 4 (остальные - 1 и 5 - не подклюены), логические каналы должны быть независимы (т.е. объединять их нельзя). На данный момент не могу определиться с конфигурацией (в режиме 2.5G ethernet phy все работает, 5G для данного кристалла подключить не получается, сейчас смотрю в сторону native phy - но там, по памяти, какие-то проблемы были с клоковыми деревьями). Если кто решал что-нибудь подобное - пните в нужную сторону. Спасибо!
  2. Что за ПЛИС? Если пользуетесь квартусом, то можно с помощью timequest.
  3. Можно попробовать сделать 4 параллельные семы приема на вс длину пакета. Каждая сема тактируется частотами 400МГ, сдвинутыx на 90 градусов. Потребуется 3 вещи: 1. Сxема решения - с какой именно забирать данные (подобные реализаии видел, потребутся служебные символы вначале/коне пакета). 2. орошего выравнивания по времени для водныx триггеров сем и частот (вручну точно придется прибивать). 3. Плавание частоты передащей части от приемной за интервал передачи пакета не более чем на четверть периода символа. Каким образом все ляжет на конкретно Ваш чип - ответить не могу - не работал с ним. ЗЫ.. Извинясь за написание - проблема с ПО - часть символов не печатается.
  4. Альтера гарантирует работоспособность кристаллов, если в таймквесте все временные ограничения прописаны грамотно и выполняются. Что даст Вам дополнительно временное моделирование (функционал можно проверить на модели, полные задержки после трассировки можно посмотреть в таймквесте)?
  5. Плохо разводилось (приходилось гвоздями прибивать клокконтрол), в документации советуют 90 градусов ставить. В трех проектах используется один и тот же контроллер, везде без сдвига. Работает стабильно, кстати, в режиме точка-точка при грамотном размере программного буфера UDP работает без пропусков, хотя все программисты утверждают о невозможности этого :biggrin:
  6. В моем варианте по документации очень хитро все расписано относительно периода. У Вас проще. Я сейчас тупить могу, но как я понял: для выходных задержек все прописывается относительно фронта/среза GTX_CLK - максимальное время установки 2.2. нс, минимальное время удержания 1.65. Соответственно получается (тут еще потребуется добавить нестабильность разводки по плате): set_output_delay -clock { clk125_txclk } -rise -max 2.2 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay set_output_delay -clock { clk125_txclk } -fall -max 2.2 -add_delay [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] set_output_delay -clock { clk125_txclk } -rise -min -1.65 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay set_output_delay -clock { clk125_txclk } -fall -min -1.65 -add_delay [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] Ну и при таких ограничениях производитель гарантирует работоспособность. Я не знаю как у Вас pll настроена - при разных настройках временной анализ нулевой точки может отличаться. Для входных/выходных ограничений это нормально - нас же интересует анализ в том числе и относительно клока.
  7. Можно ссылку на документацию, согласно которой ограничения задавались? У меня просто на марвелл ограничения другие стоят #************************************************************** # Set Output Delay #************************************************************** #88e1111-DS Register 20.1 = 1 Tsetup=-0.9ns/Thold=2.7ns GTX_CLK+0deg (page 218) set_output_delay -clock { clk125_txclk } -rise -max -0.9 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay set_output_delay -clock { clk125_txclk } -fall -max -0.9 -add_delay [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] set_output_delay -clock { clk125_txclk } -rise -min 2.7 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay set_output_delay -clock { clk125_txclk } -fall -min 2.7 -add_delay [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] Просто 4 нс на нестабильность - многовато получается. PS. Можно еще сдвиг по фазе убрать, плюс на самих DDIO задержка огромная - т. е. там походу холд не вытягивается еще или запас очень маленький (он задержку подкрутил ненулевую).
  8. Документация и поддержка со стороны Миландра по сравнению ВЗПП - высший уровень :biggrin: Касаемо FPGA - работал активно с 5576XC4T (аналог EPF10K200S), работает стабильно, согласно заданному алгоритму во всем диапазоне длительное время. Ложка дегтя при разработке осталась - технология отличается от альтеровской, временной анализ делается для альтера, при попытке связаться с разработчиками и выяснить данный момент - пишите официальные письма через голову и ждите ответа непонятно сколько (неофициально сказали, что работать будет, так как технология лучше, но риски Ваши и никто Вам этого официально не скажет). Если бы сейчас была возможность поменять - взял бы их последние поделки (для EPF10K200S из-за особенностей архитектуры невозможно для отладки использовать сигналтап, кроме этого - отсутствует возможность использовать timequest и нормальный chipplanner, что сильно задерживает процесс отладки и самой разработки). Что касается возможностей - попробуйте собрать для начала проект для циклона2 и посмотрите как все ляжет по ресурсам и временному анализу, потом возьмите аналог и найдите отличия в архитектуре, тогда все будет более-менее понятно.
  9. При работе с трансиверами я именно так и делаю. Но Вы же хотели избавиться от фифо?
  10. С точки зрения архитектуры этот новый клок должен пройти через клокконтрол (или как там его), и задержка у него будет приличная. Возможно придется после этого добавить в ограничениях мультицикл (условно для задержки на один такт сделать анализ по setup=2, а hold=1). Но вот вопрос - если у Вас несколько трансиверов будет, для каждого создавать новый клок? Я vhdl не знаю, но насколько понимаю, описание некорректно. gl_clk0 <= rx_clk0; Если это комбинаторика, то квартус по умолчанию новый клок выкинет за ненадобностью и ограничения поставить не получится, потребуется корку ставить (altclkctrl, раньше так называлась, могу ошибаться). Ну и по процессам написал выше - ограничения по умолчанию из-за большой задержки не будут выполняться.
  11. Для Вас это неожиданностью стало? Посмотрите теперь каким клоком тактируется логика, которая плохо разводится. Если эта тактовая - периферийная, то можно попробовать ее сделать глобальной через assignment editor, но не переусердствуйте - глобальные дорожки ценный ресурс. Лучше добавить одну новую общую частоту, сделать ее глобальной и перетактировать логику (не зная архитектуру проекта сложно что-либо посоветовать точнее, самый главный вопрос - каким образом Вы параллельные данные используете на выходе приемника - на какой частоте).
  12. Посмотрите как квартус развел клоки - может он их региональными сделал или периферийными (скрипты некоторых корок автоматом прописывают эти ограничения).
  13. to Sprite Посмотрел я на времянку и мозг отказал минут на 5 - как машина может находиться одновременно в нескольких состояниях? Там вообще мусор должен быть на моделировании - начальное состояние не определено - либо сброс добавьте, либо начальное условие при инициализации. Или это картинка не моделирования, а сигнал тап?
  14. Цитата(MegaVolt @ May 4 2018, 11:13) Слово ручное применялось для обозначения того что мы сами это настраиваем. Алгоритм настройки само собой я не указывал. И уровень его сложности может быть любым. Верно. По этому стоит внимательно выбирать банки до начала разводки. Тогда я невнимательно прочитал и неправильно Вас понял.
  15. Цитата(dm.pogrebnoy @ May 4 2018, 09:43) bogaev_roman На самом деле для высокоскоростных АЦП редко можно выставить ограничения статически. В связи с разбросом min/max задержек на больших частотах ограничения банально не сходятся. Приходится применять динамическое выставление задержек, например по тренировочной последовательности, либо при помощи фазового детектирования внутри ПЛИС. Это так, собственно высокоскоростные интерфейсы, скажем DDR3, и работают аналогично. Я пытался донести мысль о том, что в случае ручного выставления значений на программируемых задержках в корне неверно игнорировать ограничения на входные интерфейсы и за основу брать цифры на максимальное быстродействие из документации. Естественно, что в случае периодической подстройки задержек весь разброс нивелируется. И, на сколько я помню, в кинтекс не во всех лапах есть эти задержки, но тут могу ошибаться.