Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приём данных в ПЛИС по внешнему клоку
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
dxp
Всем привет!

Возможно, тема уже обсуждалась в том или ином виде, но я не заметил, хотя форум читаю регулярно. Поэтому предлагается обсуждение.

Вопрос, собственно, вот в чём. Дано: ПЛИС и некое внешнее цифровое устройство, с которым ПЛИС обменивается данными, причём в этом обмене клок идёт с внешнего устройства на ПЛИС. Соответственно, на ПЛИС нужно принять поток, имея устойчивую синхронизацию, не зависящую от таких факторов, как изменение температуры, зависимость от конкретного образца/партии микросхем и т.п.

Если клок внешнего устройства относительно низкочастотен по отношению к внутреннему клоку ПЛИС, то ситуация выглядит простой: пропускаем все входные сигналы, включая клок внешнего устройства, через синхронизаторы и работаем с полученными внутренними сигналами обычным образом.

Но если клок внешнего устройства соизмерим или больше внутреннего клока ПЛИС, тут остаётся один путь - заводить внешний клок внутрь, организовывать для него клоковый домен, в котором принимать данные (которые потом внутри можно отдавать в другие клоковые домены, например, через двухклоковое FIFO). Вот тут и возникает самый интересный вопрос: как организовать внутренний клок, синхронный с внешним для уверенного приёма данных. Насколько мне известно, существует два подхода.

  1. Подача внешнего клока на I/O пин ПЛИС с дальнейшей трассировкой на глобальный клок, которым и тактировать приём данных.
  2. Подача внешнего клока на специальный пин ПЛИС, который ведёт на вход ФАПЧ, включаемой в режиме zero-compensation (в терминах Altera).

В первом случае необходимо добиться, чтобы клок, пройдя через внутренние трассировочные ресурсы ПЛИС, был приемлемо сфазирован по отношению к данным. Видел, что этого добиваются введением констрейнов задержки (set_delay). Вопрос: неужто этот способ даёт возможность добиться в различных условиях (климатика, зависимость от экземпляра и т.д.) согласованности между полученным указанным образом внутренним клоком и внешними данными, чтобы их (данные), например, можно было безопасно и надёжно захватывать прямо во входных триггерах I/O элементов ПЛИС?

Во втором случае, вроде, теоретически всё хорошо - все пути являются, что называется, dedicated, синтезатор и ПЛИС обеспечивают надёжную организацию согласования клока и данных. Интересует реальный опыт - кто так делал и каков результат? Какие частоты реально использовались?

В общем, интересует любая информация по обозначенной теме: теория, практические достижения и т.д. Практический опыт особенно интересен, как в плане подхода, так и в нюансах. Конкретные примеры тоже в кассу: какие ПЛИС, какие внешние устройства использовались?

blackfin
Цитата(dxp @ Jun 19 2014, 10:44) *
В общем, интересует любая информация по обозначенной теме: теория, практические достижения и т.д. Практический опыт особенно интересен, как в плане подхода, так и в нюансах. Конкретные примеры тоже в кассу: какие ПЛИС, какие внешние устройства использовались?

Теория: AN433.
Практика: SLAA545.
warrior-2001
Цитата(dxp @ Jun 19 2014, 10:44) *
...Но если клок внешнего устройства соизмерим или больше внутреннего клока ПЛИС...


Ну если данные шпарят на 1 Ггц и необходимо их принять в ПЛИС и обработать, и всё это обычные пины - то никак. Но ведь PCIe, SRIO, Ethernet и прочее как-то работают!

Цитата(dxp @ Jun 19 2014, 10:44) *
Во втором случае, вроде, теоретически всё хорошо - все пути являются, что называется, dedicated, синтезатор и ПЛИС обеспечивают надёжную организацию согласования клока и данных. Интересует реальный опыт - кто так делал и каков результат? Какие частоты реально использовались?


