|
Приём данных в ПЛИС по внешнему клоку, Методы и подходы. |
|
|
|
Jun 19 2014, 06:44
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Всем привет! Возможно, тема уже обсуждалась в том или ином виде, но я не заметил, хотя форум читаю регулярно. Поэтому предлагается обсуждение. Вопрос, собственно, вот в чём. Дано: ПЛИС и некое внешнее цифровое устройство, с которым ПЛИС обменивается данными, причём в этом обмене клок идёт с внешнего устройства на ПЛИС. Соответственно, на ПЛИС нужно принять поток, имея устойчивую синхронизацию, не зависящую от таких факторов, как изменение температуры, зависимость от конкретного образца/партии микросхем и т.п. Если клок внешнего устройства относительно низкочастотен по отношению к внутреннему клоку ПЛИС, то ситуация выглядит простой: пропускаем все входные сигналы, включая клок внешнего устройства, через синхронизаторы и работаем с полученными внутренними сигналами обычным образом. Но если клок внешнего устройства соизмерим или больше внутреннего клока ПЛИС, тут остаётся один путь - заводить внешний клок внутрь, организовывать для него клоковый домен, в котором принимать данные (которые потом внутри можно отдавать в другие клоковые домены, например, через двухклоковое FIFO). Вот тут и возникает самый интересный вопрос: как организовать внутренний клок, синхронный с внешним для уверенного приёма данных. Насколько мне известно, существует два подхода. - Подача внешнего клока на I/O пин ПЛИС с дальнейшей трассировкой на глобальный клок, которым и тактировать приём данных.
- Подача внешнего клока на специальный пин ПЛИС, который ведёт на вход ФАПЧ, включаемой в режиме zero-compensation (в терминах Altera).
В первом случае необходимо добиться, чтобы клок, пройдя через внутренние трассировочные ресурсы ПЛИС, был приемлемо сфазирован по отношению к данным. Видел, что этого добиваются введением констрейнов задержки (set_delay). Вопрос: неужто этот способ даёт возможность добиться в различных условиях (климатика, зависимость от экземпляра и т.д.) согласованности между полученным указанным образом внутренним клоком и внешними данными, чтобы их (данные), например, можно было безопасно и надёжно захватывать прямо во входных триггерах I/O элементов ПЛИС? Во втором случае, вроде, теоретически всё хорошо - все пути являются, что называется, dedicated, синтезатор и ПЛИС обеспечивают надёжную организацию согласования клока и данных. Интересует реальный опыт - кто так делал и каков результат? Какие частоты реально использовались? В общем, интересует любая информация по обозначенной теме: теория, практические достижения и т.д. Практический опыт особенно интересен, как в плане подхода, так и в нюансах. Конкретные примеры тоже в кассу: какие ПЛИС, какие внешние устройства использовались?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 20)
|
Jun 20 2014, 07:01
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (warrior-2001 @ Jun 20 2014, 11:47)  А можно узнать, что за необходимость такая использовать большие частоты на обычную логику ПЛИС? Да нет особой необходимости, интересуюсь в плане расширения кругозора. Реально частоты у меня будут около 200 МГц, поэтому, видимо, всё нормально, как вы подтверждаете. Это вселяет уверенность. Вообще, предпочитаю не лезть в высокие клоки без настоятельной необходимости. Был опыт (лет 10 назад) разработки проекта на Cyclone I, там сначала один из доменов был 200 МГц, потом по мере усложнения функциональной части, оно перестало лезть по скорости, пришлось снижать, сколько можно. В итоге спустился до 160 МГц, всё вытянул, но воспоминания остались неприятные - бОльшая часть усилий и времени ушла не на разработку функциональной части, а на борьбу за скорость. На каждом шагу конвейерные задержки, мультициклы, где можно, бесконечные эксперименты с оптимизацией (ретайминги, дублирование регистров), подбор seed с запуском Design Space Explorer и т.д. В общем, с тех пор стараюсь выбрать тактовую, чтобы только хватало для реализации целевых задач и было удобно работать (например, 100 МГц - удобно оперировать величиной такта, хотя это, конечно, мелочи), что позволяет спокойно писать код, не думать на каждом шагу об мерах повышения скорости, а думать о надежности, переносимости, расширяемости. Приём данных по внешнему [относительно] быстрому клоку - случай особый, тут можно и напрячься, выжать сколько надо. Ваша оценка порога получения "устойчивого" решения в 250-300 МГц выглядит весьма ободряюще.  Кстати, 4-5 поколение альтеры вы имели в виду младших (циклоны) или старших (стратиксы)?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jun 20 2014, 11:10
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Цитата(des00 @ Jun 19 2014, 17:43)  я не про это, вы осцилом не пробовали посмотреть что там на самом деле ? Это я к тому, что констрейны они же рассчитываются под определенные соотношения входных сигналов и если они не те, то рассчет будет не корректный. В моей практике такое было, пока осцилом не увидел что в даташите приведены другие данные тоже была такая ситуация. Давненько дело было. Но насколько я помню, смотрел таки данные-клок на пинах АЦП, там было в пределах указанного даташитом. На самой FPGA, понятное дело, было не посмотреть, но в теории мне обещали skew по плате не больше 50 ps. Кстати, в 7 семействах у хилых появилось замечательное переферийное FIFO, предназначенное как раз для того, чтобы принять данные от внешних клоков и перейти на внутренний клок. FIFO_IN зовется, если не ошибаюсь. Новый проект хочу как раз на них сделать.
|
|
|
|
|
Jun 23 2014, 06:17
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792

|
Цитата(dxp @ Jun 20 2014, 11:01)  Кстати, 4-5 поколение альтеры вы имели в виду младших (циклоны) или старших (стратиксы)? Скорее 5 арии и стратиксы. Сейчас вот с альтеровского SOC кита на 5 циклоне не могу локальный клок и до 200 МГц дотянуть.
--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
|
|
|
|
|
Jan 11 2016, 07:17
|
Местный
  
Группа: Участник
Сообщений: 314
Регистрация: 27-04-10
Пользователь №: 56 923

|
Цитата(dsmv @ Jun 27 2014, 15:59)  Добрый день По ходу своей работы постоянно сталкиваюсь с необходимостью принять синхронные данные с внешнего устройства. Причён тактовый сигнал как правило заходит на обычную ножку ПЛИС. В результате различных экспериментов я сделал узел автоподстройки тактовой частоты. Получилось решение, которое не зависит от партии ПЛИС, температуры и переразводки ПЛИС. Несколько раз я на этом форуме уже давал ссылку. Вот ещё раз: ctrl_dcm_phase_v8здравствуйте! мне почему-то представляется, что при таком подходе не обязательно входной клок и выход DCM будут совпадать по фазе. Они могут быть и сдвинуты на 90 градусов, и при этом тоже количество нулей и единичек на выходе триггера будет равным. Поправьте пожалуйста если чего-то не понял
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|