Jump to content

    

bogaev_roman

Свой
  • Content Count

    1094
  • Joined

  • Last visited

Everything posted by bogaev_roman


  1. Добрый день, Уважаемые форумчане. Возник вопрос - какими настройками в квартусе можно поднять крутизну изменения выходного сигнала стандарта lvds (slew rate/current strength/termination)? Не нравится нестабильность выходного сигнала, хочется уменьшить, беглый осмотр документации результатов не дал. Для входа lvds помогло INPUT_TERMINATION DIFFERENTIAL.
  2. Error (169303): I/O standard LVDS on the clkO_1_2_l0 I/O pin cannot have Slew Rate logic option setting 2 Это если в .qsf принудительно прописать, в pin planner вообще неактивна установка эта - пишет бред - настройка возможна только для выходов и двунаправленных портов.
  3. Добрый день, уважаемые форумчане. Поставли задачу - получить максимальную пропускную способность для трансивера. Условия - чип 5agxfb5k4, в банке 6 трансиверов, реально подключены 4 (остальные - 1 и 5 - не подклюены), логические каналы должны быть независимы (т.е. объединять их нельзя). На данный момент не могу определиться с конфигурацией (в режиме 2.5G ethernet phy все работает, 5G для данного кристалла подключить не получается, сейчас смотрю в сторону native phy - но там, по памяти, какие-то проблемы были с клоковыми деревьями). Если кто решал что-нибудь подобное - пните в нужную сторону. Спасибо!
  4. Разобрался - требуется создать один reconfiguration controller на все линки, при этом указав в настройках соответсвующую группировку (в моем случае 4 1-lane трансивера, в каждом по два канала для реконфигурации, соответственно группировка 2,2,2,2). Ну и после разводки все как описано в документации - 4 трансивера на местах, одно место под TX_PLL , одно свободно (все в одном банке).
  5. Что-то не могу понять, каким образом можно расшарить reconfiguration controller на несколько независимых custom phy? Создал 2 независимых custom phy (number of line - 1, PMA bonding mode - x1, enable lane bonding - off), при этом требуется два интерфейса реконфигурации - один на трансивер, второй на PLL. Далее создаю два идентиных регонфигуратора (number of reconfiguration interface -2, optional interface grouping - пусто). Все соединяю и на выходе получаю ошибку - каналы с разными реконфигураторами не могут находиться в одном триплете, но по идее сам квартус (согласно xcvr_user_guide, 17-59) должен был расшарить и реализовать только один реконфигуратор. Что не так делаю? Может кто-нибудь скинет ссылку на пример подобной реализации? Спасибо.
  6. Что за ПЛИС? Если пользуетесь квартусом, то можно с помощью timequest.
  7. Можно попробовать сделать 4 параллельные семы приема на вс длину пакета. Каждая сема тактируется частотами 400МГ, сдвинутыx на 90 градусов. Потребуется 3 вещи: 1. Сxема решения - с какой именно забирать данные (подобные реализаии видел, потребутся служебные символы вначале/коне пакета). 2. орошего выравнивания по времени для водныx триггеров сем и частот (вручну точно придется прибивать). 3. Плавание частоты передащей части от приемной за интервал передачи пакета не более чем на четверть периода символа. Каким образом все ляжет на конкретно Ваш чип - ответить не могу - не работал с ним. ЗЫ.. Извинясь за написание - проблема с ПО - часть символов не печатается.
  8. Альтера гарантирует работоспособность кристаллов, если в таймквесте все временные ограничения прописаны грамотно и выполняются. Что даст Вам дополнительно временное моделирование (функционал можно проверить на модели, полные задержки после трассировки можно посмотреть в таймквесте)?
  9. Плохо разводилось (приходилось гвоздями прибивать клокконтрол), в документации советуют 90 градусов ставить. В трех проектах используется один и тот же контроллер, везде без сдвига. Работает стабильно, кстати, в режиме точка-точка при грамотном размере программного буфера UDP работает без пропусков, хотя все программисты утверждают о невозможности этого :biggrin:
  10. В моем варианте по документации очень хитро все расписано относительно периода. У Вас проще. Я сейчас тупить могу, но как я понял: для выходных задержек все прописывается относительно фронта/среза 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 настроена - при разных настройках временной анализ нулевой точки может отличаться. Для входных/выходных ограничений это нормально - нас же интересует анализ в том числе и относительно клока.
  11. Можно ссылку на документацию, согласно которой ограничения задавались? У меня просто на марвелл ограничения другие стоят #************************************************************** # 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 задержка огромная - т. е. там походу холд не вытягивается еще или запас очень маленький (он задержку подкрутил ненулевую).
  12. Документация и поддержка со стороны Миландра по сравнению ВЗПП - высший уровень :biggrin: Касаемо FPGA - работал активно с 5576XC4T (аналог EPF10K200S), работает стабильно, согласно заданному алгоритму во всем диапазоне длительное время. Ложка дегтя при разработке осталась - технология отличается от альтеровской, временной анализ делается для альтера, при попытке связаться с разработчиками и выяснить данный момент - пишите официальные письма через голову и ждите ответа непонятно сколько (неофициально сказали, что работать будет, так как технология лучше, но риски Ваши и никто Вам этого официально не скажет). Если бы сейчас была возможность поменять - взял бы их последние поделки (для EPF10K200S из-за особенностей архитектуры невозможно для отладки использовать сигналтап, кроме этого - отсутствует возможность использовать timequest и нормальный chipplanner, что сильно задерживает процесс отладки и самой разработки). Что касается возможностей - попробуйте собрать для начала проект для циклона2 и посмотрите как все ляжет по ресурсам и временному анализу, потом возьмите аналог и найдите отличия в архитектуре, тогда все будет более-менее понятно.
  13. При работе с трансиверами я именно так и делаю. Но Вы же хотели избавиться от фифо?
  14. С точки зрения архитектуры этот новый клок должен пройти через клокконтрол (или как там его), и задержка у него будет приличная. Возможно придется после этого добавить в ограничениях мультицикл (условно для задержки на один такт сделать анализ по setup=2, а hold=1). Но вот вопрос - если у Вас несколько трансиверов будет, для каждого создавать новый клок? Я vhdl не знаю, но насколько понимаю, описание некорректно. gl_clk0 <= rx_clk0; Если это комбинаторика, то квартус по умолчанию новый клок выкинет за ненадобностью и ограничения поставить не получится, потребуется корку ставить (altclkctrl, раньше так называлась, могу ошибаться). Ну и по процессам написал выше - ограничения по умолчанию из-за большой задержки не будут выполняться.
  15. Для Вас это неожиданностью стало? Посмотрите теперь каким клоком тактируется логика, которая плохо разводится. Если эта тактовая - периферийная, то можно попробовать ее сделать глобальной через assignment editor, но не переусердствуйте - глобальные дорожки ценный ресурс. Лучше добавить одну новую общую частоту, сделать ее глобальной и перетактировать логику (не зная архитектуру проекта сложно что-либо посоветовать точнее, самый главный вопрос - каким образом Вы параллельные данные используете на выходе приемника - на какой частоте).
  16. Посмотрите как квартус развел клоки - может он их региональными сделал или периферийными (скрипты некоторых корок автоматом прописывают эти ограничения).
  17. to Sprite Посмотрел я на времянку и мозг отказал минут на 5 - как машина может находиться одновременно в нескольких состояниях? Там вообще мусор должен быть на моделировании - начальное состояние не определено - либо сброс добавьте, либо начальное условие при инициализации. Или это картинка не моделирования, а сигнал тап?
  18. Цитата(MegaVolt @ May 4 2018, 11:13) Слово ручное применялось для обозначения того что мы сами это настраиваем. Алгоритм настройки само собой я не указывал. И уровень его сложности может быть любым. Верно. По этому стоит внимательно выбирать банки до начала разводки. Тогда я невнимательно прочитал и неправильно Вас понял.
  19. Цитата(dm.pogrebnoy @ May 4 2018, 09:43) bogaev_roman На самом деле для высокоскоростных АЦП редко можно выставить ограничения статически. В связи с разбросом min/max задержек на больших частотах ограничения банально не сходятся. Приходится применять динамическое выставление задержек, например по тренировочной последовательности, либо при помощи фазового детектирования внутри ПЛИС. Это так, собственно высокоскоростные интерфейсы, скажем DDR3, и работают аналогично. Я пытался донести мысль о том, что в случае ручного выставления значений на программируемых задержках в корне неверно игнорировать ограничения на входные интерфейсы и за основу брать цифры на максимальное быстродействие из документации. Естественно, что в случае периодической подстройки задержек весь разброс нивелируется. И, на сколько я помню, в кинтекс не во всех лапах есть эти задержки, но тут могу ошибаться.
  20. Цитата(MegaVolt @ May 3 2018, 17:52) От специального IOшного клокового пина до триггера фиксированно. На самом деле нет. Причина в технологическом разбросе и на временном анализе это учитывается (я умолчу пока про температуру и опорное напряжение). Если глубже копнуть литературу, то при рассчете setup/hold учитывается не просто время распространения сигнала от точки А до Б, а минимальное/максимальное время распространения. И разница эта тем больше, чем больше расстояние от А до Б. Да, для клоковых линий этот разброс меньше, чем для обычных сигнальных, но он есть. Можете сами посмотреть любой путь от триггера до триггера, желательно, чтобы они находились не рядом (разница будет видна лучше). Кроме того, если поменять временную модель на анализе (это температура и напряжение), то пути для рассчетов только setup (ну или hold) будут существенно отличаться. А теперь вопрос - какое значение программируемой задержки Вы будете выставлять, если абсолютные значения максимальной/минимальной задержки неизвестны, анализатор эти значения не выдаст, они же не заданы? ЦитатаЕсли мы сами подстраиваем задержку каждого пина то нет ЗЫ.. Вообще говоря была тема несколько месяцев назад про задержку внутри FPGA, там я приводил цифры для arriaV не самой жирной. Смысл был примерно такой - сигнал проходит через всю FPGA, на входе/выходе регистр в io буфере, разброс абсолютных задержек - несколько нс в зависимости от типа модели.
  21. Цитата(MegaVolt @ May 3 2018, 17:01) Фокус в том что на каждую линию данных есть своя уникальная задержка в кристалле которую можно подкручивать с ps шагом. Это можно сделать автоматически или ручками. И получить нужный сетап и холд. Иными словами плис способна выдать любую времянку не выходящую за ограничение 741МГц для данного кристалла. С любыми фазовыми отношениями. Т.е. мы имеем 2нс такт. Минус джиттер. Оставшиеся 1 с хвостиком наны могут быть разделены на setup/hold произвольным образом по воле разработчика. Т.е. согласование с входными и выходными цепями если первый и последний триггер лежит в пэде не является проблемой или ограничением. Проблемы и ограничения они внутри плис от первго триггера до последнего. Это кстати позволяет компенсировать отсутствие выравнивания при разводке параллельных шин. Что сильно упрощает разводку. Т.е. временные ограничения на входные интерфейсы не нужны? Вопрос в лоб - время распространения сигнала от пина клока до тактового входа триггера в io-буфере фиксированное при рассчете setup/hold временного анализатора?
  22. Цитата(MegaVolt @ May 3 2018, 16:21) Про set_input_delay не очень понял. Это откуда переменная? В даташите (АЦП/ЦАП) указаны setup и холд на данные относительно клока - максимальное время распространения до фронта и минимальное время удержания после (своими словами). Это нестабильности и для правильного временного анализа их требуется прописать, если Вы используете ISE и UCF, то там set_input_delay аналогичен OFFSET IN, в вивадо визард автоматически создает ограничения на входные/выходные интерфейсы в .sdc формате согласно той временной диаграмме, которую Вы задаете. ЦитатаНо одно я знаю точно если входы по паспорту тянут 700МГц значит эти 700МГц туда могут аехать ибо расстояние от физической ножки до первого триггера который в пэде оно фиксированно и заданно разработчиком кристалла. Да, а расстояние от пина клока (клокового буфера, выхода PLL или чего там еще) до тактового входа всех триггеров тоже фиксированное и одинаковое? А если производитель говорит, что skew по всей разрядности данных 1ns, а разработчик ПП еще накинет немного? А еще ради интереса посмотрите время распространения сигнала от пина до первого триггера в fast моделе, результат будет немного отличаться...
  23. Цитата(MegaVolt @ May 3 2018, 15:58) Обижаете. 12 разрядов. Но пока ножки раскидывает сам софт то количество разрядов мало на что влияет. Сетап холд не заданы только для входных данных. Но легко подкручиваются на idelay. Т.е. анализ идет только от триггера до триггера, если да, то охотно верю? Прикрутите set_input_delay минимальные, если данные идут вместе с клоком - там результаты другие будут, хотя 500МГц вытащить при свободой разводке может и удастся. ЗЫ. Вспомнил, в прошлом году тестовый проект собирал на кинтекс с 450МГц опорой и 4-разрядными данными в режиме DDR, с идеальными setup/hold растаскивалось с трудом. Но то DDR, так что в режиме SDR вообще должно работать без проблем на 500.
  24. Цитата(MegaVolt @ May 3 2018, 15:41) Вот прямо сейчас разложил на самом мелком кинтексе простейшую схемку с линией задержки переключаемую от 2 до 6. Если разрешить выбирать ножки как ему угодно максимальная тактовая выходит 740.741MHz Это как я понимаю 1 разряд, а если 12? А потом еще реальные цифры из даташита на setup/hold во временные ограничения добавить.
  25. Цитата(_pv @ May 3 2018, 13:50) а он не должен по умолчанию сам в autonegotiation максимальную скорость выбирать? ну и какая-то минимальная конфигурация bootstrap ногами тоже выбирается. Должен, но для правильной работы, помимо зажать tx_en в 1 и гнать данные, придется еще документацию почитать, посмотреть куда чего подключить, выбрать правильно источник внешнего тактового генератора и прописать временные ограничения на входы-выходы, потом пакет еще собирать. А для uart на lvds - пропустил через цепочку триггеров на повышенной частоте и все.