Ответ зависит от типа ПЛИС и той частоты, которыю ПЛИС поддерживает. Положительный опыт - до 300 Мгц. Бывает и больше, но надо изголяться. Обычно самое трудное - обеспечить на выводах ПЛИС синхронность входных данных с опорной частотой на всём климатическом диапазоне! Вот где танцы начинаются! А внутри ПЛИС надо вытянуть частоту и радоваться жизни для второго случая.
des00
Цитата(dxp @ Jun 19 2014, 13:44) *
В первом случае необходимо добиться, чтобы клок, пройдя через внутренние трассировочные ресурсы ПЛИС, был приемлемо сфазирован по отношению к данным. Видел, что этого добиваются введением констрейнов задержки (set_delay). Вопрос: неужто этот способ даёт возможность добиться в различных условиях (климатика, зависимость от экземпляра и т.д.) согласованности между полученным указанным образом внутренним клоком и внешними данными, чтобы их (данные), например, можно было безопасно и надёжно захватывать прямо во входных триггерах I/O элементов ПЛИС?

а вы умнее поступите, сделайте региональный клок, на котором хлопает пара регистров, а потом на остальную логику, работающую от ФАПЧ. Если входной поток нормально сфазирован относительно клока, то там норм все будет. Но при желании можно автомат калибровки сделать и периодически подруливать задержками в падах на лету.
Golikov A.
Делал по обоим путям. Первый раз схему развели не верно потому завели на обычную ножку

50 МГц данные на 100 МГц клок, Спартан 6 от ксалинкс. В первом случае были здоровые задержки пока шли данные от ноги до клокового буфера, пришлось описать констрайны сетап и холд, и перейти с выставления данных по падающему фронту и приема по восходящему на работу по одному фронту, то есть данные ставились по восходящему для этого пришлось сделать мультиплексор, то есть первый бит стоял сразу из данных, а по первому клоку переключался на сдвиговый регистр, который уже спокойно ехал.

по данным разводки полностью забитая ПЛИС с 2 такими интерфейсами дала 8 нС и 12 нС на сетап данных, то есть можно получить SPI до 125 и 83 МГц.

По второму пути все гораздо оптимистичнее, и сейчас в забитой ПЛИС равезлось на 6-7 нС, то есть частоты вше плисовых. На пустой было выше.
doom13
Stratix II (EP2S30) + ADS6445 (2-Wire Interface 16xSerialization, тактовая для АЦП 61.44 MHz, скорость передачи данных по линии 491.52 Mbit/s). Тактовый сигнал от АЦП заводится на Global Clock -> PLL.
Cyclone V (5CGXFC9E6) + ADS5263 (тактовая для АЦП 61.44 MHz - скорость передачи данных по линии 491.52 Mbit/s, 100 MHz - скорость передачи данных по линии 800 Mbit/s). Тактовый сигнал от АЦП заводится на Global Clock -> PLL.
Если рассматривать АЦП от TI, то клок от АЦП заводится на ногу FPGA, которая поддерживает подключение его к PLL.
alexadmin
Могу поделиться личным фэйлом: пытался ходить первым путем с альтерой (циклон/ария). Ничерта не вышло. Временной анализ проходит успешно (сколько я времени на это положил...), но на практике не работает, даже жалкие 200 МГц (400 MSPS). В итоге использовал схему с кручением фазы принимающего клока либо задержек в пинах с предварительной калибровкой.
des00
Цитата(alexadmin @ Jun 19 2014, 19:26) *
Могу поделиться личным фэйлом: пытался ходить первым путем с альтерой (циклон/ария). Ничерта не вышло. Временной анализ проходит успешно (сколько я времени на это положил...), но на практике не работает

а фазировка данных к входному клоку не плыла случайно ? хотя бы просто пытались увидеть ее и измерить ?
dxp
Спасибо всем за дельные ответы!

QUOTE (blackfin @ Jun 19 2014, 14:17) *
Теория: AN433.
Практика: SLAA545.

Спасибо, изучаю второй документ, первый видел.

QUOTE (warrior-2001 @ Jun 19 2014, 14:27) *
Ответ зависит от типа ПЛИС и той частоты, которыю ПЛИС поддерживает. Положительный опыт - до 300 Мгц.

До 300 МГц - это приём на логике (без спец аппаратуры типа аппаратных десериалайзеров)?

QUOTE (warrior-2001 @ Jun 19 2014, 14:27) *
Бывает и больше, но надо изголяться. Обычно самое трудное - обеспечить на выводах ПЛИС синхронность входных данных с опорной частотой на всём климатическом диапазоне! Вот где танцы начинаются!

Во-от, именно этот момент меня больше всего интересует и смущает.

QUOTE (warrior-2001 @ Jun 19 2014, 14:27) *
А внутри ПЛИС надо вытянуть частоту и радоваться жизни для второго случая.



QUOTE (des00 @ Jun 19 2014, 15:13) *
а вы умнее поступите, сделайте региональный клок, на котором хлопает пара регистров, а потом на остальную логику, работающую от ФАПЧ. Если входной поток нормально сфазирован относительно клока, то там норм все будет. Но при желании можно автомат калибровки сделать и периодически подруливать задержками в падах на лету.

А чем это лучше, чем вариант два (с генерацией клока на ФАПЧ с компенсацией задержки)? Тем, что внешний клок не надо подавать на специальный (dedicated) пин?

QUOTE (doom13 @ Jun 19 2014, 17:20) *
Stratix II (EP2S30) + ADS6445 (2-Wire Interface 16xSerialization, тактовая для АЦП 61.44 MHz, скорость передачи данных по линии 491.52 Mbit/s). Тактовый сигнал от АЦП заводится на Global Clock -> PLL.
Cyclone V (5CGXFC9E6) + ADS5263 (тактовая для АЦП 61.44 MHz - скорость передачи данных по линии 491.52 Mbit/s, 100 MHz - скорость передачи данных по линии 800 Mbit/s). Тактовый сигнал от АЦП заводится на Global Clock -> PLL.
Если рассматривать АЦП от TI, то клок от АЦП заводится на ногу FPGA, которая поддерживает подключение его к PLL.

Циклончик пятый, я понял, с аппаратным десериалайзером, у которого есть своя ФАПЧ, обеспечвающая корректный внутренний клок?
А на стратиксе втором завели по второму варианту и принимали поток на логике? Неужто сия уже довольно древняя ПЛИС успевает щёлкать на частоте под полгига?

QUOTE (alexadmin @ Jun 19 2014, 18:26) *
Могу поделиться личным фэйлом: пытался ходить первым путем с альтерой (циклон/ария). Ничерта не вышло. Временной анализ проходит успешно (сколько я времени на это положил...), но на практике не работает, даже жалкие 200 МГц (400 MSPS). В итоге использовал схему с кручением фазы принимающего клока либо задержек в пинах с предварительной калибровкой.

Как я вижу, для более-менее ВЧ сигналов реальный путь - через ФАПЧ с компенсацией задержки. Осталось понять, где начинается это ВЧ в каждом конкретном случае. Вот например, есть у нас кит от терасика на третьем стратиксе, к нему есть примочка (платка) с GbE трансиверами (два штуки там стоит 88Е1111), с трансивера идёт клок RXD_CLK 125 МГц и заводится на обычную ножку ПЛИС, не на специальную. И в sdc файле прописан констрейн про задержку. Всё. Вот и интересно, то ли 125 МГц - это для этой ПЛИС не частота, но будет ли это так же хорошо, скажем, на циклоне 4, то ли, исходя из того, что это кит и работает он на столе, климатики, в общем, никакой почти нет, и на столе всё работает хорошо, будет ли так же хорошо, если понизить температуру до -40? И из чего исходить в каждом случае при оценке, годится ввод клока непосредственно или нужно его фапчевать? Ведь критериев оценки как-то с ходу не просматривается.
blackfin
Цитата(dxp @ Jun 19 2014, 16:49) *
А на стратиксе втором завели по второму варианту и принимали поток на логике? Неужто сия уже довольно древняя ПЛИС успевает щёлкать на частоте под полгига?

Так на втором стратиксе вроде как до 550 МГц с помощью ALTDDIO получали: Source Synchronous Interfaces between Altera FPGAs.
alexadmin
Цитата(des00 @ Jun 19 2014, 16:39) *
а фазировка данных к входному клоку не плыла случайно ? хотя бы просто пытались увидеть ее и измерить ?


Не. Клок был прямо от АЦП, сопровождающий данные.
doom13
Цитата(dxp @ Jun 19 2014, 15:49) *
Циклончик пятый, я понял, с аппаратным десериалайзером, у которого есть своя ФАПЧ, обеспечвающая корректный внутренний клок?

Да, так и есть.
Цитата(dxp @ Jun 19 2014, 15:49) *
А на стратиксе втором завели по второму варианту и принимали поток на логике? Неужто сия уже довольно древняя ПЛИС успевает щёлкать на частоте под полгига?

У второго стратикса тоже есть встроенные SERDES блоки, они и ипользовались. Изначально клок был заведён на "неклоковый" пин и была попытка создать свой десериалайзер на логике, но он потянул тактовую АЦП где-то 20 МГц (160 Mbps на линии). Благо, плата была разведена таким образом (светодиоды висели на пинах подключённых к Global Clock sm.gif ), что позволило перебросить тактовую на "клоковый" пин и использовать SERDES с PLL.
des00
Цитата(alexadmin @ Jun 19 2014, 20:23) *
Не. Клок был прямо от АЦП, сопровождающий данные.

я не про это, вы осцилом не пробовали посмотреть что там на самом деле ? Это я к тому, что констрейны они же рассчитываются под определенные соотношения входных сигналов и если они не те, то рассчет будет не корректный. В моей практике такое было, пока осцилом не увидел что в даташите приведены другие данные тоже была такая ситуация.

Цитата(dxp @ Jun 19 2014, 19:49) *
А чем это лучше, чем вариант два (с генерацией клока на ФАПЧ с компенсацией задержки)? Тем, что внешний клок не надо подавать на специальный (dedicated) пин?

тем что клок проходит путь через пины аналогичный данным и задержки плывут одинакого.
warrior-2001
300 МГц у меня было на логике в режиме ddr.

На самом деле для 4 и 5 поколения альтеры 250-300 МГц на логике и частота на ножку pll - и всё будет работать при условии вытягивания всех ограничений. Если же надо больше - либо бубен эксклюзивный в каждом случае и никакого реюза, либо использовать известные высокоскоростные средства.

А можно узнать, что за необходимость такая использовать большие частоты на обычную логику ПЛИС?
bogaev_roman
У меня ситуация была не та, которая важна dxp, но может кому будет интересно...
Занимался недавно прототипированием объемных устройств - более 10 стратикс4 самых жирных и там приходилось перетягивать просто огромное кол-во сигналов с одной плис на другую - больше 1000. Работала вся логика на медленной частоте от одного генератора, но т.к. требовалась передача больших объемов, то были задействованы и sstl и lvds ноги. sstl работал на частоте чего-то около 800МГц, lvds - 1200МГц. При этом был организован режим тренинга и проверка четности - работало все стабильно на нескольких прототипах на очень длительных сроках.
Тренинг lvds был организован по принципу dpa и выбором оптимальной частоты из набора 8 частот. SSTL - есть набор задержек - 64 значения и находился центр самого длинного рабочего окна по данным, эта задержка и добавлялась к клоку. Все это естественно относится к DDR регистрам, т.е. все что альтера заявляет про частоты при правильном использовании выполняется.
dxp
QUOTE (warrior-2001 @ Jun 20 2014, 11:47) *
А можно узнать, что за необходимость такая использовать большие частоты на обычную логику ПЛИС?

Да нет особой необходимости, интересуюсь в плане расширения кругозора. Реально частоты у меня будут около 200 МГц, поэтому, видимо, всё нормально, как вы подтверждаете. Это вселяет уверенность.

Вообще, предпочитаю не лезть в высокие клоки без настоятельной необходимости. Был опыт (лет 10 назад) разработки проекта на Cyclone I, там сначала один из доменов был 200 МГц, потом по мере усложнения функциональной части, оно перестало лезть по скорости, пришлось снижать, сколько можно. В итоге спустился до 160 МГц, всё вытянул, но воспоминания остались неприятные - бОльшая часть усилий и времени ушла не на разработку функциональной части, а на борьбу за скорость. На каждом шагу конвейерные задержки, мультициклы, где можно, бесконечные эксперименты с оптимизацией (ретайминги, дублирование регистров), подбор seed с запуском Design Space Explorer и т.д. В общем, с тех пор стараюсь выбрать тактовую, чтобы только хватало для реализации целевых задач и было удобно работать (например, 100 МГц - удобно оперировать величиной такта, хотя это, конечно, мелочи), что позволяет спокойно писать код, не думать на каждом шагу об мерах повышения скорости, а думать о надежности, переносимости, расширяемости.

Приём данных по внешнему [относительно] быстрому клоку - случай особый, тут можно и напрячься, выжать сколько надо. Ваша оценка порога получения "устойчивого" решения в 250-300 МГц выглядит весьма ободряюще. sm.gif

Кстати, 4-5 поколение альтеры вы имели в виду младших (циклоны) или старших (стратиксы)?
alexadmin
Цитата(des00 @ Jun 19 2014, 17:43) *
я не про это, вы осцилом не пробовали посмотреть что там на самом деле ? Это я к тому, что констрейны они же рассчитываются под определенные соотношения входных сигналов и если они не те, то рассчет будет не корректный. В моей практике такое было, пока осцилом не увидел что в даташите приведены другие данные тоже была такая ситуация.


Давненько дело было. Но насколько я помню, смотрел таки данные-клок на пинах АЦП, там было в пределах указанного даташитом. На самой FPGA, понятное дело, было не посмотреть, но в теории мне обещали skew по плате не больше 50 ps.

Кстати, в 7 семействах у хилых появилось замечательное переферийное FIFO, предназначенное как раз для того, чтобы принять данные от внешних клоков и перейти на внутренний клок. FIFO_IN зовется, если не ошибаюсь. Новый проект хочу как раз на них сделать.
warrior-2001
Цитата(dxp @ Jun 20 2014, 11:01) *
Кстати, 4-5 поколение альтеры вы имели в виду младших (циклоны) или старших (стратиксы)?


Скорее 5 арии и стратиксы. Сейчас вот с альтеровского SOC кита на 5 циклоне не могу локальный клок и до 200 МГц дотянуть. sad.gif
dxp
QUOTE (des00 @ Jun 19 2014, 20:43) *
тем что клок проходит путь через пины аналогичный данным и задержки плывут одинакого.

Прошу прощения за задержку (что сразу не задал этот вопрос): это у вас умозрительное замечание или есть какие-то практические моменты, которые указывают на это? И неужто вариант с компенсацией (выравниванием) задержки через PLL не учитывает эффект "плывут задержки"?
dsmv
Добрый день


По ходу своей работы постоянно сталкиваюсь с необходимостью принять синхронные данные с внешнего устройства. Причён тактовый сигнал как правило заходит на обычную ножку ПЛИС. В результате различных экспериментов я сделал узел автоподстройки тактовой частоты. Получилось решение, которое не зависит от партии ПЛИС, температуры и переразводки ПЛИС. Несколько раз я на этом форуме уже давал ссылку. Вот ещё раз: ctrl_dcm_phase_v8







shide_3
Цитата(dsmv @ Jun 27 2014, 15:59) *
Добрый день


По ходу своей работы постоянно сталкиваюсь с необходимостью принять синхронные данные с внешнего устройства. Причён тактовый сигнал как правило заходит на обычную ножку ПЛИС. В результате различных экспериментов я сделал узел автоподстройки тактовой частоты. Получилось решение, которое не зависит от партии ПЛИС, температуры и переразводки ПЛИС. Несколько раз я на этом форуме уже давал ссылку. Вот ещё раз: ctrl_dcm_phase_v8

здравствуйте! мне почему-то представляется, что при таком подходе не обязательно входной клок и выход DCM будут совпадать по фазе. Они могут быть и сдвинуты на 90 градусов, и при этом тоже количество нулей и единичек на выходе триггера будет равным. Поправьте пожалуйста если чего-то не понял
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.